Construction Set Skriptthread zum Construction Set

Deine ersten 2 Probleme hängen wohl sehr wahrscheinlich damit zusammen, dass Quest-scripts nur alle 5 Sekunden ausgeführt werden. Entweder setzt du also fQuestDelayTime auf 1 oder einen noch geringeren Wert, oder du legst die Scriptblöcke auf die NPCs. Ersteres sieht so aus:
Code:
float fQuestDelayTime

;...
set fQuestDelayTime to 1
;...
Dadurch würde der Quest-script jede Sekunde ausgeführt.

Zu deiner dritten Frage: Dies ginge afaik nur mit OBSE, indem du diese Befehle benutzt: GetFirstRef, GetNextRef und GetNumRefs.

Grüße,
Gildur
 
  • Like
Reaktionen: Cyrus
Weiß jemand, wieso dieser Script nicht klappt?
Code:
scn ScriptTesthallTestBladeSecondPartFirstGateTheGodMod

short Switch

Begin OnActivate
        if Switch == 0
        set Switch to 1
        TesthallTestBladeSec1ondPartFirstGateTheGodMod.activate
        LewerrefTesthallTestBladeSecondPartFirstGateTheGodMod.playgroup forward 0
        elseif Switch == 1
        set Switch to 0
        TesthallTestBladeSec1ondPartFirstGateTheGodMod.activate
        LewerrefTesthallTestBladeSecondPartFirstGateTheGodMod.playgroup backward 0
        endif
end


Er soll eig eine Tür öffnen und die Hebelanimation abspielen, je nachdem, in welcher Position er gerade steht, er macht aber nur letzteres.
 
Ist das eine richtige Tür oder ein Activator? Bei letzterem fehlt noch zumindest eine "1" als Zusatz beim "activate"-Befehl.
Außerdem kannst du die Referenz vor dem "playGroup"-Befehl weglassen, wenn es die Referenz ist, auf der das Skript liegt.
 
  • Like
Reaktionen: Almalexian
Probiere das mal.
Keine Garantie. :p

Code:
scn ...

ref Ziel
short Kopfgeld


begin ScriptEffectStart

set Kopfgeld to player.getcrimegold
set Kopfgeld to 0

set Ziel to getself
Ziel.stopcombat player

End

Begin scriptEffectEnd

set Ziel to 0
set Player.getcrimegold to Kopfgeld

End
 
Ich würde eine Verzauberung mit diesem Skript erstellen:

Code:
SCN ...

Ref Target

Begin ScriptEffectStart

set target to getself

end

Begin ScriptEffectUpdate
if(target.isincombat) && (player.isincombat)
    if(player.getcrimegold >= 40)
         player.modcrimegold -40
    endif
         target.stopcombat player
         set target to 0
endif

end

Aber ich bin mir nicht so sicher, ob das klappt. :-D Und ob das mit den 40 Kopfgeld stmmt, wenn man jemanden schlägt, weis ich auch gerade nicht. :D
 
Ist das eine richtige Tür oder ein Activator? Bei letzterem fehlt noch zumindest eine "1" als Zusatz beim "activate"-Befehl.
Außerdem kannst du die Referenz vor dem "playGroup"-Befehl weglassen, wenn es die Referenz ist, auf der das Skript liegt.


Was meinst du, mit eine 1 fehlt? Reicht .activate nicht, muss man da auch ein flag hintersetzen,wie bei der
Animationsabspielung?

Ich häng gleich noch eine Frage dran, gibts einen Scriptbefehl, der den Player unbesiegbar macht?
 
Zuletzt bearbeitet:
Es hängt davon ab, ob das zu aktivierende Objekt eine Tür oder ein Activator ist. Wenn du nur "activate" benutzt, wird die Standardanimation abgespielt. Bei Türen ist das das Öffnen oder Schließen, ein Activator hat jedoch keine Standardaktivierung sondern ein Skript, das seine Bewegung steuert. Der "onActivate"-Block dieses Skripts wird aber nur ausgeführt, wenn du "activate 1" schreibst. Andersrum genauso, wenn eine Tür einen "onActivate"-Block hat und sie per "activate 1" aktiviert wird, muss in diesem Block "activate" stehen, damit sie ihre Standardanimation abspielt.
Unbesiegbarkeit gibt es nicht als Skript-Befehl. Du meinst sicherlich etwas vergleichbares zum Konsolenbefehl "tgm". Stattdessen kannst du jedoch "player.resetHealth" benutzen, das sollte den gleichen Effekt haben.
 
  • Like
Reaktionen: Almalexian
edit: Hab bereits eine Lösung gefunden. Dieser Seite sei dank.

Eine andere kleine Sache noch:

Ich erstelle gerade einen Zauber der das Ziel in einen Zombie verwandelt. Der Zombie heisst dann aber nur "Wurmsklave". Es wäre besser wenn er den Namen des Ziels bekommen würde. Ist das möglich? Und könnte man da evt. noch etwas vorstellen?

Beispiel: Ich wirke den Zauber auf Mr. X. Der Zombie der dann erscheint sollte dann "Mr. X" oder noch besser "Wurmsklave Mr. X" oder ähnlich heissen.

Und noch was: Wie resette ich eine Dummy-Zelle? Mit ResetInterior klappts irgendwie net.
 
Zuletzt bearbeitet:
edit: Hab bereits eine Lösung gefunden. Dieser Seite sei dank.

Eine andere kleine Sache noch:

Ich erstelle gerade einen Zauber der das Ziel in einen Zombie verwandelt. Der Zombie heisst dann aber nur "Wurmsklave". Es wäre besser wenn er den Namen des Ziels bekommen würde. Ist das möglich? Und könnte man da evt. noch etwas vorstellen?

Beispiel: Ich wirke den Zauber auf Mr. X. Der Zombie der dann erscheint sollte dann "Mr. X" oder noch besser "Wurmsklave Mr. X" oder ähnlich heissen.

Und noch was: Wie resette ich eine Dummy-Zelle? Mit ResetInterior klappts irgendwie net.

Du kannst mit "setActorFullName" den Namen des Zombies ändern, allerdings sehe ich keine Möglichkeit, den Namen des Ziels herauszubekommen solange der Zauber auf jeden angewandt werden kann. Mit OBSE kannst du "copyName" und "appendToName" benutzen.

Wozu willst du denn eine Dummy-Zelle resetten? Die wird doch eh nicht betreten.
 
  • Like
Reaktionen: Sel93
Okay, vielen Dank schonmal.

Die Dummy-Zelle wollte ich resetten, weil ich dachte das das sonst das Savegame belastet wenn sich mit der Zeit soviele NPCs darin stauen. Ist das nicht so?

Jetzt hätte ich aber noch eine wichtige Frage. Ich dachte ich hätte eine Alternative zu "PlaceAtMe" gefunden, habe ich aber nicht. Den Actor in eine Dummy-Zelle zu packen und dann zu mir zu teleportieren funktioniert zwar, aber eben nur einmal. Mein Zauber soll aber jedesmal wenn ich ihn anwende einen neuen Zombie holen. So wie ich das jetzt hab wird immer nur der gleiche rumteleportiert, also kann ich auch nie mehr als einen gleichzeitig haben.
 
1. Es ist egal, wie viele NPCs du in einer Zelle hast, solange die Referenz des NPCs in die *.esp geschrieben ist und nicht per "placeAtMe" hinzugefügt wird.

2. Du kannst ja mehrere Zombies erstellen.
 
  • Like
Reaktionen: Sel93
Ok, ich habs jetzt hingekriegt. Vielen Dank.

Andere Frage: Weiss einer wie ich die maximalen Lebenspunkte eines Actors abfragen kann?
 
Ok, dankeschön.

Jetzt klappt aber mein Skript trotzdem nicht und ich weiss nicht warum.

Das Ziel soll 50% seiner Lebenspunkte verlieren (Es verbleibt erstmal mindestens 1 LP).

Code:
scn AAABlutritualSkript

short LifePoints
short LifePoints2

Begin ScriptEffectStart

set LifePoints2 to getBaseAV health

set LifePoints to (LifePoints2 / 100 * 50)

if(LifePoints <= 0)
set LifePoints to 1
EndIf 

player.modAV2 health LifePoints 

End
 
"ModAV2" addiert oder subtrahiert den entsprechenden Wert zu den aktuellen Lebenspunkten des Ziels.
Ich würde ganz einfach "player.setav health lifepoints" schreiben. ;)
 
  • Like
Reaktionen: Sel93