2 * Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
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
20 #include "Database/DatabaseEnv.h"
21 #include "WorldPacket.h"
22 #include "WorldSession.h"
27 #include "MapManager.h"
28 #include "ObjectAccessor.h"
30 #include "AccountMgr.h"
31 #include "SystemConfig.h"
33 #include "revision_nr.h"
36 bool ChatHandler::HandleHelpCommand(const char* args
)
38 char* cmd
= strtok((char*)args
, " ");
41 ShowHelpForCommand(getCommandTable(), "help");
42 ShowHelpForCommand(getCommandTable(), "");
46 if(!ShowHelpForCommand(getCommandTable(), cmd
))
47 SendSysMessage(LANG_NO_HELP_CMD
);
53 bool ChatHandler::HandleCommandsCommand(const char* /*args*/)
55 ShowHelpForCommand(getCommandTable(), "");
59 bool ChatHandler::HandleAccountCommand(const char* /*args*/)
61 uint32 gmlevel
= m_session
->GetSecurity();
62 PSendSysMessage(LANG_ACCOUNT_LEVEL
, gmlevel
);
66 bool ChatHandler::HandleStartCommand(const char* /*args*/)
68 Player
*chr
= m_session
->GetPlayer();
72 SendSysMessage(LANG_YOU_IN_FLIGHT
);
73 SetSentErrorMessage(true);
79 SendSysMessage(LANG_YOU_IN_COMBAT
);
80 SetSentErrorMessage(true);
85 chr
->CastSpell(chr
,7355,false);
89 bool ChatHandler::HandleServerInfoCommand(const char* /*args*/)
91 uint32 activeClientsNum
= sWorld
.GetActiveSessionCount();
92 uint32 queuedClientsNum
= sWorld
.GetQueuedSessionCount();
93 uint32 maxActiveClientsNum
= sWorld
.GetMaxActiveSessionCount();
94 uint32 maxQueuedClientsNum
= sWorld
.GetMaxQueuedSessionCount();
95 std::string str
= secsToTimeString(sWorld
.GetUptime());
99 full
= _FULLVERSION(REVISION_DATE
,REVISION_TIME
,REVISION_NR
,"|cffffffff|Hurl:" REVISION_ID
"|h" REVISION_ID
"|h|r");
101 full
= _FULLVERSION(REVISION_DATE
,REVISION_TIME
,REVISION_NR
,REVISION_ID
);
103 SendSysMessage(full
);
104 PSendSysMessage(LANG_USING_SCRIPT_LIB
,sWorld
.GetScriptsVersion());
105 PSendSysMessage(LANG_USING_WORLD_DB
,sWorld
.GetDBVersion());
106 PSendSysMessage(LANG_CONNECTED_USERS
, activeClientsNum
, maxActiveClientsNum
, queuedClientsNum
, maxQueuedClientsNum
);
107 PSendSysMessage(LANG_UPTIME
, str
.c_str());
112 bool ChatHandler::HandleDismountCommand(const char* /*args*/)
114 //If player is not mounted, so go out :)
115 if (!m_session
->GetPlayer( )->IsMounted())
117 SendSysMessage(LANG_CHAR_NON_MOUNTED
);
118 SetSentErrorMessage(true);
122 if(m_session
->GetPlayer( )->isInFlight())
124 SendSysMessage(LANG_YOU_IN_FLIGHT
);
125 SetSentErrorMessage(true);
129 m_session
->GetPlayer()->Unmount();
130 m_session
->GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED
);
134 bool ChatHandler::HandleSaveCommand(const char* /*args*/)
136 Player
*player
=m_session
->GetPlayer();
138 // save GM account without delay and output message (testing, etc)
139 if(m_session
->GetSecurity())
142 SendSysMessage(LANG_PLAYER_SAVED
);
146 // save or plan save after 20 sec (logout delay) if current next save time more this value and _not_ output any messages to prevent cheat planning
147 uint32 save_interval
= sWorld
.getConfig(CONFIG_INTERVAL_SAVE
);
148 if(save_interval
==0 || save_interval
> 20*1000 && player
->GetSaveTimer() <= save_interval
- 20*1000)
154 bool ChatHandler::HandleGMListIngameCommand(const char* /*args*/)
158 HashMapHolder
<Player
>::MapType
&m
= HashMapHolder
<Player
>::GetContainer();
159 HashMapHolder
<Player
>::MapType::iterator itr
= m
.begin();
160 for(; itr
!= m
.end(); ++itr
)
162 if (itr
->second
->GetSession()->GetSecurity() &&
163 (itr
->second
->isGameMaster() || sWorld
.getConfig(CONFIG_GM_IN_GM_LIST
)) &&
164 (!m_session
|| itr
->second
->IsVisibleGloballyFor(m_session
->GetPlayer())) )
168 SendSysMessage(LANG_GMS_ON_SRV
);
172 SendSysMessage(itr
->second
->GetName());
177 SendSysMessage(LANG_GMS_NOT_LOGGED
);
182 bool ChatHandler::HandlePasswordCommand(const char* args
)
187 char *old_pass
= strtok ((char*)args
, " ");
188 char *new_pass
= strtok (NULL
, " ");
189 char *new_pass_c
= strtok (NULL
, " ");
191 if (!old_pass
|| !new_pass
|| !new_pass_c
)
194 std::string password_old
= old_pass
;
195 std::string password_new
= new_pass
;
196 std::string password_new_c
= new_pass_c
;
198 if (password_new
!= password_new_c
)
200 SendSysMessage (LANG_NEW_PASSWORDS_NOT_MATCH
);
201 SetSentErrorMessage (true);
205 if (!accmgr
.CheckPassword (m_session
->GetAccountId(), password_old
))
207 SendSysMessage (LANG_COMMAND_WRONGOLDPASSWORD
);
208 SetSentErrorMessage (true);
212 AccountOpResult result
= accmgr
.ChangePassword(m_session
->GetAccountId(), password_new
);
217 SendSysMessage(LANG_COMMAND_PASSWORD
);
219 case AOR_PASS_TOO_LONG
:
220 SendSysMessage(LANG_PASSWORD_TOO_LONG
);
221 SetSentErrorMessage(true);
223 case AOR_NAME_NOT_EXIST
: // not possible case, don't want get account name for output
225 SendSysMessage(LANG_COMMAND_NOTCHANGEPASSWORD
);
226 SetSentErrorMessage(true);
233 bool ChatHandler::HandleLockAccountCommand(const char* args
)
237 SendSysMessage(LANG_USE_BOL
);
241 std::string argstr
= (char*)args
;
244 loginDatabase
.PExecute( "UPDATE account SET locked = '1' WHERE id = '%d'",m_session
->GetAccountId());
245 PSendSysMessage(LANG_COMMAND_ACCLOCKLOCKED
);
251 loginDatabase
.PExecute( "UPDATE account SET locked = '0' WHERE id = '%d'",m_session
->GetAccountId());
252 PSendSysMessage(LANG_COMMAND_ACCLOCKUNLOCKED
);
256 SendSysMessage(LANG_USE_BOL
);
260 /// Display the 'Message of the day' for the realm
261 bool ChatHandler::HandleServerMotdCommand(const char* /*args*/)
263 PSendSysMessage(LANG_MOTD_CURRENT
, sWorld
.GetMotd());