diff options
author | Nay <dnpd.dd@gmail.com> | 2013-08-26 12:40:41 +0100 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2013-08-26 12:40:41 +0100 |
commit | b2134dbbe300f6b0ff55d551295a56a67748056f (patch) | |
tree | abb884bc3a0a3aca903efd789687eeac59363a0f /src | |
parent | d9a136fd58ff09cf6e3020c5b06035ac772fc1f3 (diff) | |
parent | 8eaf7632355cfabdc919c7b42953c8c72f1f8015 (diff) |
Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts:
src/server/game/AI/EventAI/CreatureEventAI.cpp
src/server/scripts/Kalimdor/zone_desolace.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/Chat.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Combat/HostileRefManager.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceSaveMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceSaveMgr.h | 30 | ||||
-rw-r--r-- | src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | 2 | ||||
-rw-r--r-- | src/server/shared/Threading/Threading.cpp | 8 | ||||
-rw-r--r-- | src/tools/mmaps_generator/MapBuilder.cpp | 9 |
10 files changed, 47 insertions, 16 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 55440650993..e8b4c91b2cd 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -342,7 +342,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, co { if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd)) { - if (text && text[0] != '\0') + if (text[0] != '\0') SendSysMessage(LANG_NO_SUBCMD); else SendSysMessage(LANG_CMD_SYNTAX); diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp index 4cd76b4e7a2..1e550596368 100644 --- a/src/server/game/Combat/HostileRefManager.cpp +++ b/src/server/game/Combat/HostileRefManager.cpp @@ -35,6 +35,9 @@ HostileRefManager::~HostileRefManager() void HostileRefManager::threatAssist(Unit* victim, float baseThreat, SpellInfo const* threatSpell) { + if (getSize() == 0) + return; + HostileReference* ref = getFirst(); float threat = ThreatCalcHelper::calcThreat(victim, iOwner, baseThreat, (threatSpell ? threatSpell->GetSchoolMask() : SPELL_SCHOOL_MASK_NORMAL), threatSpell); threat /= getSize(); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 382bae8d0da..0a5eb82a175 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2389,8 +2389,6 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert case UNIT_MASK_MINION: summon = new Minion(properties, summoner, false); break; - default: - return NULL; } if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, vehId, team, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation())) diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index b7f4aa909c0..09d29750c57 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -977,7 +977,6 @@ bool Guardian::UpdateStats(Stats stat) { case STAT_STAMINA: mod = 0.3f; break; // Default Owner's Stamina scale case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale - default: break; } // Check just if owner has Ravenous Dead since it's effect is not an aura diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 710c65e2675..aca351c4c6a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12838,8 +12838,6 @@ void Unit::UpdateReactives(uint32 p_time) if (getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER) ToPlayer()->ClearComboPoints(); break; - default: - break; } } else diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index a422fd8531c..6370eda6568 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -156,14 +156,14 @@ void InstanceSaveManager::RemoveInstanceSave(uint32 InstanceId) CharacterDatabase.Execute(stmt); } - delete itr->second; + itr->second->SetToDelete(true); m_instanceSaveById.erase(itr); } } InstanceSave::InstanceSave(uint16 MapId, uint32 InstanceId, Difficulty difficulty, time_t resetTime, bool canReset) : m_resetTime(resetTime), m_instanceid(InstanceId), m_mapid(MapId), - m_difficulty(difficulty), m_canReset(canReset) + m_difficulty(difficulty), m_canReset(canReset), m_toDelete(false) { } diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index c5dcaf32463..ef55005d0d6 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -81,10 +81,29 @@ class InstanceSave /* online players bound to the instance (perm/solo) does not include the members of the group unless they have permanent saves */ void AddPlayer(Player* player) { TRINITY_GUARD(ACE_Thread_Mutex, _lock); m_playerList.push_back(player); } - bool RemovePlayer(Player* player) { TRINITY_GUARD(ACE_Thread_Mutex, _lock); m_playerList.remove(player); return UnloadIfEmpty(); } + bool RemovePlayer(Player* player) + { + _lock.acquire(); + m_playerList.remove(player); + bool isStillValid = UnloadIfEmpty(); + _lock.release(); + + //delete here if needed, after releasing the lock + if(m_toDelete) + delete this; + + return isStillValid; + } /* all groups bound to the instance */ void AddGroup(Group* group) { m_groupList.push_back(group); } - bool RemoveGroup(Group* group) { m_groupList.remove(group); return UnloadIfEmpty(); } + bool RemoveGroup(Group* group) + { + m_groupList.remove(group); + bool isStillValid = UnloadIfEmpty(); + if(m_toDelete) + delete this; + return isStillValid; + } /* instances cannot be reset (except at the global reset time) if there are players permanently bound to it @@ -96,6 +115,12 @@ class InstanceSave but that would depend on a lot of things that can easily change in future */ Difficulty GetDifficulty() const { return m_difficulty; } + /* used to flag the InstanceSave as to be deleted, so the caller can delete it */ + void SetToDelete(bool toDelete) + { + m_toDelete = toDelete; + } + typedef std::list<Player*> PlayerListType; typedef std::list<Group*> GroupListType; private: @@ -110,6 +135,7 @@ class InstanceSave uint32 m_mapid; Difficulty m_difficulty; bool m_canReset; + bool m_toDelete; ACE_Thread_Mutex _lock; }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 189b1489940..3fb7aef3ae0 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -835,8 +835,6 @@ class npc_halion_controller : public CreatureScript _twilightDamageTaken = 0; return; } - default: - break; } _materialDamageTaken = 0; diff --git a/src/server/shared/Threading/Threading.cpp b/src/server/shared/Threading/Threading.cpp index 34a7bf8bb9d..1ed29d5106a 100644 --- a/src/server/shared/Threading/Threading.cpp +++ b/src/server/shared/Threading/Threading.cpp @@ -59,10 +59,10 @@ ThreadPriority::ThreadPriority() } } - //since we have only 7(seven) values in enum Priority - //and 3 we know already (Idle, Normal, Realtime) so - //we need to split each list [Idle...Normal] and [Normal...Realtime] - //into piecies + // since we have only 7(seven) values in enum Priority + // and 3 we know already (Idle, Normal, Realtime) so + // we need to split each list [Idle...Normal] and [Normal...Realtime] + // into pieces const size_t _divider = 4; size_t _div = (norm_pos - min_pos) / _divider; if (_div == 0) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index a8254eb5eaf..ab584e27e03 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -246,11 +246,20 @@ namespace MMAP printf("Building mesh from file\n"); int tileX, tileY, mapId; if (fread(&mapId, sizeof(int), 1, file) != 1) + { + fclose(file); return; + } if (fread(&tileX, sizeof(int), 1, file) != 1) + { + fclose(file); return; + } if (fread(&tileY, sizeof(int), 1, file) != 1) + { + fclose(file); return; + } dtNavMesh* navMesh = NULL; buildNavMesh(mapId, navMesh); |