root/trunk/src/game/World.h @ 206

Revision 206, 21.6 kB (checked in by yumileroy, 17 years ago)

[svn] * Switch from hashmap to unordered map. - cleanup source - mangos. Help - Aokromes

Original author: KingPin?
Date: 2008-11-10 06:53:00-06:00

Line 
1/*
2 * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3 *
4 * Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21/// \addtogroup world The World
22/// @{
23/// \file
24
25#ifndef __WORLD_H
26#define __WORLD_H
27
28#include "Common.h"
29#include "Timer.h"
30#include "Policies/Singleton.h"
31#include "SharedDefines.h"
32
33#include <map>
34#include <set>
35#include <list>
36
37class Object;
38class WorldPacket;
39class WorldSession;
40class Player;
41class Weather;
42struct ScriptAction;
43struct ScriptInfo;
44class SqlResultQueue;
45class QueryResult;
46class WorldSocket;
47
48enum ShutdownMask
49{
50    SHUTDOWN_MASK_RESTART = 1,
51    SHUTDOWN_MASK_IDLE    = 2,
52};
53
54/// Timers for different object refresh rates
55enum WorldTimers
56{
57    WUPDATE_OBJECTS     = 0,
58    WUPDATE_SESSIONS    = 1,
59    WUPDATE_AUCTIONS    = 2,
60    WUPDATE_WEATHERS    = 3,
61    WUPDATE_UPTIME      = 4,
62    WUPDATE_CORPSES     = 5,
63    WUPDATE_EVENTS      = 6,
64    WUPDATE_COUNT       = 7,
65
66};
67
68/// Configuration elements
69enum WorldConfigs
70{
71    CONFIG_COMPRESSION = 0,
72    CONFIG_GRID_UNLOAD,
73    CONFIG_INTERVAL_SAVE,
74    CONFIG_INTERVAL_GRIDCLEAN,
75    CONFIG_INTERVAL_MAPUPDATE,
76    CONFIG_INTERVAL_CHANGEWEATHER,
77    CONFIG_PORT_WORLD,
78    CONFIG_SOCKET_SELECTTIME,
79    CONFIG_GROUP_XP_DISTANCE,
80    CONFIG_SIGHT_MONSTER,
81    CONFIG_SIGHT_GUARDER,
82    CONFIG_GAME_TYPE,
83    CONFIG_REALM_ZONE,
84    CONFIG_ALLOW_TWO_SIDE_ACCOUNTS,
85    CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT,
86    CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL,
87    CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP,
88    CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD,
89    CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION,
90    CONFIG_ALLOW_TWO_SIDE_INTERACTION_MAIL,
91    CONFIG_ALLOW_TWO_SIDE_WHO_LIST,
92    CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND,
93    CONFIG_STRICT_PLAYER_NAMES,
94    CONFIG_STRICT_CHARTER_NAMES,
95    CONFIG_STRICT_PET_NAMES,
96    CONFIG_CHARACTERS_CREATING_DISABLED,
97    CONFIG_MAX_WHO,
98    CONFIG_CHARACTERS_PER_ACCOUNT,
99    CONFIG_CHARACTERS_PER_REALM,
100    CONFIG_SKIP_CINEMATICS,
101    CONFIG_MAX_PLAYER_LEVEL,
102    CONFIG_START_PLAYER_LEVEL,
103    CONFIG_MAX_HONOR_POINTS,
104    CONFIG_MAX_ARENA_POINTS,
105    CONFIG_INSTANCE_IGNORE_LEVEL,
106    CONFIG_INSTANCE_IGNORE_RAID,
107    CONFIG_BATTLEGROUND_CAST_DESERTER,
108    CONFIG_INSTANCE_RESET_TIME_HOUR,
109    CONFIG_INSTANCE_UNLOAD_DELAY,
110    CONFIG_CAST_UNSTUCK,
111    CONFIG_MAX_PRIMARY_TRADE_SKILL,
112    CONFIG_MIN_PETITION_SIGNS,
113    CONFIG_GM_LOGIN_STATE,
114    CONFIG_GM_ACCEPT_TICKETS,
115    CONFIG_GM_CHAT,
116    CONFIG_GM_WISPERING_TO,
117    CONFIG_GM_IN_GM_LIST,
118    CONFIG_GM_IN_WHO_LIST,
119    CONFIG_GM_LOG_TRADE,
120    CONFIG_GROUP_VISIBILITY,
121    CONFIG_MAIL_DELIVERY_DELAY,
122    CONFIG_UPTIME_UPDATE,
123    CONFIG_SKILL_CHANCE_ORANGE,
124    CONFIG_SKILL_CHANCE_YELLOW,
125    CONFIG_SKILL_CHANCE_GREEN,
126    CONFIG_SKILL_CHANCE_GREY,
127    CONFIG_SKILL_CHANCE_MINING_STEPS,
128    CONFIG_SKILL_CHANCE_SKINNING_STEPS,
129    CONFIG_SKILL_PROSPECTING,
130    CONFIG_SKILL_GAIN_CRAFTING,
131    CONFIG_SKILL_GAIN_DEFENSE,
132    CONFIG_SKILL_GAIN_GATHERING,
133    CONFIG_SKILL_GAIN_WEAPON,
134    CONFIG_MAX_OVERSPEED_PINGS,
135    CONFIG_SAVE_RESPAWN_TIME_IMMEDIATLY,
136    CONFIG_WEATHER,
137    CONFIG_EXPANSION,
138    CONFIG_CHATFLOOD_MESSAGE_COUNT,
139    CONFIG_CHATFLOOD_MESSAGE_DELAY,
140    CONFIG_CHATFLOOD_MUTE_TIME,
141    CONFIG_EVENT_ANNOUNCE,
142    CONFIG_CREATURE_FAMILY_ASSISTEMCE_RADIUS,
143    CONFIG_WORLD_BOSS_LEVEL_DIFF,
144    CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF,
145    CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF,
146    CONFIG_RESTRICTED_LFG_CHANNEL,
147    CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL,
148    CONFIG_TALENTS_INSPECTING,
149    CONFIG_CHAT_FAKE_MESSAGE_PREVENTING,
150    CONFIG_CORPSE_DECAY_NORMAL,
151    CONFIG_CORPSE_DECAY_RARE,
152    CONFIG_CORPSE_DECAY_ELITE,
153    CONFIG_CORPSE_DECAY_RAREELITE,
154    CONFIG_CORPSE_DECAY_WORLDBOSS,
155    CONFIG_ADDON_CHANNEL,
156    CONFIG_DEATH_SICKNESS_LEVEL,
157    CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVP,
158    CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE,
159
160    CONFIG_PLAYER_START_GOLD,
161    CONFIG_PLAYER_START_HONOR,
162    CONFIG_PLAYER_START_ARENAPTS,
163    CONFIG_GM_START_LEVEL,
164    CONFIG_INSTANT_LOGOUT,
165    CONFIG_BG_START_MUSIC,
166    CONFIG_START_ALL_SPELLS,
167    CONFIG_HONOR_AFTER_DUEL,
168    CONFIG_START_ALL_EXPLORED,
169    CONFIG_DISABLE_BREATHING,
170    CONFIG_START_ALL_REP,
171    CONFIG_ALWAYS_MAXSKILL,
172    CONFIG_START_ALL_TAXI,
173    CONFIG_PVP_TOKEN_ENABLE,
174    CONFIG_PVP_TOKEN_MAP_TYPE,
175    CONFIG_PVP_TOKEN_ID,
176    CONFIG_PVP_TOKEN_COUNT,
177    CONFIG_NO_RESET_TALENT_COST,
178
179    CONFIG_THREAT_RADIUS,
180    CONFIG_DECLINED_NAMES_USED,
181    CONFIG_LISTEN_RANGE_SAY,
182    CONFIG_LISTEN_RANGE_TEXTEMOTE,
183    CONFIG_LISTEN_RANGE_YELL,
184    CONFIG_ARENA_MAX_RATING_DIFFERENCE,
185    CONFIG_ARENA_RATING_DISCARD_TIMER,
186    CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS,
187    CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS,
188    CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER,
189    CONFIG_VALUE_COUNT
190};
191
192/// Server rates
193enum Rates
194{
195    RATE_HEALTH=0,
196    RATE_POWER_MANA,
197    RATE_POWER_RAGE_INCOME,
198    RATE_POWER_RAGE_LOSS,
199    RATE_POWER_FOCUS,
200    RATE_SKILL_DISCOVERY,
201    RATE_DROP_ITEM_POOR,
202    RATE_DROP_ITEM_NORMAL,
203    RATE_DROP_ITEM_UNCOMMON,
204    RATE_DROP_ITEM_RARE,
205    RATE_DROP_ITEM_EPIC,
206    RATE_DROP_ITEM_LEGENDARY,
207    RATE_DROP_ITEM_ARTIFACT,
208    RATE_DROP_ITEM_REFERENCED,
209    RATE_DROP_MONEY,
210    RATE_XP_KILL,
211    RATE_XP_QUEST,
212    RATE_XP_EXPLORE,
213    RATE_XP_PAST_70,
214    RATE_REPUTATION_GAIN,
215    RATE_CREATURE_NORMAL_HP,
216    RATE_CREATURE_ELITE_ELITE_HP,
217    RATE_CREATURE_ELITE_RAREELITE_HP,
218    RATE_CREATURE_ELITE_WORLDBOSS_HP,
219    RATE_CREATURE_ELITE_RARE_HP,
220    RATE_CREATURE_NORMAL_DAMAGE,
221    RATE_CREATURE_ELITE_ELITE_DAMAGE,
222    RATE_CREATURE_ELITE_RAREELITE_DAMAGE,
223    RATE_CREATURE_ELITE_WORLDBOSS_DAMAGE,
224    RATE_CREATURE_ELITE_RARE_DAMAGE,
225    RATE_CREATURE_NORMAL_SPELLDAMAGE,
226    RATE_CREATURE_ELITE_ELITE_SPELLDAMAGE,
227    RATE_CREATURE_ELITE_RAREELITE_SPELLDAMAGE,
228    RATE_CREATURE_ELITE_WORLDBOSS_SPELLDAMAGE,
229    RATE_CREATURE_ELITE_RARE_SPELLDAMAGE,
230    RATE_CREATURE_AGGRO,
231    RATE_REST_INGAME,
232    RATE_REST_OFFLINE_IN_TAVERN_OR_CITY,
233    RATE_REST_OFFLINE_IN_WILDERNESS,
234    RATE_DAMAGE_FALL,
235    RATE_AUCTION_TIME,
236    RATE_AUCTION_DEPOSIT,
237    RATE_AUCTION_CUT,
238    RATE_HONOR,
239    RATE_MINING_AMOUNT,
240    RATE_MINING_NEXT,
241    RATE_TALENT,
242    RATE_LOYALTY,
243    RATE_CORPSE_DECAY_LOOTED,
244    RATE_INSTANCE_RESET_TIME,
245    RATE_TARGET_POS_RECALCULATION_RANGE,
246    RATE_DURABILITY_LOSS_DAMAGE,
247    RATE_DURABILITY_LOSS_PARRY,
248    RATE_DURABILITY_LOSS_ABSORB,
249    RATE_DURABILITY_LOSS_BLOCK,
250    MAX_RATES
251};
252
253/// Type of server
254enum RealmType
255{
256    REALM_TYPE_NORMAL = 0,
257    REALM_TYPE_PVP = 1,
258    REALM_TYPE_NORMAL2 = 4,
259    REALM_TYPE_RP = 6,
260    REALM_TYPE_RPPVP = 8,
261    REALM_TYPE_FFA_PVP = 16                                 // custom, free for all pvp mode like arena PvP in all zones except rest activated places and sanctuaries
262                                                            // replaced by REALM_PVP in realm list
263};
264
265enum RealmZone
266{
267    REALM_ZONE_UNKNOWN       = 0,                           // any language
268    REALM_ZONE_DEVELOPMENT   = 1,                           // any language
269    REALM_ZONE_UNITED_STATES = 2,                           // extended-Latin
270    REALM_ZONE_OCEANIC       = 3,                           // extended-Latin
271    REALM_ZONE_LATIN_AMERICA = 4,                           // extended-Latin
272    REALM_ZONE_TOURNAMENT_5  = 5,                           // basic-Latin at create, any at login
273    REALM_ZONE_KOREA         = 6,                           // East-Asian
274    REALM_ZONE_TOURNAMENT_7  = 7,                           // basic-Latin at create, any at login
275    REALM_ZONE_ENGLISH       = 8,                           // extended-Latin
276    REALM_ZONE_GERMAN        = 9,                           // extended-Latin
277    REALM_ZONE_FRENCH        = 10,                          // extended-Latin
278    REALM_ZONE_SPANISH       = 11,                          // extended-Latin
279    REALM_ZONE_RUSSIAN       = 12,                          // Cyrillic
280    REALM_ZONE_TOURNAMENT_13 = 13,                          // basic-Latin at create, any at login
281    REALM_ZONE_TAIWAN        = 14,                          // East-Asian
282    REALM_ZONE_TOURNAMENT_15 = 15,                          // basic-Latin at create, any at login
283    REALM_ZONE_CHINA         = 16,                          // East-Asian
284    REALM_ZONE_CN1           = 17,                          // basic-Latin at create, any at login
285    REALM_ZONE_CN2           = 18,                          // basic-Latin at create, any at login
286    REALM_ZONE_CN3           = 19,                          // basic-Latin at create, any at login
287    REALM_ZONE_CN4           = 20,                          // basic-Latin at create, any at login
288    REALM_ZONE_CN5           = 21,                          // basic-Latin at create, any at login
289    REALM_ZONE_CN6           = 22,                          // basic-Latin at create, any at login
290    REALM_ZONE_CN7           = 23,                          // basic-Latin at create, any at login
291    REALM_ZONE_CN8           = 24,                          // basic-Latin at create, any at login
292    REALM_ZONE_TOURNAMENT_25 = 25,                          // basic-Latin at create, any at login
293    REALM_ZONE_TEST_SERVER   = 26,                          // any language
294    REALM_ZONE_TOURNAMENT_27 = 27,                          // basic-Latin at create, any at login
295    REALM_ZONE_QA_SERVER     = 28,                          // any language
296    REALM_ZONE_CN9           = 29                           // basic-Latin at create, any at login
297};
298
299// DB scripting commands
300#define SCRIPT_COMMAND_TALK                  0              // source = unit, target=any, datalong ( 0=say, 1=whisper, 2=yell, 3=emote text)
301#define SCRIPT_COMMAND_EMOTE                 1              // source = unit, datalong = anim_id
302#define SCRIPT_COMMAND_FIELD_SET             2              // source = any, datalong = field_id, datalog2 = value
303#define SCRIPT_COMMAND_MOVE_TO               3              // source = Creature, datalog2 = time, x/y/z
304#define SCRIPT_COMMAND_FLAG_SET              4              // source = any, datalong = field_id, datalog2 = bitmask
305#define SCRIPT_COMMAND_FLAG_REMOVE           5              // source = any, datalong = field_id, datalog2 = bitmask
306#define SCRIPT_COMMAND_TELEPORT_TO           6              // source or target with Player, datalong = map_id, x/y/z
307#define SCRIPT_COMMAND_QUEST_EXPLORED        7              // one from source or target must be Player, another GO/Creature, datalong=quest_id, datalong2=distance or 0
308#define SCRIPT_COMMAND_RESPAWN_GAMEOBJECT    9              // source = any (summoner), datalong=db_guid, datalong2=despawn_delay
309#define SCRIPT_COMMAND_TEMP_SUMMON_CREATURE 10              // source = any (summoner), datalong=creature entry, datalong2=despawn_delay
310#define SCRIPT_COMMAND_OPEN_DOOR            11              // source = unit, datalong=db_guid, datalong2=reset_delay
311#define SCRIPT_COMMAND_CLOSE_DOOR           12              // source = unit, datalong=db_guid, datalong2=reset_delay
312#define SCRIPT_COMMAND_ACTIVATE_OBJECT      13              // source = unit, target=GO
313#define SCRIPT_COMMAND_REMOVE_AURA          14              // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
314#define SCRIPT_COMMAND_CAST_SPELL           15              // source (datalong2!=0) or target (datalong==0) unit, datalong = spell_id
315
316/// Storage class for commands issued for delayed execution
317struct CliCommandHolder
318{
319        typedef void Print(const char*);
320
321        char *m_command;
322        Print* m_print;
323
324        CliCommandHolder(const char *command, Print* zprint)
325                : m_print(zprint)
326        {
327                size_t len = strlen(command)+1;
328                m_command = new char[len];
329                memcpy(m_command, command, len);
330        }
331
332        ~CliCommandHolder() { delete[] m_command; }
333};
334
335/// The World
336class World
337{
338    public:
339        static volatile bool m_stopEvent;
340        static volatile uint32 m_worldLoopCounter;
341
342        World();
343        ~World();
344
345        WorldSession* FindSession(uint32 id) const;
346        void AddSession(WorldSession *s);
347
348        bool RemoveSession(uint32 id);
349        /// Get the number of current active sessions
350        void UpdateMaxSessionCounters();
351        uint32 GetActiveAndQueuedSessionCount() const { return m_sessions.size(); }
352        uint32 GetActiveSessionCount() const { return m_sessions.size() - m_QueuedPlayer.size(); }
353        uint32 GetQueuedSessionCount() const { return m_QueuedPlayer.size(); }
354        /// Get the maximum number of parallel sessions on the server since last reboot
355        uint32 GetMaxQueuedSessionCount() const { return m_maxQueuedSessionCount; }
356        uint32 GetMaxActiveSessionCount() const { return m_maxActiveSessionCount; }
357        Player* FindPlayerInZone(uint32 zone);
358
359        Weather* FindWeather(uint32 id) const;
360        Weather* AddWeather(uint32 zone_id);
361        void RemoveWeather(uint32 zone_id);
362
363        /// Get the active session server limit (or security level limitations)
364        uint32 GetPlayerAmountLimit() const { return m_playerLimit >= 0 ? m_playerLimit : 0; }
365        AccountTypes GetPlayerSecurityLimit() const { return m_playerLimit <= 0 ? AccountTypes(-m_playerLimit) : SEC_PLAYER; }
366
367        /// Set the active session server limit (or security level limitation)
368        void SetPlayerLimit(int32 limit, bool needUpdate = false);
369
370        //player Queue
371        typedef std::list<WorldSession*> Queue;
372        void AddQueuedPlayer(WorldSession*);
373        void RemoveQueuedPlayer(WorldSession*);
374        int32 GetQueuePos(WorldSession*);
375        uint32 GetQueueSize() const { return m_QueuedPlayer.size(); }
376
377        /// \todo Actions on m_allowMovement still to be implemented
378        /// Is movement allowed?
379        bool getAllowMovement() const { return m_allowMovement; }
380        /// Allow/Disallow object movements
381        void SetAllowMovement(bool allow) { m_allowMovement = allow; }
382
383        /// Set a new Message of the Day
384        void SetMotd(std::string motd) { m_motd = motd; }
385        /// Get the current Message of the Day
386        const char* GetMotd() const { return m_motd.c_str(); }
387
388        uint32 GetDefaultDbcLocale() const { return m_defaultDbcLocale; }
389
390        /// Get the path where data (dbc, maps) are stored on disk
391        std::string GetDataPath() const { return m_dataPath; }
392
393        /// When server started?
394        time_t const& GetStartTime() const { return m_startTime; }
395        /// What time is it?
396        time_t const& GetGameTime() const { return m_gameTime; }
397        /// Uptime (in secs)
398        uint32 GetUptime() const { return uint32(m_gameTime - m_startTime); }
399
400        /// Get the maximum skill level a player can reach
401        uint16 GetConfigMaxSkillValue() const
402        {
403            uint32 lvl = getConfig(CONFIG_MAX_PLAYER_LEVEL);
404            return lvl > 60 ? 300 + ((lvl - 60) * 75) / 10 : lvl*5;
405        }
406
407        void SetInitialWorldSettings();
408        void LoadConfigSettings(bool reload = false);
409
410        void SendWorldText(int32 string_id, ...); 
411        void SendGlobalMessage(WorldPacket *packet, WorldSession *self = 0, uint32 team = 0);
412        void SendZoneMessage(uint32 zone, WorldPacket *packet, WorldSession *self = 0, uint32 team = 0);
413        void SendZoneText(uint32 zone, const char *text, WorldSession *self = 0, uint32 team = 0);
414        void SendServerMessage(uint32 type, const char *text = "", Player* player = NULL);
415
416        /// Are we in the middle of a shutdown?
417        uint32 GetShutdownMask() const { return m_ShutdownMask; }
418        bool IsShutdowning() const { return m_ShutdownTimer > 0; }
419        void ShutdownServ(uint32 time, uint32 options = 0);
420        void ShutdownCancel();
421        void ShutdownMsg(bool show = false, Player* player = NULL);
422
423        void Update(time_t diff);
424
425        void UpdateSessions( time_t diff );
426        /// Set a server rate (see #Rates)
427        void setRate(Rates rate,float value) { rate_values[rate]=value; }
428        /// Get a server rate (see #Rates)
429        float getRate(Rates rate) const { return rate_values[rate]; }
430
431        /// Set a server configuration element (see #WorldConfigs)
432        void setConfig(uint32 index,uint32 value)
433        {
434            if(index<CONFIG_VALUE_COUNT)
435                m_configs[index]=value;
436        }
437
438        /// Get a server configuration element (see #WorldConfigs)
439        uint32 getConfig(uint32 index) const
440        {
441            if(index<CONFIG_VALUE_COUNT)
442                return m_configs[index];
443            else
444                return 0;
445        }
446
447        /// Are we on a "Player versus Player" server?
448        bool IsPvPRealm() { return (getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP || getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP); }
449        bool IsFFAPvPRealm() { return getConfig(CONFIG_GAME_TYPE) == REALM_TYPE_FFA_PVP; }
450
451        bool KickPlayer(std::string playerName);
452        void KickAll();
453        void KickAllLess(AccountTypes sec);
454        void KickAllQueued();
455        BanReturn BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author);
456                bool RemoveBanAccount(BanMode mode, std::string nameOrIP);
457
458        void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target);
459        void ScriptCommandStart(ScriptInfo const& script, uint32 delay, Object* source, Object* target);
460        bool IsScriptScheduled() const { return !m_scriptSchedule.empty(); }
461
462        bool IsAllowedMap(uint32 mapid) { return m_forbiddenMapIds.count(mapid) == 0 ;}
463
464        // for max speed access
465        static float GetMaxVisibleDistanceForCreature() { return m_MaxVisibleDistanceForCreature; }
466        static float GetMaxVisibleDistanceForPlayer()   { return m_MaxVisibleDistanceForPlayer;   }
467        static float GetMaxVisibleDistanceForObject()   { return m_MaxVisibleDistanceForObject;   }
468        static float GetMaxVisibleDistanceInFlight()    { return m_MaxVisibleDistanceInFlight;    }
469        static float GetVisibleUnitGreyDistance()       { return m_VisibleUnitGreyDistance;       }
470        static float GetVisibleObjectGreyDistance()     { return m_VisibleObjectGreyDistance;     }
471
472        void ProcessCliCommands();
473        void QueueCliCommand( CliCommandHolder::Print* zprintf, char const* input ) { cliCmdQueue.add(new CliCommandHolder(input, zprintf)); }
474
475        void UpdateResultQueue();
476        void InitResultQueue();
477
478        void ForceGameEventUpdate();
479
480        void UpdateRealmCharCount(uint32 accid);
481
482        LocaleConstant GetAvailableDbcLocale(LocaleConstant locale) const { if(m_availableDbcLocaleMask & (1 << locale)) return locale; else return m_defaultDbcLocale; }
483
484                //used World DB version
485                void LoadDBVersion();
486                char const* GetDBVersion() { return m_DBVersion.c_str(); }
487
488                //used Script version
489                void SetScriptsVersion(char const* version) { m_ScriptsVersion = version ? version : "unknown scripting library"; }
490                char const* GetScriptsVersion() { return m_ScriptsVersion.c_str(); }
491
492    protected:
493        void _UpdateGameTime();
494        void ScriptsProcess();
495        // callback for UpdateRealmCharacters
496        void _UpdateRealmCharCount(QueryResult *resultCharCount, uint32 accountId);
497
498        void InitDailyQuestResetTime();
499        void ResetDailyQuests();
500    private:
501        time_t m_startTime;
502        time_t m_gameTime;
503        IntervalTimer m_timers[WUPDATE_COUNT];
504        uint32 mail_timer;
505        uint32 mail_timer_expires;
506
507        typedef UNORDERED_MAP<uint32, Weather*> WeatherMap;
508        WeatherMap m_weathers;
509        typedef UNORDERED_MAP<uint32, WorldSession*> SessionMap;
510        SessionMap m_sessions;
511        std::set<WorldSession*> m_kicked_sessions;
512        uint32 m_maxActiveSessionCount;
513        uint32 m_maxQueuedSessionCount;
514
515        std::multimap<time_t, ScriptAction> m_scriptSchedule;
516
517        float rate_values[MAX_RATES];
518        uint32 m_configs[CONFIG_VALUE_COUNT];
519        int32 m_playerLimit;
520        LocaleConstant m_defaultDbcLocale;                     // from config for one from loaded DBC locales
521        uint32 m_availableDbcLocaleMask;                       // by loaded DBC
522        void DetectDBCLang();
523        bool m_allowMovement;
524        std::string m_motd;
525        std::string m_dataPath;
526        std::set<uint32> m_forbiddenMapIds;
527
528        uint32 m_ShutdownTimer;
529        uint32 m_ShutdownMask;
530
531        // for max speed access
532        static float m_MaxVisibleDistanceForCreature;
533        static float m_MaxVisibleDistanceForPlayer;
534        static float m_MaxVisibleDistanceForObject;
535        static float m_MaxVisibleDistanceInFlight;
536        static float m_VisibleUnitGreyDistance;
537        static float m_VisibleObjectGreyDistance;
538
539        // CLI command holder to be thread safe
540        ZThread::LockedQueue<CliCommandHolder*, ZThread::FastMutex> cliCmdQueue;
541        SqlResultQueue *m_resultQueue;
542
543        // next daily quests reset time
544        time_t m_NextDailyQuestReset;
545
546        //Player Queue
547        Queue m_QueuedPlayer;
548       
549        //sessions that are added async
550        void AddSession_(WorldSession* s);
551        ZThread::LockedQueue<WorldSession*, ZThread::FastMutex> addSessQueue;
552
553                //used versions
554                std::string m_DBVersion;
555                std::string m_ScriptsVersion;
556};
557
558extern uint32 realmID;
559
560#define sWorld Trinity::Singleton<World>::Instance()
561#endif
562/// @}
Note: See TracBrowser for help on using the browser.