PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Händler



blue lord
04.06.2004, 18:52
Ich will das man bei Wolf einkaufen kann. Dazu habe ich "B_GiveTradeInv_Wolf.d",
// **************************************************************
// TRADE // Jägermod
// **************************************************************
instance DIA_Bosper_Trade (C_INFO)
{
npc = SLD_811_Wolf;
nr = 8;
condition = DIA_Wolf_Trade_Condition;
information = DIA_Wolfr_Trade_Info;
permanent = TRUE;
description = "Zeig mir deine Ware.";
};
func int DIA_Wolf_Trade_Condition ()
{
if (MIS_Wolf_WolfFurs != LOG_RUNNING)
{
DIA_Wolf_Trade.trade = TRUE;
};

return TRUE;
};
func void DIA_Wolf_Trade_Info ()
{
AI_Output (other, self, "DIA_Bosper_Trade_15_00"); //Zeig mir deine Ware.

};
in "DIA_SLD_811_Wolf.d" erstellt.

Wenn ich die Skripte parse kommt die Fehlermeldung:
U:PAR: Unknown identifier : TRADE (line 232)
Nur in welchem Skript in Leine 232 ist der Fehler?
Wenn ich die Suchfunktion benützt und nach TRADE suche bekome ich alle Skripte aus "B_GiveTradeInv".
Und die Skripte die ich geändert habe haben nicht so viele Zeilen.

Fizzban
04.06.2004, 19:47
Bei der Mod-Entwicklung solltest immer den zSpy im Hintergrund laufen haben. Im diesen kann man dann nachsehen, welche Datei Probleme macht.

Bei deinem Skript ist wohl das Problem, dass die C_Info-Instanz DIA_Bosper_Trade anstelle von DIA_Wolf_Trade heißt.

CeeX
04.06.2004, 21:18
Original geschrieben von blue lord
DIA_Wolf_Trade.trade = TRUE;
Kann auch sein dass der Compiler den Punkt nicht mag.

Maharreshi
04.06.2004, 21:42
Hallöchen!

Ich muss sagen, ich verstehe nicht ganz, was du mit der 'B_GiveTradeInv_Wolf.d' bezweckst...

Vor allem: Was steht denn eigentlich in dieser Funktion?

edit:
Zum Dialog: Mir erscheint vor Allem diese Passage problematisch:



func int DIA_Wolf_Trade_Condition ()
{
if (MIS_Wolf_WolfFurs != LOG_RUNNING)
{
DIA_Wolf_Trade.trade = TRUE;
};
return TRUE;
};

Sinnvoll wäre hier IMO:



func int DIA_Wolf_Trade_Condition ()
{
if (MIS_Wolf_WolfFurs != LOG_RUNNING)
{
return TRUE;
};
return FALSE;
};

und die Option 'trade = TRUE' direkt in die Instanz zu setzen.

HornOx
04.06.2004, 22:19
@JonathanSalznik: Hat der Instanzname einen Einfluss auf die Funktion des Dialoges bzw welchem NPC der Dialog gehört? AFAIK ist nur nur c_info.npc relevant :confused:
@Neely: Wenn "DIA_Wolf_Trade" ein C_Info ist(ist im obigen Skript nicht defeniert) gibt es ein DIA_Wolf_Trade.trade, allerdings ist IMHO kaum sinnvoll das per Skript zu ändern (wird vermutlich eh nicht in den Savegames abgespeichert) oder auszulesen.
@Maharreshi: in den G2 Skripten gibts einige B_GiveTradeInv* Funktionen, die versorgen die Händler mit neuem Zeug.
kürzer wäre hier IMO:
func int DIA_Wolf_Trade_Condition ()
{
return (MIS_Wolf_WolfFurs != LOG_RUNNING);
};(hmm, das war jetzt aber genügend besserwisserrei für heute ;))

Fizzban
04.06.2004, 22:51
Original geschrieben von HornOx
@JonathanSalznik: Hat der Instanzname einen Einfluss auf die Funktion des Dialoges bzw welchem NPC der Dialog gehört? AFAIK ist nur nur c_info.npc relevant :confused:


Das ist definitiv so, aber mir ging es auch darum, dass es kein DIA_Wolf_Trade.trade ohne DIA_Wolf_Trade geben kann.. :) Daher wahrscheinlich auch die Fehlermeldung U:PAR: Unknown identifier : TRADE (line 232)

blue lord
04.06.2004, 23:31
Mit folgendem Skript geht es, dass Wolf die Option „Zeig mir deine Ware.“ hat. Wenn ich diese aber auswähle passiert nichts.

instance DIA_Wolf_Trade (C_INFO)
{
npc = SLD_811_Wolf;
nr = 8;
condition = DIA_Bosper_Trade_Condition;
information = DIA_Wolf_Trade_Info;
permanent = TRUE;
description = "Zeig mir deine Ware.";
};

//func int DIA_Wolf_Trade_Condition ()
//{
// return (MIS_Wolf_WolfFurs != LOG_RUNNING);
//};


func void DIA_Wolf_Trade_Info ()
{
AI_Output (other, self, "DIA_Wolf_Trade_15_00"); //Zeig mir deine Ware.

};

Was macht „condition = „ Was muss dahinter? Als ich „condition = DIA_Wolf_Trade_Condition;“ benützt habe kam eine Fehlermeldung deswegen. Mit Bosper anstatt Wolf hat es wie oben beschrieben funktioniert.

HornOx
05.06.2004, 01:22
Was macht ?condition = ? Was muss dahinter? http://wiki.devmode.de/Tutorials/Skript-Tutorial#q4
Als ich ?condition = DIA_Wolf_Trade_Condition;? benützt habe kam eine Fehlermeldung deswegen. Mit Bosper anstatt Wolf hat es wie oben beschrieben funktioniert. Ist MIS_Wolf_WolfFurs irgendwo defeniert?
Original geschrieben von Maharreshi
[...]und die Option 'trade = TRUE' direkt in die Instanz zu setzen. Fehlt noch...

blue lord
05.06.2004, 02:14
Bei zSpy steht:
03:47 Warn: 0 D: OBJ: Memory leaks found! .... <zObjekt.ccp,#699>
Was bewirkt die Lücke im Speicher, wie kann ich sie schließen?

Fizzban
05.06.2004, 02:43
Die kannst du nicht schließen, das ist ein Problem der Engine bzw. des Spacers. Braucht dich aber auch nicht weiter zu kümmern, ich bekomme diese Meldung jedesmal, wenn ich den Spacer schliesse. Das hat keine negative Auswirkungen auf deine Arbeit.

blue lord
05.06.2004, 03:22
Aha.

Danke

blue lord
05.06.2004, 04:59
Ich kann jetzt die Option “Zeig mir deine Ware. „ auswählen. Nur sind im Händlermenü nur 1 Stück Rohes Fleisch und 1 Wurst obwohl in „B_GiveTradeInv_Wolf.d“ andere Sachen angegeben sind. Was muss ich machen damit „B_GiveTradeInv_Wolf.d“ verwendet wird? Ich habe in Skripten von Fenia, Bosper und Baltram danach gesucht wie man das hingriegen kann.

B_GiveTradeInv_Wolf.d

var int Wolf_ItemsGiven_Chapter_1;
var int Wolf_ItemsGiven_Chapter_2;
var int Wolf_ItemsGiven_Chapter_3;
var int Wolf_ItemsGiven_Chapter_4;
var int Wolf_ItemsGiven_Chapter_5;

FUNC VOID B_GiveTradeInv_Wolf (var C_NPC slf)
{
if ((Kapitel >= 1)
&& (Wolf_ItemsGiven_Chapter_1 == FALSE))
{
CreateInvItems (slf, ItMi_Gold, 50);
CreateInvItems (slf, ItRw_Arrow, 30);
CreateInvItems (slf, ItRw_Addon_FireArrow, 20); // Jägermod

// ------ Waffen ------
CreateInvItems (slf, ItRw_Bow_L_01, 1);
CreateInvItems (slf, ItRw_Bow_L_02, 1);
CreateInvItems (slf, ItRw_Bow_L_03, 1);
CreateInvItems (slf, ItRw_Bow_L_03, 1);
CreateInvItems (slf, ItRw_Bow_L_04, 1);
CreateInvItems (slf, ItMw_1H_Sword_L_03, 1); // Wolfsklinge Jägermod
CreateInvItems (slf, ItRw_Addon_FireBow3, 1); // Feuerschleuder

// ------ Ringe / Amulette -------
CreateInvItems (slf, ItBE_Addon_Leather_01, 1);
CreateInvItems (slf, ItRi_Dex_02, 1);


Wolf_ItemsGiven_Chapter_1 = TRUE;
};

if ((Kapitel >= 2)
&& (Wolf_ItemsGiven_Chapter_2 == FALSE))
{
CreateInvItems (slf, ItMi_Gold, 100);
CreateInvItems (slf, ItRw_Arrow, 50);
CreateInvItems (slf, ItRw_Bolt, 50);
CreateInvItems (slf, ItRw_Addon_FireArrow, 30); // Jägermod
CreateInvItems (slf, ItBe_Addon_DEX_5, 1);

CreateInvItems (slf, ItRw_Bow_M_01, 1);
CreateInvItems (slf, ItRw_Bow_M_02, 1);
CreateInvItems (slf, ItRw_Bow_M_03, 1);
CreateInvItems (slf, ItRw_Bow_M_04, 1);
CreateInvItems (slf, ItRw_Addon_FireBow2, 1); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicArrow, 8); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicBolt, 8); // Jägermod

Wolf_ItemsGiven_Chapter_2 = TRUE;
};

if ((Kapitel >= 3)
&& (Wolf_ItemsGiven_Chapter_3 == FALSE))
{
CreateInvItems (slf, ItMi_Gold, 100);
CreateInvItems (slf, ItRw_Arrow, 100);
CreateInvItems (slf, ItRw_Bolt, 100);
CreateInvItems (slf, ItRw_Addon_FireArrow, 40); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicArrow, 10); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicBolt, 10); // Jägermod
CreateInvItems (slf, ItRw_Addon_FireBow3, 1); // Jägermod
CreateInvItems (slf,ItBe_Addon_DEX_10, 1);
Wolf_ItemsGiven_Chapter_3 = TRUE;
};

if ((Kapitel >= 4)
&& (Wolf_ItemsGiven_Chapter_4 == FALSE))
{
CreateInvItems (slf, ItMi_Gold, 150);
CreateInvItems (slf, ItRw_Arrow, 180);
CreateInvItems (slf, ItRw_Bolt, 160);
CreateInvItems (slf, ItRw_Addon_FireArrow, 40); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicArrow, 12); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicBolt, 12); // Jägermod

CreateInvItems (slf, ItRw_Bow_H_01, 1);
CreateInvItems (slf, ItRw_Bow_H_02, 1);
CreateInvItems (slf, ItRw_Bow_H_03, 1);
CreateInvItems (slf, ItRw_Bow_H_04, 1);

Wolf_ItemsGiven_Chapter_4 = TRUE;
};

if ((Kapitel >= 5)
&& (Wolf_ItemsGiven_Chapter_5 == FALSE))
{
CreateInvItems (slf, ItMi_Gold, 200);
CreateInvItems (slf, ItRw_Arrow, 200);
CreateInvItems (slf, ItRw_Bolt, 170);
CreateInvItems (slf, ItRw_Addon_FireArrow, 50); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicArrow, 20); // Jägermod
CreateInvItems (slf, ItRw_Addon_MagicBolt, 20); // Jägermod

Wolf_ItemsGiven_Chapter_5 = TRUE;
};
};


DIA_SLD_811_Wolf.d

// **************************************************************
// TRADE // Jägermod
// **************************************************************
instance DIA_Wolf_Trade (C_INFO)
{
npc = SLD_811_Wolf;
nr = 8;
condition = DIA_Wolf_Trade_Condition;
information = DIA_Wolf_Trade_Info;
permanent = TRUE;
trade = TRUE;
description = "Zeig mir deine Ware.";
};

//func int DIA_Wolf_Trade_Condition ()
// {
// return (MIS_Wolf_WolfFurs != LOG_RUNNING);
// };

func int DIA_Wolf_Trade_Condition ()
{
return TRUE;
};

func void DIA_Wolf_Trade_Info ()
{
B_GiveTradeInv (self);
AI_Output (other, self, "DIA_Wolf_Trade_15_00"); //Zeig mir deine Ware.

};

Maharreshi
05.06.2004, 05:13
Damit 'B_GiveTradeInv_Wolf.d' verwendet wird, musst du deinen neuen Händler noch entsprechend den schon vorhandenen Händlern in die 'B_GiveTradeInv.d' (im gleichen Ordner) eintragen.

Ist jetzt zwar nur 'ne Vermutung von mir (ich hab's selber noch net ausprobiert), ich bin aber ziemlich sicher, dass es dann klappen wird. (Aber bitte nich hauen, wenn doch nich...:cool: )

blue lord
05.06.2004, 22:25
Stimmt das hatte ich vergessen.

Ich kann jetzt mit Wolf handeln, nur der Held sagt nichts, wenn ich "Zeig mir deine Ware. " auswähle.

[LoA]Wotan
05.06.2004, 22:33
du musst auch reinschreiben das er das sagen soll ...



AI_Output (other, self,"DIA_Was_Weis_Ich_07_00"); //Zeig mir deine Ware


dann müsste der das auch sagen

blue lord
06.06.2004, 01:21
Wie füge ich eine Dialogzeile ein?

func void DIA_Wolf_WannaBuy_Info ()
{
AI_Output (other, self, "DIA_Wolf_WannaBuy_15_00"); //Hast du was zu verkaufen?
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_01"); //Ach, frag nicht.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_02"); //Bennet, einer von den Neuen, kümmert sich jetzt um die Waffen und Rüstungen.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_03"); //In der Kolonie war ich noch verantwortlich für Lees gesamtes Waffenlager und dann kommt so ein gelernter Schmied daher und 'zack', bin ich meinen Job los.
//AI_Output (self, other, "DIA_Wolf_ ); //Jetzt habe ich nur noch ein paar Bögen und Jagdzubehör. // Jägermod
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_04"); //Ich brauche unbedingt eine neue Aufgabe, und wenn ich bloß auf die Bauernhöfe draußen aufpassen müsste.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_05"); //Ist mir egal, Hauptsache, ich sitze hier nicht mehr rum.
};

Ken Suyoko
06.06.2004, 01:46
AI_Output (other, self, "DIA_Wolf_WannaBuy_15_06"); //Nun zeig mir doch deine Ware du ........
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_07"); //Klar Hier: ( inventar zeig)


EDIT

du kannst das other auch duch : "hero" ersetzten.
dadurch ist es auch etwas übersichtlicher, aber sobald du dich eingeskriptet hast machtd as keinen unterschied.

blue lord
06.06.2004, 02:24
@[LoA]Wotan
Ich raff das irgendiwe net ganz. In welche Zeile muss ich das schreiben?

// **************************************************************
// TRADE // Jägermod
// **************************************************************
instance DIA_Wolf_Trade (C_INFO)
{
npc = SLD_811_Wolf;
nr = 8;
condition = DIA_Wolf_Trade_Condition;
information = DIA_Wolf_Trade_Info;
permanent = TRUE;
trade = TRUE;
description = "Zeig mir deine Ware.";
};

//func int DIA_Wolf_Trade_Condition ()
// {
// return (MIS_Wolf_WolfFurs != LOG_RUNNING);
// };

func int DIA_Wolf_Trade_Condition ()
{
return TRUE;
};

func void DIA_Wolf_Trade_Info ()
{
B_GiveTradeInv (self);
//AI_Output (other, self, "DIA_Wolf_Trade_15_00"); //Zeig mir deine Ware.
AI_Output (other, self,"DIA_Wolf_Trade_07_00");

};


Woher weiß man welcher Befehl (z.b. "DIA_Wolf_WannaBuy_15_06") für welchen Text steht?
In welchem Skript steht das? Und wo muss ich einen neuen Text reinschreiben?

[LoA]Wotan
06.06.2004, 02:33
//AI_Output (other, self, "DIA_Wolf_Trade_15_00"); //Zeig mir deine Ware.

warum kommentierst du das raus ??


AI_Output (other, self,"DIA_Wolf_Trade_07_00");

das kannste rausnehmen ... soweit ich dein script grad durchblicke ...

und B_GiveTradeInv zum schluss

Black Eye
06.06.2004, 02:33
Das auskomentierte hinter der Ai_output ist der Text, der im Spiel angezeigt wird. Das in den "" ist später für die Syncronisation seht wichtig, da so die wavs heißen.

[LoA]Wotan
06.06.2004, 02:35
Original geschrieben von Black Daemon
Das auskomentierte hinter der Ai_output ist der Text, der im Spiel angezeigt wird. Das in den "" ist später für die Syncronisation seht wichtig, da so die wavs heißen.

ausserdem ist es wichtik im dialog... den wenn da 2 ai_output's das selbe haben dann sagt er entweder nur eins oder beide ... und das will man ja nich ... :)

blue lord
06.06.2004, 02:39
Aber normal wird doch bei Skripten alles hinter // und */.../* oder ähnlich nicht beachtet. Die Zeichen sind für Kommentare vom Programmierer an andere Programmierer.

Black Eye
06.06.2004, 02:40
normal ja aber hier nicht

blue lord
06.06.2004, 02:46
AI_Output (self, other, " "); //Jetzt habe ich nur noch ein paar Bögen und Jagdzubehör.

Wenn ich das einfüge müsste Wolf es sagen. Einfach nichts zwischen die " ", wenn ich keine Syncronisation habe?

HornOx
06.06.2004, 02:47
Les dir das da mal durch: http://wiki.devmode.de/Diverses/Untertitel+und+Sprachausgabe#q3

blue lord
06.06.2004, 03:25
Ich hab alles so wie im wiki beschrieben gemacht, aber es funktioniert immer noch nicht.

Hier nochmal die Skripts:

// ************************************************************
// WannaBuy
// ************************************************************
instance DIA_Wolf_WannaBuy (C_INFO)
{
npc = SLD_811_Wolf;
nr = 6;
condition = DIA_Wolf_WannaBuy_Condition;
information = DIA_Wolf_WannaBuy_Info;
permanent = FALSE;
description = "Hast du was zu verkaufen?";
};

func int DIA_Wolf_WannaBuy_Condition ()
{
if (Npc_KnowsInfo (other, DIA_Wolf_Hallo))
{
return TRUE;
};
};

func void DIA_Wolf_WannaBuy_Info ()
{
AI_Output (other, self, "DIA_Wolf_WannaBuy_15_00"); //Hast du was zu verkaufen?
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_01"); //Ach, frag nicht.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_02"); //Bennet, einer von den Neuen, kümmert sich jetzt um die Waffen und Rüstungen.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_03"); //In der Kolonie war ich noch verantwortlich für Lees gesamtes Waffenlager und dann kommt so ein gelernter Schmied daher und 'zack', bin ich meinen Job los.
AI_Output (self, other, " "); //Jetzt habe ich nur noch ein paar Bögen und Jagdzubehör. // Jägermod
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_04"); //Ich brauche unbedingt eine neue Aufgabe, und wenn ich bloß auf die Bauernhöfe draußen aufpassen müsste.
AI_Output (self, other, "DIA_Wolf_WannaBuy_08_05"); //Ist mir egal, Hauptsache, ich sitze hier nicht mehr rum.
};




// **************************************************************
// TRADE // Jägermod
// **************************************************************
instance DIA_Wolf_Trade (C_INFO)
{
npc = SLD_811_Wolf;
nr = 8;
condition = DIA_Wolf_Trade_Condition;
information = DIA_Wolf_Trade_Info;
permanent = TRUE;
trade = TRUE;
description = "Zeig mir deine Ware.";
};

//func int DIA_Wolf_Trade_Condition ()
// {
// return (MIS_Wolf_WolfFurs != LOG_RUNNING);
// };

func int DIA_Wolf_Trade_Condition ()
{
return TRUE;
};

func void DIA_Wolf_Trade_Info ()
{
AI_Output (other, self, "DIA_Wolf_Trade_15_00"); //Zeig mir deine Ware.
B_GiveTradeInv (self);

};

[LoA]Wotan
06.06.2004, 03:39
func int DIA_Wolf_Trade_Condition ()
{

DIA_Wolf_Trade.trade = TRUE;
return TRUE;
};


die mission wolf wolffurs brauchste nicht ... die hat was mit bosper zu tun ...

blue lord
06.06.2004, 04:56
Dadurch funktioniert es auch nicht.

blue lord
06.06.2004, 18:14
Kann mir dein keiner helfen? :(

[LoA]Wotan
06.06.2004, 18:27
also nochmal rekapitulieren:

du hast eine B_GiveTradeInv_Wolf.d und die original dia_ datei ... oder ???

blue lord
06.06.2004, 18:38
ja

LAP
06.06.2004, 20:41
Hast du für die Mod eine Ini-Datei erstellt UND in dieser Datei
VDF= gesetzt? Sonst versucht er die Dialoge aus den Original vdf-Dateien zu ziehen, und das klappt natürlich nicht.

blue lord
07.06.2004, 01:52
Ich habe die Mod noch nicht gepackt, da sie noch in Arbeit ist und ich Sachen ändere.
Ich ändere erst die Sachen in den original Gothic 2 Dateien und wenn die Mod fertig ist ersetze ich die geänderten orginale durch die richtigen orginale.

Oder ist das falsch?

blue lord
07.06.2004, 03:08
Ich hab jetzt ne mod gepackt.
Ich habe die GOTHIC.DAT und die OU.BIN reingepackt und es funzt auch nicht.

[LoA]Wotan
07.06.2004, 12:37
du brauchst auch noch die ou.csl soweit ich das mitbekommen habe ...

LAP
07.06.2004, 15:13
Nein, du brauchst das Mod nicht packen, es reicht die Ini zu erstellen, und dann weiter wie im Wiki.

blue lord
08.06.2004, 00:03
Hier poste ich mal die ini:

[INFO]
Title=Gothic II - Die Nacht des Raben - Jägermod
description=Die MOd macht das Jagen interessanter
Version=0.1
Authors=blue lord
Webpage=
Icon=Gothic2.exe,-163

[FILES]
VDF=Jaegermod.mod
Game=Content\Gothic
FightAI=Content\Fight
Menu=System\Menu
Camera=System\Camera
Music=System\Music
SoundEffects=System\Sfx
ParticleEffects=System\ParticleFx
VisualEffects=System\VisualFx
OutputUnits=OU

[SETTINGS]
World=NewWorld\NewWorld.zen
Player=PC_Hero

[OPTIONS]
show_Info=1
show_InfoX=800
show_InfoY=7200
show_Version=1
show_VersionX=6500
show_VersionY=7200
show_Focus=1
show_FocusItm=1
show_FocusMob=1
show_FocusNpc=1
show_FocusBar=1
force_Subtitles=1
force_Parameters=

LAP
08.06.2004, 01:11
Original geschrieben von blue lord
[...]
VDF=Jaegermod.mod
[...]

Da einfach mal
VDF=
hinsetzen, damit er die Dateien von der Platte nimmt, anstatt aus der VDF.

blue lord
08.06.2004, 02:45
Hab ich gemacht. Mein Rechner hat ewig gebraucht bis das Menü kam und als der Ladebalken auf 100% war gings nicht weiter. Beim normalen G2 war es auch so als ich es starten wollte. Erst als ich wieder was nach das VDF= geschrieben habe hat er wieder richtig geladen. Und dann hats auch nicht gefunzt. :(