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:
parent
c47641d7e1
commit
ca46b5033e
|
@ -1,3 +1,4 @@
|
||||||
|
/modules/.project
|
||||||
build*
|
build*
|
||||||
CMakeCache.txt
|
CMakeCache.txt
|
||||||
CMakeFiles
|
CMakeFiles
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -43,10 +43,12 @@ 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(!g_game.getFeature(Otc::GameLoginPending)) {
|
||||||
if(!m_gameInitialized && opcode > Proto::GameServerFirstGameOpcode) {
|
if(!m_gameInitialized && opcode > Proto::GameServerFirstGameOpcode) {
|
||||||
g_game.processGameStart();
|
g_game.processGameStart();
|
||||||
m_gameInitialized = true;
|
m_gameInitialized = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// try to parse in lua first
|
// try to parse in lua first
|
||||||
int readPos = msg->getReadPos();
|
int readPos = msg->getReadPos();
|
||||||
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue