disconnect on death
This commit is contained in:
parent
56aa416fee
commit
806fb5995f
1
TODO
1
TODO
|
@ -66,6 +66,7 @@
|
||||||
[bart] draw lights using shaders
|
[bart] draw lights using shaders
|
||||||
[bart] chat with tabs
|
[bart] chat with tabs
|
||||||
[bart] limit FPS in options
|
[bart] limit FPS in options
|
||||||
|
[baxnie] display 'You are dead.' message
|
||||||
[baxnie] do lua game event calls from Game instead from GameProtocol
|
[baxnie] do lua game event calls from Game instead from GameProtocol
|
||||||
[baxnie] classic control
|
[baxnie] classic control
|
||||||
[baxnie] trade window
|
[baxnie] trade window
|
||||||
|
|
|
@ -56,5 +56,9 @@ function Game.onConnectionError(message)
|
||||||
errorBox.onOk = CharacterList.show
|
errorBox.onOk = CharacterList.show
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Game.onDeath()
|
||||||
|
print('dead')
|
||||||
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = Game.createInterface }, true)
|
connect(Game, { onLogin = Game.createInterface }, true)
|
||||||
connect(Game, { onLogout = Game.destroyInterface })
|
connect(Game, { onLogout = Game.destroyInterface })
|
||||||
|
|
|
@ -32,6 +32,8 @@ Game g_game;
|
||||||
|
|
||||||
void Game::loginWorld(const std::string& account, const std::string& password, const std::string& worldHost, int worldPort, const std::string& characterName)
|
void Game::loginWorld(const std::string& account, const std::string& password, const std::string& worldHost, int worldPort, const std::string& characterName)
|
||||||
{
|
{
|
||||||
|
m_online = false;
|
||||||
|
m_dead = false;
|
||||||
m_protocolGame = ProtocolGamePtr(new ProtocolGame);
|
m_protocolGame = ProtocolGamePtr(new ProtocolGame);
|
||||||
m_protocolGame->login(account, password, worldHost, (uint16)worldPort, characterName);
|
m_protocolGame->login(account, password, worldHost, (uint16)worldPort, characterName);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +74,6 @@ void Game::processLogin(const LocalPlayerPtr& localPlayer)
|
||||||
{
|
{
|
||||||
m_localPlayer = localPlayer;
|
m_localPlayer = localPlayer;
|
||||||
m_online = true;
|
m_online = true;
|
||||||
|
|
||||||
g_lua.callGlobalField("Game", "onLogin", m_localPlayer);
|
g_lua.callGlobalField("Game", "onLogin", m_localPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +92,15 @@ void Game::processLogout()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::processDeath()
|
||||||
|
{
|
||||||
|
m_dead = true;
|
||||||
|
g_lua.callGlobalField("Game","onDeath");
|
||||||
|
|
||||||
|
// force logout in five seconds
|
||||||
|
g_dispatcher.scheduleEvent(std::bind(&Game::forceLogout, &g_game), 5 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
void Game::processTextMessage(int type, const std::string& message)
|
void Game::processTextMessage(int type, const std::string& message)
|
||||||
{
|
{
|
||||||
g_lua.callGlobalField("Game","onTextMessage", type, message);
|
g_lua.callGlobalField("Game","onTextMessage", type, message);
|
||||||
|
@ -104,9 +114,17 @@ void Game::processInventoryChange(int slot, const ItemPtr& item)
|
||||||
g_lua.callGlobalField("Game","onInventoryChange", slot, item);
|
g_lua.callGlobalField("Game","onInventoryChange", slot, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::processAttackCancel()
|
||||||
|
{
|
||||||
|
if(m_attackingCreature) {
|
||||||
|
m_attackingCreature->hideStaticSquare();
|
||||||
|
m_attackingCreature = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Game::walk(Otc::Direction direction)
|
void Game::walk(Otc::Direction direction)
|
||||||
{
|
{
|
||||||
if(!m_online || !m_localPlayer->canWalk(direction) || !checkBotProtection())
|
if(!isOnline() || isDead() || !checkBotProtection() || !m_localPlayer->canWalk(direction))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cancelFollow();
|
cancelFollow();
|
||||||
|
@ -205,14 +223,6 @@ void Game::cancelAttack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::onAttackCancelled()
|
|
||||||
{
|
|
||||||
if(m_attackingCreature) {
|
|
||||||
m_attackingCreature->hideStaticSquare();
|
|
||||||
m_attackingCreature = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Game::follow(const CreaturePtr& creature)
|
void Game::follow(const CreaturePtr& creature)
|
||||||
{
|
{
|
||||||
if(!m_online || !creature || !checkBotProtection())
|
if(!m_online || !creature || !checkBotProtection())
|
||||||
|
|
|
@ -31,20 +31,23 @@
|
||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// login/logout related
|
|
||||||
void loginWorld(const std::string& account,
|
void loginWorld(const std::string& account,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
const std::string& worldHost, int worldPort,
|
const std::string& worldHost, int worldPort,
|
||||||
const std::string& characterName);
|
const std::string& characterName);
|
||||||
void cancelLogin();
|
void cancelLogin();
|
||||||
void logout(bool force);
|
void logout(bool force);
|
||||||
|
void forceLogout() { logout(true); }
|
||||||
|
void cleanLogout() { logout(false); }
|
||||||
void processLoginError(const std::string& error);
|
void processLoginError(const std::string& error);
|
||||||
void processConnectionError(const boost::system::error_code& error);
|
void processConnectionError(const boost::system::error_code& error);
|
||||||
void processLogin(const LocalPlayerPtr& localPlayer);
|
void processLogin(const LocalPlayerPtr& localPlayer);
|
||||||
void processLogout();
|
void processLogout();
|
||||||
|
void processDeath();
|
||||||
|
|
||||||
void processTextMessage(int type, const std::string& message);
|
void processTextMessage(int type, const std::string& message);
|
||||||
void processInventoryChange(int slot, const ItemPtr& item);
|
void processInventoryChange(int slot, const ItemPtr& item);
|
||||||
|
void processAttackCancel();
|
||||||
|
|
||||||
void walk(Otc::Direction direction);
|
void walk(Otc::Direction direction);
|
||||||
void turn(Otc::Direction direction);
|
void turn(Otc::Direction direction);
|
||||||
|
@ -63,7 +66,6 @@ public:
|
||||||
void addVip(const std::string& name);
|
void addVip(const std::string& name);
|
||||||
void removeVip(int playerId);
|
void removeVip(int playerId);
|
||||||
int getThingStackpos(const ThingPtr& thing);
|
int getThingStackpos(const ThingPtr& thing);
|
||||||
void onAttackCancelled();
|
|
||||||
|
|
||||||
bool checkBotProtection();
|
bool checkBotProtection();
|
||||||
|
|
||||||
|
@ -71,6 +73,7 @@ public:
|
||||||
CreaturePtr getFollowingCreature() { return m_followingCreature; }
|
CreaturePtr getFollowingCreature() { return m_followingCreature; }
|
||||||
|
|
||||||
bool isOnline() { return m_online; }
|
bool isOnline() { return m_online; }
|
||||||
|
bool isDead() { return m_dead; }
|
||||||
|
|
||||||
void setServerBeat(int serverBeat) { m_serverBeat = serverBeat; }
|
void setServerBeat(int serverBeat) { m_serverBeat = serverBeat; }
|
||||||
int getServerBeat() { return m_serverBeat; }
|
int getServerBeat() { return m_serverBeat; }
|
||||||
|
@ -82,6 +85,7 @@ private:
|
||||||
LocalPlayerPtr m_localPlayer;
|
LocalPlayerPtr m_localPlayer;
|
||||||
ProtocolGamePtr m_protocolGame;
|
ProtocolGamePtr m_protocolGame;
|
||||||
bool m_online;
|
bool m_online;
|
||||||
|
bool m_dead;
|
||||||
int m_serverBeat;
|
int m_serverBeat;
|
||||||
|
|
||||||
CreaturePtr m_attackingCreature, m_followingCreature;
|
CreaturePtr m_attackingCreature, m_followingCreature;
|
||||||
|
|
|
@ -306,6 +306,7 @@ void ProtocolGame::parsePing(InputMessage&)
|
||||||
void ProtocolGame::parseDeath(InputMessage& msg)
|
void ProtocolGame::parseDeath(InputMessage& msg)
|
||||||
{
|
{
|
||||||
msg.getU8(); // 100 is a fair death. < 100 is a unfair death.
|
msg.getU8(); // 100 is a fair death. < 100 is a unfair death.
|
||||||
|
g_dispatcher.addEvent(std::bind(&Game::processDeath, &g_game));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseMapDescription(InputMessage& msg)
|
void ProtocolGame::parseMapDescription(InputMessage& msg)
|
||||||
|
@ -736,7 +737,7 @@ void ProtocolGame::parsePlayerIcons(InputMessage& msg)
|
||||||
void ProtocolGame::parsePlayerCancelAttack(InputMessage& msg)
|
void ProtocolGame::parsePlayerCancelAttack(InputMessage& msg)
|
||||||
{
|
{
|
||||||
msg.getU32(); // unknown
|
msg.getU32(); // unknown
|
||||||
g_game.onAttackCancelled();
|
g_dispatcher.addEvent(std::bind(&Game::processAttackCancel, &g_game));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
|
void ProtocolGame::parseCreatureSpeak(InputMessage& msg)
|
||||||
|
|
Loading…
Reference in New Issue