diff --git a/modules/game_minimap/minimap.otmod b/modules/game_minimap/minimap.otmod index 51dee86c..ccf79f76 100644 --- a/modules/game_minimap/minimap.otmod +++ b/modules/game_minimap/minimap.otmod @@ -4,6 +4,6 @@ Module author: edubart, BeniS website: www.otclient.info sandboxed: true - scripts: [minimap.lua] + scripts: [ minimap.lua ] @onLoad: init() @onUnload: terminate() diff --git a/modules/game_playermount/playermount.otmod b/modules/game_playermount/playermount.otmod index 0b345ff8..33ce7b1a 100644 --- a/modules/game_playermount/playermount.otmod +++ b/modules/game_playermount/playermount.otmod @@ -4,6 +4,6 @@ Module author: BeniS website: www.otclient.info sandboxed: true - scripts: [playermount.lua] + scripts: [ playermount.lua ] @onLoad: init() @onUnload: terminate() diff --git a/modules/game_shaders/shaders.otmod b/modules/game_shaders/shaders.otmod index 799c6ff0..8e2f47d8 100644 --- a/modules/game_shaders/shaders.otmod +++ b/modules/game_shaders/shaders.otmod @@ -3,7 +3,7 @@ Module description: Manage game shaders author: edubart website: www.otclient.info - scripts: [ shaders.lua ] sandboxed: true + scripts: [ shaders.lua ] @onLoad: init() @onUnload: terminate() diff --git a/modules/game_skills/skills.otmod b/modules/game_skills/skills.otmod index c4ff4016..54ebe054 100644 --- a/modules/game_skills/skills.otmod +++ b/modules/game_skills/skills.otmod @@ -4,11 +4,8 @@ Module author: baxnie, edubart website: www.otclient.info sandboxed: true - scripts: - - skills.lua - - dependencies: - - game_interface - + scripts: [ skills.lua ] @onLoad: init() @onUnload: terminate() + dependencies: + - game_interface diff --git a/modules/game_viplist/viplist.lua b/modules/game_viplist/viplist.lua index 12148795..c960d2a1 100644 --- a/modules/game_viplist/viplist.lua +++ b/modules/game_viplist/viplist.lua @@ -151,6 +151,7 @@ function onVipListLabelMousePress(widget, mousePos, mouseButton) local vipList = vipWindow:getChildById('contentsPanel') local menu = g_ui.createWidget('PopupMenu') + menu:addOption(tr('Send Message'), function() g_game.openPrivateChannel(widget:getText()) end) menu:addOption(tr('Add new VIP'), function() createAddWindow() end) menu:addOption(tr('Remove %s', widget:getText()), function() if widget then g_game.removeVip(widget:getId():sub(4)) vipList:removeChild(widget) end end) menu:addSeparator() diff --git a/modules/gamelib/const.lua b/modules/gamelib/const.lua index 815a3493..c7f21302 100644 --- a/modules/gamelib/const.lua +++ b/modules/gamelib/const.lua @@ -43,7 +43,7 @@ ChaseOpponent = 1 GameProtocolChecksum = 1 GameAccountNames = 2 -GameChallangeOnLogin = 3 +GameChallengeOnLogin = 3 GamePenalityOnDeath = 4 GameNameOnNpcTrade = 5 GameDoubleFreeCapacity = 6 @@ -65,8 +65,18 @@ GamePurseSlot = 21 GameFormatCreatureName = 22 GameSpellList = 23 GameClientPing = 24 -GameLoginPending = 25 -GameNewSpeedLaw = 26 +GameExtendedClientPing = 25 +GameUpdater = 26 +GameLoginLocale = 27 +GameDoubleHealth = 28 +GameDoubleSkills = 29 +GameChangeMapAwareRange = 30 +GameMapMovePosition = 31 +GameAttackSeq = 32 +GameBlueNpcNameColor = 33 +GameDiagonalAnimatedText = 34 +GameLoginPending = 35 +GameNewSpeedLaw = 36 TextColors = { red = '#f55e5e', --'#c83200' diff --git a/modules/gamelib/game.lua b/modules/gamelib/game.lua index 94fd9092..78540b95 100644 --- a/modules/gamelib/game.lua +++ b/modules/gamelib/game.lua @@ -1,19 +1,21 @@ local currentRsa -local enableCreatureNameFormat = true function g_game.getRsa() return currentRsa end -function g_game.isCreatureNameFormatEnabled() - return enableCreatureNameFormat -end - function g_game.chooseRsa(host) if string.ends(host, '.tibia.com') or string.ends(host, '.cipsoft.com') then g_game.setRsa(CIPSOFT_RSA) + + if g_app.getOs() == 'windows' then + g_game.setCustomOs(OsTypes.Windows) + else + g_game.setCustomOs(OsTypes.Linux) + end else g_game.setRsa(OTSERV_RSA) + g_game.setCustomOs(-1) end end @@ -28,24 +30,6 @@ function g_game.isOfficialTibia() return currentRsa == CIPSOFT_RSA end -function g_game.getOsType() - if g_game.isOfficialTibia() then - if g_app.getOs() == 'windows' then - return OsTypes.Windows - else - return OsTypes.Linux - end - else - if g_app.getOs() == 'windows' then - return OsTypes.OtclientWindows - elseif g_app.getOs() == 'mac' then - return OsTypes.OtclientMac - else - return OsTypes.OtclientLinux - end - end -end - function g_game.getSupportedProtocols() return { 810, 853, 854, 860, 861, 862, 870, diff --git a/modules/gamelib/protocol.lua b/modules/gamelib/protocol.lua index 17cca0f3..05a769f3 100644 --- a/modules/gamelib/protocol.lua +++ b/modules/gamelib/protocol.lua @@ -8,7 +8,7 @@ GameServerOpcodes = { GameServerAddCreature = 23, GameServerPingBack = 29, GameServerPing = 30, - GameServerChallange = 31, + GameServerChallenge = 31, GameServerDeath = 40, -- all in game opcodes must be greater than 50 diff --git a/modules/gamelib/protocollogin.lua b/modules/gamelib/protocollogin.lua index 416dfa84..177e98c0 100644 --- a/modules/gamelib/protocollogin.lua +++ b/modules/gamelib/protocollogin.lua @@ -27,7 +27,7 @@ end function ProtocolLogin:sendLoginPacket() local msg = OutputMessage.create() msg:addU8(ClientOpcodes.ClientEnterAccount) - msg:addU16(g_game.getOsType()) + msg:addU16(g_game.getOs()) msg:addU16(g_game.getProtocolVersion()) if g_game.getProtocolVersion() >= 971 then diff --git a/src/client/const.h b/src/client/const.h index c9bfc7a0..d1413944 100644 --- a/src/client/const.h +++ b/src/client/const.h @@ -313,7 +313,7 @@ namespace Otc // 1-50 defined in c++ GameProtocolChecksum = 1, GameAccountNames = 2, - GameChallangeOnLogin = 3, + GameChallengeOnLogin = 3, GamePenalityOnDeath = 4, GameNameOnNpcTrade = 5, GameDoubleFreeCapacity = 6, diff --git a/src/client/game.cpp b/src/client/game.cpp index 6b7f2d6c..fdcf4276 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -145,17 +145,21 @@ void Game::processLoginWait(const std::string& message, int time) g_lua.callGlobalField("g_game", "onLoginWait", message, time); } +void Game::processLogin() +{ + g_lua.callGlobalField("g_game", "onLogin"); +} + void Game::processPendingGame() { m_localPlayer->setPendingGame(true); g_lua.callGlobalField("g_game", "onPendingGame"); + m_protocolGame->sendEnterGame(); } void Game::processEnterGame() { m_localPlayer->setPendingGame(false); - m_protocolGame->sendEnterGame(); - g_lua.callGlobalField("g_game", "onEnterGame"); } @@ -1277,7 +1281,7 @@ void Game::setProtocolVersion(int version) if(version >= 854) { enableFeature(Otc::GameProtocolChecksum); enableFeature(Otc::GameAccountNames); - enableFeature(Otc::GameChallangeOnLogin); + enableFeature(Otc::GameChallengeOnLogin); enableFeature(Otc::GameDoubleFreeCapacity); enableFeature(Otc::GameCreatureEmblems); } @@ -1399,6 +1403,6 @@ int Game::getOs() return 10; else if(g_app.getOs() == "mac") return 12; - else - return 10; + else // linux + return 11; } diff --git a/src/client/game.h b/src/client/game.h index 68d95e76..a697a7fa 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -60,7 +60,7 @@ protected: void processLoginError(const std::string& error); void processLoginAdvice(const std::string& message); void processLoginWait(const std::string& message, int time); - + void processLogin(); void processPendingGame(); void processEnterGame(); diff --git a/src/client/protocolcodes.h b/src/client/protocolcodes.h index 0623b344..80df5c96 100644 --- a/src/client/protocolcodes.h +++ b/src/client/protocolcodes.h @@ -42,17 +42,17 @@ namespace Proto { enum GameServerOpcodes : uint8 { - GameServerInitGame = 10, + GameServerLoginOrPendingState = 10, GameServerGMActions = 11, - GameServerEnterGame = 15, + GameServerEnterGame = 15, GameServerUpdateNeeded = 17, GameServerLoginError = 20, GameServerLoginAdvice = 21, GameServerLoginWait = 22, - GameServerAddCreature = 23, + GameServerLoginSuccess = 23, GameServerPingBack = 29, GameServerPing = 30, - GameServerChallange = 31, + GameServerChallenge = 31, GameServerDeath = 40, // all in game opcodes must be greater than 50 diff --git a/src/client/protocolgame.cpp b/src/client/protocolgame.cpp index 34b6bd26..5e0135d2 100644 --- a/src/client/protocolgame.cpp +++ b/src/client/protocolgame.cpp @@ -46,7 +46,7 @@ void ProtocolGame::onConnect() if(g_game.getFeature(Otc::GameProtocolChecksum)) enableChecksum(); - if(!g_game.getFeature(Otc::GameChallangeOnLogin)) + if(!g_game.getFeature(Otc::GameChallengeOnLogin)) sendLoginPacket(0, 0); recv(); diff --git a/src/client/protocolgame.h b/src/client/protocolgame.h index d27c5abe..2fa81bd1 100644 --- a/src/client/protocolgame.h +++ b/src/client/protocolgame.h @@ -35,7 +35,7 @@ public: void send(const OutputMessagePtr& outputMessage); void sendExtendedOpcode(uint8 opcode, const std::string& buffer); - void sendLoginPacket(uint challangeTimestamp, uint8 challangeRandom); + void sendLoginPacket(uint challengeTimestamp, uint8 challengeRandom); void sendEnterGame(); void sendLogout(); void sendPing(); @@ -123,7 +123,7 @@ private: void parseMessage(const InputMessagePtr& msg); void parsePendingGame(const InputMessagePtr& msg); void parseEnterGame(const InputMessagePtr& msg); - void parseInitGame(const InputMessagePtr& msg); + void parseLogin(const InputMessagePtr& msg); void parseGMActions(const InputMessagePtr& msg); void parseUpdateNeeded(const InputMessagePtr& msg); void parseLoginError(const InputMessagePtr& msg); @@ -131,7 +131,7 @@ private: void parseLoginWait(const InputMessagePtr& msg); void parsePing(const InputMessagePtr& msg); void parsePingBack(const InputMessagePtr& msg); - void parseChallange(const InputMessagePtr& msg); + void parseChallenge(const InputMessagePtr& msg); void parseDeath(const InputMessagePtr& msg); void parseMapDescription(const InputMessagePtr& msg); void parseMapMoveNorth(const InputMessagePtr& msg); diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index 30aa7689..c6564558 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -58,16 +58,11 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg) msg->setReadPos(readPos); // restore read pos switch(opcode) { - case Proto::GameServerInitGame: - case Proto::GameServerAddCreature: - if(opcode == Proto::GameServerInitGame && g_game.getFeature(Otc::GameLoginPending)) + case Proto::GameServerLoginOrPendingState: + if(g_game.getFeature(Otc::GameLoginPending)) parsePendingGame(msg); else - parseInitGame(msg); - break; - case Proto::GameServerEnterGame: - if(g_game.getFeature(Otc::GameLoginPending)) - parseEnterGame(msg); + parseLogin(msg); break; case Proto::GameServerGMActions: parseGMActions(msg); @@ -92,8 +87,8 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg) else parsePing(msg); break; - case Proto::GameServerChallange: - parseChallange(msg); + case Proto::GameServerChallenge: + parseChallenge(msg); break; case Proto::GameServerDeath: parseDeath(msg); @@ -321,6 +316,13 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg) case Proto::GameServerShowModalDialog: parseShowModalDialog(msg); break; + // PROTOCOL>=980 + case Proto::GameServerLoginSuccess: + parseLogin(msg); + break; + case Proto::GameServerEnterGame: + parseEnterGame(msg); + break; // otclient ONLY case Proto::GameServerExtendedOpcode: parseExtendedOpcode(msg); @@ -340,13 +342,12 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg) } } -void ProtocolGame::parseInitGame(const InputMessagePtr& msg) +void ProtocolGame::parseLogin(const InputMessagePtr& msg) { uint playerId = msg->getU32(); int serverBeat = msg->getU16(); - if(g_game.getFeature(Otc::GameNewSpeedLaw)) - { + if(g_game.getFeature(Otc::GameNewSpeedLaw)) { double speedA = msg->getDouble(); double speedB = msg->getDouble(); double speedC = msg->getDouble(); @@ -357,6 +358,8 @@ void ProtocolGame::parseInitGame(const InputMessagePtr& msg) m_localPlayer->setId(playerId); g_game.setServerBeat(serverBeat); g_game.setCanReportBugs(canReportBugs); + + g_game.processLogin(); } void ProtocolGame::parsePendingGame(const InputMessagePtr& msg) @@ -430,7 +433,7 @@ void ProtocolGame::parsePingBack(const InputMessagePtr& msg) g_game.processPingBack(m_pingTimer.elapsed_millis()); } -void ProtocolGame::parseChallange(const InputMessagePtr& msg) +void ProtocolGame::parseChallenge(const InputMessagePtr& msg) { uint timestamp = msg->getU32(); uint8 random = msg->getU8(); diff --git a/src/client/protocolgamesend.cpp b/src/client/protocolgamesend.cpp index ff04e3aa..c93c864e 100644 --- a/src/client/protocolgamesend.cpp +++ b/src/client/protocolgamesend.cpp @@ -46,7 +46,7 @@ void ProtocolGame::sendExtendedOpcode(uint8 opcode, const std::string& buffer) } } -void ProtocolGame::sendLoginPacket(uint challangeTimestamp, uint8 challangeRandom) +void ProtocolGame::sendLoginPacket(uint challengeTimestamp, uint8 challengeRandom) { OutputMessagePtr msg(new OutputMessage); @@ -64,7 +64,7 @@ void ProtocolGame::sendLoginPacket(uint challangeTimestamp, uint8 challangeRando msg->addU16(g_game.getProtocolVersion()); - if(g_game.getProtocolVersion() >= 971) { + if(g_game.getProtocolVersion() >= 970) { msg->addU32(g_game.getClientVersion()); msg->addU8(0); // clientType } @@ -97,9 +97,9 @@ void ProtocolGame::sendLoginPacket(uint challangeTimestamp, uint8 challangeRando paddingBytes -= 8 + m_characterName.length() + m_accountPassword.length(); } - if(g_game.getFeature(Otc::GameChallangeOnLogin)) { - msg->addU32(challangeTimestamp); - msg->addU8(challangeRandom); + if(g_game.getFeature(Otc::GameChallengeOnLogin)) { + msg->addU32(challengeTimestamp); + msg->addU8(challengeRandom); paddingBytes -= 5; }