void Game::setClientVersion(int version) { if(m_clientVersion == version) return; if(isOnline()) stdext::throw_exception("Unable to change client version while online"); if(version != 0 && (version < 740 || version > 1051)) stdext::throw_exception(stdext::format("Client version %d not supported", version)); m_features.reset(); enableFeature(Otc::GameFormatCreatureName); if(version >= 770) { enableFeature(Otc::GameLooktypeU16); enableFeature(Otc::GameMessageStatements); } if(version >= 780) { enableFeature(Otc::GamePlayerAddons); enableFeature(Otc::GamePlayerStamina); enableFeature(Otc::GameNewFluids); enableFeature(Otc::GameMessageLevel); enableFeature(Otc::GamePlayerStateU16); enableFeature(Otc::GameNewOutfitProtocol); } if(version >= 790) { enableFeature(Otc::GameWritableDate); } if(version >= 840) { enableFeature(Otc::GameProtocolChecksum); enableFeature(Otc::GameAccountNames); enableFeature(Otc::GameDoubleFreeCapacity); } if(version >= 841) { enableFeature(Otc::GameChallengeOnLogin); } if(version >= 854) { enableFeature(Otc::GameCreatureEmblems); } if(version >= 860) { enableFeature(Otc::GameAttackSeq); } if(version >= 862) { enableFeature(Otc::GamePenalityOnDeath); } if(version >= 870) { enableFeature(Otc::GameDoubleExperience); enableFeature(Otc::GamePlayerMounts); enableFeature(Otc::GameSpellList); } if(version >= 910) { enableFeature(Otc::GameNameOnNpcTrade); enableFeature(Otc::GameTotalCapacity); enableFeature(Otc::GameSkillsBase); enableFeature(Otc::GamePlayerRegenerationTime); enableFeature(Otc::GameChannelPlayerList); enableFeature(Otc::GameEnvironmentEffect); enableFeature(Otc::GameItemAnimationPhase); } if(version >= 940) { enableFeature(Otc::GamePlayerMarket); } if(version >= 953) { enableFeature(Otc::GamePurseSlot); enableFeature(Otc::GameClientPing); } if(version >= 960) { enableFeature(Otc::GameSpritesU32); enableFeature(Otc::GameOfflineTrainingTime); } if(version >= 963) { enableFeature(Otc::GameAdditionalVipInfo); } if(version >= 981) { enableFeature(Otc::GameLoginPending); enableFeature(Otc::GameNewSpeedLaw); } if(version >= 984) { enableFeature(Otc::GameContainerPagination); enableFeature(Otc::GameBrowseField); } if(version >= 1000) { enableFeature(Otc::GameThingMarks); enableFeature(Otc::GamePVPMode); } if (version >= 1035) { enableFeature(Otc::GameDoubleSkills); enableFeature(Otc::GameBaseSkillU16); } if(version >= 1036) { enableFeature(Otc::GameCreatureIcons); enableFeature(Otc::GameHideNpcNames); } if(version >= 1038) { enableFeature(Otc::GamePremiumExpiration); } if(version >= 1050) { enableFeature(Otc::GameEnhancedAnimations); } m_clientVersion = version; g_lua.callGlobalField("g_game", "onClientVersionChange", version); }
void Game::setClientVersion(int version) { if(m_clientVersion == version) return; if(isOnline()) stdext::throw_exception("Unable to change client version while online"); if(version < 810 || version > 961) stdext::throw_exception(stdext::format("Protocol version %d not supported", version)); m_features.reset(); if(version <= 810) { enableFeature(Otc::GameChargeableItems); } if(version >= 854) { enableFeature(Otc::GameProtocolChecksum); enableFeature(Otc::GameAccountNames); enableFeature(Otc::GameChallangeOnLogin); enableFeature(Otc::GameDoubleFreeCapacity); enableFeature(Otc::GameCreatureEmblems); } if(version >= 862) { enableFeature(Otc::GamePenalityOnDeath); } if(version >= 870) { enableFeature(Otc::GameDoubleExperience); enableFeature(Otc::GamePlayerMounts); } if(version >= 910) { enableFeature(Otc::GameNameOnNpcTrade); enableFeature(Otc::GameTotalCapacity); enableFeature(Otc::GameSkillsBase); enableFeature(Otc::GamePlayerRegenerationTime); enableFeature(Otc::GameChannelPlayerList); enableFeature(Otc::GameEnvironmentEffect); enableFeature(Otc::GameItemAnimationPhase); } if(version >= 940) { enableFeature(Otc::GamePlayerMarket); } if(version >= 954) { enableFeature(Otc::GamePurseSlot); } if(version >= 960) { enableFeature(Otc::GameSpritesU32); enableFeature(Otc::GameOfflineTrainingTime); } m_clientVersion = version; Proto::buildMessageModesMap(version); g_lua.callGlobalField("g_game", "onClientVersionChange", version); }
void Game::setProtocolVersion(int version) { if(m_protocolVersion == version) return; if(isOnline()) stdext::throw_exception("Unable to change protocol version while online"); if(version != 0 && version != 760 && (version < 810 || version > 1022)) stdext::throw_exception(stdext::format("Protocol version %d not supported", version)); m_features.reset(); enableFeature(Otc::GameFormatCreatureName); if(version >= 780) { enableFeature(Otc::GamePlayerAddons); enableFeature(Otc::GamePlayerStamina); enableFeature(Otc::GameNewFluids); enableFeature(Otc::GameMessageLevel); enableFeature(Otc::GameMessageStatements); enableFeature(Otc::GamePlayerStateU16); enableFeature(Otc::GameLooktypeU16); enableFeature(Otc::GameNewOutfitProtocol); } if(version >= 840) { enableFeature(Otc::GameProtocolChecksum); enableFeature(Otc::GameChallengeOnLogin); enableFeature(Otc::GameAccountNames); enableFeature(Otc::GameDoubleFreeCapacity); } if(version >= 780 && version <= 854) { // 780 might not be accurate enableFeature(Otc::GameChargeableItems); } if(version >= 854) { enableFeature(Otc::GameCreatureEmblems); } if(version >= 860) { enableFeature(Otc::GameAttackSeq); } if(version >= 862) { enableFeature(Otc::GamePenalityOnDeath); } if(version >= 870) { enableFeature(Otc::GameDoubleExperience); enableFeature(Otc::GamePlayerMounts); enableFeature(Otc::GameSpellList); } if(version >= 910) { enableFeature(Otc::GameNameOnNpcTrade); enableFeature(Otc::GameTotalCapacity); enableFeature(Otc::GameSkillsBase); enableFeature(Otc::GamePlayerRegenerationTime); enableFeature(Otc::GameChannelPlayerList); enableFeature(Otc::GameEnvironmentEffect); enableFeature(Otc::GameItemAnimationPhase); } if(version >= 940) { enableFeature(Otc::GamePlayerMarket); } if(version >= 953) { enableFeature(Otc::GamePurseSlot); enableFeature(Otc::GameClientPing); } if(version >= 960) { enableFeature(Otc::GameSpritesU32); enableFeature(Otc::GameOfflineTrainingTime); } if(version >= 973) { enableFeature(Otc::GameLoginPending); enableFeature(Otc::GameNewSpeedLaw); } if(version >= 976) { enableFeature(Otc::GameContainerPagination); } if(version >= 979) { enableFeature(Otc::GameThingMarks); } if(version >= 1000) { enableFeature(Otc::GamePVPMode); } m_protocolVersion = version; Proto::buildMessageModesMap(version); g_lua.callGlobalField("g_game", "onProtocolVersionChange", version); }