aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README18
-rw-r--r--sql/updates/world/2011_08_29_00_world_instance_misc.sql7
-rw-r--r--sql/updates/world/2011_08_30_00_world_spell_script_names.sql3
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.cpp12
-rwxr-xr-xsrc/server/game/AI/CoreAI/UnitAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/ArenaTeam.cpp8
-rwxr-xr-xsrc/server/game/Battlegrounds/ArenaTeam.h10
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.cpp2
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.h4
-rwxr-xr-xsrc/server/game/Chat/Commands/Level2.cpp20
-rwxr-xr-xsrc/server/game/DataStores/DBCStores.cpp2
-rwxr-xr-xsrc/server/game/DataStores/DBCStructure.h10
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.cpp66
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.h46
-rwxr-xr-xsrc/server/game/Entities/Creature/Creature.h4
-rwxr-xr-xsrc/server/game/Entities/Creature/TemporarySummon.cpp2
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp2
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp228
-rwxr-xr-xsrc/server/game/Entities/Object/Object.h47
-rwxr-xr-xsrc/server/game/Entities/Object/ObjectDefines.h2
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.cpp2
-rwxr-xr-xsrc/server/game/Entities/Object/Updates/UpdateData.h2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp4
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h4
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp345
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h7
-rwxr-xr-xsrc/server/game/Groups/Group.cpp24
-rwxr-xr-xsrc/server/game/Groups/Group.h24
-rwxr-xr-xsrc/server/game/Guilds/Guild.cpp24
-rwxr-xr-xsrc/server/game/Guilds/Guild.h26
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp2
-rw-r--r--src/server/game/Guilds/GuildMgr.h3
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/GroupHandler.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/PetHandler.cpp1
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SpellHandler.cpp8
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraDefines.h28
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp16
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h2
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.cpp4
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.h6
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp33
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rwxr-xr-xsrc/server/game/Tickets/TicketMgr.h10
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp4
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp2
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp77
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp2
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp2
-rw-r--r--src/server/scripts/Northrend/borean_tundra.cpp2
-rw-r--r--src/server/scripts/Northrend/zuldrak.cpp2
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp53
-rw-r--r--src/server/scripts/Spells/spell_item.cpp2
62 files changed, 614 insertions, 630 deletions
diff --git a/README b/README
index d2bcce8f86c..f2ae18f6cf5 100644
--- a/README
+++ b/README
@@ -26,18 +26,24 @@ Copyright (C) TrinityCore (http://www.trinitycore.org)
file, but you are not obligated to do so. If you do not wish to do
so, delete this exception statement from your version.
-TrinityCore is a World of Warcraft game server emulator. It is derived
+TrinityCore is a MMORPG Framework based mostly on C++. It is completely
+open source, and is community supported. It is derived
from MaNGOS, the Massive Network Game Object Server, and is based on the
-code of that project.
+code of that project with extensive changes over time to optimize, improve
+and cleanup the codebase at the same time as improving the ingame mechanics
+and functionality. If you wish to contribute ideas or code please visit
+our site linked below or make pull requests to our github repo at
+https://github.com/TrinityCore/TrinityCore
For further information on the TrinityCore project, please visit our
-project website at http://www.trinitycore.org.
+project website at http://www.TrinityCore.org
-API documentation can be obtained by running the "make doc" command inside
+To get nightly builds of the master branch of TrinityCore, please visit
+http://www.TrinityCore.net
+
+Documentation including installation instructions can be found inside
the doc directory.
SQL files to create the database can be found in the sql directory. Files
to update your database from an older revision/version can be found in the
sql/updates directory.
-
-See the docs/UnixInstall.txt file for installation instructions on Linux.
diff --git a/sql/updates/world/2011_08_29_00_world_instance_misc.sql b/sql/updates/world/2011_08_29_00_world_instance_misc.sql
new file mode 100644
index 00000000000..51a5e651d74
--- /dev/null
+++ b/sql/updates/world/2011_08_29_00_world_instance_misc.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_putricide_expunged_gas';
+DELETE FROM `spell_proc_event` WHERE `entry` IN (70215,72858,72859,72860,70672,72455,72832,72833);
+INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`procFlags`,`procEx`,`ppmRate`,`CustomChance`,`Cooldown`) VALUES
+(70672,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0),
+(72455,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0),
+(72832,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0),
+(72833,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0,0,0);
diff --git a/sql/updates/world/2011_08_30_00_world_spell_script_names.sql b/sql/updates/world/2011_08_30_00_world_spell_script_names.sql
new file mode 100644
index 00000000000..ebfc8f0cc6e
--- /dev/null
+++ b/sql/updates/world/2011_08_30_00_world_spell_script_names.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=13161;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(13161, 'spell_hun_aspect_of_the_beast');
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 91de52db9f8..b6517e3396b 100755
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -42,22 +42,26 @@ void UnitAI::DoMeleeAttackIfReady()
if (me->HasUnitState(UNIT_STAT_CASTING))
return;
+ Unit *victim = me->getVictim();
+ if (!victim || !victim->IsInWorld())
+ return;
+
//Make sure our attack is ready and we aren't currently casting before checking distance
if (me->isAttackReady())
{
//If we are within range melee the target
- if (me->IsWithinMeleeRange(me->getVictim()))
+ if (me->IsWithinMeleeRange(victim))
{
- me->AttackerStateUpdate(me->getVictim());
+ me->AttackerStateUpdate(victim);
me->resetAttackTimer();
}
}
if (me->haveOffhandWeapon() && me->isAttackReady(OFF_ATTACK))
{
//If we are within range melee the target
- if (me->IsWithinMeleeRange(me->getVictim()))
+ if (me->IsWithinMeleeRange(victim))
{
- me->AttackerStateUpdate(me->getVictim(), OFF_ATTACK);
+ me->AttackerStateUpdate(victim, OFF_ATTACK);
me->resetAttackTimer(OFF_ATTACK);
}
}
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index ec00b53b5ca..3a6240ae2f2 100755
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -120,7 +120,7 @@ class UnitAI
virtual void DoAction(int32 const /*param*/) {}
virtual uint32 GetData(uint32 /*id = 0*/) { return 0; }
virtual void SetData(uint32 /*id*/, uint32 /*value*/) {}
- virtual void SetGUID(uint64 const /*guid*/, int32 /*id*/ = 0) {}
+ virtual void SetGUID(uint64 /*guid*/, int32 /*id*/ = 0) {}
virtual uint64 GetGUID(int32 /*id*/ = 0) { return 0; }
Unit* SelectTarget(SelectAggroTarget targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, int32 aura = 0);
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp
index 97bfbd6fb10..470eb54b584 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.cpp
+++ b/src/server/game/AI/SmartScripts/SmartAI.cpp
@@ -687,7 +687,7 @@ void SmartAI::SetData(uint32 id, uint32 value)
GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, NULL, id, value);
}
-void SmartAI::SetGUID(const uint64 /*guid*/, int32 /*id*/)
+void SmartAI::SetGUID(uint64 /*guid*/, int32 /*id*/)
{
}
diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h
index a4926226a91..ffa52db8f06 100644
--- a/src/server/game/AI/SmartScripts/SmartAI.h
+++ b/src/server/game/AI/SmartScripts/SmartAI.h
@@ -157,7 +157,7 @@ class SmartAI : public CreatureAI
void SetData(uint32 id, uint32 value);
// Used in scripts to share variables
- void SetGUID(const uint64 guid, int32 id = 0);
+ void SetGUID(uint64 guid, int32 id = 0);
// Used in scripts to share variables
uint64 GetGUID(int32 id = 0);
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index cbcbc1e2290..0de13280376 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2846,7 +2846,7 @@ void SmartScript::SetData(uint32 id, uint32 value)
{
}
-void SmartScript::SetGUID(const uint64 guid, int32 id)
+void SmartScript::SetGUID(uint64 guid, int32 id)
{
}
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 78153885fa4..693f8ddae27 100755
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -93,7 +93,7 @@ bool ArenaTeam::Create(uint32 captainGuid, uint8 type, std::string teamName, uin
return true;
}
-bool ArenaTeam::AddMember(const uint64 playerGuid)
+bool ArenaTeam::AddMember(uint64 playerGuid)
{
std::string playerName;
uint8 playerClass;
@@ -276,7 +276,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result)
return true;
}
-void ArenaTeam::SetCaptain(const uint64 guid)
+void ArenaTeam::SetCaptain(uint64 guid)
{
// Disable remove/promote buttons
Player* oldCaptain = ObjectAccessor::FindPlayer(GetCaptain());
@@ -537,7 +537,7 @@ uint8 ArenaTeam::GetSlotByType(uint32 type)
return 0xFF;
}
-bool ArenaTeam::IsMember(const uint64 guid) const
+bool ArenaTeam::IsMember(uint64 guid) const
{
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
if (itr->Guid == guid)
@@ -901,7 +901,7 @@ ArenaTeamMember* ArenaTeam::GetMember(const std::string& name)
return NULL;
}
-ArenaTeamMember* ArenaTeam::GetMember(const uint64 guid)
+ArenaTeamMember* ArenaTeam::GetMember(uint64 guid)
{
for (MemberList::iterator itr = Members.begin(); itr != Members.end(); ++itr)
if (itr->Guid == guid)
diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h
index 2874df84078..c65226a53aa 100755
--- a/src/server/game/Battlegrounds/ArenaTeam.h
+++ b/src/server/game/Battlegrounds/ArenaTeam.h
@@ -131,10 +131,10 @@ class ArenaTeam
uint32 GetRating() const { return Stats.Rating; }
uint32 GetAverageMMR(Group* group) const;
- void SetCaptain(const uint64 guid);
- bool AddMember(const uint64 PlayerGuid);
+ void SetCaptain(uint64 guid);
+ bool AddMember(uint64 PlayerGuid);
- // Shouldn't be const uint64 ed, because than can reference guid from members on Disband
+ // Shouldn't be uint64 ed, because than can reference guid from members on Disband
// and this method removes given record from list. So invalid reference can happen.
void DelMember(uint64 guid, bool cleanDb);
@@ -142,9 +142,9 @@ class ArenaTeam
bool Empty() const { return Members.empty(); }
MemberList::iterator m_membersBegin() { return Members.begin(); }
MemberList::iterator m_membersEnd() { return Members.end(); }
- bool IsMember(const uint64 guid) const;
+ bool IsMember(uint64 guid) const;
- ArenaTeamMember* GetMember(const uint64 guid);
+ ArenaTeamMember* GetMember(uint64 guid);
ArenaTeamMember* GetMember(const std::string& name);
bool IsFighting() const;
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
index f164f56dffd..70be3b52238 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
@@ -53,7 +53,7 @@ ArenaTeam* ArenaTeamMgr::GetArenaTeamByName(const std::string& arenaTeamName) co
return NULL;
}
-ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 const guid) const
+ArenaTeam* ArenaTeamMgr::GetArenaTeamByCaptain(uint64 guid) const
{
for (ArenaTeamContainer::const_iterator itr = ArenaTeamStore.begin(); itr != ArenaTeamStore.end(); ++itr)
if (itr->second->GetCaptain() == guid)
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h
index 1e45158b353..31f0a1773da 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.h
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h
@@ -30,8 +30,8 @@ public:
typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer;
ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const;
- ArenaTeam* GetArenaTeamByName(const std::string& arenaTeamName) const;
- ArenaTeam* GetArenaTeamByCaptain(uint64 const guid) const;
+ ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const;
+ ArenaTeam* GetArenaTeamByCaptain(uint64 guid) const;
void LoadArenaTeams();
void AddArenaTeam(ArenaTeam* arenaTeam);
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp
index a0f590eca91..c03433e93b2 100755
--- a/src/server/game/Chat/Commands/Level2.cpp
+++ b/src/server/game/Chat/Commands/Level2.cpp
@@ -408,21 +408,31 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
// Add map, zone, subzone and phase to output
int locale = GetSessionDbcLocale();
+ std::string areaName = "<unknown>";
+ std::string zoneName = "";
MapEntry const* map = sMapStore.LookupEntry(mapId);
AreaTableEntry const* area = GetAreaEntryByAreaID(areaId);
- AreaTableEntry const* zone = NULL;
+ if (area)
+ {
+ areaName = area->area_name[locale];
+
+ AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone);
+
+ if (zone)
+ zoneName = zone->area_name[locale];
+ }
if (target)
{
- if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone))
- PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zone->area_name[locale], area->area_name[locale], phase);
+ if (!zoneName.empty())
+ PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], zoneName.c_str(), areaName.c_str(), phase);
else
- PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], area->area_name[locale], "--", phase);
+ PSendSysMessage(LANG_PINFO_MAP_ONLINE, map->name[locale], areaName.c_str(), "<unknown>", phase);
}
else
- PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], area->area_name[locale]);
+ PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], areaName.c_str());
return true;
}
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp
index 88477be6115..fc709599da5 100755
--- a/src/server/game/DataStores/DBCStores.cpp
+++ b/src/server/game/DataStores/DBCStores.cpp
@@ -18,7 +18,7 @@
#include "DBCStores.h"
-#include "Logging/Log.h"
+#include "Log.h"
#include "SharedDefines.h"
#include "SpellMgr.h"
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index c08255048b8..a45bafe8a2e 100755
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -1172,12 +1172,12 @@ struct LFGDungeonEntry
uint32 reclevel; // 20
uint32 recminlevel; // 21
uint32 recmaxlevel; // 22
- int32 map; // 23
+ int32 map; // 23
uint32 difficulty; // 24
- //uint32 unk; // 25
+ //uint32 flags; // 25
uint32 type; // 26
- //uint32 unk2; // 27
- //char* unk3; // 28
+ //uint32 unk; // 27
+ //char* iconname; // 28
uint32 expansion; // 29
//uint32 unk4; // 30
uint32 grouptype; // 31
@@ -1538,7 +1538,7 @@ struct SpellEntry
uint32 Effect[MAX_SPELL_EFFECTS]; // 71-73 m_effect
int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 74-76 m_effectDieSides
float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 77-79 m_effectRealPointsPerLevel
- int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints)
+ int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 80-82 m_effectBasePoints (must not be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints)
uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 83-85 m_effectMechanic
uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 86-88 m_implicitTargetA
uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 89-91 m_implicitTargetB
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 87466436980..4154b297d9e 100755
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -308,7 +308,7 @@ void LFGMgr::Update(uint32 diff)
@param[in] guid Player or group guid to add to queue
@param[in] queueId Queue Id to add player/group to
*/
-void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId)
+void LFGMgr::AddToQueue(uint64 guid, uint8 queueId)
{
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))
queueId = 0;
@@ -329,7 +329,7 @@ void LFGMgr::AddToQueue(const uint64 guid, uint8 queueId)
@param[in] guid Player or group guid to add to queue
@return true if guid was found in main queue.
*/
-bool LFGMgr::RemoveFromQueue(const uint64 guid)
+bool LFGMgr::RemoveFromQueue(uint64 guid)
{
for (LfgGuidListMap::iterator it = m_currentQueue.begin(); it != m_currentQueue.end(); ++it)
it->second.remove(guid);
@@ -1250,7 +1250,7 @@ bool LFGMgr::CheckGroupRoles(LfgRolesMap& groles, bool removeLeaderFlag /*= true
@param[in] guid Player guid to update answer
@param[in] accept Player answer
*/
-void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept)
+void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
{
// Check if the proposal exists
LfgProposalMap::iterator itProposal = m_Proposals.find(proposalId);
@@ -1364,17 +1364,29 @@ void LFGMgr::UpdateProposal(uint32 proposalId, const uint64 guid, bool accept)
switch(role)
{
case ROLE_DAMAGE:
- m_WaitTimeDps = int32((m_WaitTimeDps * m_NumWaitTimeDps + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeDps);
+ {
+ uint32 old_number = m_NumWaitTimeDps++;
+ m_WaitTimeDps = int32((m_WaitTimeDps * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeDps);
break;
+ }
case ROLE_HEALER:
- m_WaitTimeHealer = int32((m_WaitTimeHealer * m_NumWaitTimeHealer + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeHealer);
+ {
+ uint32 old_number = m_NumWaitTimeHealer++;
+ m_WaitTimeHealer = int32((m_WaitTimeHealer * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeHealer);
break;
+ }
case ROLE_TANK:
- m_WaitTimeTank = int32((m_WaitTimeTank * m_NumWaitTimeTank + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeTank);
+ {
+ uint32 old_number = m_NumWaitTimeTank++;
+ m_WaitTimeTank = int32((m_WaitTimeTank * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeTank);
break;
+ }
default:
- m_WaitTimeAvg = int32((m_WaitTimeAvg * m_NumWaitTimeAvg + waitTimesMap[plr->GetGUID()]) / ++m_NumWaitTimeAvg);
+ {
+ uint32 old_number = m_NumWaitTimeAvg++;
+ m_WaitTimeAvg = int32((m_WaitTimeAvg * old_number + waitTimesMap[plr->GetGUID()]) / m_NumWaitTimeAvg);
break;
+ }
}
grp->SetLfgRoles(pguid, pProposal->players[pguid]->role);
SetState(pguid, LFG_STATE_DUNGEON);
@@ -1519,7 +1531,7 @@ void LFGMgr::RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType t
@param[in] victim Victim guid
@param[in] reason Kick reason
*/
-void LFGMgr::InitBoot(Group* grp, const uint64 kicker, const uint64 victim, std::string reason)
+void LFGMgr::InitBoot(Group* grp, uint64 kicker, uint64 victim, std::string reason)
{
if (!grp)
return;
@@ -1889,7 +1901,7 @@ std::string LFGMgr::ConcatenateGuids(LfgGuidList check)
return o.str();
}
-LfgState LFGMgr::GetState(const uint64 guid)
+LfgState LFGMgr::GetState(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetState: [" UI64FMTD "]", guid);
if (IS_GROUP(guid))
@@ -1898,61 +1910,61 @@ LfgState LFGMgr::GetState(const uint64 guid)
return m_Players[guid].GetState();
}
-uint32 LFGMgr::GetDungeon(const uint64 guid, bool asId /*= true*/)
+uint32 LFGMgr::GetDungeon(uint64 guid, bool asId /*= true*/)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetDungeon: [" UI64FMTD "] asId: %u", guid, asId);
return m_Groups[guid].GetDungeon(asId);
}
-uint8 LFGMgr::GetRoles(const uint64 guid)
+uint8 LFGMgr::GetRoles(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetRoles: [" UI64FMTD "]", guid);
return m_Players[guid].GetRoles();
}
-const std::string& LFGMgr::GetComment(const uint64 guid)
+const std::string& LFGMgr::GetComment(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetComment: [" UI64FMTD "]", guid);
return m_Players[guid].GetComment();
}
-const LfgDungeonSet& LFGMgr::GetSelectedDungeons(const uint64 guid)
+const LfgDungeonSet& LFGMgr::GetSelectedDungeons(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetSelectedDungeons: [" UI64FMTD "]", guid);
return m_Players[guid].GetSelectedDungeons();
}
-const LfgLockMap& LFGMgr::GetLockedDungeons(const uint64 guid)
+const LfgLockMap& LFGMgr::GetLockedDungeons(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetLockedDungeons: [" UI64FMTD "]", guid);
return m_Players[guid].GetLockedDungeons();
}
-uint8 LFGMgr::GetKicksLeft(const uint64 guid)
+uint8 LFGMgr::GetKicksLeft(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetKicksLeft: [" UI64FMTD "]", guid);
return m_Groups[guid].GetKicksLeft();
}
-uint8 LFGMgr::GetVotesNeeded(const uint64 guid)
+uint8 LFGMgr::GetVotesNeeded(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::GetVotesNeeded: [" UI64FMTD "]", guid);
return m_Groups[guid].GetVotesNeeded();
}
-void LFGMgr::RestoreState(const uint64 guid)
+void LFGMgr::RestoreState(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RestoreState: [" UI64FMTD "]", guid);
m_Groups[guid].RestoreState();
}
-void LFGMgr::ClearState(const uint64 guid)
+void LFGMgr::ClearState(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::ClearState: [" UI64FMTD "]", guid);
m_Players[guid].ClearState();
}
-void LFGMgr::SetState(const uint64 guid, LfgState state)
+void LFGMgr::SetState(uint64 guid, LfgState state)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetState: [" UI64FMTD "] state %u", guid, state);
if (IS_GROUP(guid))
@@ -1961,43 +1973,43 @@ void LFGMgr::SetState(const uint64 guid, LfgState state)
m_Players[guid].SetState(state);
}
-void LFGMgr::SetDungeon(const uint64 guid, uint32 dungeon)
+void LFGMgr::SetDungeon(uint64 guid, uint32 dungeon)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetDungeon: [" UI64FMTD "] dungeon %u", guid, dungeon);
m_Groups[guid].SetDungeon(dungeon);
}
-void LFGMgr::SetRoles(const uint64 guid, uint8 roles)
+void LFGMgr::SetRoles(uint64 guid, uint8 roles)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetRoles: [" UI64FMTD "] roles: %u", guid, roles);
m_Players[guid].SetRoles(roles);
}
-void LFGMgr::SetComment(const uint64 guid, const std::string& comment)
+void LFGMgr::SetComment(uint64 guid, const std::string& comment)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetComment: [" UI64FMTD "] comment: %s", guid, comment.c_str());
m_Players[guid].SetComment(comment);
}
-void LFGMgr::SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons)
+void LFGMgr::SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetSelectedDungeons: [" UI64FMTD "]", guid);
m_Players[guid].SetSelectedDungeons(dungeons);
}
-void LFGMgr::SetLockedDungeons(const uint64 guid, const LfgLockMap& lock)
+void LFGMgr::SetLockedDungeons(uint64 guid, const LfgLockMap& lock)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::SetLockedDungeons: [" UI64FMTD "]", guid);
m_Players[guid].SetLockedDungeons(lock);
}
-void LFGMgr::DecreaseKicksLeft(const uint64 guid)
+void LFGMgr::DecreaseKicksLeft(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::DecreaseKicksLeft: [" UI64FMTD "]", guid);
m_Groups[guid].DecreaseKicksLeft();
}
-void LFGMgr::RemovePlayerData(const uint64 guid)
+void LFGMgr::RemovePlayerData(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemovePlayerData: [" UI64FMTD "]", guid);
LfgPlayerDataMap::iterator it = m_Players.find(guid);
@@ -2005,7 +2017,7 @@ void LFGMgr::RemovePlayerData(const uint64 guid)
m_Players.erase(it);
}
-void LFGMgr::RemoveGroupData(const uint64 guid)
+void LFGMgr::RemoveGroupData(uint64 guid)
{
sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::RemoveGroupData: [" UI64FMTD "]", guid);
LfgGroupDataMap::iterator it = m_Groups.find(guid);
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index 1ca256f5a92..6c42b1728c1 100755
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -272,45 +272,45 @@ class LFGMgr
void UpdateRoleCheck(uint64 gguid, uint64 guid = 0, uint8 roles = ROLE_NONE);
// Proposals
- void UpdateProposal(uint32 proposalId, const uint64 guid, bool accept);
+ void UpdateProposal(uint32 proposalId, uint64 guid, bool accept);
// Teleportation
void TeleportPlayer(Player* plr, bool out, bool fromOpcode = false);
// Vote kick
- void InitBoot(Group* grp, const uint64 kguid, const uint64 vguid, std::string reason);
+ void InitBoot(Group* grp, uint64 kguid, uint64 vguid, std::string reason);
void UpdateBoot(Player* plr, bool accept);
void OfferContinue(Group* grp);
void InitializeLockedDungeons(Player* plr);
- void SetComment(const uint64 guid, const std::string& comment);
- const LfgLockMap& GetLockedDungeons(const uint64 guid);
- LfgState GetState(const uint64 guid);
- const LfgDungeonSet& GetSelectedDungeons(const uint64 guid);
- uint32 GetDungeon(const uint64 guid, bool asId = true);
- void ClearState(const uint64 guid);
- void RemovePlayerData(const uint64 guid);
- void RemoveGroupData(const uint64 guid);
- uint8 GetKicksLeft(const uint64 gguid);
- uint8 GetVotesNeeded(const uint64 gguid);
- void SetRoles(const uint64 guid, uint8 roles);
+ void SetComment(uint64 guid, const std::string& comment);
+ const LfgLockMap& GetLockedDungeons(uint64 guid);
+ LfgState GetState(uint64 guid);
+ const LfgDungeonSet& GetSelectedDungeons(uint64 guid);
+ uint32 GetDungeon(uint64 guid, bool asId = true);
+ void ClearState(uint64 guid);
+ void RemovePlayerData(uint64 guid);
+ void RemoveGroupData(uint64 guid);
+ uint8 GetKicksLeft(uint64 gguid);
+ uint8 GetVotesNeeded(uint64 gguid);
+ void SetRoles(uint64 guid, uint8 roles);
private:
- uint8 GetRoles(const uint64 guid);
- const std::string& GetComment(const uint64 gguid);
- void RestoreState(const uint64 guid);
- void SetState(const uint64 guid, LfgState state);
- void SetDungeon(const uint64 guid, uint32 dungeon);
- void SetSelectedDungeons(const uint64 guid, const LfgDungeonSet& dungeons);
- void SetLockedDungeons(const uint64 guid, const LfgLockMap& lock);
- void DecreaseKicksLeft(const uint64 guid);
+ uint8 GetRoles(uint64 guid);
+ const std::string& GetComment(uint64 gguid);
+ void RestoreState(uint64 guid);
+ void SetState(uint64 guid, LfgState state);
+ void SetDungeon(uint64 guid, uint32 dungeon);
+ void SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons);
+ void SetLockedDungeons(uint64 guid, const LfgLockMap& lock);
+ void DecreaseKicksLeft(uint64 guid);
void NoExiste(uint8 lala);
// Queue
- void AddToQueue(const uint64 guid, uint8 queueId);
- bool RemoveFromQueue(const uint64 guid);
+ void AddToQueue(uint64 guid, uint8 queueId);
+ bool RemoveFromQueue(uint64 guid);
// Proposals
void RemoveProposal(LfgProposalMap::iterator itProposal, LfgUpdateType type);
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index bf61e98bb41..7ad0386dcae 100755
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -740,10 +740,10 @@ class Creature : public Unit, public GridObject<Creature>
class AssistDelayEvent : public BasicEvent
{
public:
- AssistDelayEvent(const uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
+ AssistDelayEvent(uint64 victim, Unit& owner) : BasicEvent(), m_victim(victim), m_owner(owner) { }
bool Execute(uint64 e_time, uint32 p_time);
- void AddAssistant(const uint64 guid) { m_assistants.push_back(guid); }
+ void AddAssistant(uint64 guid) { m_assistants.push_back(guid); }
private:
AssistDelayEvent();
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index 92c57009832..d1ad656ba3d 100755
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -203,7 +203,7 @@ void TempSummon::InitStats(uint32 duration)
if (m_Properties->Faction)
setFaction(m_Properties->Faction);
- else if (IsVehicle()) // properties should be vehicle
+ else if (IsVehicle() && owner) // properties should be vehicle
setFaction(owner->getFaction());
}
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 5308c30a196..83ece2eda31 100755
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1631,6 +1631,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
if (Unit* owner = GetOwner())
{
trigger->setFaction(owner->getFaction());
+ // needed for GO casts for proper target validation checks
+ trigger->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, owner->GetGUID());
trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID());
}
else
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 64c5db02b76..aa056e793f0 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -122,7 +122,7 @@ void Object::_InitValues()
memset(m_uint32Values, 0, m_valuesCount*sizeof(uint32));
_changedFields = new bool[m_valuesCount];
- memset(_changedFields, 0, sizeof(_changedFields));
+ memset(_changedFields, 0, m_valuesCount*sizeof(bool));
m_objectUpdated = false;
}
@@ -159,6 +159,30 @@ std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const
return ss.str();
}
+void Object::AddToWorld()
+{
+ if (m_inWorld)
+ return;
+
+ ASSERT(m_uint32Values);
+
+ m_inWorld = true;
+
+ // synchronize values mirror with values array (changes will send in updatecreate opcode any way
+ ClearUpdateMask(true);
+}
+
+void Object::RemoveFromWorld()
+{
+ if (!m_inWorld)
+ return;
+
+ m_inWorld = false;
+
+ // if we remove from world then sending changes not required
+ ClearUpdateMask(true);
+}
+
void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags) const
{
ByteBuffer buf(500);
@@ -296,17 +320,11 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const
*data << ((Unit*)this)->GetSpeed(MOVE_TURN_RATE);
*data << ((Unit*)this)->GetSpeed(MOVE_PITCH_RATE);
+ const Player* player = ToPlayer();
+
// 0x08000000
- if (GetTypeId() == TYPEID_PLAYER && this->ToPlayer()->isInFlight())
+ if (player && player->isInFlight())
{
- //WPAssert(this->ToPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE);
-
- Player* player = const_cast<Object*>(this)->ToPlayer();
- if (!player)
- return;
-
- FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(player->GetMotionMaster()->top());
-
uint32 flags3 = SPLINEFLAG_GLIDE;
*data << uint32(flags3); // splines flag?
@@ -330,7 +348,9 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags) const
}
}
- TaxiPathNodeList& path = const_cast<TaxiPathNodeList&>(fmg->GetPath());
+ FlightPathMovementGenerator *fmg =
+ (FlightPathMovementGenerator*)(player->GetMotionMaster()->top());
+ TaxiPathNodeList const& path = fmg->GetPath();
float x, y, z;
player->GetPosition(x, y, z);
@@ -750,7 +770,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
void Object::ClearUpdateMask(bool remove)
{
- memset(_changedFields, 0, sizeof(_changedFields));
+ memset(_changedFields, 0, m_valuesCount*sizeof(bool));
if (m_objectUpdated)
{
@@ -822,13 +842,10 @@ void Object::SetInt32Value(uint16 index, int32 value)
m_int32Values[index] = value;
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -842,13 +859,10 @@ void Object::SetUInt32Value(uint16 index, uint32 value)
m_uint32Values[index] = value;
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -861,51 +875,47 @@ void Object::UpdateUInt32Value(uint16 index, uint32 value)
_changedFields[index] = true;
}
-void Object::SetUInt64Value(uint16 index, uint64 const value)
+void Object::SetUInt64Value(uint16 index, uint64 value)
{
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true));
if (*((uint64*)&(m_uint32Values[index])) != value)
{
- m_uint32Values[index] = *((uint32*)&value);
- m_uint32Values[index + 1] = *(((uint32*)&value) + 1);
+ m_uint32Values[index] = PAIR64_LOPART(value);
+ m_uint32Values[index + 1] = PAIR64_HIPART(value);
_changedFields[index] = true;
_changedFields[index + 1] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
-bool Object::AddUInt64Value(uint16 index, uint64 const value)
+bool Object::AddUInt64Value(uint16 index, uint64 value)
{
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true));
if (value && !*((uint64*)&(m_uint32Values[index])))
{
- m_uint32Values[index] = *((uint32*)&value);
- m_uint32Values[index + 1] = *(((uint32*)&value) + 1);
+ m_uint32Values[index] = PAIR64_LOPART(value);
+ m_uint32Values[index + 1] = PAIR64_HIPART(value);
_changedFields[index] = true;
_changedFields[index + 1] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
+
return true;
}
+
return false;
}
-bool Object::RemoveUInt64Value(uint16 index, const uint64 value)
+bool Object::RemoveUInt64Value(uint16 index, uint64 value)
{
ASSERT(index + 1 < m_valuesCount || PrintIndexError(index , true));
if (value && *((uint64*)&(m_uint32Values[index])) == value)
@@ -915,13 +925,10 @@ bool Object::RemoveUInt64Value(uint16 index, const uint64 value)
_changedFields[index] = true;
_changedFields[index + 1] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
return true;
@@ -939,13 +946,10 @@ void Object::SetFloatValue(uint16 index, float value)
m_floatValues[index] = value;
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -966,13 +970,10 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value)
m_uint32Values[index] |= uint32(uint32(value) << (offset * 8));
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -993,13 +994,10 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value)
m_uint32Values[index] |= uint32(uint32(value) << (offset * 16));
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -1063,13 +1061,10 @@ void Object::SetFlag(uint16 index, uint32 newFlag)
m_uint32Values[index] = newval;
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -1087,13 +1082,10 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag)
m_uint32Values[index] = newval;
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -1113,13 +1105,10 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8));
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -1139,13 +1128,10 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag)
m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8));
_changedFields[index] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
}
@@ -1356,7 +1342,9 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool
bool WorldObject::IsWithinLOSInMap(const WorldObject* obj) const
{
- if (!IsInMap(obj)) return false;
+ if (!IsInMap(obj))
+ return false;
+
float ox, oy, oz;
obj->GetPosition(ox, oy, oz);
return(IsWithinLOS(ox, oy, oz));
@@ -1840,13 +1828,10 @@ void WorldObject::SendPlaySound(uint32 Sound, bool OnlySelf)
void Object::ForceValuesUpdateAtIndex(uint32 i)
{
_changedFields[i] = true;
- if (m_inWorld)
+ if (m_inWorld && !m_objectUpdated)
{
- if (!m_objectUpdated)
- {
- sObjectAccessor->AddUpdateObject(this);
- m_objectUpdated = true;
- }
+ sObjectAccessor->AddUpdateObject(this);
+ m_objectUpdated = true;
}
}
@@ -2043,6 +2028,12 @@ void Unit::BuildHeartBeatMsg(WorldPacket *data) const
BuildMovementPacket(data);
}
+void WorldObject::SendMessageToSet(WorldPacket *data, bool self)
+{
+ SendMessageToSetInRange(data, GetVisibilityRange(), self);
+}
+
+
void WorldObject::SendMessageToSetInRange(WorldPacket *data, float dist, bool /*self*/)
{
Trinity::MessageDistDeliverer notifier(this, data, dist);
@@ -2396,7 +2387,7 @@ Creature* WorldObject::SummonTrigger(float x, float y, float z, float ang, uint3
return summon;
}
-Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive)
+Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive) const
{
Creature *creature = NULL;
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range);
@@ -2405,7 +2396,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive
return creature;
}
-GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range)
+GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const
{
GameObject *go = NULL;
Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range);
@@ -2414,7 +2405,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range)
return go;
}
-void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange)
+void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const
{
CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY()));
Cell cell(pair);
@@ -2428,7 +2419,7 @@ void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList
cell.Visit(pair, visitor, *(this->GetMap()));
}
-void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange)
+void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const
{
CellPair pair(Trinity::ComputeCellPair(this->GetPositionX(), this->GetPositionY()));
Cell cell(pair);
@@ -2777,19 +2768,23 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/)
struct WorldObjectChangeAccumulator
{
- UpdateDataMapType &i_updateDatas;
- WorldObject &i_object;
+ UpdateDataMapType& i_updateDatas;
+ WorldObject& i_object;
std::set<uint64> plr_list;
WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d) : i_updateDatas(d), i_object(obj) {}
void Visit(PlayerMapType &m)
{
+ Player* source = NULL;
for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
- BuildPacket(iter->getSource());
- if (!iter->getSource()->GetSharedVisionList().empty())
+ source = iter->getSource();
+
+ BuildPacket(source);
+
+ if (!source->GetSharedVisionList().empty())
{
- SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
- for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
+ SharedVisionList::const_iterator it = source->GetSharedVisionList().begin();
+ for (; it != source->GetSharedVisionList().end(); ++it)
BuildPacket(*it);
}
}
@@ -2797,30 +2792,37 @@ struct WorldObjectChangeAccumulator
void Visit(CreatureMapType &m)
{
+ Creature* source = NULL;
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
- if (!iter->getSource()->GetSharedVisionList().empty())
+ source = iter->getSource();
+ if (!source->GetSharedVisionList().empty())
{
- SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin();
- for (; it != iter->getSource()->GetSharedVisionList().end(); ++it)
+ SharedVisionList::const_iterator it = source->GetSharedVisionList().begin();
+ for (; it != source->GetSharedVisionList().end(); ++it)
BuildPacket(*it);
}
}
}
+
void Visit(DynamicObjectMapType &m)
{
+ DynamicObject* source = NULL;
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
{
- uint64 guid = iter->getSource()->GetCasterGUID();
+ source = iter->getSource();
+ uint64 guid = source->GetCasterGUID();
+
if (IS_PLAYER_GUID(guid))
{
//Caster may be NULL if DynObj is in removelist
if (Player *caster = ObjectAccessor::FindPlayer(guid))
- if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID())
+ if (caster->GetUInt64Value(PLAYER_FARSIGHT) == source->GetGUID())
BuildPacket(caster);
}
}
}
+
void BuildPacket(Player* plr)
{
// Only send update once to a player
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 2b08758efc1..9de040714e5 100755
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -125,29 +125,9 @@ class Object
virtual ~Object ();
bool IsInWorld() const { return m_inWorld; }
- virtual void AddToWorld()
- {
- if (m_inWorld)
- return;
- ASSERT(m_uint32Values);
-
- m_inWorld = true;
-
- // synchronize values mirror with values array (changes will send in updatecreate opcode any way
- ClearUpdateMask(true);
- }
-
- virtual void RemoveFromWorld()
- {
- if (!m_inWorld)
- return;
-
- m_inWorld = false;
-
- // if we remove from world then sending changes not required
- ClearUpdateMask(true);
- }
+ virtual void AddToWorld();
+ virtual void RemoveFromWorld();
uint64 GetGUID() const { return GetUInt64Value(0); }
uint32 GetGUIDLow() const { return GUID_LOPART(GetUInt64Value(0)); }
@@ -210,7 +190,7 @@ class Object
void SetInt32Value(uint16 index, int32 value);
void SetUInt32Value(uint16 index, uint32 value);
void UpdateUInt32Value(uint16 index, uint32 value);
- void SetUInt64Value(uint16 index, uint64 const value);
+ void SetUInt64Value(uint16 index, uint64 value);
void SetFloatValue(uint16 index, float value);
void SetByteValue(uint16 index, uint8 offset, uint8 value);
void SetUInt16Value(uint16 index, uint8 offset, uint16 value);
@@ -218,8 +198,8 @@ class Object
void SetStatFloatValue(uint16 index, float value);
void SetStatInt32Value(uint16 index, int32 value);
- bool AddUInt64Value(uint16 index, uint64 const value);
- bool RemoveUInt64Value(uint16 index, uint64 const value);
+ bool AddUInt64Value(uint16 index, uint64 value);
+ bool RemoveUInt64Value(uint16 index, uint64 value);
void ApplyModUInt32Value(uint16 index, int32 val, bool apply);
void ApplyModInt32Value(uint16 index, int32 val, bool apply);
@@ -725,7 +705,7 @@ class WorldObject : public Object, public WorldLocation
virtual void CleanupsBeforeDelete(bool finalCleanup = true); // used in destructor or explicitly before mass creature delete to remove cross-references to already deleted units
- virtual void SendMessageToSet(WorldPacket *data, bool self) { SendMessageToSetInRange(data, GetVisibilityRange(), self); }
+ virtual void SendMessageToSet(WorldPacket *data, bool self);
virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self);
virtual void SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr);
@@ -806,11 +786,11 @@ class WorldObject : public Object, public WorldLocation
GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime);
Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL);
- Creature* FindNearestCreature(uint32 entry, float range, bool alive = true);
- GameObject* FindNearestGameObject(uint32 entry, float range);
+ Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const;
+ GameObject* FindNearestGameObject(uint32 entry, float range) const;
- void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange);
- void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange);
+ void GetGameObjectListWithEntryInGrid(std::list<GameObject*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
+ void GetCreatureListWithEntryInGrid(std::list<Creature*>& lList, uint32 uiEntry, float fMaxSearchRange) const;
void DestroyForNearbyPlayers();
virtual void UpdateObjectVisibility(bool forced = true);
@@ -884,11 +864,14 @@ namespace Trinity
template<class T>
void RandomResizeList(std::list<T> &_list, uint32 _size)
{
- while (_list.size() > _size)
+ size_t list_size = _list.size();
+
+ while (list_size > _size)
{
typename std::list<T>::iterator itr = _list.begin();
- advance(itr, urand(0, _list.size() - 1));
+ std::advance(itr, urand(0, list_size - 1));
_list.erase(itr);
+ --list_size;
}
}
diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h
index b231cb38e1a..6dd04e1dee4 100755
--- a/src/server/game/Entities/Object/ObjectDefines.h
+++ b/src/server/game/Entities/Object/ObjectDefines.h
@@ -78,7 +78,7 @@ enum HighGuid
#define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF))
#define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF))
-inline bool IsGuidHaveEnPart(uint64 const guid)
+inline bool IsGuidHaveEnPart(uint64 guid)
{
switch(GUID_HIPART(guid))
{
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp
index 3884ce9f26f..547c415bc73 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp
@@ -34,7 +34,7 @@ void UpdateData::AddOutOfRangeGUID(std::set<uint64>& guids)
m_outOfRangeGUIDs.insert(guids.begin(), guids.end());
}
-void UpdateData::AddOutOfRangeGUID(const uint64 guid)
+void UpdateData::AddOutOfRangeGUID(uint64 guid)
{
m_outOfRangeGUIDs.insert(guid);
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h
index f81a0464043..87e98ead61c 100755
--- a/src/server/game/Entities/Object/Updates/UpdateData.h
+++ b/src/server/game/Entities/Object/Updates/UpdateData.h
@@ -53,7 +53,7 @@ class UpdateData
UpdateData();
void AddOutOfRangeGUID(std::set<uint64>& guids);
- void AddOutOfRangeGUID(const uint64 guid);
+ void AddOutOfRangeGUID(uint64 guid);
void AddUpdateBlock(const ByteBuffer &block);
bool BuildPacket(WorldPacket* packet);
bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4c676241f85..58a297a8b2c 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -19610,8 +19610,8 @@ void Player::SendRemoveControlBar()
bool Player::IsAffectedBySpellmod(SpellInfo const *spellInfo, SpellModifier *mod, Spell* spell)
{
- if (!mod || !spellInfo)
- return false;
+ if (!mod || !spellInfo)
+ return false;
// Mod out of charges
if (spell && mod->charges == -1 && spell->m_appliedMods.find(mod->ownerAura) == spell->m_appliedMods.end())
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index fbfa5333eb1..9a0f35313f6 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1567,7 +1567,7 @@ class Player : public Unit, public GridObject<Player>
uint64 GetSelection() const { return m_curSelection; }
Unit *GetSelectedUnit() const;
Player *GetSelectedPlayer() const;
- void SetSelection(const uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); }
+ void SetSelection(uint64 guid) { m_curSelection = guid; SetUInt64Value(UNIT_FIELD_TARGET, guid); }
uint8 GetComboPoints() { return m_comboPoints; }
uint64 GetComboTarget() const { return m_comboTarget; }
@@ -1902,7 +1902,7 @@ class Player : public Unit, public GridObject<Player>
void UpdateRuneRegen(RuneType rune);
uint64 GetLootGUID() const { return m_lootGuid; }
- void SetLootGUID(const uint64 guid) { m_lootGuid = guid; }
+ void SetLootGUID(uint64 guid) { m_lootGuid = guid; }
void RemovedInsignia(Player* looterPlr);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 6086d5f9e2d..4cea8f56005 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2402,14 +2402,22 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spell)
}
// Check for attack from behind
- if (!victim->HasInArc(M_PI, this) && !victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ if (!victim->HasInArc(M_PI, this))
{
- // Can`t dodge from behind in PvP (but its possible in PvE)
- if (victim->GetTypeId() == TYPEID_PLAYER)
- canDodge = false;
- // Can`t parry or block
- canParry = false;
- canBlock = false;
+ if (!victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION))
+ {
+ // Can`t dodge from behind in PvP (but its possible in PvE)
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ canDodge = false;
+ // Can`t parry or block
+ canParry = false;
+ canBlock = false;
+ }
+ else // Only deterrence as of 3.3.5
+ {
+ if (spell->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET)
+ canParry = false;
+ }
}
// Check creatures flags_extra for disable parry
if (victim->GetTypeId() == TYPEID_UNIT)
@@ -5596,16 +5604,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 71203;
break;
}
- // Gaseous Bloat (Professor Putricide add)
- case 70215:
- case 72858:
- case 72859:
- case 72860:
- {
- target = getVictim();
- triggered_spell_id = 70701;
- break;
- }
// Essence of the Blood Queen
case 70871:
{
@@ -6467,16 +6465,14 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
}
case SPELLFAMILY_ROGUE:
{
- switch(dummySpell->Id)
+ switch (dummySpell->Id)
{
- // Glyph of Backstab
- case 56800:
+ case 56800: // Glyph of Backstab
{
triggered_spell_id = 63975;
break;
}
- // Deadly Throw Interrupt
- case 32748:
+ case 32748: // Deadly Throw Interrupt
{
// Prevent cast Deadly Throw Interrupt on self from last effect (apply dummy) of Deadly Throw
if (this == victim)
@@ -6486,124 +6482,126 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
break;
}
}
- // Cut to the Chase
- if (dummySpell->SpellIconID == 2909)
+
+ switch (dummySpell->SpellIconID)
{
- // "refresh your Slice and Dice duration to its 5 combo point maximum"
- // lookup Slice and Dice
- if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0))
+ case 2116: // Quick Recovery
{
- aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true);
- return true;
- }
- return false;
- }
- // Deadly Brew
- else if (dummySpell->SpellIconID == 2963)
- {
- triggered_spell_id = 3409;
- break;
- }
- // Quick Recovery
- else if (dummySpell->SpellIconID == 2116)
- {
- if (!procSpell)
- return false;
+ if (!procSpell)
+ return false;
- // energy cost save
- basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount);
- if (basepoints0 <= 0)
- return false;
+ // energy cost save
+ basepoints0 = CalculatePctN(int32(procSpell->ManaCost), triggerAmount);
+ if (basepoints0 <= 0)
+ return false;
- target = this;
- triggered_spell_id = 31663;
- break;
+ target = this;
+ triggered_spell_id = 31663;
+ break;
+ }
+ case 2909: // Cut to the Chase
+ {
+ // "refresh your Slice and Dice duration to its 5 combo point maximum"
+ // lookup Slice and Dice
+ if (AuraEffect const* aur = GetAuraEffect(SPELL_AURA_MOD_MELEE_HASTE, SPELLFAMILY_ROGUE, 0x40000, 0, 0))
+ {
+ aur->GetBase()->SetDuration(aur->GetSpellInfo()->GetMaxDuration(), true);
+ return true;
+ }
+ return false;
+ }
+ case 2963: // Deadly Brew
+ {
+ triggered_spell_id = 3409;
+ break;
+ }
}
break;
}
case SPELLFAMILY_HUNTER:
{
- // Thrill of the Hunt
- if (dummySpell->SpellIconID == 2236)
+ switch (dummySpell->SpellIconID)
{
- if (!procSpell)
- return false;
+ case 267: // Improved Mend Pet
+ {
+ int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue();
+ if (!roll_chance_i(chance))
+ return false;
- Spell* spell = ToPlayer()->m_spellModTakingSpell;
+ triggered_spell_id = 24406;
+ break;
+ }
+ case 2236: // Thrill of the Hunt
+ {
+ if (!procSpell)
+ return false;
- // Disable charge drop because of Lock and Load
- ToPlayer()->SetSpellModTakingSpell(spell, false);
+ Spell* spell = ToPlayer()->m_spellModTakingSpell;
- // Explosive Shot
- if (procSpell->SpellFamilyFlags[2] & 0x200)
- {
- if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID()))
- basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3;
- }
- else
- basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10;
+ // Disable charge drop because of Lock and Load
+ ToPlayer()->SetSpellModTakingSpell(spell, false);
- ToPlayer()->SetSpellModTakingSpell(spell, true);
+ // Explosive Shot
+ if (procSpell->SpellFamilyFlags[2] & 0x200)
+ {
+ if (AuraEffect const* pEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DUMMY, SPELLFAMILY_HUNTER, 0x0, 0x80000000, 0x0, GetGUID()))
+ basepoints0 = pEff->GetSpellInfo()->CalcPowerCost(this, SpellSchoolMask(pEff->GetSpellInfo()->SchoolMask)) * 4/10/3;
+ }
+ else
+ basepoints0 = procSpell->CalcPowerCost(this, SpellSchoolMask(procSpell->SchoolMask)) * 4/10;
- if (basepoints0 <= 0)
- return false;
+ ToPlayer()->SetSpellModTakingSpell(spell, true);
- target = this;
- triggered_spell_id = 34720;
- break;
- }
- // Hunting Party
- if (dummySpell->SpellIconID == 3406)
- {
- triggered_spell_id = 57669;
- target = this;
- break;
- }
- // Improved Mend Pet
- if (dummySpell->SpellIconID == 267)
- {
- int32 chance = triggeredByAura->GetSpellInfo()->Effects[triggeredByAura->GetEffIndex()].CalcValue();
- if (!roll_chance_i(chance))
- return false;
+ if (basepoints0 <= 0)
+ return false;
- triggered_spell_id = 24406;
- break;
- }
- // Lock and Load
- if (dummySpell->SpellIconID == 3579)
- {
- // Proc only from periodic (from trap activation proc another aura of this spell)
- if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount))
- return false;
- triggered_spell_id = 56453;
- target = this;
- break;
- }
- // Rapid Recuperation
- if (dummySpell->SpellIconID == 3560)
- {
- // This effect only from Rapid Killing (mana regen)
- if (!(procSpell->SpellFamilyFlags[1] & 0x01000000))
- return false;
+ target = this;
+ triggered_spell_id = 34720;
+ break;
+ }
+ case 3406: // Hunting Party
+ {
+ triggered_spell_id = 57669;
+ target = this;
+ break;
+ }
+ case 3560: // Rapid Recuperation
+ {
+ // This effect only from Rapid Killing (mana regen)
+ if (!(procSpell->SpellFamilyFlags[1] & 0x01000000))
+ return false;
- target = this;
+ target = this;
- switch(dummySpell->Id)
+ switch (dummySpell->Id)
+ {
+ case 53228: // Rank 1
+ triggered_spell_id = 56654;
+ break;
+ case 53232: // Rank 2
+ triggered_spell_id = 58882;
+ break;
+ }
+ break;
+ }
+ case 3579: // Lock and Load
{
- case 53228: // Rank 1
- triggered_spell_id = 56654;
- break;
- case 53232: // Rank 2
- triggered_spell_id = 58882;
- break;
+ // Proc only from periodic (from trap activation proc another aura of this spell)
+ if (!(procFlag & PROC_FLAG_DONE_PERIODIC) || !roll_chance_i(triggerAmount))
+ return false;
+ triggered_spell_id = 56453;
+ target = this;
+ break;
}
- break;
}
- // Glyph of Mend Pet
- if (dummySpell->Id == 57870)
+
+ switch (dummySpell->Id)
{
- victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID());
- return true;
+ case 57870: // Glyph of Mend Pet
+ {
+ victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID());
+ return true;
+ }
}
break;
}
@@ -7906,6 +7904,27 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp
RemoveAuraFromStack(71564);
*handled = true;
break;
+ // Gaseous Bloat
+ case 70672:
+ case 72455:
+ case 72832:
+ case 72833:
+ {
+ *handled = true;
+ uint32 stack = triggeredByAura->GetStackAmount();
+ int32 const mod = (GetMap()->GetSpawnMode() & 1) ? 1500 : 1250;
+ int32 dmg = 0;
+ for (uint8 i = 1; i < stack; ++i)
+ dmg += mod * stack;
+ if (Unit* caster = triggeredByAura->GetCaster())
+ {
+ caster->CastCustomSpell(70701, SPELLVALUE_BASE_POINT0, dmg);
+ if (Creature* creature = caster->ToCreature())
+ creature->DespawnOrUnsummon(1);
+ }
+ break;
+ }
+ // Ball of Flames Proc
case 71756:
case 72782:
case 72783:
@@ -8400,76 +8419,42 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
target = this;
break;
}
- // Lightning Capacitor
- case 37657:
+ case 37657: // Lightning Capacitor
+ case 54841: // Thunder Capacitor
+ case 67712: // Item - Coliseum 25 Normal Caster Trinket
+ case 67758: // Item - Coliseum 25 Heroic Caster Trinket
{
- if (!victim || !victim->isAlive())
+ if (!victim || !victim->isAlive() || GetTypeId() != TYPEID_PLAYER)
return false;
- // stacking
- CastSpell(this, 37658, true, NULL, triggeredByAura);
- Aura* dummy = GetAura(37658);
- // release at 3 aura in stack (cont contain in basepoint of trigger aura)
- if (!dummy || dummy->GetStackAmount() < triggerAmount)
- return false;
-
- RemoveAurasDueToSpell(37658);
- trigger_spell_id = 37661;
- target = victim;
- break;
- }
- // Thunder Capacitor
- case 54841:
- {
- if (!victim || !victim->isAlive())
- return false;
- // stacking
- CastSpell(this, 54842, true, NULL, triggeredByAura);
-
- // counting
- Aura* dummy = GetAura(54842);
- // release at 3 aura in stack (cont contain in basepoint of trigger aura)
- if (!dummy || dummy->GetStackAmount() < triggerAmount)
- return false;
-
- RemoveAurasDueToSpell(54842);
- trigger_spell_id = 54843;
- target = victim;
- break;
- }
- //Item - Coliseum 25 Normal Caster Trinket
- case 67712:
- {
- if (!victim || !victim->isAlive())
- return false;
- // stacking
- CastSpell(this, 67713, true, NULL, triggeredByAura);
-
- Aura* dummy = GetAura(67713);
- // release at 3 aura in stack (cont contain in basepoint of trigger aura)
- if (!dummy || dummy->GetStackAmount() < triggerAmount)
- return false;
+ uint32 stack_spell_id = 0;
+ switch (auraSpellInfo->Id)
+ {
+ case 37657:
+ stack_spell_id = 37658;
+ trigger_spell_id = 37661;
+ break;
+ case 54841:
+ stack_spell_id = 54842;
+ trigger_spell_id = 54843;
+ break;
+ case 67712:
+ stack_spell_id = 67713;
+ trigger_spell_id = 67714;
+ break;
+ case 67758:
+ stack_spell_id = 67759;
+ trigger_spell_id = 67760;
+ break;
+ }
- RemoveAurasDueToSpell(67713);
- trigger_spell_id = 67714;
- target = victim;
- break;
- }
- //Item - Coliseum 25 Heroic Caster Trinket
- case 67758:
- {
- if (!victim || !victim->isAlive())
- return false;
- // stacking
- CastSpell(this, 67759, true, NULL, triggeredByAura);
+ CastSpell(this, stack_spell_id, true, NULL, triggeredByAura);
- Aura* dummy = GetAura(67759);
- // release at 3 aura in stack (cont contain in basepoint of trigger aura)
+ Aura* dummy = GetAura(stack_spell_id);
if (!dummy || dummy->GetStackAmount() < triggerAmount)
return false;
- RemoveAurasDueToSpell(67759);
- trigger_spell_id = 67760;
+ RemoveAurasDueToSpell(stack_spell_id);
target = victim;
break;
}
@@ -11732,8 +11717,6 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT
else
TakenFlatBenefit += victim->GetTotalAuraModifier(SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN);
- Player* player = ToPlayer();
-
// Done/Taken total percent damage auras
float DoneTotalMod = 1.0f;
float TakenTotalMod = 1.0f;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 383bf125239..e777f16b99a 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -174,7 +174,7 @@ enum UnitStandFlags
{
UNIT_STAND_FLAGS_UNK1 = 0x01,
UNIT_STAND_FLAGS_CREEP = 0x02,
- UNIT_STAND_FLAGS_UNK3 = 0x04,
+ UNIT_STAND_FLAGS_UNTRACKABLE = 0x04,
UNIT_STAND_FLAGS_UNK4 = 0x08,
UNIT_STAND_FLAGS_UNK5 = 0x10,
UNIT_STAND_FLAGS_ALL = 0xFF
@@ -185,7 +185,7 @@ enum UnitBytes1_Flags
{
UNIT_BYTE1_FLAG_ALWAYS_STAND = 0x01,
UNIT_BYTE1_FLAG_UNK_2 = 0x02,
- UNIT_BYTE1_FLAG_UNTRACKABLE = 0x04,
+ UNIT_BYTE1_FLAG_UNK_3 = 0x04,
UNIT_BYTE1_FLAG_ALL = 0xFF
};
@@ -2050,7 +2050,8 @@ class Unit : public WorldObject
static Player* GetPlayer(WorldObject& object, uint64 guid);
static Creature* GetCreature(WorldObject& object, uint64 guid);
- MotionMaster* GetMotionMaster(){ return &i_motionMaster; }
+ MotionMaster* GetMotionMaster() { return &i_motionMaster; }
+ const MotionMaster* GetMotionMaster() const { return &i_motionMaster; }
bool IsStopped() const { return !(HasUnitState(UNIT_STAT_MOVING)); }
void StopMoving();
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 52f94f10b40..b9e00bc7231 100755
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -270,7 +270,7 @@ void Group::RemoveAllInvites()
m_invitees.clear();
}
-Player* Group::GetInvited(const uint64 guid) const
+Player* Group::GetInvited(uint64 guid) const
{
for (InvitesList::const_iterator itr = m_invitees.begin(); itr != m_invitees.end(); ++itr)
{
@@ -387,7 +387,7 @@ bool Group::AddMember(Player* player)
return true;
}
-bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/)
+bool Group::RemoveMember(uint64 guid, const RemoveMethod &method /*= GROUP_REMOVEMETHOD_DEFAULT*/, uint64 kicker /*= 0*/, const char* reason /*= NULL*/)
{
BroadcastGroupUpdate();
@@ -498,7 +498,7 @@ bool Group::RemoveMember(const uint64 guid, const RemoveMethod &method /*= GROUP
}
}
-void Group::ChangeLeader(const uint64 guid)
+void Group::ChangeLeader(uint64 guid)
{
member_witerator slot = _getMemberWSlot(guid);
@@ -652,7 +652,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r)
}
}
-void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
+void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
{
WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1+1));
data << uint64(SourceGuid); // guid of the item rolled
@@ -676,7 +676,7 @@ void Group::SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8
}
}
-void Group::SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
+void Group::SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)
{
WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1));
data << uint64(SourceGuid); // guid of the item rolled
@@ -949,7 +949,7 @@ void Group::MasterLoot(Loot* /*loot*/, WorldObject* pLootedObject)
}
}
-void Group::CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choice)
+void Group::CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choice)
{
Rolls::iterator rollI = GetRoll(Guid);
if (rollI == RollId.end())
@@ -1295,7 +1295,7 @@ void Group::OfflineReadyCheck()
}
}
-bool Group::_setMembersGroup(const uint64 guid, uint8 group)
+bool Group::_setMembersGroup(uint64 guid, uint8 group)
{
member_witerator slot = _getMemberWSlot(guid);
if (slot == m_memberSlots.end())
@@ -1322,7 +1322,7 @@ bool Group::SameSubGroup(Player const* member1, Player const* member2) const
}
// Allows setting sub groups both for online or offline members
-void Group::ChangeMembersGroup(const uint64 guid, uint8 group)
+void Group::ChangeMembersGroup(uint64 guid, uint8 group)
{
// Only raid groups have sub groups
if (!isRaidGroup())
@@ -1767,7 +1767,7 @@ void Group::SetLootMethod(LootMethod method)
m_lootMethod = method;
}
-void Group::SetLooterGuid(const uint64 guid)
+void Group::SetLooterGuid(uint64 guid)
{
m_looterGuid = guid;
}
@@ -1847,12 +1847,12 @@ ItemQualities Group::GetLootThreshold() const
return m_lootThreshold;
}
-bool Group::IsMember(const uint64 guid) const
+bool Group::IsMember(uint64 guid) const
{
return _getMemberCSlot(guid) != m_memberSlots.end();
}
-bool Group::IsLeader(const uint64 guid) const
+bool Group::IsLeader(uint64 guid) const
{
return (GetLeaderGUID() == guid);
}
@@ -1873,7 +1873,7 @@ bool Group::IsAssistant(uint64 guid) const
return mslot->flags & MEMBER_FLAG_ASSISTANT;
}
-bool Group::SameSubGroup(uint64 guid1, const uint64 guid2) const
+bool Group::SameSubGroup(uint64 guid1, uint64 guid2) const
{
member_citerator mslot2 = _getMemberCSlot(guid2);
if (mslot2 == m_memberSlots.end())
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index ff9114b8c71..083e6e15225 100755
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -191,10 +191,10 @@ class Group
void RemoveAllInvites();
bool AddLeaderInvite(Player* player);
bool AddMember(Player* player);
- bool RemoveMember(const uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL);
- void ChangeLeader(const uint64 guid);
+ bool RemoveMember(uint64 guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, uint64 kicker = 0, const char* reason = NULL);
+ void ChangeLeader(uint64 guid);
void SetLootMethod(LootMethod method);
- void SetLooterGuid(const uint64 guid);
+ void SetLooterGuid(uint64 guid);
void UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed = false);
void SetLootThreshold(ItemQualities threshold);
void Disband(bool hideDestroy=false);
@@ -217,15 +217,15 @@ class Group
uint32 GetDbStoreId() { return m_dbStoreId; };
// member manipulation methods
- bool IsMember(const uint64 guid) const;
- bool IsLeader(const uint64 guid) const;
+ bool IsMember(uint64 guid) const;
+ bool IsLeader(uint64 guid) const;
uint64 GetMemberGUID(const std::string& name);
bool IsAssistant(uint64 guid) const;
- Player* GetInvited(const uint64 guid) const;
+ Player* GetInvited(uint64 guid) const;
Player* GetInvited(const std::string& name) const;
- bool SameSubGroup(uint64 guid1, const uint64 guid2) const;
+ bool SameSubGroup(uint64 guid1, uint64 guid2) const;
bool SameSubGroup(uint64 guid1, MemberSlot const* slot2) const;
bool SameSubGroup(Player const* member1, Player const* member2) const;
bool HasFreeSlotSubGroup(uint8 subgroup) const;
@@ -241,7 +241,7 @@ class Group
void SetBattlegroundGroup(Battleground *bg);
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);
- void ChangeMembersGroup(const uint64 guid, uint8 group);
+ void ChangeMembersGroup(uint64 guid, uint8 group);
void ChangeMembersGroup(Player* player, uint8 group);
void SetTargetIcon(uint8 id, uint64 whoGuid, uint64 targetGuid);
void SetGroupMemberFlag(uint64 guid, bool apply, GroupMemberFlags flag);
@@ -272,8 +272,8 @@ class Group
bool isRollLootActive() const;
void SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r);
- void SendLootRoll(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
- void SendLootRollWon(const uint64 SourceGuid, const uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
+ void SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
+ void SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r);
void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r);
void SendLooter(Creature *pCreature, Player *pLooter);
void GroupLoot(Loot *loot, WorldObject* pLootedObject);
@@ -281,7 +281,7 @@ class Group
void MasterLoot(Loot *loot, WorldObject* pLootedObject);
Rolls::iterator GetRoll(uint64 Guid);
void CountTheRoll(Rolls::iterator roll, uint32 NumberOfPlayers);
- void CountRollVote(const uint64 playerGUID, const uint64 Guid, uint32 NumberOfPlayers, uint8 Choise);
+ void CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise);
void EndRoll(Loot *loot);
// related to disenchant rolls
@@ -301,7 +301,7 @@ class Group
void BroadcastGroupUpdate(void);
protected:
- bool _setMembersGroup(const uint64 guid, uint8 group);
+ bool _setMembersGroup(uint64 guid, uint8 group);
void _homebindIfInstance(Player* player);
void _initRaidSubGroupsCounter();
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index accfba7812a..63aa0f88b14 100755
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1508,7 +1508,7 @@ void Guild::HandleRemoveMember(WorldSession* session, const std::string& name)
SendCommandResult(session, GUILD_QUIT_S, ERR_GUILD_RANK_TOO_HIGH_S, name);
else
{
- const uint64 guid = pMember->GetGUID();
+ uint64 guid = pMember->GetGUID();
// After call to DeleteMember pointer to member becomes invalid
DeleteMember(guid, false, true);
_LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), GUID_LOPART(guid));
@@ -1790,7 +1790,7 @@ void Guild::SendBankTabText(WorldSession *session, uint8 tabId) const
void Guild::SendPermissions(WorldSession *session) const
{
- const uint64 guid = session->GetPlayer()->GetGUID();
+ uint64 guid = session->GetPlayer()->GetGUID();
uint8 rankId = session->GetPlayer()->GetRank();
WorldPacket data(MSG_GUILD_PERMISSIONS, 4 * 15 + 1);
@@ -2063,7 +2063,7 @@ void Guild::BroadcastPacket(WorldPacket* packet) const
///////////////////////////////////////////////////////////////////////////////
// Members handling
-bool Guild::AddMember(const uint64 guid, uint8 rankId)
+bool Guild::AddMember(uint64 guid, uint8 rankId)
{
Player* player = ObjectAccessor::FindPlayer(guid);
// Player cannot be in guild
@@ -2132,7 +2132,7 @@ bool Guild::AddMember(const uint64 guid, uint8 rankId)
return true;
}
-void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked)
+void Guild::DeleteMember(uint64 guid, bool isDisbanding, bool isKicked)
{
uint32 lowguid = GUID_LOPART(guid);
Player* player = ObjectAccessor::FindPlayer(guid);
@@ -2188,7 +2188,7 @@ void Guild::DeleteMember(const uint64 guid, bool isDisbanding, bool isKicked)
_UpdateAccountsNumber();
}
-bool Guild::ChangeMemberRank(const uint64 guid, uint8 newRank)
+bool Guild::ChangeMemberRank(uint64 guid, uint8 newRank)
{
if (newRank <= _GetLowestRankId()) // Validate rank (allow only existing ranks)
if (Member* pMember = GetMember(guid))
@@ -2352,7 +2352,7 @@ void Guild::_DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB)
m_bankTabs.clear();
}
-bool Guild::_ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add)
+bool Guild::_ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add)
{
if (add)
m_bankMoney += amount;
@@ -2448,21 +2448,21 @@ inline uint8 Guild::_GetRankBankTabRights(uint8 rankId, uint8 tabId) const
return 0;
}
-inline uint32 Guild::_GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const
+inline uint32 Guild::_GetMemberRemainingSlots(uint64 guid, uint8 tabId) const
{
if (const Member* pMember = GetMember(guid))
return pMember->GetBankRemainingValue(tabId, this);
return 0;
}
-inline uint32 Guild::_GetMemberRemainingMoney(const uint64 guid) const
+inline uint32 Guild::_GetMemberRemainingMoney(uint64 guid) const
{
if (const Member* pMember = GetMember(guid))
return pMember->GetBankRemainingValue(GUILD_BANK_MAX_TABS, this);
return 0;
}
-inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId)
+inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId)
{
// Remaining slots must be more then 0
if (uint32 remainingSlots = _GetMemberRemainingSlots(guid, tabId))
@@ -2472,7 +2472,7 @@ inline void Guild::_DecreaseMemberRemainingSlots(SQLTransaction& trans, const ui
pMember->DecreaseBankRemainingValue(trans, tabId, 1);
}
-inline bool Guild::_MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const
+inline bool Guild::_MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const
{
if (const Member* pMember = GetMember(guid))
{
@@ -2632,7 +2632,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError
void Guild::_SendBankContent(WorldSession *session, uint8 tabId) const
{
- const uint64 guid = session->GetPlayer()->GetGUID();
+ uint64 guid = session->GetPlayer()->GetGUID();
if (_MemberHasTabRights(guid, tabId, GUILD_BANK_RIGHT_VIEW_TAB))
if (const BankTab* pTab = GetBankTab(tabId))
{
@@ -2726,7 +2726,7 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const
}
}
-void Guild::_BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1, const char* param2, const char* param3) const
+void Guild::_BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1, const char* param2, const char* param3) const
{
uint8 count = !param3 ? (!param2 ? (!param1 ? 0 : 1) : 2) : 3;
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index f38d444bbb4..40a281bf122 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -257,7 +257,7 @@ private:
};
public:
- Member(uint32 guildId, const uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { }
+ Member(uint32 guildId, uint64 guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_logoutTime(::time(NULL)), m_rankId(rankId) { }
void SetStats(Player* player);
void SetStats(const std::string& name, uint8 level, uint8 _class, uint32 zoneId, uint32 accountId);
@@ -280,7 +280,7 @@ private:
inline void UpdateLogoutTime() { m_logoutTime = ::time(NULL); }
inline bool IsRank(uint8 rankId) const { return m_rankId == rankId; }
inline bool IsRankNotLower(uint8 rankId) const { return m_rankId <= rankId; }
- inline bool IsSamePlayer(const uint64 guid) const { return m_guid == guid; }
+ inline bool IsSamePlayer(uint64 guid) const { return m_guid == guid; }
void DecreaseBankRemainingValue(SQLTransaction& trans, uint8 tabId, uint32 amount);
uint32 GetBankRemainingValue(uint8 tabId, const Guild* guild) const;
@@ -656,9 +656,9 @@ public:
// Members
// Adds member to guild. If rankId == GUILD_RANK_NONE, lowest rank is assigned.
- bool AddMember(const uint64 guid, uint8 rankId = GUILD_RANK_NONE);
- void DeleteMember(const uint64 guid, bool isDisbanding = false, bool isKicked = false);
- bool ChangeMemberRank(const uint64 guid, uint8 newRank);
+ bool AddMember(uint64 guid, uint8 rankId = GUILD_RANK_NONE);
+ void DeleteMember(uint64 guid, bool isDisbanding = false, bool isKicked = false);
+ bool ChangeMemberRank(uint64 guid, uint8 newRank);
// Bank
void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount);
@@ -698,12 +698,12 @@ private:
inline BankTab* GetBankTab(uint8 tabId) { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; }
inline const BankTab* GetBankTab(uint8 tabId) const { return tabId < m_bankTabs.size() ? m_bankTabs[tabId] : NULL; }
- inline const Member* GetMember(const uint64 guid) const
+ inline const Member* GetMember(uint64 guid) const
{
Members::const_iterator itr = m_members.find(GUID_LOPART(guid));
return itr != m_members.end() ? itr->second : NULL;
}
- inline Member* GetMember(const uint64 guid)
+ inline Member* GetMember(uint64 guid)
{
Members::iterator itr = m_members.find(GUID_LOPART(guid));
return itr != m_members.end() ? itr->second : NULL;
@@ -736,7 +736,7 @@ private:
void _UpdateAccountsNumber();
bool _IsLeader(Player* player) const;
void _DeleteBankItems(SQLTransaction& trans, bool removeItemsFromDB = false);
- bool _ModifyBankMoney(SQLTransaction& trans, const uint64 amount, bool add);
+ bool _ModifyBankMoney(SQLTransaction& trans, uint64 amount, bool add);
void _SetLeaderGUID(Member* pLeader);
void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay);
@@ -747,10 +747,10 @@ private:
uint32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const;
std::string _GetRankName(uint8 rankId) const;
- uint32 _GetMemberRemainingSlots(const uint64 guid, uint8 tabId) const;
- uint32 _GetMemberRemainingMoney(const uint64 guid) const;
- void _DecreaseMemberRemainingSlots(SQLTransaction& trans, const uint64 guid, uint8 tabId);
- bool _MemberHasTabRights(const uint64 guid, uint8 tabId, uint32 rights) const;
+ uint32 _GetMemberRemainingSlots(uint64 guid, uint8 tabId) const;
+ uint32 _GetMemberRemainingMoney(uint64 guid) const;
+ void _DecreaseMemberRemainingSlots(SQLTransaction& trans, uint64 guid, uint8 tabId);
+ bool _MemberHasTabRights(uint64 guid, uint8 tabId, uint32 rights) const;
void _LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2 = 0, uint8 newRank = 0);
void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0);
@@ -765,6 +765,6 @@ private:
void _SendBankContentUpdate(MoveItemData* pSrc, MoveItemData* pDest) const;
void _SendBankContentUpdate(uint8 tabId, SlotIds slots) const;
- void _BroadcastEvent(GuildEvents guildEvent, const uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const;
+ void _BroadcastEvent(GuildEvents guildEvent, uint64 guid, const char* param1 = NULL, const char* param2 = NULL, const char* param3 = NULL) const;
};
#endif
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 68ea5bfbbcb..8eac07918de 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -81,7 +81,7 @@ std::string GuildMgr::GetGuildNameById(uint32 guildId) const
return "";
}
-Guild* GuildMgr::GetGuildByLeader(const uint64 guid) const
+Guild* GuildMgr::GetGuildByLeader(uint64 guid) const
{
for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr)
if (itr->second->GetLeaderGUID() == guid)
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index ce756fceb69..e53c46cb6be 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -23,13 +23,14 @@
class GuildMgr
{
friend class ACE_Singleton<GuildMgr, ACE_Null_Mutex>;
+private:
GuildMgr();
~GuildMgr();
public:
typedef UNORDERED_MAP<uint32, Guild*> GuildContainer;
- Guild* GetGuildByLeader(uint64 const guid) const;
+ Guild* GetGuildByLeader(uint64 guid) const;
Guild* GetGuildById(uint32 guildId) const;
Guild* GetGuildByName(const std::string& guildName) const;
std::string GetGuildNameById(uint32 guildId) const;
diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
index fe7e6a0f104..cf58f16c445 100755
--- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp
@@ -770,7 +770,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke
if (mask & GROUP_UPDATE_FLAG_AURAS)
{
- const uint64 auramask = player->GetAuraUpdateMaskForRaid();
+ uint64 auramask = player->GetAuraUpdateMaskForRaid();
*data << uint64(auramask);
for (uint32 i = 0; i < MAX_AURAS; ++i)
{
@@ -860,7 +860,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke
{
if (pet)
{
- const uint64 auramask = pet->GetAuraUpdateMaskForRaid();
+ uint64 auramask = pet->GetAuraUpdateMaskForRaid();
*data << uint64(auramask);
for (uint32 i = 0; i < MAX_AURAS; ++i)
{
diff --git a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
index 67272f4d5ec..f763d5bc966 100755
--- a/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/PetHandler.cpp
@@ -576,7 +576,6 @@ void WorldSession::HandlePetSetAction(WorldPacket & recv_data)
for (Unit::ControlList::iterator itr = GetPlayer()->m_Controlled.begin(); itr != GetPlayer()->m_Controlled.end(); ++itr)
if ((*itr)->GetEntry() == pet->GetEntry())
(*itr)->GetCharmInfo()->ToggleCreatureAutocast(spellInfo, false);
-
}
}
diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
index 716aaa9e74f..45d4414d9ed 100755
--- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
@@ -295,12 +295,8 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket & recv_data)
if (_player->m_mover != _player)
return;
- GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid);
-
- if (!obj)
- return;
-
- obj->Use(_player);
+ if (GameObject *obj = GetPlayer()->GetMap()->GetGameObject(guid))
+ obj->Use(_player);
}
void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket)
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 96d6505a764..727e48b2041 100755
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -22,15 +22,15 @@
enum AURA_FLAGS
{
- AFLAG_NONE = 0x00,
- AFLAG_EFF_INDEX_0 = 0x01,
- AFLAG_EFF_INDEX_1 = 0x02,
- AFLAG_EFF_INDEX_2 = 0x04,
- AFLAG_CASTER = 0x08,
- AFLAG_POSITIVE = 0x10,
- AFLAG_DURATION = 0x20,
- AFLAG_UNK2 = 0x40,
- AFLAG_NEGATIVE = 0x80
+ AFLAG_NONE = 0x00,
+ AFLAG_EFF_INDEX_0 = 0x01,
+ AFLAG_EFF_INDEX_1 = 0x02,
+ AFLAG_EFF_INDEX_2 = 0x04,
+ AFLAG_CASTER = 0x08,
+ AFLAG_POSITIVE = 0x10,
+ AFLAG_DURATION = 0x20,
+ AFLAG_ANY_EFFECT_AMOUNT_SENT = 0x40, // used with AFLAG_EFF_INDEX_0/1/2
+ AFLAG_NEGATIVE = 0x80
};
// these are modes, in which aura effect handler may be called
@@ -221,7 +221,7 @@ enum AuraType
SPELL_AURA_NO_PVP_CREDIT = 159,
SPELL_AURA_MOD_AOE_AVOIDANCE = 160,
SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161,
- SPELL_AURA_POWER_BURN_MANA = 162,
+ SPELL_AURA_POWER_BURN = 162,
SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163,
SPELL_AURA_164 = 164,
SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165,
@@ -276,7 +276,7 @@ enum AuraType
SPELL_AURA_214 = 214,
SPELL_AURA_ARENA_PREPARATION = 215,
SPELL_AURA_HASTE_SPELLS = 216,
- SPELL_AURA_217 = 217,
+ SPELL_AURA_MOD_MELEE_HASTE_2 = 217, // NYI
SPELL_AURA_HASTE_RANGED = 218,
SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219,
SPELL_AURA_MOD_RATING_FROM_STAT = 220,
@@ -292,7 +292,7 @@ enum AuraType
SPELL_AURA_230 = 230,
SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231,
SPELL_AURA_MECHANIC_DURATION_MOD = 232,
- SPELL_AURA_233 = 233,
+ SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS = 233, // client-side only
SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK = 234,
SPELL_AURA_MOD_DISPEL_RESIST = 235,
SPELL_AURA_CONTROL_VEHICLE = 236,
@@ -335,7 +335,7 @@ enum AuraType
SPELL_AURA_X_RAY = 273,
SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274,
SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275,
- SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done
+ SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // NYI
SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277,
SPELL_AURA_MOD_DISARM_RANGED = 278,
SPELL_AURA_INITIALIZE_IMAGES = 279,
@@ -367,7 +367,7 @@ enum AuraType
SPELL_AURA_MOD_MINIMUM_SPEED = 305,
SPELL_AURA_306 = 306,
SPELL_AURA_HEAL_ABSORB_TEST = 307,
- SPELL_AURA_308 = 308,
+ SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, // NYI
SPELL_AURA_309 = 309,
SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310,
SPELL_AURA_311 = 311,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 9c363dccfdf..8b68bff0a56 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -215,7 +215,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNoImmediateEffect, //159 SPELL_AURA_NO_PVP_CREDIT only for Honorless Target spell
&AuraEffect::HandleNoImmediateEffect, //160 SPELL_AURA_MOD_AOE_AVOIDANCE implemented in Unit::MagicSpellHitResult
&AuraEffect::HandleNoImmediateEffect, //161 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT
- &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN_MANA implemented in AuraEffect::PeriodicTick
+ &AuraEffect::HandleNoImmediateEffect, //162 SPELL_AURA_POWER_BURN implemented in AuraEffect::PeriodicTick
&AuraEffect::HandleNoImmediateEffect, //163 SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
&AuraEffect::HandleUnused, //164 unused (3.2.0), only one test spell
&AuraEffect::HandleNoImmediateEffect, //165 SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS implemented in Unit::MeleeDamageBonus
@@ -372,7 +372,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNoImmediateEffect, //316 SPELL_AURA_PERIODIC_HASTE implemented in AuraEffect::CalculatePeriodic
};
-AuraEffect::AuraEffect(Aura * base, uint8 effIndex, int32 *baseAmount, Unit* caster):
+AuraEffect::AuraEffect(Aura* base, uint8 effIndex, int32 *baseAmount, Unit* caster):
m_base(base), m_spellInfo(base->GetSpellInfo()), m_effIndex(effIndex),
m_baseAmount(baseAmount ? *baseAmount : m_spellInfo->Effects[m_effIndex].BasePoints),
m_canBeRecalculated(true), m_spellmod(NULL), m_isPeriodic(false),
@@ -785,7 +785,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load)
case SPELL_AURA_PERIODIC_HEALTH_FUNNEL:
case SPELL_AURA_PERIODIC_MANA_LEECH:
case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
- case SPELL_AURA_POWER_BURN_MANA:
+ case SPELL_AURA_POWER_BURN:
m_isPeriodic = true;
break;
case SPELL_AURA_PERIODIC_TRIGGER_SPELL:
@@ -1326,8 +1326,8 @@ void AuraEffect::PeriodicTick(AuraApplication * aurApp, Unit* caster) const
case SPELL_AURA_PERIODIC_ENERGIZE:
HandlePeriodicEnergizeAuraTick(target, caster);
break;
- case SPELL_AURA_POWER_BURN_MANA:
- HandlePeriodicPowerBurnManaAuraTick(target, caster);
+ case SPELL_AURA_POWER_BURN:
+ HandlePeriodicPowerBurnAuraTick(target, caster);
break;
case SPELL_AURA_DUMMY:
// Haunting Spirits
@@ -2751,13 +2751,13 @@ void AuraEffect::HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode
Unit* target = aurApp->GetTarget();
if (apply)
- target->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE);
+ target->SetByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE);
else
{
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (target->HasAuraType(GetAuraType()))
return;
- target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNTRACKABLE);
+ target->RemoveByteFlag(UNIT_FIELD_BYTES_1, 2, UNIT_STAND_FLAGS_UNTRACKABLE);
}
}
@@ -6661,7 +6661,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons
target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, GetSpellInfo());
}
-void AuraEffect::HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const
+void AuraEffect::HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const
{
Powers powerType = Powers(GetMiscValue());
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 86bb325aa3c..bdaeefa71c2 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -290,7 +290,7 @@ class AuraEffect
void HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) const;
void HandleObsModPowerAuraTick(Unit* target, Unit* caster) const;
void HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) const;
- void HandlePeriodicPowerBurnManaAuraTick(Unit* target, Unit* caster) const;
+ void HandlePeriodicPowerBurnAuraTick(Unit* target, Unit* caster) const;
// aura effect proc handlers
void HandleProcTriggerSpellAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo);
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index bff4f222895..e3dd1e83105 100755
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1831,7 +1831,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const
case SPELL_AURA_PERIODIC_ENERGIZE:
case SPELL_AURA_PERIODIC_MANA_LEECH:
case SPELL_AURA_PERIODIC_LEECH:
- case SPELL_AURA_POWER_BURN_MANA:
+ case SPELL_AURA_POWER_BURN:
case SPELL_AURA_OBS_MOD_POWER:
case SPELL_AURA_OBS_MOD_HEALTH:
case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE:
@@ -2319,7 +2319,7 @@ void UnitAura::FillTargetMap(std::map<Unit *, uint8> & targets, Unit* caster)
if (!GetUnitOwner()->HasUnitState(UNIT_STAT_ISOLATED))
{
- switch(GetSpellInfo()->Effects[effIndex].Effect)
+ switch (GetSpellInfo()->Effects[effIndex].Effect)
{
case SPELL_EFFECT_APPLY_AREA_AURA_PARTY:
targetList.push_back(GetUnitOwner());
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index 8192325af90..1c22a31e791 100755
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -175,9 +175,9 @@ class Aura
// Helpers for targets
ApplicationMap const & GetApplicationMap() {return m_applications;}
void GetApplicationList(std::list<AuraApplication*> & applicationList) const;
- const AuraApplication * GetApplicationOfTarget (uint64 const guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
- AuraApplication * GetApplicationOfTarget (uint64 const guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
- bool IsAppliedOnTarget(uint64 const guid) const { return m_applications.find(guid) != m_applications.end(); }
+ const AuraApplication * GetApplicationOfTarget (uint64 guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
+ AuraApplication * GetApplicationOfTarget (uint64 guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; }
+ bool IsAppliedOnTarget(uint64 guid) const { return m_applications.find(guid) != m_applications.end(); }
void SetNeedClientUpdateForTargets() const;
void HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, bool apply, bool onReapply);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 4eee788e84e..f58bd72914d 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -551,8 +551,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme
m_autoRepeat = m_spellInfo->IsAutoRepeatRangedSpell();
m_runesState = 0;
- m_powerCost = 0; // setup to correct value in Spell::prepare, don't must be used before.
- m_casttime = 0; // setup to correct value in Spell::prepare, don't must be used before.
+ m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before.
+ m_casttime = 0; // setup to correct value in Spell::prepare, must not be used before.
m_timer = 0; // will set to castime in prepare
m_channelTargetEffectMask = 0;
@@ -1237,18 +1237,16 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
}
// Do not take combo points on dodge and miss
- if (m_needComboPoints && m_targets.GetUnitTargetGUID() == target->targetGUID)
- if (missInfo != SPELL_MISS_NONE)
- {
- m_needComboPoints = false;
- // Restore spell mods for a miss/dodge/parry Cold Blood
- // TODO: check how broad this rule should be
- if (m_caster->GetTypeId() == TYPEID_PLAYER)
- if ((missInfo == SPELL_MISS_MISS) ||
- (missInfo == SPELL_MISS_DODGE) ||
- (missInfo == SPELL_MISS_PARRY))
- m_caster->ToPlayer()->RestoreSpellMods(this, 14177);
- }
+ if (missInfo != SPELL_MISS_NONE && m_needComboPoints &&
+ m_targets.GetUnitTargetGUID() == target->targetGUID)
+ {
+ m_needComboPoints = false;
+ // Restore spell mods for a miss/dodge/parry Cold Blood
+ // TODO: check how broad this rule should be
+ if (m_caster->GetTypeId() == TYPEID_PLAYER && (missInfo == SPELL_MISS_MISS ||
+ missInfo == SPELL_MISS_DODGE || missInfo == SPELL_MISS_PARRY))
+ m_caster->ToPlayer()->RestoreSpellMods(this, 14177);
+ }
// Trigger info was not filled in spell::preparedatafortriggersystem - we do it now
if (canEffectTrigger && !procAttacker && !procVictim)
@@ -1546,8 +1544,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
((UnitAura*)m_spellAura)->SetDiminishGroup(m_diminishGroup);
bool positive = m_spellAura->GetSpellInfo()->IsPositive();
- AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID());
- if (aurApp)
+ if (AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID()))
positive = aurApp->IsPositive();
duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive);
@@ -4577,7 +4574,7 @@ void Spell::HandleEffects(Unit *pUnitTarget, Item *pItemTarget, GameObject *pGOT
SpellCastResult Spell::CheckCast(bool strict)
{
// check death state
- if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD))
+ if (!m_caster->isAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !((m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell)))
return SPELL_FAILED_CASTER_DEAD;
// check cooldowns to prevent cheating
@@ -6376,7 +6373,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff) const
break;
}
- if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS)
+ if (IsTriggered() || m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS)
return true;
// todo: shit below shouldn't be here, but it's temporary
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index dbeb7407031..04e90d2083b 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1648,7 +1648,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b
}
// check UNIT_FLAG_NON_ATTACKABLE flag - a player can cast spells on his pet (or other controlled unit) though in any state
- if (target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID())
+ if (!IsPositive() && target != caster && target->GetCharmerOrOwnerGUID() != caster->GetGUID())
{
// any unattackable target skipped
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index da96f5df537..85ee259fcc9 100755
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -84,10 +84,10 @@ public:
bool IsClosed() const { return _closedBy; }
bool IsCompleted() const { return _completed; }
- bool IsFromPlayer(const uint64 guid) const { return guid == _playerGuid; }
+ bool IsFromPlayer(uint64 guid) const { return guid == _playerGuid; }
bool IsAssigned() const { return _assignedTo != 0; }
- bool IsAssignedTo(const uint64 guid) const { return guid == _assignedTo; }
- bool IsAssignedNotTo(const uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); }
+ bool IsAssignedTo(uint64 guid) const { return guid == _assignedTo; }
+ bool IsAssignedNotTo(uint64 guid) const { return IsAssigned() && !IsAssignedTo(guid); }
uint32 GetId() const { return _id; }
Player* GetPlayer() const { return ObjectAccessor::FindPlayer(_playerGuid); }
@@ -108,7 +108,7 @@ public:
GMTicketEscalationStatus GetEscalatedStatus() const { return _escalatedStatus; }
void SetEscalatedStatus(GMTicketEscalationStatus escalatedStatus) { _escalatedStatus = escalatedStatus; }
- void SetAssignedTo(const uint64 guid, bool isAdmin)
+ void SetAssignedTo(uint64 guid, bool isAdmin)
{
_assignedTo = guid;
if (isAdmin && _escalatedStatus == TICKET_IN_ESCALATION_QUEUE)
@@ -178,7 +178,7 @@ public:
return NULL;
}
- GmTicket* GetTicketByPlayer(const uint64 playerGuid)
+ GmTicket* GetTicketByPlayer(uint64 playerGuid)
{
for (GmTicketList::const_iterator itr = _ticketList.begin(); itr != _ticketList.end(); ++itr)
if (itr->second && itr->second->IsFromPlayer(playerGuid) && !itr->second->IsClosed())
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index 493e4b8f28e..7faa8df44bf 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -297,7 +297,7 @@ public:
uint64 prisonerGUID;
- void SetGUID(const uint64 guid, int32 /*id*/)
+ void SetGUID(uint64 guid, int32 /*id*/)
{
if (!prisonerGUID)
prisonerGUID = guid;
@@ -883,7 +883,7 @@ public:
uint64 minerGUID;
- void SetGUID(const uint64 guid, int32 /*id*/)
+ void SetGUID(uint64 guid, int32 /*id*/)
{
minerGUID = guid;
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
index fcee11c8774..7a6aefe90fb 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp
@@ -318,7 +318,7 @@ class boss_rimefang : public CreatureScript
_EnterEvadeMode();
}
- void SetGUID(const uint64 guid, int32 type)
+ void SetGUID(uint64 guid, int32 type)
{
if (type == GUID_HOARFROST)
{
@@ -384,7 +384,7 @@ class player_overlord_brandAI : public PlayerAI
tyrannus = NULL;
}
- void SetGUID(const uint64 guid, int32 /*type*/)
+ void SetGUID(uint64 guid, int32 /*type*/)
{
tyrannus = ObjectAccessor::GetCreature(*me, guid);
if (!tyrannus)
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 411f9cc7d04..40f465c9ccd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -1176,7 +1176,7 @@ class npc_ball_of_flame : public CreatureScript
}
}
- void SetGUID(uint64 const guid, int32 /*type*/)
+ void SetGUID(uint64 guid, int32 /*type*/)
{
_chaseGUID = guid;
}
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 48c0edc2854..7bbf57dbcd0 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
@@ -257,7 +257,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
Talk(SAY_KILL);
}
- void SetGUID(uint64 const guid, int32 type = 0)
+ void SetGUID(uint64 guid, int32 type = 0)
{
switch (type)
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 89869040e6d..56613d59e99 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -549,7 +549,7 @@ class boss_lady_deathwhisper : public CreatureScript
summon->AI()->DoCast(summon, SPELL_TELEPORT_VISUAL);
}
- void SetGUID(uint64 const guid, int32 id/* = 0*/)
+ void SetGUID(uint64 guid, int32 id/* = 0*/)
{
if (id != GUID_CULTIST)
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index e22e4ecb28b..f418726aedf 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -252,7 +252,7 @@ class boss_lord_marrowgar : public CreatureScript
return 0LL;
}
- void SetGUID(uint64 const guid, int32 type/* = 0 */)
+ void SetGUID(uint64 guid, int32 type/* = 0 */)
{
if (type != DATA_COLDFLAME_GUID)
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index ef2639ed6b8..b5bcd93d257 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -740,20 +740,6 @@ class spell_putricide_gaseous_bloat : public SpellScriptLoader
}
};
-class BeamProtectionCheck
-{
- public:
- explicit BeamProtectionCheck(uint32 excludeAura) : _excludeAura(excludeAura) { }
-
- bool operator()(Unit* unit)
- {
- return unit->HasAura(_excludeAura);
- }
-
- private:
- uint32 _excludeAura;
-};
-
class spell_putricide_ooze_channel : public SpellScriptLoader
{
public:
@@ -782,7 +768,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
void SelectTarget(std::list<Unit*>& targetList)
{
- targetList.remove_if(BeamProtectionCheck(GetSpellInfo()->ExcludeTargetAuraSpell));
if (targetList.empty())
{
FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
@@ -828,67 +813,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
}
};
-class spell_putricide_expunged_gas : public SpellScriptLoader
-{
- public:
- spell_putricide_expunged_gas() : SpellScriptLoader("spell_putricide_expunged_gas") { }
-
- class spell_putricide_expunged_gas_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_putricide_expunged_gas_SpellScript);
-
- bool Load()
- {
- return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->GetInstanceScript();
- }
-
- SpellCastResult CheckCast()
- {
- if (!GetCaster()->getVictim())
- return SPELL_FAILED_NO_VALID_TARGETS;
- return SPELL_CAST_OK;
- }
-
- void CalcDamage(SpellEffIndex /*effIndex*/)
- {
- // checked in script loading, cant be NULL here
- InstanceScript* instance = GetCaster()->GetInstanceScript();
- Creature* professor = Unit::GetCreature(*GetCaster(), instance->GetData64(DATA_PROFESSOR_PUTRICIDE));
- if (!professor)
- return;
-
- int32 dmg = 0;
- uint32 bloatId = sSpellMgr->GetSpellIdForDifficulty(SPELL_GASEOUS_BLOAT, GetCaster());
- if (Aura* gasBloat = GetCaster()->getVictim()->GetAura(bloatId))
- {
- uint32 stack = gasBloat->GetStackAmount();
- int32 const mod = (GetCaster()->GetMap()->GetSpawnMode() & 1) ? 1500 : 1250;
- for (uint8 i = 1; i < stack; ++i)
- dmg += mod * stack;
- }
-
- SetHitDamage(dmg);
- }
-
- void DespawnAfterCast()
- {
- GetCaster()->ToCreature()->DespawnOrUnsummon(100);
- }
-
- void Register()
- {
- OnCheckCast += SpellCheckCastFn(spell_putricide_expunged_gas_SpellScript::CheckCast);
- OnEffect += SpellEffectFn(spell_putricide_expunged_gas_SpellScript::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- AfterHit += SpellHitFn(spell_putricide_expunged_gas_SpellScript::DespawnAfterCast);
- }
- };
-
- SpellScript* GetSpellScript() const
- {
- return new spell_putricide_expunged_gas_SpellScript();
- }
-};
-
class spell_putricide_slime_puddle : public SpellScriptLoader
{
public:
@@ -1532,7 +1456,6 @@ void AddSC_boss_professor_putricide()
new npc_volatile_ooze();
new spell_putricide_gaseous_bloat();
new spell_putricide_ooze_channel();
- new spell_putricide_expunged_gas();
new spell_putricide_slime_puddle();
new spell_putricide_slime_puddle_aura();
new spell_putricide_unstable_experiment();
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 0c2d1e8fe00..e0b8afdbfd5 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -523,7 +523,7 @@ class npc_ice_tomb : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void SetGUID(uint64 const guid, int32 type/* = 0 */)
+ void SetGUID(uint64 guid, int32 type/* = 0 */)
{
if (type == DATA_TRAPPED_PLAYER)
{
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 10c0cbd1331..b5d3eb947c0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -310,6 +310,8 @@ class boss_valithria_dreamwalker : public CreatureScript
// immune to percent heals
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_OBS_MOD_HEALTH, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_HEAL_PCT, true);
+ // Glyph of Dispel Magic - not a percent heal by effect, its cast with custom basepoints
+ me->ApplySpellImmune(0, IMMUNITY_ID, 56131, true);
_instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
_missedPortals = 0;
_under25PercentTalkDone = false;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 56c42f4f285..1e061c38c08 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -971,7 +971,7 @@ class npc_crok_scourgebane : public CreatureScript
}
}
- void SetGUID(uint64 const guid, int32 type/* = 0*/)
+ void SetGUID(uint64 guid, int32 type/* = 0*/)
{
if (type == ACTION_VRYKUL_DEATH)
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index 2122e4d9179..9384eb04bc8 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -163,7 +163,7 @@ public:
uint64 victimGUID;
- void SetGUID(const uint64 guid, int32 /*param*/)
+ void SetGUID(uint64 guid, int32 /*param*/)
{
victimGUID = guid;
if (me->m_spells[0] && victimGUID)
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index cd742b11d58..cf653284e6a 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -157,7 +157,7 @@ public:
}
}
- void SetGUID(uint64 const guid, int32 id/* = 0 */)
+ void SetGUID(uint64 guid, int32 id/* = 0 */)
{
if (id == DATA_INTENSE_COLD)
intenseColdList.push_back(guid);
diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp
index aa08e4230ab..205dcdb5347 100644
--- a/src/server/scripts/Northrend/borean_tundra.cpp
+++ b/src/server/scripts/Northrend/borean_tundra.cpp
@@ -2431,7 +2431,7 @@ public:
uiEventPhase = 1;
}
- void SetGUID(const uint64 uiGuid, int32 /*iId*/)
+ void SetGUID(uint64 uiGuid, int32 /*iId*/)
{
uiPlayerGUID = uiGuid;
}
diff --git a/src/server/scripts/Northrend/zuldrak.cpp b/src/server/scripts/Northrend/zuldrak.cpp
index b8e0d31d49b..16567be9636 100644
--- a/src/server/scripts/Northrend/zuldrak.cpp
+++ b/src/server/scripts/Northrend/zuldrak.cpp
@@ -361,7 +361,7 @@ public:
bRemoveFlag = false;
}
- void SetGUID(const uint64 guid, int32 /*id*/)
+ void SetGUID(uint64 guid, int32 /*id*/)
{
uiPlayerGUID = guid;
}
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index 19dd7f6c2e3..16d147a4000 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -39,6 +39,58 @@ enum HunterSpells
HUNTER_SPELL_CHIMERA_SHOT_SERPENT = 53353,
HUNTER_SPELL_CHIMERA_SHOT_VIPER = 53358,
HUNTER_SPELL_CHIMERA_SHOT_SCORPID = 53359,
+ HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET = 61669,
+};
+
+// 13161 Aspect of the Beast
+class spell_hun_aspect_of_the_beast : public SpellScriptLoader
+{
+public:
+ spell_hun_aspect_of_the_beast() : SpellScriptLoader("spell_hun_aspect_of_the_beast") { }
+
+ class spell_hun_aspect_of_the_beast_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_hun_aspect_of_the_beast_AuraScript)
+ bool Validate(SpellInfo const* /*entry*/)
+ {
+ if (!sSpellMgr->GetSpellInfo(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET))
+ return false;
+ return true;
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (!GetCaster())
+ return;
+
+ Unit* caster = GetCaster();
+ if (caster->ToPlayer())
+ if (Pet* pet = caster->ToPlayer()->GetPet())
+ pet->RemoveAurasDueToSpell(HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET);
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (!GetCaster())
+ return;
+
+ Unit* caster = GetCaster();
+ if (caster->ToPlayer())
+ if (Pet* pet = caster->ToPlayer()->GetPet())
+ caster->CastSpell(caster, HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET, true);
+ }
+
+ void Register()
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_hun_aspect_of_the_beast_AuraScript::OnApply, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_hun_aspect_of_the_beast_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_UNTRACKABLE, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript *GetAuraScript() const
+ {
+ return new spell_hun_aspect_of_the_beast_AuraScript();
+ }
};
// 53209 Chimera Shot
@@ -512,6 +564,7 @@ public:
void AddSC_hunter_spell_scripts()
{
+ new spell_hun_aspect_of_the_beast();
new spell_hun_chimera_shot();
new spell_hun_invigoration();
new spell_hun_last_stand_pet();
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index e2f37912931..5300849d0ec 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1088,7 +1088,7 @@ class spell_magic_eater_food : public SpellScriptLoader
{
PrepareAuraScript(spell_magic_eater_food_AuraScript);
- void HandleTriggerSpell(AuraEffect const* aurEff)
+ void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
Unit* target = GetTarget();