Tutorial przeznaczony głównie dla gothic 2 (ale można też korzystać w gothic 1, wszystko opiera się na podobnych zasadach)
Zaczynajmy:
Wchodzimy w: _work/data/scripts/content/AI/Monster/RTN_Monster i tam
otwieramy plik ZS_MM_RTN_Summoned
Patrzymy na jego przednią część czyli to co wkleiłem poniżej.
Obok (na kolorowo) będą dopisane sprawy które w danych linijkach możemy bezpiecznie zmienić.
------------------------------------------------------------------------------------------
// ******************
// ZS_MM_Rtn_Summoned
// ******************
func void B_SummonedAssessTalk()
{
Npc_ChangeAttribute (self, ATR_HITPOINTS, -self.attribute[ATR_HITPOINTS_MAX]); //W tym miejscu możemy wstawić dowolną funkcję która będzie odpalana w momencie kliknięcia na potwora, w tym wypadku jest to jego śmierć
};
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); // tutaj z kolei możemy zmienić nastawienie przyzwanego potwora do bohatera ustawiając zamiast ATT_FRIENDLY (przyjazny) np. ATT_HOSTILE (wrogi)
self.aivar[AIV_PARTYMEMBER] = TRUE;
AI_StandUp (self);
AI_SetWalkmode (self, NPC_RUN); //tutaj regulujemy czy przyzwana postać poruszając się będzie biec czy chodzić, jeżeli chcemy by chodziła to przypuszczam że zamiast NPC_RUN należy wpisać NPC_WALK
};
func int ZS_MM_Rtn_Summoned_Loop()
{
// ------ beim Spieler bleiben ------
B_MM_WispDetect ();
if (Npc_GetDistToNpc (self, hero) > 500) //tutaj można regulować jak długi może być dystans między bohaterem a przyzwaną postacią, w tej chwili warunek jest taki że jeżeli postać znajdzie się w odległości ponad 5m od bohatera to...
{
AI_GotoNpc (self, hero); //... uda się ona za nim
}
else //<= 500
{
if (Npc_GetStateTime(self) >= 1)
{
// ------ zum Spieler drehen ------
if (!Npc_CanSeeNpc(self, hero)) //ta funkcja mówi że jeżeli przyzwany stwór (czy coś) nie będzie widzieć bohatera (zwróćcie uwagę na wykrzyknik, oznacza przeciwność) to...
{
AI_TurnToNpc (self, hero); //...obróci się w jego stronę. Zamiast AI_TurnToNpc można ustawić dowolną funkcję
};
// ------ Summon Time -------
self.aivar[AIV_SummonTime] = (self.aivar[AIV_SummonTime] + Npc_GetStateTime(self)); //weil AI_Goto länger dauern kann
if (self.aivar[AIV_SummonTime] >= MONSTER_SUMMON_TIME)
Npc_ChangeAttribute (self, ATR_HITPOINTS, -self.attribute[ATR_HITPOINTS_MAX]); ///Ta funkcja jest najciekawsza i powinniście zwrócić na nią szczególną uwagę. Mówi że jeżeli czas życia przyzwanej postaci przekroczy czasu określony gdzieś tam to postać zginie. Zmieniając więc warunek if na np: IF (Hero.Level > 500) możemy sprawić że postać zginie dopiero gdy bohater przekroczy pięćsetny poziom. W ten sposób możemy więc sprawić że przyzwana postać nie zginie spowodu czasu. Będzie trzeba ją zabić. Dzięki tej funkcji możemy stworzyć sobie w gothicu wielką armię przyzwanych stworów i zasiać terror na całej mapie.
};
----------------------------------------------------------------------------
I na tym kończy się tutorial, mam nadzieję że uszczęśliwiłem nim kilka osób i czekam na komentarze. Jakbyście zauważyli jakieś błędy to proszę napisać.
Pozdrawiam