PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Scriptfehler? Seh ihn nicht, Hilfe ^^



Papi62
25.02.2010, 01:50
Vieleicht kann ja mal ein Script-Profi da drüberrutschen, ich seh den Fehler nicht.
Das Script läuft immer nur bis Stage 1 und wiederholt sich, es schaltet nicht auf Stage 2 und weiter.
Ich habe noch andere solche Scripts mit dem selben Aufbau und die funktionieren alle, deswegen bin ich etwas ratlos. :)


scn CNWLightFlickerTrigger01Script


float Timer
short Start
short Stage
short DoOnce


Begin OnTriggerEnter Player

set Start to 1

End


Begin GameMode

if (Timer <=0) && (Start == 1)
set Stage to (Stage + 1)
set DoOnce to 0
else
set Timer to (Timer - GetSecondsPassed)
endif

if DoOnce == 0
if Stage == 1
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
Player.AddItem f 111
set Timer to .3

elseif Stage == 2
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
Player.AddItem f 222
set Timer to 1

elseif Stage == 3
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
Player.AddItem f 333
set Timer to .8

elseif Stage == 4
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
Player.AddItem f 444
set Timer to .5

elseif Stage == 5
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
Player.AddItem f 555
set Timer to 1

elseif Stage == 6
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
Player.AddItem f 666
set Timer to .5

elseif Stage == 7
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
Player.AddItem f 777
set Timer to .3

elseif Stage == 8
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
Player.AddItem f 888
set Timer to .8

elseif Stage == 9
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
Player.AddItem f 999
set Timer to 1

elseif Stage == 10
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Stage to 1
set DoOnce to 1
Player.AddItem f 1010
set Timer to .6
endif
endif

End


... und hier hab ich noch so'n Krüppel, das Script liegt auf einem Activator der sich bis zu den Markern bewegen soll. Move wird durch einen Trigger auf 1 gesetzt und das geht weil ich den darin eingebundenen Sound höre.
Ich habe das änliche auf einer Zielscheibe (auch Activator) und die funktioniert problemlos.


scn CNWHumanHanged01Script

short Move
short doOnce
short Stage

float ZAchsePosition
float ZAchse


Begin GameMode

if DoOnce == 0 && Move == 1
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -10
SetPos Z ZAchse
Set DoOnce to 1
endif

if DoOnce == 1 && Move == 1
if GetDistance CNWHanged01MarkerREF <= 10
Set Move to 2
endif
endif

;************************************************* ****************

if DoOnce == 1 && Move == 2
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition +6
SetPos Z ZAchse
endif

if DoOnce == 1 && Move == 2
if GetDistance CNWHanged02MarkerREF <= 10
Set Move to 3
endif
endif

;************************************************* ****************

if DoOnce == 1 && Move == 3
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -10
SetPos Z ZAchse
endif

if DoOnce == 1 && Move == 3
if GetDistance CNWHanged01MarkerREF <= 10
Set Move to 0
Set DoOnce to 2
endif
endif

End

Papi62
26.02.2010, 00:50
Das erste schaltet die "Stage" immer noch nicht weiter, d.h. es schaltet ja aber nur bis auf 1 welches immer wiederholt wird. Hab schon einiges probiert mit int Timer anstatt float Timer, mit If Timer >= 0 anstatt if Timer <= 0. Es nützt alles nichts. :confused: :auh :cry


Beim 2. "Krüppel" hab ich nur die "Set doOnce to ..." verschoben und geändert, seither läufts. :gruebel

So funzt es:

scn CNWHumanHanged01Script

short Move
short DoOnce

float ZAchsePosition
float ZAchse


Begin GameMode

if DoOnce == 0 && Move == 1
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -8
SetPos Z ZAchse
endif

if DoOnce == 0 && Move == 1
if GetDistance CNWHanged01MarkerREF <= 10
Set Move to 2
Set DoOnce to 1
endif
endif

;************************************************* ****************

if DoOnce == 1 && Move == 2
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition +4
SetPos Z ZAchse
endif

if DoOnce == 1 && Move == 2
if GetDistance CNWHanged02MarkerREF <= 10
Set Move to 3
Set DoOnce to 2
endif
endif

;************************************************* ****************

if DoOnce == 2 && Move == 3
Set ZAchsePosition to GetPos Z
Set ZAchse to ZAchsePosition -7
SetPos Z ZAchse
endif

if DoOnce == 2 && Move == 3
if GetDistance CNWHanged01MarkerREF <= 10
Set Move to 0
Set DoOnce to 3
endif
endif

End

Papi62
26.02.2010, 01:33
Ich habe das 1. Script wie folgt geändert, nun läuft auch das. :fest3
Änderung: Das "set DoOnce to 1" am Ende aller Stages und den Timer-Auslöser an Ende des Game Mode.


scn CNWLightFlickerTrigger01Script


float Timer
short Start
short Stage
short DoOnce


Begin OnTriggerEnter Player

set Start to 1

End


Begin GameMode

if DoOnce == 0
if (Stage == 1)
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
set Timer to 0.6

elseif (Stage == 2)
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Timer to 1.3

elseif (Stage == 3)
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
set Timer to 1.1

elseif (Stage == 4)
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Timer to 0.8

elseif (Stage == 5)
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
set Timer to 1.3

elseif (Stage == 6)
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Timer to 0.8

elseif (Stage == 7)
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
set Timer to 0.6

elseif (Stage == 8)
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Timer to 1.1

elseif (Stage == 9)
CNWFXGlowSimpFillRnd02REF.Enable 1
CNWFlickerShackLightKeyWarm03REF.Enable 1
set Timer to 1.3

elseif (Stage == 10)
CNWFXGlowSimpFillRnd02REF.Disable 1
CNWFlickerShackLightKeyWarm03REF.Disable 1
set Stage to 0
set Timer to 0.9
endif

set DoOnce to 1

endif

if Timer <= 0 && Start == 1
set Stage to (Stage + 1)
set DoOnce to 0
else
set Timer to (Timer - GetSecondsPassed)
endif

End

Darth Bane
26.02.2010, 07:41
Logisch :eek:

Klar der Timer muss am Ende dieser "Schleife", weil quasi immer ein Durchlauf stattfindet.

Hätte ich auch drauf kommen müssen :auh:auh:auh:auh...

caesarrulez
26.02.2010, 10:16
hä ich dachte immer dass GameMode teile so wie so geschleift werden, also triggert jetzt der neuer Timertick dann wohl den erneuten Durchlauf.

In VB oder C# z.B. definiert man einen Timer, gibt dem das Intervall mit und setzt das, was passieren soll ins timer.tick() event. Dann hält sich das Script ja mal direkt an richtige Programmiersprachen :D