@ -10,8 +10,18 @@ function init()
onSoulChange = onSoulChange ,
onFreeCapacityChange = onFreeCapacityChange ,
onStaminaChange = onStaminaChange ,
onOfflineTrainingChange = onOfflineTrainingChange ,
onRegenerationChange = onRegenerationChange ,
onSpeedChange = onSpeedChange ,
onBaseSpeedChange = onBaseSpeedChange ,
onMagicLevelChange = onMagicLevelChange ,
onSkillChange = onSkillChange
onBaseMagicLevelChange = onBaseMagicLevelChange ,
onSkillChange = onSkillChange ,
onBaseSkillChange = onBaseSkillChange
} )
connect ( g_game , {
onGameStart = update ,
onGameEnd = update
} )
skillsWindow = g_ui.loadUI ( ' skills.otui ' , modules.game_interface . getRightPanel ( ) )
@ -31,8 +41,18 @@ function terminate()
onSoulChange = onSoulChange ,
onFreeCapacityChange = onFreeCapacityChange ,
onStaminaChange = onStaminaChange ,
onOfflineTrainingChange = onOfflineTrainingChange ,
onRegenerationChange = onRegenerationChange ,
onSpeedChange = onSpeedChange ,
onBaseSpeedChange = onBaseSpeedChange ,
onMagicLevelChange = onMagicLevelChange ,
onSkillChange = onSkillChange
onBaseMagicLevelChange = onBaseMagicLevelChange ,
onSkillChange = onSkillChange ,
onBaseSkillChange = onBaseSkillChange
} )
disconnect ( g_game , {
onGameStart = update ,
onGameEnd = update
} )
g_keyboard.unbindKeyDown ( ' Ctrl+S ' )
@ -40,12 +60,40 @@ function terminate()
skillsWindow : destroy ( )
end
function setSkillBase ( id , value , baseValue )
local skill = skillsWindow : recursiveGetChildById ( id )
local widget = skill : getChildById ( ' value ' )
if value > baseValue then
widget : setColor ( ' #008b00 ' )
skill : setTooltip ( baseValue .. ' + ' .. ( value - baseValue ) )
elseif value < baseValue then
widget : setColor ( ' #008b00 ' )
skill : setTooltip ( baseValue .. ' - ' .. ( value - baseValue ) )
else
widget : setColor ( ' #bbbbbb ' )
skill : removeTooltip ( )
end
end
function setSkillValue ( id , value )
local skill = skillsWindow : recursiveGetChildById ( id )
local widget = skill : getChildById ( ' value ' )
widget : setText ( value )
end
function setSkillColor ( id , value )
local skill = skillsWindow : recursiveGetChildById ( id )
local widget = skill : getChildById ( ' value ' )
widget : setColor ( value )
end
function setSkillTooltip ( id , value )
local skill = skillsWindow : recursiveGetChildById ( id )
local widget = skill : getChildById ( ' value ' )
widget : setTooltip ( value )
end
function setSkillPercent ( id , percent , tooltip )
local skill = skillsWindow : recursiveGetChildById ( id )
local widget = skill : getChildById ( ' percent ' )
@ -56,6 +104,22 @@ function setSkillPercent(id, percent, tooltip)
end
end
function update ( )
local offlineTraining = skillsWindow : recursiveGetChildById ( ' offlineTraining ' )
if not g_game.getFeature ( GameOfflineTrainingTime ) then
offlineTraining : hide ( )
else
offlineTraining : show ( )
end
local regenerationTime = skillsWindow : recursiveGetChildById ( ' regenerationTime ' )
if not g_game.getFeature ( GamePlayerRegenerationTime ) then
regenerationTime : hide ( )
else
regenerationTime : show ( )
end
end
function refresh ( )
local player = g_game.getLocalPlayer ( )
if not player then return end
@ -68,9 +132,15 @@ function refresh()
onFreeCapacityChange ( player , player : getFreeCapacity ( ) )
onStaminaChange ( player , player : getStamina ( ) )
onMagicLevelChange ( player , player : getMagicLevel ( ) , player : getMagicLevelPercent ( ) )
onOfflineTrainingChange ( player , player : getOfflineTrainingTime ( ) )
onRegenerationChange ( player , player : getRegenerationTime ( ) )
onSpeedChange ( player , player : getSpeed ( ) )
onBaseSpeedChange ( player , player : getBaseSpeed ( ) )
onBaseMagicLevelChange ( player , player : getBaseMagicLevel ( ) )
for i = 0 , 6 do
onSkillChange ( player , i , player : getSkillLevel ( i ) , player : getSkillLevelPercent ( i ) )
onBaseSkillChange ( player , i , player : getSkillBaseLevel ( i ) )
end
end
@ -137,13 +207,74 @@ function onStaminaChange(localPlayer, stamina)
setSkillPercent ( ' stamina ' , percent , tr ( ' You have %s percent ' , percent ) )
end
function onMagicLevelChange ( localPlayer , value , percent )
setSkillValue ( ' magiclevel ' , value )
function onOfflineTrainingChange ( localPlayer , offlineTrainingTime )
local hours = math.floor ( offlineTrainingTime / 60 )
local minutes = offlineTrainingTime % 60
if minutes < 10 then
minutes = ' 0 ' .. minutes
end
local percent = 100 * offlineTrainingTime / ( 12 * 60 ) -- max is 12 hours
setSkillValue ( ' offlineTraining ' , hours .. " : " .. minutes )
setSkillPercent ( ' offlineTraining ' , percent , tr ( ' You have %s percent ' , percent ) )
end
function onRegenerationChange ( localPlayer , regenerationTime )
local hours = math.floor ( regenerationTime / 60 )
local minutes = regenerationTime % 60
if minutes < 10 then
minutes = ' 0 ' .. minutes
end
setSkillValue ( ' regenerationTime ' , hours .. " : " .. minutes )
end
function onSpeedChange ( localPlayer , speed )
setSkillValue ( ' speed ' , speed )
setSkillBase ( ' speed ' , speed , localPlayer : getBaseSpeed ( ) )
end
function onBaseSpeedChange ( localPlayer , baseSpeed )
if baseSpeed < 1 then
return
end
local speed = localPlayer : getSpeed ( )
onSpeedChange ( localPlayer , baseSpeed )
setSkillBase ( ' speed ' , speed , baseSpeed )
end
function onMagicLevelChange ( localPlayer , magiclevel , percent )
setSkillValue ( ' magiclevel ' , magiclevel )
setSkillPercent ( ' magiclevel ' , percent , tr ( ' You have %s percent to go ' , 100 - percent ) )
setSkillBase ( ' magiclevel ' , magiclevel , localPlayer : getBaseMagicLevel ( ) )
end
function onBaseMagicLevelChange ( localPlayer , baseMagicLevel )
if baseMagicLevel < 1 then
return
end
local magiclevel = localPlayer : getMagicLevel ( )
onMagicLevelChange ( localPlayer , magiclevel , localPlayer : getMagicLevelPercent ( ) )
setSkillBase ( ' magiclevel ' , magiclevel , baseMagicLevel )
end
function onSkillChange ( localPlayer , id , level , percent )
setSkillValue ( ' skillId ' .. id , level )
setSkillPercent ( ' skillId ' .. id , percent , tr ( ' You have %s percent to go ' , 100 - percent ) )
setSkillBase ( ' skillId ' .. id , level , localPlayer : getSkillBaseLevel ( id ) )
end
function onBaseSkillChange ( localPlayer , id , baseLevel )
if baseLevel < 1 then
return
end
local level = localPlayer : getSkillLevel ( id )
onSkillChange ( localPlayer , id , level , localPlayer : getSkillLevelPercent ( id ) )
setSkillBase ( ' skillId ' .. id , level , baseLevel )
end