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, "");
   };
};