Level3.cpp
上传用户:jxpjxmjjw
上传日期:2009-12-07
资源大小:5877k
文件大小:9k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // Copyright (C) 2004 Team Python
  2. //  
  3. // This program is free software; you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation; either version 2 of the License, or
  6. // (at your option) any later version.
  7. // 
  8. // This program is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. // GNU General Public License for more details.
  12. // 
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program; if not, write to the Free Software 
  15. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  16. /////////////////////////////////////////////////
  17. //  Admin Chat Commands
  18. //
  19. #include "ChatHandler.h"
  20. #include "NetworkInterface.h"
  21. #include "GameClient.h"
  22. #include "WorldServer.h"
  23. #include "Character.h"
  24. #include "Opcodes.h"
  25. #include "Database.h"
  26. #include "GameObject.h"
  27. #define world WorldServer::getSingleton()
  28. bool ChatHandler::HandleSecurityCommand(uint8* args)
  29. {
  30.     char* pName = strtok((char*)args, " ");
  31.     if (!pName)
  32.         return false;
  33. char* pgm = strtok(NULL, " ");
  34.     if (!pgm)
  35.         return false;
  36. uint32 gm = atoi(pgm);
  37.     if(!TestValue(gm,5,0)) return true;
  38. Character *pChar = getCurrentCharByName((uint8*)pName);
  39. if (pChar)
  40. {
  41. if(m_pClient->getAccountLvl() < gm)
  42. {
  43. Message(pChar, "try to lvl account");
  44. return true;
  45. }
  46. Message(pChar,"lvl account",gm);
  47. pChar->pClient->setAccountLvl(gm);
  48. DatabaseInterface *dbi = Database::getSingleton( ).createDatabaseInterface( );
  49. char sql[512];
  50. sprintf(sql, "update accounts set gm = '%i' where acct = '%u'", gm, pChar->pClient->getAccountID());
  51. dbi->doQuery(sql);
  52. Database::getSingleton( ).removeDatabaseInterface(dbi);
  53. }
  54. return true;
  55. }
  56. bool ChatHandler::HandleWorldPortCommand(uint8* args)
  57. {
  58.     char* pContinent = strtok((char*)args, " ");
  59.     if (!pContinent)
  60.         return false;
  61. char* px = strtok(NULL, " ");
  62. char* py = strtok(NULL, " ");
  63. char* pz = strtok(NULL, " ");
  64.     if (!px || !py || !pz)
  65.         return false;
  66.     smsg_NewWorld(m_pClient, atoi(pContinent), (float)atof(px), (float)atof(py), (float)atof(pz)); //LINA
  67.     return true;
  68. }
  69. bool ChatHandler::HandleAddSpiritCommand(uint8* args)
  70. {
  71. printf("Spawning Spirit Healersn");
  72.     WorldServer::getSingletonPtr()->dbi->spawnSpiritHealers();
  73.     return true;
  74. }
  75. bool ChatHandler::HandleMoveCommand(uint8* args)
  76. {
  77.     char* px = strtok((char*)args, " ");
  78.     char* py = strtok(NULL, " ");
  79.     char* pz = strtok(NULL, " ");
  80.     if (!px || !py || !pz)
  81.         return false;
  82.     float x = (float)atof(px);
  83.     float y = (float)atof(py);
  84.     float z = (float)atof(pz);
  85.     MovePlayer(m_pClient, x, y, z);
  86.     return true;
  87. }
  88. bool ChatHandler::HandleLearnCommand(uint8* args)
  89. {
  90.     wowWData data;
  91.     if (!*args)
  92.         return false;
  93.     uint32 Spell = atol((char*)args);
  94. Character * pChar = getSelectedChar();
  95. if(pChar) 
  96. {
  97. data.clear();
  98. data.Initialise( 4, SMSG_LEARNED_SPELL );
  99. data << Spell;
  100. pChar->pClient->SendMsg( &data );
  101. pChar->pClient->getCurrentChar()->addSpell((uint16)Spell);
  102. }
  103.     return true;
  104. }
  105. bool ChatHandler::HandleAnimFreqCommand(uint8* args)
  106. {
  107.     char* pAnimId = strtok((char*)args, " ");
  108.     if (!pAnimId)
  109.         return false;
  110. char* pFreq = strtok(NULL, " ");
  111.     if (!pFreq)
  112.         return false;
  113. uint32 anim_id = atoi(pAnimId);
  114. float freq = (float)atof(pFreq);
  115. Unit * pUnit = getSelectedNPC();
  116. if(pUnit) pUnit->setAnimFrequency( anim_id, freq );
  117. wowWData data;
  118. uint8 buf[256];
  119. sprintf((char*)buf, "NPC UPDATED", args);
  120. FillMessageData(&data, 0x09, m_pClient, buf);
  121. m_pClient->SendMsg( &data );
  122.     return true;
  123. }
  124. bool ChatHandler::HandleStandStateCommand(uint8* args)
  125. {
  126.     if (!*args)
  127.         return false;
  128.     uint32 anim_id = atoi((char*)args);
  129.     m_pClient->getCurrentChar( )->setUpdateValue( UNIT_NPC_EMOTESTATE , anim_id );
  130.     return true;
  131. }
  132. bool ChatHandler::HandleDieCommand(uint8* args)
  133. {
  134.     // TODO: update other stats as well
  135. Character * pChar = getSelectedChar();
  136. if(pChar)
  137. {
  138. pChar->setUpdateValue( UNIT_FIELD_HEALTH, 0 );
  139. pChar->setUpdateValue( PLAYER_BYTES_2, 0x10 );
  140. pChar->setUpdateMaskBit( UNIT_FIELD_MAXHEALTH ); // Ignatich: MAXHEALTH?
  141. pChar->setDeathState(JUST_DIED);
  142. }
  143.     return true;
  144. }
  145. bool ChatHandler::HandleReviveCommand(uint8* args)
  146. {
  147. Character * pChar = getSelectedChar();
  148. if(pChar)
  149. {
  150. pChar->setUpdateValue( UNIT_FIELD_FLAGS, (0xffffffff - 65536) & m_pClient->getCurrentChar( )->getUpdateValue( UNIT_FIELD_FLAGS ) ); pChar->setUpdateValue( UNIT_FIELD_AURA +32, 0 ); pChar->setUpdateValue( UNIT_FIELD_AURAFLAGS +4, 0 ); pChar->setUpdateValue( UNIT_FIELD_AURASTATE, 0 ); pChar->setUpdateValue( PLAYER_BYTES_2, (0xffffffff - 0x10) & m_pClient->getCurrentChar( )->getUpdateValue( PLAYER_BYTES_2 ) ); pChar->UpdateObject( ); pChar->setDeathState(ALIVE); pChar->setUpdateValue(UNIT_FIELD_HEALTH, (uint32)pChar->getUpdateValue(UNIT_FIELD_MAXHEALTH)/2 ); if (pChar->getUpdateValue(UNIT_FIELD_MAXPOWER1) >0) pChar->setUpdateValue(UNIT_FIELD_POWER1, (uint32)pChar->getUpdateValue(UNIT_FIELD_MAXPOWER1)/2 ); }
  151. return true;
  152. }
  153. bool ChatHandler::HandleMorphCommand(uint8* args)
  154. {
  155.     if (!*args)
  156.         return false;
  157.     uint32 display_id = atoi((char*)args);
  158. // build mask
  159. UpdateMask updateMask;
  160. updateMask.setCount(PLAYER_BLOCKS);
  161. updateMask.setBit(UNIT_FIELD_DISPLAYID );
  162. Character * pChar = getSelectedChar();
  163. if(pChar) 
  164. {
  165. pChar->setUpdateValue(UNIT_FIELD_DISPLAYID, display_id);
  166. pChar->UpdateObject( );
  167. Message(pChar,"DISPLAY",display_id);
  168. //m_pClient->getCurrentChar()->SendMessageToSet(&data, true);
  169. }
  170.     return true;
  171. }
  172. bool ChatHandler::HandleAuraCommand(uint8* args)
  173. {
  174.     if (!*args)
  175.         return false;
  176.     uint32 aura_id = atoi((char*)args);
  177. Character * pChar = getSelectedChar();
  178. if(pChar) 
  179. {
  180. pChar->setUpdateValue( UNIT_FIELD_AURA, aura_id );
  181. pChar->setUpdateValue( UNIT_FIELD_AURAFLAGS, 0x0000000d );
  182. pChar->setUpdateValue( UNIT_FIELD_AURA+32, aura_id );
  183. pChar->setUpdateValue( UNIT_FIELD_AURALEVELS+8, 0xeeeeee00 );
  184. pChar->setUpdateValue( UNIT_FIELD_AURAAPPLICATIONS+8, 0xeeeeee00 );
  185. pChar->setUpdateValue( UNIT_FIELD_AURAFLAGS+4, 0x0000000d );
  186. pChar->setUpdateValue( UNIT_FIELD_AURASTATE, 0x00000002 );
  187. pChar->UpdateObject( );
  188. Message(pChar,"AURA",aura_id);
  189. }
  190.     return true;
  191. }
  192. //START OF LINA BAN/UNBAN COMMAND
  193. bool ChatHandler::HandleUnBanCommand(uint8* args)
  194. {              
  195. if (!*args) return false;
  196. DatabaseInterface *dbi = Database::getSingleton().createDatabaseInterface( );
  197. dbi->RemoveIP((char*)args); //FIX HOLE by lina
  198. Database::getSingleton( ).removeDatabaseInterface(dbi);
  199. uint8 buf[256];
  200. wowWData data;
  201. sprintf((char*)buf, "You unban IP: %s.", args);
  202. FillMessageData(&data, 0x09, m_pClient, buf);
  203. m_pClient->SendMsg( &data );
  204. return 1;
  205. }
  206. bool ChatHandler::HandleBanCommand(uint8* args)
  207. {
  208. wowWData data;
  209. uint8 buf[256];
  210. if (!*args) return false;
  211. Character * pChar = getCurrentCharByName(args);
  212. if (pChar)
  213. {
  214. if(m_pClient->getAccountLvl() < pChar->pClient->getAccountLvl())
  215. {
  216. Message(pChar, "try to ban");
  217. return true;
  218. }
  219. Message(pChar, "ban");
  220. char IP[16];
  221. strcpy(IP,pChar->pClient->getNetwork()->getIP());
  222. sprintf((char*)buf, "You ban IP: %s.", IP);
  223. FillMessageData(&data, 0x09, m_pClient, buf);
  224. m_pClient->SendMsg( &data );
  225. WorldServer::getSingleton().disconnect_client(reinterpret_cast < Server::nlink_client *> (pChar->pClient->GetNLink())); 
  226. //closesocket(chr->pClient->getNetwork()->getSocketID());
  227. DatabaseInterface *dbi = Database::getSingleton().createDatabaseInterface( );
  228. dbi->BanIP((char*)IP);
  229. Database::getSingleton( ).removeDatabaseInterface(dbi);
  230. }
  231. return true;
  232. }
  233. //END OF LINA BAN/UNBAN COMMAND
  234. bool ChatHandler::HandleIsleCommand(uint8* args)
  235. {
  236.     smsg_NewWorld(m_pClient, 1, 16220.154297f, 16283.899414f, 13.174583f); //LINA
  237.     return true;
  238. }
  239. bool ChatHandler::HandleUpdateCommand(uint8* args) 
  240.   
  241. wowWData data; 
  242.     
  243. char* Opcode = strtok((char*)args, " "); 
  244. char* value = strtok(NULL, " "); 
  245. uint32 uOpcode = atoi(Opcode); 
  246. uint32 uValue = atoi(value); 
  247.     
  248. m_pClient->getCurrentChar()->setUpdateValue(uOpcode,uValue); 
  249.     
  250. return true;