Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Gothic: Przyzwana bestia


Ubytek

Rekomendowane odpowiedzi

Opublikowano

W tym poradniku zajmiemy się skryptem przyzywanych bestii.


Na jego podstawie możemy stworzyć własną bestię, którą będziemy mogli przyzwać.



Tak więc zacznijmy od przejścia do katalogu "/RTN_Monster" i otwarcia pliku "ZS_MM_RTN_Summoned".


W większości przypadkach treść w tym pliku jest ułożona w jednej lub dwóch liniach, dlatego warto jest uporządkować aby łatwiej było ją edytować.




Poniższa linijka przedstawia funkcję, która odpowiada za odwołanie bestii, czyli jej śmierć:



func void B_SummonedAssessTalk(){Npc_ChangeAttribute (self, ATR_HITPOINTS, -self.attribute[ATR_HITPOINTS_MAX]); };

Ustalmy stosunek bestii do nas, czy ma być przyjacielsko nastawiona, czy też wrogo


(wówczas zmieniamy ostatni wers na: ATT_HOSTILE):



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);};// FUNCB_SetAttitude (self, ATT_FRIENDLY);

Nasza bestia będzie stała oraz biegła, więc funkcja wygląda tak:



self.aivar[AIV_PARTYMEMBER] = TRUE;AI_StandUp (self);AI_SetWalkmode (self, NPC_RUN);};

Teraz ustawmy dystans pomiędzy stworem, a naszym bohaterem, a także podążanie za naszą postacią. Domyślna wartość wynosi 500, ale można zmienić tą wartość:



func int ZS_MM_Rtn_Summoned_Loop(){// ------ beim Spieler bleiben ------B_MM_WispDetect ();if (Npc_GetDistToNpc (self, hero) > 500){AI_GotoNpc (self, hero);}

Zaś poniższa funkcja odpowiada za określony czas życia przyzwanego potwora.


Możliwa jest zmiana warunku na dowolnie inny, od krótkiego aż po nieskończenie wielki.




// ------ Summon Time -------self.aivar[AIV_SummonTime] = (self.aivar[AIV_SummonTime] + Npc_GetStateTime(self)); //weil AI_Goto länger dauern kannif (self.aivar[AIV_SummonTime] >= MONSTER_SUMMON_TIME)Npc_ChangeAttribute (self, ATR_HITPOINTS, -self.attribute[ATR_HITPOINTS_MAX]);};

Ostatnia funkcja pokazuje, że jeżeli przyzwana bestia napotka przeszkodę lub straci kontakt wzrokowy z naszą postacią to zrobi obrót w naszą stronę i przybiegnie do nas:



else //<= 500{if (Npc_GetStateTime(self) >= 1){// ------ zum Spieler drehen ------if (!Npc_CanSeeNpc(self, hero)){AI_TurnToNpc (self, hero);};

Wszystkie powyższe funkcje można zmieniać według własnego


uznania, a przy niektórych pamiętając o granicy rozsądku ;)

1375884335-U390809.png

Blue Member

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...