tibia-client/modules/game_skills/skills.lua

280 lines
8.1 KiB
Lua
Raw Normal View History

2012-07-24 02:22:38 +02:00
skillsWindow = nil
skillsButton = nil
2011-09-13 23:54:23 +02:00
2012-07-24 02:22:38 +02:00
function init()
connect(LocalPlayer, {
2012-07-24 02:22:38 +02:00
onExperienceChange = onExperienceChange,
onLevelChange = onLevelChange,
onHealthChange = onHealthChange,
onManaChange = onManaChange,
onSoulChange = onSoulChange,
onFreeCapacityChange = onFreeCapacityChange,
onStaminaChange = onStaminaChange,
onOfflineTrainingChange = onOfflineTrainingChange,
onRegenerationChange = onRegenerationChange,
onSpeedChange = onSpeedChange,
onBaseSpeedChange = onBaseSpeedChange,
2012-07-24 02:22:38 +02:00
onMagicLevelChange = onMagicLevelChange,
onBaseMagicLevelChange = onBaseMagicLevelChange,
onSkillChange = onSkillChange,
onBaseSkillChange = onBaseSkillChange
})
connect(g_game, {
onGameStart = update,
onGameEnd = update
})
skillsWindow = g_ui.loadUI('skills.otui', modules.game_interface.getRightPanel())
2012-07-24 02:22:38 +02:00
skillsButton = TopMenu.addRightGameToggleButton('skillsButton', tr('Skills') .. ' (Ctrl+S)', 'skills.png', toggle)
skillsButton:setOn(true)
2012-07-24 02:22:38 +02:00
g_keyboard.bindKeyDown('Ctrl+S', toggle)
2012-07-24 02:22:38 +02:00
refresh()
2011-12-22 05:06:00 +01:00
end
2012-07-24 02:22:38 +02:00
function terminate()
disconnect(LocalPlayer, {
2012-07-24 02:22:38 +02:00
onExperienceChange = onExperienceChange,
onLevelChange = onLevelChange,
onHealthChange = onHealthChange,
onManaChange = onManaChange,
onSoulChange = onSoulChange,
onFreeCapacityChange = onFreeCapacityChange,
onStaminaChange = onStaminaChange,
onOfflineTrainingChange = onOfflineTrainingChange,
onRegenerationChange = onRegenerationChange,
onSpeedChange = onSpeedChange,
onBaseSpeedChange = onBaseSpeedChange,
2012-07-24 02:22:38 +02:00
onMagicLevelChange = onMagicLevelChange,
onBaseMagicLevelChange = onBaseMagicLevelChange,
onSkillChange = onSkillChange,
onBaseSkillChange = onBaseSkillChange
})
disconnect(g_game, {
onGameStart = update,
onGameEnd = update
})
2012-06-26 00:13:30 +02:00
g_keyboard.unbindKeyDown('Ctrl+S')
2012-01-23 14:47:15 +01:00
skillsButton:destroy()
skillsWindow:destroy()
2012-07-24 02:22:38 +02:00
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
2012-07-24 02:22:38 +02:00
function setSkillValue(id, value)
local skill = skillsWindow:recursiveGetChildById(id)
local widget = skill:getChildById('value')
widget:setText(value)
end
2012-04-27 06:54:14 +02:00
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
2012-07-24 02:22:38 +02:00
function setSkillPercent(id, percent, tooltip)
local skill = skillsWindow:recursiveGetChildById(id)
local widget = skill:getChildById('percent')
widget:setPercent(percent)
if tooltip then
widget:setTooltip(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
2012-07-24 02:22:38 +02:00
function refresh()
local player = g_game.getLocalPlayer()
if not player then return end
2012-07-24 02:22:38 +02:00
onExperienceChange(player, player:getExperience())
onLevelChange(player, player:getLevel(), player:getLevelPercent())
onHealthChange(player, player:getHealth(), player:getMaxHealth())
onManaChange(player, player:getMana(), player:getMaxMana())
onSoulChange(player, player:getSoul())
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
2012-07-24 02:22:38 +02:00
onSkillChange(player, i, player:getSkillLevel(i), player:getSkillLevelPercent(i))
onBaseSkillChange(player, i, player:getSkillBaseLevel(i))
end
end
2012-07-24 02:22:38 +02:00
function toggle()
2012-06-21 21:31:22 +02:00
if skillsButton:isOn() then
skillsWindow:close()
skillsButton:setOn(false)
else
skillsWindow:open()
skillsButton:setOn(true)
end
end
2012-07-24 02:22:38 +02:00
function onMiniWindowClose()
2012-06-21 21:31:22 +02:00
skillsButton:setOn(false)
2012-01-14 20:31:20 +01:00
end
2012-07-24 02:22:38 +02:00
function onSkillButtonClick(button)
2012-01-06 09:48:59 +01:00
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
2012-07-24 02:22:38 +02:00
function 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
2012-07-24 02:22:38 +02:00
function 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
2012-07-24 02:22:38 +02:00
function 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
2012-07-24 02:22:38 +02:00
function 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
2012-07-24 02:22:38 +02:00
function onSoulChange(localPlayer, soul)
2011-12-22 05:06:00 +01:00
setSkillValue('soul', soul)
end
2012-07-24 02:22:38 +02:00
function onFreeCapacityChange(localPlayer, freeCapacity)
2011-12-22 05:06:00 +01:00
setSkillValue('capacity', freeCapacity)
end
2012-07-24 02:22:38 +02:00
function 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 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)
2011-12-22 05:06:00 +01:00
end
2011-11-03 23:14:56 +01:00
2012-07-24 02:22:38 +02:00
function 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))
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