Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void ProtocolGame::parsePacket(NetworkMessage &msg)
- {
- if(!player || !m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0)
- return;
- uint8_t recvbyte = msg.GetByte();
- //a dead player can not performs actions
- if((player->isRemoved() || player->getHealth() <= 0) && recvbyte != 0x14){
- return;
- }
- bool kickPlayer = false;
- switch(recvbyte){
- case 0x14: // logout
- g_dispatcher.addTask(createTask(boost::bind(&ProtocolGame::logout, this, false)));
- break;
- case 0x1E: // keep alive / ping response
- g_dispatcher.addTask(createTask(boost::bind(&Game::playerReceivePing, &g_game, player->getID())));
- break;
- case 0x64: // move with steps
- parseAutoWalk(msg);
- break;
- case 0x65: // move north
- addGameTask(&Game::playerMove, player->getID(), NORTH);
- break;
- case 0x66: // move east
- addGameTask(&Game::playerMove, player->getID(), EAST);
- break;
- case 0x67: // move south
- addGameTask(&Game::playerMove, player->getID(), SOUTH);
- break;
- case 0x68: // move west
- addGameTask(&Game::playerMove, player->getID(), WEST);
- break;
- case 0x69: // stop-autowalk
- addGameTask(&Game::playerStopAutoWalk, player->getID());
- break;
- case 0x6A:
- addGameTask(&Game::playerMove, player->getID(), NORTHEAST);
- break;
- case 0x6B:
- addGameTask(&Game::playerMove, player->getID(), SOUTHEAST);
- break;
- case 0x6C:
- addGameTask(&Game::playerMove, player->getID(), SOUTHWEST);
- break;
- case 0x6D:
- addGameTask(&Game::playerMove, player->getID(), NORTHWEST);
- break;
- case 0x6F: // turn north
- addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), NORTH);
- break;
- case 0x70: // turn east
- addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), EAST);
- break;
- case 0x71: // turn south
- addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), SOUTH);
- break;
- case 0x72: // turn west
- addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), WEST);
- break;
- case 0x78: // throw item
- parseThrow(msg);
- break;
- case 0x7D: // Request trade
- parseRequestTrade(msg);
- break;
- case 0x7E: // Look at an item in trade
- parseLookInTrade(msg);
- break;
- case 0x7F: // Accept trade
- addGameTask(&Game::playerAcceptTrade, player->getID());
- break;
- case 0x80: // Close/cancel trade
- parseCloseTrade();
- break;
- case 0x82: // use item
- parseUseItem(msg);
- break;
- case 0x83: // use item
- parseUseItemEx(msg);
- break;
- case 0x84: // battle window
- parseBattleWindow(msg);
- break;
- case 0x85: //rotate item
- parseRotateItem(msg);
- break;
- case 0x87: // close container
- parseCloseContainer(msg);
- break;
- case 0x88: //"up-arrow" - container
- parseUpArrowContainer(msg);
- break;
- case 0x89:
- parseTextWindow(msg);
- break;
- case 0x8A:
- parseHouseWindow(msg);
- break;
- case 0x8C: // throw item
- parseLookAt(msg);
- break;
- case 0x96: // say something
- parseSay(msg);
- break;
- case 0x97: // request Channels
- addGameTask(&Game::playerRequestChannels, player->getID());
- break;
- case 0x98: // open Channel
- parseOpenChannel(msg);
- break;
- case 0x99: // close Channel
- parseCloseChannel(msg);
- break;
- case 0x9A: // open priv
- parseOpenPriv(msg);
- break;
- case 0x9B: //process report
- parseProcessRuleViolation(msg);
- break;
- case 0x9C: //gm closes report
- parseCloseRuleViolation(msg);
- break;
- case 0x9D: //player cancels report
- addGameTask(&Game::playerCancelRuleViolation, player->getID());
- break;
- case 0xA0: // set attack and follow mode
- parseFightModes(msg);
- break;
- case 0xA1: // attack
- parseAttack(msg);
- break;
- case 0xA2: //follow
- parseFollow(msg);
- break;
- case 0xA3:
- parseInviteToParty(msg);
- break;
- case 0xA4:
- parseJoinParty(msg);
- break;
- case 0xA5:
- parseRevokePartyInvitation(msg);
- break;
- case 0xA6:
- parsePassPartyLeadership(msg);
- break;
- case 0xA7:
- addGameTask(&Game::playerLeaveParty, player->getID());
- break;
- case 0xAA:
- addGameTask(&Game::playerCreatePrivateChannel, player->getID());
- break;
- case 0xAB:
- parseChannelInvite(msg);
- break;
- case 0xAC:
- parseChannelExclude(msg);
- break;
- case 0xBE: // cancel move
- addGameTask(&Game::playerCancelAttackAndFollow, player->getID());
- break;
- case 0xC9: //client request to resend the tile
- parseUpdateTile(msg);
- break;
- case 0xCA: //client request to resend the container (happens when you store more than container maxsize)
- parseUpdateContainer(msg);
- break;
- case 0xD2: // request outfit
- addGameTask(&Game::playerRequestOutfit, player->getID());
- break;
- case 0xD3: // set outfit
- parseSetOutfit(msg);
- break;
- case 0xDC:
- parseAddVip(msg);
- break;
- case 0xDD:
- parseRemoveVip(msg);
- break;
- case 0xE6:
- parseBugReport(msg);
- break;
- case 0xE7:
- parseViolationWindow(msg);
- break;
- case 0xE8:
- parseDebugAssert(msg);
- break;
- default:
- std::cout << "Unknown packet header: " << std::hex << (int)recvbyte << std::dec << ", player " << player->getName() << std::endl;
- kickPlayer = false;
- break;
- }
- if(msg.isOverrun()){ //we've got a badass over here
- std::cout << "msg.isOvverrun() == true, player " << player->getName() << std::endl;
- kickPlayer = false;
- }
- if(kickPlayer){
- player->kickPlayer();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement