10.96, 10.97, 10.98, 10.99 support
Adds basic support for the latest client version
This commit is contained in:
		
							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…
	
		Reference in New Issue
	
	 Joseph Bingham
						Joseph Bingham