Uznałem iż temat, który znajduje się aktualnie na forum ciężko jest ogarnąć, bo jest wszystko niedokładnie napisane. Opiszę tu ładniej.
1. Pierwsze co należy zrobić to zdefiniować w STORY_GLOBALS 2 stałe(jeśli chcecie dodać jeden monolog) oraz 1 zmienną:
const int m_ore=2;
To do Monologa jakiego chcecie dodać. Oczywiście m_ore może być zupełnie inny tekst.(w naszym przypadku taki)
const int m_sleep=1;
To od Spania. Może być również inny. Ważny aby również było.
var int monolog;
To zmienna monolog, w zależności od jej wartości taki będziemy mieli monolog.
2. Teraz należy zmienić skrypt spania.
a)
func void PC_Sleep (var int t)
{
AI_StopProcessInfos(self); // [SK] ->muss hier stehen um das update zu gewährleisten
self.aivar[AIV_INVINCIBLE]=FALSE;
if (Wld_IsTime(00,00,t,00))
{
Wld_SetTime (t,00);
}
else
{
t = t + 24;
Wld_SetTime (t,00);
};
PrintScreen ("Sen dobrze ci zrobił.", -1,-1,"font_old_20_white.tga",3);
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS_MAX];
hero.attribute[ATR_MANA] = hero.attribute[ATR_MANA_MAX];
//-------- AssessEnterRoom-Wahrnehmung versenden --------
PrintGlobals (PD_ITEM_MOBSI);
Npc_SendPassivePerc (hero, PERC_ASSESSENTERROOM, NULL, hero); //...damit der Spieler dieses Feature nicht zum Hütteplündern ausnutzt!
};
Najpierw to. Nad
AI_StopProcessInfos(self);
dodajemy
MONOLOG=0
.
b)
func void SLEEPABIT_S1 ()
{
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
//***ALT** if (Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können!
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp
_GetInstanceID(rock)) )
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (her);
};
};
Następnie tutaj nad linią
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
dodajemy MONOLOG=M_SLEEP;
c)teraz ostatni krok ze spaniem - zmieniamy każdy warunek (condition) każdej instancji, dodając zamiast
{
return 1;
};
Następujący warunek:
if (MONOLOG == M_SLEEP)
{
return 1;
};
Po prostu jeśli zmienna MONOLOG == M_SLEEP to dialog zostanie pokazany, a jeśli nie to nie.
Zmieniamy tak każdy warunek każdego dialogu i idziemy dalej. Tym razem dodajemy już do naszego skryptu.
3.Nasz Skrypt
a)Przykładem będzie tu prosty skrypt kopania rudy(można go wykorzystać jakby co)
func void oreabit_s1()
{
MONOLOG=M_ORE;
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos(self);
};
Na początku tworzymy naszą funkcję oreabit_s1. Zmienia on zmienną monolog na m_ore
b)
func void ore()
{
self.aivar[AIV_INVINCIBLE] = FALSE;
if (a == 0)
{
PrintScreen("Udało ci się wydobyć 5 bryłek rudy!.",-1,-1,"font_old_20_white.tga",3);
}
else
{
PrintScreen("Udało ci się wydobyć 10 bryłek rudy!.",-1,-1,"font_old_20_white.tga",3);
};
MONOLOG=0;
AI_StopProcessInfos (self);
};
func void no_ore()
{
self.aivar[AIV_INVINCIBLE] = FALSE;
PrintScreen("Nie udało ci się nic wydobyć!.",-1,-1,"font_old_20_white.tga",3);
MONOLOG=0;
AI_StopProcessInfos (self);
};
instance noore1(C_Info)
{
npc = PC_Hero;
nr = 999;
condition = noore1_condition;
information = noore1_info;
important = 0;
permanent = 1;
description = "Nie potrafisz wydobywać rudy!.";
};
func int noore1_condition()
{
if (MONOLOG == M_ORE) && (ORE_LERNED == FALSE)
{
return 1;
};
};
func void noore1_info()
{
MONOLOG=0;
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE] = FALSE;
};
instance ore1(C_Info)
{
npc = PC_Hero;
condition = ore1_condition;
information = ore1_info;
important = 0;
permanent = 1;
description = "Wydobywaj rudę.";
};
func int ore1_condition()
{
if (MONOLOG == M_ORE) && (ORE_LERNED == TRUE)
{
return 1;
};
};
func int ore1_info()
{
var int ORE_SUC;
ORE_SUC = Hlp_Random(3)
if (ORE_SUC <= 1)//
{
ORE_Y = Hlp_Random(2);//
a = ORE_Y;
if (ORE_Y == 0)
{
CreateInvItems(hero,ItMiNugget,5);
}
else
{
CreateInvItems(hero,ItMiNugget,10);
};
ore();
}
else
{
no_ore();
};
};
O to reszta skryptu. Nie będę wszystkiego komentował. Dodam jedynie tyle, że można z niego korzystać. Nad
AI_StopProcessInfos (self);
zawsze musi być
MONOLOG=0
oraz w każdej sekcji condition każdego dialogu należy dodać odpowiedni warunek. Można z tego korzystać jak co. 66% na wydobycie i maks. 10 bryłek rudy.
4.Na koniec dodajemy do każdej Bryłki Rudy w Spacerze, tam gdzie w Objects OnStateFunc wpisujemy OREABIT. Mam nadzieję iż tutek się przyda bo zanim ogarnąłem ten co się znajduje tutaj na forum minęło z 5 godzin.....