2 * Copyright (C) 2005,2006 MaNGOS <http://www.mangosproject.org/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "Policies/Singleton.h"
24 #include "SharedDefines.h"
50 CONFIG_INTERVAL_GRIDCLEAN
,
51 CONFIG_INTERVAL_MAPUPDATE
,
52 CONFIG_INTERVAL_CHANGEWEATHER
,
55 CONFIG_SOCKET_SELECTTIME
,
56 CONFIG_GROUP_XP_DISTANCE
,
57 CONFIG_GROUP_XP_LEVELDIFF
,
61 CONFIG_ALLOW_TWO_SIDE_ACCOUNTS
,
62 CONFIG_ALLOW_TWO_SIDE_INTERACTION
,
63 CONFIG_ALLOW_TWO_SIDE_WHO_LIST
,
64 CONFIG_MAX_PLAYER_LEVEL
,
65 CONFIG_MAX_PRIMARY_TRADE_SKILL
,
66 CONFIG_MIN_PETITION_SIGNS
,
67 CONFIG_GM_WISPERING_TO
,
68 CONFIG_GM_IN_WHO_LIST
,
69 CONFIG_SKILL_CHANCE_ORANGE
,
70 CONFIG_SKILL_CHANCE_YELLOW
,
71 CONFIG_SKILL_CHANCE_GREEN
,
72 CONFIG_SKILL_CHANCE_GREY
,
79 LOG_FILTER_TRANSPORT_MOVES
= 1,
80 LOG_FILTER_CREATURE_MOVES
= 2
94 RATE_CREATURE_NORMAL_HP
,
95 RATE_CREATURE_ELITE_ELITE_HP
,
96 RATE_CREATURE_ELITE_RAREELITE_HP
,
97 RATE_CREATURE_ELITE_WORLDBOSS_HP
,
98 RATE_CREATURE_ELITE_RARE_HP
,
99 RATE_CREATURE_NORMAL_DAMAGE
,
100 RATE_CREATURE_ELITE_ELITE_DAMAGE
,
101 RATE_CREATURE_ELITE_RAREELITE_DAMAGE
,
102 RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE
,
103 RATE_CREATURE_ELITE_RARE_DAMAGE
,
106 RATE_REST_OFFLINE_IN_TAVERN_OR_CITY
,
107 RATE_REST_OFFLINE_IN_WILDERNESS
,
111 enum EnviromentalDamage
113 DAMAGE_EXHAUSTED
= 0,
121 // ServerMessages.dbc
122 enum ServerMessageType
124 SERVER_MSG_SHUTDOWN_TIME
= 1,
125 SERVER_MSG_RESTART_TIME
= 2,
126 SERVER_MSG_STRING
= 3,
127 SERVER_MSG_SHUTDOWN_CANCELLED
= 4,
128 SERVER_MSG_RESTART_CANCELLED
= 5
142 static volatile bool m_stopEvent
;
147 WorldSession
* FindSession(uint32 id
) const;
148 void AddSession(WorldSession
*s
);
149 void RemoveSession(uint32 id
);
150 uint32
GetSessionCount() const { return m_sessions
.size(); }
151 Player
* FindPlayerInZone(uint32 zone
);
153 Weather
* FindWeather(uint32 id
) const;
154 void AddWeather(Weather
*w
);
155 void RemoveWeather(uint32 id
);
157 uint32
GetPlayerLimit() const { return m_playerLimit
; }
158 void SetPlayerLimit(uint32 limit
) { m_playerLimit
= limit
; }
160 bool getAllowMovement() const { return m_allowMovement
; }
161 void SetAllowMovement(bool allow
) { m_allowMovement
= allow
; }
163 void SetMotd(const char *motd
) { m_motd
= motd
; }
164 const char* GetMotd() const { return m_motd
.c_str(); }
166 time_t GetGameTime() const { return m_gameTime
; }
168 void SetInitialWorldSettings();
170 void SendWorldText(const char *text
, WorldSession
*self
= 0);
171 void SendGlobalMessage(WorldPacket
*packet
, WorldSession
*self
= 0);
172 void SendZoneMessage(uint32 zone
, WorldPacket
*packet
, WorldSession
*self
= 0);
173 void SendZoneText(uint32 zone
, const char *text
, WorldSession
*self
= 0);
174 void SendServerMessage(ServerMessageType type
, const char *text
= "", Player
* player
= NULL
);
176 bool IsShutdowning() const { return m_ShutdownTimer
> 0; }
177 void ShutdownServ(uint32 time
, bool idle
= false);
178 void ShutdownCancel();
179 void ShutdownMsg(bool show
= false, Player
* player
= NULL
);
181 void Update(time_t diff
);
182 time_t GetLastTickTime() const { return m_Last_tick
; }
184 void setRate(Rates rate
,float value
) { rate_values
[rate
]=value
; }
185 float getRate(Rates rate
) const { return rate_values
[rate
]; }
187 void setConfig(uint32 index
,uint32 value
)
189 if(index
<CONFIG_VALUE_COUNT
)
190 m_configs
[index
]=value
;
193 uint32
getConfig(uint32 index
) const
195 if(index
<CONFIG_VALUE_COUNT
)
196 return m_configs
[index
];
200 uint32
getLogFilter() const { return m_logFilter
; }
202 bool IsPvPRealm() { return (MaNGOS::Singleton
<World
>::Instance().getConfig(CONFIG_GAME_TYPE
) == 1 || MaNGOS::Singleton
<World
>::Instance().getConfig(CONFIG_GAME_TYPE
) == 8); }
204 bool KickPlayer(std::string playerName
);
205 bool BanAccount(std::string nameOrIP
);
206 bool RemoveBanAccount(std::string nameOrIP
);
208 multimap
<uint64
, ScriptAction
> scriptSchedule
;
209 void ScriptsProcess();
210 uint64 internalGameTime
;
214 time_t _UpdateGameTime();
218 IntervalTimer m_timers
[WUPDATE_COUNT
];
220 uint32 mail_timer_expires
;
222 typedef HM_NAMESPACE::hash_map
<uint32
, Weather
*> WeatherMap
;
223 WeatherMap m_weathers
;
224 typedef HM_NAMESPACE::hash_map
<uint32
, WorldSession
*> SessionMap
;
225 SessionMap m_sessions
;
226 float rate_values
[MAX_RATES
];
227 uint32 m_playerLimit
;
228 bool m_allowMovement
;
233 time_t m_nextThinkTime
;
234 uint32 m_configs
[CONFIG_VALUE_COUNT
];
237 uint32 m_ShutdownIdleMode
;
238 uint32 m_ShutdownTimer
;
241 extern uint32 realmID
;
243 #define sWorld MaNGOS::Singleton<World>::Instance()