Hejo! Znów ja, mam dla kogoś pewną ciekawostkę, jakby chciał się pobawić jeszcze skalowaniem zaklęć.
Otóż, najtrudniej było mi zrobić coś, by skalowaniu uległy zaklęcia przywoływania... zrobienie tak, by było to w miarę wyważone i ciekawe, a jednocześnie jakoś fabularnie pasujące do realiów gry, było trudne - nie tyle wykonanie, co pomysł.
Ale ostatecznie udało mi się wpaść na coś. Wchodzimy do: content/AI/monster/RNT_monster/ZS_MM_RTN_Summoned - i tam bawimy się opcjami dotyczącymi przywołanych stworów. Ja mam ustawione tak:
func void B_SummonedAssessTalk()
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, 0);
};
func void ZS_MM_Rtn_Summoned ()
{
Npc_SetPercTime (self, 1);
Npc_PercEnable (self, PERC_ASSESSPLAYER, B_MM_AssessPlayer);
Npc_PercEnable (self, PERC_ASSESSENEMY, B_MM_AssessEnemy);
Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic);
Npc_PercEnable (self, PERC_ASSESSDAMAGE, B_MM_AssessDamage);
Npc_PercEnable (self, PERC_ASSESSFIGHTSOUND, B_MM_AssessOthersDamage);
if (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Wisp_Detector))
{
Npc_PercEnable (self, PERC_ASSESSTALK, B_AssessTalk);
}
else
{
Npc_PercEnable (self, PERC_ASSESSTALK, B_SummonedAssessTalk);
};
// FUNC
B_SetAttitude (self, ATT_FRIENDLY);
self.aivar[AIV_PARTYMEMBER] = TRUE;
AI_StandUp (self);
AI_SetWalkmode (self, NPC_RUN);
};
func int ZS_MM_Rtn_Summoned_Loop()
{
// ------ beim Spieler bleiben ------
B_MM_WispDetect ();
if (Npc_GetDistToNpc (self, hero) > 800)
{
AI_GotoNpc (self, hero);
}
else //<= 500
{
if (Npc_GetStateTime(self) >= 1)
{
// ------ zum Spieler drehen ------
if (!Npc_CanSeeNpc(self, hero))
{
AI_TurnToNpc (self, hero);
};
// ------ Summon Time -------
self.aivar[AIV_SummonTime] = (self.aivar[AIV_SummonTime] + Npc_GetStateTime(self));
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 0)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, -5);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 1)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, -3);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 2)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, -2);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 3)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, -1);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 4)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, 0);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 5)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, +1);
}
if (self.aivar[AIV_SummonTime] >= 1)
&& (Npc_GetTalentSkill (hero, NPC_TALENT_MAGE) == 6)
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, +2);
};
Npc_SetStateTime (self, 0);
};
};
self.wp = Npc_GetNearestWP (self);
return LOOP_CONTINUE;
};
Co to wszystko oznacza? Po kolei:
- potwory, do których się odzywamy, nie umierają
- w odpowiednim pliku (content/AI/Monster/B_Monster/B_IniMonsterAttitudes) ustawiłem reagowanie przywołanych potworów na siebie na wzajem, na ludzi, oraz reagowanie ludzi na przywołane potwory - by były to reakcje neutralne - dzięki temu możecie cieszyć się obecnością pupila, póki nie umrze, a NPC nie zaatakują go bez powodu, tak samo jak i on nie zaatakuje nikogo, póki nie zrobicie tego wy sami, bądź nie będzie musiał was bronić
- potwory nie mają czasu przywołania - odchodzą dopiero, gdy ich życie spadnie do 0 - jednak w odpowiednim miejscu (content/AI/AI_intern/AI_cinstants) znajdujecie linijkę:
const int MONSTER_SUMMON_TIME = 60
... i zmieniacie z bazowego 60, na jakąś niebotyczną, niemożliwą do osiągnięcia liczbę (jak na przykład 9999999999999) - dzięki temu życie przywołanej istoty będzie wynosiło tę ilość sekund
- normalnie potwory umierały po tym czasie, jednak teraz - zależnie od kręgu:
0 krąg - przywołany potwór traci 5 punktów zdrowia co sekundę
1 krąg - przywołany potwór traci 3 punkty zdrowia co sekundę
2 krąg - przywołany potwór traci 2 punkty zdrowia co sekundę
3 krąg - przywołany potwór traci 1 punkt zdrowia co sekundę
4 krąg - przywołany potwór nie traci/nie zyskuje zdrowia
5 krąg - przywołany potwór odnawia 1 punkt zdrowia co sekundę
6 krąg - przywołany potwór odnawia 2 punkty zdrowia co sekundę
Oczywiście, liczby można zmieniać wedle uznania!