[2796] Applied MaNGOS coding style (see trunk/bcpp.cfg).
[mangos-git.git] / src / game / World.h
blob953537b03e28a621310aa87d2495c55aef886536
1 /*
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
19 #ifndef __WORLD_H
20 #define __WORLD_H
22 #include "Timer.h"
23 #include "Policies/Singleton.h"
24 #include "SharedDefines.h"
25 #include <string>
26 using namespace std;
28 class Object;
29 class WorldPacket;
30 class WorldSession;
31 class Player;
32 class Weather;
34 enum WorldTimers
36 WUPDATE_OBJECTS = 0,
37 WUPDATE_SESSIONS = 1,
38 WUPDATE_AUCTIONS = 2,
39 WUPDATE_WEATHERS = 3,
40 WUPDATE_COUNT = 4
43 enum WorldConfigs
45 CONFIG_LOG_LEVEL = 0,
46 CONFIG_LOG_WORLD,
47 CONFIG_COMPRESSION,
48 CONFIG_GRID_UNLOAD,
49 CONFIG_INTERVAL_SAVE,
50 CONFIG_INTERVAL_GRIDCLEAN,
51 CONFIG_INTERVAL_MAPUPDATE,
52 CONFIG_INTERVAL_CHANGEWEATHER,
53 CONFIG_PORT_WORLD,
54 CONFIG_PORT_REALM,
55 CONFIG_SOCKET_SELECTTIME,
56 CONFIG_GROUP_XP_DISTANCE,
57 CONFIG_GROUP_XP_LEVELDIFF,
58 CONFIG_SIGHT_MONSTER,
59 CONFIG_SIGHT_GUARDER,
60 CONFIG_GAME_TYPE,
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,
73 CONFIG_VALUE_COUNT
76 // bitmask
77 enum LogFilters
79 LOG_FILTER_TRANSPORT_MOVES = 1,
80 LOG_FILTER_CREATURE_MOVES = 2
83 enum Rates
85 RATE_HEALTH=0,
86 RATE_POWER_MANA,
87 RATE_POWER_RAGE,
88 RATE_POWER_FOCUS,
89 RATE_DROP_ITEMS,
90 RATE_DROP_MONEY,
91 RATE_XP_KILL,
92 RATE_XP_QUEST,
93 RATE_XP_EXPLORE,
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,
104 RATE_CREATURE_AGGRO,
105 RATE_REST_INGAME,
106 RATE_REST_OFFLINE_IN_TAVERN_OR_CITY,
107 RATE_REST_OFFLINE_IN_WILDERNESS,
108 MAX_RATES
111 enum EnviromentalDamage
113 DAMAGE_EXHAUSTED = 0,
114 DAMAGE_DROWNING = 1,
115 DAMAGE_FALL = 2,
116 DAMAGE_LAVA = 3,
117 DAMAGE_SLIME = 4,
118 DAMAGE_FIRE = 5
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
131 struct ScriptInfo;
132 struct ScriptAction
134 Object* source;
135 Object* target;
136 ScriptInfo* script;
139 class World
141 public:
142 static volatile bool m_stopEvent;
144 World();
145 ~World();
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];
197 else
198 return 0;
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;
212 protected:
214 time_t _UpdateGameTime();
216 private:
218 IntervalTimer m_timers[WUPDATE_COUNT];
219 uint32 mail_timer;
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;
229 std::string m_motd;
231 time_t m_gameTime;
233 time_t m_nextThinkTime;
234 uint32 m_configs[CONFIG_VALUE_COUNT];
235 uint32 m_logFilter;
236 time_t m_Last_tick;
237 uint32 m_ShutdownIdleMode;
238 uint32 m_ShutdownTimer;
241 extern uint32 realmID;
243 #define sWorld MaNGOS::Singleton<World>::Instance()
244 #endif