Construction Set Skriptthread zum Construction Set

Kann ich eigendlich
Code:
if soulgem.isOffLimits 7 == 0 && (soulgemC == 1 || (soulgemC == 2 && soulgem.getSoulGemCapacity >= 2) || (soulgemC == 3 && soulgem.getSoulGemCapacity >=3) || (soulgemC == 4 && soulgem.getSoulGemCapacity >= 4) || (soulgemC == 5 && soulgem.getSoulGemCapacity == 5))
durch
Code:
if soulgem.isOffLimits 7 == 0 && (soulgemC <= soulgem.getSoulGemCapacity)
ersetzen? (also bewirken sie das selbe?)
 
Was willst Du überhauptmachen? Und wozu brauchst Du "SoulGemC"?
Außerdem hast Du hier auch keine elseif's verwendet. Bei Deiner Methode muss Obl. die ganze Zeile durchgehen. Bei untereinandergeschriebenem nicht.
 
Was willst Du überhauptmachen?
Das gleiche wie gestern für die Apparate, nur diesmal für Seelensteine
Und wozu brauchst Du "SoulGemC"?
Das ist die Auswahl die man getroffen hat:
0: keine
1: Alle
2: ab 300
3: ab 600
4: ab 1200
5: nur 1600
Außerdem hast Du hier auch keine elseif's verwendet. Bei Deiner Methode muss Obl. die ganze Zeile durchgehen. Bei untereinandergeschriebenem nicht.
Wenn meine Idee (siehe zweiten Code) so funktioniert, ist das ja überflüssig^^
 
Das gleiche wie gestern für die Apparate, nur diesmal für Seelensteine

Das ist die Auswahl die man getroffen hat:
0: keine
1: Alle
2: ab 300
3: ab 600
4: ab 1200
5: nur 1600

Wenn meine Idee (siehe zweiten Code) so funktioniert, ist das ja überflüssig^^

Und für was stehen die Zahlen? Für die Füllgröße? Wenn ja, warum ausgerechnet die Zahlen?
 
In der Variable stehen die Zahlen 0-5.
Dahinter habe ich die Füllmenge als Zahl geschrieben, weil der Name in Vanilla nicht Eindeutig ist. (Es gibt klein in 150 und 300)
 
Ich hab's zwar immer noch nicht so ganz verstanden, aber ich denke mal, dass das mit der 2. Methode klappt. (Wieso zur Hölle testest Du das eigentlich nicht und fragst hier, ob es klappt?! Eigentiniative ftw.)
 
  • Like
Reaktionen: Schmelz
Ich hätte mal wieder ein Problem^^
Ich bin jetzt soweit durch mit dem einbauen der Auswahlmöglichkeiten, aber beim testen passiert einfach mal nichts! (Abgesehen vom Auswählen der Möglichkeiten -> Die MessageBox-Ansammlung fuktioniert.)
Die verschiedenen Teile (von denen keiner funktioniert) sehe im Grunde so aus:
Code:
    elseif controlvar == 3

        set clothing to getfirstref 22 1
        while clothing
            if clothing.isOffLimits 7 == 0 && (clothingC == 1 || (clothingC == 2 && clothing.getEnchantment != 0))
                clothing.activate player, 1
            endif
            set clothing to getnextref
        loop
        set controlvar to 4
bzw. mit weiteren möglichen Auslösern bei den Conditions.
Nur wieso läuft das nicht? (ohne den Condition-Anhang hatte es ja noch funktioniert!)
 
Ich hätte mal wieder ein Problem^^
Ich bin jetzt soweit durch mit dem einbauen der Auswahlmöglichkeiten, aber beim testen passiert einfach mal nichts! (Abgesehen vom Auswählen der Möglichkeiten -> Die MessageBox-Ansammlung fuktioniert.)
Die verschiedenen Teile (von denen keiner funktioniert) sehe im Grunde so aus:
Code:
    elseif controlvar == 3

        set clothing to getfirstref 22 1
        while clothing
            if clothing.isOffLimits 7 == 0 && (clothingC == 1 || (clothingC == 2 && clothing.getEnchantment != 0))
                clothing.activate player, 1
            endif
            set clothing to getnextref
        loop
        set controlvar to 4
bzw. mit weiteren möglichen Auslösern bei den Conditions.
Nur wieso läuft das nicht? (ohne den Condition-Anhang hatte es ja noch funktioniert!)

Versichere Dich erstmal, dass auch alle Variablen hochgesetzt werden (Du kannst btw auch eigentlich einfach eine Array nehmen).
Wenn Du sicher bist, dass alle Var's hochgesetzt werden, setze mal "PrintC"'s in Dein Skript, um zu sehen, wo es hängt.
 
  • Like
Reaktionen: Schmelz
bzw. mit weiteren möglichen Auslösern bei den Conditions.
Nur wieso läuft das nicht? (ohne den Condition-Anhang hatte es ja noch funktioniert!)

Definiere "funktioniert". Wenn du uns nur einen kleinen code-snippet von deinem kompletten Script vorwirfst, können wir recht wenig damit anfangen. Es könnte vieles sein. Entweder geht der Script erst gar nicht in die Schleife oder die Bedingung wird nicht erfüllt. Am einfachsten wäre es für uns wenn du debuggst und uns das Resultat schreibst. So zB.

Code:
    elseif controlvar == 3
        printc "loop started"
        set clothing to getfirstref 22 1
        while clothing
            "loop cycle"
            if clothing.isOffLimits 7 == 0 && (clothingC == 1 || (clothingC == 2 && clothing.getEnchantment != 0))
                "loop condition met"
                clothing.activate player, 1
            endif
            set clothing to getnextref
        loop
        printc "loop finished"
        set controlvar to 4

Damit können wir was anfangen. Wenn du diese Schleife benutzt wäre es wichtig zu wissen:
-Wird loop started und loop finished angezeigt? (beides ist wichtig)
-Wird loop cycle angezeigt?
-Wird loop condition angezeigt?

Grüße,

Gildur
 
  • Like
Reaktionen: Schmelz
Scheinbar läuft die zuweisung doch nicht so toll^^ (Die Werte werden auf -1 gesetzt, obwohl ich ja eine Wahl treffen muss (in meinem Test immer 1))
Hier mal das ganze Script:
Code:
ScriptName EZQuestScript

short controlvar
float fQuestDelayTime
ref apparatus
short apparatusC
ref armor
short armorC
ref clothing
short clothingC
ref ingredient
short ingredientC
ref misc
short miscC
ref flora
short floraC
ref weapon
short weaponC
ref ammo
short ammoC
ref soulgem
short soulgemC
ref key
short keyC
ref alchemyitem
short alchemyitemC
ref sigilstone
short sigilstoneC
ref actor
short actorC
array_var actors
short index
short button
short controlvarC

Begin GameMode

    if controlvar == -2

        set button to getButtonPressed
        set fQuestDelayTime to 0.001

        if controlvarC == 0

            MessageBox "Sollen Apparate (Alchemie) eingesammelt werden?" "Nein" "Alle" "mindestens Lehrling" "mindestens Geselle" "mindestens Experte" "nur Meister"
            set apparatusC to getButtonPressed
            set controlvarC to 1

        elseif controlvarC == 1

            MessageBox "Sollen Rüstungen eingesammelt werden?" "Nein" "Alle" "nur magische" "ab 100 Wert" "ab Wert mindestens 10x Gewicht" "Gewicht maximal 20"
            set armorC to getButtonPressed
            set controlvarC to 2

        elseif controlvarC == 2

            MessageBox "Soll Kleidung eingesammelt werden?" "Nein" "Alle" "nur magische"
            set clothingC to getButtonPressed
            set controlvarC to 3

        elseif controlvarC == 3

            MessageBox "Sollen Zutaten (nicht die von Pflanzen!) eingesammelt werden?" "Nein" "Alle"
            set ingredientC to getButtonPressed
            set controlvarC to 4

        elseif controlvarC == 4

            MessageBox "Soll Sonstiges eingesammelt werden?" "Nein" "Alle" "nur mit Funktion" "ab 10 Wert" "ab Wert mindestens gleich Gewicht"
            set miscC to getButtonPressed
            set controlvarC to 5

        elseif controlvarC == 5

            MessageBox "Sollen Pflanzen abgeerntet werden?" "Nein" "Alle"
            set floraC to getButtonPressed
            set controlvarC to 6

        elseif controlvarC == 6

            MessageBox "Sollen Waffen eingesammelt werden?" "Nein" "Alle" "nur magische" "ab 100 Wert" "ab Wert mindestens 10x Gewicht" "Gewicht maximal 20"
            set weapon to getButtonPressed
            set controlvarC to 7

        elseif controlvarC == 7

            MessageBox "Sollen Pfeile eingesammelt werden?" "Nein" "Alle" "nur magische"
            set ammoC to getButtonPressed
            set controlvarC to 8

        elseif controlvarC == 8

            MessageBox "Sollen Seelensteine eingesammelt werden?" "Nein" "Alle" "mindestens Klein (300)" "mindestens Allgemein (600)" "mindestens Größer (1200)" "nur Groß (1600)"
            set soulgemC to getButtonPressed
            set controlvarC to 9

        elseif controlvarC == 9

            MessageBox "Sollen Schlüssel eingesammelt werden?" "Nein" "Alle"
            set keyC to getButtonPressed
            set controlvarC to 10

        elseif controlvar == 10

            MessageBox "Sollen Tränke (und Gifte) eingesammel werden?" "Nein" "Alle" "Ab 100 Wert"
            set alchemyitemC to getButtonPressed
            set controlvarC to 11

        elseif controlvarC == 11

            MessageBox "Sollen Siegelsteine eingesammel werden? (gilt nicht, solange sie noch im Turm verankert sind)" "Nein" "Alle"
            set sigilstoneC to getButtonPressed
            set controlvar to 12

        elseif controlvar == 12

            MessageBox "Sollen Leichen ausgeraubt werden?" "Nein [vermeidet Abstürze]" "Alle" "nur Personen" "nur Kreaturen"
            set actorC to getButtonPressed
            set controlvar to 13

        elseif controlvar == 13

            set controlvar to -1
            set controlvarC to 0
            set fQuestDelayTime to 1
        endif

    elseif controlvar == 0

        set fQuestDelayTime to 1
        player.addspell EZZauber
        player.additem EZControlItem 1
        set controlvar to -1

    elseif controlvar == 1

        set apparatus to getfirstref 19 1
        while apparatus
            if apparatus.isOffLimits 7 == 0 && (apparatusC == 1 || (apparatus != 0 && apparatus.getQuality == 1.0) || (apparatusC == 2 && apparatus.getQuality == .25 ) || ((apparatusC == 2 || apparatusC == 3) && apparatus.getQuality == .50) || ((apparatusC == 2 || apparatusC == 3 || apparatusC == 4) && apparatus.getQuality == .75))
                apparatus.activate player, 1
            endif
            set apparatus to getnextref
        loop
        set controlvar to 2

    elseif controlvar == 2

        set armor to getfirstref 20 1
        while armor
            if armor.isOffLimits 7 == 0 && (armorC == 1 || (armorC == 2 && armor.getEnchantment != 0) || (armorC == 3 && armor.getGoldValue >= 100) || (armorC ==4 && (armor.getGoldValue >= 5 * armor.getWeight)) || (armorC == 5 && armor.getWeight <= 20))
                armor.activate player, 1
            endif
            set armor to getnextref
        loop
        set controlvar to 3

    elseif controlvar == 3

        set clothing to getfirstref 22 1
        while clothing
            if clothing.isOffLimits 7 == 0 && (clothingC == 1 || (clothingC == 2 && clothing.getEnchantment != 0))
                clothing.activate player, 1
            endif
            set clothing to getnextref
        loop
        set controlvar to 4

    elseif controlvar == 4

        set ingredient to getfirstref 25 1
        while ingredient
            if ingredient.isOffLimits 7 == 0 && ingredientC == 1
                ingredient.activate player, 1
            endif
            set ingredient to getnextref
        loop
        set controlvar to 5

    elseif controlvar == 5

        set misc to getfirstref 27 1
        while misc
            if misc.isOffLimits 7 == 0 && (miscC == 1 || (miscC == 2 && (misc.getBaseObject == Lockpick || misc.getBaseObject == Gold001 || misc.getBaseObject == RepairHammer || misc.getBaseObject ==VarlaStone || misc.getBaseObject == WelkyndStone)) || (miscC == 3 && misc.getGoldValue >= 10) || (miscC == 4 && (misc.getGoldValue >= misc.getWeight)))
                misc.activate player, 1
            endif
            set misc to getnextref
        loop
        set controlvar to 6

    elseif controlvar == 6

        set flora to getfirstref 31 1
        while flora
            if flora.isOffLimits 7 == 0 && floraC == 1
                flora.activate player, 1
            endif
            set flora to getnextref
        loop
        set controlvar to 7

    elseif controlvar == 7

        set weapon to getfirstref 33 1
        while weapon
            if weapon.isOffLimits 7 == 0 && (weaponC == 1 || (weaponC == 2 && weapon.getEnchantment != 0) || (weaponC == 3 && weapon.getGoldValue >= 100) || (weaponC ==4 && (weapon.getGoldValue >= 5 * weapon.getWeight)) || (weaponC == 5 && weapon.getWeight <= 20))
                weapon.activate player, 1
            endif
            set weapon to getnextref
        loop
        set controlvar to 8

    elseif controlvar == 8

        set ammo to getfirstref 34 1
        while ammo
            if ammo.isOffLimits 7 == 0 && (ammoC == 1 || (ammoC == 2 && ammo.getEnchantment != 0))
                ammo.activate player, 1
            endif
            set ammo to getnextref
        loop
        set controlvar to 9

    elseif controlvar == 9

        set soulgem to getfirstref 38 1
        while soulgem
            if soulgem.isOffLimits 7 == 0 && (soulgemC <= soulgem.getSoulGemCapacity)
                soulgem.activate player, 1
            endif
            set soulgem to getnextref
        loop
        set controlvar to 10

    elseif controlvar == 10

        set key to getfirstref 39 1
        while key
            if key.isOffLimits 7 == 0 && keyC == 1
                key.activate player, 1
            endif
            set key to getnextref
        loop
        set controlvar to 11

    elseif controlvar == 11

        set alchemyitem to getfirstref 40 1
        while alchemyitem
            if alchemyitem.isOffLimits 7 == 0 && (alchemyitemC == 1 || (alchemyitemC == 2 && alchemyitem.getGoldValue >= 100))
                alchemyitem.activate player, 1
            endif
                set alchemyitem to getnextref
        loop
        set controlvar to 12

    elseif controlvar == 12

        set sigilstone to getfirstref 42 1
        while sigilstone
            if sigilstone.isOffLimits 7 == 0 && sigilstoneC == 1
                sigilstone.activate player, 1
            endif
            set sigilstone to getnextref
        loop
        set controlvar to 13

    elseif controlvar == 13

        let actors := ar_construct map
        let actor := getFirstRef 69 1
        let index := 1
        while actor
            if actor.getIsReference player == 0 && actor.getDead && (actorC == 1 || (actorC == 2 && actor.getIsCreature == 0) || (actorC == 3 && actor.getIsCreature == 1))
                let actors[index] := actor
                let index += 1
            endif
            set actor to getNextRef
        loop
        let controlvar := 14
    return

    elseif controlvar == 14

        let actor := actors[index]
        let index -= 1
        actor.removeAllItems player
        if index == 0
            let controlvar := 15
        endif

    endif

End
Ich hatte die "set x to getButtonPressed" auch schon mal in den nächsten Frame geschoben, was keinerlei Änderung zeigt...
 
Code:
            MessageBox "Soll Kleidung eingesammelt werden?" "Nein" "Alle" "nur magische"
            set clothingC to getButtonPressed

Das geht nicht. Du musst einen Frame warten, bis du getbuttonpressed abfragen kannst. Andernfalls gibt der Script eben nur -1 zurück. Außerdem: Sehe ich es richtig, dass der jedes einzelne Item abfragt, dass man einsammeln will? Also erst fragt der Script, ob man Apparate einsammeln will, dann ob man Rüstung einsammeln will etc.? Das würde bedeuten, wenn man nur eine Sache ändern will, muss man sich durch alle Messageboxen durchklicken. Falls dem so ist, würde ich das persönlich noch ändern.
 
Das machst du doch sowieso, eine andere Möglichkeit eine Auswahl anzubieten gibt es ohne Messagebox ja wohl kaum. Ich verstehe das Ziel der Frage zugegeben nicht...

Ich hatte die "set x to getButtonPressed" auch schon mal in den nächsten Frame geschoben, was keinerlei Änderung zeigt...

Dann hast du es falsch gemacht. Probiere es einfach nochmal, bei mir hat es bisher immer geklappt und es spricht nichts dagegen, warum es bei dir nicht auch klappen sollte. Am einfachsten ist sowas in der Richtung:

Code:
set button to getbuttonpressed
if button == -1
    return
else
    ;tue irgendwas
endif
Damit kannst du dich versichern, dass es erst weitergeht, wenn button wirklich einen Wert hat. Mehr Tips kann ich dir auch nicht geben, versuche mal den Rest alleine. Learning by Doing.
 
  • Like
Reaktionen: Schmelz
Ich habs mal als zwichenschritt wieder so geschrieben:
Code:
ScriptName EZQuestScript

short controlvar
float fQuestDelayTime
ref apparatus
short apparatusC
ref armor
short armorC
ref clothing
short clothingC
ref ingredient
short ingredientC
ref misc
short miscC
ref flora
short floraC
ref weapon
short weaponC
ref ammo
short ammoC
ref soulgem
short soulgemC
ref key
short keyC
ref alchemyitem
short alchemyitemC
ref sigilstone
short sigilstoneC
ref actor
short actorC
array_var actors
short index
short button
short controlvarC

Begin GameMode

    if controlvar == -2

        set button to getButtonPressed
        set fQuestDelayTime to 0.001

        if controlvarC == 0

            MessageBox "Sollen Apparate (Alchemie) eingesammelt werden?" "Nein" "Alle" "mindestens Lehrling" "mindestens Geselle" "mindestens Experte" "nur Meister"
            set controlvarC to 1

        elseif controlvarC == 1

            set apparatusC to getButtonPressed
            MessageBox "Sollen Rüstungen eingesammelt werden?" "Nein" "Alle" "nur magische" "ab 100 Wert" "ab Wert mindestens 10x Gewicht" "Gewicht maximal 20"
            set controlvarC to 2

        elseif controlvarC == 2

            set armorC to getButtonPressed
            MessageBox "Soll Kleidung eingesammelt werden?" "Nein" "Alle" "nur magische"
            set controlvarC to 3

        elseif controlvarC == 3

            set clothingC to getButtonPressed
            MessageBox "Sollen Zutaten (nicht die von Pflanzen!) eingesammelt werden?" "Nein" "Alle"
            set controlvarC to 4

        elseif controlvarC == 4

            set ingredientC to getButtonPressed
            MessageBox "Soll Sonstiges eingesammelt werden?" "Nein" "Alle" "nur mit Funktion" "ab 10 Wert" "ab Wert mindestens gleich Gewicht"
            set controlvarC to 5

        elseif controlvarC == 5

            set miscC to getButtonPressed
            MessageBox "Sollen Pflanzen abgeerntet werden?" "Nein" "Alle"
            set controlvarC to 6

        elseif controlvarC == 6

            set floraC to getButtonPressed
            MessageBox "Sollen Waffen eingesammelt werden?" "Nein" "Alle" "nur magische" "ab 100 Wert" "ab Wert mindestens 10x Gewicht" "Gewicht maximal 20"
            set controlvarC to 7

        elseif controlvarC == 7

            set weapon to getButtonPressed
            MessageBox "Sollen Pfeile eingesammelt werden?" "Nein" "Alle" "nur magische"
            set controlvarC to 8

        elseif controlvarC == 8

            set ammoC to getButtonPressed
            MessageBox "Sollen Seelensteine eingesammelt werden?" "Nein" "Alle" "mindestens Klein (300)" "mindestens Allgemein (600)" "mindestens Größer (1200)" "nur Groß (1600)"
            set controlvarC to 9

        elseif controlvarC == 9

            set soulgemC to getButtonPressed
            MessageBox "Sollen Schlüssel eingesammelt werden?" "Nein" "Alle"
            set controlvarC to 10

        elseif controlvar == 10

            set keyC to getButtonPressed
            MessageBox "Sollen Tränke (und Gifte) eingesammel werden?" "Nein" "Alle" "Ab 100 Wert"
            set controlvarC to 11

        elseif controlvarC == 11

            set alchemyitemC to getButtonPressed
            MessageBox "Sollen Siegelsteine eingesammel werden? (gilt nicht, solange sie noch im Turm verankert sind)" "Nein" "Alle"
            set controlvar to 12

        elseif controlvar == 12

            set sigilstoneC to getButtonPressed
            MessageBox "Sollen Leichen ausgeraubt werden?" "Nein [vermeidet Abstürze]" "Alle" "nur Personen" "nur Kreaturen"
            set controlvar to 13

        elseif controlvar == 13

            set actorC to getButtonPressed
            set controlvar to -1
            set controlvarC to 0
            set fQuestDelayTime to 1
        endif

    elseif controlvar == 0

        set fQuestDelayTime to 1
        player.addspell EZZauber
        player.additem EZControlItem 1
        set controlvar to -1

    elseif controlvar == 1

        set apparatus to getfirstref 19 1
        while apparatus
            if apparatus.isOffLimits 7 == 0 && (apparatusC == 1 || (apparatus != 0 && apparatus.getQuality == 1.0) || (apparatusC == 2 && apparatus.getQuality == .25 ) || ((apparatusC == 2 || apparatusC == 3) && apparatus.getQuality == .50) || ((apparatusC == 2 || apparatusC == 3 || apparatusC == 4) && apparatus.getQuality == .75))
                apparatus.activate player, 1
            endif
            set apparatus to getnextref
        loop
        set controlvar to 2

    elseif controlvar == 2

        set armor to getfirstref 20 1
        while armor
            if armor.isOffLimits 7 == 0 && (armorC == 1 || (armorC == 2 && armor.getEnchantment != 0) || (armorC == 3 && armor.getGoldValue >= 100) || (armorC ==4 && (armor.getGoldValue >= 5 * armor.getWeight)) || (armorC == 5 && armor.getWeight <= 20))
                armor.activate player, 1
            endif
            set armor to getnextref
        loop
        set controlvar to 3

    elseif controlvar == 3

        set clothing to getfirstref 22 1
        while clothing
            if clothing.isOffLimits 7 == 0 && (clothingC == 1 || (clothingC == 2 && clothing.getEnchantment != 0))
                clothing.activate player, 1
            endif
            set clothing to getnextref
        loop
        set controlvar to 4

    elseif controlvar == 4

        set ingredient to getfirstref 25 1
        while ingredient
            if ingredient.isOffLimits 7 == 0 && ingredientC == 1
                ingredient.activate player, 1
            endif
            set ingredient to getnextref
        loop
        set controlvar to 5

    elseif controlvar == 5

        set misc to getfirstref 27 1
        while misc
            if misc.isOffLimits 7 == 0 && (miscC == 1 || (miscC == 2 && (misc.getBaseObject == Lockpick || misc.getBaseObject == Gold001 || misc.getBaseObject == RepairHammer || misc.getBaseObject ==VarlaStone || misc.getBaseObject == WelkyndStone)) || (miscC == 3 && misc.getGoldValue >= 10) || (miscC == 4 && (misc.getGoldValue >= misc.getWeight)))
                misc.activate player, 1
            endif
            set misc to getnextref
        loop
        set controlvar to 6

    elseif controlvar == 6

        set flora to getfirstref 31 1
        while flora
            if flora.isOffLimits 7 == 0 && floraC == 1
                flora.activate player, 1
            endif
            set flora to getnextref
        loop
        set controlvar to 7

    elseif controlvar == 7

        set weapon to getfirstref 33 1
        while weapon
            if weapon.isOffLimits 7 == 0 && (weaponC == 1 || (weaponC == 2 && weapon.getEnchantment != 0) || (weaponC == 3 && weapon.getGoldValue >= 100) || (weaponC ==4 && (weapon.getGoldValue >= 5 * weapon.getWeight)) || (weaponC == 5 && weapon.getWeight <= 20))
                weapon.activate player, 1
            endif
            set weapon to getnextref
        loop
        set controlvar to 8

    elseif controlvar == 8

        set ammo to getfirstref 34 1
        while ammo
            if ammo.isOffLimits 7 == 0 && (ammoC == 1 || (ammoC == 2 && ammo.getEnchantment != 0))
                ammo.activate player, 1
            endif
            set ammo to getnextref
        loop
        set controlvar to 9

    elseif controlvar == 9

        set soulgem to getfirstref 38 1
        while soulgem
            if soulgem.isOffLimits 7 == 0 && (soulgemC <= soulgem.getSoulGemCapacity)
                soulgem.activate player, 1
            endif
            set soulgem to getnextref
        loop
        set controlvar to 10

    elseif controlvar == 10

        set key to getfirstref 39 1
        while key
            if key.isOffLimits 7 == 0 && keyC == 1
                key.activate player, 1
            endif
            set key to getnextref
        loop
        set controlvar to 11

    elseif controlvar == 11

        set alchemyitem to getfirstref 40 1
        while alchemyitem
            if alchemyitem.isOffLimits 7 == 0 && (alchemyitemC == 1 || (alchemyitemC == 2 && alchemyitem.getGoldValue >= 100))
                alchemyitem.activate player, 1
            endif
                set alchemyitem to getnextref
        loop
        set controlvar to 12

    elseif controlvar == 12

        set sigilstone to getfirstref 42 1
        while sigilstone
            if sigilstone.isOffLimits 7 == 0 && sigilstoneC == 1
                sigilstone.activate player, 1
            endif
            set sigilstone to getnextref
        loop
        set controlvar to 13

    elseif controlvar == 13

        let actors := ar_construct map
        let actor := getFirstRef 69 1
        let index := 1
        while actor
            if actor.getIsReference player == 0 && actor.getDead && (actorC == 1 || (actorC == 2 && actor.getIsCreature == 0) || (actorC == 3 && actor.getIsCreature == 1))
                let actors[index] := actor
                let index += 1
            endif
            set actor to getNextRef
        loop
        let controlvar := 14
    return

    elseif controlvar == 14

        let actor := actors[index]
        let index -= 1
        actor.removeAllItems player
        if index == 0
            let controlvar := 15
        endif

    endif

End
Ingame schreibt das Spiel dann folgendes in die Console:
Code:
Error in script 07000ed6
Operator:=failed toevaluate to valid result
File:Einsammel-Zauber.esp Offset:0x13F0 Command: Let
 
Nicht böse gemeint, aber soll ich nicht gleich den ganzen Script für dich schreiben? Das Problem hat nichts mi dem vorherigen Problem zu tun. Wie auch immer, probiere mal das...

Code:
    elseif controlvar == 13

        let actors := ar_construct map
        let actor := getFirstRef 69 1
        let index := 0
        while actor
            if actor.getIsReference player == 0 && actor.getDead && (actorC == 1 || (actorC == 2 && actor.getIsCreature == 0) || (actorC == 3 && actor.getIsCreature == 1))
                let actors[index] := actor
                let index += 1
            endif
            set actor to getNextRef
        loop
        let controlvar := 14
    return

    elseif controlvar == 14

        let index -= 1
        let actor := actors[index]
        actor.removeAllItems player
        if index == 0
            let controlvar := 15
        endif

    endif
 
  • Like
Reaktionen: Schmelz
Nicht böse gemeint, aber soll ich nicht gleich den ganzen Script für dich schreiben?
Das würde ich gerne vermeiden^^

Die 0 hatte ich doch schon mal an der Stelle gegen die 1 ersetzt. Wieso weiß ich nicht mehr, aber sollte hier noch irgendwo im Thread stehen. (OK, das zu suchen ist irrsinn^^
 
Das würde ich gerne vermeiden^^
War ja auch ironisch gemeint.

Die 0 hatte ich doch schon mal an der Stelle gegen die 1 ersetzt. Wieso weiß ich nicht mehr, aber sollte hier noch irgendwo im Thread stehen. (OK, das zu suchen ist irrsinn^^)
Ich erinnere mich noch an deinen Grund, war aber unberechtigt. Hast du meinen Script jetzt verwendet? Denn wenn ich dir schon den Script schreibe und du es nicht mal versuchst, war das mein letzter Versuch zu helfen. Außerdem habe ich mehr getan als nur die 1 durch eine 0 zu ersetzen.
 
Ich habs natürlich nochmal mit der 0 versucht, aber keinerlei Änderung feststellen können.
Eine andere Änderung sehe ich irgendwie nicht??? (bin ich blind?), und ich weiß immer gerne was ich ändere, bevor ich es tue^^
 
Ich habs natürlich nochmal mit der 0 versucht, aber keinerlei Änderung feststellen können.
Hast du selbst einfach nur die 0 geändert oder den Code-snippet so übernommen, wie ich ihn oben geschrieben habe?
Eine andere Änderung sehe ich irgendwie nicht??? (bin ich blind?), und ich weiß immer gerne was ich ändere, bevor ich es tue^^
Habe diese Zeilen vertauscht:
Code:
        let actor := actors[index]
        let index -= 1
sodass es so dasteht:
Code:
        let index -= 1
        let actor := actors[index]

Erklärung: Nachdem der letzte NPC, sagen wir mit den index 5, zugewiesen wird, wird der index danach eins höher gesetzt.

Code:
            if actor.getIsReference player == 0 && actor.getDead && (actorC == 1 || (actorC == 2 && actor.getIsCreature == 0) || (actorC == 3 && actor.getIsCreature == 1))
                let actors[index] := actor
                let index += 1
            endif
Somit ist das letzte array, was einen Wert hat "actors[5]", der index selbst ist aber 6. In deinem Script sieht der RemoveAllItems-part allerdings so aus:

Code:
        let actor := actors[index]
        let index -= 1
Er versucht also zuerst auf actors[6] zuzugreifen, geht aber natürlich nicht, da actors[6] nicht existiert. Folgich führt Let zu keinem gültigen Wert und deshalb muss man die Zeilen vertauschen.

Außerdem bevorzuge ich es, dass der, dem ich helfe es erst ausprobiert und schaut ob es klappt. Erst dann kann ich es ihm erklären. Denn es kann ja auch passieren, dass ich zB. einen Fehler mache, dir dann alles erkläre, du testest es, aber es geht nicht. Dann habe ich dir was falsches erklärt. Deswegen bevorzuge ich den anderen Weg.
Und wenn du auch mal das tun würdest, was man dir sagt, wäre das für uns beide sehr hilfreich. Für dich führt es zum einen schneller zur Problemlösung und mir sparrt es eine Menge Nerven.
 
  • Like
Reaktionen: Schmelz