Ir para conteúdo
  • 0
Entre para seguir isso  
Wend Jr

OTClient Dúvida em adiciona HealthBar no OTClient

Pergunta

Wend Jr    9
Wend Jr

Olá pessoal da OTBr, estou aqui hoje para tira uma dúvida sobre OTClient!


 


estou querendo sabe como que posso adiciona uma HealthBar nas skills do OTClient 


as skills estão assim: 141012032228376539.png


 


ai eu queria colocar uma HealthBar nesse Meio ai :)


Compartilhar este post


Link para o post

54 respostass a esta questão

Recommended Posts

  • 0
dalvorsn    46
dalvorsn

como assim? coloco isso onde? 

Posta teu script lua do module que eu te explico melhor

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

Posta teu script lua do module que eu te explico melhor

aqui;

 

skillsWindow = nil
skillsButton = nil
 
local imgs = {
   [-1] = "/modules/game_skills/img/trainer", -- -1 quer dizer esta sem clan...
   [1] = "/modules/game_skills/img/volcanic",
   [2] = "/modules/game_skills/img/seavell",
   [3] = "/modules/game_skills/img/orebound",
   [4] = "/modules/game_skills/img/wingeon",
   [5] = "/modules/game_skills/img/malefic",
   [6] = "/modules/game_skills/img/gardestrike",
   [7] = "/modules/game_skills/img/psycraft",
   [8] = "/modules/game_skills/img/naturia",
   [9] = "/modules/game_skills/img/raibolt",
}
 
function init()
  connect(LocalPlayer, {
    onExperienceChange = onExperienceChange,
    onLevelChange = onLevelChange,
    onHealthChange = onHealthChange,
    onManaChange = onManaChange,
    onSoulChange = onSoulChange,
    onFreeCapacityChange = onFreeCapacityChange,
    onTotalCapacityChange = onTotalCapacityChange,
    onStaminaChange = onStaminaChange,
    onOfflineTrainingChange = onOfflineTrainingChange,
    onRegenerationChange = onRegenerationChange,
    onSpeedChange = onSpeedChange,
    onBaseSpeedChange = onBaseSpeedChange,
    onMagicLevelChange = onMagicLevelChange,
    onBaseMagicLevelChange = onBaseMagicLevelChange,
    onSkillChange = onSkillChange,
    onBaseSkillChange = onBaseSkillChange
  })
  connect(g_game, {
    onGameStart = refresh,
    onGameEnd = offline
  })
  connect(g_game, 'onTextMessage', getParams)
  connect(g_game, {onGameStart = changeImg})
 
  skillsButton = modules.client_topmenu.addCustomRightButton('skillsButton', tr('skills') .. ' (Ctrl+S)', '/modules/game_skills/img/perfil_icon', toggle, true)
  skillsButton:setOn(true)
  skillsWindow = g_ui.loadUI('skills', modules.game_interface.getRightPanel()) -- skills
 
  g_keyboard.bindKeyDown('Ctrl+S', toggle)
 
  refresh()
  skillsWindow:setup()
end
 
function terminate()
  disconnect(LocalPlayer, {
    onExperienceChange = onExperienceChange,
    onLevelChange = onLevelChange,
    onHealthChange = onHealthChange,
    onManaChange = onManaChange,
    onSoulChange = onSoulChange,
    onFreeCapacityChange = onFreeCapacityChange,
    onTotalCapacityChange = onTotalCapacityChange,
    onStaminaChange = onStaminaChange,
    onOfflineTrainingChange = onOfflineTrainingChange,
    onRegenerationChange = onRegenerationChange,
    onSpeedChange = onSpeedChange,
    onBaseSpeedChange = onBaseSpeedChange,
    onMagicLevelChange = onMagicLevelChange,
    onBaseMagicLevelChange = onBaseMagicLevelChange,
    onSkillChange = onSkillChange,
    onBaseSkillChange = onBaseSkillChange
  })
  disconnect(g_game, {
    onGameStart = refresh,
    onGameEnd = offline
  })
  disconnect(g_game, 'onTextMessage', getParams)
  disconnect(g_game, {onGameStart = changeImg})
  
  g_keyboard.unbindKeyDown('Ctrl+S')
  skillsWindow:destroy()
  skillsButton:destroy()
end
 
function changeImg()
  local player = g_game.getLocalPlayer()
  if not player then return end
  g_game.talk("#getSto# 86228")
end
 
function getParams(mode, text)
if not g_game.isOnline() then return end
   if mode == MessageModes.Failure then 
      if text:find("#getSto#") then
         local icon = skillsWindow:recursiveGetChildById("clanicon")
         if icon then
            local t = string.explode(text, " ")
            icon:setImageSource(imgs[tonumber(t[2])])
         end
      end
   end
end
 
function expForLevel(level)
  return math.floor((50*level*level*level)/3 - 100*level*level + (850*level)/3 - 200)
end
 
function expToAdvance(currentLevel, currentExp)
  return expForLevel(currentLevel+1) - currentExp
end
 
function resetSkillColor(id)
  local skill = skillsWindow:recursiveGetChildById(id)
  local widget = skill:getChildById('value')
  widget:setColor('#bbbbbb')
end
 
function setSkillBase(id, value, baseValue)
  if baseValue <= 0 or value < 0 then
    return
  end
  local skill = skillsWindow:recursiveGetChildById(id)
  local widget = skill:getChildById('value')
 
  if value > baseValue then
    widget:setColor('#008b00') -- green
    skill:setTooltip(baseValue .. ' +' .. (value - baseValue))
  elseif value < baseValue then
    widget:setColor('#b22222') -- red
    skill:setTooltip(baseValue .. ' ' .. (value - baseValue))
  else
    widget:setColor('#bbbbbb') -- default
    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')
  widget:setPercent(math.floor(percent))
 
  if tooltip then
    widget:setTooltip(tooltip)
  end
end
 
function checkAlert(id, value, maxValue, threshold, greaterThan)
  if greaterThan == nil then greaterThan = false end
  local alert = false
 
  -- maxValue can be set to false to check value and threshold
  -- used for regeneration checking
  if type(maxValue) == 'boolean' then
    if maxValue then
      return
    end
 
    if greaterThan then
      if value > threshold then
        alert = true
      end
    else
      if value < threshold then
        alert = true
      end
    end
  elseif type(maxValue) == 'number' then
    if maxValue < 0 then
      return
    end
 
    local percent = math.floor((value / maxValue) * 100)
    if greaterThan then
      if percent > threshold then
        alert = true
      end
    else
      if percent < threshold then
        alert = true
      end
    end
  end
 
  if alert then
    setSkillColor(id, '#b22222') -- red
  else
    resetSkillColor(id)
  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
  
  if expSpeedEvent then expSpeedEvent:cancel() end
  expSpeedEvent = cycleEvent(checkExpSpeed, 30*1000)
 
  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())
 
  for i=0,6 do
    onSkillChange(player, i, player:getSkillLevel(i), player:getSkillLevelPercent(i))
    onBaseSkillChange(player, i, player:getSkillBaseLevel(i))
  end
 
  update()
 
  local contentsPanel = skillsWindow:getChildById('contentsPanel')
  skillsWindow:setContentMinimumHeight(110)
  skillsWindow:setContentMaximumHeight(210)
end
 
function offline()
  if expSpeedEvent then expSpeedEvent:cancel() expSpeedEvent = nil end
end
 
function toggle()
  if skillsButton:isOn() then
    skillsWindow:close()
    skillsButton:setOn(false)
  else
    skillsWindow:open()
    skillsButton:setOn(true)
    skillsButton:setOpacity(1.0)
  end
end
 
function checkExpSpeed()
  local player = g_game.getLocalPlayer()
  if not player then return end
  
  local currentExp = player:getExperience()
  local currentTime = g_clock.seconds()
  if player.lastExps ~= nil then
    player.expSpeed = (currentExp - player.lastExps[1][1])/(currentTime - player.lastExps[1][2])
    onLevelChange(player, player:getLevel(), player:getLevelPercent())
  else
    player.lastExps = {}
  end
  table.insert(player.lastExps, {currentExp, currentTime})
  if #player.lastExps > 30 then
    table.remove(player.lastExps, 1)
  end
end
 
function onMiniWindowClose()
  skillsButton:setOn(false)
  skillsButton:setOpacity(0.5)
end
 
function 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
 
function onExperienceChange(localPlayer, value)
  setSkillValue('level', value)
end
 
function onLevelChange(localPlayer, value, percent)
  setSkillValue('experience', localPlayer:getName())
  setSkillValue('experiencee', value)
  local text = tr('You have %s percent to go', 100 - percent) .. '\n' ..
               tr('%s of experience left', expToAdvance(localPlayer:getLevel(), localPlayer:getExperience()))
 
  if localPlayer.expSpeed ~= nil then
     local expPerHour = math.floor(localPlayer.expSpeed * 3600)
     if expPerHour > 0 then
        local nextLevelExp = expForLevel(localPlayer:getLevel()+1)
        local hoursLeft = (nextLevelExp - localPlayer:getExperience()) / expPerHour
        local minutesLeft = math.floor((hoursLeft - math.floor(hoursLeft))*60)
        hoursLeft = math.floor(hoursLeft)
        text = text .. '\n' .. tr('%d of experience per hour', expPerHour)
        text = text .. '\n' .. tr('Next level in %d hours and %d minutes', hoursLeft, minutesLeft)
     end
  end
 
  setSkillPercent('level', percent, text)
end
 
function onHealthChange(localPlayer, health, maxHealth, percent)
  setSkillValue('health', health)
  checkAlert('health', health, maxHealth, 30)
end
 
function onManaChange(localPlayer, mana, maxMana)
  setSkillValue('mana', mana)
  checkAlert('mana', mana, maxMana, 30)
end
 
function onSoulChange(localPlayer, soul)
  setSkillValue('soul', soul)
end
 
function onFreeCapacityChange(localPlayer, freeCapacity)
  setSkillValue('capacity', freeCapacity)
  checkAlert('capacity', freeCapacity, localPlayer:getTotalCapacity(), 20)
end
 
function onTotalCapacityChange(localPlayer, totalCapacity)
  checkAlert('capacity', localPlayer:getFreeCapacity(), totalCapacity, 20)
end
 
function onStaminaChange(localPlayer, stamina)
  local hours = math.floor(stamina / 60)
  local minutes = stamina % 60
  if minutes < 10 then
    minutes = '0' .. minutes
  end
  setSkillValue('stamina', hours .. ":" .. minutes)
end
 
function onOfflineTrainingChange(localPlayer, offlineTrainingTime)
  if not g_game.getFeature(GameOfflineTrainingTime) then
    return
  end
  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)
  if not g_game.getFeature(GamePlayerRegenerationTime) or regenerationTime < 0 then
    return
  end
  local minutes = math.floor(regenerationTime / 60)
  local seconds = regenerationTime % 60
  if seconds < 10 then
    seconds = '0' .. seconds
  end
 
  setSkillValue('regenerationTime', minutes .. ":" .. seconds)
  checkAlert('regenerationTime', regenerationTime, false, 300)
end
 
function onSpeedChange(localPlayer, speed)
  setSkillValue('speed', speed)
 
  onBaseSpeedChange(localPlayer, localPlayer:getBaseSpeed())
end
 
function onBaseSpeedChange(localPlayer, baseSpeed)
  setSkillBase('speed', localPlayer:getSpeed(), baseSpeed)
end
 
function onMagicLevelChange(localPlayer, magiclevel, percent)
  setSkillValue('magiclevel', magiclevel)
  setSkillPercent('magiclevel', percent, tr('You have %s percent to go', 100 - percent))
 
  onBaseMagicLevelChange(localPlayer, localPlayer:getBaseMagicLevel())
end
 
function onBaseMagicLevelChange(localPlayer, baseMagicLevel)
  setSkillBase('magiclevel', localPlayer:getMagicLevel(), baseMagicLevel)
end
 
function onSkillChange(localPlayer, id, level, percent)
  setSkillValue('skillId' .. id, level)
  setSkillPercent('skillId2', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId3', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId4', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId5', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId6', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('health', percent, tr('Sua vida', 100 - percent))
 
  onBaseSkillChange(localPlayer, id, localPlayer:getSkillBaseLevel(id))
end
 
function onBaseSkillChange(localPlayer, id, baseLevel)
  setSkillBase('skillId'..id, localPlayer:getSkillLevel(id), baseLevel)
end

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

Fique ciente que esse nao e o modo correto, porem eu preciso sair agora e nao to com tempo pra analisar o codigo todo

Mas substitui por essa ai:

 

function onHealthChange(localPlayer, health, maxHealth, percent)
  setSkillValue('health', health)
  checkAlert('health', health, maxHealth, 30)
  local widget = skillsWindow:recursiveGetChildById('health')
  local progressBar = widget:getChildById('percent')
  progressBar:setValue(percent, 0, 100)
end

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

 

Fique ciente que esse nao e o modo correto, porem eu preciso sair agora e nao to com tempo pra analisar o codigo todo

Mas substitui por essa ai:

function onHealthChange(localPlayer, health, maxHealth, percent)
  setSkillValue('health', health)
  checkAlert('health', health, maxHealth, 30)
  local widget = skillsWindow:recursiveGetChildById('health')
  local progressBar = widget:getChildById('percent')
  progressBar:setValue(percent, 0, 100)
end

precisa fazer alguma modificação no otui?  porque bugou o OTC todo :(

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

precisa fazer alguma modificação no otui?  porque bugou o OTC todo :(

wtf

o que houve?

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

wtf

o que houve?

Sei lá, os skills ficaram do mesmo mode que estava antes e bugou umas coisas do OTC

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

bizarro isso, realmente nao esperava acontecer nada assm, da algum erro no console?

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

bizarro isso, realmente nao esperava acontecer nada assm, da algum erro no console?

na distro do servidor? se for não dar nada

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

na distro do servidor? se for não dar nada

nao pow, no console do otclient

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

nao pow, no console do otclient

e como que ver isso?  

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

e como que ver isso?  

ue, teu cliente nao tem console nao?

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

ue, teu cliente nao tem console nao?

não está dando nenhum erro, só que faz bugar a maior parte do OTClient 

como está depois de edita a função;

 

141018052015495568.png

 

antes de editar a função;

 

141018052021916915.png

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

O erro desse modulo impede os demais de funcionar? caralho, isso nao faz o menor sentido vei

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

O erro desse modulo impede os demais de funcionar? caralho, isso nao faz o menor sentido vei

isso, acontece isso toda vez que faz alguma coisa errada nos arquivos (--

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

isso, acontece isso toda vez que faz alguma coisa errada nos arquivos (--

vou ficar te devendo esse, nao faço a minima ideia do que pode ser, esse modulo nao e dependencia de nenhum outro, nao era pra acontecer algo assim

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

vou ficar te devendo esse, nao faço a minima ideia do que pode ser, esse modulo nao e dependencia de nenhum outro, nao era pra acontecer algo assim

irei ver esse modulo direitinho e qualquer coisa te falo, Obrigado você ajudou d+ a entende uma boa parte de MODS :)

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

irei ver esse modulo direitinho e qualquer coisa te falo, Obrigado você ajudou d+ a entende uma boa parte de MODS :)

ve ai se acha algo fora do normal, porque ta estranho isso, nao era pra um modulo ter essa influencia nos outros

Compartilhar este post


Link para o post
  • 0
Elwyn    106
Elwyn

Posta de novo o script inteiro aqui, pode estar faltando algum "end" que causou tudo isso.

Compartilhar este post


Link para o post
  • 0
dalvorsn    46
dalvorsn

Posta de novo o script inteiro aqui, pode estar faltando algum "end" que causou tudo isso.

creio que teria aparecido no console se fosse erro de sintaxe, mas nao custa checar :D

Compartilhar este post


Link para o post
  • 0
Wend Jr    9
Wend Jr

Posta de novo o script inteiro aqui, pode estar faltando algum "end" que causou tudo isso.

 

Aqui;

 

 

skillsWindow = nil
skillsButton = nil
 
local imgs = {
   [-1] = "/modules/game_skills/img/trainer", -- -1 quer dizer esta sem clan...
   [1] = "/modules/game_skills/img/volcanic",
   [2] = "/modules/game_skills/img/seavell",
   [3] = "/modules/game_skills/img/orebound",
   [4] = "/modules/game_skills/img/wingeon",
   [5] = "/modules/game_skills/img/malefic",
   [6] = "/modules/game_skills/img/gardestrike",
   [7] = "/modules/game_skills/img/psycraft",
   [8] = "/modules/game_skills/img/naturia",
   [9] = "/modules/game_skills/img/raibolt",
}
 
function init()
  connect(LocalPlayer, {
    onExperienceChange = onExperienceChange,
    onLevelChange = onLevelChange,
    onHealthChange = onHealthChange,
    onManaChange = onManaChange,
    onSoulChange = onSoulChange,
    onFreeCapacityChange = onFreeCapacityChange,
    onTotalCapacityChange = onTotalCapacityChange,
    onStaminaChange = onStaminaChange,
    onOfflineTrainingChange = onOfflineTrainingChange,
    onRegenerationChange = onRegenerationChange,
    onSpeedChange = onSpeedChange,
    onBaseSpeedChange = onBaseSpeedChange,
    onMagicLevelChange = onMagicLevelChange,
    onBaseMagicLevelChange = onBaseMagicLevelChange,
    onSkillChange = onSkillChange,
    onBaseSkillChange = onBaseSkillChange
  })
  connect(g_game, {
    onGameStart = refresh,
    onGameEnd = offline
  })
  connect(g_game, 'onTextMessage', getParams)
  connect(g_game, {onGameStart = changeImg})
 
  skillsButton = modules.client_topmenu.addCustomRightButton('skillsButton', tr('skills') .. ' (Ctrl+S)', '/modules/game_skills/img/perfil_icon', toggle, true)
  skillsButton:setOn(true)
  skillsWindow = g_ui.loadUI('skills', modules.game_interface.getRightPanel()) -- skills
 
  g_keyboard.bindKeyDown('Ctrl+S', toggle)
 
  refresh()
  skillsWindow:setup()
end
 
function terminate()
  disconnect(LocalPlayer, {
    onExperienceChange = onExperienceChange,
    onLevelChange = onLevelChange,
    onHealthChange = onHealthChange,
    onManaChange = onManaChange,
    onSoulChange = onSoulChange,
    onFreeCapacityChange = onFreeCapacityChange,
    onTotalCapacityChange = onTotalCapacityChange,
    onStaminaChange = onStaminaChange,
    onOfflineTrainingChange = onOfflineTrainingChange,
    onRegenerationChange = onRegenerationChange,
    onSpeedChange = onSpeedChange,
    onBaseSpeedChange = onBaseSpeedChange,
    onMagicLevelChange = onMagicLevelChange,
    onBaseMagicLevelChange = onBaseMagicLevelChange,
    onSkillChange = onSkillChange,
    onBaseSkillChange = onBaseSkillChange
  })
  disconnect(g_game, {
    onGameStart = refresh,
    onGameEnd = offline
  })
  disconnect(g_game, 'onTextMessage', getParams)
  disconnect(g_game, {onGameStart = changeImg})
  
  g_keyboard.unbindKeyDown('Ctrl+S')
  skillsWindow:destroy()
  skillsButton:destroy()
end
 
function changeImg()
  local player = g_game.getLocalPlayer()
  if not player then return end
  g_game.talk("#getSto# 86228")
end
 
function getParams(mode, text)
if not g_game.isOnline() then return end
   if mode == MessageModes.Failure then 
      if text:find("#getSto#") then
         local icon = skillsWindow:recursiveGetChildById("clanicon")
         if icon then
            local t = string.explode(text, " ")
            icon:setImageSource(imgs[tonumber(t[2])])
         end
      end
   end
end
 
function expForLevel(level)
  return math.floor((50*level*level*level)/3 - 100*level*level + (850*level)/3 - 200)
end
 
function expToAdvance(currentLevel, currentExp)
  return expForLevel(currentLevel+1) - currentExp
end
 
function resetSkillColor(id)
  local skill = skillsWindow:recursiveGetChildById(id)
  local widget = skill:getChildById('value')
  widget:setColor('#bbbbbb')
end
 
function setSkillBase(id, value, baseValue)
  if baseValue <= 0 or value < 0 then
    return
  end
  local skill = skillsWindow:recursiveGetChildById(id)
  local widget = skill:getChildById('value')
 
  if value > baseValue then
    widget:setColor('#008b00') -- green
    skill:setTooltip(baseValue .. ' +' .. (value - baseValue))
  elseif value < baseValue then
    widget:setColor('#b22222') -- red
    skill:setTooltip(baseValue .. ' ' .. (value - baseValue))
  else
    widget:setColor('#bbbbbb') -- default
    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')
  widget:setPercent(math.floor(percent))
 
  if tooltip then
    widget:setTooltip(tooltip)
  end
end
 
function checkAlert(id, value, maxValue, threshold, greaterThan)
  if greaterThan == nil then greaterThan = false end
  local alert = false
 
  -- maxValue can be set to false to check value and threshold
  -- used for regeneration checking
  if type(maxValue) == 'boolean' then
    if maxValue then
      return
    end
 
    if greaterThan then
      if value > threshold then
        alert = true
      end
    else
      if value < threshold then
        alert = true
      end
    end
  elseif type(maxValue) == 'number' then
    if maxValue < 0 then
      return
    end
 
    local percent = math.floor((value / maxValue) * 100)
    if greaterThan then
      if percent > threshold then
        alert = true
      end
    else
      if percent < threshold then
        alert = true
      end
    end
  end
 
  if alert then
    setSkillColor(id, '#b22222') -- red
  else
    resetSkillColor(id)
  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
  
  if expSpeedEvent then expSpeedEvent:cancel() end
  expSpeedEvent = cycleEvent(checkExpSpeed, 30*1000)
 
  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())
 
  for i=0,6 do
    onSkillChange(player, i, player:getSkillLevel(i), player:getSkillLevelPercent(i))
    onBaseSkillChange(player, i, player:getSkillBaseLevel(i))
  end
 
  update()
 
  local contentsPanel = skillsWindow:getChildById('contentsPanel')
  skillsWindow:setContentMinimumHeight(110)
  skillsWindow:setContentMaximumHeight(210)
end
 
function offline()
  if expSpeedEvent then expSpeedEvent:cancel() expSpeedEvent = nil end
end
 
function toggle()
  if skillsButton:isOn() then
    skillsWindow:close()
    skillsButton:setOn(false)
  else
    skillsWindow:open()
    skillsButton:setOn(true)
    skillsButton:setOpacity(1.0)
  end
end
 
function checkExpSpeed()
  local player = g_game.getLocalPlayer()
  if not player then return end
  
  local currentExp = player:getExperience()
  local currentTime = g_clock.seconds()
  if player.lastExps ~= nil then
    player.expSpeed = (currentExp - player.lastExps[1][1])/(currentTime - player.lastExps[1][2])
    onLevelChange(player, player:getLevel(), player:getLevelPercent())
  else
    player.lastExps = {}
  end
  table.insert(player.lastExps, {currentExp, currentTime})
  if #player.lastExps > 30 then
    table.remove(player.lastExps, 1)
  end
end
 
function onMiniWindowClose()
  skillsButton:setOn(false)
  skillsButton:setOpacity(0.5)
end
 
function 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
 
function onExperienceChange(localPlayer, value)
  setSkillValue('level', value)
end
 
function onLevelChange(localPlayer, value, percent)
  setSkillValue('experience', localPlayer:getName())
  setSkillValue('experiencee', value)
  local text = tr('You have %s percent to go', 100 - percent) .. '\n' ..
               tr('%s of experience left', expToAdvance(localPlayer:getLevel(), localPlayer:getExperience()))
 
  if localPlayer.expSpeed ~= nil then
     local expPerHour = math.floor(localPlayer.expSpeed * 3600)
     if expPerHour > 0 then
        local nextLevelExp = expForLevel(localPlayer:getLevel()+1)
        local hoursLeft = (nextLevelExp - localPlayer:getExperience()) / expPerHour
        local minutesLeft = math.floor((hoursLeft - math.floor(hoursLeft))*60)
        hoursLeft = math.floor(hoursLeft)
        text = text .. '\n' .. tr('%d of experience per hour', expPerHour)
        text = text .. '\n' .. tr('Next level in %d hours and %d minutes', hoursLeft, minutesLeft)
     end
  end
 
  setSkillPercent('level', percent, text)
end
 
function onHealthChange(localPlayer, health, maxHealth, percent)
  setSkillValue('health', health)
  checkAlert('health', health, maxHealth, 30)
  local widget = skillsWindow:recursiveGetChildById('health')
  local progressBar = widget:getChildById('percent')
  progressBar:setValue(percent, 0, 100)
end
 
function onManaChange(localPlayer, mana, maxMana)
  setSkillValue('mana', mana)
  checkAlert('mana', mana, maxMana, 30)
end
 
function onSoulChange(localPlayer, soul)
  setSkillValue('soul', soul)
end
 
function onFreeCapacityChange(localPlayer, freeCapacity)
  setSkillValue('capacity', freeCapacity)
  checkAlert('capacity', freeCapacity, localPlayer:getTotalCapacity(), 20)
end
 
function onTotalCapacityChange(localPlayer, totalCapacity)
  checkAlert('capacity', localPlayer:getFreeCapacity(), totalCapacity, 20)
end
 
function onStaminaChange(localPlayer, stamina)
  local hours = math.floor(stamina / 60)
  local minutes = stamina % 60
  if minutes < 10 then
    minutes = '0' .. minutes
  end
  setSkillValue('stamina', hours .. ":" .. minutes)
end
 
function onOfflineTrainingChange(localPlayer, offlineTrainingTime)
  if not g_game.getFeature(GameOfflineTrainingTime) then
    return
  end
  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)
  if not g_game.getFeature(GamePlayerRegenerationTime) or regenerationTime < 0 then
    return
  end
  local minutes = math.floor(regenerationTime / 60)
  local seconds = regenerationTime % 60
  if seconds < 10 then
    seconds = '0' .. seconds
  end
 
  setSkillValue('regenerationTime', minutes .. ":" .. seconds)
  checkAlert('regenerationTime', regenerationTime, false, 300)
end
 
function onSpeedChange(localPlayer, speed)
  setSkillValue('speed', speed)
 
  onBaseSpeedChange(localPlayer, localPlayer:getBaseSpeed())
end
 
function onBaseSpeedChange(localPlayer, baseSpeed)
  setSkillBase('speed', localPlayer:getSpeed(), baseSpeed)
end
 
function onMagicLevelChange(localPlayer, magiclevel, percent)
  setSkillValue('magiclevel', magiclevel)
  setSkillPercent('magiclevel', percent, tr('You have %s percent to go', 100 - percent))
 
  onBaseMagicLevelChange(localPlayer, localPlayer:getBaseMagicLevel())
end
 
function onBaseMagicLevelChange(localPlayer, baseMagicLevel)
  setSkillBase('magiclevel', localPlayer:getMagicLevel(), baseMagicLevel)
end
 
function onSkillChange(localPlayer, id, level, percent)
  setSkillValue('skillId' .. id, level)
  setSkillPercent('skillId2', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId3', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId4', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId5', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('skillId6', percent, tr('You have %s percent to go', 100 - percent))
  setSkillPercent('health', percent, tr('Sua vida', 100 - percent))
 
  onBaseSkillChange(localPlayer, id, localPlayer:getSkillBaseLevel(id))
end
 
function onBaseSkillChange(localPlayer, id, baseLevel)
  setSkillBase('skillId'..id, localPlayer:getSkillLevel(id), baseLevel)
end

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×