Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-04-2011, 19:16   #1
coleseya
Junior Member
 
Iscritto dal: Apr 2011
Messaggi: 2
[C#] Errore System.IndexOutOfRangeException

Salve,
avrei un problema di questo genere, come errore generico:

Codice:
   Error during removing user from room:System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Rooms.Room.RemoveUserFromRoom(GameClient Session, Boolean NotifyClient, Boolean NotifyKick)
qui è il codcie dorgente dove è posizionato l'errore sapete dirmi dove e come sbaglio?

Codice:
        public void RemoveUserFromRoom(GameClient Session, Boolean NotifyClient, Boolean NotifyKick)
        {
            try
            {
                if (Session == null)
                {
                    return;
                }

                if (Session.GetRooms() == null)
                    return;

                RoomUser User = GetRoomUserByRooms(Session.GetRooms().Id);

                if (User != null)
                {
                    int ID = User.InternalRoomID;
                    UserList[User.InternalRoomID] = null;

                    User.InternalRoomID = -1;
                    mGameMap[User.X, User.Y] = 0;
                }

                if (NotifyClient)
                {
                    if (NotifyKick)
                    {
                        Session.GetMessageHandler().GetResponse().Init(33);
                        Session.GetMessageHandler().GetResponse().AppendInt32(4008);
                        Session.GetMessageHandler().SendResponse();
                    }

                    Session.GetMessageHandler().GetResponse().Init(18);
                    Session.GetMessageHandler().SendResponse();
                }

                List<RoomUser> PetsToRemove = new List<RoomUser>();

                if (User != null)
                {
                    if (Session.GetRooms() != null)
                    {
                        if (!User.IsSpectator)
                        {
                            //UserMatrix[User.X, User.Y] = false;

                            ServerMessage LeaveMessage = new ServerMessage(29);
                            LeaveMessage.AppendRawInt32(User.VirtualId);
                            SendMessage(LeaveMessage);

                            if (Session.GetRooms() != null)
                            {
                                if (HasActiveTrade(Session.GetRooms().Id))
                                {
                                    TryStopTrade(Session.GetRooms().Id);
                                }

                                if (Session.GetRooms().Username.ToLower() == Owner.ToLower())
                                {
                                    if (HasOngoingEvent)
                                    {
                                        Event = null;

                                        ServerMessage Message = new ServerMessage(370);
                                        Message.AppendStringWithBreak("-1");
                                        SendMessage(Message);
                                    }
                                }

                                Session.GetRooms().OnLeaveRoom();
                            }

                            UpdateUserCount();

                            List<RoomUser> Bots = new List<RoomUser>();

                            for (int i = 0; i < UserList.Length; i++)
                            {
                                RoomUser Usr = UserList[i];
                                if (Usr == null)
                                    continue;
                                if (Usr.IsBot)
                                    Bots.Add(Usr);
                            }

                            foreach (RoomUser Bot in Bots)
                            {
                                Bot.BotAI.OnUserLeaveRoom(Session);

                                if (Bot.IsPet && Bot.PetData.OwnerId == Session.GetRooms().Id && !CheckRights(Session, true))
                                {
                                    PetsToRemove.Add(Bot);
                                }
                            }
                        }
                    }
                }

                foreach (RoomUser toRemove in PetsToRemove)
                {
                    Session.GetRooms().GetInventoryComponent().AddPet(toRemove.PetData);
                    RemoveBot(toRemove.VirtualId, false);
                }

            }
            catch (Exception e) { Logging.LogCriticalException("Error during removing user from room:" + e.ToString()); }
        }
Attento suggerimenti, Grazie!
coleseya è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2011, 22:26   #2
Ballantine
Member
 
L'Avatar di Ballantine
 
Iscritto dal: May 2004
Messaggi: 278
Ti ho sottolineato in rosso i pezzi che forse possono darti quel tipo di errore:

Codice:
        public void RemoveUserFromRoom(GameClient Session, Boolean NotifyClient, Boolean NotifyKick)
        {
            try
            {
                if (Session == null)
                {
                    return;
                }

                if (Session.GetRooms() == null)
                    return;

                RoomUser User = GetRoomUserByRooms(Session.GetRooms().Id);

                if (User != null)
                {
                    int ID = User.InternalRoomID;
                    UserList[User.InternalRoomID] = null;

                    User.InternalRoomID = -1;
                    mGameMap[User.X, User.Y] = 0;
                }

                if (NotifyClient)
                {
                    if (NotifyKick)
                    {
                        Session.GetMessageHandler().GetResponse().Init(33);
                        Session.GetMessageHandler().GetResponse().AppendInt32(4008);
                        Session.GetMessageHandler().SendResponse();
                    }

                    Session.GetMessageHandler().GetResponse().Init(18);
                    Session.GetMessageHandler().SendResponse();
                }

                List<RoomUser> PetsToRemove = new List<RoomUser>();

                if (User != null)
                {
                    if (Session.GetRooms() != null)
                    {
                        if (!User.IsSpectator)
                        {
                            //UserMatrix[User.X, User.Y] = false;

                            ServerMessage LeaveMessage = new ServerMessage(29);
                            LeaveMessage.AppendRawInt32(User.VirtualId);
                            SendMessage(LeaveMessage);

                            if (Session.GetRooms() != null)
                            {
                                if (HasActiveTrade(Session.GetRooms().Id))
                                {
                                    TryStopTrade(Session.GetRooms().Id);
                                }

                                if (Session.GetRooms().Username.ToLower() == Owner.ToLower())
                                {
                                    if (HasOngoingEvent)
                                    {
                                        Event = null;

                                        ServerMessage Message = new ServerMessage(370);
                                        Message.AppendStringWithBreak("-1");
                                        SendMessage(Message);
                                    }
                                }

                                Session.GetRooms().OnLeaveRoom();
                            }

                            UpdateUserCount();

                            List<RoomUser> Bots = new List<RoomUser>();

                            for (int i = 0; i < UserList.Length; i++)
                            {
                                RoomUser Usr = UserList[i];
                                if (Usr == null)
                                    continue;
                                if (Usr.IsBot)
                                    Bots.Add(Usr);
                            }

                            foreach (RoomUser Bot in Bots)
                            {
                                Bot.BotAI.OnUserLeaveRoom(Session);

                                if (Bot.IsPet && Bot.PetData.OwnerId == Session.GetRooms().Id && !CheckRights(Session, true))
                                {
                                    PetsToRemove.Add(Bot);
                                }
                            }
                        }
                    }
                }

                foreach (RoomUser toRemove in PetsToRemove)
                {
                    Session.GetRooms().GetInventoryComponent().AddPet(toRemove.PetData);
                    RemoveBot(toRemove.VirtualId, false);
                }

            }
            catch (Exception e) { Logging.LogCriticalException("Error during removing user from room:" + e.ToString()); }
        }
In particolare:
- User.InternalRoomID potrebbe essere null/minore di 0/maggiore della dimensione massima di UserList;
- User.X e/o User.Y potrebbero essere null/minori di 0/maggiori della dimensione massima di mGameMap;
__________________
PROCESSORE: AMD Athlon64 2800+ Boxed - MOTHERBOARD: Gigabyte K8NS nForce3 250 - SCHEDA VIDEO: 3D Prophet 9800 Pro 128MB - RAM: 512MB Corsair Value + 512 V-Data - CASE: Chieftech Dragon - ALIMENTATORE: Q-TEC 550W - HARD DISK: Seagate SATA 80 GB - LETTORE DVD: LG 16x52x - MASTERIZZATORE: Nec ND-3520
Ballantine è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 01:15   #3
coleseya
Junior Member
 
Iscritto dal: Apr 2011
Messaggi: 2
Dall'errore avevo capito che c'è un Indice oltre i limiti della matrice.
Potrebbe dare anche lo stesso tipo di errore se supera 0/maggiori della dimensione massima giusto?


Codice:
                if (User != null)
                {
                    int ID = User.InternalRoomID;
                    UserList[User.InternalRoomID] = null;

                    User.InternalRoomID = -1;
                    mGameMap[User.X, User.Y] = 0;
                }
l'unico valore che risulta minore di 0 è questo in rosso, potrebbe essere il problema?

Ultima modifica di coleseya : 09-04-2011 alle 01:38.
coleseya è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2011, 10:17   #4
Ballantine
Member
 
L'Avatar di Ballantine
 
Iscritto dal: May 2004
Messaggi: 278
Quote:
Originariamente inviato da coleseya Guarda i messaggi
Codice:
                if (User != null)
                {
                    int ID = User.InternalRoomID;
                    UserList[User.InternalRoomID] = null;

                    User.InternalRoomID = -1;
                    mGameMap[User.X, User.Y] = 0;
                }
l'unico valore che risulta minore di 0 è questo in rosso, potrebbe essere il problema?
La riga dove assegni -1 ad User.InternalRoomID direi che possiamo escluderla, poiché User.InternalRoomID non viene più riutilizzato in questo metodo.

Quote:
Originariamente inviato da coleseya Guarda i messaggi
Potrebbe dare anche lo stesso tipo di errore se supera 0/maggiori della dimensione massima giusto?
Esattamente. Un errore molto comune ad esempio è quello di considerare a[a.Length] come un elemento valido, mentre in realtà a.Length è il primo indice al di fuori dell'array.
Nel tuo caso sarebbe utile vedere come crei UserList e mGameMap, e come inizializzi InternalRoomID, UserX e UserY.
Per semplificarti la vita potresti anche mettere delle stampe all'interno del metodo per vedere in che punto si ferma l'esecuzione (non è molto elegante ma ti evita di fare troppe modifiche al codice), aggiungere alla stampa dell'eccezione e.StackTrace (è la via più veloce ma non è detto che le informazioni aggiuntive siano utili) oppure "spezzettare" il tuo try-catch in diversi blocchi.
__________________
PROCESSORE: AMD Athlon64 2800+ Boxed - MOTHERBOARD: Gigabyte K8NS nForce3 250 - SCHEDA VIDEO: 3D Prophet 9800 Pro 128MB - RAM: 512MB Corsair Value + 512 V-Data - CASE: Chieftech Dragon - ALIMENTATORE: Q-TEC 550W - HARD DISK: Seagate SATA 80 GB - LETTORE DVD: LG 16x52x - MASTERIZZATORE: Nec ND-3520
Ballantine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Realme punta sulla fascia bassa: arriva ...
Interlune creerà un centro di ric...
Stop Killing Games: 97% delle firme conv...
La GTX 2080 Ti mai arrivata sul mercato,...
Hoolow Knight: Silksong, il gioco che a ...
Duolingo crolla in Borsa: la minaccia ar...
Battlefield 6: i giocatori console potra...
Citroen Racing, la marca ritorna alle co...
Windows 10 ESU: come partecipare al prog...
ASUS Vivobook 16X a meno di 470€ su Amaz...
Con Agent Payments Protocol di Google gl...
Windows 10 muore, gli attivisti insorgon...
NVIDIA sarà il primo cliente di T...
Stellantis cancella il pick-up elettrico...
Microsoft termina il supporto per Office...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v