World of Gothic Archiv > Editing
Schleifen Problem
Seite 1 von 1  1 
19.08.2003, 23:30 #1
dark-base
Beiträge: 26
Schleifen Problem
Ich hatte in einer Funktion eine while Schleife eingebaut, worauf Gothic mir die Fehlermeldung : "U:PAR: Unknown identifier : WHILE (line 33)" gab. Da es hätte seien können, dass im Code etwas falsch war hatte ich meine Funktion zum Test auf das Simpelste und Notwendigste optimiert ,wass dann so aussah:
code\:

FUNC VOID Test()
{

var int BeendeS; //Beende Schleife

while (BeendeS == 0)
{

BeendeS = 1;

};
};



Leider bekam ich immer noch die gleiche Fehlermeldung. Es kann aber unmöglich seien, dass Gothic dieses Schlüsselwort nicht kennt, denn es wird in der Dokumentation angegeben.
Die Frage ist somit : Was mache ich falsch?
20.08.2003, 00:05 #2
HornOx
Beiträge: 1.458

quote:
Es kann aber unmöglich seien, dass Gothic dieses Schlüsselwort nicht kennt, denn es wird in der Dokumentation angegeben.
Optimist ;) AFAIK gibts keine Schleifen in Gothic.
20.08.2003, 18:30 #3
Auron_X
Beiträge: 929

gibts eientlich sowas wie nen GOTO befehl??? also um zu nem Punkt zu hüpfen? damit könnte man sich selbst ne Schleife basteln...
20.08.2003, 20:41 #4
dark-base
Beiträge: 26

quote:
Zitat von HornOx
Optimist ;) AFAIK gibts keine Schleifen in Gothic.


Und wozu ist dann dieses Schlüsselwort gut: "Die Skriptsprach(Deadalus)/2.Beschreibung der Syntax: Schlüsselwörter sind: ... while ..." ?

Außerdem: Kennt jemand eine Möglichkeit einen Befehl erst nach ein paar Sekunden auszuführen ohne AI_Wait zu benutzen?
20.08.2003, 21:07 #5
HornOx
Beiträge: 1.458

Wenn Gothic ein Schlüsselwort nicht kennt das es aber laut Dokumentation kennen sollte ist die Dokumentation falsch. GOTO und ähnliches gibts auch nicht, man könnte höchstens mal probieren mit rekursion etwas schleifenähnliches aufzubauen. Aber da Gothic nur Konstanten als Index bei Arrays unterstützt fällt könnte man Schleifen eh nur bei wenigen Fällen sinnvoll verwenden.
quote:
Kennt jemand eine Möglichkeit einen Befehl erst nach ein paar Sekunden auszuführen ohne AI_Wait zu benutzen?
Ohne zu wissen was für eine Art Befehl(AI, FAI, trigger oder allgemein) ist das schwer zu beantworten. Du kannst per script einen trigger starten der mit Verzögerung eine andere Scriptfunktion aufruft.
20.08.2003, 22:13 #6
GülleMüller
Beiträge: 472

Hi,

quote:
Und wozu ist dann dieses Schlüsselwort gut: "Die Skriptsprach(Deadalus)/2.Beschreibung der Syntax: Schlüsselwörter sind: ... while ..." ?

In einer (nahezu) 100%ig an C/C++ angelehnten Scriptsprache wäre dies ein Schlüsselwort.
Liest man sich aber die Einschränkungen der Scriptsprache (siehe gothic_skripte.htm) könnte man sich die Frage schenken.
Gut, damit wäre das geklärt. ;)

cu
GüMü
20.08.2003, 22:24 #7
dark-base
Beiträge: 26

quote:
Zitat von HornOx
Ohne zu wissen was für eine Art Befehl(AI, FAI, trigger oder allgemein) ist das schwer zu beantworten. Du kannst per script einen trigger starten der mit Verzögerung eine andere Scriptfunktion aufruft.


Ich will den Befehl Ai_ProcessInfos um ein paar Sekunden verzögern.
Das mit den Triggern ist schon eine gute Idee und es klappt auch, aber es wäre schön wenn es noch eine elegantere Lösung gebe, denn ich habe in meiner Mod mehere Welten und müsste somit in jeder Welt diesen Trigger einfügen da der Dialog aus bestimmten Gründen in jeder Welt aufgerufen werden kann.
21.08.2003, 01:34 #8
HornOx
Beiträge: 1.458

Den Trigger kannst du ja per Vobtree in die anderen Welten exportieren, dann ist es kaum zusätzliche Arbeit.
Weiß jemand warum fogendes nicht funktioniert?
code\:
//Sleepabit.d verändern, sonst ist der Held "totmüde"
//die c_info-instanzen spar ich mir
var int my_count;
const int my_max_count=1000; // anpassen
func int ZS_Dead_Loop ()
{
var string my_string;
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her)) {
if (my_count<my_max_count) {
my_count=my_count+1;
} else if (my_count==my_max_count) {
my_count=0; // falls der Held wiederbelebt wird
AI_ProcessInfos(self);
return LOOP_END;
};
} else {
return LOOP_END;
};
};
func void ZS_Dead_End ()
{
};

ZS_Dead_Loop wird beim Tod des Helden nur einmal aufgerufen und nicht (wie ich eigentlich gehofft/vermutet habe) "geloopt" :( Ansonsten wär das nämlich die elegante Lösung die du wolltest ;)
21.08.2003, 12:09 #9
dark-base
Beiträge: 26

Tja HornOx, zu dieser Erkenntniss bin ich auch schon gekommen.
So ungefähr aber auch mit einer loppenden ZS_Dead Schleife wollt ich es machen aber sie wird wie gesagt nicht wiederholt. Achja, warscheinlich wird der Dialog zwar aufgerufen hängt dann aber, gell. Da muss mann noch was zusätzlich hinschreiben. Was verate ich aber net, hab schließlich die letzte Wochen dran gearbeitet und wäre ja schade wenn dieses geile Freature meiner Mod(hab en Respawnen Dialog) so einfach veraten wird.
Achja, die Idee mit dem Vobtree war super, danke HornOx.
21.08.2003, 17:13 #10
dark-base
Beiträge: 26

Zu früh gefreut. Ich hatte als ich die letzten post gemacht hab nur getestet und nicht gleich den richtigen code benutzt. Nun aber klappt es mit den richtigen Code net, weil aus irgendeinem Grund der Trigger nach dem Tod des Helden net funzt. Ich mach nun am besten ein neues Thema auf stell dort den Code rein.
21.08.2003, 22:11 #11
HornOx
Beiträge: 1.458

quote:
Tja HornOx, zu dieser Erkenntniss bin ich auch schon gekommen.
So ungefähr aber auch mit einer loppenden ZS_Dead Schleife wollt ich es machen aber sie wird wie gesagt nicht wiederholt. Achja, warscheinlich wird der Dialog zwar aufgerufen hängt dann aber, gell. Da muss mann noch was zusätzlich hinschreiben. Was verate ich aber net, hab schließlich die letzte Wochen dran gearbeitet und wäre ja schade wenn dieses geile Freature meiner Mod(hab en Respawnen Dialog) so einfach veraten wird.
Da ich den Scriptschnippsel nicht geschrieben habe um deinen Respawn-Dialog nachzuahmen sondern um dir eine elegantere Lösung anzubieten hab ich (bzw gothic;)) AI_ProcessInfos nie ausgeführt. Du hättest mir viel Arbeit erspart wenn du gleich am Anfang gesagt hättest was du abgesehn von AI_Wait bereits ausprobiert hast :(
Aber mich würde immernoch interessieren warum (mein) ZS_Dead_Loop nicht geloopt wird(@NicoDe & GülleMüller)
22.08.2003, 00:14 #12
dark-base
Beiträge: 26

quote:
Zitat von HornOx
Du hättest mir viel Arbeit erspart wenn du gleich am Anfang gesagt hättest was du abgesehn von AI_Wait bereits ausprobiert hast :(



Entschuldigung, ich hatte es echt vergessen zu posten.Es war aber auch das einzigste was ich noch probiert hab. Es tut mir Leid wenn ich dir dadruch mehr Arbeit gemacht hab.

quote:

Aber mich würde immernoch interessieren warum (mein) ZS_Dead_Loop nicht geloopt wird(@NicoDe & GülleMüller)



Ich hab da keine Ahnung aber könnte es damit zu tuen haben, dass die Fuktion ZS_Dead so aufgerufen wird:
code\:

AI_StartState (self, ZS_Dead, 0, "");

Seite 1 von 1  1