In JS mehrere Elemente abfragen

  • Heyho!
    Wir haben hier ja schlaue Script-Menschen:

    Ich habe hier einen Status, der angreifenden Gegnern Schaden zufügt, was soweit auch erstmal gut funktioniert. Der soll allerdings nur bei physischem Nahkampfschaden getriggert werden. Ich habe verschiedene Fernkampf-Elemente, bei denen der Effekt nicht getriggert werden soll, zum Bsp. Pfeilschaden usw.

    Das habe ich jetzt mit einem IF Statement geregelt:

    if (value > 0 && this.isPhysical() && this.item().damage.elementId != 14) {


    So wird verhindert, dass der Effekt bei Element 14 getriggert wird. Wenn ich jetzt aber noch andere Elemente ausschließen will, muss es doch eine bessere Möglichkeit geben jedes einzeln mit this.item() aufzuzählen oder?

    if (value > 0 && this.isPhysical() && this.item().damage.elementId != 14 && this.item().damage.elementId != 15 && this.item().damage.elementId != 16) { sieht mir irgendwie sehr unelegant aus.


    Und jetzt Frage II:


    Wie mache ich das gleiche für einzelne Skills? Ich habe zum Skills, die physisch sind, keines der auszuschließenden Elemente haben, aber den Effekt trotzdem nicht triggern sollen. "Steingewölle" zum Bsp. schleudert eine Erdkugel auf den Gegner. Das macht physischen Schaden mit dem Element "Erde", ist aber kein Nahkampfangriff. Ich möchte aber "Erde" auch nicht komplett vom Status ausschließen.


    if (value > 0 && this.isPhysical() && this.item().name != "Steingewölle") {

    funktioniert, aber ich würde gerne auf die Skill-ID statt auf den Namen zugreifen, weil ich teilweise Skills mit demselben Namen (einmal für Gegner, einmal für Party-Mitglieder zum Bsp.) habe und es außerdem die Übersetzung, falls es doch irgendwann mal dazu kommt um einiges leichter macht.

    Und hier auch wieder, wie zähle ich am besten mehrere Skills hintereinander auf?

    Vielen Dank schonmal im Voraus :lachenderork:

  • Hallo,


    beim ersten musst du nur ein array erstellen und dann abfragen, ob die ID im Array enthalten ist. Das würde dann so aussehen:


    Code
    var elementIds = [14, 15, 16];
    if (value > 0 && this.isPhysical() && !elementIds.includes(this.item().damage.elementId))

    das ! am Anfang von elementIds ändert die Aussage ins Gegenteil, das bedeutet das aus true dann false wird und aus false true.


    Zum zweiten Punkt bin ich mir jetzt nicht zu 100% sicher, da ich das nicht testen konnte, aber grundsätzlich müsstest du mit this.item().skillId() die Skill ID erhalten. Falls das nicht funktioniert, teste mal this.item().itemId().


    lg Flipely

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!