Sign in to follow this  
Followers 0
zachrunner3241

[Legion]: Tanking Dummies script

5 posts in this topic

Title: Tanking Dummies script
Bugtracker Link:


Patch Content:

Correction: Adding a script that can be used for all tanking dummies.

/*######
## npc_tanking_training_dummy
######*/

enum eSpells
{
    SPELL_DUMMY_STRIKE = 167381,
    SPELL_UBER_STRIKE = 167385
};
enum eEvents
{
    EVENT_DUMMY_STRIKE = 1,
    EVENT_UBER_STRIKE
};

class npc_tanking_training_dummy : public CreatureScript
{
public:
    npc_tanking_training_dummy() : CreatureScript("npc_tanking_training_dummy") {}
    struct npc_tanking_training_dummyAI : public ScriptedAI
    {
        npc_tanking_training_dummyAI(Creature* creature) : ScriptedAI(creature) {}

        EventMap events;
        uint32 resetTimer;

        void Reset() override
        {
            me->SetFullHealth();
            events.Reset();
            resetTimer = 0;
            me->DeleteThreatList();
            me->AddUnitState(UnitState::UNIT_STATE_ROOT); ///<Disable movements
            me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);        ///< Immune to knock aways like blast wave
            me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true);   ///< Immune to knock back effects like Whiplash
        }

        void EnterEvadeMode(EvadeReason why) override
        {
            if (!_EnterEvadeMode(why))
                return;

            Reset();
        }

        void DamageDealt(Unit* /*victim*/, uint32& /*damage*/, DamageEffectType /*damageType*/) override
        {
            resetTimer = 6000;
        }

        void DamageTaken(Unit* doneBy, uint32& damage) override
        {
            me->AddThreat(doneBy, float(damage));    // just to create threat reference
            if (HealthBelowPct(8))
                damage = 0;
        }

        void EnterCombat(Unit* /*who*/) override
        {
            events.ScheduleEvent(EVENT_DUMMY_STRIKE, 6000);
            events.ScheduleEvent(EVENT_UBER_STRIKE, urand(11000, 12000));
        }

        void UpdateAI(uint32 diff) override
        {
            if (!UpdateVictim())
                return;

            if (!me->HasUnitState(UNIT_STATE_ROOT))
                me->SetControlled(true, UNIT_STATE_ROOT);//disable movements

            if (resetTimer)
            {
                if (resetTimer <= diff)
                    EnterEvadeMode(EVADE_REASON_OTHER);
                else
                    resetTimer -= diff;
            }

            events.Update(diff);
            switch (events.ExecuteEvent())
            {
            case EVENT_DUMMY_STRIKE:
            {
                if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO))
                {
                    DoCast(target, SPELL_DUMMY_STRIKE, false);
                    events.ScheduleEvent(EVENT_DUMMY_STRIKE, 6000);
                }
                break;
            }

            case EVENT_UBER_STRIKE:
            {
                if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO))
                {
                    DoCast(target, SPELL_UBER_STRIKE, false);
                    events.ScheduleEvent(EVENT_UBER_STRIKE, urand(11000, 12000));
                }
                break;
            }

            default:
                break;
            }
            DoMeleeAttackIfReady();
        }
    };

    CreatureAI* GetAI(Creature* creature) const override
    {
        return new npc_tanking_training_dummyAI(creature);
    }
};


void AddSC_npcs_special()
{
	new npc_tanking_training_dummy();
}

SQL query to add the script to Warrior Class Hall tanking dummies:

 

UPDATE `creature_template` SET `ScriptName`='npc_tanking_training_dummy', `unit_flags` = 0, `unit_flags2` = 0, `unit_flags3` = 0 WHERE  
(`entry`=114559 or entry = 114559);

I had to remove the current flags because flags like stunned will prevent the dummy from attacking the player. 

Share this post


Link to post
Share on other sites

Correction to the SQL query:

UPDATE `creature_template` SET `ScriptName`='npc_tanking_training_dummy', `unit_flags` = 0, `unit_flags2` = 0, `unit_flags3` = 0 WHERE  
(`entry`=114559 or entry = 114558);

 

Share this post


Link to post
Share on other sites
On 31.05.2018 at 04:42, zachrunner3241 said:

Название: Танкование чайников сценарий
Багтрекер ссылке


Patch Content

 

Исправление: Добавление сценария, который может быть использован для всех манекенов tanking.

 


/*######
## npc_tanking_training_dummy
######*/

перечисление eSpells
{SPELL_DUMMY_STRIKE = 167381,SPELL_UBER_STRIKE = 167385
};
перечисление eEvents
{EVENT_DUMMY_STRIKE = 1,EVENT_UBER_STRIKE
};

класс npc_tanking_training_dummy : общественные CreatureScript
{
общественности:npc_tanking_training_dummy() : CreatureScript("npc_tanking_training_dummy") {}
    структура npc_tanking_training_dummyAI : общественные ScriptedAI
    {npc_tanking_training_dummyAI(тварь* тварь) : ScriptedAI(существо) {}

        событий eventmap события;
        Тип uint32 resetTimer;

        пустота сбросить() переопределить
 {меня->SetFullHealth();событий.Сброс();
 resetTimer = 0;меня->DeleteThreatList();меня->AddUnitState(UnitState::UNIT_STATE_ROOT); ///<Disable movements<wbr="">
 меня->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK,истина );///< Иммунная стучать всегда, как взрывная волна        
 меня->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST,истина );///< Иммунитет к отбрасыванию эффекты, такие как Хлыстовой   }
        недействительным

        EnterEvadeMode (EvadeReason почему) переопределить
 {если
            (! _EnterEvadeMode(почему))возвращение
                ;возврат

            ();}
        недействительными

        DamageDealt (блока*/*потерпевшего*/ ,Тип uint32 &/*урон*/ ,DamageEffectType /*damageType*/ ) переопред{
 resetTimer = 6000;
        }

        недействительными DamageTaken(блок* путем, Тип uint32& повреждения) переопределить
 {меня->AddThreat(путем, поплавок(ущерба));    // просто для создания опасная ссылка
            , если (HealthBelowPct(8))урон = 0;
        }

        недействительными EnterCombat(блока* /*кому*/) переопределить
 {событий.ScheduleEvent(EVENT_DUMMY_STRIKE, 6000);событий.ScheduleEvent(EVENT_UBER_STRIKE, urand(11000, 12000));
        }

        пустота UpdateAI(Тип uint32 дифф) переопределить
 {
            если (!UpdateVictim())
                вернуться;

            если (!меня->HasUnitState(UNIT_STATE_ROOT))меня->SetControlled(правда, UNIT_STATE_ROOT);//отключение движения

            при (resetTimer)
            {
                если (resetTimer<= дифф)
                    EnterEvadeMode(EVADE_REASON_OTHER);
                ещеresetTimer-= дифф;
            }событий.Обновление(дифф);
            выключатель (события.ExecuteEvent())
            {
            дело EVENT_DUMMY_STRIKE:
            {
                если (блок* цель= SelectTarget(SELECT_TARGET_TOPAGGRO))
                {
                    DoCast(целевой, SPELL_DUMMY_STRIKE, ложные);событий.ScheduleEvent(EVENT_DUMMY_STRIKE, 6000);
                }
                перерыв;
            }

            случае EVENT_UBER_STRIKE:
            {
                если (блок* цель= SelectTarget(SELECT_TARGET_TOPAGGRO))
                {
                    DoCast(целевой, SPELL_UBER_STRIKE, ложь);событий.ScheduleEvent(EVENT_UBER_STRIKE, уранд(11000, 12000));
                }
                перерыв;
            }

            по умолчанию:
                перерыв;
            }
            DoMeleeAttackIfReady();
        }
    };

    CreatureAI* минтай(тварь* тварь) константный переопределить{
        возвращение новый npc_tanking_training_dummyAI(существо);
    }
};


void и AddSC_npcs_special()
{
	новый npc_tanking_training_dummy();
}

SQL-запрос для добавления скрипта к классу Warrior Hall tanking dummies

 


Обновление`creature_template' установить`Имя_скрипта`='npc_tanking_training_dummy', 'unit_flags` = 0, 'unit_flags2` = 0, 'unit_flags3` = 0 , где(`запись`=114559 или запись= 114559);

Я должен был удалить текущие флаги, потому что флаги, такие как stunned, не позволят манекену атаковать игрока.

 

Non-работать-испытано на Троице

Share this post


Link to post
Share on other sites
On 8/21/2018 at 8:15 PM, Santaluchiya said:

Non-работать-испытано на Троице

Depends on the SQL query you used. As I tweaked it to work with Firestorm database not trinity's. 

Share this post


Link to post
Share on other sites

n the core gets error data from the firestorm and Trinity are almost identical

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0