Używanie czarów przez zwierzęta 2749 6

O temacie

Autor nocnymocny

Zaczęty 16.03.2014 roku

Wyświetleń 2749

Odpowiedzi 6

nocnymocny

nocnymocny

Użytkownicy
posty65
Propsy6
Profesjabrak
  • Użytkownicy
Witam! Po skopiowaniu skryptów i animacji śniącego do Gothic 2 NK, ten jednak nie "pluje" ognistymi kulami, kiedy bohater zbliży się do niego. Co zrobić, żeby atakował on magią?
Skopiowane skrypty:
Spoiler
prototype MST_DEFAULT_SLEEPER(C_Npc)
{
   name[0] = "Demonikon";
   guild = GIL_DEMON;
   aivar[AIV_MM_REAL_ID] = ID_SLEEPER;
   level = 500;
   attribute[ATR_STRENGTH] = 500;
   attribute[ATR_DEXTERITY] = 500;
   attribute[ATR_HITPOINTS_MAX] = 10000;
   attribute[ATR_HITPOINTS] = 10000;
   attribute[ATR_MANA_MAX] = 500;
   attribute[ATR_MANA] = 500;
   protection[PROT_BLUNT] = 500;
   protection[PROT_EDGE] = 500;
   protection[PROT_POINT] = IMMUNE;
   protection[PROT_FIRE] = IMMUNE;
   protection[PROT_FLY] = 150;
   protection[PROT_MAGIC] = 250;
   damagetype = DAM_MAGIC;
   damage[DAM_INDEX_MAGIC] = 300;
   effect = "SPELLFX_FIREARROW";
   fight_tactic = FAI_SLEEPER;
   senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
   senses_range = PERC_DIST_DRAGON_ACTIVE_MAX;
   aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
   aivar[AIV_MM_FollowInWater] = FALSE;
   aivar[AIV_MagicUser] = MAGIC_ALWAYS;
   aivar[AIV_OriginalFightTactic] = FAI_SLEEPER;
   aivar[AIV_MaxDistToWp] = 650;
   start_aistate = ZS_MM_AllScheduler;
   Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
   aivar[AIV_MM_RestStart] = OnlyRoutine;
};

func void b_setvisuals_sleeper()
{
   Mdl_SetVisual(self,"Sleeper.mds");
   Mdl_SetVisualBody(self,"Sle_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
};


instance SLEEPER(MST_DEFAULT_SLEEPER)
{
   aivar[94] = TRUE;
   b_setvisuals_sleeper();
   Mdl_SetModelScale(self,0.3,0.3,0.3);
   Npc_SetToFistMode(self);
};

W ZS_Monster
Spoiler
func void zs_sleeper()
{
   Npc_SetPercTime(self,0.5);
   b_staminainvent();
   AI_AlignToWP(self);
};

func int zs_sleeper_loop()
{
   var C_Npc outter1;
   var C_Npc outter2;
   var int randomMove;
   b_staminainvent();
   if(Npc_CanSeeNpc(self,hero) && (HEROOBSENT == FALSE))
   if(!Npc_CanSeeNpc(self,hero) && (Npc_GetDistToNpc(self,hero) <= PERC_DIST_DRAGON_ACTIVE_MAX))
   {
      AI_TurnToNPC(self,hero);
   };
   if((Npc_GetStateTime(self) > 3) && Npc_CanSeeNpc(self,hero))
   {
      Snd_Play("DEM_Warn");
      AI_PlayAni(self,"T_HURT");
      Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL",self,hero,2,1000,DAM_FIRE,TRUE);
      if(Npc_GetDistToNpc(self,hero) <= 300)
      {
         Wld_PlayEffect("spellFX_BELIARSRAGE",hero,hero,0,0,0,FALSE);
         B_MagicHurtNpc(self,hero,300);
      };
      Npc_SetStateTime(self,0);
   };
   return FALSE;
};

func void zs_sleeper_end()
{
   Wld_StopEffect("DEMENTOR_FX");
   b_staminainvent();
};


W RTN_Monster:
Spoiler
func void ZS_Sleeper()   // Immobile
{
    PrintDebugNpc      (PD_MST_FRAME, "ZS_Sleeper");
   
   Npc_PercEnable      (self,   PERC_ASSESSPLAYER,   B_Sleeper_AssessSC);
    Npc_SetPercTime      (self,   0.5);

   AI_AlignToWP      (self);                     // SN: Monster am Start am Wegpunkt ausrichten
};
func int ZS_Sleeper_loop()
{
   if (SLF_FIRE == TRUE)
   {
      AI_TurnToNpc(self,hero);
      
      if (Npc_GetStateTime(self) > 5)
      {
         Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL", self, hero, 2, 150, DAM_FIRE, TRUE); //Projetil = TRUE (trifft alle)
         Npc_SetStateTime(self,0);
      };
   };
   return 0;
};
func void ZS_Sleeper_end()
{
    PrintDebugNpc      (PD_MST_FRAME, "ZS_Sleeper_end");
};


func void B_Sleeper_AssessSC ()
{
   if    (Npc_GetDistToNpc(self,hero) < 800)
   &&   !Npc_IsInState(hero,ZS_MagicSleep)
   {
      B_FullStop      (hero);
      AI_StartState   (hero,   ZS_MagicSleep, 0, "");
   };
};
 
https://www.youtube.com/watch?v=5HdbLar5Thg

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Niby jak to ma działać skoro funkcja nie jest wywoływana? W G1 ta funkcja była wywoływana albo przez silnik albo przez trigger.
Ps. To nie jest skrypt używania czaru, tylko wywołanie efektu, gdy bohater zbliży się na odpowiednią odległość.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
@nocnymocny zamien

Cytuj
   aivar[AIV_MaxDistToWp] = 650;
   start_aistate = ZS_MM_AllScheduler;
   Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
   aivar[AIV_MM_RestStart] = OnlyRoutine;
};

na

Cytuj
   aivar[AIV_MaxDistToWp] = 650;
   start_aistate =  zs_sleeper;
   Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
   aivar[AIV_MM_RestStart] = OnlyRoutine;
};

@Splash widac ze w ZS_Monster dodał rutynę więc trigger nie jest potrzebny bo wszystko uruchamia rutyna śniącego.

nocnymocny

nocnymocny

Użytkownicy
posty65
Propsy6
Profesjabrak
  • Użytkownicy
RafalBudzis - dzięki, teraz wszystko działa i już Śniący użwa magii.
Mam jeszcze jedno pytanie - w skrypcie: ZS_MM_SLEEPER, co należy zmienić, aby stwór użył innego zaklęcia?

Spoiler
func void zs_sleeper()
{
   Npc_SetPercTime(self,0.5);

   AI_AlignToWP(self);
};

func int zs_sleeper_loop()
{
   var C_Npc outter1;
   var C_Npc outter2;
   var int randomMove;
   
   if(!Npc_CanSeeNpc(self,hero) && (Npc_GetDistToNpc(self,hero) <= PERC_DIST_DRAGON_ACTIVE_MAX))
   {
      AI_TurnToNPC(self,hero);
   };
   if((Npc_GetStateTime(self) > 3) && Npc_CanSeeNpc(self,hero))
   {
      Snd_Play("DEM_Warn");
      AI_PlayAni(self,"T_HURT");
      Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL",self,hero,2,1000,DAM_FIRE,TRUE);
      if(Npc_GetDistToNpc(self,hero) <= 300)
      {
         Wld_PlayEffect("spellFX_BELIARSRAGE",hero,hero,0,0,0,FALSE);
         B_MagicHurtNpc(self,hero,300);
      };
      Npc_SetStateTime(self,0);
   };
   return FALSE;
};

func void zs_sleeper_end()
{
   Wld_StopEffect("DEMENTOR_FX");

};
 
https://www.youtube.com/watch?v=5HdbLar5Thg

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
W ZS_Monster zmieniasz te linijke

      Wld_PlayEffect("SPELLFX_SLEEPER_FIREBALL",self,hero,2,1000,DAM_FIRE,TRUE);


nocnymocny

nocnymocny

Użytkownicy
posty65
Propsy6
Profesjabrak
  • Użytkownicy
Ok. Dzięki wielkie za pomoc. Avallach - zauważyłem, że jest to właśnie taki efekt, ponieważ ten pocisk zadający obrażenia nie jest tworzony przez Śniąceg, a pojawia się jakby "znikąt".
 
https://www.youtube.com/watch?v=5HdbLar5Thg


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry