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