1 | /* |
---|
2 | * MangChat By |Death| And Cybrax |
---|
3 | * |
---|
4 | * This Program Is Free Software; You Can Redistribute It And/Or Modify It Under The Terms |
---|
5 | * Of The GNU General Public License |
---|
6 | * Written and Developed by Cybrax. cybraxvd@gmail.com |
---|
7 | * |Death| <death@hell360.net>, Lice <lice@yeuxverts.net>, Dj_baby & Sanaell, Tase |
---|
8 | * With Help And Support From The MaNGOS Project Community. |
---|
9 | * PLEASE RETAIN THE COPYRIGHT OF THE AUTHORS. |
---|
10 | */ |
---|
11 | #include "MCS_OnlinePlayers.h" |
---|
12 | |
---|
13 | #include "MapManager.h" |
---|
14 | #include "ObjectMgr.h" |
---|
15 | #include "Config/ConfigEnv.h" |
---|
16 | |
---|
17 | mcs_OnlinePlayers::mcs_OnlinePlayers() { CD = NULL; } |
---|
18 | |
---|
19 | mcs_OnlinePlayers::mcs_OnlinePlayers(_CDATA *_CD) |
---|
20 | { |
---|
21 | //create a new instance of data struct and copy its data |
---|
22 | CD = new _CDATA(); |
---|
23 | CD->CMD = _CD->CMD; |
---|
24 | CD->FROM = _CD->FROM; |
---|
25 | CD->PARAMS = _CD->PARAMS; |
---|
26 | CD->PCOUNT = _CD->PCOUNT; |
---|
27 | CD->USER = _CD->USER; |
---|
28 | CD->TYPE = _CD->TYPE; |
---|
29 | } |
---|
30 | |
---|
31 | mcs_OnlinePlayers::~mcs_OnlinePlayers() |
---|
32 | { |
---|
33 | if(CD) |
---|
34 | delete CD; |
---|
35 | } |
---|
36 | |
---|
37 | void mcs_OnlinePlayers::run() |
---|
38 | { |
---|
39 | int OnlineCount = 0; |
---|
40 | std::string IRCOut = ""; |
---|
41 | HashMapHolder<Player>::MapType& m = ObjectAccessor::Instance().GetPlayers(); |
---|
42 | for(HashMapHolder<Player>::MapType::iterator itr = m.begin(); itr != m.end(); ++itr) |
---|
43 | { |
---|
44 | if (itr->second && itr->second->GetSession()->GetPlayer() && itr->second->GetSession()->GetPlayer()->IsInWorld()) |
---|
45 | { |
---|
46 | OnlineCount++; |
---|
47 | Player *plr = itr->second->GetSession()->GetPlayer(); |
---|
48 | std::string ChatTag = " "; |
---|
49 | switch(plr->GetSession()->GetSecurity()) |
---|
50 | { |
---|
51 | case 0: ChatTag.append("");break; |
---|
52 | case 1: ChatTag.append("\0037"+sIRC.ojGM1);break; |
---|
53 | case 2: ChatTag.append("\0037"+sIRC.ojGM2);break; |
---|
54 | case 3: ChatTag.append("\0037"+sIRC.ojGM3);break; |
---|
55 | case 4: ChatTag.append("\0037"+sIRC.ojGM4);break; |
---|
56 | case 5: ChatTag.append("\0037"+sIRC.ojGM5);break; |
---|
57 | } |
---|
58 | if(plr->isAFK()) |
---|
59 | ChatTag.append("\002\0037<AFK>\003\002"); |
---|
60 | else if(plr->isDND()) |
---|
61 | ChatTag.append("\002\0037<DND>\003\002"); |
---|
62 | switch (plr->GetTeam()) |
---|
63 | { |
---|
64 | case 67:ChatTag.append("\0034");break; //horde |
---|
65 | case 469:ChatTag.append("\00312");break; //alliance |
---|
66 | } |
---|
67 | |
---|
68 | IRCOut.append(IRCCmd::MakeMsg("%s\002%s\003\017\002(%d)\002\017", ChatTag.c_str(), plr->GetName(), plr->getLevel())); |
---|
69 | |
---|
70 | // after XX players have been added to the string |
---|
71 | // output to irc and reset for the next XX |
---|
72 | if(OnlineCount % sIRC.onlrslt == 0) |
---|
73 | { |
---|
74 | sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002 %s", IRCOut.c_str()), true, CD->TYPE.c_str()); |
---|
75 | IRCOut = ""; |
---|
76 | ZThread::Thread::sleep(1000); |
---|
77 | } |
---|
78 | } |
---|
79 | } |
---|
80 | // Remainder in IRCOUT && Total plyersonline |
---|
81 | sIRC.Send_IRC_Channel(IRCCmd::ChanOrPM(CD), IRCCmd::MakeMsg("\002Players Online(%d):\017 %s", OnlineCount, IRCOut.c_str()), true, CD->TYPE); |
---|
82 | |
---|
83 | sIRC.Script_Lock[MCS_Players_Online] = false; |
---|
84 | } |
---|