Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.42 KB | None | 0 0
  1. void ProtocolGame::parsePacket(NetworkMessage &msg)
  2. {
  3.     if(!player || !m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0)
  4.         return;
  5.  
  6.     uint8_t recvbyte = msg.GetByte();
  7.     //a dead player can not performs actions
  8.     if((player->isRemoved() || player->getHealth() <= 0) && recvbyte != 0x14){
  9.         return;
  10.     }
  11.  
  12.     bool kickPlayer = false;
  13.  
  14.     switch(recvbyte){
  15.     case 0x14: // logout
  16.         g_dispatcher.addTask(createTask(boost::bind(&ProtocolGame::logout, this, false)));
  17.         break;
  18.  
  19.     case 0x1E: // keep alive / ping response
  20.         g_dispatcher.addTask(createTask(boost::bind(&Game::playerReceivePing, &g_game, player->getID())));
  21.         break;
  22.  
  23.     case 0x64: // move with steps
  24.         parseAutoWalk(msg);
  25.         break;
  26.  
  27.     case 0x65: // move north
  28.         addGameTask(&Game::playerMove, player->getID(), NORTH);
  29.         break;
  30.  
  31.     case 0x66: // move east
  32.         addGameTask(&Game::playerMove, player->getID(), EAST);
  33.         break;
  34.  
  35.     case 0x67: // move south
  36.         addGameTask(&Game::playerMove, player->getID(), SOUTH);
  37.         break;
  38.  
  39.     case 0x68: // move west
  40.         addGameTask(&Game::playerMove, player->getID(), WEST);
  41.         break;
  42.  
  43.     case 0x69: // stop-autowalk
  44.         addGameTask(&Game::playerStopAutoWalk, player->getID());
  45.         break;
  46.  
  47.     case 0x6A:
  48.         addGameTask(&Game::playerMove, player->getID(), NORTHEAST);
  49.         break;
  50.  
  51.     case 0x6B:
  52.         addGameTask(&Game::playerMove, player->getID(), SOUTHEAST);
  53.         break;
  54.  
  55.     case 0x6C:
  56.         addGameTask(&Game::playerMove, player->getID(), SOUTHWEST);
  57.         break;
  58.  
  59.     case 0x6D:
  60.         addGameTask(&Game::playerMove, player->getID(), NORTHWEST);
  61.         break;
  62.  
  63.     case 0x6F: // turn north
  64.         addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), NORTH);
  65.         break;
  66.  
  67.     case 0x70: // turn east
  68.         addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), EAST);
  69.         break;
  70.  
  71.     case 0x71: // turn south
  72.         addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), SOUTH);
  73.         break;
  74.  
  75.     case 0x72: // turn west
  76.         addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), WEST);
  77.         break;
  78.  
  79.     case 0x78: // throw item
  80.         parseThrow(msg);
  81.         break;
  82.  
  83.     case 0x7D: // Request trade
  84.         parseRequestTrade(msg);
  85.         break;
  86.  
  87.     case 0x7E: // Look at an item in trade
  88.         parseLookInTrade(msg);
  89.         break;
  90.  
  91.     case 0x7F: // Accept trade
  92.         addGameTask(&Game::playerAcceptTrade, player->getID());
  93.         break;
  94.  
  95.     case 0x80: // Close/cancel trade
  96.         parseCloseTrade();
  97.         break;
  98.  
  99.     case 0x82: // use item
  100.         parseUseItem(msg);
  101.         break;
  102.  
  103.     case 0x83: // use item
  104.         parseUseItemEx(msg);
  105.         break;
  106.  
  107.     case 0x84: // battle window
  108.         parseBattleWindow(msg);
  109.         break;
  110.  
  111.     case 0x85:  //rotate item
  112.         parseRotateItem(msg);
  113.         break;
  114.  
  115.     case 0x87: // close container
  116.         parseCloseContainer(msg);
  117.         break;
  118.  
  119.     case 0x88: //"up-arrow" - container
  120.         parseUpArrowContainer(msg);
  121.         break;
  122.  
  123.     case 0x89:
  124.         parseTextWindow(msg);
  125.         break;
  126.  
  127.     case 0x8A:
  128.         parseHouseWindow(msg);
  129.         break;
  130.  
  131.     case 0x8C: // throw item
  132.         parseLookAt(msg);
  133.         break;
  134.  
  135.     case 0x96:  // say something
  136.         parseSay(msg);
  137.         break;
  138.  
  139.     case 0x97: // request Channels
  140.         addGameTask(&Game::playerRequestChannels, player->getID());
  141.         break;
  142.  
  143.     case 0x98: // open Channel
  144.         parseOpenChannel(msg);
  145.         break;
  146.  
  147.     case 0x99: // close Channel
  148.         parseCloseChannel(msg);
  149.         break;
  150.  
  151.     case 0x9A: // open priv
  152.         parseOpenPriv(msg);
  153.         break;
  154.  
  155.     case 0x9B: //process report
  156.         parseProcessRuleViolation(msg);
  157.         break;
  158.  
  159.     case 0x9C: //gm closes report
  160.         parseCloseRuleViolation(msg);
  161.         break;
  162.  
  163.     case 0x9D: //player cancels report
  164.         addGameTask(&Game::playerCancelRuleViolation, player->getID());
  165.         break;
  166.  
  167.     case 0xA0: // set attack and follow mode
  168.         parseFightModes(msg);
  169.         break;
  170.  
  171.     case 0xA1: // attack
  172.         parseAttack(msg);
  173.         break;
  174.  
  175.     case 0xA2: //follow
  176.         parseFollow(msg);
  177.         break;
  178.  
  179.     case 0xA3:
  180.         parseInviteToParty(msg);
  181.         break;
  182.  
  183.     case 0xA4:
  184.         parseJoinParty(msg);
  185.         break;
  186.  
  187.     case 0xA5:
  188.         parseRevokePartyInvitation(msg);
  189.         break;
  190.  
  191.     case 0xA6:
  192.         parsePassPartyLeadership(msg);
  193.         break;
  194.  
  195.     case 0xA7:
  196.         addGameTask(&Game::playerLeaveParty, player->getID());
  197.         break;
  198.  
  199.     case 0xAA:
  200.         addGameTask(&Game::playerCreatePrivateChannel, player->getID());
  201.         break;
  202.  
  203.     case 0xAB:
  204.         parseChannelInvite(msg);
  205.         break;
  206.  
  207.     case 0xAC:
  208.         parseChannelExclude(msg);
  209.         break;
  210.  
  211.     case 0xBE: // cancel move
  212.         addGameTask(&Game::playerCancelAttackAndFollow, player->getID());
  213.         break;
  214.  
  215.     case 0xC9: //client request to resend the tile
  216.         parseUpdateTile(msg);
  217.         break;
  218.  
  219.     case 0xCA: //client request to resend the container (happens when you store more than container maxsize)
  220.         parseUpdateContainer(msg);
  221.         break;
  222.  
  223.     case 0xD2: // request outfit
  224.         addGameTask(&Game::playerRequestOutfit, player->getID());
  225.         break;
  226.  
  227.     case 0xD3: // set outfit
  228.         parseSetOutfit(msg);
  229.         break;
  230.  
  231.     case 0xDC:
  232.         parseAddVip(msg);
  233.         break;
  234.  
  235.     case 0xDD:
  236.         parseRemoveVip(msg);
  237.         break;
  238.  
  239.     case 0xE6:
  240.         parseBugReport(msg);
  241.         break;
  242.  
  243.     case 0xE7:
  244.         parseViolationWindow(msg);
  245.         break;
  246.  
  247.     case 0xE8:
  248.         parseDebugAssert(msg);
  249.         break;
  250.  
  251.     default:
  252.         std::cout << "Unknown packet header: " << std::hex << (int)recvbyte << std::dec << ", player " << player->getName() << std::endl;
  253.         kickPlayer = false;
  254.         break;
  255.     }
  256.  
  257.     if(msg.isOverrun()){ //we've got a badass over here
  258.         std::cout << "msg.isOvverrun() == true, player " << player->getName() << std::endl;
  259.         kickPlayer = false;
  260.     }
  261.  
  262.     if(kickPlayer){
  263.         player->kickPlayer();
  264.     }
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement