aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/authserver/Main.cpp4
-rw-r--r--src/server/authserver/Realms/RealmList.h6
-rw-r--r--src/server/authserver/Server/AuthSession.cpp4
-rw-r--r--src/server/authserver/Server/BattlenetSession.cpp6
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h8
-rw-r--r--src/server/game/Accounts/AccountMgr.h4
-rw-r--r--src/server/game/Achievements/AchievementMgr.h4
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h4
-rw-r--r--src/server/game/Battlefield/BattlefieldMgr.h4
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.h4
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h4
-rw-r--r--src/server/game/Calendar/CalendarMgr.h4
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h4
-rw-r--r--src/server/game/Chat/ChatLink.h1
-rw-r--r--src/server/game/Conditions/ConditionMgr.h4
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.h4
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h4
-rw-r--r--src/server/game/Entities/Player/SocialMgr.h4
-rw-r--r--src/server/game/Events/GameEventMgr.h4
-rw-r--r--src/server/game/Globals/ObjectAccessor.h4
-rw-r--r--src/server/game/Globals/ObjectMgr.h4
-rw-r--r--src/server/game/Groups/GroupMgr.h4
-rw-r--r--src/server/game/Guilds/GuildMgr.h4
-rw-r--r--src/server/game/Handlers/AddonHandler.h4
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.h4
-rw-r--r--src/server/game/Maps/MapManager.h4
-rw-r--r--src/server/game/Maps/TransportMgr.h4
-rw-r--r--src/server/game/Movement/Waypoints/WaypointManager.h4
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.h4
-rw-r--r--src/server/game/Pools/PoolMgr.h4
-rw-r--r--src/server/game/Scripting/ScriptMgr.h4
-rw-r--r--src/server/game/Scripting/ScriptSystem.h4
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp1
-rw-r--r--src/server/game/Server/Protocol/PacketLog.h4
-rw-r--r--src/server/game/Server/WorldSocket.cpp14
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Spells/SpellMgr.h5
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h4
-rw-r--r--src/server/game/Tickets/TicketMgr.h4
-rw-r--r--src/server/game/Warden/WardenCheckMgr.h4
-rw-r--r--src/server/game/World/World.h4
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp429
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp24
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h4
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp171
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp113
-rw-r--r--src/server/shared/Configuration/Config.h4
-rw-r--r--src/server/shared/Cryptography/Authentication/WorldPacketCrypt.cpp2
-rw-r--r--src/server/shared/Cryptography/BigNumber.cpp1
-rw-r--r--src/server/shared/Cryptography/SHA1.cpp1
-rw-r--r--src/server/shared/Cryptography/WardenKeyGeneration.h2
-rw-r--r--src/server/shared/Define.h7
-rw-r--r--src/server/shared/Dynamic/ObjectRegistry.h4
-rw-r--r--src/server/shared/Logging/AppenderConsole.cpp6
-rw-r--r--src/server/shared/Logging/Log.h8
-rw-r--r--src/server/shared/Utilities/Util.cpp7
57 files changed, 498 insertions, 464 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index 9fe6fb276a8..a5781171f92 100644
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -101,9 +101,9 @@ int main(int argc, char** argv)
return 1;
// Get the list of realms for the server
- sRealmList.Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
+ sRealmList->Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
- if (sRealmList.size() == 0)
+ if (sRealmList->size() == 0)
{
TC_LOG_ERROR("server.authserver", "No valid realms specified.");
return 1;
diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h
index beb520df25a..0063b1a60c8 100644
--- a/src/server/authserver/Realms/RealmList.h
+++ b/src/server/authserver/Realms/RealmList.h
@@ -71,10 +71,10 @@ class RealmList
public:
typedef std::map<std::string, Realm> RealmMap;
- static RealmList& instance()
+ static RealmList* instance()
{
- static RealmList *instance = new RealmList();
- return *instance;
+ static RealmList instance;
+ return &instance;
}
~RealmList();
diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp
index 3bc51ace67b..560cf75b447 100644
--- a/src/server/authserver/Server/AuthSession.cpp
+++ b/src/server/authserver/Server/AuthSession.cpp
@@ -759,13 +759,13 @@ bool AuthSession::_HandleRealmList()
uint32 id = fields[0].GetUInt32();
// Update realm list if need
- sRealmList.UpdateIfNeed();
+ sRealmList->UpdateIfNeed();
// Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm)
ByteBuffer pkt;
size_t RealmListSize = 0;
- for (RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i)
+ for (RealmList::RealmMap::const_iterator i = sRealmList->begin(); i != sRealmList->end(); ++i)
{
const Realm &realm = i->second;
// don't work with realms which not compatible with the client
diff --git a/src/server/authserver/Server/BattlenetSession.cpp b/src/server/authserver/Server/BattlenetSession.cpp
index 3725f5dbff8..127ce109b15 100644
--- a/src/server/authserver/Server/BattlenetSession.cpp
+++ b/src/server/authserver/Server/BattlenetSession.cpp
@@ -430,7 +430,7 @@ bool Battlenet::Session::HandleDisconnect(PacketHeader& /*header*/, BitStream& /
bool Battlenet::Session::HandleRealmUpdateSubscribe(PacketHeader& /*header*/, BitStream& /*packet*/)
{
- sRealmList.UpdateIfNeed();
+ sRealmList->UpdateIfNeed();
RealmCharacterCounts* counts = new RealmCharacterCounts();
@@ -447,7 +447,7 @@ bool Battlenet::Session::HandleRealmUpdateSubscribe(PacketHeader& /*header*/, Bi
} while (countResult->NextRow());
}
- for (RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i)
+ for (RealmList::RealmMap::const_iterator i = sRealmList->begin(); i != sRealmList->end(); ++i)
{
Realm const& realm = i->second;
@@ -501,7 +501,7 @@ bool Battlenet::Session::HandleRealmJoinRequest(PacketHeader& header, BitStream&
join.Read();
RealmJoinResult* result = new RealmJoinResult();
- Realm const* realm = sRealmList.GetRealm(join.Realm);
+ Realm const* realm = sRealmList->GetRealm(join.Realm);
if (!realm || realm->flag & (REALM_FLAG_INVALID | REALM_FLAG_OFFLINE))
{
AsyncWrite(result);
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index f3106ed726b..f09e16268c1 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1411,8 +1411,8 @@ class SmartWaypointMgr
public:
static SmartWaypointMgr* instance()
{
- static SmartWaypointMgr* instance = new SmartWaypointMgr();
- return instance;
+ static SmartWaypointMgr instance;
+ return &instance;
}
void LoadFromDB();
@@ -1447,8 +1447,8 @@ class SmartAIMgr
public:
static SmartAIMgr* instance()
{
- static SmartAIMgr* instance = new SmartAIMgr();
- return instance;
+ static SmartAIMgr instance;
+ return &instance;
}
void LoadSmartAIFromDB();
diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h
index 47801f3ce19..add00ec7feb 100644
--- a/src/server/game/Accounts/AccountMgr.h
+++ b/src/server/game/Accounts/AccountMgr.h
@@ -58,8 +58,8 @@ class AccountMgr
public:
static AccountMgr* instance()
{
- static AccountMgr* instance = new AccountMgr();
- return instance;
+ static AccountMgr instance;
+ return &instance;
}
AccountOpResult CreateAccount(std::string username, std::string password, std::string email = "");
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index 66c91ef728e..efa3e3ce5fa 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -307,8 +307,8 @@ class AchievementGlobalMgr
static AchievementGlobalMgr* instance()
{
- static AchievementGlobalMgr* instance = new AchievementGlobalMgr();
- return instance;
+ static AchievementGlobalMgr instance;
+ return &instance;
}
AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type, bool guild = false) const
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index 3222d3bfa3c..8e74b4c53a6 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -142,8 +142,8 @@ class AuctionHouseMgr
public:
static AuctionHouseMgr* instance()
{
- static AuctionHouseMgr* instance = new AuctionHouseMgr();
- return instance;
+ static AuctionHouseMgr instance;
+ return &instance;
}
typedef std::unordered_map<uint32, Item*> ItemMap;
diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h
index a3aad126479..ca057367e5a 100644
--- a/src/server/game/Battlefield/BattlefieldMgr.h
+++ b/src/server/game/Battlefield/BattlefieldMgr.h
@@ -29,8 +29,8 @@ class BattlefieldMgr
public:
static BattlefieldMgr* instance()
{
- static BattlefieldMgr* instance = new BattlefieldMgr();
- return instance;
+ static BattlefieldMgr instance;
+ return &instance;
}
// create battlefield events
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h
index 17b9120c7f6..eaf39278c28 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.h
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h
@@ -29,8 +29,8 @@ private:
public:
static ArenaTeamMgr* instance()
{
- static ArenaTeamMgr* instance = new ArenaTeamMgr();
- return instance;
+ static ArenaTeamMgr instance;
+ return &instance;
}
typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamContainer;
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index ee7fd660851..e6f8eee354e 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -63,8 +63,8 @@ class BattlegroundMgr
public:
static BattlegroundMgr* instance()
{
- static BattlegroundMgr* instance = new BattlegroundMgr();
- return instance;
+ static BattlegroundMgr instance;
+ return &instance;
}
void Update(uint32 diff);
diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h
index 8d744988a76..3dadcbdf645 100644
--- a/src/server/game/Calendar/CalendarMgr.h
+++ b/src/server/game/Calendar/CalendarMgr.h
@@ -283,8 +283,8 @@ class CalendarMgr
public:
static CalendarMgr* instance()
{
- static CalendarMgr* instance = new CalendarMgr();
- return instance;
+ static CalendarMgr instance;
+ return &instance;
}
void LoadFromDB();
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index 0fd5cdbfe24..f3ca9694176 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -37,8 +37,8 @@ class ChannelMgr
public:
static ChannelMgr* instance()
{
- static ChannelMgr* instance = new ChannelMgr();
- return instance;
+ static ChannelMgr instance;
+ return &instance;
}
static ChannelMgr * forTeam(uint32 team);
diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h
index e9573a631e4..ebe2583dc1c 100644
--- a/src/server/game/Chat/ChatLink.h
+++ b/src/server/game/Chat/ChatLink.h
@@ -21,6 +21,7 @@
#include "SharedDefines.h"
#include <sstream>
#include <list>
+#include <cstring>
struct ItemLocale;
struct ItemTemplate;
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index f4130a3a619..9a48985b90d 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -231,8 +231,8 @@ class ConditionMgr
static ConditionMgr* instance()
{
- static ConditionMgr* instance = new ConditionMgr();
- return instance;
+ static ConditionMgr instance;
+ return &instance;
}
void LoadConditions(bool isReload = false);
diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h
index c42777c494c..b04b4f1a7ab 100644
--- a/src/server/game/DungeonFinding/LFGMgr.h
+++ b/src/server/game/DungeonFinding/LFGMgr.h
@@ -304,8 +304,8 @@ class LFGMgr
public:
static LFGMgr* instance()
{
- static LFGMgr* instance = new LFGMgr();
- return instance;
+ static LFGMgr instance;
+ return &instance;
}
// Functions used outside lfg namespace
diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h
index 29832e4ff76..f53de0d48f1 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -47,8 +47,8 @@ class FormationMgr
public:
static FormationMgr* instance()
{
- static FormationMgr* instance = new FormationMgr();
- return instance;
+ static FormationMgr instance;
+ return &instance;
}
void AddCreatureToGroup(uint32 group_id, Creature* creature);
diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h
index 68c25fbf648..3ed41a847ef 100644
--- a/src/server/game/Entities/Player/SocialMgr.h
+++ b/src/server/game/Entities/Player/SocialMgr.h
@@ -129,8 +129,8 @@ class SocialMgr
public:
static SocialMgr* instance()
{
- static SocialMgr* instance = new SocialMgr();
- return instance;
+ static SocialMgr instance;
+ return &instance;
}
// Misc
diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h
index 99b94357a63..5afa26ec746 100644
--- a/src/server/game/Events/GameEventMgr.h
+++ b/src/server/game/Events/GameEventMgr.h
@@ -102,8 +102,8 @@ class GameEventMgr
public:
static GameEventMgr* instance()
{
- static GameEventMgr* instance = new GameEventMgr();
- return instance;
+ static GameEventMgr instance;
+ return &instance;
}
typedef std::set<uint16> ActiveEvents;
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index dff783f4276..d2331f14690 100644
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -94,8 +94,8 @@ class ObjectAccessor
static ObjectAccessor* instance()
{
- static ObjectAccessor *instance = new ObjectAccessor();
- return instance;
+ static ObjectAccessor instance;
+ return &instance;
}
template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/)
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 46561fd7773..45671f016c8 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -730,8 +730,8 @@ class ObjectMgr
public:
static ObjectMgr* instance()
{
- static ObjectMgr* instance = new ObjectMgr();
- return instance;
+ static ObjectMgr instance;
+ return &instance;
}
typedef std::unordered_map<uint32, Item*> ItemMap;
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index 4bf440c881e..556df1bc351 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -29,8 +29,8 @@ private:
public:
static GroupMgr* instance()
{
- static GroupMgr* instance = new GroupMgr();
- return instance;
+ static GroupMgr instance;
+ return &instance;
}
typedef std::map<uint32, Group*> GroupContainer;
diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h
index 318445fe844..5df59f7e8ea 100644
--- a/src/server/game/Guilds/GuildMgr.h
+++ b/src/server/game/Guilds/GuildMgr.h
@@ -29,8 +29,8 @@ private:
public:
static GuildMgr* instance()
{
- static GuildMgr* instance = new GuildMgr();
- return instance;
+ static GuildMgr instance;
+ return &instance;
}
Guild* GetGuildByLeader(uint64 guid) const;
diff --git a/src/server/game/Handlers/AddonHandler.h b/src/server/game/Handlers/AddonHandler.h
index 31bbfa01900..c60f2942efd 100644
--- a/src/server/game/Handlers/AddonHandler.h
+++ b/src/server/game/Handlers/AddonHandler.h
@@ -28,8 +28,8 @@ class AddonHandler
public:
static AddonHandler* instance()
{
- static AddonHandler* instance = new AddonHandler();
- return instance;
+ static AddonHandler instance;
+ return &instance;
}
bool BuildAddonPacket(WorldPacket* Source, WorldPacket* Target);
diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h
index de8a0e0fc8e..75dd8ef3f74 100644
--- a/src/server/game/Instances/InstanceSaveMgr.h
+++ b/src/server/game/Instances/InstanceSaveMgr.h
@@ -160,8 +160,8 @@ class InstanceSaveManager
static InstanceSaveManager* instance()
{
- static InstanceSaveManager *instance = new InstanceSaveManager();
- return instance;
+ static InstanceSaveManager instance;
+ return &instance;
}
/* resetTime is a global propery of each (raid/heroic) map
diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h
index 990d5e80c1a..e028833d72d 100644
--- a/src/server/game/Maps/MapManager.h
+++ b/src/server/game/Maps/MapManager.h
@@ -32,8 +32,8 @@ class MapManager
public:
static MapManager* instance()
{
- static MapManager* instance = new MapManager();
- return instance;
+ static MapManager instance;
+ return &instance;
}
Map* CreateBaseMap(uint32 mapId);
diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h
index e023c8be4ee..94a4ba335b1 100644
--- a/src/server/game/Maps/TransportMgr.h
+++ b/src/server/game/Maps/TransportMgr.h
@@ -100,8 +100,8 @@ class TransportMgr
public:
static TransportMgr* instance()
{
- static TransportMgr* instance = new TransportMgr();
- return instance;
+ static TransportMgr instance;
+ return &instance;
}
void Unload();
diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h
index b12396293aa..385f4809729 100644
--- a/src/server/game/Movement/Waypoints/WaypointManager.h
+++ b/src/server/game/Movement/Waypoints/WaypointManager.h
@@ -39,8 +39,8 @@ class WaypointMgr
public:
static WaypointMgr* instance()
{
- static WaypointMgr* instance = new WaypointMgr();
- return instance;
+ static WaypointMgr instance;
+ return &instance;
}
// Attempts to reload a single path from database
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
index ab1908e273d..1a9db2b682e 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h
@@ -44,8 +44,8 @@ class OutdoorPvPMgr
public:
static OutdoorPvPMgr* instance()
{
- static OutdoorPvPMgr* instance = new OutdoorPvPMgr();
- return instance;
+ static OutdoorPvPMgr instance;
+ return &instance;
}
// create outdoor pvp events
diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h
index 0a3f52b55f6..d1fcadd40de 100644
--- a/src/server/game/Pools/PoolMgr.h
+++ b/src/server/game/Pools/PoolMgr.h
@@ -110,8 +110,8 @@ class PoolMgr
public:
static PoolMgr* instance()
{
- static PoolMgr* instance = new PoolMgr();
- return instance;
+ static PoolMgr instance;
+ return &instance;
}
void LoadFromDB();
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index fc06dca6355..bc58519fde4 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -880,8 +880,8 @@ class ScriptMgr
public: /* Initialization */
static ScriptMgr* instance()
{
- static ScriptMgr* instance = new ScriptMgr();
- return instance;
+ static ScriptMgr instance;
+ return &instance;
}
void Initialize();
diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h
index 636343838c1..74c51e5b136 100644
--- a/src/server/game/Scripting/ScriptSystem.h
+++ b/src/server/game/Scripting/ScriptSystem.h
@@ -54,8 +54,8 @@ class SystemMgr
public:
static SystemMgr* instance()
{
- static SystemMgr* instance = new SystemMgr();
- return instance;
+ static SystemMgr instance;
+ return &instance;
}
typedef std::unordered_map<uint32, ScriptPointVector> PointMoveMap;
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index 6ef33133615..23dfb3538bc 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -18,6 +18,7 @@
#include "PacketLog.h"
#include "Config.h"
#include "WorldPacket.h"
+#include "Timer.h"
#pragma pack(push, 1)
diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h
index 71d87bf45ae..4f298fa3c50 100644
--- a/src/server/game/Server/Protocol/PacketLog.h
+++ b/src/server/game/Server/Protocol/PacketLog.h
@@ -37,8 +37,8 @@ class PacketLog
public:
static PacketLog* instance()
{
- static PacketLog* instance = new PacketLog();
- return instance;
+ static PacketLog instance;
+ return &instance;
}
void Initialize();
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index db8d4e8a3e8..2680df3ac3a 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -82,7 +82,12 @@ void WorldSocket::AsyncReadHeader()
}
else
{
- _socket.close();
+ // _socket.is_open() till returns true even after calling close()
+ try
+ {
+ _socket.close();
+ }
+ catch (std::exception const& /*ex*/) { }
}
});
}
@@ -187,7 +192,12 @@ void WorldSocket::AsyncReadData(size_t dataSize)
}
else
{
- _socket.close();
+ // _socket.is_open() till returns true even after calling close()
+ try
+ {
+ _socket.close();
+ }
+ catch (std::exception const& /*ex*/) {}
}
});
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index e2c66dc6b3a..4b6e4dc2ee7 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -2576,6 +2576,8 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
case 61716: // Rabbit Costume
case 61734: // Noblegarden Bunny
case 62344: // Fists of Stone
+ case 61819: // Manabonked! (item)
+ case 61834: // Manabonked! (minigob)
return true;
default:
break;
diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h
index 775d3f0c36d..f2555820b92 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -610,9 +610,8 @@ class SpellMgr
public:
static SpellMgr* instance()
{
- static SpellMgr* instance = new SpellMgr();
-
- return instance;
+ static SpellMgr instance;
+ return &instance;
}
// Spell correctness for client using
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index d1db202ca68..aef38a1923e 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -89,8 +89,8 @@ class CreatureTextMgr
public:
static CreatureTextMgr* instance()
{
- static CreatureTextMgr* instance = new CreatureTextMgr();
- return instance;
+ static CreatureTextMgr instance;
+ return &instance;
}
void LoadCreatureTexts();
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 00b4e228fab..5ad44365e7f 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -180,8 +180,8 @@ private:
public:
static TicketMgr* instance()
{
- static TicketMgr* instance = new TicketMgr();
- return instance;
+ static TicketMgr instance;
+ return &instance;
}
void LoadTickets();
diff --git a/src/server/game/Warden/WardenCheckMgr.h b/src/server/game/Warden/WardenCheckMgr.h
index c9e26283060..4a56c1fc849 100644
--- a/src/server/game/Warden/WardenCheckMgr.h
+++ b/src/server/game/Warden/WardenCheckMgr.h
@@ -57,8 +57,8 @@ class WardenCheckMgr
public:
static WardenCheckMgr* instance()
{
- static WardenCheckMgr* instance = new WardenCheckMgr();
- return instance;
+ static WardenCheckMgr instance;
+ return &instance;
}
// We have a linear key without any gaps, so we use vector for fast access
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 557a0e62965..00c897a6f00 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -539,8 +539,8 @@ class World
public:
static World* instance()
{
- static World* instance = new World();
- return instance;
+ static World instance;
+ return &instance;
}
static std::atomic<uint32> m_worldLoopCounter;
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index d6c0f95f967..d34123c58b2 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Selin_Fireheart
-SD%Complete: 90
-SDComment: Heroic and Normal Support. Needs further testing.
-SDCategory: Magister's Terrace
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "magisters_terrace.h"
@@ -39,321 +31,264 @@ enum Says
enum Spells
{
- //Crystal effect spells
- SPELL_FEL_CRYSTAL_COSMETIC = 44374,
+ // Crystal effect spells
SPELL_FEL_CRYSTAL_DUMMY = 44329,
- SPELL_FEL_CRYSTAL_VISUAL = 44355,
SPELL_MANA_RAGE = 44320, // This spell triggers 44321, which changes scale and regens mana Requires an entry in spell_script_target
- //Selin's spells
+ // Selin's spells
SPELL_DRAIN_LIFE = 44294,
SPELL_FEL_EXPLOSION = 44314,
SPELL_DRAIN_MANA = 46153 // Heroic only
};
+enum Phases
+{
+ PHASE_NORMAL = 1,
+ PHASE_DRAIN = 2
+};
+
+enum Events
+{
+ EVENT_FEL_EXPLOSION = 1,
+ EVENT_DRAIN_CRYSTAL,
+ EVENT_DRAIN_MANA,
+ EVENT_DRAIN_LIFE,
+ EVENT_EMPOWER
+};
+
enum Misc
{
- CRYSTALS_NUMBER = 5,
- DATA_CRYSTALS = 6,
- CREATURE_FEL_CRYSTAL = 24722
+ ACTION_SWITCH_PHASE = 1
};
class boss_selin_fireheart : public CreatureScript
{
-public:
- boss_selin_fireheart() : CreatureScript("boss_selin_fireheart") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_selin_fireheartAI>(creature);
- };
+ public:
+ boss_selin_fireheart() : CreatureScript("boss_selin_fireheart") { }
- struct boss_selin_fireheartAI : public ScriptedAI
- {
- boss_selin_fireheartAI(Creature* creature) : ScriptedAI(creature)
+ struct boss_selin_fireheartAI : public BossAI
{
- instance = creature->GetInstanceScript();
-
- Crystals.clear();
- //GUIDs per instance is static, so we only need to load them once.
- uint32 size = instance->GetData(DATA_FEL_CRYSTAL_SIZE);
- for (uint8 i = 0; i < size; ++i)
+ boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN)
{
- instance->SetData64(DATA_FEL_CRYSTAL, i);
- uint64 guid = instance->GetData64(DATA_FEL_CRYSTAL);
- TC_LOG_DEBUG("scripts", "Selin: Adding Fel Crystal " UI64FMTD " to list", guid);
- Crystals.push_back(guid);
+ CrystalGUID = 0;
+ _scheduledEvents = false;
}
- }
-
- InstanceScript* instance;
-
- std::list<uint64> Crystals;
- uint32 DrainLifeTimer;
- uint32 DrainManaTimer;
- uint32 FelExplosionTimer;
- uint32 DrainCrystalTimer;
- uint32 EmpowerTimer;
-
- bool IsDraining;
- bool DrainingCrystal;
-
- uint64 CrystalGUID; // This will help us create a pointer to the crystal we are draining. We store GUIDs, never units in case unit is deleted/offline (offline if player of course).
-
- void Reset() override
- {
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void Reset() override
{
- //Unit* unit = ObjectAccessor::GetUnit(*me, FelCrystals[i]);
- if (Creature* creature = ObjectAccessor::GetCreature(*me, *itr))
+ Crystals.clear();
+ me->GetCreatureListWithEntryInGrid(Crystals, NPC_FEL_CRYSTAL, 250.0f);
+
+ for (Creature* creature : Crystals)
{
if (!creature->IsAlive())
- creature->Respawn(); // Let the core handle setting death state, etc.
+ creature->Respawn();
- // Only need to set unselectable flag. You can't attack unselectable units so non_attackable flag is not necessary here.
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- }
- // Set Inst data for encounter
- instance->SetBossState(DATA_SELIN, NOT_STARTED);
-
- DrainLifeTimer = urand(3000, 7000);
- DrainManaTimer = DrainLifeTimer + 5000;
- FelExplosionTimer = 2100;
- if (IsHeroic())
- DrainCrystalTimer = urand(10000, 15000);
- else
- DrainCrystalTimer = urand(20000, 25000);
- EmpowerTimer = 10000;
-
- IsDraining = false;
- DrainingCrystal = false;
- CrystalGUID = 0;
- }
+ _Reset();
+ CrystalGUID = 0;
+ _scheduledEvents = false;
+ }
- void SelectNearestCrystal()
- {
- if (Crystals.empty())
- return;
-
- //float ShortestDistance = 0;
- CrystalGUID = 0;
- Unit* pCrystal = NULL;
- Unit* CrystalChosen = NULL;
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void DoAction(int32 action) override
{
- pCrystal = NULL;
- //pCrystal = ObjectAccessor::GetUnit(*me, FelCrystals[i]);
- pCrystal = ObjectAccessor::GetUnit(*me, *itr);
- if (pCrystal && pCrystal->IsAlive())
+ switch (action)
{
- // select nearest
- if (!CrystalChosen || me->GetDistanceOrder(pCrystal, CrystalChosen, false))
- {
- CrystalGUID = pCrystal->GetGUID();
- CrystalChosen = pCrystal; // Store a copy of pCrystal so we don't need to recreate a pointer to closest crystal for the movement and yell.
- }
+ case ACTION_SWITCH_PHASE:
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2000, 0, PHASE_NORMAL);
+ AttackStart(me->GetVictim());
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+ break;
+ default:
+ break;
}
}
- if (CrystalChosen)
+
+ void SelectNearestCrystal()
{
- Talk(SAY_ENERGY);
- Talk(EMOTE_CRYSTAL);
+ if (Crystals.empty())
+ return;
- CrystalChosen->CastSpell(CrystalChosen, SPELL_FEL_CRYSTAL_COSMETIC, true);
+ Crystals.sort(Trinity::ObjectDistanceOrderPred(me));
+ if (Creature* CrystalChosen = Crystals.front())
+ {
+ Talk(SAY_ENERGY);
+ Talk(EMOTE_CRYSTAL);
- float x, y, z; // coords that we move to, close to the crystal.
- CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE);
+ DoCast(CrystalChosen, SPELL_FEL_CRYSTAL_DUMMY);
+ CrystalGUID = CrystalChosen->GetGUID();
+ Crystals.remove(CrystalChosen);
- me->SetWalk(false);
- me->GetMotionMaster()->MovePoint(1, x, y, z);
- DrainingCrystal = true;
- }
- }
+ float x, y, z;
+ CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE);
- void ShatterRemainingCrystals()
- {
- if (Crystals.empty())
- return;
+ events.SetPhase(PHASE_DRAIN);
+ me->SetWalk(false);
+ me->GetMotionMaster()->MovePoint(1, x, y, z);
+ }
+ }
- //for (uint8 i = 0; i < CRYSTALS_NUMBER; ++i)
- for (std::list<uint64>::const_iterator itr = Crystals.begin(); itr != Crystals.end(); ++itr)
+ void ShatterRemainingCrystals()
{
- //Creature* pCrystal = (ObjectAccessor::GetCreature(*me, FelCrystals[i]));
- Creature* pCrystal = ObjectAccessor::GetCreature(*me, *itr);
- if (pCrystal && pCrystal->IsAlive())
- pCrystal->Kill(pCrystal);
+ if (Crystals.empty())
+ return;
+
+ for (Creature* crystal : Crystals)
+ {
+ if (crystal && crystal->IsAlive())
+ crystal->Kill(crystal);
+ }
}
- }
- void EnterCombat(Unit* /*who*/) override
- {
- Talk(SAY_AGGRO);
- instance->SetBossState(DATA_SELIN, IN_PROGRESS);
- }
+ void EnterCombat(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ _EnterCombat();
- void KilledUnit(Unit* /*victim*/) override
- {
- Talk(SAY_KILL);
- }
+ events.SetPhase(PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2100, 0, PHASE_NORMAL);
+ }
- void MovementInform(uint32 type, uint32 id) override
- {
- if (type == POINT_MOTION_TYPE && id == 1)
+ void KilledUnit(Unit* victim) override
{
- Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
- if (CrystalChosen && CrystalChosen->IsAlive())
- {
- // Make the crystal attackable
- // We also remove NON_ATTACKABLE in case the database has it set.
- CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
- CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true);
- IsDraining = true;
- }
- else
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_KILL);
+ }
+
+ void MovementInform(uint32 type, uint32 id) override
+ {
+ if (type == POINT_MOTION_TYPE && id == 1)
{
- // Make an error message in case something weird happened here
- TC_LOG_ERROR("scripts", "Selin Fireheart unable to drain crystal as the crystal is either dead or despawned");
- DrainingCrystal = false;
+ Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
+ if (CrystalChosen && CrystalChosen->IsAlive())
+ {
+ CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true);
+ events.ScheduleEvent(EVENT_EMPOWER, 10000, PHASE_DRAIN);
+ }
}
}
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- instance->SetBossState(DATA_SELIN, DONE); // Encounter complete!
- ShatterRemainingCrystals();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ ShatterRemainingCrystals();
+ }
- if (!DrainingCrystal)
+ void UpdateAI(uint32 diff) override
{
- uint32 maxPowerMana = me->GetMaxPower(POWER_MANA);
- if (maxPowerMana && ((me->GetPower(POWER_MANA)*100 / maxPowerMana) < 10))
- {
- if (DrainLifeTimer <= diff)
- {
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_DRAIN_LIFE);
- DrainLifeTimer = 10000;
- } else DrainLifeTimer -= diff;
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
- // Heroic only
- if (IsHeroic())
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (DrainManaTimer <= diff)
+ case EVENT_FEL_EXPLOSION:
+ DoCastAOE(SPELL_FEL_EXPLOSION);
+ events.ScheduleEvent(EVENT_FEL_EXPLOSION, 2000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_DRAIN_CRYSTAL:
+ SelectNearestCrystal();
+ _scheduledEvents = false;
+ break;
+ case EVENT_DRAIN_MANA:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
+ DoCast(target, SPELL_DRAIN_MANA);
+ events.ScheduleEvent(EVENT_DRAIN_MANA, 10000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_DRAIN_LIFE:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true))
+ DoCast(target, SPELL_DRAIN_LIFE);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, 10000, 0, PHASE_NORMAL);
+ break;
+ case EVENT_EMPOWER:
{
- DoCast(SelectTarget(SELECT_TARGET_RANDOM, 1), SPELL_DRAIN_MANA);
- DrainManaTimer = 10000;
- } else DrainManaTimer -= diff;
+ Talk(SAY_EMPOWERED);
+
+ Creature* CrystalChosen = ObjectAccessor::GetCreature(*me, CrystalGUID);
+ if (CrystalChosen && CrystalChosen->IsAlive())
+ CrystalChosen->Kill(CrystalChosen);
+
+ CrystalGUID = 0;
+
+ me->GetMotionMaster()->Clear();
+ me->GetMotionMaster()->MoveChase(me->GetVictim());
+ break;
+ }
+ default:
+ break;
}
}
- if (FelExplosionTimer <= diff)
+ if (me->GetPower(POWER_MANA) * 100 / me->GetMaxPower(POWER_MANA) < 10)
{
- if (!me->IsNonMeleeSpellCast(false))
+ if (events.IsInPhase(PHASE_NORMAL) && !_scheduledEvents)
{
- DoCast(me, SPELL_FEL_EXPLOSION);
- FelExplosionTimer = 2000;
- }
- } else FelExplosionTimer -= diff;
+ _scheduledEvents = true;
+ uint32 timer = urand(3000, 7000);
+ events.ScheduleEvent(EVENT_DRAIN_LIFE, timer, 0, PHASE_NORMAL);
- // If below 10% mana, start recharging
- maxPowerMana = me->GetMaxPower(POWER_MANA);
- if (maxPowerMana && ((me->GetPower(POWER_MANA)*100 / maxPowerMana) < 10))
- {
- if (DrainCrystalTimer <= diff)
- {
- SelectNearestCrystal();
if (IsHeroic())
- DrainCrystalTimer = urand(10000, 15000);
+ {
+ events.ScheduleEvent(EVENT_DRAIN_CRYSTAL, urand(10000, 15000), 0, PHASE_NORMAL);
+ events.ScheduleEvent(EVENT_DRAIN_MANA, timer + 5000, 0, PHASE_NORMAL);
+ }
else
- DrainCrystalTimer = urand(20000, 25000);
- } else DrainCrystalTimer -= diff;
+ events.ScheduleEvent(EVENT_DRAIN_CRYSTAL, urand(20000, 25000), 0, PHASE_NORMAL);
+ }
}
- }else
- {
- if (IsDraining)
- {
- if (EmpowerTimer <= diff)
- {
- IsDraining = false;
- DrainingCrystal = false;
-
- Talk(SAY_EMPOWERED);
-
- Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID);
- if (CrystalChosen && CrystalChosen->IsAlive())
- // Use Deal Damage to kill it, not setDeathState.
- CrystalChosen->Kill(CrystalChosen);
-
- CrystalGUID = 0;
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MoveChase(me->GetVictim());
- } else EmpowerTimer -= diff;
- }
+ DoMeleeAttackIfReady();
}
- DoMeleeAttackIfReady(); // No need to check if we are draining crystal here, as the spell has a stun.
- }
- };
+ private:
+ std::list<Creature*> Crystals;
+ uint64 CrystalGUID;
+ bool _scheduledEvents;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<boss_selin_fireheartAI>(creature);
+ };
};
class npc_fel_crystal : public CreatureScript
{
-public:
- npc_fel_crystal() : CreatureScript("npc_fel_crystal") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_fel_crystalAI(creature);
- };
+ public:
+ npc_fel_crystal() : CreatureScript("npc_fel_crystal") { }
- struct npc_fel_crystalAI : public ScriptedAI
- {
- npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { }
-
- void Reset() override { }
- void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*who*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 /*diff*/) override { }
-
- void JustDied(Unit* /*killer*/) override
+ struct npc_fel_crystalAI : public ScriptedAI
{
- if (InstanceScript* instance = me->GetInstanceScript())
+ npc_fel_crystalAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void JustDied(Unit* /*killer*/) override
{
- Creature* Selin = (ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SELIN)));
- if (Selin && Selin->IsAlive())
+ if (InstanceScript* instance = me->GetInstanceScript())
{
- if (CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->CrystalGUID == me->GetGUID())
- {
- // Set this to false if we are the Creature that Selin is draining so his AI flows properly
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->DrainingCrystal = false;
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->IsDraining = false;
- CAST_AI(boss_selin_fireheart::boss_selin_fireheartAI, Selin->AI())->EmpowerTimer = 10000;
- if (Selin->GetVictim())
- {
- Selin->AI()->AttackStart(Selin->GetVictim());
- Selin->GetMotionMaster()->MoveChase(Selin->GetVictim());
- }
- }
+ Creature* Selin = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_SELIN));
+ if (Selin && Selin->IsAlive())
+ Selin->AI()->DoAction(ACTION_SWITCH_PHASE);
}
}
- }
- };
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_fel_crystalAI>(creature);
+ };
};
void AddSC_boss_selin_fireheart()
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
index 950d3c3d8f6..65b3553fd87 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp
@@ -48,13 +48,11 @@ class instance_magisters_terrace : public InstanceMapScript
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
- FelCrystals.clear();
DelrissaDeathCount = 0;
SelinGUID = 0;
DelrissaGUID = 0;
EscapeOrbGUID = 0;
- FelCristalIndex = 0;
memset(KaelStatue, 0, 2 * sizeof(uint64));
}
@@ -65,8 +63,6 @@ class instance_magisters_terrace : public InstanceMapScript
{
case DATA_DELRISSA_DEATH_COUNT:
return DelrissaDeathCount;
- case DATA_FEL_CRYSTAL_SIZE:
- return uint32(FelCrystals.size());
default:
break;
}
@@ -102,9 +98,6 @@ class instance_magisters_terrace : public InstanceMapScript
case NPC_DELRISSA:
DelrissaGUID = creature->GetGUID();
break;
- case NPC_FELCRYSTALS:
- FelCrystals.push_back(creature->GetGUID());
- break;
default:
break;
}
@@ -224,35 +217,18 @@ class instance_magisters_terrace : public InstanceMapScript
return KaelStatue[1];
case DATA_ESCAPE_ORB:
return EscapeOrbGUID;
- case DATA_FEL_CRYSTAL:
- if (FelCrystals.size() < FelCristalIndex)
- {
- TC_LOG_ERROR("scripts", "Magisters Terrace: No Fel Crystals loaded in Inst Data");
- return 0;
- }
-
- return FelCrystals.at(FelCristalIndex);
default:
break;
}
return 0;
}
- void SetData64(uint32 type, uint64 value) override
- {
- if (type == DATA_FEL_CRYSTAL)
- FelCristalIndex = value;
- }
-
protected:
- std::vector<uint64> FelCrystals;
-
uint64 SelinGUID;
uint64 DelrissaGUID;
uint64 KaelStatue[2];
uint64 EscapeOrbGUID;
uint32 DelrissaDeathCount;
- uint8 FelCristalIndex;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
index d3517dfccf6..8b8d7d5b875 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h
@@ -28,8 +28,6 @@ enum DataTypes
DATA_DELRISSA,
DATA_KAELTHAS,
- DATA_FEL_CRYSTAL,
- DATA_FEL_CRYSTAL_SIZE,
DATA_KAEL_STATUE_LEFT,
DATA_KAEL_STATUE_RIGHT,
@@ -42,7 +40,7 @@ enum CreatureIds
{
NPC_SELIN = 24723,
NPC_DELRISSA = 24560,
- NPC_FELCRYSTALS = 24722
+ NPC_FEL_CRYSTAL = 24722
};
enum GameObjectIds
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
index f415eeacc78..d4dc5efb6d5 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellAuras.h"
#include "SpellScript.h"
#include "ahnkahet.h"
@@ -31,14 +32,16 @@ enum Yells
enum Spells
{
+ // Elder Nadox
SPELL_BROOD_PLAGUE = 56130,
H_SPELL_BROOD_RAGE = 59465,
SPELL_ENRAGE = 26662, // Enraged if too far away from home
SPELL_SUMMON_SWARMERS = 56119, // 2x 30178 -- 2x every 10secs
- SPELL_SUMMON_SWARM_GUARD = 56120, // 1x 30176 -- every 25%
- // Spells Adds
- SPELL_SPRINT = 56354,
- SPELL_GUARDIAN_AURA = 56151
+ SPELL_SUMMON_SWARM_GUARD = 56120, // 1x 30176
+
+ // Adds
+ SPELL_SWARM_BUFF = 56281,
+ SPELL_SPRINT = 56354
};
enum Events
@@ -63,7 +66,7 @@ class boss_elder_nadox : public CreatureScript
void Reset() override
{
_Reset();
- AmountHealthModifier = 1;
+ GuardianSummoned = false;
GuardianDied = false;
}
@@ -128,6 +131,7 @@ class boss_elder_nadox : public CreatureScript
events.ScheduleEvent(EVENT_RAGE, urand(10 * IN_MILLISECONDS, 50 * IN_MILLISECONDS));
break;
case EVENT_SUMMON_SWARMER:
+ /// @todo: summoned by egg
DoCast(me, SPELL_SUMMON_SWARMERS);
if (urand(1, 3) == 3) // 33% chance of dialog
Talk(SAY_EGG_SAC);
@@ -145,19 +149,20 @@ class boss_elder_nadox : public CreatureScript
}
}
- if (me->HealthBelowPct(100 - AmountHealthModifier* 25))
+ if (!GuardianSummoned && me->HealthBelowPct(50))
{
+ /// @todo: summoned by egg
Talk(EMOTE_HATCHES, me);
DoCast(me, SPELL_SUMMON_SWARM_GUARD);
- ++AmountHealthModifier;
+ GuardianSummoned = true;
}
DoMeleeAttackIfReady();
}
private:
+ bool GuardianSummoned;
bool GuardianDied;
- uint8 AmountHealthModifier;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -175,20 +180,10 @@ class npc_ahnkahar_nerubian : public CreatureScript
{
npc_ahnkahar_nerubianAI(Creature* creature) : ScriptedAI(creature) { }
- EventMap events;
-
void Reset() override
{
- if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- DoCast(me, SPELL_GUARDIAN_AURA, true);
-
- events.ScheduleEvent(EVENT_SPRINT, 13 * IN_MILLISECONDS);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- if (me->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- me->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
+ _events.Reset();
+ _events.ScheduleEvent(EVENT_SPRINT, 13 * IN_MILLISECONDS);
}
void UpdateAI(uint32 diff) override
@@ -196,23 +191,27 @@ class npc_ahnkahar_nerubian : public CreatureScript
if (!UpdateVictim())
return;
- events.Update(diff);
+ _events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
- case EVENT_SPRINT:
- DoCast(me, SPELL_SPRINT);
- events.ScheduleEvent(EVENT_SPRINT, 20 * IN_MILLISECONDS);
- break;
+ case EVENT_SPRINT:
+ DoCast(me, SPELL_SPRINT);
+ _events.ScheduleEvent(EVENT_SPRINT, 20 * IN_MILLISECONDS);
+ break;
}
}
+
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
@@ -221,95 +220,81 @@ class npc_ahnkahar_nerubian : public CreatureScript
}
};
-//HACK: No, AI. Replace with proper db content?
-class npc_nadox_eggs : public CreatureScript
+// 56159 - Swarm
+class spell_ahn_kahet_swarm : public SpellScriptLoader
{
-public:
- npc_nadox_eggs() : CreatureScript("npc_nadox_eggs") { }
+ public:
+ spell_ahn_kahet_swarm() : SpellScriptLoader("spell_ahn_kahet_swarm") { }
- struct npc_nadox_eggsAI : public ScriptedAI
- {
- npc_nadox_eggsAI(Creature* creature) : ScriptedAI(creature)
+ class spell_ahn_kahet_swarm_SpellScript : public SpellScript
{
- creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
- }
+ PrepareSpellScript(spell_ahn_kahet_swarm_SpellScript);
- void Reset() override { }
- void EnterCombat(Unit* /*who*/) override { }
- void AttackStart(Unit* /*victim*/) override { }
- void MoveInLineOfSight(Unit* /*who*/) override { }
-
- void UpdateAI(uint32 /*diff*/) override { }
- };
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_SWARM_BUFF))
+ return false;
+ return true;
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_nadox_eggsAI(creature);
- }
-};
+ bool Load() override
+ {
+ _targetCount = 0;
+ return true;
+ }
-class GuardianCheck
-{
-public:
- bool operator()(const WorldObject* target) const
- {
- if (target->GetEntry() == NPC_AHNKAHAR_GUARDIAN)
- return true;
-
- return false;
- }
-};
+ void CountTargets(std::list<WorldObject*>& targets)
+ {
+ _targetCount = targets.size();
+ }
-class spell_elder_nadox_guardian : public SpellScriptLoader
-{
-public:
- spell_elder_nadox_guardian() : SpellScriptLoader("spell_elder_nadox_guardian") { }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ if (_targetCount)
+ {
+ if (Aura* aura = GetCaster()->GetAura(SPELL_SWARM_BUFF))
+ {
+ aura->SetStackAmount(_targetCount);
+ aura->RefreshDuration();
+ }
+ else
+ GetCaster()->CastCustomSpell(SPELL_SWARM_BUFF, SPELLVALUE_AURA_STACK, _targetCount, GetCaster(), TRIGGERED_FULL_MASK);
+ }
+ else
+ GetCaster()->RemoveAurasDueToSpell(SPELL_SWARM_BUFF);
+ }
- class spell_elder_nadox_guardian_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_elder_nadox_guardian_SpellScript);
+ void Register() override
+ {
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ahn_kahet_swarm_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ OnEffectHit += SpellEffectFn(spell_ahn_kahet_swarm_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if (GuardianCheck());
- }
+ private:
+ uint32 _targetCount;
+ };
- void Register() override
+ SpellScript* GetSpellScript() const override
{
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_elder_nadox_guardian_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ALLY);
+ return new spell_ahn_kahet_swarm_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_elder_nadox_guardian_SpellScript();
- }
};
class achievement_respect_your_elders : public AchievementCriteriaScript
{
-public:
- achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { }
-
- bool OnCheck(Player* /*player*/, Unit* target) override
- {
- if (!target)
- return false;
-
- if (Creature* Nadox = target->ToCreature())
- if (Nadox->AI()->GetData(DATA_RESPECT_YOUR_ELDERS))
- return true;
+ public:
+ achievement_respect_your_elders() : AchievementCriteriaScript("achievement_respect_your_elders") { }
- return false;
- }
+ bool OnCheck(Player* /*player*/, Unit* target) override
+ {
+ return target && target->GetAI()->GetData(DATA_RESPECT_YOUR_ELDERS);
+ }
};
void AddSC_boss_elder_nadox()
{
new boss_elder_nadox();
new npc_ahnkahar_nerubian();
- new npc_nadox_eggs();
- new spell_elder_nadox_guardian();
+ new spell_ahn_kahet_swarm();
new achievement_respect_your_elders();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index 022c43f4395..d0ad42d38e1 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -961,9 +961,11 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE)))
{
+ me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true);
+ lichking->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
+ lichking->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
AttackStart(lichking);
lichking->AI()->AttackStart(me);
- me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true);
}
me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp
index 2d5028bac05..0897131eaf8 100644
--- a/src/server/scripts/Northrend/zone_dalaran.cpp
+++ b/src/server/scripts/Northrend/zone_dalaran.cpp
@@ -128,7 +128,118 @@ public:
}
};
+enum MinigobData
+{
+ ZONE_DALARAN = 4395,
+
+ SPELL_MANABONKED = 61834,
+ SPELL_TELEPORT_VISUAL = 51347,
+ SPELL_IMPROVED_BLINK = 61995,
+
+ EVENT_SELECT_TARGET = 1,
+ EVENT_BLINK = 2,
+ EVENT_DESPAWN_VISUAL = 3,
+ EVENT_DESPAWN = 4,
+
+ MAIL_MINIGOB_ENTRY = 264,
+ MAIL_DELIVER_DELAY_MIN = 5*MINUTE,
+ MAIL_DELIVER_DELAY_MAX = 15*MINUTE
+};
+
+class npc_minigob_manabonk : public CreatureScript
+{
+ public:
+ npc_minigob_manabonk() : CreatureScript("npc_minigob_manabonk") {}
+
+ struct npc_minigob_manabonkAI : public ScriptedAI
+ {
+ npc_minigob_manabonkAI(Creature* creature) : ScriptedAI(creature)
+ {
+ me->setActive(true);
+ }
+
+ void Reset()
+ {
+ me->SetVisible(false);
+ events.ScheduleEvent(EVENT_SELECT_TARGET, IN_MILLISECONDS);
+ }
+
+ Player* SelectTargetInDalaran()
+ {
+ std::list<Player*> PlayerInDalaranList;
+ PlayerInDalaranList.clear();
+
+ Map::PlayerList const &players = me->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (Player* player = itr->GetSource()->ToPlayer())
+ if (player->GetZoneId() == ZONE_DALARAN && !player->IsFlying() && !player->IsMounted() && !player->IsGameMaster())
+ PlayerInDalaranList.push_back(player);
+
+ if (PlayerInDalaranList.empty())
+ return NULL;
+ return Trinity::Containers::SelectRandomContainerElement(PlayerInDalaranList);
+ }
+
+ void SendMailToPlayer(Player* player)
+ {
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ int16 deliverDelay = irand(MAIL_DELIVER_DELAY_MIN, MAIL_DELIVER_DELAY_MAX);
+ MailDraft(MAIL_MINIGOB_ENTRY, true).SendMailTo(trans, MailReceiver(player), MailSender(MAIL_CREATURE, me->GetEntry()), MAIL_CHECK_MASK_NONE, deliverDelay);
+ CharacterDatabase.CommitTransaction(trans);
+ }
+
+ void UpdateAI(uint32 diff)
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SELECT_TARGET:
+ me->SetVisible(true);
+ DoCast(me, SPELL_TELEPORT_VISUAL);
+ if (Player* player = SelectTargetInDalaran())
+ {
+ me->NearTeleportTo(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0.0f);
+ DoCast(player, SPELL_MANABONKED);
+ SendMailToPlayer(player);
+ }
+ events.ScheduleEvent(EVENT_BLINK, 3*IN_MILLISECONDS);
+ break;
+ case EVENT_BLINK:
+ {
+ DoCast(me, SPELL_IMPROVED_BLINK);
+ Position pos = me->GetRandomNearPosition(frand(15, 40));
+ me->GetMotionMaster()->MovePoint(0, pos.m_positionX, pos.m_positionY, pos.m_positionZ);
+ events.ScheduleEvent(EVENT_DESPAWN, 3 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 2.5*IN_MILLISECONDS);
+ break;
+ }
+ case EVENT_DESPAWN_VISUAL:
+ DoCast(me, SPELL_TELEPORT_VISUAL);
+ break;
+ case EVENT_DESPAWN:
+ me->DespawnOrUnsummon();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap events;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_minigob_manabonkAI(creature);
+ }
+};
+
void AddSC_dalaran()
{
- new npc_mageguard_dalaran;
+ new npc_mageguard_dalaran();
+ new npc_minigob_manabonk();
}
diff --git a/src/server/shared/Configuration/Config.h b/src/server/shared/Configuration/Config.h
index 68daca5440f..42c3a700f3f 100644
--- a/src/server/shared/Configuration/Config.h
+++ b/src/server/shared/Configuration/Config.h
@@ -35,8 +35,8 @@ public:
static ConfigMgr* instance()
{
- static ConfigMgr *instance = new ConfigMgr();
- return instance;
+ static ConfigMgr instance;
+ return &instance;
}
bool Reload();
diff --git a/src/server/shared/Cryptography/Authentication/WorldPacketCrypt.cpp b/src/server/shared/Cryptography/Authentication/WorldPacketCrypt.cpp
index 10403b84a1f..b9d9b86005c 100644
--- a/src/server/shared/Cryptography/Authentication/WorldPacketCrypt.cpp
+++ b/src/server/shared/Cryptography/Authentication/WorldPacketCrypt.cpp
@@ -20,6 +20,8 @@
#include "Cryptography/HmacHash.h"
#include "Cryptography/BigNumber.h"
+#include <cstring>
+
WorldPacketCrypt::WorldPacketCrypt() : PacketCrypt(SHA_DIGEST_LENGTH)
{
}
diff --git a/src/server/shared/Cryptography/BigNumber.cpp b/src/server/shared/Cryptography/BigNumber.cpp
index 364bb8e452f..b68c91001ae 100644
--- a/src/server/shared/Cryptography/BigNumber.cpp
+++ b/src/server/shared/Cryptography/BigNumber.cpp
@@ -19,6 +19,7 @@
#include "Cryptography/BigNumber.h"
#include <openssl/bn.h>
#include <openssl/crypto.h>
+#include <cstring>
#include <algorithm>
#include <memory>
diff --git a/src/server/shared/Cryptography/SHA1.cpp b/src/server/shared/Cryptography/SHA1.cpp
index c89469bafb5..d47b13067cd 100644
--- a/src/server/shared/Cryptography/SHA1.cpp
+++ b/src/server/shared/Cryptography/SHA1.cpp
@@ -18,6 +18,7 @@
#include "SHA1.h"
#include "BigNumber.h"
+#include <cstring>
#include <stdarg.h>
SHA1Hash::SHA1Hash()
diff --git a/src/server/shared/Cryptography/WardenKeyGeneration.h b/src/server/shared/Cryptography/WardenKeyGeneration.h
index 11bc00d641a..9832d5a9c72 100644
--- a/src/server/shared/Cryptography/WardenKeyGeneration.h
+++ b/src/server/shared/Cryptography/WardenKeyGeneration.h
@@ -18,6 +18,8 @@
#include "SHA1.h"
+#include <cstring>
+
#ifndef _WARDEN_KEY_GENERATION_H
#define _WARDEN_KEY_GENERATION_H
diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h
index aa57a65167d..8865c70fdf8 100644
--- a/src/server/shared/Define.h
+++ b/src/server/shared/Define.h
@@ -21,15 +21,16 @@
#include "CompilerDefs.h"
+#include <cstddef>
+#include <cinttypes>
+#include <climits>
+
#if COMPILER == COMPILER_GNU
# if !defined(__STDC_FORMAT_MACROS)
# define __STDC_FORMAT_MACROS
# endif
#endif
-#include <cstddef>
-#include <cinttypes>
-
#define TRINITY_LITTLEENDIAN 0
#define TRINITY_BIGENDIAN 1
diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h
index e9e57415073..fe55982f15f 100644
--- a/src/server/shared/Dynamic/ObjectRegistry.h
+++ b/src/server/shared/Dynamic/ObjectRegistry.h
@@ -35,8 +35,8 @@ class ObjectRegistry
static ObjectRegistry<T, Key>* instance()
{
- static ObjectRegistry<T, Key>* instance = new ObjectRegistry<T, Key>();
- return instance;
+ static ObjectRegistry<T, Key> instance;
+ return &instance;
}
/// Returns a registry item
diff --git a/src/server/shared/Logging/AppenderConsole.cpp b/src/server/shared/Logging/AppenderConsole.cpp
index 8102d3b6021..20923162906 100644
--- a/src/server/shared/Logging/AppenderConsole.cpp
+++ b/src/server/shared/Logging/AppenderConsole.cpp
@@ -16,14 +16,14 @@
*/
#include <sstream>
-#if PLATFORM == PLATFORM_WINDOWS
- #include <windows.h>
-#endif
#include "AppenderConsole.h"
#include "Config.h"
#include "Util.h"
+#if PLATFORM == PLATFORM_WINDOWS
+ #include <Windows.h>
+#endif
AppenderConsole::AppenderConsole(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags):
Appender(id, name, APPENDER_CONSOLE, level, flags), _colored(false)
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index e739c9eaf4e..8ae8db5bf5f 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -43,15 +43,15 @@ class Log
static Log* instance(boost::asio::io_service* ioService = nullptr)
{
- static Log* instance = new Log();
+ static Log instance;
if (ioService != nullptr)
{
- instance->_ioService = ioService;
- instance->_strand = new boost::asio::strand(*ioService);
+ instance._ioService = ioService;
+ instance._strand = new boost::asio::strand(*ioService);
}
- return instance;
+ return &instance;
}
void LoadFromConfig();
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index a68d836252d..446ee889c90 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -21,8 +21,15 @@
#include "utf8.h"
#include "SFMT.h"
#include "Errors.h" // for ASSERT
+#include <stdarg.h>
#include <boost/thread/tss.hpp>
+#if PLATFORM == PLATFORM_UNIX
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+#endif
+
static boost::thread_specific_ptr<SFMTRand> sfmtRand;
static SFMTRand* GetRng()