void DamageTaken(Unit* /*attacker*/, uint32 & damage) { if (isInMountedGauntlet()) { npc_mounted_championAI::DamageTaken(NULL, damage); return; } if(defeated) { damage = 0; return; } // Prevent damage from finishing hit and mark creature as defeated if(damage >= me->GetHealth()) { damage = 0; defeated = true; me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); me->GetMotionMaster()->MovePoint(1, me->GetHomePosition()); me->SetTarget(0); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); BindPlayersToInstance(me); } }
void SetData(uint32 type, uint32 data) { switch (type) { case DATA_MOVEMENT_DONE: movementDone = data; if (movementDone == 3) { if (Creature* announcer = instance->GetCreature(announcerGUID)) announcer->AI()->SetData(DATA_IN_POSITION, 0); } break; case BOSS_GRAND_CHAMPIONS: m_auiEncounter[0] = data; if (data == IN_PROGRESS) { for (std::list<uint64>::const_iterator itr = vehicleList.begin(); itr != vehicleList.end(); ++itr) if (Creature* summon = instance->GetCreature(*itr)) summon->RemoveFromWorld(); } else if (data == DONE) { ++grandChampionsDeaths; if (grandChampionsDeaths >= 3) { for (uint8 i = 0; i < 3; ++i) if (Creature* GrandChampion = instance->GetCreature(GetData64(DATA_GRAND_CHAMPION_1 + i))) GrandChampion->AI()->SetData(11, 0); if (Creature* announcer = instance->GetCreature(announcerGUID)) { m_auiEncounter[0] = data; announcer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); announcer->SummonGameObject(instance->IsHeroic() ? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); BindPlayersToInstance(announcer); } } } break; case DATA_ARGENT_SOLDIER_DEFEATED: argentSoldierDeaths = data; if (argentSoldierDeaths == 9) { if (Creature* boss = instance->GetCreature(argentChampionGUID)) { boss->GetMotionMaster()->MovePoint(0, 746.88f, 618.74f, 411.06f); boss->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE); boss->SetReactState(REACT_AGGRESSIVE); boss->setFaction(16); } } break; case BOSS_ARGENT_CHALLENGE_E: m_auiEncounter[1] = data; if (data == IN_PROGRESS) { for (std::list<uint64>::const_iterator itr = vehicleList.begin(); itr != vehicleList.end(); ++itr) if (Creature* summon = instance->GetCreature(*itr)) summon->RemoveFromWorld(); } else if (data == DONE) { if (Creature* announcer = instance->GetCreature(announcerGUID)) { announcer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); announcer->SummonGameObject(instance->IsHeroic() ? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); BindPlayersToInstance(announcer); } } break; case BOSS_ARGENT_CHALLENGE_P: m_auiEncounter[2] = data; if (data == IN_PROGRESS) { for (std::list<uint64>::const_iterator itr = vehicleList.begin(); itr != vehicleList.end(); ++itr) if (Creature* summon = instance->GetCreature(*itr)) summon->RemoveFromWorld(); } else if (data == DONE) { if (Creature* announcer = instance->GetCreature(announcerGUID)) { announcer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); announcer->SummonGameObject(instance->IsHeroic() ? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); BindPlayersToInstance(announcer); } } break; case BOSS_BLACK_KNIGHT: m_auiEncounter[3] = data; break; } if (data == DONE) SaveToDB(); }