Advertisement
Guest User

protocolgame.cpp

a guest
Feb 10th, 2013
2,254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.89 KB | None | 0 0
  1.  return false;
  2. }
  3.  
  4. + if(player->isUsingOtclient())
  5. + {
  6. +     player->registerCreatureEvent("ExtendedOpcode");
  7. + }
  8.  
  9. player->lastIP = player->getIP();
  10. player->lastLoad = OTSYS_TIME();
  11. player->lastLogin = std::max(time(NULL), player->lastLogin + 1);
  12. 427,6432,10
  13. enableXTEAEncryption();
  14. setXTEAKey(key);
  15.  
  16. + // notifies to otclient that this server can receive extended game protocol opcodes
  17. + if(operatingSystem >= CLIENTOS_OTCLIENT_LINUX)
  18. +     sendExtendedOpcode(0x00, std::string());
  19.  
  20. bool gamemaster = (msg.get<char>() != (char)0);
  21. std::string name = msg.getString(), character = msg.getString(), password = msg.getString();
  22.  
  23. 578,6587,10
  24. parseReceivePing(msg);
  25.     break;
  26.  
  27. + case 0x32: // otclient extended opcode
  28. +     parseExtendedOpcode(msg);
  29. +     break;
  30.  
  31. case 0x64: // move with steps
  32.     parseAutoWalk(msg);
  33.     break;
  34. 2411,72424,7
  35. }
  36. else
  37.     msg->put<char>(0x00);
  38.  
  39. if((statistics = IOMarket::getInstance()->getSaleStatistics(itemId)))
  40. {
  41.     msg->put<char>(0x01);
  42. 3705,33718,28
  43.     msg->put<uint32_t>(item.buyPrice);
  44.     msg->put<uint32_t>(item.sellPrice);
  45. }
  46.  
  47. + void ProtocolGame::parseExtendedOpcode(NetworkMessage& msg)
  48. + {
  49. +     uint8_t opcode = msg.get<char>();
  50. +     std::string buffer = msg.getString();
  51.  
  52. +     // process additional opcodes via lua script event
  53. +     addGameTask(&Game::parsePlayerExtendedOpcode, player->getId(), opcode, buffer);
  54. + }
  55.  
  56. + void ProtocolGame::sendExtendedOpcode(uint8_t opcode, const std::string& buffer)
  57. + {
  58. +     // extended opcodes can only be send to players using otclient, cipsoft's tibia can't understand them
  59. +     if(player && !player->isUsingOtclient())
  60. +         return;
  61.  
  62. +     NetworkMessage_ptr msg = getOutputBuffer();
  63. +     if(msg)
  64. +     {
  65. +         TRACK_MESSAGE(msg);
  66. +         msg->put<char>(0x32);
  67. +         msg->put<char>(opcode);
  68. +         msg->putString(buffer);
  69. +     }
  70. + }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement