diff options
| author | Kudlaty <none@none> | 2009-06-17 03:35:23 +0200 |
|---|---|---|
| committer | Kudlaty <none@none> | 2009-06-17 03:35:23 +0200 |
| commit | 3c502513b00c7f3cb85207c61a01051425cbb9a9 (patch) | |
| tree | 1dc1eff123c960ad2ec23b0bf4f0b963f2583090 /src | |
| parent | 5547366ce3600189ff560521cbd2ed553d481a63 (diff) | |
Merge [SD2]
r1017 Remove no longer needed functions used in instance scripts. Some additional code cleanup.
r1018 Remove redundant calls to InterruptNonMeeleSpells() and use true in CombatStop() calls instead where needed.
r1019 Fixed: use correct isInFlight check for item 34475 - Skipp already implemented
r1020 Restore work of three scripts after recent changes in AI about AttackedBy(), also some additional code cleanup.
--HG--
branch : trunk
Diffstat (limited to 'src')
19 files changed, 164 insertions, 284 deletions
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp index d464a369826..681cf05e272 100644 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp +++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp @@ -115,7 +115,7 @@ void npc_escortAI::UpdateAI(const uint32 diff) m_creature->setDeathState(JUST_DIED); m_creature->SetHealth(0); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->DeleteThreatList(); m_creature->Respawn(); m_creature->GetMotionMaster()->Clear(true); @@ -161,7 +161,7 @@ void npc_escortAI::UpdateAI(const uint32 diff) m_creature->setDeathState(JUST_DIED); m_creature->SetHealth(0); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->DeleteThreatList(); m_creature->Respawn(); m_creature->GetMotionMaster()->Clear(true); diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp index cc63d253d1b..9747159fcaf 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp @@ -92,23 +92,6 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance } } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - - debug_log("TSCR: Instance Shadow Labyrinth: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - void SetData(uint32 type, uint32 data) { switch(type) diff --git a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp index 2048961fc08..9cfbcb7f4ee 100644 --- a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp @@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL npc_draenei_survivorAI : public ScriptedAI m_creature->GetMotionMaster()->MoveIdle(); m_creature->setDeathState(JUST_DIED); m_creature->SetHealth(0); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->DeleteThreatList(); m_creature->RemoveCorpse(); }else RunAwayTimer -= diff; @@ -593,7 +593,7 @@ struct TRINITY_DLL_DECL npc_nestlewood_owlkinAI : public ScriptedAI m_creature->SetVisibility(VISIBILITY_OFF); m_creature->setDeathState(JUST_DIED); m_creature->SetHealth(0); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->DeleteThreatList(); m_creature->RemoveCorpse(); }else DespawnTimer -= diff; diff --git a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp index 30a9db9f29c..f1dbc48ee79 100644 --- a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp +++ b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp @@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI { m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->StopMoving(); m_creature->GetMotionMaster()->MoveIdle(); diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp index 4c836c2036a..a045218f00a 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp @@ -1037,10 +1037,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI // Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit void EnterEvadeMode() { - m_creature->InterruptNonMeleeSpells(true); m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); } void EnterCombat(Unit *who) {} diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp index 1b375f0be0f..78903b14b2a 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp @@ -257,17 +257,12 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI { Channeler->RemoveCorpse(); Channeler->Respawn(); - Channeler->InterruptNonMeleeSpells(true); - Channeler->RemoveAurasDueToSpell(SPELL_SHADE_SOUL_CHANNEL); } - if (Channeler->isAlive()) - { - Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL, true); - Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true); - Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - GridSearcherSucceeded = true; - } + Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL, true); + Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true); + Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + GridSearcherSucceeded = true; } } }else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly"); diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp index d84bd96791d..750d611b58e 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp @@ -114,23 +114,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance Encounter[i] = NOT_STARTED; } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - - debug_log("TSCR: Instance Blackrock Depths: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - void OnCreatureCreate(Creature *creature, bool add) { switch(creature->GetEntry()) @@ -166,14 +149,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance void SetData(uint32 type, uint32 data) { - Player *player = GetPlayerInMap(); - - if (!player) - { - debug_log("TSCR: Instance Blackrock Depths: SetData (Type: %u Data %u) cannot find any player.", type, data); - return; - } - debug_log("TSCR: Instance Blackrock Depths: SetData update (Type: %u Data %u)", type, data); switch(type) diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp index e988782ad60..58962c0c469 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp @@ -95,23 +95,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance NextPortal_Timer = 0; } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - - debug_log("TSCR: Instance Black Portal: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - void UpdateBMWorldState(uint32 id, uint32 state) { Map::PlayerList const& players = instance->GetPlayers(); @@ -158,7 +141,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance //what other conditions to check? bool CanProgressEvent() { - if (!GetPlayerInMap()) + if (instance->GetPlayers().isEmpty()) return false; return true; @@ -183,14 +166,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance void SetData(uint32 type, uint32 data) { - Player *player = GetPlayerInMap(); - - if (!player) - { - debug_log("TSCR: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data); - return; - } - switch(type) { case TYPE_MEDIVH: @@ -201,11 +176,11 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance if (!mShieldPercent) { - if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) + if (Creature* pMedivh = instance->GetCreature(MedivhGUID)) { - if (medivh->isAlive()) + if (pMedivh->isAlive()) { - medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + pMedivh->DealDamage(pMedivh, pMedivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); Encounter[0] = FAIL; Encounter[1] = NOT_STARTED; } @@ -225,11 +200,22 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance if (data == DONE) { //this may be completed further out in the post-event - if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) + debug_log("TSCR: Instance Dark Portal: Event completed."); + Map::PlayerList const& players = instance->GetPlayers(); + + if (!players.isEmpty()) { - debug_log("TSCR: Instance Dark Portal: Event completed."); - player->GroupEventHappens(QUEST_OPENING_PORTAL,medivh); - player->GroupEventHappens(QUEST_MASTER_TOUCH,medivh); + for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + if (Player* pPlayer = itr->getSource()) + { + if (pPlayer->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); + + if (pPlayer->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); + } + } } } @@ -272,24 +258,25 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance return 0; } - Unit* SummonedPortalBoss(Unit* source) + Creature* SummonedPortalBoss(Creature* pSource) { uint32 entry = RiftWaves[GetRiftWaveId()].PortalBoss; + if (entry == RIFT_BOSS) entry = RandRiftBoss(); float x,y,z; - source->GetRandomPoint(source->GetPositionX(),source->GetPositionY(),source->GetPositionZ(),10.0f,x,y,z); + pSource->GetRandomPoint(pSource->GetPositionX(),pSource->GetPositionY(),pSource->GetPositionZ(),10.0f,x,y,z); //normalize Z-level if we can, if rift is not at ground level. z = std::max(instance->GetHeight(x, y, MAX_HEIGHT), instance->GetWaterLevel(x, y)); debug_log("TSCR: Instance Dark Portal: Summoning rift boss entry %u.",entry); - Unit *Summon = source->SummonCreature(entry,x,y,z,source->GetOrientation(), + Creature* pSummoned = pSource->SummonCreature(entry,x,y,z,pSource->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); - if (Summon) - return Summon; + if (pSummoned) + return pSummoned; debug_log("TSCR: Instance Dark Portal: what just happened there? No boss, no loot, no fun..."); return NULL; @@ -297,11 +284,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance void DoSpawnPortal() { - Player *player = GetPlayerInMap(); - if (!player) - return; - - if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) + if (Creature* pMedivh = instance->GetCreature(MedivhGUID)) { int tmp = rand()%(4-1); @@ -311,26 +294,26 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance CurrentRiftId = tmp; - Unit *temp = medivh->SummonCreature(C_TIME_RIFT, + Creature* pTemp = pMedivh->SummonCreature(C_TIME_RIFT, PortalLocation[tmp][0],PortalLocation[tmp][1],PortalLocation[tmp][2],PortalLocation[tmp][3], TEMPSUMMON_CORPSE_DESPAWN,0); - if (temp) + if (pTemp) { - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - if (Unit* boss = SummonedPortalBoss(temp)) + if (Creature* pBoss = SummonedPortalBoss(pTemp)) { - if (boss->GetEntry() == C_AEONUS) + if (pBoss->GetEntry() == C_AEONUS) { - boss->AddThreat(medivh,0.0f); + pBoss->AddThreat(pMedivh,0.0f); } else { - boss->AddThreat(temp,0.0f); - temp->CastSpell(boss,SPELL_RIFT_CHANNEL,false); + pBoss->AddThreat(pTemp,0.0f); + pTemp->CastSpell(pBoss,SPELL_RIFT_CHANNEL,false); } } } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp index 92ca93dcc2c..487347c1c18 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp @@ -409,11 +409,10 @@ void hyjalAI::Reset() void hyjalAI::EnterEvadeMode() { - m_creature->InterruptNonMeleeSpells(true); if(m_creature->GetEntry() != JAINA) m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->LoadCreaturesAddon(); if(m_creature->isAlive()) diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp index 9f0cb4a7d4c..a35551481fa 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp @@ -88,23 +88,6 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance return false; } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - - debug_log("TSCR: Instance Steamvault: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - void OnCreatureCreate(Creature *creature, bool add) { switch(creature->GetEntry()) @@ -127,14 +110,6 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance void SetData(uint32 type, uint32 data) { - Player *player = GetPlayerInMap(); - - if (!player) - { - debug_log("TSCR: Instance Steamvault: SetData (Type: %u Data %u) cannot find any player.", type, data); - return; - } - switch(type) { case TYPE_HYDROMANCER_THESPIA: diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp index 4061b2b3b65..21e88eab4c4 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp @@ -51,41 +51,21 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance } } - Player* GetFirstPlayerInInstance() - { - Map::PlayerList const& pPlayers = instance->GetPlayers(); - - if (!pPlayers.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = pPlayers.begin(); itr != pPlayers.end(); ++itr) - { - if (Player* pPlr = itr->getSource()) - return pPlr; - } - } - - debug_log("TSCR: Instance Ramparts: GetFirstPlayerInInstance, but PlayerList is empty."); - return NULL; - } - void DoRespawnChest() { - if (Player* pPlayer = GetFirstPlayerInInstance()) - { - uint64 uiChest; + uint64 uiChest; - if (instance->IsHeroic()) - uiChest = m_uiChestHGUID; - else - uiChest = m_uiChestNGUID; + if (instance->IsHeroic()) + uiChest = m_uiChestHGUID; + else + uiChest = m_uiChestNGUID; - if (GameObject* pGo = instance->GetGameObject(uiChest)) - { - if (pGo->isSpawned()) - return; + if (GameObject* pGo = instance->GetGameObject(uiChest)) + { + if (pGo->isSpawned()) + return; - pGo->SetRespawnTime(HOUR*IN_MILISECONDS); - } + pGo->SetRespawnTime(HOUR*IN_MILISECONDS); } } diff --git a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp index a32112ed709..19046679816 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp @@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL npc_aeranasAI : public ScriptedAI m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); DoScriptText(SAY_FREE, m_creature); return; } diff --git a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp index 87eb787c095..8208f320e0f 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp @@ -1161,7 +1161,7 @@ void boss_julianneAI::DamageTaken(Unit* done_by, uint32 &damage) Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Romulo->GetMotionMaster()->Clear(); Romulo->setDeathState(JUST_DIED); - Romulo->CombatStop(); + Romulo->CombatStop(true); Romulo->DeleteThreatList(); Romulo->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } @@ -1216,7 +1216,7 @@ void boss_romuloAI::DamageTaken(Unit* done_by, uint32 &damage) Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Julianne->GetMotionMaster()->Clear(); Julianne->setDeathState(JUST_DIED); - Julianne->CombatStop(); + Julianne->CombatStop(true); Julianne->DeleteThreatList(); Julianne->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } diff --git a/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp b/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp index 1ed6b003504..22f80983084 100644 --- a/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp +++ b/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp @@ -109,6 +109,17 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } + void AttackedBy(Unit* pAttacker) + { + if (m_creature->getVictim()) + return; + + if (m_creature->IsFriendlyTo(pAttacker)) + return; + + AttackStart(pAttacker); + } + void DamageTaken(Unit *done_by, uint32 & damage) { if (done_by->GetTypeId() == TYPEID_PLAYER && (m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 30) @@ -122,7 +133,7 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->setFaction(1080); //friendly m_creature->SetStandState(UNIT_STAND_STATE_SIT); DoScriptText(LUMP_DEFEAT, m_creature); diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp index fb8b14c368e..c8382eaaa96 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp @@ -66,22 +66,6 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance Encounter[i] = NOT_STARTED; } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - debug_log("TSCR: Instance Shadowfang Keep: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - void OnCreatureCreate(Creature* pCreature, bool add) { switch(pCreature->GetEntry()) @@ -115,18 +99,13 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance void DoSpeech() { - Player* pPlayer = GetPlayerInMap(); + Creature* pAda = instance->GetCreature(uiAdaGUID); + Creature* pAsh = instance->GetCreature(uiAshGUID); - if (pPlayer) + if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive()) { - Unit* pAda = Unit::GetUnit(*pPlayer,uiAdaGUID); - Unit* pAsh = Unit::GetUnit(*pPlayer,uiAshGUID); - - if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive()) - { - DoScriptText(SAY_BOSS_DIE_AD,pAda); - DoScriptText(SAY_BOSS_DIE_AS,pAsh); - } + DoScriptText(SAY_BOSS_DIE_AD,pAda); + DoScriptText(SAY_BOSS_DIE_AS,pAsh); } } diff --git a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp index 3182a56926c..c952c1057f7 100644 --- a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp +++ b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp @@ -64,58 +64,67 @@ bool GossipSelect_npc_archmage_malin(Player *player, Creature *_Creature, uint32 ## npc_bartleby ######*/ +enum +{ + FACTION_ENEMY = 168, + QUEST_BEAT = 1640 +}; + struct TRINITY_DLL_DECL npc_bartlebyAI : public ScriptedAI { - npc_bartlebyAI(Creature *c) : ScriptedAI(c) {} + npc_bartlebyAI(Creature *c) : ScriptedAI(c) + { + m_uiNormalFaction = c->getFaction(); + } - uint64 PlayerGUID; + uint32 m_uiNormalFaction; void Reset() { - m_creature->setFaction(11); - - PlayerGUID = 0; + if (m_creature->getFaction() != m_uiNormalFaction) + m_creature->setFaction(m_uiNormalFaction); } - void JustDied(Unit *who) + void AttackedBy(Unit* pAttacker) { - m_creature->setFaction(11); + if (m_creature->getVictim()) + return; + + if (m_creature->IsFriendlyTo(pAttacker)) + return; + + AttackStart(pAttacker); } - void DamageTaken(Unit *done_by, uint32 & damage) + void Aggro(Unit *who) { } + + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) { - if(damage > m_creature->GetHealth() || ((m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 15)) + if (uiDamage > m_creature->GetHealth() || ((m_creature->GetHealth() - uiDamage)*100 / m_creature->GetMaxHealth() < 15)) { //Take 0 damage - damage = 0; - - if (done_by->GetTypeId() == TYPEID_PLAYER && done_by->GetGUID() == PlayerGUID) - { - CAST_PLR(done_by)->AttackStop(); - CAST_PLR(done_by)->AreaExploredOrEventHappens(1640); - } - m_creature->CombatStop(); + uiDamage = 0; + + if (pDoneBy->GetTypeId() == TYPEID_PLAYER) + ((Player*)pDoneBy)->AreaExploredOrEventHappens(QUEST_BEAT); EnterEvadeMode(); } } - - void EnterCombat(Unit *who) {} }; -bool QuestAccept_npc_bartleby(Player *player, Creature *_Creature, Quest const *_Quest) +bool QuestAccept_npc_bartleby(Player* pPlayer, Creature* pCreature, Quest const* pQuest) { - if(_Quest->GetQuestId() == 1640) + if (pQuest->GetQuestId() == QUEST_BEAT) { - _Creature->setFaction(168); - CAST_AI(npc_bartlebyAI, _Creature->AI())->PlayerGUID = player->GetGUID(); - CAST_AI(npc_bartlebyAI, _Creature->AI())->AttackStart(player); + pCreature->setFaction(FACTION_ENEMY); + ((npc_bartlebyAI*)pCreature->AI())->AttackStart(pPlayer); } return true; } -CreatureAI* GetAI_npc_bartleby(Creature *_creature) +CreatureAI* GetAI_npc_bartleby(Creature* pCreature) { - return new npc_bartlebyAI(_creature); + return new npc_bartlebyAI(pCreature); } /*###### @@ -130,31 +139,44 @@ enum struct TRINITY_DLL_DECL npc_dashel_stonefistAI : public ScriptedAI { - npc_dashel_stonefistAI(Creature *c) : ScriptedAI(c) { uiNormFaction = c->getFaction(); } + npc_dashel_stonefistAI(Creature *c) : ScriptedAI(c) + { + m_uiNormalFaction = c->getFaction(); + } - uint32 uiNormFaction; + uint32 m_uiNormalFaction; void Reset() { - m_creature->setFaction(uiNormFaction); + if (m_creature->getFaction() != m_uiNormalFaction) + m_creature->setFaction(m_uiNormalFaction); } - void DamageTaken(Unit *done_by, uint32 & damage) + void AttackedBy(Unit* pAttacker) { - if ((damage > m_creature->GetHealth()) || (m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 15) + if (m_creature->getVictim()) + return; + + if (m_creature->IsFriendlyTo(pAttacker)) + return; + + AttackStart(pAttacker); + } + + void Aggro(Unit *who) {} + + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) + { + if (uiDamage > m_creature->GetHealth() || ((m_creature->GetHealth() - uiDamage)*100 / m_creature->GetMaxHealth() < 15)) { - //Take 0 damage - damage = 0; + uiDamage = 0; - if (done_by->GetTypeId() == TYPEID_PLAYER) - CAST_PLR(done_by)->AreaExploredOrEventHappens(QUEST_MISSING_DIPLO_PT8); + if (pDoneBy->GetTypeId() == TYPEID_PLAYER) + ((Player*)pDoneBy)->AreaExploredOrEventHappens(QUEST_MISSING_DIPLO_PT8); - //m_creature->CombatStop(); EnterEvadeMode(); } } - - void EnterCombat(Unit *who) {} }; bool QuestAccept_npc_dashel_stonefist(Player* pPlayer, Creature* pCreature, Quest const* pQuest) diff --git a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp index 918fec913b5..12f68359a4a 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp @@ -102,23 +102,6 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance abomnationGUID.clear(); } - Player* GetPlayerInMap() - { - Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) - { - for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* plr = itr->getSource()) - return plr; - } - } - - debug_log("TSCR: Instance Stratholme: GetPlayerInMap, but PlayerList is empty!"); - return NULL; - } - bool StartSlaugtherSquare() { //change to DONE when crystals implemented @@ -183,14 +166,6 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance void SetData(uint32 type, uint32 data) { - Player *player = GetPlayerInMap(); - - if (!player) - { - debug_log("TSCR: Instance Stratholme: SetData (Type: %u Data %u) cannot find any player.", type, data); - return; - } - switch(type) { case TYPE_BARON_RUN: @@ -206,8 +181,10 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance //may add code to remove aura from players, but in theory the time should be up already and removed. break; case DONE: - if (Unit *t = Unit::GetUnit(*player, ysidaTriggerGUID)) - t->SummonCreature(C_YSIDA,t->GetPositionX(),t->GetPositionY(),t->GetPositionZ(),t->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,1800000); + if (Creature* pYsidaT = instance->GetCreature(ysidaTriggerGUID)) + pYsidaT->SummonCreature(C_YSIDA, + pYsidaT->GetPositionX(),pYsidaT->GetPositionY(),pYsidaT->GetPositionZ(),pYsidaT->GetOrientation(), + TEMPSUMMON_TIMED_DESPAWN,1800000); BaronRun_Timer = 0; break; } @@ -243,9 +220,9 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance uint32 count = abomnationGUID.size(); for(std::set<uint64>::iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i) { - if (Unit* abom = Unit::GetUnit(*player, *i)) + if (Creature* pAbom = instance->GetCreature(*i)) { - if (!abom->isAlive()) + if (!pAbom->isAlive()) --count; } } @@ -254,9 +231,12 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance { //a bit itchy, it should close the door after 10 secs, but it doesn't. skipping it for now. //UpdateGoState(ziggurat4GUID,0,true); - player->SummonCreature(C_RAMSTEIN,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); + if (Creature* pBaron = instance->GetCreature(baronGUID)) + pBaron->SummonCreature(C_RAMSTEIN,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); debug_log("TSCR: Instance Stratholme: Ramstein spawned."); - } else debug_log("TSCR: Instance Stratholme: %u Abomnation left to kill.",count); + } + else + debug_log("TSCR: Instance Stratholme: %u Abomnation left to kill.",count); } if (data == DONE) { @@ -270,22 +250,22 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance { if (GetData(TYPE_BARON_RUN) == IN_PROGRESS) { - if (Group *pGroup = player->GetGroup()) + Map::PlayerList const& players = instance->GetPlayers(); + + if (!players.isEmpty()) { - for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next()) + for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { - Player* pGroupie = itr->getSource(); - if (!pGroupie) - continue; - - if (pGroupie->HasAura(SPELL_BARON_ULTIMATUM)) - pGroupie->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); + if (Player* pPlayer = itr->getSource()) + { + if (pPlayer->HasAura(SPELL_BARON_ULTIMATUM)) + pPlayer->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); + + if (pPlayer->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA); + } } - } else if (player->HasAura(SPELL_BARON_ULTIMATUM)) - player->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); - - if (Unit *temp = Unit::GetUnit(*player,GetData64(DATA_BARON))) - player->GroupEventHappens(QUEST_DEAD_MAN_PLEA,temp); + } SetData(TYPE_BARON_RUN,DONE); } @@ -363,10 +343,10 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance { if (SlaugtherSquare_Timer <= diff) { - if (Player *p = GetPlayerInMap()) + if (Creature* pBaron = instance->GetCreature(baronGUID)) { for(uint8 i = 0; i < 4; i++) - p->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); + pBaron->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); UpdateGoState(ziggurat4GUID,0,false); UpdateGoState(ziggurat5GUID,0,false); diff --git a/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp b/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp index fb376795119..eff160843de 100644 --- a/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp +++ b/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp @@ -73,10 +73,9 @@ struct TRINITY_DLL_DECL npc_mistAI : public ScriptedAI void EnterEvadeMode() { - m_creature->InterruptNonMeleeSpells(true); m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); m_creature->LoadCreaturesAddon(); if (m_creature->isAlive()) diff --git a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp index cf55ff0123d..e35c45b2cf0 100644 --- a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp +++ b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp @@ -72,7 +72,7 @@ struct TRINITY_DLL_DECL mob_unkor_the_ruthlessAI : public ScriptedAI m_creature->SetStandState(UNIT_STAND_STATE_SIT); m_creature->RemoveAllAuras(); m_creature->DeleteThreatList(); - m_creature->CombatStop(); + m_creature->CombatStop(true); UnkorUnfriendly_Timer = 60000; } |
