NewRaven.net - Forum

Auf Anfrage von blackthunderbird vor ein paar Tagen hatte ich eine (neue) Übersetzung von \"Wilderness Sounds\" gemacht, weil es Probleme mit dem integrierten \"Master Index\" gab (Thread hier: http://forum.newraven.net/showthread.php?tid=1128).
Ich hatte ganz einfach das englische Original hergenommen, alles von \"Master Index\" kurzerhand rausgelöscht (mit TESAME), und das verbliebene übersetzt: ein paar Zellen umbenannt, in einem Skript Zellnamen geändert.
Bloß: jetzt funktioniert es nicht. Alle Geräusche, die durch das globale Skript \"ho_WildSoundMain\" generiert werden sollten, kommen nicht (nur die von Activators). Und manchmal stürzt es auch ab...

ho_WildSoundMain ist das Skript, in dem ich Zellnamen geändert hatte (und nur die!). Es funktioniert kurz gefasst so:
1. Es wird festgestellt, ob der Spieler zwischen Interior und Exterior gewechselt hat
2. Falls ja, werden alle laufenden Sounds gestoppt
3. Tag/Nacht usw. werden festgestellt
4. Die aktuelle Region wird festgestellt
5. Ein zur Region gehörendes anderes globales Skript wird gestartet

Probleme:
a. beim Betreten von Interiors kommt die allseits beliebte Meldung \"EXPRESSION in <Skriptname>\" / \"Left Eval\".
b. Das Skript scheint in Block 2 - Reset, laufende Sounds stoppen - steckenzubleiben oder zu \"returnen\"

Hier mal Ausschnitte aus dem Code (weil 641 Zeilen lang - wer\'s bei sich ausprobieren will, esp hier: http://home.freiepresse.de/anros/ultimat..._nuresp.7z):

Code:

Begin ho_WildSoundMain

float fDelay
short region
short reset
short oldregion
short noloops
short interior
float fOldHour
float fTemp

[..]

;THIS SECTION CONTROLS INTERIOR CELL SOUND SCHEMES
if ( GetPCCell \"Gramfeste\" == 1 )
[...]
elseif ( GetInterior == 1 ) <= Punkt von \"EXPRESSION in ...\"

if ( interior == 0 )
set reset to 1
set interior to 1
else
return
endif
else
[...]
endif

; ADD ALL SOUNDS THAT YOU WANT TO STOP WHEN YOU GO INSIDE TO THIS LIST
if ( reset == 1 ) <= blockiert oder return irgendwie nach hier
if ( player->GetSoundPlaying, \"Ash_Insect5\" == 1 )
player->StopSound, \"Ash_Insect5\"
endif
.....
[das Ganze über 60 mal]

set reset to 0
endif

set fTemp to GameHour
set fTemp to ( GameHour - fOldHour )
if ( fTemp >= 0 )
if ( fTemp < fDelay )
return
endif
endif
<= kommt nie hier hin
set fDelay to Random, 5
set fDelay to ( fDelay + 13 )
set fDelay to ( fDelay * TimeScale )
set fDelay to ( fDelay / 3600 )

set fOldHour to GameHour

;check whether to stop ambient loops
set noloops to 1

if ( GameHour > 6 )
if ( GameHour < 20 )
if ( GetCurrentWeather < 4 )
set noloops to 0
endif
endif
endif

if ( noloops == 1 )
if ( player->GetSoundPlaying, \"town\" == 1 )
player->StopSound, \"town\"
endif
if ( player->GetSoundPlaying, \"animals\" == 1 )
player->StopSound, \"animals\"
endif
endif

;ADD ALL CELLS THAT PLAY THE UNIQUE REGIONAL SOUND SCHEME SCRIPTS IN THIS LIST

;ascadian isles
if ( GetPCCell, \"Ascadia-Inseln\" == 1 )
set region to 1
elseif ( GetPCCell, \"Felder von Kummu\" == 1 )
set region to 1
......
[das Ganze für alle Zellen]
.........
elseif ( GetPCCell, \"Gramfeste\" == 1 )
if ( interior == 0 )
set region to 8
else
set region to -1
endif
else
set region to -1
endif
if ( oldregion != region )
set reset to 1
set oldregion to region
set fDelay to 0
return
endif

;ADD UNIQUE REGIONAL SOUND SCRIPTS TO THIS LIST AND ASSIGNE A NUMBER TO EACH
;
set oldregion to region

if ( region == 1 )
StartScript, \"ho_ascadiansounds\"
elseif ( region == 2 )
StartScript, \"ho_bittercoastsounds\"
.........
[für alle regions]
endif

End



Wenn ich \"short GetInterior\" definiere, kommt der EXPRESSION-Fehler nicht mehr, aber trotzdem kommt kein Ton. Aber seit wann muss man denn \"GetInterior\" definieren, ich denke, das betrifft nur \"OnPCEquip\" und \"OnPCDrop\" und das ganze \"On\"-Zeug?
Referenz-URLs