World of Gothic Archiv > Editing
Script-Problem
Seite 2 von 3  1  2  3 
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:
Ist ein Dialog Permanent wird er, so lange seine Condition True ist immer angeboten.

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:
Hast du eigentlich mal das Script-Tut im Wiki durchgearbeitet? Da ist sowas eigentlich sehr gut erklärt.
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\:

INSTANCE DIA_Mud_hallo (C_INFO)
{
npc = Mod_9999_Mud;
nr = 2;
condition = DIA_Mud_hallo_Condition;
information = DIA_Mud_hallo_Info;
permanent = 1;
description = "Was ist mit dir los?";
};

FUNC INT DIA_Mud_hallo_Condition()
{
return 1;
};

FUNC VOID DIA_Mud_hallo_Info()
{
AI_Output (other, self,"DIA_Mud_hallo_15_00"); //Was ist denn mit die los?
AI_Output (self, other,"DIA_Mud_hallo__07_00"); //Ach das Leben ist scheiße, das Essen ist scheiße, das Haus ist scheiße.....
Info_ClearChoices(DIA_Mud_hallo);
Info_AddChoice (DIA_Mud_hallo, "Dann spring doch!!" ,DIA_Mud_hallo_spring);
Info_AddChoice (DIA_Mud_hallo, "Tja das ist nicht mein Problem" ,DIA_Mud_hallo_tja);

};

FUNC VOID DIA_Mud_hallo_spring()
{
AI_Output (other, self,"DIA_Mud_hallo_15_01"); //Na dann spring doch!!!
AI_Output (self, other,"DIA_Mud_hallo__07_01"); //Ok du hast recht *schnüfz*
Npc_ExchangeRoutine (self,"sprung"); // Starten eines neuen Tas. Führt eigentlich nur dazu, das Mud zu einem Wp läuft der cor der Klippe in der Luft hängt^^ kann man auch anders lösen.
Info_ClearChoices(DIA_Mud_hallo);
};

FUNC VOID DIA_Mud_hallo_tja()
{
AI_Output (other, self,"DIA_Mud_hallo_15_02"); //Tja das ist nicht mein Problem
AI_Output (self, other,"DIA_Mud_hallo__07_02"); //Wie immer niemand mag mich *seufz*
Info_ClearChoices(DIA_Mud_hallo);
};



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.
Seite 2 von 3  1  2  3