bool ChatHandler::HandleDeMorphCommand(const char* args, WorldSession *m_session) { Unit *unit = getSelectedUnit(m_session); if(!unit) return false; unit->DeMorph(); return true; }
//demorph player or unit bool ChatHandler::HandleDeMorphCommand(const char* /*args*/) { Unit* target = getSelectedUnit(); if (!target) target = m_session->GetPlayer(); // check online security else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) return false; target->DeMorph(); return true; }
//demorph player or unit static bool HandleDeMorphCommand(ChatHandler* handler, const char* /*args*/) { Unit* target = handler->getSelectedUnit(); if (!target) target = handler->GetSession()->GetPlayer(); // check online security else if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), 0)) return false; target->DeMorph(); return true; }
//demorph player or unit bool ChatHandler::HandleDeMorphCommand(const char* /*args*/) { Unit *target = getSelectedUnit(); if (!target) target = m_session->GetPlayer(); // check online security if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) return false; if (target->GetTypeId() == TYPEID_PLAYER) if (target->ToPlayer()->NoModify() && m_session->GetPlayer() != target && !m_session->GetPlayer()->IsAdmin()) { PSendSysMessage("This player has disabled gm commands being used on them."); return true; } target->DeMorph(); return true; }
void UpdateAI(uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; switch (Phase) { case SKELETAL: if (uiCurseOfLifeTimer < diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_CURSE_OF_LIFE); uiCurseOfLifeTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS); } else uiCurseOfLifeTimer -= diff; if (uiShadowVolleyTimer < diff) { DoCastVictim(SPELL_SHADOW_VOLLEY); uiShadowVolleyTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS); } else uiShadowVolleyTimer -= diff; if (uiRainOfFireTimer < diff) { DoCastAOE(SPELL_RAIN_OF_FIRE); uiRainOfFireTimer = urand(14*IN_MILLISECONDS, 18*IN_MILLISECONDS); } else uiRainOfFireTimer -= diff; if (uiPhaseTimer < diff) { DoCast(SPELL_DECAY_FLESH); Phase = GOING_FLESH; uiPhaseTimer = 6*IN_MILLISECONDS; } else uiPhaseTimer -= diff; DoMeleeAttackIfReady(); break; case GOING_FLESH: if (uiPhaseTimer < diff) { Talk(SAY_FLESH); me->SetDisplayId(MODEL_FLESH); std::list<Unit*> playerList; SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true); for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) { Unit* temp = (*itr); me->AddAura(SPELL_GIFT_OF_THARON_JA, temp); temp->SetDisplayId(MODEL_SKELETON); } uiPhaseTimer = 20*IN_MILLISECONDS; uiLightningBreathTimer = urand(3*IN_MILLISECONDS, 4*IN_MILLISECONDS); uiEyeBeamTimer = urand(4*IN_MILLISECONDS, 8*IN_MILLISECONDS); uiPoisonCloudTimer = urand(6*IN_MILLISECONDS, 7*IN_MILLISECONDS); Phase = FLESH; } else uiPhaseTimer -= diff; break; case FLESH: if (uiLightningBreathTimer < diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_LIGHTNING_BREATH); uiLightningBreathTimer = urand(6*IN_MILLISECONDS, 7*IN_MILLISECONDS); } else uiLightningBreathTimer -= diff; if (uiEyeBeamTimer < diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_EYE_BEAM); uiEyeBeamTimer = urand(4*IN_MILLISECONDS, 6*IN_MILLISECONDS); } else uiEyeBeamTimer -= diff; if (uiPoisonCloudTimer < diff) { DoCastAOE(SPELL_POISON_CLOUD); uiPoisonCloudTimer = urand(10*IN_MILLISECONDS, 12*IN_MILLISECONDS); } else uiPoisonCloudTimer -= diff; if (uiPhaseTimer < diff) { DoCast(SPELL_RETURN_FLESH); Phase = GOING_SKELETAL; uiPhaseTimer = 6*IN_MILLISECONDS; } else uiPhaseTimer -= diff; DoMeleeAttackIfReady(); break; case GOING_SKELETAL: if (uiPhaseTimer < diff) { Talk(SAY_SKELETON); me->DeMorph(); Phase = SKELETAL; uiPhaseTimer = 20*IN_MILLISECONDS; uiCurseOfLifeTimer = 1*IN_MILLISECONDS; uiRainOfFireTimer = urand(14*IN_MILLISECONDS, 18*IN_MILLISECONDS); uiShadowVolleyTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS); std::list<Unit*> playerList; SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true); for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) { Unit* temp = (*itr); if (temp->HasAura(SPELL_GIFT_OF_THARON_JA)) temp->RemoveAura(SPELL_GIFT_OF_THARON_JA); temp->DeMorph(); } } else uiPhaseTimer -= diff; break; } }
void UpdateAI(const uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; switch (Phase) { case SKELETAL: if (uiCurseOfLifeTimer < diff) { if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, SPELL_CURSE_OF_LIFE); uiCurseOfLifeTimer = urand(10*IN_MILLISECONDS,15*IN_MILLISECONDS); } else uiCurseOfLifeTimer -= diff; if (uiShadowVolleyTimer < diff) { DoCastVictim(SPELL_SHADOW_VOLLEY); uiShadowVolleyTimer = urand(8*IN_MILLISECONDS,10*IN_MILLISECONDS); } else uiShadowVolleyTimer -= diff; if (uiRainOfFireTimer < diff) { DoCastAOE(SPELL_RAIN_OF_FIRE); uiRainOfFireTimer = urand(14*IN_MILLISECONDS,18*IN_MILLISECONDS); } else uiRainOfFireTimer -= diff; if (uiPhaseTimer < diff) { DoCast(SPELL_DECAY_FLESH); Phase = GOING_FLESH; uiPhaseTimer = 6*IN_MILLISECONDS; } else uiPhaseTimer -= diff; DoMeleeAttackIfReady(); break; case GOING_FLESH: if (uiPhaseTimer < diff) { DoScriptText(RAND(SAY_FLESH_1,SAY_FLESH_2),me); me->SetDisplayId(MODEL_FLESH); std::list<HostileReference*>& threatlist = me->getThreatManager().getThreatList(); for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { Unit *pTemp = Unit::GetUnit((*me),(*itr)->getUnitGuid()); if (pTemp && pTemp->GetTypeId() == TYPEID_PLAYER) { me->AddAura(SPELL_GIFT_OF_THARON_JA,pTemp); pTemp->SetDisplayId(MODEL_SKELETON); } } uiPhaseTimer = 20*IN_MILLISECONDS; uiLightningBreathTimer = urand(3*IN_MILLISECONDS,4*IN_MILLISECONDS); uiEyeBeamTimer = urand(4*IN_MILLISECONDS,8*IN_MILLISECONDS); uiPoisonCloudTimer = urand(6*IN_MILLISECONDS,7*IN_MILLISECONDS); Phase = FLESH; } else uiPhaseTimer -= diff; break; case FLESH: if (uiLightningBreathTimer < diff) { if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, SPELL_LIGHTNING_BREATH); uiLightningBreathTimer = urand(6*IN_MILLISECONDS,7*IN_MILLISECONDS); } else uiLightningBreathTimer -= diff; if (uiEyeBeamTimer < diff) { if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, SPELL_EYE_BEAM); uiEyeBeamTimer = urand(4*IN_MILLISECONDS,6*IN_MILLISECONDS); } else uiEyeBeamTimer -= diff; if (uiPoisonCloudTimer < diff) { DoCastAOE(SPELL_POISON_CLOUD); uiPoisonCloudTimer = urand(10*IN_MILLISECONDS,12*IN_MILLISECONDS); } else uiPoisonCloudTimer -= diff; if (uiPhaseTimer < diff) { DoCast(SPELL_RETURN_FLESH); Phase = GOING_SKELETAL; uiPhaseTimer = 6*IN_MILLISECONDS; } else uiPhaseTimer -= diff; DoMeleeAttackIfReady(); break; case GOING_SKELETAL: if (uiPhaseTimer < diff) { DoScriptText(RAND(SAY_SKELETON_1,SAY_SKELETON_2), me); me->DeMorph(); Phase = SKELETAL; uiPhaseTimer = 20*IN_MILLISECONDS; uiCurseOfLifeTimer = 1*IN_MILLISECONDS; uiRainOfFireTimer = urand(14*IN_MILLISECONDS,18*IN_MILLISECONDS); uiShadowVolleyTimer = urand(8*IN_MILLISECONDS,10*IN_MILLISECONDS); std::list<HostileReference*>& threatlist = me->getThreatManager().getThreatList(); for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { Unit *pTemp = Unit::GetUnit((*me),(*itr)->getUnitGuid()); if (pTemp && pTemp->GetTypeId() == TYPEID_PLAYER) { if (pTemp->HasAura(SPELL_GIFT_OF_THARON_JA)) pTemp->RemoveAura(SPELL_GIFT_OF_THARON_JA); pTemp->DeMorph(); } } } else uiPhaseTimer -= diff; break; } }