if(player->isAccountManager())
{
switch(recvbyte)
{
case 0x14:
parseLogout(msg);
break;
case 0x96:
parseSay(msg);
break;
case 0x1E:
parseReceivePing(msg);
break;
case 0xC9:
parseUpdateTile(msg);
break;
case 0xE8:
parseDebugAssert(msg);
break;
case 0xA1:
parseCancelTarget(msg);
break;
default:
parseCancelWalk(msg);
break;
}
}
else
{
switch(recvbyte)
{
case 0x14: // logout
parseLogout(msg);
break;
case 0x1E: // keep alive / ping response
parseReceivePing(msg);
break;
case 0x64: // move with steps
parseAutoWalk(msg);
break;
case 0x65: // move north
case 0x66: // move east
case 0x67: // move south
case 0x68: // move west
parseMove(msg, (Direction)(recvbyte - 0x65));
break;
case 0x69: // stop-autowalk
addGameTask(&Game::playerStopAutoWalk, player->getID());
break;
case 0x6A:
parseMove(msg, NORTHEAST);
break;
case 0x6B:
parseMove(msg, SOUTHEAST);
break;
case 0x6C:
parseMove(msg, SOUTHWEST);
break;
case 0x6D:
parseMove(msg, NORTHWEST);
break;
case 0x6F: // turn north
case 0x70: // turn east
case 0x71: // turn south
case 0x72: // turn west
parseTurn(msg, (Direction)(recvbyte - 0x6F));
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
parseAcceptTrade(msg);
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:
parseLookAt(msg);
break;
case 0x8D:
parseLookInBattleList(msg);
break;
case 0x96: // say something
parseSay(msg);
break;
case 0x97: // request channels
parseGetChannels(msg);
break;
case 0x98: // open channel
parseOpenChannel(msg);
break;
case 0x99: // close channel
parseCloseChannel(msg);
break;
case 0x9A: // open priv
parseOpenPrivate(msg);
break;
case 0x9B: //process report
parseProcessRuleViolation(msg);
break;
case 0x9C: //gm closes report
parseCloseRuleViolation(msg);
break;
case 0x9D: //player cancels report
parseCancelRuleViolation(msg);
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: // invite party
parseInviteToParty(msg);
break;
case 0xA4: // join party
parseJoinParty(msg);
break;
case 0xA5: // revoke party
parseRevokePartyInvite(msg);
break;
case 0xA6: // pass leadership
parsePassPartyLeadership(msg);
break;
case 0xA7: // leave party
parseLeaveParty(msg);
break;
case 0xAA:
parseCreatePrivateChannel(msg);
break;
case 0xAB:
parseChannelInvite(msg);
break;
case 0xAC:
parseChannelExclude(msg);
break;
case 0xBE: // cancel move
parseCancelMove(msg);
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
if((!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || !g_config.getBool(
ConfigManager::DISABLE_OUTFITS_PRIVILEGED)) && (g_config.getBool(ConfigManager::ALLOW_CHANGEOUTFIT)
|| g_config.getBool(ConfigManager::ALLOW_CHANGECOLORS)))
parseRequestOutfit(msg);
break;
case 0xD3: // set outfit
if((!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || !g_config.getBool(ConfigManager::DISABLE_OUTFITS_PRIVILEGED))
&& (g_config.getBool(ConfigManager::ALLOW_CHANGECOLORS) || g_config.getBool(ConfigManager::ALLOW_CHANGEOUTFIT)))
parseSetOutfit(msg);
break;
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:
{
bool success = false;
if(g_config.getBool(ConfigManager::BAN_UNKNOWN_BYTES))
{
if(!player || player->isRemoved())
return;
Account account = IOLoginData::getInstance()->loadAccount(player->getAccount(), true);
if(IOBan::getInstance()->addAccountBanishment(account.number, -1, 19, ACTION_DELETION, "using unoffical software.", 0, player->guid))
{
success = true;
}
if (success) {
// Broadcast the Botter
/*std::stringstream ss;
ss << "[SYSTEM] Player: " << player->getName() << " has been detected using unofficial software to play.";
g_game.broadcastMessage(ss.str(), MSG_STATUS_WARNING);
*/
Scheduler::getInstance().addEvent(createSchedulerTask(1000, boost::bind(&Game::kickPlayer, &g_game, player->getID(), false)));
}
}
}
}
}