2012-07-24 07:30:08 +02:00
Icons = { }
2013-01-18 23:39:11 +01:00
Icons [ 1 ] = { tooltip = tr ( ' You are poisoned ' ) , path = ' /images/game/states/poisoned ' , id = ' condition_poisoned ' }
Icons [ 2 ] = { tooltip = tr ( ' You are burning ' ) , path = ' /images/game/states/burning ' , id = ' condition_burning ' }
Icons [ 4 ] = { tooltip = tr ( ' You are electrified ' ) , path = ' /images/game/states/electrified ' , id = ' condition_electrified ' }
Icons [ 8 ] = { tooltip = tr ( ' You are drunk ' ) , path = ' /images/game/states/drunk ' , id = ' condition_drunk ' }
Icons [ 16 ] = { tooltip = tr ( ' You are protected by a magic shield ' ) , path = ' /images/game/states/magic_shield ' , id = ' condition_magic_shield ' }
Icons [ 32 ] = { tooltip = tr ( ' You are paralysed ' ) , path = ' /images/game/states/slowed ' , id = ' condition_slowed ' }
Icons [ 64 ] = { tooltip = tr ( ' You are hasted ' ) , path = ' /images/game/states/haste ' , id = ' condition_haste ' }
Icons [ 128 ] = { tooltip = tr ( ' You may not logout during a fight ' ) , path = ' /images/game/states/logout_block ' , id = ' condition_logout_block ' }
2013-01-26 21:10:30 +01:00
Icons [ 256 ] = { tooltip = tr ( ' You are drowning ' ) , path = ' /images/game/states/drowning ' , id = ' condition_drowning ' }
2013-01-18 23:39:11 +01:00
Icons [ 512 ] = { tooltip = tr ( ' You are freezing ' ) , path = ' /images/game/states/freezing ' , id = ' condition_freezing ' }
Icons [ 1024 ] = { tooltip = tr ( ' You are dazzled ' ) , path = ' /images/game/states/dazzled ' , id = ' condition_dazzled ' }
Icons [ 2048 ] = { tooltip = tr ( ' You are cursed ' ) , path = ' /images/game/states/cursed ' , id = ' condition_cursed ' }
Icons [ 4096 ] = { tooltip = tr ( ' You are strengthened ' ) , path = ' /images/game/states/strengthened ' , id = ' condition_strengthened ' }
Icons [ 8192 ] = { tooltip = tr ( ' You may not logout or enter a protection zone ' ) , path = ' /images/game/states/protection_zone_block ' , id = ' condition_protection_zone_block ' }
Icons [ 16384 ] = { tooltip = tr ( ' You are within a protection zone ' ) , path = ' /images/game/states/protection_zone ' , id = ' condition_protection_zone ' }
Icons [ 32768 ] = { tooltip = tr ( ' You are bleeding ' ) , path = ' /images/game/states/bleeding ' , id = ' condition_bleeding ' }
Icons [ 65536 ] = { tooltip = tr ( ' You are hungry ' ) , path = ' /images/game/states/hungry ' , id = ' condition_hungry ' }
2012-07-12 18:45:22 +02:00
2012-07-24 07:30:08 +02:00
healthInfoWindow = nil
healthBar = nil
manaBar = nil
soulBar = nil
healthLabel = nil
manaLabel = nil
soulLabel = nil
capLabel = nil
function init ( )
connect ( LocalPlayer , { onHealthChange = onHealthChange ,
onManaChange = onManaChange ,
onStatesChange = onStatesChange ,
onSoulChange = onSoulChange ,
onFreeCapacityChange = onFreeCapacityChange } )
connect ( g_game , { onGameEnd = offline } )
2013-01-18 23:39:11 +01:00
healthInfoButton = modules.client_topmenu . addRightGameToggleButton ( ' healthInfoButton ' , tr ( ' Health Information ' ) , ' /images/topbuttons/healthinfo ' , toggle )
2012-07-12 18:45:22 +02:00
healthInfoButton : setOn ( true )
2012-08-21 07:35:08 +02:00
2013-01-18 23:39:11 +01:00
healthInfoWindow = g_ui.loadUI ( ' healthinfo ' , modules.game_interface . getRightPanel ( ) )
2012-08-21 07:35:08 +02:00
healthInfoWindow : disableResize ( )
2012-07-12 18:45:22 +02:00
healthBar = healthInfoWindow : recursiveGetChildById ( ' healthBar ' )
manaBar = healthInfoWindow : recursiveGetChildById ( ' manaBar ' )
healthLabel = healthInfoWindow : recursiveGetChildById ( ' healthLabel ' )
manaLabel = healthInfoWindow : recursiveGetChildById ( ' manaLabel ' )
soulBar = healthInfoWindow : recursiveGetChildById ( ' soulBar ' )
soulLabel = healthInfoWindow : recursiveGetChildById ( ' soulLabel ' )
2012-07-13 01:40:55 +02:00
capLabel = healthInfoWindow : recursiveGetChildById ( ' capLabel ' )
2012-07-12 18:45:22 +02:00
if g_game.isOnline ( ) then
local localPlayer = g_game.getLocalPlayer ( )
2012-07-24 07:30:08 +02:00
onHealthChange ( localPlayer , localPlayer : getHealth ( ) , localPlayer : getMaxHealth ( ) )
onManaChange ( localPlayer , localPlayer : getMana ( ) , localPlayer : getMaxMana ( ) )
onStatesChange ( localPlayer , localPlayer : getStates ( ) , 0 )
onSoulChange ( localPlayer , localPlayer : getSoul ( ) )
onFreeCapacityChange ( localPlayer , localPlayer : getFreeCapacity ( ) )
2012-07-12 18:45:22 +02:00
end
2012-08-21 23:40:47 +02:00
healthInfoWindow : setup ( )
2012-07-12 18:45:22 +02:00
end
2012-07-24 07:30:08 +02:00
function terminate ( )
disconnect ( LocalPlayer , { onHealthChange = onHealthChange ,
onManaChange = onManaChange ,
onStatesChange = onStatesChange ,
onSoulChange = onSoulChange ,
onFreeCapacityChange = onFreeCapacityChange } )
2012-07-12 18:45:22 +02:00
2012-07-24 07:30:08 +02:00
disconnect ( g_game , { onGameEnd = offline } )
2012-07-12 18:45:22 +02:00
healthInfoWindow : destroy ( )
2013-02-01 05:32:15 +01:00
healthInfoButton : destroy ( )
2012-07-12 18:45:22 +02:00
end
2012-07-24 07:30:08 +02:00
function toggle ( )
2012-07-12 18:45:22 +02:00
if healthInfoButton : isOn ( ) then
healthInfoWindow : close ( )
healthInfoButton : setOn ( false )
else
healthInfoWindow : open ( )
healthInfoButton : setOn ( true )
end
end
2012-08-20 23:58:43 +02:00
function hideLabels ( )
capLabel : hide ( )
soulLabel : hide ( )
local removeHeight = capLabel : getHeight ( ) + capLabel : getMarginTop ( ) + capLabel : getMarginBottom ( )
2013-01-18 23:39:11 +01:00
healthInfoWindow : setHeight ( math.max ( healthInfoWindow.minimizedHeight , healthInfoWindow : getHeight ( ) - removeHeight ) )
2012-08-20 23:58:43 +02:00
end
2012-07-24 07:30:08 +02:00
function onMiniWindowClose ( )
2012-07-12 18:45:22 +02:00
healthInfoButton : setOn ( false )
end
2012-07-24 07:30:08 +02:00
function offline ( )
2012-07-12 18:45:22 +02:00
healthInfoWindow : recursiveGetChildById ( ' conditionPanel ' ) : destroyChildren ( )
end
-- hooked events
2012-07-24 07:30:08 +02:00
function onHealthChange ( localPlayer , health , maxHealth )
2012-07-12 18:45:22 +02:00
healthLabel : setText ( health .. ' / ' .. maxHealth )
healthBar : setPercent ( health / maxHealth * 100 )
end
2012-07-24 07:30:08 +02:00
function onManaChange ( localPlayer , mana , maxMana )
2012-07-12 18:45:22 +02:00
manaLabel : setText ( mana .. ' / ' .. maxMana )
local percent
if maxMana == 0 then
percent = 100
else
percent = ( mana * 100 ) / maxMana
end
manaBar : setPercent ( percent )
end
2012-07-24 07:30:08 +02:00
function onSoulChange ( localPlayer , soul )
2012-07-13 01:40:55 +02:00
soulLabel : setText ( tr ( ' Soul ' ) .. ' : ' .. soul )
2012-07-12 18:45:22 +02:00
end
2012-07-24 07:30:08 +02:00
function onFreeCapacityChange ( player , freeCapacity )
2012-07-13 01:40:55 +02:00
capLabel : setText ( tr ( ' Cap ' ) .. ' : ' .. freeCapacity )
end
2012-07-24 07:30:08 +02:00
function onStatesChange ( localPlayer , now , old )
2012-07-12 18:45:22 +02:00
if now == old then return end
local bitsChanged = bit32.bxor ( now , old )
for i = 1 , 32 do
local pow = math.pow ( 2 , i - 1 )
if pow > bitsChanged then break end
local bitChanged = bit32.band ( bitsChanged , pow )
if bitChanged ~= 0 then
2012-07-24 07:30:08 +02:00
toggleIcon ( bitChanged )
2012-07-12 18:45:22 +02:00
end
end
end
2012-07-24 07:30:08 +02:00
function toggleIcon ( bitChanged )
2012-07-12 18:45:22 +02:00
local content = healthInfoWindow : recursiveGetChildById ( ' conditionPanel ' )
local icon = content : getChildById ( Icons [ bitChanged ] . id )
if icon then
icon : destroy ( )
else
icon = g_ui.createWidget ( ' ConditionWidget ' , content )
icon : setId ( Icons [ bitChanged ] . id )
icon : setImageSource ( Icons [ bitChanged ] . path )
icon : setTooltip ( Icons [ bitChanged ] . tooltip )
end
end