Protocol 10.76, fixed death window & death packet

This commit is contained in:
TheSumm 2015-03-07 06:09:00 +01:00
parent ca60efd786
commit 83dc129f03
8 changed files with 61 additions and 13 deletions

View File

@ -1,10 +1,11 @@
DeathWindow < MainWindow DeathWindow < MainWindow
id: deathWindow id: deathWindow
!text: tr('You are dead') !text: tr('You are dead')
size: 350 155 &baseWidth: 350
&baseHeight: 15
Label Label
!text: tr('Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!') id: labelText
width: 550 width: 550
height: 140 height: 140
anchors.left: parent.left anchors.left: parent.left

View File

@ -1,5 +1,11 @@
deathWindow = nil deathWindow = nil
local deathTexts = {
regular = {text = 'Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!', height = 140, width = 0},
unfair = {text = 'Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nThis death penalty has been reduced by %i%%\nbecause it was an unfair fight.\n\nSimply click on Ok to resume your journeys!', height = 185, width = 0},
blessed = {text = 'Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back into this world\n\nThis death penalty has been reduced by 100%\nbecause you are blessed with the Adventurer\'s Blessing\n\nSimply click on Ok to resume your journeys!', height = 170, width = 90}
}
function init() function init()
g_ui.importStyle('deathwindow') g_ui.importStyle('deathwindow')
@ -21,9 +27,9 @@ function reset()
end end
end end
function display() function display(deathType, penalty)
displayDeadMessage() displayDeadMessage()
openWindow() openWindow(deathType, penalty)
end end
function displayDeadMessage() function displayDeadMessage()
@ -33,12 +39,31 @@ function displayDeadMessage()
modules.game_textmessage.displayGameMessage(tr('You are dead.')) modules.game_textmessage.displayGameMessage(tr('You are dead.'))
end end
function openWindow() function openWindow(deathType, penalty)
if deathWindow then if deathWindow then
deathWindow:destroy() deathWindow:destroy()
return return
end end
deathWindow = g_ui.createWidget('DeathWindow', rootWidget) deathWindow = g_ui.createWidget('DeathWindow', rootWidget)
local textLabel = deathWindow:getChildById('labelText')
if deathType == DeathType.Regular then
if penalty == 100 then
textLabel:setText(deathTexts.regular.text)
deathWindow:setHeight(deathWindow.baseHeight + deathTexts.regular.height)
deathWindow:setWidth(deathWindow.baseWidth + deathTexts.regular.width)
else
textLabel:setText(string.format(deathTexts.unfair.text, 100 - penalty))
deathWindow:setHeight(deathWindow.baseHeight + deathTexts.unfair.height)
deathWindow:setWidth(deathWindow.baseWidth + deathTexts.unfair.width)
end
elseif deathType == DeathType.Blessed then
textLabel:setText(deathTexts.blessed.text)
deathWindow:setHeight(deathWindow.baseHeight + deathTexts.blessed.height)
deathWindow:setWidth(deathWindow.baseWidth + deathTexts.blessed.width)
end
local okButton = deathWindow:getChildById('buttonOk') local okButton = deathWindow:getChildById('buttonOk')
local cancelButton = deathWindow:getChildById('buttonCancel') local cancelButton = deathWindow:getChildById('buttonCancel')

View File

@ -130,6 +130,7 @@ GameExperienceBonus = 66
GameAuthenticator = 67 GameAuthenticator = 67
GameUnjustifiedPoints = 68 GameUnjustifiedPoints = 68
GameSessionKey = 69 GameSessionKey = 69
GameDeathType = 70
TextColors = { TextColors = {
red = '#f55e5e', --'#c83200' red = '#f55e5e', --'#c83200'
@ -270,4 +271,9 @@ Blessings = {
SparkOfPhoenix = 32 SparkOfPhoenix = 32
} }
DeathType = {
Regular = 0,
Blessed = 1
}
-- @} -- @}

View File

@ -73,7 +73,7 @@ function g_game.getSupportedClients()
1053, 1054, 1055, 1056, 1057, 1053, 1054, 1055, 1056, 1057,
1058, 1059, 1060, 1061, 1062, 1058, 1059, 1060, 1061, 1062,
1063, 1064, 1070, 1071, 1072, 1063, 1064, 1070, 1071, 1072,
1073, 1074, 1075 1073, 1074, 1075, 1076
} }
end end

View File

@ -402,6 +402,7 @@ namespace Otc
GameAuthenticator = 67, GameAuthenticator = 67,
GameUnjustifiedPoints = 68, GameUnjustifiedPoints = 68,
GameSessionKey = 69, GameSessionKey = 69,
GameDeathType = 70,
LastGameFeature = 101 LastGameFeature = 101
}; };
@ -466,6 +467,11 @@ namespace Otc
BlessingWisdomOfSolitude = 1 << 4, BlessingWisdomOfSolitude = 1 << 4,
BlessingSparkOfPhoenix = 1 << 5 BlessingSparkOfPhoenix = 1 << 5
}; };
enum DeathType {
DeathRegular = 0,
DeathBlessed = 1
};
} }
#endif #endif

View File

@ -228,12 +228,12 @@ void Game::processGameEnd()
g_map.cleanDynamicThings(); g_map.cleanDynamicThings();
} }
void Game::processDeath(int penality) void Game::processDeath(int deathType, int penality)
{ {
m_dead = true; m_dead = true;
m_localPlayer->stopWalk(); m_localPlayer->stopWalk();
g_lua.callGlobalField("g_game", "onDeath", penality); g_lua.callGlobalField("g_game", "onDeath", deathType, penality);
} }
void Game::processGMActions(const std::vector<uint8>& actions) void Game::processGMActions(const std::vector<uint8>& actions)
@ -1450,7 +1450,7 @@ void Game::setProtocolVersion(int version)
if(isOnline()) if(isOnline())
stdext::throw_exception("Unable to change protocol version while online"); stdext::throw_exception("Unable to change protocol version while online");
if(version != 0 && (version < 740 || version > 1075)) if(version != 0 && (version < 740 || version > 1076))
stdext::throw_exception(stdext::format("Protocol version %d not supported", version)); stdext::throw_exception(stdext::format("Protocol version %d not supported", version));
m_protocolVersion = version; m_protocolVersion = version;
@ -1468,7 +1468,7 @@ void Game::setClientVersion(int version)
if(isOnline()) if(isOnline())
stdext::throw_exception("Unable to change client version while online"); stdext::throw_exception("Unable to change client version while online");
if(version != 0 && (version < 740 || version > 1075)) if(version != 0 && (version < 740 || version > 1076))
stdext::throw_exception(stdext::format("Client version %d not supported", version)); stdext::throw_exception(stdext::format("Client version %d not supported", version));
m_features.reset(); m_features.reset();
@ -1596,6 +1596,10 @@ void Game::setClientVersion(int version)
enableFeature(Otc::GameExperienceBonus); enableFeature(Otc::GameExperienceBonus);
} }
if(version >= 1055) {
enableFeature(Otc::GameDeathType);
}
if(version >= 1061) { if(version >= 1061) {
enableFeature(Otc::GameOGLInformation); enableFeature(Otc::GameOGLInformation);
} }

View File

@ -86,7 +86,7 @@ protected:
void processGameStart(); void processGameStart();
void processGameEnd(); void processGameEnd();
void processDeath(int penality); void processDeath(int deathType, int penality);
void processGMActions(const std::vector<uint8>& actions); void processGMActions(const std::vector<uint8>& actions);
void processInventoryChange(int slot, const ItemPtr& item); void processInventoryChange(int slot, const ItemPtr& item);

View File

@ -537,9 +537,15 @@ void ProtocolGame::parseChallenge(const InputMessagePtr& msg)
void ProtocolGame::parseDeath(const InputMessagePtr& msg) void ProtocolGame::parseDeath(const InputMessagePtr& msg)
{ {
int penality = 100; int penality = 100;
if(g_game.getFeature(Otc::GamePenalityOnDeath)) int deathType = Otc::DeathRegular;
if(g_game.getFeature(Otc::GameDeathType))
deathType = msg->getU8();
if(g_game.getFeature(Otc::GamePenalityOnDeath) && deathType == Otc::DeathRegular)
penality = msg->getU8(); penality = msg->getU8();
g_game.processDeath(penality);
g_game.processDeath(deathType, penality);
} }
void ProtocolGame::parseMapDescription(const InputMessagePtr& msg) void ProtocolGame::parseMapDescription(const InputMessagePtr& msg)