rendered paste body#define stomp 6432
#define hammer_buff 6436
class MrSmiteAI : public CreatureAIScript
{
public:
ADD_CREATURE_FACTORY_FUNCTION(MrSmiteAI);
MrSmiteAI(Creature * pCreature) : CreatureAIScript(pCreature)
{
smite_stomp = dbcSpell.LookupEntry(stomp);
smite_buff = dbcSpell.LookupEntry(hammer_buff);
}
void OnCombatStart(Unit * mTarget)
{
phase = 0;
move = 0;
looting = 0;
position = 0;
}
void OnDamageTaken(Unit * mAttacker, float fAmount)
{
if(_unit->GetHealthPct() <= 66 && phase == 0)
{
_unit->GetMapMgr()->GetInterface()->SpawnCreature(1, 2.69086f, -781.633f, 0.0f, 0, false, false, 0, 0);
waypoint = _unit->GetMapMgr()->GetInterface()->GetCreatureNearestCoords(2.69086f, -781.633f, 0.0f, 1);
waypoint->GetAIInterface()->disable_melee = true;
waypoint->m_canMove = false;
Playr = _unit->GetAIInterface()->GetNextTarget();
_unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "You landlubbers are tougher than I thought. I'll have to improvise!");
_unit->PlaySoundToSet(5778);
_unit->Emote(EMOTE_ONESHOT_STOMP);
_unit->CastSpell(Playr, smite_stomp, true);
phase++;
move = 1;
position = 1;
RegisterAIUpdateEvent(800);
}
else if(_unit->GetHealthPct() <= 33 && phase == 1)
{
Playr = _unit->GetAIInterface()->GetNextTarget();
_unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "D'ah! Now you're making me angry!");
_unit->PlaySoundToSet(5779);
_unit->Emote(EMOTE_ONESHOT_STOMP);
_unit->CastSpell(Playr, smite_stomp, true);
phase++;
move = 1;
position = 1;
RegisterAIUpdateEvent(800);
}
}
void OnCombatStop(Unit * mTarget)
{
_unit->GetAIInterface()->setCurrentAgent(AGENT_NULL);
_unit->GetAIInterface()->SetAIState(STATE_IDLE);
RemoveAIUpdateEvent();
phase = 0;
looting = 0;
move = 0;
position = 0;
weapons();
}
void OnDied(Unit * mKiller)
{
phase = 0;
looting = 0;
move = 0;
position = 0;
RemoveAIUpdateEvent();
}
void AIUpdate()
{
if(looting == 1)
{
_unit->GetAIInterface()->SetNextTarget(_unit->GetAIInterface()->GetMostHated());
looting = 0;
weapons();
_unit->Emote(EMOTE_ONESHOT_NONE); // maybe EMOTE_STATE_STAND if its crashing
_unit->GetAIInterface()->SetAIState(STATE_ATTACKING);
}
if(_unit->GetPositionX() == 1.100060f && _unit->GetPositionY() == -780.026367f && _unit->GetPositionZ() == 9.811194f && position == 1)
{
_unit->Emote(EMOTE_ONESHOT_KNEEL);
looting = 1;
position = 0;
ModifyAIUpdateEvent(3000);
}
if(move == 1)
{
move = 0;
movetochest();
}
}
void movetochest()
{
_unit->GetAIInterface()->SetNextTarget(waypoint);
_unit->GetAIInterface()->SetAIState(STATE_SCRIPTMOVE);
_unit->GetAIInterface()->MoveTo(1.100060f, -780.026367f, 9.811194f, 5.452218f);
}
void weapons()
{
switch(phase)
{
case 0:
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 7420);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, 33490690);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_01, 768);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01, 0);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_02, 0);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_03, 0);
_unit->SetUInt32Value(UNIT_FIELD_BASEATTACKTIME, 1483); // 1483 is taken from NCDB creature_proto
break;
case 1:
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01, 7419);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_02, 33490690);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_03, 781);
_unit->SetUInt32Value(UNIT_FIELD_BASEATTACKTIME, _unit->GetUInt32Value(UNIT_FIELD_BASEATTACKTIME) / 2);
break;
case 2:
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 19610);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, 33488898);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_01, 0);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY_01, 0);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_02, 0);
_unit->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO_03, 0);
_unit->SetUInt32Value(UNIT_FIELD_BYTES_2, 1);
_unit->SetUInt32Value(UNIT_FIELD_BASEATTACKTIME, _unit->GetUInt32Value(UNIT_FIELD_BASEATTACKTIME) * 2);
_unit->CastSpell(_unit, smite_buff, true);
}
RemoveAIUpdateEvent();
}
protected:
SpellEntry * smite_stomp;
SpellEntry * smite_buff;
Unit * Playr;
Unit * waypoint;
int phase , move, looting, position;
};