World of Gothic Archiv > Editing
Routine wird nicht gewechselt
Seite 1 von 1  1 
17.04.2003, 11:55 #1
Auron_X
Beiträge: 929
Routine wird nicht gewechselt
Hallo,
folgendes Prob:
Die NPC soll die Routine wechseln und in die Arena latschen, aber das macht sie nicht. Stattdesssen verfällt sie einfach wieder in ihre Standardroutine.

Hier der Dialog:

code\:

// **************************************************
// EXIT
// **************************************************

instance DIA_Asgarn_Exit (C_INFO)
{
npc = Stt_18001_Asgarn;
nr = 999;
condition = DIA_Asgarn_Exit_Condition;
information = DIA_Asgarn_Exit_Info;
permanent = TRUE;
description = DIALOG_ENDE;
};

FUNC INT DIA_Asgarn_Exit_Condition()
{
return TRUE;
};

func VOID DIA_Asgarn_Exit_Info()
{
AI_StopProcessInfos (self);
};

//**************************************************
// Hallo ***
//**************************************************

instance DIA_Asgarn_Hello (C_INFO)
{
npc = Stt_18001_Asgarn;
condition = DIA_Asgarn_Hello_Condition;
information = DIA_Asgarn_Hello_Info;
permanent = FALSE;
description = "Hallo";
};

FUNC INT DIA_Asgarn_Hello_Condition()
{
return TRUE;
};

func VOID DIA_Asgarn_Hello_Info()
{
AI_Output(other,self,"DIA_Asgarn_Hello_15_00");//Hallo!
AI_Output(self,other,"DIA_Asgarn_Hello_10_01");//Hallo, was willst du von mir?
AI_Output(other,self,"DIA_Asgarn_Hello_15_02");//Nichts, ich wollte einfach nur "Hallo" sagen.
AI_Output(self,other,"DIA_Asgarn_Hello_10_03");//Auf Wiedersehen.
AI_Output(other,self,"DIA_Asgarn_Hello_15_04");//Na du hast aber schlechte Manieren!
};

//**************************************************
// Herausfordern ***
//**************************************************

instance DIA_Asgarn_fight1 (C_INFO)
{
npc = Stt_18001_Asgarn;
condition = DIA_Asgarn_fight1_Condition;
information = DIA_Asgarn_fight1_Info;
permanent = FALSE;
description = "Ich muss dir mal Manieren beibringen!";
};

FUNC INT DIA_Asgarn_fight1_Condition()
{
if (Npc_KnowsInfo(hero,DIA_Asgarn_Hello))
{
return TRUE;
};
return FALSE;
};

func VOID DIA_Asgarn_fight1_Info()
{
AI_Output(other,self,"DIA_Asgarn_fight1_15_00");//Ich denke ich muss dir mal manieren beibringen.
AI_Output(self,other,"DIA_Asgarn_fight1_10_01");//Na klar, das können wir ja in der Arena ausmachen.

if (Wld_IsTime(18,30,20,00) == TRUE)
{
AI_Output(self,other,"DIA_Asgarn_fight1_10_02");//Aber nicht jetzt, wir wollen die anderen ja nicht beim Kämpfen stören...
}
else
{
AI_Output(self,other,"DIA_Asgarn_fight1_10_03");//Komm mit, wir werden ja sehen wer hier wem Manieren beibringt. //Diesen Text spricht er noch
AI_StopProcessInfos(self);

Asgarnfight = TRUE;
Npc_ExchangeRoutine(self,"Guide");
};
};


// **************************************
// IN DER ARENA
// **************************************

instance DIA_Asgarn_fightstart (C_INFO)
{
npc = Stt_18001_Asgarn;
nr = 1;
condition = DIA_Asgarn_fightstart_Condition;
information = DIA_Asgarn_fightstart_Info;
permanent = 0;
important = 1;
};

FUNC INT DIA_Asgarn_fightstart_Condition()
{
if ( (Asgarnfight == TRUE) && (Npc_GetDistToWp (hero,"OCR_ARENABATTLE_TRAIN") < 500) )
{
return TRUE;
};
};

func VOID DIA_Asgarn_fightstart_Info()
{
AI_Output (self, other,"DIA_Asgarn_fightstart_10_00"); //So, dann wollen wir mal. Lets rock!

AI_StopProcessInfos ( self );

Npc_ExchangeRoutine(self,"START");
Asgarnfight = FALSE;

Npc_SetTarget(self,other);
AI_StartState(self,ZS_ATTACK,1,"");
};



Und hier noch die NPC-Instanz:

code\:

instance STT_18001_Asgarn (Npc_Default)
{
//-------- primary data --------
name = "Asgarn";
guild = GIL_STT;
level = 28;
npctype = NPCTYPE_MAIN;

voice = 10; // k.A. musst du noch zuteilen...
id = 18001;

//-------- abilities --------
attribute[ATR_STRENGTH] = 35;
attribute[ATR_DEXTERITY] = 20;
attribute[ATR_MANA_MAX] = 5;
attribute[ATR_MANA] = 0;
attribute[ATR_HITPOINTS_MAX] = 220;
attribute[ATR_HITPOINTS] = 220;

//-------- visuals --------
// animations
Mdl_SetVisual (self,"HUMANS.MDS");
// body mesh bodytex skin head mesh headtex(schick ich mit) teethtex ruestung
Mdl_SetVisualBody (self,"hum_body_Naked0", 0, 3, "Hum_Head_Bald", 118, 1, STT_ARMOR_M);

B_Scale (self);
Mdl_SetModelFatness(self,0);

fight_tactic = FAI_HUMAN_RANGED;

//-------- Talente --------

Npc_SetTalentSkill (self, NPC_TALENT_1H,2);

//-------- inventory --------

EquipItem (self, ItMw_2H_Staff_03);
CreateInvItem (self, ItFo_Potion_Water_01);
CreateInvItem (self, ItFoApple);
CreateInvItems (self, ItMinugget,5);
CreateInvItems (self, ItKeLockpick,2);


//------------- Daily Routine -------------
daily_routine = Rtn_start_10001;
};

FUNC VOID Rtn_start_10001 () //Auch noch keine, du meintest um die Standorte müsse ich mich nicht kümmern
{
TA_SitAround (00,00,12,00,"OCR_HUT_Z5_SIT2");
TA_SitAround (12,00,00,00,"OCR_HUT_Z5_SIT2");
};

FUNC VOID Rtn_Guide_10001()
{
TA_GuidePC (00,00,12,00,"OCR_ARENABATTLE_TRAIN");
TA_GuidePC (12,00,00,00,"OCR_ARENABATTLE_TRAIN");
};



THX schonmal im Voraus
Auron_X
17.04.2003, 12:07 #2
Mudfreak
Beiträge: 446

Also das Problem kenn ich auch und es ist ziemlich schwer es selbst zu lösen. Also an deiner DIA File stimmt alles soweit. Es wird der Routinewechsel Guide eingeleitet. Das hast du auch in der NPC File richtig gemacht. ABER:

daily_routine = Rtn_start_10001;

Die Zahl 10001 muss deine NPC ID sein. Also wenn du es so behalten willst musst du oben unter ID die Zahl 10001 statt 18001 schreiben. Danach musst die NPC file entsprechend abspeichern. Der Name besteht normalerweise aus 3 Teilen. Gilde_Npcid_Name. Das heisst in deinem Fall dass die Datei STT_10001_Asgarn heissen muss. Das wichtigste ist aber eigentlich die ID. Also wenn du nen anderen Namen verwendest oder ne andere Gilde gehts trotzdem.
Seite 1 von 1  1