tibia-client/modules/game_skills/skills.lua

152 lines
4.5 KiB
Lua
Raw Normal View History

Skills = {}
2011-09-13 23:54:23 +02:00
-- private variables
2012-01-23 14:47:15 +01:00
local skillsWindow
2012-01-14 20:31:20 +01:00
local skillsButton
2011-09-13 23:54:23 +02:00
2011-12-22 05:06:00 +01:00
-- private functions
local function setSkillValue(id, value)
2012-01-23 14:47:15 +01:00
local skill = skillsWindow:recursiveGetChildById(id)
local widget = skill:getChildById('value')
widget:setText(value)
2011-12-22 05:06:00 +01:00
end
local function setSkillPercent(id, percent, tooltip)
2012-01-23 14:47:15 +01:00
local skill = skillsWindow:recursiveGetChildById(id)
local widget = skill:getChildById('percent')
widget:setPercent(percent)
2012-01-06 09:48:59 +01:00
if tooltip then
widget:setTooltip(tooltip)
2011-09-13 23:54:23 +02:00
end
end
2011-12-22 05:06:00 +01:00
-- public functions
function Skills.init()
connect(LocalPlayer, {
onExperienceChange = Skills.onExperienceChange,
onLevelChange = Skills.onLevelChange,
onHealthChange = Skills.onHealthChange,
onManaChange = Skills.onManaChange,
onSoulChange = Skills.onSoulChange,
onFreeCapacityChange = Skills.onFreeCapacityChange,
onStaminaChange = Skills.onStaminaChange,
onMagicLevelChange = Skills.onMagicLevelChange,
onSkillChange = Skills.onSkillChange
})
skillsWindow = displayUI('skills.otui', GameInterface.getLeftPanel())
skillsButton = TopMenu.addGameToggleButton('skillsButton', tr('Skills') .. ' (Ctrl+S)', 'skills.png', Skills.toggle)
skillsButton:setOn(true)
Keyboard.bindKeyDown('Ctrl+S', Skills.toggle)
Skills.refresh()
2011-12-22 05:06:00 +01:00
end
function Skills.terminate()
disconnect(LocalPlayer, {
onExperienceChange = Skills.onExperienceChange,
onLevelChange = Skills.onLevelChange,
onHealthChange = Skills.onHealthChange,
onManaChange = Skills.onManaChange,
onSoulChange = Skills.onSoulChange,
onFreeCapacityChange = Skills.onFreeCapacityChange,
onStaminaChange = Skills.onStaminaChange,
onMagicLevelChange = Skills.onMagicLevelChange,
onSkillChange = Skills.onSkillChange
})
Keyboard.unbindKeyDown('Ctrl+S')
2012-01-23 14:47:15 +01:00
skillsButton:destroy()
skillsButton = nil
skillsWindow:destroy()
skillsWindow = nil
2012-04-27 06:54:14 +02:00
Skills = nil
end
function Skills.refresh()
local player = g_game.getLocalPlayer()
if not player then return end
Skills.onExperienceChange(player, player:getExperience())
Skills.onLevelChange(player, player:getLevel(), player:getLevelPercent())
Skills.onHealthChange(player, player:getHealth(), player:getMaxHealth())
Skills.onManaChange(player, player:getMana(), player:getMaxMana())
Skills.onSoulChange(player, player:getSoul())
Skills.onFreeCapacityChange(player, player:getFreeCapacity())
Skills.onStaminaChange(player, player:getStamina())
Skills.onMagicLevelChange(player, player:getMagicLevel(), player:getMagicLevelPercent())
for i=0,6 do
Skills.onSkillChange(player, i, player:getSkillLevel(i), player:getSkillLevelPercent(i))
end
end
2012-01-14 20:31:20 +01:00
function Skills.toggle()
2012-01-23 14:47:15 +01:00
local visible = not skillsWindow:isExplicitlyVisible()
skillsWindow:setVisible(visible)
skillsButton:setOn(visible)
2012-01-14 20:31:20 +01:00
end
2012-01-06 09:48:59 +01:00
function Skills.onSkillButtonClick(button)
local percentBar = button:getChildById('percent')
if percentBar then
percentBar:setVisible(not percentBar:isVisible())
if percentBar:isVisible() then
button:setHeight(21)
else
button:setHeight(21 - 6)
end
end
end
-- hooked events
function Skills.onExperienceChange(localPlayer, value)
2012-04-26 18:45:25 +02:00
setSkillValue('experience', tr(value))
2011-12-22 05:06:00 +01:00
end
2011-11-03 23:14:56 +01:00
function Skills.onLevelChange(localPlayer, value, percent)
2012-04-26 18:45:25 +02:00
setSkillValue('level', tr(value))
setSkillPercent('level', percent, tr('You have %s percent to go', 100 - percent))
2011-12-22 05:06:00 +01:00
end
function Skills.onHealthChange(localPlayer, health, maxHealth)
2012-04-26 18:45:25 +02:00
setSkillValue('health', tr(health))
2011-12-22 05:06:00 +01:00
end
function Skills.onManaChange(localPlayer, mana, maxMana)
2012-04-26 18:45:25 +02:00
setSkillValue('mana', tr(mana))
2011-12-22 05:06:00 +01:00
end
function Skills.onSoulChange(localPlayer, soul)
2011-12-22 05:06:00 +01:00
setSkillValue('soul', soul)
end
function Skills.onFreeCapacityChange(localPlayer, freeCapacity)
2011-12-22 05:06:00 +01:00
setSkillValue('capacity', freeCapacity)
end
function Skills.onStaminaChange(localPlayer, stamina)
2011-12-22 05:06:00 +01:00
local hours = math.floor(stamina / 60)
local minutes = stamina % 60
if minutes < 10 then
minutes = '0' .. minutes
end
local percent = 100 * stamina / (42 * 60) -- max is 42 hours
2012-01-06 09:48:59 +01:00
2011-12-22 05:06:00 +01:00
setSkillValue('stamina', hours .. ":" .. minutes)
setSkillPercent('stamina', percent, tr('You have %s percent', percent))
2011-12-22 05:06:00 +01:00
end
function Skills.onMagicLevelChange(localPlayer, value, percent)
2011-12-22 05:06:00 +01:00
setSkillValue('magiclevel', value)
setSkillPercent('magiclevel', percent, tr('You have %s percent to go', 100 - percent))
2011-12-22 05:06:00 +01:00
end
2011-11-03 23:14:56 +01:00
function Skills.onSkillChange(localPlayer, id, level, percent)
2011-12-22 05:06:00 +01:00
setSkillValue('skillId' .. id, level)
setSkillPercent('skillId' .. id, percent, tr('You have %s percent to go', 100 - percent))
end