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

模拟服务器

开发平台:

Visual C++

  1. // Copyright (C) 2004 Team Python //   // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. //  // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the // GNU General Public License for more details. //  // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software  // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "SkillHandler.h" #include "NetworkInterface.h" #include "Opcodes.h" #include "Log.h" #include "Character.h" #include "WorldServer.h" #include "Database.h" #include "UpdateMask.h" #define world WorldServer::getSingleton() SkillHandler::SkillHandler() { } SkillHandler::~SkillHandler() { } void SkillHandler::HandleMsg( wowWData & recv_data, GameClient *pClient ) 
  2.    wowWData data; 
  3.     char f[256]; 
  4.     sprintf(f, "WORLD: Skill/Talent Opcode: 0x%.4X", recv_data.opcode); 
  5.     Log::getSingleton( ).outString( f ); 
  6.    switch (recv_data.opcode) 
  7.    { 
  8.     case CMSG_LEARN_TALENT: 
  9.       { 
  10.          //TODO: Add required points in tree 
  11.          TALENT *Talents =  WorldServer::getSingleton().GetTalentDatabase(); 
  12.          uint32 talent_id, requested_rank;       
  13.          uint32 length; 
  14.          recv_data >> talent_id >> requested_rank; 
  15.           
  16.          uint32 CorrectPoints =  pClient->getCurrentChar()->getUpdateValue(PLAYER_CHARACTER_POINTS1); 
  17.          if(CorrectPoints == 0) 
  18.          { 
  19.             //NO POINTS 
  20.          } 
  21.          else 
  22.          { 
  23.             if(Talents[talent_id].Spell[requested_rank]==0 || requested_rank > 4) 
  24.             { 
  25.                printf("Talent: %d Rank: %d = 0n", talent_id, requested_rank); 
  26.             } 
  27.             else 
  28.             { 
  29.                //Send data if all OK 
  30.                length = 4; 
  31.                data.Initialise(length, SMSG_LEARNED_SPELL); 
  32.                printf("TalentID: %d Rank: %d Spell: %dn", talent_id, requested_rank, Talents[talent_id].Spell[requested_rank]); 
  33.                data << Talents[talent_id].Spell[requested_rank]; 
  34.                pClient->SendMsg(&data); 
  35.                data.clear(); 
  36.                //check if rank is > 0 then send REMOVE SPELL 
  37.                if(requested_rank > 0) 
  38.                { 
  39.                   length = 2; 
  40.                   data.Initialise(length, SMSG_REMOVED_SPELL); 
  41.                   data << uint16(Talents[talent_id].Spell[requested_rank-1]); 
  42.                   pClient->SendMsg(&data); 
  43.                   data.clear(); 
  44.                } 
  45.                //UPDATE OBJECT 
  46.                pClient->getCurrentChar()->setUpdateValue(PLAYER_CHARACTER_POINTS1, pClient->getCurrentChar()->getUpdateValue(PLAYER_CHARACTER_POINTS1) - 1); 
  47.             } 
  48.           
  49.          } 
  50.       }break; 
  51.       default: {}break; 
  52.     } 
  53.