Support for protocol 7.7/7.72 / Tiny fix

This commit is contained in:
Sam 2013-12-26 21:31:55 +01:00
parent 91c182d93d
commit da959aca28
6 changed files with 24 additions and 16 deletions

View File

@ -48,7 +48,7 @@ g_modules.ensureModuleLoaded("game_interface")
-- mods 1000-9999 -- mods 1000-9999
g_modules.autoLoadModules(9999) g_modules.autoLoadModules(9999)
local script = '/' .. g_app.getCompactName() .. 'rc' local script = '/' .. g_app.getCompactName() .. 'rc.lua'
if g_resources.fileExists(script) then if g_resources.fileExists(script) then
dofile(script) dofile(script)

View File

@ -14,7 +14,7 @@ function reloadScripts()
g_textures.clearCache() g_textures.clearCache()
g_modules.reloadModules() g_modules.reloadModules()
local script = '/' .. g_app.getCompactName() .. 'rc' local script = '/' .. g_app.getCompactName() .. 'rc.lua'
if g_resources.fileExists(script) then if g_resources.fileExists(script) then
dofile(script) dofile(script)
end end

View File

@ -48,11 +48,12 @@ end
function g_game.getSupportedClients() function g_game.getSupportedClients()
return { return {
760, 810, 811, 840, 842, 850, 853, 760, 770, 772, 810, 811, 840, 842,
854, 860, 861, 862, 870, 910, 940, 850, 853, 854, 860, 861, 862, 870,
944, 953, 954, 960, 961, 963, 970, 910, 940, 944, 953, 954, 960, 961,
980, 981, 982, 983, 984, 985, 986, 963, 970, 980, 981, 982, 983, 984,
1001, 1002, 1010, 1020, 1021, 1022, 985, 986, 1001, 1002, 1010, 1020,
1021, 1022
} }
end end

View File

@ -46,7 +46,7 @@ function ProtocolLogin:sendLoginPacket()
local offset = msg:getMessageSize() local offset = msg:getMessageSize()
if g_game.getProtocolVersion() >= 800 then if g_game.getProtocolVersion() >= 770 then
-- first RSA byte must be 0 -- first RSA byte must be 0
msg:addU8(0) msg:addU8(0)
-- xtea key -- xtea key
@ -74,7 +74,7 @@ function ProtocolLogin:sendLoginPacket()
local paddingBytes = g_crypt.rsaGetSize() - (msg:getMessageSize() - offset) local paddingBytes = g_crypt.rsaGetSize() - (msg:getMessageSize() - offset)
assert(paddingBytes >= 0) assert(paddingBytes >= 0)
msg:addPaddingBytes(paddingBytes, 0) msg:addPaddingBytes(paddingBytes, 0)
if g_game.getProtocolVersion() >= 800 then if g_game.getProtocolVersion() >= 770 then
msg:encryptRsa() msg:encryptRsa()
end end
@ -83,7 +83,7 @@ function ProtocolLogin:sendLoginPacket()
end end
self:send(msg) self:send(msg)
if g_game.getProtocolVersion() >= 800 then if g_game.getProtocolVersion() >= 770 then
self:enableXteaEncryption() self:enableXteaEncryption()
end end
self:recv() self:recv()

View File

@ -1445,7 +1445,7 @@ void Game::setProtocolVersion(int version)
if(isOnline()) if(isOnline())
stdext::throw_exception("Unable to change protocol version while online"); stdext::throw_exception("Unable to change protocol version while online");
if(version != 0 && version != 760 && (version < 810 || version > 1022)) if(version != 0 && (version < 760 || (version > 772 && version < 810) || version > 1022))
stdext::throw_exception(stdext::format("Protocol version %d not supported", version)); stdext::throw_exception(stdext::format("Protocol version %d not supported", version));
m_features.reset(); m_features.reset();
@ -1453,6 +1453,8 @@ void Game::setProtocolVersion(int version)
if(version >= 770) if(version >= 770)
{ {
enableFeature(Otc::GameLooktypeU16);
enableFeature(Otc::GameMessageStatements);
enableFeature(Otc::GameWritableDate); // might not be since 770 enableFeature(Otc::GameWritableDate); // might not be since 770
} }
@ -1462,9 +1464,7 @@ void Game::setProtocolVersion(int version)
enableFeature(Otc::GamePlayerStamina); enableFeature(Otc::GamePlayerStamina);
enableFeature(Otc::GameNewFluids); enableFeature(Otc::GameNewFluids);
enableFeature(Otc::GameMessageLevel); enableFeature(Otc::GameMessageLevel);
enableFeature(Otc::GameMessageStatements);
enableFeature(Otc::GamePlayerStateU16); enableFeature(Otc::GamePlayerStateU16);
enableFeature(Otc::GameLooktypeU16);
enableFeature(Otc::GameNewOutfitProtocol); enableFeature(Otc::GameNewOutfitProtocol);
} }
@ -1553,7 +1553,7 @@ void Game::setClientVersion(int version)
if(isOnline()) if(isOnline())
stdext::throw_exception("Unable to change client version while online"); stdext::throw_exception("Unable to change client version while online");
if(version != 0 && version != 760 && (version < 810 || version > 1022)) if(version != 0 && (version < 760 || (version > 772 && version < 810) || version > 1022))
stdext::throw_exception(stdext::format("Client version %d not supported", version)); stdext::throw_exception(stdext::format("Client version %d not supported", version));
m_clientVersion = version; m_clientVersion = version;

View File

@ -1462,8 +1462,15 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg)
outfitList.push_back(std::make_tuple(outfitId, outfitName, outfitAddons)); outfitList.push_back(std::make_tuple(outfitId, outfitName, outfitAddons));
} }
} else { } else {
int outfitStart = msg->getU8(); int outfitStart, outfitEnd;
int outfitEnd = msg->getU8(); if(g_game.getFeature(Otc::GameLooktypeU16)) {
outfitStart = msg->getU16();
outfitEnd = msg->getU16();
} else {
outfitStart = msg->getU8();
outfitEnd = msg->getU8();
}
for(int i = outfitStart; i <= outfitEnd; i++) for(int i = outfitStart; i <= outfitEnd; i++)
outfitList.push_back(std::make_tuple(i, "", 0)); outfitList.push_back(std::make_tuple(i, "", 0));
} }