Add missing changes for protocol > 1000
This commit is contained in:
parent
2b34c0ea0a
commit
9d689f0c43
|
@ -363,6 +363,7 @@ namespace Otc
|
||||||
GameNewFluids = 47,
|
GameNewFluids = 47,
|
||||||
GamePlayerStateU16 = 48,
|
GamePlayerStateU16 = 48,
|
||||||
GameNewOutfitProtocol = 49,
|
GameNewOutfitProtocol = 49,
|
||||||
|
GamePVPMode = 50,
|
||||||
|
|
||||||
// 51-100 reserved to be defined in lua
|
// 51-100 reserved to be defined in lua
|
||||||
LastGameFeature = 101
|
LastGameFeature = 101
|
||||||
|
|
|
@ -239,6 +239,17 @@ void Game::processPlayerHelpers(int helpers)
|
||||||
g_lua.callGlobalField("g_game", "onPlayerHelpersUpdate", helpers);
|
g_lua.callGlobalField("g_game", "onPlayerHelpersUpdate", helpers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::processPlayerModes(Otc::FightModes fightMode, Otc::ChaseModes chaseMode, bool safeMode)
|
||||||
|
{
|
||||||
|
m_fightMode = fightMode;
|
||||||
|
m_chaseMode = chaseMode;
|
||||||
|
m_safeFight = safeMode;
|
||||||
|
|
||||||
|
g_lua.callGlobalField("g_game", "onFightModeChange", fightMode);
|
||||||
|
g_lua.callGlobalField("g_game", "onChaseModeChange", chaseMode);
|
||||||
|
g_lua.callGlobalField("g_game", "onSafeFightChange", safeMode);
|
||||||
|
}
|
||||||
|
|
||||||
void Game::processPing()
|
void Game::processPing()
|
||||||
{
|
{
|
||||||
g_lua.callGlobalField("g_game", "onPing");
|
g_lua.callGlobalField("g_game", "onPing");
|
||||||
|
@ -1507,6 +1518,10 @@ void Game::setProtocolVersion(int version)
|
||||||
enableFeature(Otc::GameThingMarks);
|
enableFeature(Otc::GameThingMarks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(version >= 1000) {
|
||||||
|
enableFeature(Otc::GamePVPMode);
|
||||||
|
}
|
||||||
|
|
||||||
m_protocolVersion = version;
|
m_protocolVersion = version;
|
||||||
|
|
||||||
Proto::buildMessageModesMap(version);
|
Proto::buildMessageModesMap(version);
|
||||||
|
|
|
@ -74,6 +74,7 @@ protected:
|
||||||
void processWalkCancel(Otc::Direction direction);
|
void processWalkCancel(Otc::Direction direction);
|
||||||
|
|
||||||
void processPlayerHelpers(int helpers);
|
void processPlayerHelpers(int helpers);
|
||||||
|
void processPlayerModes(Otc::FightModes fightMode, Otc::ChaseModes chaseMode, bool safeMode);
|
||||||
|
|
||||||
// message related
|
// message related
|
||||||
void processTextMessage(Otc::MessageMode mode, const std::string& text);
|
void processTextMessage(Otc::MessageMode mode, const std::string& text);
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace Proto {
|
||||||
GameServerPlayerSkills = 161,
|
GameServerPlayerSkills = 161,
|
||||||
GameServerPlayerState = 162,
|
GameServerPlayerState = 162,
|
||||||
GameServerClearTarget = 163,
|
GameServerClearTarget = 163,
|
||||||
|
GameServerPlayerModes = 167,
|
||||||
GameServerSpellDelay = 164, // 870
|
GameServerSpellDelay = 164, // 870
|
||||||
GameServerSpellGroupDelay = 165, // 870
|
GameServerSpellGroupDelay = 165, // 870
|
||||||
GameServerMultiUseDelay = 166, // 870
|
GameServerMultiUseDelay = 166, // 870
|
||||||
|
|
|
@ -179,6 +179,7 @@ private:
|
||||||
void parsePlayerSkills(const InputMessagePtr& msg);
|
void parsePlayerSkills(const InputMessagePtr& msg);
|
||||||
void parsePlayerState(const InputMessagePtr& msg);
|
void parsePlayerState(const InputMessagePtr& msg);
|
||||||
void parsePlayerCancelAttack(const InputMessagePtr& msg);
|
void parsePlayerCancelAttack(const InputMessagePtr& msg);
|
||||||
|
void parsePlayerModes(const InputMessagePtr& msg);
|
||||||
void parseSpellCooldown(const InputMessagePtr& msg);
|
void parseSpellCooldown(const InputMessagePtr& msg);
|
||||||
void parseSpellGroupCooldown(const InputMessagePtr& msg);
|
void parseSpellGroupCooldown(const InputMessagePtr& msg);
|
||||||
void parseMultiUseCooldown(const InputMessagePtr& msg);
|
void parseMultiUseCooldown(const InputMessagePtr& msg);
|
||||||
|
|
|
@ -219,6 +219,9 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg)
|
||||||
case Proto::GameServerClearTarget:
|
case Proto::GameServerClearTarget:
|
||||||
parsePlayerCancelAttack(msg);
|
parsePlayerCancelAttack(msg);
|
||||||
break;
|
break;
|
||||||
|
case Proto::GameServerPlayerModes:
|
||||||
|
parsePlayerModes(msg);
|
||||||
|
break;
|
||||||
case Proto::GameServerTalk:
|
case Proto::GameServerTalk:
|
||||||
parseTalk(msg);
|
parseTalk(msg);
|
||||||
break;
|
break;
|
||||||
|
@ -326,6 +329,7 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg)
|
||||||
case Proto::GameServerPlayerHelpers:
|
case Proto::GameServerPlayerHelpers:
|
||||||
parsePlayerHelpers(msg);
|
parsePlayerHelpers(msg);
|
||||||
break;
|
break;
|
||||||
|
break;
|
||||||
// otclient ONLY
|
// otclient ONLY
|
||||||
case Proto::GameServerExtendedOpcode:
|
case Proto::GameServerExtendedOpcode:
|
||||||
parseExtendedOpcode(msg);
|
parseExtendedOpcode(msg);
|
||||||
|
@ -333,6 +337,10 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg)
|
||||||
case Proto::GameServerChangeMapAwareRange:
|
case Proto::GameServerChangeMapAwareRange:
|
||||||
parseChangeMapAwareRange(msg);
|
parseChangeMapAwareRange(msg);
|
||||||
break;
|
break;
|
||||||
|
// unknown
|
||||||
|
case 147: // proto >= 1000 ?
|
||||||
|
for(int i=0;i<19;++i)
|
||||||
|
msg->getU8();
|
||||||
default:
|
default:
|
||||||
stdext::throw_exception(stdext::format("unhandled opcode %d", (int)opcode));
|
stdext::throw_exception(stdext::format("unhandled opcode %d", (int)opcode));
|
||||||
break;
|
break;
|
||||||
|
@ -1144,6 +1152,20 @@ void ProtocolGame::parsePlayerCancelAttack(const InputMessagePtr& msg)
|
||||||
g_game.processAttackCancel(seq);
|
g_game.processAttackCancel(seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ProtocolGame::parsePlayerModes(const InputMessagePtr& msg)
|
||||||
|
{
|
||||||
|
int fightMode = msg->getU8();
|
||||||
|
int chaseMode = msg->getU8();
|
||||||
|
bool safeMode = msg->getU8();
|
||||||
|
|
||||||
|
//TODO: implement pvp modes
|
||||||
|
if(g_game.getFeature(Otc::GamePVPMode))
|
||||||
|
msg->getU8(); // pvp mode
|
||||||
|
|
||||||
|
g_game.processPlayerModes((Otc::FightModes)fightMode, (Otc::ChaseModes)chaseMode, safeMode);
|
||||||
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseSpellCooldown(const InputMessagePtr& msg)
|
void ProtocolGame::parseSpellCooldown(const InputMessagePtr& msg)
|
||||||
{
|
{
|
||||||
int spellId = msg->getU8();
|
int spellId = msg->getU8();
|
||||||
|
|
|
@ -580,6 +580,11 @@ void ProtocolGame::sendChangeFightModes(Otc::FightModes fightMode, Otc::ChaseMod
|
||||||
msg->addU8(fightMode);
|
msg->addU8(fightMode);
|
||||||
msg->addU8(chaseMode);
|
msg->addU8(chaseMode);
|
||||||
msg->addU8(safeFight ? 0x01: 0x00);
|
msg->addU8(safeFight ? 0x01: 0x00);
|
||||||
|
|
||||||
|
//TODO: implement pvp modes
|
||||||
|
if(g_game.getFeature(Otc::GamePVPMode))
|
||||||
|
msg->addU8(0); // pvp mode
|
||||||
|
|
||||||
send(msg);
|
send(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue