10.96, 10.97, 10.98, 10.99 support

Adds basic support for the latest client version
master
Joseph Bingham 7 years ago
parent a6a50fa162
commit 344146ba2d

@ -75,7 +75,8 @@ function g_game.getSupportedClients()
1063, 1064, 1070, 1071, 1072,
1073, 1074, 1075, 1076, 1080,
1081, 1082, 1090, 1091, 1092,
1093, 1094, 1095
1093, 1094, 1095, 1096, 1097,
1098, 1099
}
end

@ -1492,7 +1492,7 @@ void Game::setProtocolVersion(int version)
if(isOnline())
stdext::throw_exception("Unable to change protocol version while online");
if(version != 0 && (version < 740 || version > 1095))
if(version != 0 && (version < 740 || version > 1099))
stdext::throw_exception(stdext::format("Protocol version %d not supported", version));
m_protocolVersion = version;
@ -1510,7 +1510,7 @@ void Game::setClientVersion(int version)
if(isOnline())
stdext::throw_exception("Unable to change client version while online");
if(version != 0 && (version < 740 || version > 1095))
if(version != 0 && (version < 740 || version > 1099))
stdext::throw_exception(stdext::format("Client version %d not supported", version));
m_features.reset();

@ -51,6 +51,7 @@ namespace Proto {
GameServerLoginWait = 22,
GameServerLoginSuccess = 23,
GameServerLoginToken = 24,
GameServerStoreButtonIndicators = 25, // 1097
GameServerPingBack = 29,
GameServerPing = 30,
GameServerChallenge = 31,
@ -120,6 +121,7 @@ namespace Proto {
GameServerSpellDelay = 164, // 870
GameServerSpellGroupDelay = 165, // 870
GameServerMultiUseDelay = 166, // 870
GameServerSetStoreDeepLink = 168, // 1097
GameServerTalk = 170,
GameServerChannels = 171,
GameServerOpenChannel = 172,

@ -134,6 +134,8 @@ public:
void addPosition(const OutputMessagePtr& msg, const Position& position);
private:
void parseStoreButtonIndicators(const InputMessagePtr& msg);
void parseSetStoreDeepLink(const InputMessagePtr& msg);
void parseStore(const InputMessagePtr& msg);
void parseStoreError(const InputMessagePtr& msg);
void parseStoreTransactionHistory(const InputMessagePtr& msg);

@ -381,6 +381,11 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg)
case Proto::GameServerStore:
parseStore(msg);
break;
// PROTOCOL>=1097
case Proto::GameServerStoreButtonIndicators:
break;
case Proto::GameServerSetStoreDeepLink:
break;
// otclient ONLY
case Proto::GameServerExtendedOpcode:
parseExtendedOpcode(msg);
@ -454,6 +459,17 @@ void ProtocolGame::parseEnterGame(const InputMessagePtr& msg)
}
}
void ProtocolGame::parseStoreButtonIndicators(const InputMessagePtr& msg)
{
msg->getU8(); // unknown
msg->getU8(); // unknown
}
void ProtocolGame::parseSetStoreDeepLink(const InputMessagePtr& msg)
{
int currentlyFeaturedServiceType = msg->getU8();
}
void ProtocolGame::parseBlessings(const InputMessagePtr& msg)
{
uint16 blessings = msg->getU16();
@ -462,7 +478,7 @@ void ProtocolGame::parseBlessings(const InputMessagePtr& msg)
void ProtocolGame::parsePreset(const InputMessagePtr& msg)
{
uint16 preset = msg->getU32();
uint32 preset = msg->getU32();
}
void ProtocolGame::parseRequestPurchaseData(const InputMessagePtr& msg)
@ -534,8 +550,14 @@ void ProtocolGame::parseCompleteStorePurchase(const InputMessagePtr& msg)
void ProtocolGame::parseStoreTransactionHistory(const InputMessagePtr &msg)
{
int currentPage = msg->getU16();
bool hasNextPage = msg->getU8() == 1;
int currentPage;
if (g_game.getClientVersion() <= 1096) {
currentPage = msg->getU16();
bool hasNextPage = msg->getU8() == 1;
} else {
currentPage = msg->getU32();
int pageCount = msg->getU32();
}
int entries = msg->getU8();
for(int i = 0; i < entries; i++) {
@ -559,6 +581,11 @@ void ProtocolGame::parseStoreOffers(const InputMessagePtr& msg)
int price = msg->getU32();
int highlightState = msg->getU8();
if (highlightState == 2 && g_game.getFeature(Otc::GameIngameStoreHighlights) && g_game.getClientVersion() >= 1097) {
int saleValidUntilTimestamp = msg->getU32();
int basePrice = msg->getU32();
}
int disabledState = msg->getU8();
std::string disabledReason = "";
if(g_game.getFeature(Otc::GameIngameStoreHighlights) && disabledState == 1) {
@ -1267,7 +1294,10 @@ void ProtocolGame::parsePremiumTrigger(const InputMessagePtr& msg)
for(int i=0;i<triggerCount;++i) {
triggers.push_back(msg->getU8());
}
bool something = msg->getU8() == 1;
if (g_game.getClientVersion() <= 1096) {
bool something = msg->getU8() == 1;
}
}
void ProtocolGame::parsePlayerInfo(const InputMessagePtr& msg)
@ -1320,7 +1350,15 @@ void ProtocolGame::parsePlayerStats(const InputMessagePtr& msg)
double levelPercent = msg->getU8();
if(g_game.getFeature(Otc::GameExperienceBonus))
double experienceBonus = msg->getDouble();
if (g_game.getClientVersion() <= 1096) {
double experienceBonus = msg->getDouble();
} else {
int baseXpGain = msg->getU16();
int voucherAddend = msg->getU16();
int grindingAddend = msg->getU16();
int storeBoostAddend = msg->getU16();
int huntingBoostFactor = msg->getU16();
}
double mana;
double maxMana;
@ -1356,8 +1394,13 @@ void ProtocolGame::parsePlayerStats(const InputMessagePtr& msg)
regeneration = msg->getU16();
double training = 0;
if(g_game.getFeature(Otc::GameOfflineTrainingTime))
training = msg->getU16();
if (g_game.getFeature(Otc::GameOfflineTrainingTime)) {
training = msg->getU16();
if (g_game.getClientVersion() >= 1097) {
int remainingStoreXpBoostSeconds = msg->getU16();
bool canBuyMoreStoreXpBoosts = msg->getU8();
}
}
m_localPlayer->setHealth(health, maxHealth);
m_localPlayer->setFreeCapacity(freeCapacity);

@ -880,8 +880,13 @@ void ProtocolGame::sendRequestTransactionHistory(int page, int entriesPerPage)
{
OutputMessagePtr msg(new OutputMessage);
msg->addU8(Proto::ClientRequestTransactionHistory);
msg->addU16(page);
msg->addU32(entriesPerPage);
if (g_game.getClientVersion() <= 1096) {
msg->addU16(page);
msg->addU32(entriesPerPage);
} else {
msg->addU32(page);
msg->addU8(entriesPerPage);
}
send(msg);
}

Loading…
Cancel
Save