Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //After
- // Helping templates to add dispatcher tasks
- //Add this
- bool debug(){
- return true;
- }
- //Replace
- ProtocolGame::ProtocolGame(Connection_ptr connection) :
- Protocol(connection),
- player(nullptr),
- eventConnect(0),
- // version(CLIENT_VERSION_MIN),
- m_challengeTimestamp(0),
- m_challengeRandom(0),
- m_debugAssertSent(false),
- m_acceptPackets(false)
- {
- //
- }
- //With
- ProtocolGame::ProtocolGame(Connection_ptr connection) :
- Protocol(connection),
- player(nullptr),
- eventConnect(0),
- // version(CLIENT_VERSION_MIN),
- m_challengeTimestamp(0),
- m_challengeRandom(0),
- m_debugAssertSent(false),
- m_acceptPackets(false)
- {
- original = true;
- }
- //Replace
- void ProtocolGame::releaseProtocol()
- {
- //dispatcher thread
- if (player && player->client == this) {
- player->client = nullptr;
- }
- Protocol::releaseProtocol();
- }
- //With
- void ProtocolGame::releaseProtocol()
- {
- if (player) {
- for (auto it : player->cSpectators) {
- std::stringstream ss;
- ss << "Spectator " << player->cast.specId;
- it.second->viewerName = ss.str().c_str();
- player->sendChannelEvent(player->cast.mCastChannelId, viewerName, CHANNELEVENT_LEAVE);
- return;
- }
- }
- //dispatcher thread
- if (original) {
- if (player && player->client == this) {
- player->client = nullptr;
- }
- }
- Protocol::releaseProtocol();
- }
- //Replace
- void ProtocolGame::deleteProtocolTask()
- {
- //dispatcher thread
- if (player) {
- g_game.ReleaseCreature(player);
- player = nullptr;
- }
- Protocol::deleteProtocolTask();
- }
- //With
- void ProtocolGame::deleteProtocolTask()
- {
- //dispatcher thread
- if (original && player) {
- g_game.ReleaseCreature(player);
- player = nullptr;
- }
- else if (!original)
- player = nullptr;
- Protocol::deleteProtocolTask();
- }
- //After
- Player* _player = g_game.getPlayerByName(name);
- //Add this
- if (accountId == 0)
- if (!_player || !_player->cast.isCasting) {
- disconnectClient("This player is currently not casting.");
- return;
- }
- //Replace
- if (eventConnect != 0 || !g_config.getBoolean(ConfigManager::REPLACE_KICK_ON_LOGIN)) {
- //With
- if (accountId != 0 && (eventConnect != 0 || !g_config.getBoolean(ConfigManager::REPLACE_KICK_ON_LOGIN))) {
- //Replace
- if (_player->client) {
- _player->disconnect();
- _player->isConnecting = true;
- addRef();
- eventConnect = g_scheduler.addEvent(createSchedulerTask(1000, std::bind(&ProtocolGame::connect, this, _player->getID(), operatingSystem)));
- return;
- }
- //With
- if (accountId != 0 && _player->client) {
- _player->disconnect();
- _player->isConnecting = true;
- addRef();
- eventConnect = g_scheduler.addEvent(createSchedulerTask(1000, std::bind(&ProtocolGame::connect, this, _player->getID(), operatingSystem)));
- return;
- }
- //Before
- addRef();
- connect(_player->getID(), operatingSystem);
- //Add this
- if (accountId == 0) {
- addRef();
- eventConnect = g_scheduler.addEvent(createSchedulerTask(1000, std::bind(&ProtocolGame::connectCast, this, _player->getID(), operatingSystem)));
- return;
- }
- //Before
- void ProtocolGame::connect(uint32_t playerId, OperatingSystem_t operatingSystem)
- //Add this
- void ProtocolGame::connectCast(uint32_t playerId, OperatingSystem_t operatingSystem)
- {
- UNREFERENCED_PARAMETER(operatingSystem);
- Player* _player = g_game.getPlayerByID(playerId);
- if (!_player || !_player->cast.isCasting) {
- disconnect();
- return;
- }
- original = false;
- eventConnect = 0;
- _player->addCastViewer(this);
- m_acceptPackets = true;
- player = _player;
- sendAddCreature(_player, _player->getPosition(), _player->getTile()->__getIndexOfThing(_player), false);
- if (_player->cast.mCastChannelId != -1)
- sendCreatePrivateChannel(_player->cast.mCastChannelId, "Spectator Chat");
- for (const auto& it : player->openContainers) {
- const OpenContainer& openContainer = it.second;
- sendContainer(it.first, openContainer.container, openContainer.container->hasParent(), openContainer.index);
- }
- /*player->lastIP = player->getIP();
- player->lastLoginSaved = std::max<time_t>(time(nullptr), player->lastLoginSaved + 1);*/
- }
- //Replace
- void ProtocolGame::logout(bool displayEffect, bool forced)
- {
- //dispatcher thread
- if (!player) {
- return;
- }
- if (!player->isRemoved()) {
- if (!forced) {
- if (!player->isAccessPlayer()) {
- if (player->getTile()->hasFlag(TILESTATE_NOLOGOUT)) {
- player->sendCancelMessage(RET_YOUCANNOTLOGOUTHERE);
- return;
- }
- if (!player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) && player->hasCondition(CONDITION_INFIGHT)) {
- player->sendCancelMessage(RET_YOUMAYNOTLOGOUTDURINGAFIGHT);
- return;
- }
- }
- //scripting event - onLogout
- if (!g_creatureEvents->playerLogout(player)) {
- //Let the script handle the error message
- return;
- }
- }
- if (displayEffect && player->getHealth() > 0) {
- g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
- }
- }
- if (Connection_ptr connection = getConnection()) {
- connection->closeConnection();
- }
- g_game.removeCreature(player);
- }
- //With
- void ProtocolGame::logout(bool displayEffect, bool forced)
- {
- //dispatcher thread
- if (original)
- {
- if (!player) {
- return;
- }
- if (!player->isRemoved()) {
- if (!forced) {
- if (!player->isAccessPlayer()) {
- if (player->getTile()->hasFlag(TILESTATE_NOLOGOUT)) {
- player->sendCancelMessage(RET_YOUCANNOTLOGOUTHERE);
- return;
- }
- if (!player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) && player->hasCondition(CONDITION_INFIGHT)) {
- player->sendCancelMessage(RET_YOUMAYNOTLOGOUTDURINGAFIGHT);
- return;
- }
- }
- //scripting event - onLogout
- if (!g_creatureEvents->playerLogout(player)) {
- //Let the script handle the error message
- return;
- }
- }
- if (displayEffect && player->getHealth() > 0) {
- g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF);
- }
- if (original)
- player->kickCastViewers();
- }
- if (Connection_ptr connection = getConnection()) {
- connection->closeConnection();
- }
- g_game.removeCreature(player);
- }
- else
- {
- if (Connection_ptr connection = getConnection()) {
- connection->closeConnection();
- }
- }
- }
- //After
- void ProtocolGame::onRecvFirstMessage(NetworkMessage& msg)
- {
- //Add this
- bool isCast = false;
- //After
- std::string password = msg.GetString();
- //Add this
- if (accountName.empty()) {
- isCast = true;
- }
- //Replace
- if (accountName.empty()) {
- dispatchDisconnectClient("You must enter your account name.");
- return;
- }
- //With
- if (!isCast && accountName.empty()) {
- dispatchDisconnectClient("You must enter your account name.");
- return;
- }
- //Replace
- if (accountId == 0) {
- dispatchDisconnectClient("Account name or password is not correct.");
- return;
- }
- //With
- if (!isCast && accountId == 0) {
- dispatchDisconnectClient("Account name or password is not correct.");
- return;
- }
- //Replace
- void ProtocolGame::parsePacket(NetworkMessage& msg)
- {
- if (!m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0) {
- return;
- }
- uint8_t recvbyte = msg.GetByte();
- if (!player) {
- if (recvbyte == 0x0F) {
- disconnect();
- }
- return;
- }
- //a dead player can not performs actions
- if (player->isRemoved() || player->getHealth() <= 0) {
- if (recvbyte == 0x0F) {
- disconnect();
- return;
- }
- if (recvbyte != 0x14) {
- return;
- }
- }
- switch (recvbyte) {
- case 0x14: g_dispatcher.addTask(createTask(std::bind(&ProtocolGame::logout, this, true, false))); break;
- case 0x1D: addGameTask(&Game::playerReceivePingBack, player->getID()); break;
- case 0x1E: addGameTask(&Game::playerReceivePing, player->getID()); break;
- case 0x32: parseExtendedOpcode(msg); break; //otclient extended opcode
- case 0x64: parseAutoWalk(msg); break;
- case 0x65: addGameTask(&Game::playerMove, player->getID(), NORTH); break;
- case 0x66: addGameTask(&Game::playerMove, player->getID(), EAST); break;
- case 0x67: addGameTask(&Game::playerMove, player->getID(), SOUTH); break;
- case 0x68: addGameTask(&Game::playerMove, player->getID(), WEST); break;
- case 0x69: 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: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), NORTH); break;
- case 0x70: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), EAST); break;
- case 0x71: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), SOUTH); break;
- case 0x72: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), WEST); break;
- case 0x78: parseThrow(msg); break;
- case 0x79: parseLookInShop(msg); break;
- case 0x7A: parsePlayerPurchase(msg); break;
- case 0x7B: parsePlayerSale(msg); break;
- case 0x7C: addGameTask(&Game::playerCloseShop, player->getID()); break;
- case 0x7D: parseRequestTrade(msg); break;
- case 0x7E: parseLookInTrade(msg); break;
- case 0x7F: addGameTask(&Game::playerAcceptTrade, player->getID()); break;
- case 0x80: addGameTask(&Game::playerCloseTrade, player->getID()); break;
- case 0x82: parseUseItem(msg); break;
- case 0x83: parseUseItemEx(msg); break;
- case 0x84: parseUseWithCreature(msg); break;
- case 0x85: parseRotateItem(msg); break;
- case 0x87: parseCloseContainer(msg); break;
- case 0x88: parseUpArrowContainer(msg); break;
- case 0x89: parseTextWindow(msg); break;
- case 0x8A: parseHouseWindow(msg); break;
- case 0x8C: parseLookAt(msg); break;
- case 0x8D: parseLookInBattleList(msg); break;
- case 0x8E: /* join aggression */ break;
- case 0x96: parseSay(msg); break;
- case 0x97: addGameTask(&Game::playerRequestChannels, player->getID()); break;
- case 0x98: parseOpenChannel(msg); break;
- case 0x99: parseCloseChannel(msg); break;
- case 0x9A: parseOpenPrivateChannel(msg); break;
- case 0x9E: addGameTask(&Game::playerCloseNpcChannel, player->getID()); break;
- case 0xA0: parseFightModes(msg); break;
- case 0xA1: parseAttack(msg); break;
- case 0xA2: parseFollow(msg); break;
- case 0xA3: parseInviteToParty(msg); break;
- case 0xA4: parseJoinParty(msg); break;
- case 0xA5: parseRevokePartyInvite(msg); break;
- case 0xA6: parsePassPartyLeadership(msg); break;
- case 0xA7: addGameTask(&Game::playerLeaveParty, player->getID()); break;
- case 0xA8: parseEnableSharedPartyExperience(msg); break;
- case 0xAA: addGameTask(&Game::playerCreatePrivateChannel, player->getID()); break;
- case 0xAB: parseChannelInvite(msg); break;
- case 0xAC: parseChannelExclude(msg); break;
- case 0xBE: addGameTask(&Game::playerCancelAttackAndFollow, player->getID()); break;
- case 0xC9: /* update tile */ break;
- case 0xCA: parseUpdateContainer(msg); break;
- case 0xCB: parseBrowseField(msg); break;
- case 0xCC: parseSeekInContainer(msg); break;
- case 0xD2: addGameTask(&Game::playerRequestOutfit, player->getID()); break;
- case 0xD3: parseSetOutfit(msg); break;
- case 0xD4: parseToggleMount(msg); break;
- case 0xDC: parseAddVip(msg); break;
- case 0xDD: parseRemoveVip(msg); break;
- case 0xDE: parseEditVip(msg); break;
- case 0xE6: parseBugReport(msg); break;
- case 0xE7: /* thank you */ break;
- case 0xE8: parseDebugAssert(msg); break;
- case 0xF0: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerShowQuestLog, player->getID()); break;
- case 0xF1: parseQuestLine(msg); break;
- case 0xF2: /* rule violation report */ break;
- case 0xF3: /* get object info */ break;
- case 0xF4: parseMarketLeave(); break;
- case 0xF5: parseMarketBrowse(msg); break;
- case 0xF6: parseMarketCreateOffer(msg); break;
- case 0xF7: parseMarketCancelOffer(msg); break;
- case 0xF8: parseMarketAcceptOffer(msg); break;
- case 0xF9: parseModalWindowAnswer(msg); break;
- default:
- // std::cout << "Player: " << player->getName() << " sent an unknown packet header: 0x" << std::hex << (int16_t)recvbyte << std::dec << "!" << std::endl;
- break;
- }
- if (msg.isOverrun()) {
- disconnect();
- }
- }
- //With
- void ProtocolGame::parsePacket(NetworkMessage& msg)
- {
- if (!m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0) {
- return;
- }
- uint8_t recvbyte = msg.GetByte();
- if (!player) {
- if (recvbyte == 0x0F) {
- disconnect();
- }
- return;
- }
- //a dead player can not performs actions
- if (player->isRemoved() || player->getHealth() <= 0) {
- if (recvbyte == 0x0F) {
- disconnect();
- return;
- }
- if (recvbyte != 0x14) {
- return;
- }
- }
- if (!original)
- switch (recvbyte) {
- case 0x14: g_dispatcher.addTask(createTask(std::bind(&ProtocolGame::logout, this, true, false))); break;
- case 0x1D: addGameTask(&Game::playerReceivePingBack, player->getID()); break;
- case 0x1E: addGameTask(&Game::playerReceivePing, player->getID()); break;
- case 0x32: parseExtendedOpcode(msg); break; //otclient extended opcode
- case 0x64: sendCancelWalk(); break;
- case 0x65: sendCancelWalk(); break;
- case 0x66: sendCancelWalk(); break;
- case 0x67: sendCancelWalk(); break;
- case 0x68: sendCancelWalk(); break;
- case 0x69: sendCancelWalk(); break;
- case 0x6A: sendCancelWalk(); break;
- case 0x6B: sendCancelWalk(); break;
- case 0x6C: sendCancelWalk(); break;
- case 0x6D: sendCancelWalk(); break;
- //case 0x6F: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), NORTH); break;
- //case 0x70: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), EAST); break;
- //case 0x71: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), SOUTH); break;
- //case 0x72: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), WEST); break;
- //case 0x78: parseThrow(msg); break;
- //case 0x79: parseLookInShop(msg); break;
- //case 0x7A: parsePlayerPurchase(msg); break;
- //case 0x7B: parsePlayerSale(msg); break;
- //case 0x7C: addGameTask(&Game::playerCloseShop, player->getID()); break;
- //case 0x7D: parseRequestTrade(msg); break;
- //case 0x7E: parseLookInTrade(msg); break;
- //case 0x7F: addGameTask(&Game::playerAcceptTrade, player->getID()); break;
- //case 0x80: addGameTask(&Game::playerCloseTrade, player->getID()); break;
- //case 0x82: parseUseItem(msg); break;
- //case 0x83: parseUseItemEx(msg); break;
- //case 0x84: parseUseWithCreature(msg); break;
- //case 0x85: parseRotateItem(msg); break;
- //case 0x87: parseCloseContainer(msg); break;
- //case 0x88: parseUpArrowContainer(msg); break;
- //case 0x89: parseTextWindow(msg); break;
- //case 0x8A: parseHouseWindow(msg); break;
- //case 0x8C: parseLookAt(msg); break;
- //case 0x8D: parseLookInBattleList(msg); break;
- //case 0x8E: /* join aggression */ break;
- case 0x96: parseSay(msg); break;
- //case 0x97: addGameTask(&Game::playerRequestChannels, player->getID()); break;
- // case 0x98: parseOpenChannel(msg); break;
- case 0x99:{
- int32_t channelId = msg.get<uint16_t>();
- if (this->player->cast.mCastChannelId == channelId)
- this->sendCreatePrivateChannel(this->player->cast.mCastChannelId, "Spectator Chat");
- // parseCloseChannel(msg);
- }
- break;
- //case 0x9A: parseOpenPrivateChannel(msg); break;
- //case 0x9E: addGameTask(&Game::playerCloseNpcChannel, player->getID()); break;
- //case 0xA0: parseFightModes(msg); break;
- //case 0xA1: parseAttack(msg); break;
- //case 0xA2: parseFollow(msg); break;
- //case 0xA3: parseInviteToParty(msg); break;
- //case 0xA4: parseJoinParty(msg); break;
- //case 0xA5: parseRevokePartyInvite(msg); break;
- //case 0xA6: parsePassPartyLeadership(msg); break;
- //case 0xA7: addGameTask(&Game::playerLeaveParty, player->getID()); break;
- //case 0xA8: parseEnableSharedPartyExperience(msg); break;
- //case 0xAA: addGameTask(&Game::playerCreatePrivateChannel, player->getID()); break;
- //case 0xAB: parseChannelInvite(msg); break;
- //case 0xAC: parseChannelExclude(msg); break;
- //case 0xBE: addGameTask(&Game::playerCancelAttackAndFollow, player->getID()); break;
- case 0xC9: /* update tile */ break;
- //case 0xCA: parseUpdateContainer(msg); break;
- //case 0xCB: parseBrowseField(msg); break;
- //case 0xCC: parseSeekInContainer(msg); break;
- //case 0xD2: addGameTask(&Game::playerRequestOutfit, player->getID()); break;
- //case 0xD3: parseSetOutfit(msg); break;
- //case 0xD4: parseToggleMount(msg); break;
- //case 0xDC: parseAddVip(msg); break;
- //case 0xDD: parseRemoveVip(msg); break;
- //case 0xDE: parseEditVip(msg); break;
- //case 0xE6: parseBugReport(msg); break;
- //case 0xE7: /* thank you */ break;
- //case 0xE8: parseDebugAssert(msg); break;
- //case 0xF0: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerShowQuestLog, player->getID()); break;
- //case 0xF1: parseQuestLine(msg); break;
- //case 0xF2: /* rule violation report */ break;
- //case 0xF3: /* get object info */ break;
- //case 0xF4: parseMarketLeave(); break;
- //case 0xF5: parseMarketBrowse(msg); break;
- //case 0xF6: parseMarketCreateOffer(msg); break;
- //case 0xF7: parseMarketCancelOffer(msg); break;
- //case 0xF8: parseMarketAcceptOffer(msg); break;
- //case 0xF9: parseModalWindowAnswer(msg); break;
- default:
- // std::cout << "Player: " << player->getName() << " sent an unknown packet header: 0x" << std::hex << (int16_t)recvbyte << std::dec << "!" << std::endl;
- break;
- }
- else
- switch (recvbyte) {
- case 0x14: g_dispatcher.addTask(createTask(std::bind(&ProtocolGame::logout, this, true, false))); break;
- case 0x1D: addGameTask(&Game::playerReceivePingBack, player->getID()); break;
- case 0x1E: addGameTask(&Game::playerReceivePing, player->getID()); break;
- case 0x32: parseExtendedOpcode(msg); break; //otclient extended opcode
- case 0x64: parseAutoWalk(msg); break;
- case 0x65: addGameTask(&Game::playerMove, player->getID(), NORTH); break;
- case 0x66: addGameTask(&Game::playerMove, player->getID(), EAST); break;
- case 0x67: addGameTask(&Game::playerMove, player->getID(), SOUTH); break;
- case 0x68: addGameTask(&Game::playerMove, player->getID(), WEST); break;
- case 0x69: 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: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), NORTH); break;
- case 0x70: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), EAST); break;
- case 0x71: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), SOUTH); break;
- case 0x72: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerTurn, player->getID(), WEST); break;
- case 0x78: parseThrow(msg); break;
- case 0x79: parseLookInShop(msg); break;
- case 0x7A: parsePlayerPurchase(msg); break;
- case 0x7B: parsePlayerSale(msg); break;
- case 0x7C: addGameTask(&Game::playerCloseShop, player->getID()); break;
- case 0x7D: parseRequestTrade(msg); break;
- case 0x7E: parseLookInTrade(msg); break;
- case 0x7F: addGameTask(&Game::playerAcceptTrade, player->getID()); break;
- case 0x80: addGameTask(&Game::playerCloseTrade, player->getID()); break;
- case 0x82: parseUseItem(msg); break;
- case 0x83: parseUseItemEx(msg); break;
- case 0x84: parseUseWithCreature(msg); break;
- case 0x85: parseRotateItem(msg); break;
- case 0x87: parseCloseContainer(msg); break;
- case 0x88: parseUpArrowContainer(msg); break;
- case 0x89: parseTextWindow(msg); break;
- case 0x8A: parseHouseWindow(msg); break;
- case 0x8C: parseLookAt(msg); break;
- case 0x8D: parseLookInBattleList(msg); break;
- case 0x8E: /* join aggression */ break;
- case 0x96: parseSay(msg); break;
- case 0x97: addGameTask(&Game::playerRequestChannels, player->getID()); break;
- case 0x98: parseOpenChannel(msg); break;
- case 0x99: parseCloseChannel(msg); break;
- case 0x9A: parseOpenPrivateChannel(msg); break;
- case 0x9E: addGameTask(&Game::playerCloseNpcChannel, player->getID()); break;
- case 0xA0: parseFightModes(msg); break;
- case 0xA1: parseAttack(msg); break;
- case 0xA2: parseFollow(msg); break;
- case 0xA3: parseInviteToParty(msg); break;
- case 0xA4: parseJoinParty(msg); break;
- case 0xA5: parseRevokePartyInvite(msg); break;
- case 0xA6: parsePassPartyLeadership(msg); break;
- case 0xA7: addGameTask(&Game::playerLeaveParty, player->getID()); break;
- case 0xA8: parseEnableSharedPartyExperience(msg); break;
- case 0xAA: addGameTask(&Game::playerCreatePrivateChannel, player->getID()); break;
- case 0xAB: parseChannelInvite(msg); break;
- case 0xAC: parseChannelExclude(msg); break;
- case 0xBE: addGameTask(&Game::playerCancelAttackAndFollow, player->getID()); break;
- case 0xC9: /* update tile */ break;
- case 0xCA: parseUpdateContainer(msg); break;
- case 0xCB: parseBrowseField(msg); break;
- case 0xCC: parseSeekInContainer(msg); break;
- case 0xD2: addGameTask(&Game::playerRequestOutfit, player->getID()); break;
- case 0xD3: parseSetOutfit(msg); break;
- case 0xD4: parseToggleMount(msg); break;
- case 0xDC: parseAddVip(msg); break;
- case 0xDD: parseRemoveVip(msg); break;
- case 0xDE: parseEditVip(msg); break;
- case 0xE6: parseBugReport(msg); break;
- case 0xE7: /* thank you */ break;
- case 0xE8: parseDebugAssert(msg); break;
- case 0xF0: addGameTaskTimed(DISPATCHER_TASK_EXPIRATION, &Game::playerShowQuestLog, player->getID()); break;
- case 0xF1: parseQuestLine(msg); break;
- case 0xF2: /* rule violation report */ break;
- case 0xF3: /* get object info */ break;
- case 0xF4: parseMarketLeave(); break;
- case 0xF5: parseMarketBrowse(msg); break;
- case 0xF6: parseMarketCreateOffer(msg); break;
- case 0xF7: parseMarketCancelOffer(msg); break;
- case 0xF8: parseMarketAcceptOffer(msg); break;
- case 0xF9: parseModalWindowAnswer(msg); break;
- default:
- // std::cout << "Player: " << player->getName() << " sent an unknown packet header: 0x" << std::hex << (int16_t)recvbyte << std::dec << "!" << std::endl;
- break;
- }
- if (msg.isOverrun()) {
- disconnect();
- }
- }
- //After
- void ProtocolGame::parseChannelInvite(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseChannelExclude(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseOpenChannel(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseCloseChannel(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseOpenPrivateChannel(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseSetOutfit(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseToggleMount(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseUseItem(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseUseItemEx(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseUseWithCreature(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseCloseContainer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseUpArrowContainer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseUpdateContainer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseThrow(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseLookAt(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseLookInBattleList(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- SpeakClasses type = (SpeakClasses)msg.GetByte();
- //Add this
- if (!original)
- {
- if (!this->player)
- return;
- uint16_t channelId = 0;
- if (type == 7)
- {
- channelId = msg.get<uint16_t>();
- if (this->player->cast.mCastChannelId != channelId)
- return;
- const std::string text = msg.GetString();
- if (text.length() > 255) {
- return;
- }
- addGameTask(&Game::spectatorSay, text, this);
- }
- return;
- }
- //After
- void ProtocolGame::parseFightModes(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseAttack(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseFollow(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseTextWindow(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseHouseWindow(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseLookInShop(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parsePlayerPurchase(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parsePlayerSale(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseRequestTrade(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseLookInTrade(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseAddVip(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseRemoveVip(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseEditVip(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseRotateItem(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseBugReport(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseDebugAssert(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseInviteToParty(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseJoinParty(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseRevokePartyInvite(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parsePassPartyLeadership(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseEnableSharedPartyExperience(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseQuestLine(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseMarketLeave()
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseMarketBrowse(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseMarketCreateOffer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseMarketCancelOffer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseMarketAcceptOffer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseModalWindowAnswer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseBrowseField(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //After
- void ProtocolGame::parseSeekInContainer(NetworkMessage& msg)
- {
- //Add this
- if (!original && debug())
- return;
- //Before
- void ProtocolGame::sendToChannel(const Creature* creature, SpeakClasses type, const std::string& text, uint16_t channelId)
- {
- //Add this
- void ProtocolGame::sendToChannel(ProtocolGame* from, const std::string& text)
- {
- if (!from)
- return;
- if (!from->player)
- return;
- NetworkMessage msg;
- if (from->original)
- AddCreatureSpeak(msg, from->getPlayer(), (SpeakClasses)7, text, from->getPlayer()->cast.mCastChannelId);
- else
- {
- msg.AddByte(0xAA);
- static uint32_t statementId = 0;
- msg.add<uint32_t>(++statementId); // statement id
- msg.AddString(from->viewerName);
- const Player* speaker = from->getPlayer();
- if (speaker && from->original) {
- msg.add<uint16_t>(speaker->getPlayerInfo(PLAYERINFO_LEVEL));
- }
- else {
- msg.add<uint16_t>(0x0);
- }
- msg.AddByte(7);
- msg.add<uint16_t>(from->getPlayer()->cast.mCastChannelId);
- msg.AddString(text);
- }
- writeToOutputBuffer(msg);
- }
- //Replace
- if (const Player* speaker = creature->getPlayer()) {
- //With
- const Player* speaker = creature->getPlayer();
- if (speaker && channelId != speaker->cast.mCastChannelId) {
- //After
- msg.AddByte(player->getSkill(SKILL_FISHING, SKILLVALUE_PERCENT));
- }
- //Add this
- void ProtocolGame::AddCreatureSpeak(NetworkMessage& msg, const Creature* creature, SpeakClasses type,
- const std::string& text, uint16_t channelId, const Position* pos/* = nullptr*/)
- {
- if (!creature) {
- return;
- }
- msg.AddByte(0xAA);
- static uint32_t statementId = 0;
- msg.add<uint32_t>(++statementId); // statement id
- if (type == TALKTYPE_CHANNEL_R2) {
- msg.add<uint16_t>(0x00);
- type = TALKTYPE_CHANNEL_R1;
- } else {
- msg.AddString(creature->getName());
- }
- //Add level only for players
- if (const Player* speaker = creature->getPlayer()) {
- msg.add<uint16_t>(speaker->getPlayerInfo(PLAYERINFO_LEVEL));
- } else {
- msg.add<uint16_t>(0x00);
- }
- msg.AddByte(type);
- switch (type) {
- case TALKTYPE_SAY:
- case TALKTYPE_WHISPER:
- case TALKTYPE_YELL:
- case TALKTYPE_MONSTER_SAY:
- case TALKTYPE_MONSTER_YELL:
- case TALKTYPE_PRIVATE_NP: {
- if (pos) {
- msg.AddPosition(*pos);
- } else {
- msg.AddPosition(creature->getPosition());
- }
- break;
- }
- case TALKTYPE_CHANNEL_Y:
- case TALKTYPE_CHANNEL_R1:
- case TALKTYPE_CHANNEL_O:
- msg.add<uint16_t>(channelId);
- break;
- default:
- break;
- }
- msg.AddString(text);
- }
Advertisement
Add Comment
Please, Sign In to add comment