root/trunk/src/game/MCS_OnlinePlayers.cpp @ 40

Revision 39, 3.1 kB (checked in by yumileroy, 17 years ago)

[svn] * Various small changes here and there.
* Implementing MangChat? IRC system.
* Added new config option, MAX_WHO, can be used to set the limit of characters being sent in a /who request from client.

Original author: XTZGZoReX
Date: 2008-10-12 14:03:38-05:00

Line 
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
17mcs_OnlinePlayers::mcs_OnlinePlayers() { CD = NULL; }
18
19mcs_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
31mcs_OnlinePlayers::~mcs_OnlinePlayers()
32{
33    if(CD)
34        delete CD;
35}
36
37void 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}
Note: See TracBrowser for help on using the browser.