More progress on cipserver login for pv973 and a few fixes.

* Fixed the "options" module hotkey (changed boost walker to Ctrl+Shift+D).
* Fixed a small issue with UIMiniWindow:setup() function (was setting parent before its pos).
* Pic signature has changed for cipsoft client.
* Fixed 'client type' byte position in the login packet.
* Changed the ping function to execute every 4 seconds rather than 2.
* Changed some protocolgame for pv973 support.
This commit is contained in:
BeniS 2013-01-04 11:42:02 +13:00
parent c47641d7e1
commit ca46b5033e
10 changed files with 37 additions and 11 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
/modules/.project
build* build*
CMakeCache.txt CMakeCache.txt
CMakeFiles CMakeFiles

View File

@ -90,8 +90,9 @@ function Options.init()
end end
end end
g_keyboard.bindKeyDown('Ctrl+D', function() Options.toggle() end)
g_keyboard.bindKeyDown('Ctrl+F', function() Options.toggleOption('fullscreen') end) g_keyboard.bindKeyDown('Ctrl+F', function() Options.toggleOption('fullscreen') end)
g_keyboard.bindKeyDown('Ctrl+D', function() Options.toggleOption('walkBooster') end) g_keyboard.bindKeyDown('Ctrl+Shift+D', function() Options.toggleOption('walkBooster') end)
optionsWindow = g_ui.displayUI('options.otui') optionsWindow = g_ui.displayUI('options.otui')
optionsWindow:hide() optionsWindow:hide()

View File

@ -95,8 +95,8 @@ function UIMiniWindow:setup()
self.miniIndex = selfSettings.index self.miniIndex = selfSettings.index
parent:scheduleInsert(self, selfSettings.index) parent:scheduleInsert(self, selfSettings.index)
elseif selfSettings.position then elseif selfSettings.position then
self:setParent(parent)
self:setPosition(topoint(selfSettings.position)) self:setPosition(topoint(selfSettings.position))
self:setParent(parent)
addEvent(function() self:bindRectToParent() end) addEvent(function() self:bindRectToParent() end)
end end
end end

View File

@ -149,6 +149,9 @@ CIPSOFT_RSA = "1321277432058722840622950990822933849527763264961655079678763618"
-- set to the latest Tibia.pic signature to make otclient compatible with official tibia -- set to the latest Tibia.pic signature to make otclient compatible with official tibia
PIC_SIGNATURE = 1337606793 PIC_SIGNATURE = 1337606793
if g_game.getClientVersion() < 970 then
PIC_SIGNATURE = 1353074333
end
OsTypes = { OsTypes = {
Linux = 1, Linux = 1,
@ -162,7 +165,7 @@ OsTypes = {
PathFindResults = { PathFindResults = {
Ok = 0, Ok = 0,
Position = 1, Position = 1,
Impossipble = 2, Impossible = 2,
TooFar = 3, TooFar = 3,
NoWay = 4 NoWay = 4
} }

View File

@ -32,13 +32,16 @@ function ProtocolLogin:sendLoginPacket()
if g_game.getProtocolVersion() >= 971 then if g_game.getProtocolVersion() >= 971 then
msg:addU32(g_game.getClientVersion()) msg:addU32(g_game.getClientVersion())
msg:addU8(182) -- clientType
end end
msg:addU32(g_things.getDatSignature()) msg:addU32(g_things.getDatSignature())
msg:addU32(g_sprites.getSprSignature()) msg:addU32(g_sprites.getSprSignature())
msg:addU32(PIC_SIGNATURE) msg:addU32(PIC_SIGNATURE)
if g_game.getProtocolVersion() >= 971 then
msg:addU8(0) -- clientType
end
local paddingBytes = 128 local paddingBytes = 128
msg:addU8(0) -- first RSA byte must be 0 msg:addU8(0) -- first RSA byte must be 0
paddingBytes = paddingBytes - 1 paddingBytes = paddingBytes - 1

View File

@ -133,6 +133,8 @@ void Game::processPendingGame()
void Game::processEnterGame() void Game::processEnterGame()
{ {
m_localPlayer->setPendingGame(false); m_localPlayer->setPendingGame(false);
m_protocolGame->sendEnterGame();
g_lua.callGlobalField("g_game", "onEnterGame"); g_lua.callGlobalField("g_game", "onEnterGame");
} }
@ -156,7 +158,7 @@ void Game::processGameStart()
m_protocolGame->sendPing(); m_protocolGame->sendPing();
disableBotCall(); disableBotCall();
} }
}, 2000); }, 4000);
} }
} }

View File

@ -145,7 +145,8 @@ namespace Proto {
enum ClientOpcodes : uint8 enum ClientOpcodes : uint8
{ {
ClientEnterAccount = 1, ClientEnterAccount = 1,
ClientEnterGame = 10, ClientPendingGame = 10,
ClientEnterGame = 15,
ClientLeaveGame = 20, ClientLeaveGame = 20,
ClientPing = 29, ClientPing = 29,
ClientPingBack = 30, ClientPingBack = 30,

View File

@ -36,6 +36,7 @@ public:
void sendExtendedOpcode(uint8 opcode, const std::string& buffer); void sendExtendedOpcode(uint8 opcode, const std::string& buffer);
void sendLoginPacket(uint challangeTimestamp, uint8 challangeRandom); void sendLoginPacket(uint challangeTimestamp, uint8 challangeRandom);
void sendEnterGame();
void sendLogout(); void sendLogout();
void sendPing(); void sendPing();
void sendPingBack(); void sendPingBack();

View File

@ -43,9 +43,11 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg)
opcode = msg->getU8(); opcode = msg->getU8();
// must be > so extended will be enabled before GameStart. // must be > so extended will be enabled before GameStart.
if(!m_gameInitialized && opcode > Proto::GameServerFirstGameOpcode) { if(!g_game.getFeature(Otc::GameLoginPending)) {
g_game.processGameStart(); if(!m_gameInitialized && opcode > Proto::GameServerFirstGameOpcode) {
m_gameInitialized = true; g_game.processGameStart();
m_gameInitialized = true;
}
} }
// try to parse in lua first // try to parse in lua first
@ -361,6 +363,11 @@ void ProtocolGame::parseEnterGame(const InputMessagePtr& msg)
{ {
//set player to entered game state //set player to entered game state
g_game.processEnterGame(); g_game.processEnterGame();
if(!m_gameInitialized) {
g_game.processGameStart();
m_gameInitialized = true;
}
} }
void ProtocolGame::parseGMActions(const InputMessagePtr& msg) void ProtocolGame::parseGMActions(const InputMessagePtr& msg)

View File

@ -48,7 +48,7 @@ void ProtocolGame::sendLoginPacket(uint challangeTimestamp, uint8 challangeRando
{ {
OutputMessagePtr msg(new OutputMessage); OutputMessagePtr msg(new OutputMessage);
msg->addU8(Proto::ClientEnterGame); msg->addU8(Proto::ClientPendingGame);
msg->addU16(g_lua.callGlobalField<int>("g_game", "getOsType")); msg->addU16(g_lua.callGlobalField<int>("g_game", "getOsType"));
msg->addU16(g_game.getProtocolVersion()); msg->addU16(g_game.getProtocolVersion());
@ -103,6 +103,13 @@ void ProtocolGame::sendLoginPacket(uint challangeTimestamp, uint8 challangeRando
enableXteaEncryption(); enableXteaEncryption();
} }
void ProtocolGame::sendEnterGame()
{
OutputMessagePtr msg(new OutputMessage);
msg->addU8(Proto::ClientEnterGame);
send(msg);
}
void ProtocolGame::sendLogout() void ProtocolGame::sendLogout()
{ {
OutputMessagePtr msg(new OutputMessage); OutputMessagePtr msg(new OutputMessage);
@ -444,7 +451,7 @@ void ProtocolGame::sendLook(const Position& position, int thingId, int stackpos)
void ProtocolGame::sendLookCreature(uint32 creatureId) void ProtocolGame::sendLookCreature(uint32 creatureId)
{ {
OutputMessagePtr msg(new OutputMessage); OutputMessagePtr msg(new OutputMessage);
msg->addU8(0x8D); msg->addU8(Proto::ClientLookCreature);
msg->addU32(creatureId); msg->addU32(creatureId);
send(msg); send(msg);
} }