Показать сообщение отдельно
Старый 19.07.2014, 17:48   #1
Felzewell
Гость
 
Сообщений: n/a
По умолчанию Вопрос-ответ(Нужная тема)

Добрый день уважаемые. Хотелось бы узнать у Вас о парочке важных для меня вещей. Описываю чтоб меня поняли правильно: Скриптую (а точнее пробую) Тюрьму Штормграда(Не смейтесь сильно)) я новичок, начинать с чего то надо...) В общем много чего заскриптовал удачно, но столкнулся с парочкой проблем:
1 босс. Рэндольф Молох:
-Можно ли через:
Код:
 void ReceiveEmote
заставить моба после аггро сделать поклон ? Если да, то если не составит труда дайте пример или укажите где его искать.
-Когда он использует 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. Не могли бы вы подсказать или указать примером как реализовать движение моба из точки в точку(пример та же самая тюрьма штормграда, НПС из одной точки появляеться во второй, а уже из второй идет/бежит в третью)Заранее благодарен за любую помощь.Спасибо за внимание.
  Ответить с цитированием