Hilfe bei Array Funktion

  • Guten Morgen :) ,


    ich habe einen Charakter der ein Inventarsystem besitzt und ich würde gerne durch eine Quest ein bestimmtes Item abfragen ob es im Inventar gibt .

    Meine Frage ist: Wie kann ich abfragen gibt es das Item "XYZ" und wenn ja welches Index hat es? wie ist die Anzahl usw.

    Den ich würde gerne durch eine Quest ein bestimmtes Items löschen wenn man 20 stück davon besitzt.

    Die gleiche abfrage brauche ich auch für meine Quest Line, würde auch gerne abfrage wie viele hat von schon gesammelt .

  • Sleepy

    Hat das Thema freigeschaltet.
  • Hallo


    Mittels contains kannst du prüfen, ob das Array ein Objekt enthält.

    Mittels Find kannst du prüfen ob das Array ein Objekt enthält und welchen Index es hat.

    Falls das -1 zurückgibt, wurde das Objekt nicht gefunden, ansonsten gibt es den Index zurück.


    Wenn das nicht ausreicht, musst du das selber in einem For loop prüfen.



    Gruss

  • Hey,


    danke für die schneller antwort . :)

    Ich habe schon mit find vieles ausprobiert aber ich komme immer zum ergebnis : -1.
    Kann ich nicht so suchen das ich nur z.b. nach Namen suche?


    Wie im Bild zu sehen muss ich alles eingeben, aber ich habe alles ausgefüllt und finde trotzdem nichts obwohl ich es im Inventar habe.

    Bild

    (Im Beispiel ist nicht alles eingetragen)


  • Wenn der "find" -1 ausspuckt findet er es ja nicht. Schonmal geprüft ob das Array überhaupt gefüllt wird?

    Ist an der Stelle wo du das Array benutzt auch das Blueprint wo das Array erstellt wird oder holst du das aus einem anderen Blueprint rüber? Wenn ja, vielleicht ist beim rüberholen ein Fehler und das Array ist in dem Blueprint wo du es nachschaust leer.




    Was für eine Art von Array ist das? Wundere mich grade da du dort verschiedene Arten von Ausgaben im "For Each Loop" hast.

  • Nunja, für BP-Structs ist das etwas komplizierter.
    Ich nehme mal an, dass du das Inventarsystem nicht selbst gebaut hast?

    Ich würde die gewünschte Funktion dort einbauen, wo das Item oder ein Item ins Inventar kommt.
    Das Inventar-System benutzt ja eventuell eine Funktion um ein Item einzusammeln, zu sehen ob es schon im inventar ist, um es gegebenfalls zu stacken, und an diesem Punkt könnte auch etwas getriggert werden, dass zum Beispiel ans Quest System weiterleitet, dass diese Quest jetzt abgeschlossen ist.
    Das wäre der optimale weg.


    Der nicht-optimale weg, ist so wie du es machen möchtest. Du kannst das Struct Array durch einen Foreach loop laufen lassen und die Einträge mit einer Liste von Questgegenständen vergleichen. Normalerweise macht man das per ItemID (Integer) oder sowas, Ich denke daher müsstest du von deinem "Array Element Item" -> GetID falls es diese funktion oder eine ähnliche gibt benutzen, da dort ein objekt mitgegeben wird, oder alternativ über Item Name den Vergleich machen.

    EDIT: Schau doch mal, wo das Inventory System nachprüft, ob schon Items drin sind um diese zu stacken. Sowas ähnliches musst du ja bauen um zu sehen ob das Item vielleicht zu einer Liste von Quest Items gehört :)
    Daher muss das Inventory irgendwo auch eine Referenz/Schnittstelle zu den Quest System haben. Hoffe Ich konnte helfen.

  • Echt klasse wie viele hier helfen :thumbup: UE Answerhub kann man dagegen vergessen :D
    Tankbuster Das mit der Quest Beschreibung klingt schonmal gut , werde ich mal gucken wo ich das im Skript einfügen kann.

    Ja das Inventar System habe ich gekauft, gibt aber kein support mehr. Ist alles kein Problem wenn ich das mit dem Array lerne wie man sowas händelt. Müsste nur einen Guten weg kennen wie ich ein Item aus einem Array Filter mit der ID.


    Sowas wie GET ID finde ich nichts zu.

    ADD Item to Inventory

    Externer Inhalt blueprintue.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Offizieller Beitrag

    Es ist schon korrekt, wie du vorgehst. Die Struct muss erst aufgesplittet werden und dann mit bestimmten Bedingungen verglichen werden.

    Jetzt kommt der Moment mit dem Löschen. In einer Loop schleife zu löschen ist sehr heikel. Wenn das bei dir so funktioniert, dann ist daran nichts auszusetzen. Du hast ein "InventoryArray" der an einer loop schleife ist. Wenn der gerade an der Index 3 ist, und du löscht dann die index 3 (ist auch bei 0,1,2 so), dann springen alle nach dem index 3 auf die index 3 positon. Somit ist index 4 jetzt die index 3. Deine loop ist aber bei index 3 und die nächste ist index 4. Das was index 4 war, wird übersprungen obwohl der loop auf index 4 gesprungen ist. Wenn ein Array verändert wird, bekommt das der loop nicht mit, wenn es um den gleichen array geht.


    Hier auf diesem Bild gut zu sehen. Bei Index 3 wird Index 1 gelöscht. Index 3 hat aber hier den Wert 4. Also ist der 4. Index auf die 3 gesprungen. Der Print string ist nach dem Remove index, dadurch sieht man das Ergebnis vom veränderten Array nach der remove aktion.