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

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

[svn] * Updated to 6743 and 685

Moved language id used by Arena to a higher place to solve conflicts
Added the empty script folders

Original author: Neo2003
Date: 2008-10-09 08:42:22-05:00

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