diff options
| author | QAston <qaston@gmail.com> | 2011-07-02 16:12:43 +0200 |
|---|---|---|
| committer | QAston <qaston@gmail.com> | 2011-07-02 16:12:43 +0200 |
| commit | 1068583172141dcb1ca51a6b15fa2170ae094e97 (patch) | |
| tree | eea2c65e1458595c5b8f105d868c4f676f1ab286 /src/server/scripts | |
| parent | 86dde83ddade00c66a5af552d65d4787c22b6361 (diff) | |
| parent | f3dfa8066a291e144f53142d62b4e2f493e57137 (diff) | |
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore
Diffstat (limited to 'src/server/scripts')
14 files changed, 165 insertions, 16 deletions
diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index 5fef2eae6ed..88e07a07fe7 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -68,7 +68,7 @@ public: } if (AchievementEntry const* pAE = GetAchievementStore()->LookupEntry(achievementId)) - target->CompletedAchievement(pAE, true); + target->CompletedAchievement(pAE); return true; } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index b380d559ae0..adde1d9bf4a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -286,7 +286,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(const uint32 diff) target_list.push_back(pTarget); pTarget = NULL; } - if (target_list.size()) + if (!target_list.empty()) pTarget = *(target_list.begin()+rand()%target_list.size()); DoCast(pTarget, SPELL_BERSERKER_CHARGE); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 788c9fb171a..daad47b6106 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -312,7 +312,7 @@ public: std::list<HostileReference *> t_list = me->getThreatManager().getThreatList(); std::vector<Unit* > targets; - if (!t_list.size()) + if (t_list.empty()) return; //begin + 1, so we don't target the one with the highest threat diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 1fdd23fe51d..cf785a64301 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -525,7 +525,7 @@ public: me->IsWithinDistInMap(i->getSource(), range) && i->getSource()->isAlive()) temp.push_back(i->getSource()); - if (temp.size()) + if (!temp.empty()) { j = temp.begin(); advance(j, rand()%temp.size()); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index c1f80fb50af..2b93d4a6d57 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -247,7 +247,7 @@ class boss_janalai : public CreatureScript } //sLog->outError("Eggs %d at middle", templist.size()); - if (!templist.size()) + if (templist.empty()) return false; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 3a6ccacf753..ab4cb968336 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -175,7 +175,7 @@ class boss_nalorakk : public CreatureScript cell.Visit(pair, cSearcher, *(me->GetMap())); } - if (!templist.size()) + if (templist.empty()) return; for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 4a394cffe62..ec891f81664 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -525,9 +525,26 @@ class boss_prince_keleseth_icc : public CreatureScript } } + bool CheckRoom() + { + if (!CheckBoundary(me)) + { + EnterEvadeMode(); + if (Creature* taldaram = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_TALDARAM_GUID))) + taldaram->AI()->EnterEvadeMode(); + + if (Creature* valanar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_VALANAR_GUID))) + valanar->AI()->EnterEvadeMode(); + + return false; + } + + return true; + } + void UpdateAI(uint32 const diff) { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim() || !CheckRoom()) return; events.Update(diff); @@ -723,9 +740,26 @@ class boss_prince_taldaram_icc : public CreatureScript } } + bool CheckRoom() + { + if (!CheckBoundary(me)) + { + EnterEvadeMode(); + if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_KELESETH_GUID))) + keleseth->AI()->EnterEvadeMode(); + + if (Creature* valanar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_VALANAR_GUID))) + valanar->AI()->EnterEvadeMode(); + + return false; + } + + return true; + } + void UpdateAI(uint32 const diff) { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim() || !CheckRoom()) return; events.Update(diff); @@ -940,9 +974,26 @@ class boss_prince_valanar_icc : public CreatureScript } } + bool CheckRoom() + { + if (!CheckBoundary(me)) + { + EnterEvadeMode(); + if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_KELESETH_GUID))) + keleseth->AI()->EnterEvadeMode(); + + if (Creature* taldaram = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_TALDARAM_GUID))) + taldaram->AI()->EnterEvadeMode(); + + return false; + } + + return true; + } + void UpdateAI(uint32 const diff) { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim() || !CheckRoom()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 5cde7ada233..ba3216eccf6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -148,6 +148,7 @@ class boss_blood_queen_lana_thel : public CreatureScript _offtank = NULL; _vampires.clear(); _creditBloodQuickening = false; + _killMinchar = false; } void EnterCombat(Unit* who) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp index 8298444f4b1..9132031b89d 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp @@ -43,8 +43,6 @@ class icecrown_citadel_teleport : public GameObjectScript player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT); if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT); - if (instance->GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && instance->GetBossState(DATA_SINDRAGOSA) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to The Frozen Throne", GOSSIP_SENDER_ICC_PORT, FROZEN_THRONE_TELEPORT); } player->SEND_GOSSIP_MENU(player->GetGossipTextId(go->GetGOInfo()->GetGossipMenuId()), go->GetGUID()); @@ -72,7 +70,23 @@ class icecrown_citadel_teleport : public GameObjectScript } }; +class at_frozen_throne_teleport : public AreaTriggerScript +{ + public: + at_frozen_throne_teleport() : AreaTriggerScript("at_frozen_throne_teleport") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) + { + if (InstanceScript* instance = player->GetInstanceScript()) + if (instance->GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && instance->GetBossState(DATA_SINDRAGOSA) == DONE) + player->CastSpell(player, FROZEN_THRONE_TELEPORT, true); + + return true; + } +}; + void AddSC_icecrown_citadel_teleport() { new icecrown_citadel_teleport(); + new at_frozen_throne_teleport(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index ece75fc0b9f..7890f2fd8fa 100755 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -96,14 +96,14 @@ class instance_icecrown_citadel : public InstanceMapScript PlagueSigilGUID = 0; BloodwingSigilGUID = 0; FrostwingSigilGUID = 0; - memset(PutricidePipeGUIDs, 0, 2*sizeof(uint64)); - memset(PutricideGateGUIDs, 0, 2*sizeof(uint64)); + memset(PutricidePipeGUIDs, 0, 2 * sizeof(uint64)); + memset(PutricideGateGUIDs, 0, 2 * sizeof(uint64)); PutricideCollisionGUID = 0; FestergutGUID = 0; RotfaceGUID = 0; ProfessorPutricideGUID = 0; PutricideTableGUID = 0; - memset(BloodCouncilGUIDs, 0, 3*sizeof(uint64)); + memset(BloodCouncilGUIDs, 0, 3 * sizeof(uint64)); BloodCouncilControllerGUID = 0; BloodQueenLanaThelGUID = 0; CrokScourgebaneGUID = 0; @@ -198,6 +198,7 @@ class instance_icecrown_citadel : public InstanceMapScript case NPC_SE_HIGH_OVERLORD_SAURFANG: if (TeamInInstance == ALLIANCE) creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, ALLIANCE, creature->GetCreatureData()); + // no break; case NPC_SE_MURADIN_BRONZEBEARD: DeathbringerSaurfangEventGUID = creature->GetGUID(); creature->LastUsedScriptID = creature->GetScriptId(); diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp index 73baeae441f..46bf7f99ae5 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp @@ -129,6 +129,7 @@ enum Events #define GROUND_Z 391.517f #define GOSSIP_ITEM_1 "Activate Harpoons!" #define DATA_QUICK_SHAVE 29192921 // 2919, 2921 are achievement IDs +#define DATA_IRON_DWARF_MEDIUM_RARE 29232924 const Position PosEngRepair[4] = { @@ -890,8 +891,21 @@ class npc_darkrune_guardian : public CreatureScript void Reset() { StormTimer = urand(3000, 6000); + killedByBreath = false; } + uint32 GetData(uint32 type) + { + return type == DATA_IRON_DWARF_MEDIUM_RARE ? killedByBreath : 0; + } + + void SetData(uint32 type, uint32 value) + { + if (type == DATA_IRON_DWARF_MEDIUM_RARE) + killedByBreath = value; + } + + void UpdateAI(uint32 const Diff) { if (!UpdateVictim()) @@ -907,6 +921,9 @@ class npc_darkrune_guardian : public CreatureScript DoMeleeAttackIfReady(); } + + private: + bool killedByBreath; }; CreatureAI* GetAI(Creature* creature) const @@ -1007,6 +1024,50 @@ class spell_razorscale_devouring_flame : public SpellScriptLoader } }; +class spell_razorscale_flame_breath : public SpellScriptLoader +{ + public: + spell_razorscale_flame_breath() : SpellScriptLoader("spell_razorscale_flame_breath") { } + + class spell_razorscale_flame_breath_SpellScript : public SpellScript + { + PrepareSpellScript(spell_razorscale_flame_breath_SpellScript); + + void CheckDamage() + { + Creature* target = GetHitCreature(); + if (!target || target->GetEntry() != NPC_DARK_RUNE_GUARDIAN) + return; + + if (GetHitDamage() >= int32(target->GetHealth())) + target->AI()->SetData(DATA_IRON_DWARF_MEDIUM_RARE, 1); + } + + void Register() + { + OnHit += SpellHitFn(spell_razorscale_flame_breath_SpellScript::CheckDamage); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_razorscale_flame_breath_SpellScript(); + } +}; + +class achievement_iron_dwarf_medium_rare : public AchievementCriteriaScript +{ + public: + achievement_iron_dwarf_medium_rare() : AchievementCriteriaScript("achievement_iron_dwarf_medium_rare") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + return target && target->IsAIEnabled && target->GetAI()->GetData(DATA_IRON_DWARF_MEDIUM_RARE); + } +}; + class achievement_quick_shave : public AchievementCriteriaScript { public: @@ -1035,5 +1096,7 @@ void AddSC_boss_razorscale() new npc_darkrune_guardian(); new npc_darkrune_sentinel(); new spell_razorscale_devouring_flame(); + new spell_razorscale_flame_breath(); + new achievement_iron_dwarf_medium_rare(); new achievement_quick_shave(); }
\ No newline at end of file diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp index 5ebe89ffea9..b958243e5ec 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp @@ -144,7 +144,7 @@ public: // Get the Threat List std::list<HostileReference *> m_threatlist = me->getThreatManager().getThreatList(); - if (!m_threatlist.size()) // He doesn't have anyone in his threatlist, useless to continue + if (m_threatlist.empty()) // He doesn't have anyone in his threatlist, useless to continue return; std::list<Unit* > targets; diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index c175c0baa8c..dc44a455c34 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -776,7 +776,7 @@ public: target_list.push_back(pTarget); pTarget = NULL; } - if (target_list.size()) + if (!target_list.empty()) pTarget = *(target_list.begin()+rand()%target_list.size()); me->InterruptNonMeleeSpells(false); diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index f26b34e6308..339d54d5450 100755 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -188,6 +188,24 @@ class achievement_arena_kills : public AchievementCriteriaScript uint8 const _arenaType; }; +class achievement_sickly_gazelle : public AchievementCriteriaScript +{ +public: + achievement_sickly_gazelle() : AchievementCriteriaScript("achievement_sickly_gazelle") { } + + bool OnCheck(Player* /*source*/, Unit* target) + { + if (!target) + return false; + + if (Player* victim = target->ToPlayer()) + if (victim->IsMounted()) + return true; + + return false; + } +}; + void AddSC_achievement_scripts() { new achievement_storm_glory(); @@ -198,6 +216,7 @@ void AddSC_achievement_scripts() new achievement_bg_ic_glaive_grave(); new achievement_bg_ic_mowed_down(); new achievement_bg_sa_artillery(); + new achievement_sickly_gazelle(); new achievement_arena_kills("achievement_arena_2v2_kills", ARENA_TYPE_2v2); new achievement_arena_kills("achievement_arena_3v3_kills", ARENA_TYPE_3v3); new achievement_arena_kills("achievement_arena_5v5_kills", ARENA_TYPE_5v5); |
