add onGameStart/onGameEnd/onLogin/onLogout events
This commit is contained in:
parent
ee1357a848
commit
09b3aa82df
|
@ -25,8 +25,8 @@ function TopMenu.init()
|
||||||
TopMenu.addRightButton('logoutButton', 'Logout (Ctrl+Q)', '/core_styles/icons/logout.png', onLogout)
|
TopMenu.addRightButton('logoutButton', 'Logout (Ctrl+Q)', '/core_styles/icons/logout.png', onLogout)
|
||||||
Keyboard.bindKeyDown('Ctrl+Q', onLogout)
|
Keyboard.bindKeyDown('Ctrl+Q', onLogout)
|
||||||
|
|
||||||
connect(Game, { onLogin = TopMenu.showGameButtons,
|
connect(Game, { onGameStart = TopMenu.showGameButtons,
|
||||||
onLogout = TopMenu.hideGameButtons })
|
onGameEnd = TopMenu.hideGameButtons })
|
||||||
end
|
end
|
||||||
|
|
||||||
function TopMenu.terminate()
|
function TopMenu.terminate()
|
||||||
|
@ -37,8 +37,8 @@ function TopMenu.terminate()
|
||||||
topMenu:destroy()
|
topMenu:destroy()
|
||||||
topMenu = nil
|
topMenu = nil
|
||||||
|
|
||||||
disconnect(Game, { onLogin = TopMenu.showGameButtons,
|
disconnect(Game, { onGameStart = TopMenu.showGameButtons,
|
||||||
onLogout = TopMenu.hideGameButtons })
|
onGameEnd = TopMenu.hideGameButtons })
|
||||||
|
|
||||||
TopMenu = nil
|
TopMenu = nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -108,5 +108,5 @@ local function onApplicationClose()
|
||||||
end
|
end
|
||||||
|
|
||||||
setonclose(onApplicationClose)
|
setonclose(onApplicationClose)
|
||||||
connect(Game, { onLogin = Game.createInterface }, true)
|
connect(Game, { onGameStart = Game.createInterface }, true)
|
||||||
connect(Game, { onLogout = Game.destroyInterface })
|
connect(Game, { onGameEnd = Game.destroyInterface })
|
||||||
|
|
|
@ -66,8 +66,8 @@ function CombatControls.init()
|
||||||
connect(fightModeRadioGroup, { onSelectionChange = onFightModeChange })
|
connect(fightModeRadioGroup, { onSelectionChange = onFightModeChange })
|
||||||
connect(chaseModeButton, { onCheckChange = onChaseModeChange })
|
connect(chaseModeButton, { onCheckChange = onChaseModeChange })
|
||||||
connect(safeFightButton, { onCheckChange = onSafeFightChange })
|
connect(safeFightButton, { onCheckChange = onSafeFightChange })
|
||||||
connect(Game, { onLogin = CombatControls.online })
|
connect(Game, { onGameStart = CombatControls.online })
|
||||||
connect(Game, { onLogout = CombatControls.offline })
|
connect(Game, { onGameEnd = CombatControls.offline })
|
||||||
|
|
||||||
if Game.isOnline() then
|
if Game.isOnline() then
|
||||||
CombatControls.online()
|
CombatControls.online()
|
||||||
|
@ -94,8 +94,8 @@ function CombatControls.terminate()
|
||||||
combatControlsWindow:destroy()
|
combatControlsWindow:destroy()
|
||||||
combatControlsWindow = nil
|
combatControlsWindow = nil
|
||||||
|
|
||||||
disconnect(Game, { onLogin = CombatControls.online })
|
disconnect(Game, { onGameStart = CombatControls.online })
|
||||||
disconnect(Game, { onLogout = CombatControls.offline })
|
disconnect(Game, { onGameEnd = CombatControls.offline })
|
||||||
|
|
||||||
CombatControls = nil
|
CombatControls = nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -365,8 +365,8 @@ local function onChannelList(channelList)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = Console.create,
|
connect(Game, { onGameStart = Console.create,
|
||||||
onLogout = Console.destroy,
|
onGameEnd = Console.destroy,
|
||||||
onCreatureSpeak = onCreatureSpeak,
|
onCreatureSpeak = onCreatureSpeak,
|
||||||
onChannelList = onChannelList,
|
onChannelList = onChannelList,
|
||||||
onOpenChannel = onOpenChannel,
|
onOpenChannel = onOpenChannel,
|
||||||
|
|
|
@ -43,7 +43,7 @@ function Containers.onContainerOpen(containerId, itemId, name, capacity, hasPare
|
||||||
itemWidget:setStyle('Item')
|
itemWidget:setStyle('Item')
|
||||||
container:addChild(itemWidget)
|
container:addChild(itemWidget)
|
||||||
itemWidget.position = {x=65535, y=containerId+64, z=i-1}
|
itemWidget.position = {x=65535, y=containerId+64, z=i-1}
|
||||||
|
|
||||||
if i <= #items then
|
if i <= #items then
|
||||||
local item = items[i]
|
local item = items[i]
|
||||||
item:setPosition(itemWidget.position)
|
item:setPosition(itemWidget.position)
|
||||||
|
@ -70,7 +70,7 @@ function Containers.onContainerAddItem(containerId, item)
|
||||||
while i >= 1 do
|
while i >= 1 do
|
||||||
local itemWidget = container:getChildByIndex(i)
|
local itemWidget = container:getChildByIndex(i)
|
||||||
if not itemWidget then return end
|
if not itemWidget then return end
|
||||||
|
|
||||||
local nextItemWidget = container:getChildByIndex(i+1)
|
local nextItemWidget = container:getChildByIndex(i+1)
|
||||||
if not nextItemWidget then return end
|
if not nextItemWidget then return end
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ function Containers.onContainerAddItem(containerId, item)
|
||||||
swapItem:setPosition(nextItemWidget.position)
|
swapItem:setPosition(nextItemWidget.position)
|
||||||
nextItemWidget:setItem(swapItem)
|
nextItemWidget:setItem(swapItem)
|
||||||
end
|
end
|
||||||
|
|
||||||
i = i - 1
|
i = i - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ end
|
||||||
function Containers.onContainerUpdateItem(containerId, slot, item)
|
function Containers.onContainerUpdateItem(containerId, slot, item)
|
||||||
local container = m_containers[containerId]
|
local container = m_containers[containerId]
|
||||||
if not container then return end
|
if not container then return end
|
||||||
|
|
||||||
local itemWidget = container:getChildByIndex(slot + 1)
|
local itemWidget = container:getChildByIndex(slot + 1)
|
||||||
if not itemWidget then return end
|
if not itemWidget then return end
|
||||||
itemWidget:setItem(item)
|
itemWidget:setItem(item)
|
||||||
|
@ -104,35 +104,35 @@ end
|
||||||
function Containers.onContainerRemoveItem(containerId, slot)
|
function Containers.onContainerRemoveItem(containerId, slot)
|
||||||
local container = m_containers[containerId]
|
local container = m_containers[containerId]
|
||||||
if not container then return end
|
if not container then return end
|
||||||
|
|
||||||
local itemWidget = container:getChildByIndex(slot+1)
|
local itemWidget = container:getChildByIndex(slot+1)
|
||||||
if not itemWidget then return end
|
if not itemWidget then return end
|
||||||
itemWidget:setItem(nil)
|
itemWidget:setItem(nil)
|
||||||
|
|
||||||
for i=slot,container.itemCount-2 do
|
for i=slot,container.itemCount-2 do
|
||||||
local itemWidget = container:getChildByIndex(i+1)
|
local itemWidget = container:getChildByIndex(i+1)
|
||||||
if not itemWidget then return end
|
if not itemWidget then return end
|
||||||
|
|
||||||
local nextItemWidget = container:getChildByIndex(i+2)
|
local nextItemWidget = container:getChildByIndex(i+2)
|
||||||
if not nextItemWidget then return end
|
if not nextItemWidget then return end
|
||||||
|
|
||||||
local item = nextItemWidget:getItem()
|
local item = nextItemWidget:getItem()
|
||||||
local pos = item:getPosition()
|
local pos = item:getPosition()
|
||||||
pos.z = pos.z - 1
|
pos.z = pos.z - 1
|
||||||
item:setPosition(pos)
|
item:setPosition(pos)
|
||||||
|
|
||||||
itemWidget:setItem(item)
|
itemWidget:setItem(item)
|
||||||
nextItemWidget:setItem(nil)
|
nextItemWidget:setItem(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
container.itemCount = container.itemCount - 1
|
container.itemCount = container.itemCount - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = Containers.clean,
|
connect(Game, { onGameStart = Containers.clean,
|
||||||
onLogout = Containers.clean,
|
onGameEnd = Containers.clean,
|
||||||
onContainerOpen = Containers.onContainerOpen,
|
onContainerOpen = Containers.onContainerOpen,
|
||||||
onContainerClose = Containers.onContainerClose,
|
onContainerClose = Containers.onContainerClose,
|
||||||
onContainerAddItem = Containers.onContainerAddItem,
|
onContainerAddItem = Containers.onContainerAddItem,
|
||||||
onContainerUpdateItem = Containers.onContainerUpdateItem,
|
onContainerUpdateItem = Containers.onContainerUpdateItem,
|
||||||
onContainerRemoveItem = Containers.onContainerRemoveItem })
|
onContainerRemoveItem = Containers.onContainerRemoveItem })
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ function HealthBar.onManaChange(mana, maxMana)
|
||||||
manaBar:setPercent(percent)
|
manaBar:setPercent(percent)
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = HealthBar.create,
|
connect(Game, { onGameStart = HealthBar.create,
|
||||||
onLogout = HealthBar.destroy,
|
onGameEnd = HealthBar.destroy,
|
||||||
onHealthChange = HealthBar.onHealthChange,
|
onHealthChange = HealthBar.onHealthChange,
|
||||||
onManaChange = HealthBar.onManaChange })
|
onManaChange = HealthBar.onManaChange })
|
||||||
|
|
|
@ -42,8 +42,8 @@ function Inventory.onSoulChange(soul)
|
||||||
widget:setText("Soul:\n" .. soul)
|
widget:setText("Soul:\n" .. soul)
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = Inventory.create,
|
connect(Game, { onGameStart = Inventory.create,
|
||||||
onLogout = Inventory.destroy,
|
onGameEnd = Inventory.destroy,
|
||||||
onInventoryChange = Inventory.onInventoryChange,
|
onInventoryChange = Inventory.onInventoryChange,
|
||||||
onFreeCapacityChange = Inventory.onFreeCapacityChange,
|
onFreeCapacityChange = Inventory.onFreeCapacityChange,
|
||||||
onSoulChange = Inventory.onSoulChange })
|
onSoulChange = Inventory.onSoulChange })
|
||||||
|
|
|
@ -199,4 +199,4 @@ end
|
||||||
|
|
||||||
-- hooked events
|
-- hooked events
|
||||||
connect(Game, { onOpenOutfitWindow = Outfit.create,
|
connect(Game, { onOpenOutfitWindow = Outfit.create,
|
||||||
onLogout = Outfit.destroy })
|
onGameEnd = Outfit.destroy })
|
||||||
|
|
|
@ -122,8 +122,8 @@ function Skills.onSkillChange(id, level, percent)
|
||||||
setSkillPercent('skillId' .. id, percent, 'You have ' .. (100 - percent) .. ' percent to go')
|
setSkillPercent('skillId' .. id, percent, 'You have ' .. (100 - percent) .. ' percent to go')
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = Skills.create,
|
connect(Game, { onGameStart = Skills.create,
|
||||||
onLogout = Skills.destroy,
|
onGameEnd = Skills.destroy,
|
||||||
onExperienceChange = Skills.onExperienceChange,
|
onExperienceChange = Skills.onExperienceChange,
|
||||||
onLevelChange = Skills.onLevelChange,
|
onLevelChange = Skills.onLevelChange,
|
||||||
onHealthChange = Skills.onHealthChange,
|
onHealthChange = Skills.onHealthChange,
|
||||||
|
|
|
@ -111,7 +111,7 @@ local function onGameTextMessage(msgtypedesc, msg)
|
||||||
TextMessage.display(msgtypedesc, msg)
|
TextMessage.display(msgtypedesc, msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
connect(Game, { onLogin = TextMessage.create,
|
connect(Game, { onGameStart = TextMessage.create,
|
||||||
onLogout = TextMessage.destroy,
|
onGameEnd = TextMessage.destroy,
|
||||||
onDeath = onGameDeath,
|
onDeath = onGameDeath,
|
||||||
onTextMessage = onGameTextMessage })
|
onTextMessage = onGameTextMessage })
|
||||||
|
|
|
@ -57,7 +57,7 @@ function VipList.onAddVip(id, name, online)
|
||||||
|
|
||||||
label:setPhantom(false)
|
label:setPhantom(false)
|
||||||
connect(label, { onDoubleClick = function () Game.openPrivateChannel(label:getText()) return true end } )
|
connect(label, { onDoubleClick = function () Game.openPrivateChannel(label:getText()) return true end } )
|
||||||
|
|
||||||
local nameLower = name:lower()
|
local nameLower = name:lower()
|
||||||
local childrenCount = vipList:getChildCount()
|
local childrenCount = vipList:getChildCount()
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ function VipList.onVipListLabelMousePress(widget, mousePos, mouseButton)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
connect(Game, { onLogin = VipList.create,
|
connect(Game, { onGameStart = VipList.create,
|
||||||
onLogout = VipList.destroy,
|
onGameEnd = VipList.destroy,
|
||||||
onAddVip = VipList.onAddVip,
|
onAddVip = VipList.onAddVip,
|
||||||
onVipStateChange = VipList.onVipStateChange })
|
onVipStateChange = VipList.onVipStateChange })
|
||||||
|
|
|
@ -72,7 +72,7 @@ void Game::processConnectionError(const boost::system::error_code& error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::processLogin(const LocalPlayerPtr& localPlayer, int serverBeat)
|
void Game::processGameStart(const LocalPlayerPtr& localPlayer, int serverBeat)
|
||||||
{
|
{
|
||||||
m_localPlayer = localPlayer;
|
m_localPlayer = localPlayer;
|
||||||
m_serverBeat = serverBeat;
|
m_serverBeat = serverBeat;
|
||||||
|
@ -83,8 +83,16 @@ void Game::processLogin(const LocalPlayerPtr& localPlayer, int serverBeat)
|
||||||
m_safeFight = true;
|
m_safeFight = true;
|
||||||
m_protocolGame->sendFightTatics(m_fightMode, m_chaseMode, m_safeFight);
|
m_protocolGame->sendFightTatics(m_fightMode, m_chaseMode, m_safeFight);
|
||||||
|
|
||||||
// NOTE: the entire map description is not known yet
|
// NOTE: the entire map description and local player informations is not known yet
|
||||||
g_lua.callGlobalField("Game", "onLogin", localPlayer);
|
g_lua.callGlobalField("Game", "onGameStart");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Game::processLogin()
|
||||||
|
{
|
||||||
|
if(!isOnline())
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_lua.callGlobalField("Game", "onLogin", m_localPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::processLogout()
|
void Game::processLogout()
|
||||||
|
@ -93,6 +101,8 @@ void Game::processLogout()
|
||||||
g_lua.callGlobalField("Game", "onLogout", m_localPlayer);
|
g_lua.callGlobalField("Game", "onLogout", m_localPlayer);
|
||||||
|
|
||||||
m_localPlayer = nullptr;
|
m_localPlayer = nullptr;
|
||||||
|
|
||||||
|
g_lua.callGlobalField("Game", "onGameEnd");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_protocolGame) {
|
if(m_protocolGame) {
|
||||||
|
|
|
@ -42,7 +42,8 @@ public:
|
||||||
void cleanLogout() { logout(false); }
|
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, int serverBeat);
|
void processGameStart(const LocalPlayerPtr& localPlayer, int serverBeat);
|
||||||
|
void processLogin();
|
||||||
void processLogout();
|
void processLogout();
|
||||||
void processDeath();
|
void processDeath();
|
||||||
void processPlayerStats(double health, double maxHealth,
|
void processPlayerStats(double health, double maxHealth,
|
||||||
|
|
|
@ -38,11 +38,11 @@ Tile::Tile(const Position& position)
|
||||||
|
|
||||||
void Tile::draw(const Point& dest, float scaleFactor, int drawFlags)
|
void Tile::draw(const Point& dest, float scaleFactor, int drawFlags)
|
||||||
{
|
{
|
||||||
m_drawElevation = 0;
|
|
||||||
bool animate = drawFlags & Otc::DrawAnimations;
|
bool animate = drawFlags & Otc::DrawAnimations;
|
||||||
|
|
||||||
// first bottom items
|
// first bottom items
|
||||||
if(drawFlags & (Otc::DrawGround | Otc::DrawGroundBorders | Otc::DrawOnBottom)) {
|
if(drawFlags & (Otc::DrawGround | Otc::DrawGroundBorders | Otc::DrawOnBottom)) {
|
||||||
|
m_drawElevation = 0;
|
||||||
for(const ThingPtr& thing : m_things) {
|
for(const ThingPtr& thing : m_things) {
|
||||||
if(!thing->isGround() && !thing->isGroundBorder() && !thing->isOnBottom())
|
if(!thing->isGround() && !thing->isGroundBorder() && !thing->isOnBottom())
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -106,7 +106,7 @@ private:
|
||||||
// Parse Messages
|
// Parse Messages
|
||||||
void parseMessage(InputMessage& msg);
|
void parseMessage(InputMessage& msg);
|
||||||
|
|
||||||
void parsePlayerLogin(InputMessage& msg);
|
void parseInitGame(InputMessage& msg);
|
||||||
void parseGMActions(InputMessage& msg);
|
void parseGMActions(InputMessage& msg);
|
||||||
void parseLoginError(InputMessage& msg);
|
void parseLoginError(InputMessage& msg);
|
||||||
void parseFYIMessage(InputMessage& msg);
|
void parseFYIMessage(InputMessage& msg);
|
||||||
|
|
|
@ -41,7 +41,7 @@ void ProtocolGame::parseMessage(InputMessage& msg)
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case Proto::GameServerInitGame:
|
case Proto::GameServerInitGame:
|
||||||
parsePlayerLogin(msg);
|
parseInitGame(msg);
|
||||||
break;
|
break;
|
||||||
case Proto::GameServerGMActions:
|
case Proto::GameServerGMActions:
|
||||||
parseGMActions(msg);
|
parseGMActions(msg);
|
||||||
|
@ -265,7 +265,7 @@ void ProtocolGame::parseMessage(InputMessage& msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parsePlayerLogin(InputMessage& msg)
|
void ProtocolGame::parseInitGame(InputMessage& msg)
|
||||||
{
|
{
|
||||||
uint playerId = msg.getU32();
|
uint playerId = msg.getU32();
|
||||||
int serverBeat = msg.getU16();
|
int serverBeat = msg.getU16();
|
||||||
|
@ -274,7 +274,7 @@ void ProtocolGame::parsePlayerLogin(InputMessage& msg)
|
||||||
m_localPlayer = LocalPlayerPtr(new LocalPlayer);
|
m_localPlayer = LocalPlayerPtr(new LocalPlayer);
|
||||||
m_localPlayer->setId(playerId);
|
m_localPlayer->setId(playerId);
|
||||||
m_localPlayer->setCanReportBugs(playerCanReportBugs);
|
m_localPlayer->setCanReportBugs(playerCanReportBugs);
|
||||||
g_game.processLogin(m_localPlayer, serverBeat);
|
g_game.processGameStart(m_localPlayer, serverBeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolGame::parseGMActions(InputMessage& msg)
|
void ProtocolGame::parseGMActions(InputMessage& msg)
|
||||||
|
@ -1110,8 +1110,10 @@ ThingPtr ProtocolGame::internalGetThing(InputMessage& msg)
|
||||||
creature->setPassable(passable);
|
creature->setPassable(passable);
|
||||||
creature->setDirection(direction);
|
creature->setDirection(direction);
|
||||||
|
|
||||||
|
// now that the local player is known, we can schedule login event
|
||||||
if(creature == m_localPlayer) {
|
if(creature == m_localPlayer) {
|
||||||
m_localPlayer->setKnown(true);
|
m_localPlayer->setKnown(true);
|
||||||
|
g_dispatcher.addEvent([] { g_game.processLogin(); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue