Construction Set Skriptproblem

Anjar

Neuankömmling
Hi,

Habe folgendes Problem. :) Habe für meine Mod eine Gruft gebaut in der es natürlich auch Untote gibt. Mein Problem: Ich möchte dass man diese Untoten nur mit Silberwaffen töten kann und sonst mit gar keinen. Auch nicht mit magischen Waffen. Das heißt dass es nicht möglich sein soll so einen Untoten mit normalen oder magischen Waffen zu töten. Bin jetzt schon das ganze Wochenende damit dran und kriege es einfach nicht hin. Gedacht habe ich mir das folgendermaßen.

Code:
scn unverwundbarkeitsscript

short unverwundbar

begin OnHit Player

if player.GetEquipped WeapSilverLongsword == 1 && unverwundbar != 1
     set unverwundbar to 1
elseif player.GetEquipped WeapSilverLongsword == 0 && unverwundbar != 2
     set unverwundbar to 2
endif

if unverwundbar == 1
      RemoveSpell abresistweapons
elseif unverwundbar == 2
      AddSpell abresistweapons
      resetHealth
endif

end

So funktioniert das Script perfekt. Wird er mit dem Silberschwert angegriffen stirbt er. Wird er mit einer anderen Waffe, auch einer magischen, angegriffen ist er absolut unverwundbar. In der Hauptsache dürfte wohl weniger der Zauber, den ich ihm hinzufüge, als ResetHealth ihn unverwundbar machen.
Das Problem ist dass es insgesamt 12 Silberwaffen im Spiel gibt. Es müsste also für jede Silberwaffe die Variable gesetzt werden. Das müsste dann, meiner Meinung nach so aussehen.

Code:
scn unverwundbarkeitsscript

short unverwundbar

begin OnHit Player

if player.GetEquipped WeapSilverLongsword == 1 || player.GetEquipped WeapSilverDagger == 1 && unverwundbar != 1
     set unverwundbar to 1
elseif player.GetEquipped WeapSilverLongsword == 0 || player.GetEquipped WepSilverDagger == 0 && unverwundbar != 2
     set unverwundbar to 2
endif

if unverwundbar == 1
      RemoveSpell abresistweapons
elseif unverwundbar == 2
      AddSpell abresistweapons
      resetHealth
endif

end

Und dieses Script funktioniert nicht. Also im Spiel sieht das dann ungefähr so aus dass der Untote zwar noch immer unverwundbar ist aber wenn ich dann eine der beiden Silberwaffen nehme bleibt er unverwundbar. Es sieht für mich fast so aus als ob in jedem Frame noch mal ResetHealth ausgeführt wird obwohl die Variable wieder auf 1 sein sollte, es vermutlich auch ist, und somit die Bedingung für ResetHealth fehlt. Ich bin also absolut ratlos.
Habe ihn auch schon auf Kill gesetzt. Aber das macht wirklich dann keinen Spass mehr.

Ach ja, das mit Kill hat natürlich funktioniert womit fest stehen dürfte dass die Variable tatsächlich auf 1 gesetzt wird. Nur ohne Kill will er einfach nicht sterben. :-D
Hoffe jemand kann mir helfen. Nach zwei Tagen knochenharter Arbeit am PC weiß ich einfach nicht weiter.

mfg
 
schonmal nachgedach den Script von den Geistern die bereits drin sind zu nehmen?
musst allerdings deine eigenen Creaturen erstellen
 
Also Anjar,

Du hast schon mal einen guten Script erstellt, jedoch hast du etwas wichtiges nicht beachtet:

Der ElseIf-block, indem du abfragst, ob er eine dieser Waffen nicht hat... die ist nicht so gut. Denn du fragst genau das ab, was ich eben gesagt habe. Ob er EINE dieser Waffen nicht ausgerüstet hat.

Er kann ja nicht alle Waffen ausrüsten.

Deshalb hier mein Vorschlag:

Code:
scn unverwundbarkeitsscript

short unverwundbar

begin OnHit Player

if player.GetEquipped WeapSilverLongsword == 1 || player.GetEquipped WeapSilverDagger == 1 && unverwundbar != 1
     set unverwundbar to 1
else
     set unverwundbar to 2
endif

if unverwundbar == 1
      RemoveSpell abresistweapons
elseif unverwundbar == 2
      AddSpell abresistweapons
      resetHealth
endif

end

Simpel, ja. Aber richtig.

MfG Gildur
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anjar
Problem gelöst

@Gildur muss leider sagen dass Dein Script auch nicht wunschgemäß funktionierte. Es war noch immer zu kompliziert. :)

Als ich dann vollkommen frustriert mein Geschirr spülte hatte ich endlich den rettenden Einfall. Das Script war einfach zu kompliziert. Offensichtlich war der Scriptinterpreter überfordert. Denn warum sollte ich überhaupt eine zweite Abfrage mit Variable machen wenn sich die zweite Abfrage logischerweise schon aus der ersten ergibt. Kurz: mein Script sieht jetzt so aus.

Code:
scn unverwundbarkeitsscript

short silberwaffe

begin OnHit Player

if silberwaffe == 0 && player.GetEquipped WeapSilverLongsword == 1 || player.GetEquipped WeapSilverDagger ==1 ;usw. die ersten 6 Silberwaffen. Um nicht die maximale Länge von 512 Zeichen zu überschreiten mußte ich die Abfrage aufteilen und ein elseif einügen.
       set silberwaffe to 1
elseif silberwaffe == 0 && ;usw. wie die erste Reihe mit den nächsten sechs Silberwaffen
       set silberwaffe to 1
endif

if silberwaffe == 1
       RemoveSpell abresistweapons
       set silberwaffe to 0  ;silberwaffe wird auf 0 zurück gesetzt damit die Abfrage erneut erfolgen kann. Denn sonst könnte man von einer Silberwaffe wieder auf eine normale magische Waffe wechseln.
        return  ; damit else nicht mehr ausgeführt wird da die Variable jetzt schon wieder auf 0 steht.
else
        AddSpell abresistweapons
        resetHealth
endif

end

Supereinfach und es funktioniert jetzt perfekt. Man kann die Waffe jetzt so oft wechseln wie man will und hat immer den gewünschten Effekt.

Kann jetzt endlich weiter an meiner Mini-Mod basteln. :)

mfg
Anjar
 
Kann man nicht auch bei Kreaturen einen Haken ankreuzen?
Bei Waffen kann man auf jedenfall Ignore Normal Weapon Resistance
und wenn das angekreuzt ist, dann kann man Geister... schlagen.
Also entweder bei den Kreaturen den haken (ich glaube den gibts nicht)
oder das Script umändern, damit du nicht alle Waffen einzeln reinschreiben musst.