Добрый день уважаемые. Хотелось бы узнать у Вас о парочке важных для меня вещей. Описываю чтоб меня поняли правильно: Скриптую (а точнее пробую) Тюрьму Штормграда(Не смейтесь сильно)) я новичок, начинать с чего то надо...) В общем много чего заскриптовал удачно, но столкнулся с парочкой проблем:
1 босс. Рэндольф Молох:
-Можно ли через:
заставить моба после аггро сделать поклон ? Если да, то если не составит труда дайте пример или укажите где его искать.
-Когда он использует
http://ru.wowhead.com/spell=55964 на оффе происходит визуальный эффект на подобие маленького вихря, но у меня он просто исчезает и все... (добавлял способность себе: эффект вихря присутствует, у моба по прежнему нету(
-При использовании того же самого спелла
http://ru.wowhead.com/spell=55964, босс после первого исчезновения(75% хп) появляется со 100% и снова произносит фразу аггро и нападает, при втором ванише(35%) он появляеться с 75% хп и опять кидает фразу аггро, и только после этого его можно добить оканчательно... в общем кидаю код. Буду очень благодарен за любую помощь!
Код:
//Created by BeingHuman (Felzewell)
/* ScriptData
SDName: Boss_Randolph
SD%Complete: 70%
SDComment: Исправить скилл Vanish решить проблему с его эффектом, добавить как нибудь поклон в начале...
SDCategory: Stockade
EndScriptData */
#include "precompiled.h"
#include "stockade.h"
enum
{
SAY_AGGRO = -1800000,
SAY_DEATH = -1800001,
SAY_VANISH = -1800002,
SPELL_WILDLY_STABBING = 86726,
SPELL_SWEEP = 86729,
SPELL_VANISH = 55964,
};
struct MANGOS_DLL_DECL boss_randolphAI : public ScriptedAI
{
boss_randolphAI(Creature* pCreature) : ScriptedAI(pCreature)
{
m_pInstance = (instance_stockade*)pCreature->GetInstanceData();
Reset();
}
instance_stockade* m_pInstance;
uint32 m_uiWildlyStabbingTimer;
uint32 m_uiSweepTimer;
uint32 m_uiVanishTimer;
bool m_bFirstVanish;
bool m_bSecondVanish;
void Reset() override
{
m_uiWildlyStabbingTimer = 3000;
m_uiSweepTimer = 6000;
m_uiVanishTimer = 0;
m_bFirstVanish = false;
m_bSecondVanish = false;
}
void Aggro(Unit* /*pWho*/) override
{
DoScriptText(SAY_AGGRO, m_creature);
if (m_pInstance)
m_pInstance->SetData(TYPE_RANDOLPH, IN_PROGRESS);
}
void JustDied(Unit* /*pKiller*/) override
{
DoScriptText(SAY_DEATH, m_creature);
if (m_pInstance)
m_pInstance->SetData(TYPE_RANDOLPH, DONE);
}
void JustReachedHome() override
{
if (m_pInstance)
m_pInstance->SetData(TYPE_RANDOLPH, FAIL);
}
void AttackedBy(Unit* pAttacker) override
{
if (m_creature->getVictim())
return;
AttackStart(pAttacker);
}
void AttackStart(Unit* pWho) override
{
if (m_creature->Attack(pWho, true))
{
m_creature->AddThreat(pWho);
m_creature->SetInCombatWith(pWho);
pWho->SetInCombatWith(m_creature);
m_creature->GetMotionMaster()->MoveChase(pWho);
}
}
void MovementInform(uint32 uiMotionType, uint32 /*uiPointId*/) override
{
if (uiMotionType != POINT_MOTION_TYPE)
return;
m_creature->SetSheath(SHEATH_STATE_UNARMED);
m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
}
void UpdateAI(const uint32 uiDiff) override
{
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
return;
//Wildly Stabbing
if (m_uiWildlyStabbingTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_WILDLY_STABBING) == CAST_OK)
m_uiWildlyStabbingTimer = urand(20000, 25000);
}
else
m_uiWildlyStabbingTimer -= uiDiff;
//Sweep
if (m_uiSweepTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_SWEEP) == CAST_OK)
m_uiSweepTimer = urand(10000, 12000);
}
else
m_uiSweepTimer -= uiDiff;
//Vanish
if (!m_bFirstVanish && m_creature->GetHealthPercent() <= 65.0f)
{
if (DoCastSpellIfCan(m_creature, SPELL_VANISH) == CAST_OK)
{
DoScriptText(SAY_VANISH, m_creature);
m_bFirstVanish = true;
m_uiVanishTimer = 5000;
}
}
else
m_uiVanishTimer -= uiDiff;
if (!m_bSecondVanish && m_bFirstVanish && m_creature->GetHealthPercent() <= 35.0f)
{
if (DoCastSpellIfCan(m_creature, SPELL_VANISH) == CAST_OK)
{
DoScriptText(SAY_VANISH, m_creature);
m_bSecondVanish = true;
m_uiVanishTimer = 5000;
}
}
else
m_uiVanishTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_randolph(Creature* pCreature)
{
return new boss_randolphAI(pCreature);
}
void AddSC_boss_randolph()
{
Script* pNewScript;
pNewScript = new Script;
pNewScript->Name = "boss_randolph";
pNewScript->GetAI = &GetAI_boss_randolph;
pNewScript->RegisterSelf();
}
2. Не могли бы вы подсказать или указать примером как реализовать движение моба из точки в точку(пример та же самая тюрьма штормграда, НПС из одной точки появляеться во второй, а уже из второй идет/бежит в третью)Заранее благодарен за любую помощь.Спасибо за внимание.