[Hilfe] Array etc ? übergeben ?


#Kev

Grünschnabel
#1
Hallo Communinty,

Ich hoffe ich bin in diesem Bereich hier richtig ist mein 1. Post und habe vor auch in Zukunft öfter hier zu sein :)

Ich habe da gerade ein Problem welches ich irgendwie nicht wirklich lösen kann.

Es geht um ein [Server --> Client] Packet Problem.

Server schickt ein Packet.

z.b:

Code:
#region Object
                                if (_pck.Opcode == 0x01) // Obj wird erzeugt. mit a = einmalige zahl und b die "struktur / aussehens" id welches es öfter gibt.
                                {
                                    uint a = _pck.ReadUInt32();               // bsp: 1000
                                    uint b = _pck.ReadUInt32();              //  bsp: 500
                                }
                                #endregion
Die Infos A und B sollten in eine Art Array oder Liste geschrieben werden Damit ich diese in OpCode 0x02 nutzen kann.

Code:
if (_pck.Opcode == 0x02) { // Obj wird zerstört.

uint c = _pck.ReadUInt32(); // gleich wie bei Opcode 0x01 a

if( wenn in der liste wo (a und b) stehen a = c ist ) {

Console.WriteLine("Obj: " + c + " mit der ID: " + b + " wurde zerstört.");
// Danach sollte A und B aus der Liste entfernt werden .
List.Remove(C);

 }
}
Ich hoffe es ist verständlich was ich damit sagen will und das ihr mir helfen könnt.
 

#Kev

Grünschnabel
#2
Im Grunde brauch ich eine Liste :

Es werden 5 Objekte gespawnt. alle haben die gleiche ObjID ( 1500 ) aber jedes Obj welches gespawnt wird hat nochmal eine eigene "Unique" ID

100001 , 1500
100002 , 1500
100003 , 1500
100004 , 1500
100005 , 1500

Wenn ich jetzt also das Obj mit der UniqueID 100003 zerstöre soll die Liste danach so aussehen:

100001 , 1500
100002 , 1500
100004 , 1500
100005 , 1500

Somit sind noch 4 Objekte vorhanden sobald aber ein Obj zerstört wird gibt mir die Console die ObjID von der Zugehörigen UniqueID aus.

Ich muss halt irgendwie noch abfragen können ob ( Wenn das Obj Zerstört wird auch in der Liste ist wenn true dann wird die ObjID ausgegeben und die UniqueID zeile rausgelöscht)
 

Halfbax

Erfahrenes Mitglied
#3
Was ist jetzt die Frage? Wenn es darum geht ein Objekt aus deiner Liste zu entfernen hast du dir in deinem ersten Post bereits selbst die Lösung gegeben.

https://msdn.microsoft.com/de-de/library/bb397906.aspx

Eine Möglichkeit wäre beispielsweise LINQ
C#:
List<int[]> objectList = new List<int[]>();
objectList.Add(new int[] {00001, 1500});

if(objectList.Find(x => x[0] == 00001) != null)
{
   Console.WriteLine("Gefunden!");
}
Ich würde das Ganze aber auf eine Klasse auslagern (persönlicher Geschmack). In etwa so
C#:
class ObjectList
{
   public int uniqueId { get; set; }
   public int anotherId { get; set; }
}
C#:
List<ObjectList> objectList = new List<ObjectList>();

ObjectList item = new ObjectList();
item.anotherId = 1500;
item.uniqueId = 00001;
objectList.Add(item);

if(objectList.Find(x => x.uniqueId == 00001) != null)
{
   Console.WriteLine("Gefunden!");
}
PSEUDO-Code!

LG
 

#Kev

Grünschnabel
#4
Danke für die Antwort.

Bei meinem Beitrag hatte ich das "List.Remove(C);" eigentlich nur als PSEUDO-Code hingeschrieben mir war nicht bewusst das es wirklich so easy geht ;)

Habe es jetzt so gelöst:

Code:
public static Dictionary<UInt32, UInt32> ObjList = new Dictionary<UInt32, UInt32>();

// weiter unten beim OpCode (0x01) 

ObjList.Add(UniqueID, ObjID);

// Und dann noch weiter unten beim OpCode (0x02) 

foreach (KeyValuePair<uint, uint> kvp in ObjList)
                                        {

                                            if (ObjList.ContainsKey(uid))
                                            {
                                                Console.WriteLine("-------------- Remove Start ----------");
                                                Console.WriteLine("UniqueID = {0}, ObjID = {1}", kvp.Key, kvp.Value);
                                                Console.WriteLine("-------------- Remove End ------------");
                                                
                                            }
                                        }
ObjList.Remove(uid);
 

Neue Beiträge