Czołem! Podrzucam skrypt do Gothic 1, który umożliwia przydzielanie ambientowych statystyk postaciom. Skrypt jest oczywiście w przeważającej mierze zrzynką analogicznego skryptu występującego w Gothic 2.
Przydaje się jeżeli chcesz z jednego miejsca zmieniać statystyki wielu postaciom zamiast każdorazowego wchodzenia do załóżmy 30 plików w folderze Gothic\_work\DATA\scripts\Content\Story\NPC W mojej ocenie całkiem użyteczna zabawka przy balansowaniu poziomu trudności w modyfikacji.
Oczywiście żeby ten skrypt działał w odniesieniu do danego NPC najpierw musisz w pliku tego NPC w folderze Gothic\_work\DATA\scripts\Content\Story\NPC wstawić odpowiednią funkcję ale nie uprzedzajmy faktów.
Wstawianie skryptu
1. Po pierwsze musisz wkleić poniższy skrypt. Gdzie? Ja wkleiłem w pliku B_Functions.d znajdującym się w folderze Gothic\DATA\scripts\Content\AI\AI_Intern
func void b_setambientnpcstats(var C_Npc slf,var int ambnpcstats)
{
Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
if(ambnpcstats == 1) ///////zestaw statystyk nr 1
{
slf.level = 5;
slf.attribute[ATR_STRENGTH] = 30;
slf.attribute[ATR_DEXTERITY] = 10;
slf.attribute[ATR_MANA_MAX] = 0;
slf.attribute[ATR_MANA] = 0;
slf.attribute[ATR_HITPOINTS_MAX] = 200;
slf.attribute[ATR_HITPOINTS] = 200;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
};
if(ambnpcstats == 2) ///////zestaw statystyk nr 2
{
slf.level = 5;
slf.attribute[ATR_STRENGTH] = 30;
slf.attribute[ATR_DEXTERITY] = 10;
slf.attribute[ATR_MANA_MAX] = 0;
slf.attribute[ATR_MANA] = 0;
slf.attribute[ATR_HITPOINTS_MAX] = 200;
slf.attribute[ATR_HITPOINTS] = 200;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
};
if(ambnpcstats == 3) ///////zestaw statystyk nr 3
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 60;
slf.attribute[ATR_DEXTERITY] = 25;
slf.attribute[ATR_MANA_MAX] = 50;
slf.attribute[ATR_MANA] = 50;
slf.attribute[ATR_HITPOINTS_MAX] = 340;
slf.attribute[ATR_HITPOINTS] = 340;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
if(ambnpcstats == 4) ///////zestaw statystyk nr 4
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 60;
slf.attribute[ATR_DEXTERITY] = 34;
slf.attribute[ATR_MANA_MAX] = 20;
slf.attribute[ATR_MANA] = 20;
slf.attribute[ATR_HITPOINTS_MAX] = 380;
slf.attribute[ATR_HITPOINTS] = 380;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
if(ambnpcstats == 5) ///////zestaw statystyk nr 5 (możesz sobie dorobić 6,7,8 i ile chcesz takich zestawów)
{
slf.level = 8;
slf.attribute[ATR_STRENGTH] = 50;
slf.attribute[ATR_DEXTERITY] = 34;
slf.attribute[ATR_MANA_MAX] = 15;
slf.attribute[ATR_MANA] = 15;
slf.attribute[ATR_HITPOINTS_MAX] = 350;
slf.attribute[ATR_HITPOINTS] = 350;
Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
};
slf.exp = 500 * ((slf.level + 1) / 2) * (slf.level + 1);
slf.exp_next = 500 * ((slf.level + 2) / 2) * (slf.level + 1);
};
Taka mała uwaga: czemu zalecam by wkleić to akurat do w pliku B_Functions.d? Otóż gra odczytuje rzeczy w pewnej kolejności. Jak poprzednio wstawiałem to do mojego ulubionego pliku B_InExtremo.d w Gothic\_work\DATA\scripts\Content\Story\B to gra nie zasysała tego skryptu a po wklejeniu w pliku B_Functions wszystko ładnie śmiga.
2. Po drugie musisz edytować pliki postaci, które chcesz objąć systemem ambientowych zestawów. Przykładowo wynajdujesz sobie plik VLK_560_Buddler I usuwasz w nim wszystko to co określone jest w zestawie czyli w naszym przypadku wywalasz fragmenty skryptu dotyczące:
- poziomu
- siły, zręczności, many
- punktów życia i max punktów życia
- umiejętności walki bronią
W miejsce statystyk w tym pliku NPC-a wstawiasz „B_SetAmbientNPCStats(self, 1); /////// zestaw statystyk nr 1”. Jeżeli to ma być zestaw drugi to zamiast jedynki wstawiasz tam 2 („B_SetAmbientNPCStats(self, 2)”), itd.
Przykładowy plik po opisywanej obróbce będzie wyglądał tak:
instance VLK_560_Buddler (Npc_Default)
{
//-------- primary data --------
name = Name_Buddler;
npctype = npctype_ambient;
guild = GIL_VLK;
voice = 2;
id = 560;
//-------- abilities --------
B_SetAmbientNPCStats(self, 1); /////// zestaw statystyk nr 1
//-------- visuals --------
// animations
Mdl_SetVisual (self,"HUMANS.MDS");
Mdl_ApplyOverlayMds (self,"Humans_Tired.mds");
// body mesh, head mesh, hairmesh, face-tex, hair-tex, skin
Mdl_SetVisualBody (self,"hum_body_Naked0",3,1,"Hum_Head_Psionic", 67, 2, -1);
B_Scale (self);
Mdl_SetModelFatness (self, 0);
fight_tactic = FAI_HUMAN_COWARD;
//-------- Talents --------
//-------- inventory --------
EquipItem (self, ItMw_1h_Club_01);
CreateInvItem (self, ItFoApple);
//-------------Daily Routine-------------
daily_routine = Rtn_start_560;
};
FUNC VOID Rtn_start_560 ()
{
TA_Sleep (23,00,06,30,"OCR_HUT_16");
TA_StandAround (06,30,11,00,"OCR_OUTSIDE_HUT_16");
TA_WashSelf (11,00,11,20,"OCR_TO_HUT_17");
TA_SitCampfire (11,20,23,00,"OCR_OUTSIDE_HUT_16");
};
4. I gotowe. Teraz zamiast wchodzić do każdego pliku z osobna i edytować statystyki każdej postaci możesz masowo zmieniać statystyki z poziomu jednego pliku tekstowego. Oczywiście to ułatwienie dotyczy tylko tych NPC-ów, których uprzednio przydzieliłeś do jednego z zestawów.