123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- Skills = {}
-
- -- private variables
- local skillsWindow
- local skillsButton
-
- -- private functions
- local function getNumberString(number)
- local out = ''
- number = tostring(number):reverse()
- for i=1,#number do
- out = out .. number:sub(i, i)
- if i % 3 == 0 and i ~= #number then
- out = out .. ','
- end
- end
- out = out:reverse()
- return out
- end
-
- local function setSkillValue(id, value)
- local skill = skillsWindow:recursiveGetChildById(id)
-
- if skill then
- local widget = skill:getChildById('value')
- widget:setText(value)
- end
- end
-
- local function setSkillPercent(id, percent, tooltip)
- local skill = skillsWindow:recursiveGetChildById(id)
-
- if skill then
- local widget = skill:getChildById('percent')
- widget:setPercent(percent)
-
- if tooltip then
- widget:setTooltip(tooltip)
- end
- end
- end
-
- -- public functions
- function Skills.create()
- skillsWindow = displayUI('skills.otui', { parent = Game.gameRightPanel })
- skillsWindow:hide()
- skillsButton = TopMenu.addGameButton('skillsButton', 'Skills (Ctrl+S)', '/core_styles/icons/skills.png', Skills.toggle)
- Keyboard.bindKeyDown('Ctrl+S', Skills.toggle)
- end
-
- function Skills.destroy()
- Keyboard.unbindKeyDown('Ctrl+S')
- skillsButton:destroy()
- skillsButton = nil
- skillsWindow:destroy()
- skillsWindow = nil
- end
-
- function Skills.toggle()
- local visible = not skillsWindow:isExplicitlyVisible()
- skillsWindow:setVisible(visible)
- skillsButton:setOn(visible)
- end
-
- 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(value)
- setSkillValue('experience', getNumberString(value))
- end
-
- function Skills.onLevelChange(value, percent)
- setSkillValue('level', getNumberString(value))
- setSkillPercent('level', percent, 'You have ' .. (100 - percent) .. ' percent to go')
- end
-
- function Skills.onHealthChange(health, maxHealth)
- setSkillValue('health', getNumberString(health))
- end
-
- function Skills.onManaChange(mana, maxMana)
- setSkillValue('mana', getNumberString(mana))
- end
-
- function Skills.onSoulChange(soul)
- setSkillValue('soul', soul)
- end
-
- function Skills.onFreeCapacityChange(freeCapacity)
- setSkillValue('capacity', freeCapacity)
- end
-
- function Skills.onStaminaChange(stamina)
- 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
-
- setSkillValue('stamina', hours .. ":" .. minutes)
- setSkillPercent('stamina', percent, 'You have ' .. percent .. ' percent')
- end
-
- function Skills.onMagicLevelChange(value, percent)
- setSkillValue('magiclevel', value)
- setSkillPercent('magiclevel', percent, 'You have ' .. (100 - percent) .. ' percent to go')
- end
-
- function Skills.onSkillChange(id, level, percent)
- setSkillValue('skillId' .. id, level)
- setSkillPercent('skillId' .. id, percent, 'You have ' .. (100 - percent) .. ' percent to go')
- end
-
- connect(Game, { onGameStart = Skills.create,
- onGameEnd = Skills.destroy,
- 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 })
|