Skrypt, który sprawi, że gdy Bezimienny śpi regeneruje się nie tylko on lecz i wszystkie ludzkie postacie w Górniczej Dolinie (z wyjątkiem postaci martwych) + jeżeli jakaś postać nie ma broni, to w tym momencie otrzyma także broń.Na początek przerobiona została funkcja "B_RefreshAtInsert.d" wzięta z "Gothic II\_work\data\Scripts\Content\AI\AI_Intern". Edytowano opcję "B_RefreshAtInsert" by działała na takiej samej zasadzie jak "B_KillNpc" i nazwano ją "B_RefreshNpc.
Funkcja "B_RefreshNpc"//#############################################################################################
// REFRESHNPC - full health and a weapon
//
//#############################################################################################
func void B_RefreshNPC(var int npcInstance)
{
PrintDebugNpc (PD_ZS_DETAIL, "B_RefreshNPC");
var C_NPC npc;
npc = Hlp_GetNpc(npcInstance);
if(self.attribute[ATR_HITPOINTS] <= 0)
{
Npc_ChangeAttribute (npc, ATR_HITPOINTS, npc.attribute[ATR_HITPOINTS_MAX]);
};
if(Npc_HasEquippedWeapon(Npc) == FALSE)
{
if(Npc.guild == GIL_NONE)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_EBR)
{
CreateInvItems(Npc,itmw_1h_sword_03,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_GRD)
{
CreateInvItems(Npc,itmw_1h_sword_03,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_STT)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_KDF)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_VLK)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_KDW)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_SLD)
{
CreateInvItems(Npc,itmw_1h_sword_03,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_ORG)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_BAU)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_SFB)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_GUR)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_NOV)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_TPL)
{
CreateInvItems(Npc,itmw_1h_sword_03,1);
AI_EquipBestMeleeWeapon(Npc);
};
if(Npc.guild == GIL_BAB)
{
CreateInvItems(Npc,Itmw_1h_club_01,1);
AI_EquipBestMeleeWeapon(Npc);
};
};
};
Pałka Itmw_1h_club_01
obrażenia obuchowe:5
wartość kupna: 2 bryłki rudy
wartość sprzedaży: 1 bryłka rudy
Miecz strażnikaitmw_1h_sword_03
Obrażenia sieczne: 32
wartość kupna: 104 bryłki rudy
wartość sprzedaży: 52 bryłki rudy
Potem stworzono osobne funkcje korzystające z funkcji "B_RefreshNpc" dla różnych grup postaci (np. B_RefreshNpcOC, B_RefreshNpcNC, B_RefreshNpcOM, B_RefreshNpcFMC, itd.) gdzie wpakowano wszystkie postacie z danego osiedla.
Przykładowa funkcja "B_RefreshNpcQuentinBandits":
func void B_RefreshNpcQuentinBandits()
{
//------------Banditenlager-----------------------------------
B_RefreshNPC (ORG_858_Quentin);
B_RefreshNPC (ORG_863_Raeuber);
B_RefreshNPC (ORG_864_Raeuber);
B_RefreshNPC (ORG_865_Raeuber);
B_RefreshNPC (ORG_866_Raeuber);
B_RefreshNPC (ORG_867_Raeuber);
B_RefreshNPC (ORG_868_Raeuber);
B_RefreshNPC (ORG_869_Raeuber);
B_RefreshNPC (ORG_870_Raeuber);
B_RefreshNPC (ORG_871_Raeuber);
B_RefreshNPC (ORG_874_Raeuber);
};
Najprawdopodobniej można to było wpakować wszystko do jednej funkcji, w której znalazłyby się wszystkie postacie z całej Górniczej Doliny ale z ostrożności podzielono to na osobnych funkcji, żeby łatwiej było coś zmienić gdyby gra miała problem z przetworzeniem wszystkich NPC
Na koniec powiązano to z funkcją "PC_Sleep" w pliku Sleepabit.d (Gothic\_work\DATA\scripts\Content\Story\EVENTS).
//****************************
// PC_Sleep
//****************************
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];
B_RefreshNpcNC();
B_RefreshNpcFMC();
B_RefreshNpcFM();
B_RefreshNpcOC();
B_RefreshNpcOM();
B_RefreshNpcPSICamp();
B_RefreshNpcQuentinBandits();
//-------- 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!
};
Uwagi:
1. Funkcja nie działa między zenami. Jeżeli więc główny bohater prześpi się w WORLD.ZEN to postacie z OLDMINE.ZEN i FREEMINE.ZEN nie ulegną regeneracji.
2. Właściwie można wszystkie postacie z wszystkich obozów wpakować do jednej funkcji, lecz wolałem podzielić to obozami - na wypadek gdyby gra miała problem z regeneracją wszystkich postaci w Kolonii jednocześnie.
3. Broń, która się spawnuje przy regeneracji postaci może trochę zaburzyć balans gry. Przykładowo cena "miecza strażnika" spawnującego się dla magnatów, strażników, najemników i strażników świątynnych wynosi 52 bryłki rudy. Zawsze jednak można zrobić drugą wersję miecza z obniżoną ceną specjalnie na potrzeby "B_RefreshNPC".
4. Generalnie w podstawowej i niezmodyfikowanej wersji gry Gothic istnieje pewien sposób by zregenerować HP wszystkich postaci. Wystarczy przejść z jednego z jednego zena do drugiego, więc jeżeli chcesz by wszystkie pobite przez Ciebie postacie w Starym i Nowym Obozie przestały krwawić to po prostu wejdź do Starej Kopalni a po wyjściu z niej wszyscy znów będą zdrowi ale... pozbawieni broni (jeżeli im ją zabrałeś). Jeżeli chcesz by regenerowała się im też broń i by regeneracja odbywała się trochę częściej niż przy okazji powrotu z wizyt w Kopalniach to możesz sięgnąć po ten skrypt

Kopiowanie dozwolone.