World of Gothic Archiv > Editing
Script-Problem
Seite 1 von 3  1  2  3 
24.03.2004, 17:03 #1
König Rhobar II
Beiträge: 639
Script-Problem
Ich bin gerade dabei meine erste Quest zu scripten, und hab auch schon ein Problem. Ich wollte die Mission man testen, aber beim parsen kommen Fehlermeldungen, die ich irgendwie nicht ganz nachvollziehen kann:

Unknown Identifier ELSE
irgendwas mit nem ";"
und: Syntax Error: }

Hier mal der betroffene Scriptteil:
code\:
FUNC VOID DIA_Senyan_Yes()
{
AI_Output (other, self,"DIA_Senyan_Yes_15_00"); //Ich bin dabei.
if (Npc_HasItems(other,itminugget) >= 700)
{
AI_Output (self, other,"DIA_Senyan_Yes_01_01"); //Gut. Dann gib mir das Erz.
Schön, und hier hats du das Buch. Und vergiss unsere Abmachung nicht.

Log_CreateTopic (Senyans_Buch, LOG_MISSION);
Log_SetTopicStatus (Senyans_Buch, LOG_RUNNING);
B_LogEntry (Senyans_Buch, "Senyan hat mir ein buch verkauft, was in [SPOILER] ist.
Darin soll eine Wegbeschreibung zu irgendetwas wertvollem sein.");

//B_ GiveInvItem (self, other, Senyansbook);
B_GiveInvItems(other, self,itminugget,700);

Info_ClearChoices (DIA_Senyan_help);
AI_StopProcessInfos ( self );
};
else //<--damit hat Gothic wohl ein problem
{ //<-- Hier stimmt etwas mit nem ";" nicht
AI_Output (self, other,"DIA_Senyan_Yes_01_02"); //Du hast aber nicht genug Erz.
Komm wieder, wenn du welches hast.
AI_StopProcessInfos ( self );
};
}; //<-- Und hier hat er ein Problem mit der Klammer


Ich hab bis jetzt alle Fehler verbessern können, aber hierbei weiß ich echt nicht weiter.
24.03.2004, 18:10 #2
HornOx
Beiträge: 1.458

quote:
};
else //<--damit hat Gothic wohl ein problem
http://wiki.devmode.de/Deadalus/Syntax#q24
";" schließt einen Ausdruck ab und eine alleinstehende Funktion "else" kenn Gothic nicht.
24.03.2004, 18:24 #3
König Rhobar II
Beiträge: 639

Ok, danke, jetzt klappt es.
24.03.2004, 19:26 #4
aragorn_16
Beiträge: 529

Hab auch ein Problem mit nem Script:
Yugun_ChargePat = LOG_RUNNING;
var C_NPC Pat; Pat = Hlp_GetNpc(SLD_2871_Pat); Pat.aivar[AIV_WASDEFEATEDBYSC] = FALSE; Pat.aivar[AIV_HASDEFEATEDSC] = FALSE;

FUNC INT SLD_2870_Yugun_PatSuccess_Condition()
{
var C_NPC Pat; Pat = Hlp_GetNpc(SLD_2871_Pat);

if ( (Yugun_ChargePat == LOG_RUNNING) && (Pat_Charged == TRUE) && ( (Pat.aivar[AIV_WASDEFEATEDBYSC] == TRUE) || (Pat.aivar[AIV_HASDEFEATEDSC] == TRUE) ) )
{
return 1;
};
};

FUNC VOID SLD_2870_Yugun_PatSuccess_Info()
{
var C_NPC Pat; Pat = Hlp_GetNpc(SLD_2871_Pat);

AI_Output (other,self,"SLD_2870_Yugun_PatSuccess_15_00"); // Ich habe gegen Pat gekämpft.
if (Pat.aivar[AIV_HASDEFEATEDSC] == TRUE)
{
AI_Output (self,other,"SLD_2870_Yugun_PatSuccess_02_01"); // Und du hast gegen ihn verloren. Aber das habe ich mir fast schon gedacht.
AI_Output (self,other,"SLD_2870_Yugun_PatSuccess_02_02"); // Lass dir eins gesagt sein. Hier im Lager brauchen wir gute Kämpfer.
Yugun_ChargePat = LOG_FAILED;

B_LogEntry( YugunsKampf, "Yugun schien ziemlich enttäuscht über meine Niederlage gegen Pat zu sein. Ich könnte ihn noch mit einem Sieg gegen Tokab beeindrucken, aber das wird ziemlich schwer.");
}
else if (Pat.aivar[AIV_WASDEFEATEDBYSC] == TRUE)
{
AI_Output (self,other,"SLD_2870_Yugun_PatSuccess_02_03"); // Und du hast ihn besiegt. Ich bin sehr beeindruckt. Das hätte ich dir gar nicht zugetraut. Mach weiter so.
Yugun_ChargePat = LOG_SUCCESS;

B_LogEntry( YugunsKampf, "Yugun ist sehr beeindruckt, dass ich Pat besiegt hab.");
};
};

Also, das sollte jetzt so ein Dialog sein, wie der mit Kirgo. Aber es kommt immer die Fehlermeldung:
Yugun_ChargePat
Woran könnte das liegen?
24.03.2004, 19:33 #5
HornOx
Beiträge: 1.458

Lass zSpy mitlaufen, dann bekommst du eine richtige Fehlermeldung mit Zeilenangabe...
24.03.2004, 20:00 #6
Ken Suyoko
Beiträge: 923

liegt das nicht an der großschreibung? Da die Skripte mit Logbucheinträgen groß geschrieben sind wie der mit Thorus über Mordrag.

aber jetzt komme ich. Ich bin zu blöd um einen Logbuch eintrag zu machen. ich kopier mal den von Thorus rein:

Thorus_MordragKo = LOG_RUNNING;

Log_CreateTopic (CH1_MordragKO, LOG_MISSION);
B_LogEntry (CH1_MordragKO,"Thorus hat mich damit beauftragt, einen Banditen namens Mordrag aus dem Lager zu vertreiben. Wie ich das anstelle hat er mir überlassen. Außerdem darf niemand erfahren, dass Thorus dahintersteckt.");
Log_SetTopicStatus (CH1_MordragKO, LOG_RUNNING);

var C_Npc Mordrag;
Mordrag = Hlp_GetNpc(ORG_826_Mordrag);

also ich weis jetzt nicht ob das alles war aber...

jetzt meine Idee:
Mein hero soll am anfang in der Verlassenen Mine einen zettel finden.
( wo gibt es einen leeren Zettel den ich beschreiben kann?) Dann liest der den und bekommt den Auftrag die Waren wiederzufidnen denn in dem Brief steht das gewisse Leute manchmal Waren geklaut haben.

Das soll erst mal alles sein! Nur das der EIntrag im Logbuch steht. Ich weis jetzt nur nicht ob das so richtig ist:

ERSTER_AUFTRAG = LOG_RUNNING;

Log_CreateTopic (CH1_Mission, LOG_MISSION);
B_LogEntry (CH1_Mission,"Eine Bande hat Güter versteckt. Ihre Anfangsbuchstaben sind: T; D; L. Ich sollte so unaufällig wie möglich wirken damit sie keinen Verdacht schöpfen.");
Log_SetTopicStatus (CH1_Mission, LOG_RUNNING);

und wo ist der Skript weches als Oberbegriff im Logbuch steht?
24.03.2004, 20:25 #7
HornOx
Beiträge: 1.458

steht in Log_Constants.d
quote:
const string CH1_MordragKO = "Auftrag von Thorus";
ERSTER_AUFTRAG mußt du da auch definieren. Benutz einen Editor der ganze Verzeichnisse nach etwas durchsuchen kann (z.b. den Crimson Editor), dann findest du sowas recht schnell.
Großschreibung ist bei Konstanten egal.
24.03.2004, 20:37 #8
aragorn_16
Beiträge: 529

Als Fehlermeldung kommt ja Yugun_ChargePat. Aber was muss ich da anders machen?
24.03.2004, 20:38 #9
Ken Suyoko
Beiträge: 923

Also ich versteh da nur Bahnhof.

aber hier ist der ganze Skript:

INSTANCE ItWr_ZerZettel_01(C_Item)
{
name = "Zerknuellter Zettel";

mainflag = ITEM_KAT_DOCS;
flags = 0;

value = 150;

visual = "ItWr_Book_09_09.3ds";
material = MAT_LEATHER;

scemeName = "MAP";
description = "Zerknuellter Zettel";

TEXT[5] = NAME_Value;
COUNT[5] = value;
on_state[0] = UseItWr_ZerZettel_01;
};

FUNC VOID UseItWr_ZerZettel_01()
{
var int nDocID;

nDocID = Doc_Create () ; // DocManager
Doc_SetPages ( nDocID, 2 ); //wieviel Pages

Doc_SetPage ( nDocID, 0, "Book_Brown_L.tga", 0 );
Doc_SetPage ( nDocID, 1, "Book_Brown_R.tga", 0 );

//1.Seite

Doc_SetFont ( nDocID, -1, "font_15_book.tga" ); // -1 -> all pages
Doc_SetMargins ( nDocID, 0, 275, 20, 30, 20, 1 ); // 0 -> margins are in pixels
Doc_PrintLine ( nDocID, 0, " An Alle!");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, " " );
Doc_SetFont ( nDocID, -1, "font_10_book.TGA" ); // -1 -> all pages
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLine ( nDocID, 0, "");
Doc_PrintLines ( nDocID, 0, " Ich glaube man hat im Neuen Lager Verdacht geschöpft. Wir sollten uns hier nicht treffen! Wenn jemand mit den Waren durchbrennen will so finden wir den jenigen. Und KEIN Wort, auch nicht zu Asylya!");
Doc_PrintLine ( nDocID, 0, "");


//2.Seite
Doc_SetMargins ( nDocID, -1, 30, 20, 275, 20, 1 ); // 0 -> margins are in pixels (Position des Textes von den Ränder des TGAs aus, links,oben,rechts,unten)
Doc_PrintLine ( nDocID, 1, "");
Doc_PrintLine ( nDocID, 1, "");
Doc_PrintLine ( nDocID, 1, "");
Doc_PrintLine ( nDocID, 1, "");
Doc_PrintLines ( nDocID, 1, "Gez: L ; D ; T.");
Doc_PrintLine ( nDocID, 1, "");
Doc_PrintLine ( nDocID, 1, "");
Doc_Show ( nDocID );

if Knows_GetBFSting == FALSE

DIEBE = LOG_RUNNING;

Log_CreateTopic (CH1_Diebe, LOG_MISSION);
B_LogEntry (CH1_Diebe,"Eine Bande hat Güter versteckt. Ihre Anfangsbuchstaben sind: L;T. Ich sollte so unaufällig wie möglich wirken damit sie keinen Verdacht schöpfen. Auserdem sollte ich nach dieser Asylya Ausschau halten.");
Log_SetTopicStatus (CH1_Diebe, LOG_RUNNING);

};

wenn ich G1 starte kommt da ein Fehler mit einer Klammer auf Zeile 1641 oder so. Aber die Zeilen zahl hab ihr ja net drum... aber die klammer....

also ich habe das Buch der Blutfliegen genommen und das geändert.
24.03.2004, 21:32 #10
aragorn_16
Beiträge: 529

Also den Tagebucheintrag bracuhst du doch bei dem Brief nicht hinschreiben. Du musst einfach nur den Text ändern und zwar da:
Doc_PrintLines ( nDocID, 0, " Ich glaube man hat im Neuen Lager Verdacht geschöpft. Wir sollten uns hier nicht treffen! Wenn jemand mit den Waren durchbrennen will so finden wir den jenigen. Und KEIN Wort, auch nicht zu Asylya!");
24.03.2004, 22:17 #11
Neely
Beiträge: 133

Kleiner Hinweis vorweg: Bitte den CODE-Tag benutzen, macht die Sache wesentlich übersichtlicher und besser zu lesen.

@aragorn_16: Hast du die Variable 'Yugun_ChargePat' auch irgendwo deklariert?
Bei der Fehlermeldung müsste doch noch bissl mehr stehen oder? Sowas wie Unknown Identifier oder sowas in der Art?!

@Ken Suyoko: Kannst du die genaue Fehlermeldung mal bitte Posten? Notfalls lad dir mal Ultraedit runter, das hat Zeilenangaben.
25.03.2004, 16:49 #12
Ken Suyoko
Beiträge: 923

Also ich habe das erste Prob gelöst da hat eine: { gefehlt aber nun wenn ich reparse kommt das er :
DIEBE = LOG_RUNNING;

Das Wort Diebe nicht kennt! D.h. ich muss e sin einem anderen Skript noch ientragen damit er es annerkennt, aber welcher ist das? der Missionsskript?

Kann es sein das ich den noch im Story_Globals eintragen muss? Damitd as Spiel weis wann ich die Q lösen kann?
25.03.2004, 16:57 #13
HornOx
Beiträge: 1.458

code\:
const string DIEBE = "Titel des Quests";
mußt du in Log_Constants.d schreiben.
25.03.2004, 17:01 #14
Ken Suyoko
Beiträge: 923

Danke für die schnelle Antwort. Ich habe den Crisom editor geloadet, danke ebenfalls. Da stehen die Zeilen dran usw usw.

edit wie cann ich in dme cirsom deitor eine Datai Schreibegscützt wegmachen damit ich speichern kann?
25.03.2004, 17:14 #15
HornOx
Beiträge: 1.458

granihct, ds must d zb mit dem Wndows Expploer tun
25.03.2004, 17:29 #16
Ken Suyoko
Beiträge: 923

Also ich hätte da noch ne Frage. aber dmait die mods mein plötzliches modder Dasein nicht als Spammgrund sehen würde e smich freuen wenn ich deine icq nummer bekommen würde,´dann müsste ich meine posts nicht in die Höhe treiben und kann dich geziehlt fragen, das kommt auch direkter rüber. Aber wenn du nicht willst dann ist das okay, denn ich bin sicherlich nicht der einzigste der diese probs hat und schließlich wollen die anderen gleichartigen probs auch glöst werden.

also nun kommt eine fehler mrldung das auf Zeile 1677 ein Gehler ist aber auf Zeile 1677 im Written skript ist nud das Ende zeichen:
};

aber ansheinden hat er ein prob mit irgeneinerm : ;

sol ich es mal wegmachen?
25.03.2004, 17:30 #17
König Rhobar II
Beiträge: 639

und schon wieder ein problem:
zSpy sagt:
code\:
PAR: Unknown Identifier: B_GIVEINVITEM (line 226)
Expected ';' (line 226)
Expected: '=' (line 226)
Func does not return an instance (line 226)
Expected: ';' (line 226)
Expected: '=' (line 226)
Undefined function: ; (line 226)
Expected: ';' (line 227)
Unknown Identifier: ( (line 227)
Expected ';' (line 227)
Unknown Identifier: , (line227)
Expected ';' (line 227)
Unknown Identifier: , (line227)
Expected ';' (line 227)
Unknown Identifier: , (line227)
Expected ';' (line 227)
Unknown identifier: ) (line227)


Hier ist das Betroffene Script:
code\:
FUNC VOID DIA_Senyan_Yes()
{
AI_Output (other, self,"DIA_Senyan_Yes_15_00"); //Ich bin dabei.
if (Npc_HasItems(other,itminugget) >= 700)
{
AI_Output (self, other,"DIA_Senyan_Yes_01_01"); //Gut. Dann gib mir das Erz. Schön, und hier hast du das Buch. Und vergiss unsere Abmachung nicht.

Log_CreateTopic (Senyans_Buch, LOG_MISSION);
Log_SetTopicStatus (Senyans_Buch, LOG_RUNNING);
B_LogEntry (Senyans_Buch, "Senyan hat mir ein buch verkauft, was [...]ist. Darin soll eine Wegbeschreibung zu irgendetwas wertvollem sein.");

B_GiveInvItem (self, other, senyansbook); //<--line226
B_GiveInvItems (other, self,itminugget,700); //<--line227

Info_ClearChoices (DIA_Senyan_help);
AI_StopProcessInfos ( self );
}
else
{
AI_Output (self, other,"DIA_Senyan_Yes_01_02"); //Du hast aber nicht genug Erz. Komm wieder, wenn du welches hast.
AI_StopProcessInfos ( self );
};
};
25.03.2004, 17:43 #18
Ken Suyoko
Beiträge: 923

ALso hier ist der Fehler:


hoffe das ihr das verstehen mögt!
25.03.2004, 17:56 #19
aragorn_16
Beiträge: 529

Also das mit dem Dialog hat jetzt funktioniert.
25.03.2004, 18:08 #20
Black Daemon
Beiträge: 218

@König.....
Ich glaube, das zwar auch schonmal benutzt zu haben aber ich konnte "B_GiveInvItem" nirgends finden. Überall wird "B_GiveInvItems" benutzt und da Zspy auch "Unknown Identifier: B_GIVEINVITEM " sagt scheint es die andere Funktion nicht zu geben. Also benutz mal "B_GiveInvItems" und probier dann nochmal. Denke es lag nur daran.

@Ken Suyoko
Wow also wirklich viel sagen kann ich dir jetzt nicht. Aner der Fehler ist in Zeile 1677 deines bearbeiteten Scripts und es fehlt wohl ein ";" das am Ende der Zeile stehen sollte, meistens fehlt es in der Zeile darüber.
25.03.2004, 18:38 #21
König Rhobar II
Beiträge: 639

hat funktioniert, danke.
Nur die Sachen mit den ";" und so haben sich kaum geändert.
Ich hab mal nachgesehen, ob das in anderen Scripten sein könnte, aber das ist das einzige, was in Frage kommt.
25.03.2004, 18:38 #22
HornOx
Beiträge: 1.458

quote:
aber dmait die mods mein plötzliches modder Dasein nicht als Spammgrund sehen
solange deine posts etwas mit dem verändern von Gothic zu tun haben sind sie hier kein Spam
quote:
würde e smich freuen wenn ich deine icq nummer bekommen würde,´dann müsste ich meine posts nicht in die Höhe treiben und kann dich geziehlt fragen, das kommt auch direkter rüber.
Tritt einem Modteam bei, dann hast du einen Lehrer und das Modteam hat einen neuen Mitarbeiter.

IMHO ist es besser erstmal intensiv selbst nach den Fehler zu suchen, Syntaxfehler und vertippen in Funktionsnamen sind triviale Fehler, wenn ihr sowas nicht alleine findet werdet ihr bei komplexeren Fehlern _richtige_ Probleme bekommen.
25.03.2004, 18:54 #23
Ken Suyoko
Beiträge: 923

Also ich habe verzweifelt so manches ausprobiert und habe das nächste prob:

in meinem Skript steht:

DIEBE = LOG_RUNNING;

und bei Thorus:

Thorus_MordragKo = LOG_RUNNING;

also das Gothic hat ein Problem mit meinem DIEBE

ich habe in den Log_constance bei Kapitel 1 hinzugrfügt:

const string CH1_DIEBE = "Waren Diebe";

Aber warum kennt der dann noch immer DIEBE nicht? Denn das CH1_DIEBE ist hier drin:

Log_CreateTopic (CH1_DIEBE, LOG_MISSION);

da ist es aber wo muss ich dann noch das normale DIEBE eintippen wo da oben Thorus_MordragKO steht?


und zu Mod... Ich glaube kaum das jemand mich in ein Modteam will da man eigentlich etwas können müsste ehe man da reinkommt aber ich kann ja gar nix!

Danke im Vorraus!
25.03.2004, 18:55 #24
König Rhobar II
Beiträge: 639

ich hab das ganze mal im Spiel getestet, und bis zu dem oben genannte Scriptteil funktioniert der Dialog einwandfrei, als ich dann "Ich bin dabei" ausgewählt habe stürzte Gothic ab. Das heißt der Fehler muss in dem Dialogteil sitzen.

edit: Hab den Fehler gefunden. ich hab das ",1" in B_GiveInvItems (self, other, senyansbook,1); vergessen
26.03.2004, 13:55 #25
Ken Suyoko
Beiträge: 923

also ich gebe WHistler den AUftrag und der soll es dm hero geben ist glaube ich einfacher!
Seite 1 von 3  1  2  3