aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2013-08-26 12:40:41 +0100
committerNay <dnpd.dd@gmail.com>2013-08-26 12:40:41 +0100
commitb2134dbbe300f6b0ff55d551295a56a67748056f (patch)
treeabb884bc3a0a3aca903efd789687eeac59363a0f /src
parentd9a136fd58ff09cf6e3020c5b06035ac772fc1f3 (diff)
parent8eaf7632355cfabdc919c7b42953c8c72f1f8015 (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.cpp2
-rw-r--r--src/server/game/Combat/HostileRefManager.cpp3
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp1
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp4
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.h30
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp2
-rw-r--r--src/server/shared/Threading/Threading.cpp8
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp9
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);