begin kr_tn_sc_MG1_VA_G5_44_a
short state
float timer
;kr_tn_so_MG1_VA_G5_44_a ist die ID, unter der wir die Vertonung dieses Dialogs registriert haben.
;kr_tn_NPC_MG1_nimar ist ein NPC aus unserer Mod, dessen Skript wir kontrollieren. In seinem lokalen Skript weisen wir ein 'short RemoteShutUp' aus. Das Remote hilft, später zu erinnern, dass diese Variable von einem externen Skript benötigt wird und wir sie nicht löschen dürfen, obwohl sie im Skript selbst gar nicht genutzt wird.
;EDIT Nachtrag: Besser eine globale Variable nutzen, die dann für absolut jeden NPC und jeden Dialog exakt gleich genutzt wird. Ich belasse die Lösung mit der lokalen Variable jetzt aber im Beispielskript.
;Da es viele dieser Skripte und Tondateien geben muss ist es wahrscheinlich sinnvoll, sich ein klares Schema zu überlegen, nach dem die Dialoge und Antworten mit einer ID versehen werden. Im Beispiel nutze ich zunächst mein Standard-Präfix von Autor_Modifikation_Entitätskürzel_Quest-Kontext_IDENTIFIER. Indem wir den Identifier für Skript und registrierten Sound gleich halten, können keine Verwechslungen auftreten, welcher Sound in welchem Skript abzuspielen ist. Interessant ist eher, wie der Identifier aufgebaut werden soll. Ich habe hier G5 für Greeting in Hierarchie-Ebene 5 genommen, 44 für die Choice und das Suffix _a, um die Variante von Choice 44 zu bezeichnen. Je nach zutreffenden Filtern wäre die Antwort auf Choice 44 nämlich eine andere.
if ( state == -1 )
StopSound "kr_tn_so_MG1_VA_G5_44_a"
StopScript kr_tn_sc_MG1_VA_G5_44_a
return
endif
if ( MenuMode == 0 )
set state to -1
return
endif
if ( state == 4 )
if ( "kr_tn_NPC_MG1_nimar".RemoteShutUp == 1 )
set state to -1
return
endif
;Timer an die Länge der Datei anpassen. Eine Sekunde Stille am Dateiende macht es einfacher, einen versehentlichen hörbaren Loop zu vermeiden.
set timer to ( timer + GetSecondsPassed )
if ( timer >= 27.8 )
set state to -1
return
endif
return
elseif ( state == 3 )
Set "kr_tn_NPC_MG1_nimar".RemoteShutUp to 0
PlayLoopSound "kr_tn_so_MG1_VA_G5_44_a"
set state to 4
return
else
;drei Frames Puffer, damit das vorherige Skript den vorangegangenen Dialog sauber abbrechen kann.
Set state to ( state + 1 )
endif
end kr_tn_sc_MG1_VA_G5_44_a