diff options
Diffstat (limited to 'src')
33 files changed, 222 insertions, 64 deletions
diff --git a/src/server/collision/BoundingIntervalHierarchy.h b/src/server/collision/BoundingIntervalHierarchy.h index 39d237d9a2f..f7bfdf73ccc 100755 --- a/src/server/collision/BoundingIntervalHierarchy.h +++ b/src/server/collision/BoundingIntervalHierarchy.h @@ -86,7 +86,7 @@ class BIH template< class T, class BoundsFunc > void build(const std::vector<T> &primitives, BoundsFunc &getBounds, uint32 leafSize = 3, bool printStats=false) { - if(primitives.size() == 0) + if(primitives.empty()) return; buildData dat; dat.maxPrims = leafSize; diff --git a/src/server/collision/Models/WorldModel.cpp b/src/server/collision/Models/WorldModel.cpp index 03101170c44..501be416a26 100644 --- a/src/server/collision/Models/WorldModel.cpp +++ b/src/server/collision/Models/WorldModel.cpp @@ -360,7 +360,7 @@ namespace VMAP bool GroupModel::IntersectRay(const G3D::Ray &ray, float &distance, bool stopAtFirstHit) const { - if (!triangles.size()) + if (triangles.empty()) return false; GModelRayCallback callback(triangles, vertices); meshTree.intersectRay(ray, callback, distance, stopAtFirstHit); @@ -369,7 +369,7 @@ namespace VMAP bool GroupModel::IsInsideObject(const Vector3 &pos, const Vector3 &down, float &z_dist) const { - if (!triangles.size() || !iBound.contains(pos)) + if (triangles.empty() || !iBound.contains(pos)) return false; GModelRayCallback callback(triangles, vertices); Vector3 rPos = pos - 0.1f * down; @@ -468,7 +468,7 @@ namespace VMAP bool WorldModel::IntersectPoint(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, AreaInfo &info) const { - if (!groupModels.size()) + if (groupModels.empty()) return false; WModelAreaCallback callback(groupModels, down); groupTree.intersectPoint(p, callback); @@ -486,7 +486,7 @@ namespace VMAP bool WorldModel::GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const { - if (!groupModels.size()) + if (groupModels.empty()) return false; WModelAreaCallback callback(groupModels, down); groupTree.intersectPoint(p, callback); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 3b54df584a8..6508b300b0e 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1776,6 +1776,11 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u delete targets; break; } + case SMART_ACTION_JUMP_TO_POS: + { + me->GetMotionMaster()->MoveJump(e.target.x, e.target.y , e.target.z, (float)e.action.jump.speedxy, (float)e.action.jump.speedz); + break; + } default: sLog->outErrorDb("SmartScript::ProcessAction: Unhandled Action type %u", e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index bc5ef54c6c0..b08aee787e8 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -774,6 +774,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder &e) case SMART_ACTION_SET_DYNAMIC_FLAG: case SMART_ACTION_ADD_DYNAMIC_FLAG: case SMART_ACTION_REMOVE_DYNAMIC_FLAG: + case SMART_ACTION_JUMP_TO_POS: break; default: sLog->outErrorDb("SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 57467200c36..690d722c048 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -461,8 +461,9 @@ enum SMART_ACTION SMART_ACTION_SET_DYNAMIC_FLAG = 94, // Flags SMART_ACTION_ADD_DYNAMIC_FLAG = 95, // Flags SMART_ACTION_REMOVE_DYNAMIC_FLAG = 96, // Flags + SMART_ACTION_JUMP_TO_POS = 97, // speedXY, speedZ, targetX, targetY, targetZ - SMART_ACTION_END = 97, + SMART_ACTION_END = 98, }; struct SmartAction @@ -844,6 +845,13 @@ struct SmartAction { uint32 anim; } sendGoCustomAnim; + + struct + { + uint32 speedxy; + uint32 speedz; + } jump; + struct { uint32 param1; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index d8c9a3b8523..fdf5c610486 100755 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -433,7 +433,8 @@ void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaTypes type, uin { sLog->outDebug(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::ResetAchievementCriteria(%u, %u, %u)", type, miscvalue1, miscvalue2); - if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS))) + // disable for gamemasters with GM-mode enabled + if (m_player->isGameMaster()) return; AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type); @@ -733,7 +734,8 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui { sLog->outDebug(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::UpdateAchievementCriteria(%u, %u, %u)", type, miscValue1, miscValue2); - if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS))) + // disable for gamemasters with GM-mode enabled + if (m_player->isGameMaster()) return; AchievementCriteriaEntryList const& achievementCriteriaList = sAchievementMgr->GetAchievementCriteriaByType(type); @@ -2000,11 +2002,12 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type, } } -void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement, bool ignoreGMAllowAchievementConfig) +void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { sLog->outDetail("AchievementMgr::CompletedAchievement(%u)", achievement->ID); - if (m_player->GetSession()->GetSecurity() > AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS)) && !ignoreGMAllowAchievementConfig) + // disable for gamemasters with GM-mode enabled + if (m_player->isGameMaster()) return; if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement)) diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 3456e31d86c..6324c978dd9 100755 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -253,7 +253,7 @@ class AchievementMgr void SaveToDB(SQLTransaction& trans); void ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, bool evenIfCriteriaComplete = false); void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = NULL); - void CompletedAchievement(AchievementEntry const* entry, bool ignoreGMAllowAchievementConfig = false); + void CompletedAchievement(AchievementEntry const* entry); void CheckAllAchievementCriteria(); void SendAllAchievementData() const; void SendRespondInspectAchievements(Player* player) const; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 96740ba2a2c..29a24de3d73 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -430,7 +430,7 @@ void LFGMgr::InitializeLockedDungeons(Player* plr) */ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeons, const std::string& comment) { - if (!plr || !plr->GetSession() || !selectedDungeons.size()) + if (!plr || !plr->GetSession() || selectedDungeons.empty()) return; Group* grp = plr->GetGroup(); @@ -477,7 +477,7 @@ void LFGMgr::Join(Player* plr, uint8 roles, const LfgDungeonSet& selectedDungeon joinData.result = LFG_JOIN_DESERTER; else if (plr->HasAura(LFG_SPELL_DUNGEON_COOLDOWN)) joinData.result = LFG_JOIN_RANDOM_COOLDOWN; - else if (!dungeons.size()) + else if (dungeons.empty()) joinData.result = LFG_JOIN_NOT_MEET_REQS; else if (grp) { @@ -763,7 +763,7 @@ bool LFGMgr::CheckCompatibility(LfgGuidList check, LfgProposal*& pProposal) std::string strGuids = ConcatenateGuids(check); - if (check.size() > MAXGROUPSIZE || !check.size()) + if (check.size() > MAXGROUPSIZE || check.empty()) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::CheckCompatibility: (%s): Size wrong - Not compatibles", strGuids.c_str()); return false; @@ -1163,7 +1163,7 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, const PlayerSet& pla } } } - if (dungeons.size()) + if (!dungeons.empty()) lockMap.clear(); } @@ -1176,7 +1176,7 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, const PlayerSet& pla */ bool LFGMgr::CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag /*= true*/) { - if (!groles.size()) + if (groles.empty()) return false; uint8 damage = 0; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 85fa2c3e362..539a04ef2c6 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1092,7 +1092,7 @@ void GameObject::Use(Unit* user) if (user->GetTypeId() != TYPEID_PLAYER) return; - if (!ChairListSlots.size()) // this is called once at first chair use to make list of available slots + if (ChairListSlots.empty()) // this is called once at first chair use to make list of available slots { if (info->chair.slots > 0) // sometimes chairs in DB have error in fields and we dont know number of slots for (uint32 i = 0; i < info->chair.slots; ++i) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7d206bcdbea..9eac54ee3f8 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18588,7 +18588,7 @@ void Player::_SaveMail(SQLTransaction& trans) { trans->PAppend("UPDATE mail SET has_items = '%u', expire_time = '" UI64FMTD "', deliver_time = '" UI64FMTD "', money = '%u', cod = '%u', checked = '%u' WHERE id = '%u'", m->HasItems() ? 1 : 0, (uint64)m->expire_time, (uint64)m->deliver_time, m->money, m->COD, m->checked, m->messageID); - if (m->removedItems.size()) + if (!m->removedItems.empty()) { for (std::vector<uint32>::iterator itr2 = m->removedItems.begin(); itr2 != m->removedItems.end(); ++itr2) trans->PAppend("DELETE FROM mail_items WHERE item_guid = '%u'", *itr2); @@ -23436,9 +23436,9 @@ void Player::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 mis GetAchievementMgr().UpdateAchievementCriteria(type, miscValue1, miscValue2, unit); } -void Player::CompletedAchievement(AchievementEntry const* entry, bool ignoreGMAllowAchievementConfig) +void Player::CompletedAchievement(AchievementEntry const* entry) { - GetAchievementMgr().CompletedAchievement(entry, ignoreGMAllowAchievementConfig); + GetAchievementMgr().CompletedAchievement(entry); } void Player::LearnTalent(uint32 talentId, uint32 talentRank) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e84f4ea306b..6520b67183c 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2420,7 +2420,7 @@ class Player : public Unit, public GridObject<Player> AchievementMgr& GetAchievementMgr() { return m_achievementMgr; } AchievementMgr const& GetAchievementMgr() const { return m_achievementMgr; } void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = NULL); - void CompletedAchievement(AchievementEntry const* entry, bool ignoreGMAllowAchievementConfig = false); + void CompletedAchievement(AchievementEntry const* entry); bool HasTitle(uint32 bitIndex); bool HasTitle(CharTitlesEntry const* title) { return HasTitle(title->bit_index); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index abf3ef9c412..28b5e574877 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5633,12 +5633,12 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger triggered_spell_id = 70701; break; } + // Essence of the Blood Queen case 70871: { - target = this; - triggered_spell_id = 70872; basepoints0 = CalculatePctN(int32(damage), triggerAmount); - break; + CastCustomSpell(70872, SPELLVALUE_BASE_POINT0, basepoints0, this); + return true; } case 65032: // Boom aura (321 Boombot) { @@ -17144,8 +17144,10 @@ bool Unit::SetPosition(float x, float y, float z, float orientation, bool telepo void Unit::SendThreatListUpdate() { - if (uint32 count = getThreatManager().getThreatList().size()) + if (!getThreatManager().isThreatListEmpty()) { + uint32 count = getThreatManager().getThreatList().size(); + //sLog->outDebug(LOG_FILTER_UNITS, "WORLD: Send SMSG_THREAT_UPDATE Message"); WorldPacket data(SMSG_THREAT_UPDATE, 8 + count * 8); data.append(GetPackGUID()); @@ -17162,8 +17164,10 @@ void Unit::SendThreatListUpdate() void Unit::SendChangeCurrentVictimOpcode(HostileReference* pHostileReference) { - if (uint32 count = getThreatManager().getThreatList().size()) + if (!getThreatManager().isThreatListEmpty()) { + uint32 count = getThreatManager().getThreatList().size(); + sLog->outDebug(LOG_FILTER_UNITS, "WORLD: Send SMSG_HIGHEST_THREAT_UPDATE Message"); WorldPacket data(SMSG_HIGHEST_THREAT_UPDATE, 8 + 8 + count * 8); data.append(GetPackGUID()); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 356f26e880c..79df2b9fa73 100755 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7863,7 +7863,7 @@ bool ObjectMgr::LoadTrinityStrings(char const* table, int32 min_value, int32 max TrinityStringLocale& data = mTrinityStringLocaleMap[entry]; - if (data.Content.size() > 0) + if (!data.Content.empty()) { sLog->outErrorDb("Table `%s` contain data for already loaded entry %i (from another table?), ignored.", table, entry); continue; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 3c3b71deddc..bb7b37c1eaf 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1574,7 +1574,7 @@ bool Group::InCombatToInstance(uint32 instanceId) for (GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next()) { Player *pPlayer = itr->getSource(); - if (pPlayer && pPlayer->getAttackers().size() && pPlayer->GetInstanceId() == instanceId && (pPlayer->GetMap()->IsRaidOrHeroicDungeon())) + if (pPlayer && !pPlayer->getAttackers().empty() && pPlayer->GetInstanceId() == instanceId && (pPlayer->GetMap()->IsRaidOrHeroicDungeon())) for (std::set<Unit*>::const_iterator i = pPlayer->getAttackers().begin(); i != pPlayer->getAttackers().end(); ++i) if ((*i) && (*i)->GetTypeId() == TYPEID_UNIT && (*i)->ToCreature()->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND) return true; diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index e2a5bdfef91..1c239fc0438 100755 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -140,7 +140,7 @@ void PoolGroup<T>::AddEntry(PoolObject& poolitem, uint32 maxentries) template <class T> bool PoolGroup<T>::CheckPool() const { - if (!EqualChanced.size()) + if (EqualChanced.empty()) { float chance = 0; for (uint32 i = 0; i < ExplicitlyChanced.size(); ++i) @@ -496,7 +496,7 @@ void PoolGroup<Quest>::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 Spawn1Object(&tempObj); newQuests.erase(itr); --limit; - } while (limit && newQuests.size()); + } while (limit && !newQuests.empty()); // if we are here it means the pool is initialized at startup and did not have previous saved state if (!triggerFrom) @@ -779,7 +779,7 @@ void PoolMgr::LoadFromDB() while (result->NextRow()); // Now check for circular reference - for (uint32 i=0; i<mPoolPoolGroups.size(); ++i) + for (uint32 i=0; i < max_pool_id; ++i) { std::set<uint32> checkedPools; for (SearchMap::iterator poolItr = mPoolSearchMap.find(i); poolItr != mPoolSearchMap.end(); poolItr = mPoolSearchMap.find(poolItr->second)) diff --git a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp index 56de97aaddc..004c5ea2e63 100755 --- a/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/LFGHandler.cpp @@ -285,7 +285,7 @@ void WorldSession::SendLfgUpdatePlayer(const LfgUpdateData& updateData) bool queued = false; bool extrainfo = false; - switch(updateData.updateType) + switch (updateData.updateType) { case LFG_UPDATETYPE_JOIN_PROPOSAL: case LFG_UPDATETYPE_ADDED_TO_QUEUE: @@ -328,7 +328,7 @@ void WorldSession::SendLfgUpdateParty(const LfgUpdateData& updateData) bool extrainfo = false; bool queued = false; - switch(updateData.updateType) + switch (updateData.updateType) { case LFG_UPDATETYPE_JOIN_PROPOSAL: extrainfo = true; @@ -401,7 +401,7 @@ void WorldSession::SendLfgRoleCheckUpdate(const LfgRoleCheck* pRoleCheck) data << uint32(pRoleCheck->state); // Check result data << uint8(pRoleCheck->state == LFG_ROLECHECK_INITIALITING); data << uint8(dungeons.size()); // Number of dungeons - if (dungeons.size()) + if (!dungeons.empty()) { for (LfgDungeonSet::iterator it = dungeons.begin(); it != dungeons.end(); ++it) { @@ -411,7 +411,7 @@ void WorldSession::SendLfgRoleCheckUpdate(const LfgRoleCheck* pRoleCheck) } data << uint8(pRoleCheck->roles.size()); // Players in group - if (pRoleCheck->roles.size()) + if (!pRoleCheck->roles.empty()) { // Leader info MUST be sent 1st :S uint64 guid = pRoleCheck->leader; diff --git a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp index f2b4cab0aa8..5a0c1ccde15 100755 --- a/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/QuestHandler.cpp @@ -317,7 +317,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket & recv_data) (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE && !quest->IsAutoComplete())) { sLog->outError("HACK ALERT: Player %s (guid: %u) is trying to complete quest (id: %u) but he has no right to do it!", - _player->GetName(), _player->GetGUID(), questId); + _player->GetName(), _player->GetGUIDLow(), questId); return; } if (_player->CanRewardQuest(quest, reward, true)) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1bf61018391..91f6e25fc0b 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -854,7 +854,6 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_GM_LEVEL_IN_GM_LIST] = sConfig->GetIntDefault("GM.InGMList.Level", SEC_ADMINISTRATOR); m_int_configs[CONFIG_GM_LEVEL_IN_WHO_LIST] = sConfig->GetIntDefault("GM.InWhoList.Level", SEC_ADMINISTRATOR); - m_int_configs[CONFIG_GM_LEVEL_ALLOW_ACHIEVEMENTS] = sConfig->GetIntDefault("GM.AllowAchievementGain.Level", SEC_ADMINISTRATOR); m_bool_configs[CONFIG_GM_LOG_TRADE] = sConfig->GetBoolDefault("GM.LogTrade", false); m_int_configs[CONFIG_START_GM_LEVEL] = sConfig->GetIntDefault("GM.StartLevel", 1); if (m_int_configs[CONFIG_START_GM_LEVEL] < m_int_configs[CONFIG_START_PLAYER_LEVEL]) 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); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 9af96d20903..d9ce9ee223f 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1902,17 +1902,6 @@ GM.AllowFriend = 0 GM.LowerSecurity = 0 # -# GM.AllowAchievementGain.Level -# Description: Max GM level allowed to obtain achievements. -# Default: 3 - (Players, Moderators, GameMasters, Admins) -# 0 - (Players) -# 1 - (Players, Moderators) -# 2 - (Players, Moderators, GameMasters) -# 3 - (Players, Moderators, GameMasters, Admins) - -GM.AllowAchievementGain.Level = 3 - -# # GM.TicketSystem.ChanceOfGMSurvey # Description: Chance of sending a GM survey after ticket completion. # Default: 50 - (Enabled) |
