Construction Set Skriptthread zum Construction Set

Schwert

Hallo.

Ich suche ein Skript das ich hier vor langer Zeit mal gefunden hatte. Dieses Skript bewirkte das wenn man ein "bestimmtes" Schwert benutzt und mit ihn eine bestimmte Anzahl von NPC's oder Kreaturen tötet das dass Schwert dann stärker wird. Sozusagen töte 100 Kreaturen und es wird eine Stufe höher. Würde es sozusagen "wachsen" lassen. Vielleicht kann mir ja jemand helfen.

mfg
Sammael
 
Hallo.

Ich suche ein Skript das ich hier vor langer Zeit mal gefunden hatte. Dieses Skript bewirkte das wenn man ein "bestimmtes" Schwert benutzt und mit ihn eine bestimmte Anzahl von NPC's oder Kreaturen tötet das dass Schwert dann stärker wird. Sozusagen töte 100 Kreaturen und es wird eine Stufe höher. Würde es sozusagen "wachsen" lassen. Vielleicht kann mir ja jemand helfen.

mfg
Sammael

Ahh...das gleiche Script, das Morgen-/Abendzahn aus SI verwendet...

Klau dir einfach die RefId's von Morgen- und Abendzahn.
Ist ja "Klinge nähren" - oder meinst du was anderes?

soXXeth
 
Auf die Idee bin ich garnicht gekommen. Hab das Schwert nie verwendet. Wie stelle ich nun ein das er immer weiter "seelen" zählt und sich das Schwert nicht mit Tag und Nacht verändert? Könnte mir jemand mal ein Beispiel geben? Ist schon lange her das ich Skripte geschrieben habe.

mfg
Sammael
 
Eine Frage von mir wieder einmal ...

Gibt es eine Möglichkeit, dass man im Verlauf eines Scripts oder ähnlichem die *.nif-Zuweisung eines Objektes switchen kann? Oder muss man da dann immer 2 Objekte benutzen?

Falls 2tes:

Könnte mir einer sagen, wie ich dem Objekt 2 nach die exakten Koordinaten von Objekt 1 zuweise? Und gibt es eine Abfrage, mit welcher man überprüfen kann, ob sich havoktechnisch nichts mehr tut? Dann nämlich erst, soll der Objekt-Replace stattfinden.


:bye:
DarkRuler2500
 
Also für die erste Möglichkeit würde es mit OBSE funktionieren, aber warscheinlich ziemlich kompliziert.
Ich glaube mit ModModelPath, bin mir aber nicht sicher. :(

Das Zweite ist leichter, aber wie man die Havok des Objektes abstellt, weis ich nicht. :?
Hier das Skript ohne Havok:

Code:
SCN ...

Float x
Float y
Float z

Float xAngle
Float yAngle
Float zAngle

Short Once

Float fQuestDelayTime


Begin GameMode

If fQuestDelayTime
        set fQuestDelayTime to 0.001

    Endif

If Once == 0
        set x to <Object>.GetPos x
        set y to <Object>.GetPos y
        set z to <Object>.GetPos z
        
        set xAngle to <Object>.GetAngle x
        set yAngle to <Object>.GetAngle y
        set zAngle to <Object>.GetAngle z

        set Once to 1

    Endif

If (Havok-Abfrage) && Once == 1
        <Object>.disable
        <Object2>.SetPos x y z
        <Object2>.SetAngle xAngle yAngle zAngle

         set Once to 2

    Endif


End
 
Dadurch wird das Quest-Skript bis zu 100 mal in der Sekunde durchgegangen. Normalerweise wird ein Quest-Skript nur alle 5 Sekunden durchgegangen. ;)
Und ich habe extra nicht "If fQuestDelayTime != 0.001" geschrieben, da "If fQuestDelayTime" besser für die Performance ist.
 
  • Like
Reaktionen: TheDarkRuler
Und warum muss es 100 Mal pro Sekunde durchgehämmert werden?
Reicht doch auch einmal aus, wenn Objekt 2 kein Havok hat und Objekt 1 nach der Platzierung von Objekt 2 disabled wird.

:bye:
 
Aber wenn das Skript nur alle 5 Sekunden durchlaufen wird, läuft es eben ziemlich langsam ab. Aber wenn dich das nicht stört, kannst du es ja auch weglassen. ;)
 
  • Like
Reaktionen: TheDarkRuler
Auch von mir mal eine Frage - ich würde gern eine Art Lift basteln, die sich horizontal bewegt. Das Problem ist allerdings, dass diese Bewegung nicht exakt auf einer Achse von statten geht, sondern auf zwei Achsen. Ich brauche also ein Script, das ein Objekt zu anderen Koordinaten innerhalb einer Zelle bewegt - und zwar so, dass der Spieler mittransportiert werden kann. :)
 
Kahmul hat etwas weiter oben etwas in der Richtung geschrieben.

Code:
        set x to <Object>.GetPos x
        set y to <Object>.GetPos y
        set z to <Object>.GetPos z

Wenn ich das richtig verstehe müsstest du nur in Sekundenschritten deinen Lift bewegen und die Referenz des Spielers mit dazu.

Bin aber noch nicht so versiert im Scripten. Lasse mich daher gerne verbessern.

:bye:
DarkRuler2500
 
  • Like
Reaktionen: Dunkelherz
Ich glaube, dass bei dieser Variante das Problem wäre, dass das Objekt ruckartig bewegt wird - es gibt aber auch fließende Bewegungsabläufe - aber wie die funktionieren, konnte ich bis dato noch nicht ergründen. Danke jedenfalls aber mal für deinen Vorschlag! :)
 
Das ist schon klar - aber es muss auch wesentlich einfacher gehen - das meinte ich. ;) Ich glaube kaum, dass z.B. die Aufzüge in Nehrim oder die Bootsfahrt in Adash auf so einem ewiglangem Rumgefrickel basieren. Aber die verwendeten Scripts sind mir einfach zu hoch, um anhand dessen selber was zu schreiben. :lol:
 
Ich hoffe mal, LK hat nichts dagegen, dass ich sein Script hier reinstelle. Das Script für das Adash-Boot am Ende von Kapitel 1 sieht so aus:

scn zzzKap01ZwischenweltPlayerStuhlScript

short doOnce

float posX01
float posX02
float posX02a
float posX03
float posX04
short frame
float timer
float timerTalk

begin OnActivate

if (doOnce == 0)
DisablePlayerControls
set timer to 5
Activate
set doOnce to 1
endif

end

begin GameMode
if (doOnce == 1 && timer > 0)
set timer to timer - getSecondsPassed
endif

if (zzzKap01D.fmTalk < 13 && doOnce == 1)
if (timerTalk > 0)
set timerTalk to timerTalk - getSecondsPassed
else
if (zzzKap01D.fmTalk == 2)
set timerTalk to 7
elseif (zzzKap01D.fmTalk == 3)
set timerTalk to 15
elseif (zzzKap01D.fmTalk == 4)
set timerTalk to 15
elseif (zzzKap01D.fmTalk == 5)
set timerTalk to 10
elseif (zzzKap01D.fmTalk == 6)
set timerTalk to 12
elseif (zzzKap01D.fmTalk == 7)
set timerTalk to 14
elseif (zzzKap01D.fmTalk == 8)
set timerTalk to 16
elseif (zzzKap01D.fmTalk == 9)
set timerTalk to 13
elseif (zzzKap01D.fmTalk == 10)
set timerTalk to 7
elseif (zzzKap01D.fmTalk == 11)
set timerTalk to 14
elseif (zzzKap01D.fmTalk == 12)
set timerTalk to 17
endif
zzzKap01FaehrmannRef.sayto player "zzzKap01FaehrmannTalk" 1
endif
endif

if (doOnce == 1 && timer <= 0)
if (zzzKap01DBoat01Ref.getPos x > -18000)

if (frame == 6)
zzzKap01DBoat01Ref.enable
set frame to 0
endif

set posX01 to zzzKap01DBoat01Ref.getPos x
set posX01 to posX01 - 3
zzzKap01DBoat01Ref.setPos x, posX01
zzzKap01DBoat01RealRef.setPos x, posX01
set frame to frame + 1

set posX02 to zzzKap01DPlayerStuhl0Ref.getPos x
set posX02 to posX02 - 3
zzzKap01DPlayerStuhl0Ref.setPos x, posX02

set posX02a to zzzKap01FaehrmannRef.getPos x
set posX02a to posX02a - 3
zzzKap01FaehrmannRef.setPos x, posX02a

set posX03 to zzzKap01DPlayerStuhlRef.getPos x
set posX03 to posX03 - 3
zzzKap01DPlayerStuhlRef.setPos x, posX03

set posX04 to player.getPos x
set posX04 to posX04 - 3
player.setPos x, posX04

if (frame == 5)
zzzKap01DBoat01Ref.disable
set frame to 6
endif

else
activate player
set doOnce to 2
zzzKap01DBoat01Ref.enable
endif
endif
end
 
Ich versteh' den Script zwar auch nicht zu Gänze, aber ich vermute mal, dass dieser Teil raus kann.
Schließlich stellt das hier nur das dar, was der Fährmann redet, oder nicht?
if (zzzKap01D.fmTalk < 13 && doOnce == 1)
if (timerTalk > 0)
set timerTalk to timerTalk - getSecondsPassed
else
if (zzzKap01D.fmTalk == 2)
set timerTalk to 7
elseif (zzzKap01D.fmTalk == 3)
set timerTalk to 15
elseif (zzzKap01D.fmTalk == 4)
set timerTalk to 15
elseif (zzzKap01D.fmTalk == 5)
set timerTalk to 10
elseif (zzzKap01D.fmTalk == 6)
set timerTalk to 12
elseif (zzzKap01D.fmTalk == 7)
set timerTalk to 14
elseif (zzzKap01D.fmTalk == 8)
set timerTalk to 16
elseif (zzzKap01D.fmTalk == 9)
set timerTalk to 13
elseif (zzzKap01D.fmTalk == 10)
set timerTalk to 7
elseif (zzzKap01D.fmTalk == 11)
set timerTalk to 14
elseif (zzzKap01D.fmTalk == 12)
set timerTalk to 17
endif
zzzKap01FaehrmannRef.sayto player "zzzKap01FaehrmannTalk" 1
endif
endif

Der eigentliche Code wäre dann mMn nur noch das hier :
scn zzzKap01ZwischenweltPlayerStuhlScript

short doOnce

float posX01
float posX02
float posX02a
float posX03
float posX04
short frame
float timer
float timerTalk

begin OnActivate

if (doOnce == 0)
DisablePlayerControls
set timer to 5
Activate
set doOnce to 1
endif

end

begin GameMode
if (doOnce == 1 && timer > 0)
set timer to timer - getSecondsPassed
endif

if (doOnce == 1 && timer <= 0)
if (zzzKap01DBoat01Ref.getPos x > -18000)

if (frame == 6)
zzzKap01DBoat01Ref.enable
set frame to 0
endif

set posX01 to zzzKap01DBoat01Ref.getPos x
set posX01 to posX01 - 3
zzzKap01DBoat01Ref.setPos x, posX01
zzzKap01DBoat01RealRef.setPos x, posX01
set frame to frame + 1

set posX02 to zzzKap01DPlayerStuhl0Ref.getPos x
set posX02 to posX02 - 3
zzzKap01DPlayerStuhl0Ref.setPos x, posX02

set posX02a to zzzKap01FaehrmannRef.getPos x
set posX02a to posX02a - 3
zzzKap01FaehrmannRef.setPos x, posX02a

set posX03 to zzzKap01DPlayerStuhlRef.getPos x
set posX03 to posX03 - 3
zzzKap01DPlayerStuhlRef.setPos x, posX03

set posX04 to player.getPos x
set posX04 to posX04 - 3
player.setPos x, posX04

if (frame == 5)
zzzKap01DBoat01Ref.disable
set frame to 6
endif

else
activate player
set doOnce to 2
zzzKap01DBoat01Ref.enable
endif
endif
end
EDIT:

Und noch etwas fällt mir auf.
Diese Zeilen hier ...
Code:
set posX02 to zzzKap01DPlayerStuhl0Ref.getPos x
			set posX02 to posX02 - 3
			zzzKap01DPlayerStuhl0Ref.setPos x, posX02

			set posX02a to zzzKap01FaehrmannRef.getPos x
			set posX02a to posX02a - 3
			zzzKap01FaehrmannRef.setPos x, posX02a

			set posX03 to zzzKap01DPlayerStuhlRef.getPos x
			set posX03 to posX03 - 3
			zzzKap01DPlayerStuhlRef.setPos x, posX03

			set posX04 to player.getPos x
			set posX04 to posX04 - 3
			player.setPos x, posX04

Sind doch eigentlich immer die gleichen, nur mit unterschiedlichen ReferenceIDs, oder?
 
Zuletzt bearbeitet: