PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauch hilfe beim Script!



Cargo
20.06.2008, 20:35
Also, ich kann Gothic ganz normal starten, es kommt keine Fehlermeldung.
Nur leider kann ich den Quest nich beenden.
Hier mal der Script:


///////////////////////////////////////////////////////////////////////
// Info EXIT
///////////////////////////////////////////////////////////////////////
INSTANCE DIA_Arrow_EXIT (C_INFO)
{
npc = OUT_5555_Arrow;
nr = 999;
condition = DIA_Arrow_EXIT_Condition;
information = DIA_Arrow_EXIT_Info;
permanent = TRUE;
description = "ENDE";
};

FUNC INT DIA_Arrow_EXIT_Condition()
{
return TRUE;
};

FUNC VOID DIA_Arrow_EXIT_Info()
{
AI_StopProcessInfos (self);
};

///////////////////////////////////////////////////////////////////////
// Info Hallo
///////////////////////////////////////////////////////////////////////
INSTANCE DIA_Arrow_Hallo (C_INFO)
{
npc = OUT_5555_Arrow;
nr = 0;
condition = DIA_Arrow_Hallo_Condition;
information = DIA_Arrow_Hallo_Info;
permanent = FALSE;
important = FALSE;
};
FUNC INT DIA_Arrow_Hallo_Condition()
{
if (self.aivar[AIV_DefeatedByPlayer] == FALSE)
{
return TRUE;
};
};
FUNC VOID DIA_Arrow_Hallo_Info()
{
AI_Output (other, self, "DIA_Arrow_Hallo_15_00");//...
AI_Output (self, other, "DIA_Arrow_Hallo_14_00");//...
};
/////////////////////////////////////////////////////////////////////////


instance DIA_Arrow_Scavenger (C_INFO)
{
npc = OUT_5555_Arrow;
condition = DIA_Arrow_Scavenger_Condition;
information = DIA_Arrow_Scavenger_Info;
important = FALSE;
permanent = FALSE;
nr = 1;
description = "Ich soll das Fleisch abholen";
};

func int DIA_Arrow_Scavenger_Condition()
{
return TRUE;
};

func void DIA_Arrow_Scavenger_Info()
{
AI_Output (other, self, "DIA_Arrow_Scavenger_15_00");//...
AI_Output (self, other, "DIA_Arrow_Scavenger_14_00");//...
AI_Output (self, other, "DIA_Arrow_Scavenger_14_01");//...

Log_CreateTopic (TOPIC_ARROWFLEISCH, LOG_MISSION);
Log_SetTopicStatus(TOPIC_ARROWFLEISCH, LOG_RUNNING);
B_LogEntry (TOPIC_ARROWFLEISCH,"...");
};
/////////////////////////////////////////////////////////////////////////


instance DIA_Arrow_KilledScavenger (C_INFO)
{
npc = OUT_5555_Arrow;
nr = 2;
condition = DIA_Arrow_KilledScavenger_Condition;
information = DIA_Arrow_KilledScavenger_Info;
permanent = TRUE;
description = "...";
};
func int DIA_Arrow_KilledScavenger_Condition ()
{
if (MIS_ARROWFLEISCH == LOG_RUNNING)
{
return TRUE;
};
};
func void DIA_Arrow_KilledScavenger_Info ()
{
AI_Output (other, self, "DIA_Arrow_KilledScavenger_15_00"); //...

// if (Npc_KnowsInfo (hero, DIA_Arrow_Scavenger))
if (Npc_IsDead(YScavenger1))
&& (Npc_IsDead(YScavenger2))
&& (Npc_IsDead(YScavenger3))
&& (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_00"); //...
AI_Output (other, self, "DIA_Arrow_KilledScavenger_14_01"); //...
B_GiveInvItems (other,self, ItFoMuttonRaw, 3);
B_GivePlayerXP (50);
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_03"); //...
B_GiveInvItems (other,self, ItFoMutton, 6);

MIS_ARROWFLEISCH = LOG_SUCCESS;
Log_SetTopicStatus(TOPIC_ARROWFLEISCH, LOG_SUCCESS);
Log_AddEntry (TOPIC_ARROWFLEISCH,"...");
B_CheckLog();
};

};

Ich hab mal die Text stellen mit Pünktchen erstetzt. Also was fehlt. Nachdem ich die Scavenger gekillt hab und drei Stück Rohesfleisch dabei hab, will er immernoch nicht die gesprächsoption anzeigen.
Hoffe auf baldiger Hilfe
MfG Cargo
P.S. Bin heute nicht mehr on, muss Morgenfrüh noch wo hin.

Sumpfkrautjunkie
20.06.2008, 20:40
Du hast vergessen bei
FUNC VOID DIA_Arrow_Scavenger_Info()
{
AI_Output (other, self, "DIA_Arrow_Scavenger_15_00");//...
AI_Output (self, other, "DIA_Arrow_Scavenger_14_00");//...
AI_Output (self, other, "DIA_Arrow_Scavenger_14_01");//...

Log_CreateTopic (TOPIC_ARROWFLEISCH, LOG_MISSION);
Log_SetTopicStatus(TOPIC_ARROWFLEISCH, LOG_RUNNING);
B_LogEntry (TOPIC_ARROWFLEISCH,"...");
};

MIS_ARROWFLEISCH auf LOG_RUNNING zu setzen (die Variable fragst du ja hinterher ab):

MIS_ARROWFLEISCH= LOG_RUNNING;

Oparilames
20.06.2008, 20:42
instance DIA_Arrow_KilledScavenger (C_INFO)
{
npc = OUT_5555_Arrow;
nr = 2;
condition = DIA_Arrow_KilledScavenger_Condition;
information = DIA_Arrow_KilledScavenger_Info;
permanent = TRUE;
description = "...";
};
func int DIA_Arrow_KilledScavenger_Condition ()
{
if (Npc_KnowsInfo(hero,DIA_Arrow_Scavenger))
&& (MIS_ARROWFLEISCH == LOG_RUNNING) //Hier bin ich unsicher ^^
{
return TRUE;
};
};
func void DIA_Arrow_KilledScavenger_Info ()
{
AI_Output (other, self, "DIA_Arrow_KilledScavenger_15_00"); //...

if (Npc_IsDead(YScavenger1))
&& (Npc_IsDead(YScavenger2))
&& (Npc_IsDead(YScavenger3))
&& (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_00"); //...
AI_Output (other, self, "DIA_Arrow_KilledScavenger_14_01"); //...
B_GiveInvItems (other,self, ItFoMuttonRaw, 3);
B_GivePlayerXP (50);
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_03"); //...
B_GiveInvItems (other,self, ItFoMutton, 6);

MIS_ARROWFLEISCH = LOG_SUCCESS;
Log_SetTopicStatus(TOPIC_ARROWFLEISCH, LOG_SUCCESS);
Log_AddEntry (TOPIC_ARROWFLEISCH,"...");
B_CheckLog();
Print ("Quest abgeschlossen!");
}
else
{
Print ("Vorraussetzungen nicht erfüllt!");
};
};
Probier das mal, wenns nicht klappt, helfen die Print angaben die fehlerhafte Stelle herauszufinden.

Edit:-->
Ups stimmt ja, Sumpfkrautjunkie hat recht.

Cargo
21.06.2008, 15:44
Okay, jetzt kann man die Mission beenden, das Problem ist, der Text erscheint schon zur auswahl befor man die Scavenger gekillt hat.

Sumpfkrautjunkie
21.06.2008, 15:59
Das
if (Npc_IsDead(YScavenger1))
&& (Npc_IsDead(YScavenger2))
&& (Npc_IsDead(YScavenger3))
&& (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
muss dann in die _Condition, also die die Bedingung zum Erscheinen des Dialoges und nicht in die _Info

Cargo
21.06.2008, 16:11
Also, ich hab es so Probiert:

func int DIA_Arrow_KilledScavenger_Condition ()
{
if (Npc_KnowsInfo(hero,DIA_Arrow_Scavenger))
&& (MIS_ARROWFLEISCH == LOG_RUNNING)
&&(Npc_IsDead(YScavenger1))
&& (Npc_IsDead(YScavenger2))
&& (Npc_IsDead(YScavenger3))
&& (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
return TRUE;
};
};
func void DIA_Arrow_KilledScavenger_Info ()
{
AI_Output (other, self, "DIA_Arrow_KilledScavenger_15_00"); //...

// if (Npc_IsDead(YScavenger1))
// && (Npc_IsDead(YScavenger2))
// && (Npc_IsDead(YScavenger3))
// && (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_00"); //...
AI_Output (other, self, "DIA_Arrow_KilledScavenger_14_01"); //...
B_GiveInvItems (other,self, ItFoMuttonRaw, 3);
Dann kam eine Fehlermeldung. Hier ist sie: U:PAR: Unknown identifier:{ (line 112).
Was hab ich Falsch gemacht?

Dada
21.06.2008, 16:14
Imo ist die Klammer zu viel:


// && (Npc_HasItems (other, ItFoMuttonRaw) > 2)
{
AI_Output (self, other, "DIA_Arrow_KilledScavenger_14_00"); //...

Cargo
21.06.2008, 16:22
Oh, Thanks. Hab die Klammer auch schon mal gelöscht, hab aber eine andere weiter Unten nicht weg gemacht. Dadurch kam es zu weiteren Fehlern. Jetzt gehts. DANKE!!!
Wenn ich weitere Probleme hab (höchst warscheinlich:D) die ich nicht aleine Lösen kann, hoste ich sie hier im Thread.
MfG Cargo

Cargo
21.06.2008, 16:31
Ähäm, sorry für die doppelpost. Also ich hab bemerkt das Arrow am ende die 6 Stücke Gebratenesfleisch rausrückt. Kommt das weil er die nicht im Inventar hat oder ist da was Falsch?

Sumpfkrautjunkie
21.06.2008, 16:38
Laut
B_GiveInvItems (other,self, ItFoMutton, 6);
soll der Held Arrow was geben.
Du musst die Reihenfolge beachten:
B_GiveInvItems (Geber,Nehmer, Was, Anzahl);
also:
B_GiveInvItems (self,other, ItFoMutton, 6);
(man kann sich als faustregel merken, dass in Dialogen self immer der Gesprächsparter und other der Heldi st).

Cargo
21.06.2008, 16:42
:rolleyes: Ups, hab ich vergessen zu ändern. Danke!