World of Gothic Archiv
> Editing Script-Problem |
|
26.03.2004, 14:00 | #26 | ||||
König Rhobar II Beiträge: 639 |
sieh dir doch mal das Script der Chromaninbücher aus der Quest "Der Fremde" an, da wird die Quest auch von Büchern vergeben. Du musst die Tagebucheinträge und alle in das Bucscript mit einbauen, also dass man, wenn man es liest die Quest bekommt. einfach unten, wo der Text des Buches steht, noch reinschreiben, dass ein neuer Tagebucheintrag erstellt werden soll, und dass man evtl. noch exp bekommt. |
||||
26.03.2004, 14:56 | #27 | ||||
Ken Suyoko Beiträge: 923 |
soso neuer fehler: Beiim starten kommt das er : Whistler_DIEBE nicht kennt. Hier ist der ganze Skriptteil: // ************************************************** // And? How is your new sword? // ************************************************** INSTANCE DIA_Whistler_DIEBE (C_INFO) { npc = STT_309_Whistler; nr = 800; condition = DIA_Whistler_DIEBE_Condition; information = DIA_Whistler_DIEBE_Info; permanent = 1; description = "Und? Wie schwingst du dein neues Schwert?"; }; FUNC INT DIA_Whistler_DIEBE_Condition() { if ( Whistler_BuyMySword == LOG_SUCCESS ) { return 1; }; }; FUNC VOID DIA_Whistler_DIEBE_Info() { AI_Output (other,self,"DIA_Whistler_DIEBE_Success_15_00"); //Und? Wie schwingst du dein neues Schwert? AI_Output (self,other,"DIA_Whistler_DIEBE_Success_11_01"); //Gut gut, diese wunderschöne Klinge blitzt in der Sonne wie echtes Silber. AI_Output (other,self,"DIA_Whistler_DIEBE_Success_15_00"); //Hast du nicht vielleicht noch etwas für mich? AI_Output (self,other,"DIA_Whistler_DIEBE_Success_11_00"); //Hmmm, jetzt wo du es sagst! Hier les mal das! B_GiveInvItems (hero,self,ItWr_ZerZettel_01,1); AI_Output (self,other,"DIA_Whistler_DIEBE_Success_11_00"); //Ich habe das bei der letzen Lieferung bei einer Leiche gefunden. 's war ein normaler Bandit. Aber ich möchte diese Diebe finden! Es wird mich bei Thorus gut herausputzen AI_Output (self,other,"DIA_Whistler_DIEBE_Success_11_00"); //DU sollst versuchen so viele Informationen wie du bekommen kannst zu sammeln. Ich werde dich angemessen Entlohnen! Whistler_DIEBE = LOG_RUNNING; { Log_CreateTopic (CH1_DIEBE,LOG_MISSION); Log_SetTopicStatus (CH1_DIEBE,LOG_RUNNING); }; B_LogEntry (CH1_DIEBE,"Whistler hat mir aufgetragen eine Bande zu suchen. Doch zuerst sollte ich diese Asylya aufsuchen und sie befragen."); Whistler_DIEBE = LOG_RUNNING; }; Hoffe ihr könnt mir helfen! |
||||
26.03.2004, 15:08 | #28 | ||||
König Rhobar II Beiträge: 639 |
schreib über dem instanznamen noch: var int whistler_DIEBE; wenn das nicht schon woanders steht du hast whistler_DIEBE zweimal da stehen, mach das ertse mit den Klammern weg, das ist unnötig. Also statt: Whistler_DIEBE = LOG_RUNNING; { Log_CreateTopic (CH1_DIEBE,LOG_MISSION); Log_SetTopicStatus (CH1_DIEBE,LOG_RUNNING); }; schreib: Log_CreateTopic (CH1_DIEBE,LOG_MISSION); Log_SetTopicStatus (CH1_DIEBE,LOG_RUNNING); |
||||
26.03.2004, 16:13 | #29 | ||||
Ken Suyoko Beiträge: 923 |
Also ich habe meinen ersten Vortschritt doch dieser Weg ist noch ein bisschen Steinig und zwar: -Gesprächsopion geht! Jedoch nur das was man AUswählen kann, dnanahc nix. -Hero bekommt Spruchrollle und Auftrag -Spruchrolle ist unsichtbar im Inventar Spruchrolle hat Wert 150 man kann hunderte durch öfteres benuten der Option bekommen Tagebucheintrag ist vorhanden! ansonsten geht alles klar! Hoffe das man mir helfen kann, wo z.b. das problem besteht das der Dialog nach dem "Und? Wie schwingst du dein neues Schwert?" auswählen nicht weiter geht! Selbst dieser Satz kommt nicht in dem Feld wo gesprochen wird. |
||||
26.03.2004, 16:17 | #30 | ||||
König Rhobar II Beiträge: 639 |
Hast du die Outputunits geupdatet? Wenn nicht findet Gothic die Untertitel des Dialoges nicht. Kann man den Dialog mehrmals anwählen? Wenn ja, schreib am Ende des Scriptes noch: Info_ClearChoices (Dialogname); |
||||
26.03.2004, 18:29 | #31 | ||||
Ken Suyoko Beiträge: 923 |
ALso danke für die Hilfe aber wie meinst du das mit dem "Hast du die Outputunits geupdatet?" Wie geht das? Bitte schritt für Schritt erklären! |
||||
26.03.2004, 18:34 | #32 | ||||
König Rhobar II Beiträge: 639 |
Also: damit es schneller geht, lösch die beiden ou Dateien im Ordner _work/Data/scripts/cutscene und die ouinfo.inf in _work/Data/scripts/_compiled danach startest du den Gothicstarter, wählst unter Mod development "reparse all scripts" aus und startest den Spacer. Da finedst du ein fenster mit dem Namen "Outputunits". Da klickst du auf Load, und dann auf Update. Sobald die Ou's geladen sind, speicherst du sie(nach dem klicken warten bis alles kurz ausgeblendetn wird) und schließt den Spacer. Fertig |
||||
26.03.2004, 19:19 | #33 | ||||
Ken Suyoko Beiträge: 923 |
@Rhobar es ist echt freundlich von dir meine Fragen zu beantworten. Ich habe nun den Untertietel, die Bücher sind sichtbar. Dennoch funktioniert das mit dem "einmal geben" nicht! Ich kann noch immer hunderte solcher Bücher bekommenn und jedes mal ein neuer Tagebucheintrag und ein neues Item... also ich habe bei dem Skript vom Ricelord geshcuat da steht drin: AI_StopProcessInfos (self); durch diesen einen Skript wird etwas beendet. Ich denke die Gesprächsoption. Doch wenn ich deinen Vorschlag nebme dann kommt ein Fehler mt einer ")" oder "(" Klammer. Kannst du mir mal die Bezeichnung für deinen Vorshclag geben damit ich den nur noch reinkopieren soll? ALsi Hier nochmal: // ************************************************************************ ** // Whistler_DIEBE // ************************************************************************ ** VAR INT Whistler_DIEBE; // ************************************************** // And? How is your new sword? // ************************************************** INSTANCE DIA_Whistler_DIEBE (C_INFO) { npc = STT_309_Whistler; nr = 800; condition = DIA_Whistler_DIEBE_Condition; information = DIA_Whistler_DIEBE_Info; permanent = 1; description = "Und? Wie schwingst du dein neues Schwert?"; }; FUNC INT DIA_Whistler_DIEBE_Condition() { if ( Whistler_BuyMySword == LOG_SUCCESS ) { return 1; }; }; FUNC VOID DIA_Whistler_DIEBE_Info() { AI_Output (other,self,"DIA_Whistler_DIEBE_15_00"); //Und? Wie schwingst du dein neues Schwert? AI_Output (self,other,"DIA_Whistler_DIEBE_11_01"); //Gut gut, diese wunderschöne Klinge blitzt in der Sonne wie echtes Silber. AI_Output (other,self,"DIA_Whistler_DIEBE_15_02"); //Hast du nicht vielleicht noch etwas für mich? AI_Output (self,other,"DIA_Whistler_DIEBE_11_03"); //Hmmm, jetzt wo du es sagst! Hier les mal das! CreateInvItems (self, ItWr_ZerZettel_01, 1); B_GiveInvItems (self, hero, ItWr_ZerZettel_01, 1); AI_Output (self,other,"DIA_Whistler_DIEBE_11_04"); //Ich habe das bei der letzen Lieferung bei einer Leiche gefunden. 's war ein normaler Bandit. Aber ich möchte diese Diebe finden! Es wird mich bei Thorus gut herausputzen AI_Output (self,other,"DIA_Whistler_DIEBE_11_05"); //DU sollst versuchen so viele Informationen wie du bekommen kannst zu sammeln. Ich werde dich angemessen Entlohnen! Whistler_DIEBE = LOG_RUNNING; Log_CreateTopic (CH1_DIEBE,LOG_MISSION); Log_SetTopicStatus (CH1_DIEBE,LOG_RUNNING); B_LogEntry (CH1_DIEBE,"Whistler hat mir aufgetragen eine Bande zu suchen. Doch zuerst sollte ich diese Asylya aufsuchen und sie befragen."); AI_StopProcessInfos (self); }; In dem Skriptteil geht alles! Auser eben das mit dem "nur einmal klicken". Hoffe du kannst mir noch ein mal helfen. AUserdem kann ich dich auch per icq anlabern... EDIT ich habe dies hinzugefügt: Info_ClearChoices(DIA_Whistler_DIEBE); |
||||
26.03.2004, 19:32 | #34 | ||||
Black Daemon Beiträge: 218 |
Die Lösung ist einfach ganz einfach. Aus "permanent = 1;" machste "permanent = 0;" Dadurch kann dieser Dialog nur einmal benutzt werden. Alternativ könntest du auch mit einer Variablen arbeiten, bei der der Wert nach dem übergeben des Schwertes geändert wird. Hast du eigentlich mal das Script-Tut im Wiki durchgearbeitet? Da ist sowas eigentlich sehr gut erklärt. quote: Vielleicht versuchste öfters mal selbst ne Lösung zu finden, dass wäre deinem Aufnahmegesuch in ein Modteam sicher nicht schädlich. Aso noch was "Info_ClearChoices(DIA_Whistler_DIEBE);" brauchst du nur wenn du auch choices(kommt von chose=wählen) drin hast. Aber steht auch im Script tut ;) |
||||
26.03.2004, 19:50 | #35 | ||||
Ken Suyoko Beiträge: 923 |
Danke, also mus sich nur die 1 in eine 0 ändern... Danke! EDIT: ES GEHT ALLES, DANKE!!! |
||||
26.03.2004, 19:52 | #36 | ||||
HornOx Beiträge: 1.458 |
quote:Ich hab den Teil mit den Outputunits im Wiki nochmal überarbeitet und im Scripttut drauf verlinkt, sollte jetzt etwas verständlicher sein. |
||||
26.03.2004, 21:10 | #37 | ||||
Ken Suyoko Beiträge: 923 |
Also ich habe nun meinen Quest skript ausgebaut. nun soll es aber zu einem ziespaltigem Gespräch kommen. so wie: -ja (schluss) -Nein (weiterer Dialog) das muss ich nun einnehmen. Oder sagt mir so ein Skript ist wo ich den nachlesen kann! EDIT habs gefunden neues: wie skripte ich das nach dem Gespräch ein NPC losrennt und von einer Klippe fällt? Dann ist er tot... |
||||
26.03.2004, 21:30 | #38 | ||||
HornOx Beiträge: 1.458 |
http://wiki.devmode.de/Deadalus/ext...unktionen#GEHEN |
||||
26.03.2004, 21:32 | #39 | ||||
Black Daemon Beiträge: 218 |
Hehe Jung ich glaub da hab ich was für dich ^^ Hab mal den Armen Mud dazu misbraucht, war einfach zu geil wie er Seöbstmord macht. Ja ich bin krank. code\: Vielleicht hilft dir des |
||||
27.03.2004, 17:02 | #40 | ||||
aragorn_16 Beiträge: 529 |
Also ich hab ein Script gemacht, kann aber nicht das gabze reinposten, weil es zu lang ist. Also hier mal der Teil, bei dem die Fehlermeldung kommt: FUNC VOID SLD_2857_Gortoan_JoinAnalyze_Info() { AI_Output(hero, self,"SLD_2857_Gorotan_JoinAnalyze_15_00"); // Wie sieht's mit den Stimmen aus? AI_Output(self, hero,"SLD_2857_Gorotan_JoinAnalyze_11_01"); // Ich hab mich mal ein bisschen umgehört. AI_Output(hero, self,"SLD_2857_Gorotan_JoinAnalyze_15_02"); // Und, wie sieht's aus? // ----------------------------------------------------------- Points_SC = 0; // ----------------------------------------------------------- if (Yugun_ChargePat == LOG_SUCCESS) { AI_Output(self,hero,"SLD_2857_Gorotan_JoinAnalyze_Yugun_02_01"); // Yugun hat gesagt, dass du gegen Pat gewonnen hast. Alle Achtung. Points_SC = Points_SC + 2; } Es kommt die Meldung, dass die Klammer unter dem if (Yugun_ChargePat == LOG_SUCCES) falsch wäre. Aber ich hab mir das auch schon im Script von Diego angeschaut. Da ist das genauso. Wieso kommt da diese Meldung? |
||||
27.03.2004, 17:07 | #41 | ||||
Neely Beiträge: 133 |
if-Schleifen müssen mit einem ';' abgeschlossen werden. Ich nehme an, dass es damit zusammenhängt. Also setz da mal eins nach der '}' Klammer am Ende. |
||||
27.03.2004, 17:11 | #42 | ||||
aragorn_16 Beiträge: 529 |
Aber im Dialog von Diego ist es genauso, wie ich es hingeschrieben hab. Wieso funktionierts dann da? Es ist nicht die abschliessende Klammer, sondern diese '{' hier. |
||||
27.03.2004, 17:14 | #43 | ||||
König Rhobar II Beiträge: 639 |
Versuch es mal, die Fehlermeldungen sind (zumindest bei mir) oft irreführend edit: Es liegt an dem ";". in Diegos Dialog kommt nach dem if noch ein else, in dem Fall kommt kein ";". Bei dir kommt kein else, deshalb muss hinter die Klammer ein ";" |
||||
27.03.2004, 17:50 | #44 | ||||
aragorn_16 Beiträge: 529 |
Doch, wenn der Dialog weiter geht, dann kommt da auch else. if (Yugun_ChargePat == LOG_SUCCESS) { AI_Output(self,hero,"SLD_2857_Gorotan_JoinAnalyze_Yugun_02_01"); // Yugun hat gesagt, dass du gegen Pat gewonnen hast. Alle Achtung. Points_SC = Points_SC + 2; } else if (Yugun_ChargePat == LOG_FAILED) { AI_Output(self,hero,"SLD_2857_Gorotan_JoinAnalyze_Yugun_02_02"); // Ich habe von Yugun gehört, dass du gegen Pat verloren hast. Er hätte mehr von dir erwartet. Points_SC = Points_SC - 2; } else if (Yugun_ChargePat == LOG_RUNNING) { AI_Output(self,hero,"SLD_2857_Gorotan_JoinAnalyze_Yugun_02_03"); // Yugun meinte, dass er sehr gespannt wäre, wie du dich gegen Pat schlägst. }; Ich hab auch schon probiert, ';' hinter die Klammer zu machen, und anstatt else if nur if hinzuschreiben, hat aber auch nicht funktioniert. Woran könnte des denn noch liegen? |
||||
27.03.2004, 18:05 | #45 | ||||
Neely Beiträge: 133 |
Ich nehm einfach mal an du hast den Teil bei Diego rauskopiert und nur die Namen/Bezeichnungen geändert. In dem Fall kann es eigentlich nur noch an fehlenden oder falschen Variablen-Deklarationen liegen. Poste mal bitte die genaue Fehlermeldung und wenn es geht noch den Abschnitt in dem die Variablen deklariert sind. |
||||
27.03.2004, 18:36 | #46 | ||||
aragorn_16 Beiträge: 529 |
Der Fehler ist ein Syntax Error. Also ich hab die Variablen unter Log_Constants.d eingetragen. Einen Teil vom Diego Script hab ich kopiert, dann aber auch umgeändert. Und aus dem OC hab ich SC gemacht, und das dann auch unter Log_Constants.d eingetragen. Aber ein Syntax Error hat ja eigentlich nichts mit den Variablen zu tun, oder? |
||||
27.03.2004, 19:06 | #47 | ||||
aragorn_16 Beiträge: 529 |
Der genau Fehler lautet: U: PAR: Syntax error : } ( line 366 ). Und Zeile 366 ist diese hier: _Output(self,hero,"SLD_2857_Gorotan_JoinAnalyze_Yugun_02_03"); // Yugun meinte, dass er sehr gespannt wäre, wie du dich gegen Pat schlägst. |
||||
27.03.2004, 22:16 | #48 | ||||
aragorn_16 Beiträge: 529 |
Des hat dann doch funktioniert. Der Fehler war gar nicht in dem Script. |
||||
28.03.2004, 13:19 | #49 | ||||
aragorn_16 Beiträge: 529 |
Was muss ich machen, dass ne Mission solange auf permanent ist, bis sie erfüllt ist. Die Mission ist zwar auf permanent, aber wenn man dann nochmal drauf geht, dann bekommt man wieder die Exp. Was muss ich da machen? |
||||
28.03.2004, 13:33 | #50 | ||||
Neely Beiträge: 133 |
Einen 'Mission erfüllt'-Dialog macht man eigentlich nicht permanent, eben um dieses Problem zu umgehen. Mach zwei verschiedene Dialoge, das ist die einfachste Variante. Einen der als Condition 'Mission' == LOG_RUNNING hat und permanent ist und einen zweiten mit 'Mission' == LOG_SUCCESS und nicht permanent ist. |
||||
|