Construction Set knock out... aber wie?

dany

Reisender
ich hät mal ne frage: is es möglich eine creature per skript befehl auszuknocken also mehr oder minder zu lähmen? mit addspell will das ned so richtig funzen
 
Geht es nicht, wenn du unter "Spell" eine Eigenschaft mit Lähmung 100 erstellst und dann AddSpell machst? Dann kannst du das vielleicht auch mit einem Trick erreichen: du machst irgendwo einen XMarker hin und gibst ihm eine Reference, z.B. NPCMarkerRef. Dem NPC gibst du jetzt dieses Script:

Code:
scn ScriptName

Begin GameMode

MoveTo NPCMarkerRef

End

Der Witz daran: der NPC wird in jedem Frame, also ca. 25mal die Sekunde versuchen, zum XMarker zu gehen. Bei Morrowind wäre er dann eingefroren. Musst mal schauen, obs bei Oblivion auch so klappt ;)
 
also ich will nich das der für immer gelähmt iss sondern nur für ne bestimmte zeit und nur unter betimmten bedingungen. An der Bedingung liegts au ned weil ichs mal mit ner messagebox getstet hab und die kommt aber mach ich addspell und dann nen spell mit lähmen geht nix.... oder weiß jemand wie man ner kreatur befiehlt nen trank zu trinken? mit equipitem gehts jedenfalls nicht...
 
Kommt auf die Kreatur an. Wenn du die Kreatur vor dem Bildschirm lähmen möchtest (auch Spieler genannt ;)), dann kannst du mit DisablePlayerControls arbeiten. Bei Gegner wüßte ich auf Anhieb keinen entsprechenden Befehl, was aber nicht unbedingt heißen muss, dass es den nicht gibt.
 
also ich bin ma nen schritt vorwärts gekommen ich hab anstatt nem zauber ne fähigkeit genommen und wolle sie eig nach ein paar sekunden per skript-timer entfernen doch anstatt nach ein paar sec wieder aufzustehen steht des viech erst wied auf wenn ich n 2. mal draufklopp -.- kann mir vielleicht jemand erklären wie ich des mim timer hinkrieg? cs.wiki hilft mir au ned grad weiter....
 
so also hier ma den script laut wiki und dem skricting for dummies für morrowind müsste er gehen:

Code:
scn Frozen

short EvenHitFrost
short EvenHitFire
float timer

begin OnHitMagicEffec FRDG

If ( EvenHitFrost  == 0 )
        AddSpell "DarkLachanceFade"
        set EvenHitFrost to 1
        set timer to ( timer + getsecondspassed )
elseif ( timer > 3 )
        if ( EvenHitFrost == 1 )
                RemoveSpell "DarkLachanceFade"
                set EvenhitFrost to 0
                set timer to 0
        endif
Endif

end

begin OnHitMagicEffect FIDG

If ( EvenHitFire  == 0 )
       AddSpell "DarkParalyze"
       set EvenHitFire to 1
       set timer to ( timer + getsecondspassed )
elseif ( EvenHitFire == 1 )
        if ( timer > 3 )
                RemoveSpell "DarkParalyze"
                set EvenhitFire to 0
                set timer to 0
        endif
Endif

end

die spells spielen eig keine rolle ich weil einfach nur wissen wie man den nach 3 sekunden entfernt^^
 
Hmm... Beim drübergucken würde ich sagen, dass die Scripts so nicht wie gewollt funktionieren können, da die elseif-Abfrage nie ausgeführt werden wird.

Am Beispiel des ersten Scripts:

Beim ersten Durchgang wird der If-Baustein ausgeführt, da EvenHitFrost 0 ist. Im If-Zyklus wird EvenHitFrost aber sofort auf 1 gesetzt, sodass die If-Schleife nur einmal läuft. Da sie aber nur einmal durchläuft kann timer eigentlich nicht auf >3 kommen und deshalb wird die elseif-Abfrage nicht laufen, oder sehe ich das falsch?

Gruß,

Hellion

edit: ich würde vermuten, dass der Code so eher funktionieren würde:

Code:
If ( EvenHitFrost  == 0 ) 
        AddSpell "DarkLachanceFade" 
        set EvenHitFrost to 1 
elseif ( EvenHitFrost == 1 ) 
        if ( timer > 3 ) 
                RemoveSpell "DarkLachanceFade" 
                set EvenHitFrost to 0 
                set timer to 0
        else set timer to ( timer + getsecondspassed ) 
        endif 
Endif
 
dany schrieb:
ich hät mal ne frage: is es möglich eine creature per skript befehl auszuknocken also mehr oder minder zu lähmen?

Wie soll denn das Szenario aussehen ?
Soll der für den Spieler sichtbar gelähmt sein ?
Spielt er eigentlich keine Rolle und soll nur nicht aktiv sein?
Wird er bei einer Interaktion mit dem Spieler oder anderen Objekten gelähmt?

Je nach dem, was Du da vorhast, kann man den mit disable/enable ein- oder ausschalten.

Mit Player.PlaceAtMe x,x,x kann man eine Referenz der Kreatur an der gewünschten Stelle erscheinen lassen.

Man kann auch die Aggression auf 5 setzen. Dann ignoriert er den Spieler. Wenn man per Script die Aggression dann erhöht, so dass GetDisposition Player < Aggression ist, würde er angreifen.

Mit SetUnconscious 1 würde er nur stocksteif herumstehen. Per script kann man ihn auf SetUnconscious 0 setzen, damit er sich normal verhält.

Man kann aber z.B. auch einen Spell "Lähmen für 30 Sekunden" machen und den dann von einem Activator auf den Actor abfeuern lassen (ActivatorRef.Cast Zaubername ZielRef).

Ebenfalls kann man ihn mit Kill umbringen und mit Resurrect wieder zum Leben erwecken.

Was Du genau machen solltest, hängt allein vom Szanario ab.
 
also ich wollte, das die kreatur so gelähmt wird wie wenn man zB mim schwert auf dem meisterlevel jemanden lähmen kann so sollte es aussehen udn es sollte auch nach soetwas aussehen
mich wunderts einfach das es keinen einfachen knockout befehl gibt aber eine getknockedout-abfrage gibt es schon...
 
dany schrieb:
ich weil einfach nur wissen wie man den nach 3 sekunden entfernt^^

Code:
float Timer
short DoTimer

begin GameMode
  if DoTimer == 1
    Set Timer To Timer + GetSecondsPassed
    If Timer >= 3
      ActorRef.Removespell NameDesZaubers
      Set Timer To 0
      Set DoTimer To 0
    EndIf
  EndIf
end

Der Timer wird aktiviert, in dem man DoTimer auf 1 setzt. Nach 3 Sekunden wird die Funktion ausgeführt, der Timer setzt sich auf 0 zurück und deaktiviert sich.

Edit:

dany schrieb:
also ich wollte, das die kreatur so gelähmt wird wie wenn man zB mim schwert auf dem meisterlevel jemanden lähmen kann so sollte es aussehen udn es sollte auch nach soetwas aussehen
ok. Und das Szenario ? In welcher Situation soll das passieren ?

Edit by BaalLukor: Bitte keine Doppelpostings.
 
Code:
Begin OnMagicEffectHit FRDG
wenn er von eisverzauberten waffen getroffen wird bzw von einem eiszauber

Edit: statt dem dotimer könnte ich doch auch dann das evenhitfrost einsetzen oder?
 
dany schrieb:
Edit: statt dem dotimer könnte ich doch auch dann das evenhitfrost einsetzen oder?
jo - wenn evenhitfrost dann nach Auslösen des Timers auch zurückgesetzt wird und das den Ablauf des restlichen Scripts nicht beeinflusst

Wenn ich das machen müsste, würde ich das wahrscheinlich so lösen ... aber das ist eben auch nur EINE von mehreren Möglichkeiten.

1.) Zauber (ID = TestZauber) erstellen mit Lähmen an Ziel für xx Sekunden Dauer
2.) Aktivator (ID = TestActivator) erstellen, der keine Texturen hat (z.B. meshes\magiceffects\null.nif)
3.) nachfolgendes Script auf der Kreatur laufen lassen

Code:
Scriptname TestScript

Ref ActivatorReference
Ref MyReference
Float MyZPosition
Float NewActivatorZPos

Begin OnMagicEffectHit FRDG
	Set MyReference To GetSelf
	Set MyZPosition To MyReference.GetPos z
	Set NewActivatorZPos To MyZPosition + 16
	Set ActivatorReference To MyReference.PlaceAtMe TestActivator,1,0,0
	ActivatorReference.SetPos z, NewActivatorZPos
	ActivatorReference.Cast TestZauber MyReference
	ActivatorReference.Disable
End

Die Höhenkorrektur ist notwendig, damit der Zauber nicht von der Bodentextur abgeschirmt wird.