mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-04-30 11:19:21 +02:00
309 lines
8.9 KiB
Lua
309 lines
8.9 KiB
Lua
-- sponsored by kivera-global.com
|
|
|
|
local preyWindow
|
|
local preyButton
|
|
local msgWindow
|
|
local bankGold = 0
|
|
local inventoryGold = 0
|
|
local rerollPrice = 0
|
|
local bonusRerolls = 0
|
|
|
|
local PREY_BONUS_DAMAGE_BOOST = 0
|
|
local PREY_BONUS_DAMAGE_REDUCTION = 1
|
|
local PREY_BONUS_XP_BONUS = 2
|
|
local PREY_BONUS_IMPROVED_LOOT = 3
|
|
local PREY_BONUS_NONE = 4
|
|
|
|
local PREY_ACTION_LISTREROLL = 0
|
|
local PREY_ACTION_BONUSREROLL = 1
|
|
local PREY_ACTION_MONSTERSELECTION = 2
|
|
local PREY_ACTION_REQUEST_ALL_MONSTERS = 3
|
|
local PREY_ACTION_CHANGE_FROM_ALL = 4
|
|
local PREY_ACTION_LOCK_PREY = 5
|
|
|
|
|
|
function bonusDescription(bonusType, bonusValue, bonusGrade)
|
|
if bonusType == PREY_BONUS_DAMAGE_BOOST then
|
|
return "Damage bonus (" .. bonusGrade .. "/10)"
|
|
elseif bonusType == PREY_BONUS_DAMAGE_REDUCTION then
|
|
return "Damage reduction bonus (" .. bonusGrade .. "/10)"
|
|
elseif bonusType == PREY_BONUS_XP_BONUS then
|
|
return "XP bonus (" .. bonusGrade .. "/10)"
|
|
elseif bonusType == PREY_BONUS_IMPROVED_LOOT then
|
|
return "Loot bonus (" .. bonusGrade .. "/10)"
|
|
elseif bonusType == PREY_BONUS_DAMAGE_BOOST then
|
|
return "-"
|
|
end
|
|
return "Uknown bonus"
|
|
end
|
|
|
|
function timeleftTranslation(timeleft, forPreyTimeleft) -- in seconds
|
|
if timeleft == 0 then
|
|
if forPreyTimeleft then
|
|
return tr("infinite bonus")
|
|
end
|
|
return tr("Available now")
|
|
end
|
|
local minutes = math.ceil(timeleft / 60)
|
|
local hours = math.floor(minutes / 60)
|
|
minutes = minutes - hours * 60
|
|
if hours > 0 then
|
|
if forPreyTimeleft then
|
|
return "" .. hours .. "h " .. minutes .. "m"
|
|
end
|
|
return tr("Available in") .. " " .. hours .. "h " .. minutes .. "m"
|
|
end
|
|
if forPreyTimeleft then
|
|
return "" .. minutes .. "m"
|
|
end
|
|
return tr("Available in") .. " " .. minutes .. "m"
|
|
end
|
|
|
|
function init()
|
|
connect(g_game, {
|
|
onGameStart = check,
|
|
onGameEnd = hide,
|
|
onResourceBalance = onResourceBalance,
|
|
onPreyFreeRolls = onPreyFreeRolls,
|
|
onPreyTimeLeft = onPreyTimeLeft,
|
|
onPreyPrice = onPreyPrice,
|
|
onPreyLocked = onPreyLocked,
|
|
onPreyInactive = onPreyInactive,
|
|
onPreyActive = onPreyActive,
|
|
onPreySelection = onPreySelection
|
|
})
|
|
|
|
preyWindow = g_ui.displayUI('prey')
|
|
preyWindow:hide()
|
|
if g_game.isOnline() then
|
|
check()
|
|
end
|
|
end
|
|
|
|
function terminate()
|
|
disconnect(g_game, {
|
|
onGameStart = check,
|
|
onGameEnd = hide,
|
|
onResourceBalance = onResourceBalance,
|
|
onPreyFreeRolls = onPreyFreeRolls,
|
|
onPreyTimeLeft = onPreyTimeLeft,
|
|
onPreyPrice = onPreyPrice,
|
|
onPreyLocked = onPreyLocked,
|
|
onPreyInactive = onPreyInactive,
|
|
onPreyActive = onPreyActive,
|
|
onPreySelection = onPreySelection
|
|
})
|
|
|
|
if preyButton then
|
|
preyButton:destroy()
|
|
end
|
|
preyWindow:destroy()
|
|
if msgWindow then
|
|
msgWindow:destroy()
|
|
msgWindow = nil
|
|
end
|
|
end
|
|
|
|
function check()
|
|
if g_game.getFeature(GamePrey) then
|
|
if not preyButton then
|
|
preyButton = modules.client_topmenu.addRightGameToggleButton('preyButton', tr('Preys'), '/images/topbuttons/prey', toggle)
|
|
end
|
|
elseif preyButton then
|
|
preyButton:destroy()
|
|
preyButton = nil
|
|
end
|
|
end
|
|
|
|
function hide()
|
|
preyWindow:hide()
|
|
if msgWindow then
|
|
msgWindow:destroy()
|
|
msgWindow = nil
|
|
end
|
|
end
|
|
|
|
function show()
|
|
if not g_game.getFeature(GamePrey) then
|
|
return hide()
|
|
end
|
|
preyWindow:show()
|
|
preyWindow:raise()
|
|
preyWindow:focus()
|
|
--g_game.preyRequest() -- update preys, it's for tibia 12
|
|
end
|
|
|
|
function toggle()
|
|
if preyWindow:isVisible() then
|
|
return hide()
|
|
end
|
|
show()
|
|
end
|
|
|
|
function onPreyFreeRolls(slot, timeleft)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
if prey.state ~= "active" and prey.state ~= "selection" then
|
|
return
|
|
end
|
|
prey.bottomLabel:setText(tr("Free list reroll") .. ": \n" .. timeleftTranslation(timeleft * 60))
|
|
end
|
|
|
|
function onPreyTimeLeft(slot, timeleft)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
if prey.state ~= "active" then
|
|
return
|
|
end
|
|
prey.description:setText(tr("Time left") .. ": " .. timeleftTranslation(timeleft, true))
|
|
end
|
|
|
|
function onPreyPrice(price)
|
|
rerollPrice = price
|
|
preyWindow.rerollPrice:setText(tr("Reroll price") .. ":\n" .. price)
|
|
end
|
|
|
|
function onPreyLocked(slot, unlockState, timeUntilFreeReroll)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
prey.state = "locked"
|
|
prey.title:setText(tr("Prey Locked"))
|
|
prey.list:hide()
|
|
prey.listScrollbar:hide()
|
|
prey.creature:hide()
|
|
prey.description:hide()
|
|
prey.bonuses:hide()
|
|
prey.button:hide()
|
|
prey.bottomLabel:show()
|
|
if unlockState == 0 then
|
|
prey.bottomLabel:setText(tr("You need to have premium account and buy this prey slot in the game store."))
|
|
elseif unlockState == 1 then
|
|
prey.bottomLabel:setText(tr("You need to buy this prey slot in the game store."))
|
|
else
|
|
prey.bottomLabel:setText(tr("You can't unlock it."))
|
|
prey.bottomButton:hide()
|
|
end
|
|
if (unlockState == 0 or unlockState == 1) and modules.game_shop then
|
|
prey.bottomButton:setText("Open game store")
|
|
prey.bottomButton.onClick = function() hide() modules.game_shop.show() end
|
|
prey.bottomButton:show()
|
|
end
|
|
end
|
|
|
|
function onPreyInactive(slot, timeUntilFreeReroll)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
prey.state = "inactive"
|
|
prey.title:setText(tr("Prey Inactive"))
|
|
prey.list:hide()
|
|
prey.listScrollbar:hide()
|
|
prey.creature:hide()
|
|
prey.description:hide()
|
|
prey.bonuses:hide()
|
|
prey.button:hide()
|
|
prey.bottomLabel:hide()
|
|
|
|
prey.bottomLabel:setText(tr("Free list reroll")..": \n" .. timeleftTranslation(timeUntilFreeReroll * 60))
|
|
prey.bottomLabel:show()
|
|
if timeUntilFreeReroll > 0 then
|
|
prey.bottomButton:setText(tr("Buy list reroll"))
|
|
else
|
|
prey.bottomButton:setText(tr("Free list reroll"))
|
|
end
|
|
prey.bottomButton:show()
|
|
prey.bottomButton.onClick = function()
|
|
g_game.preyAction(slot, PREY_ACTION_LISTREROLL, 0)
|
|
end
|
|
end
|
|
|
|
function onPreyActive(slot, currentHolderName, currentHolderOutfit, bonusType, bonusValue, bonusGrade, timeLeft, timeUntilFreeReroll)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
prey.state = "active"
|
|
prey.title:setText(currentHolderName)
|
|
prey.list:hide()
|
|
prey.listScrollbar:hide()
|
|
prey.creature:show()
|
|
prey.creature:setOutfit(currentHolderOutfit)
|
|
prey.description:setText(tr("Time left") .. ": " .. timeleftTranslation(timeLeft, true))
|
|
prey.description:show()
|
|
prey.bonuses:setText(bonusDescription(bonusType, bonusValue, bonusGrade))
|
|
prey.bonuses:show()
|
|
prey.button:setText(tr("Bonus reroll"))
|
|
prey.button:show()
|
|
prey.bottomLabel:setText(tr("Free list reroll")..": \n" .. timeleftTranslation(timeUntilFreeReroll * 60))
|
|
prey.bottomLabel:show()
|
|
if timeUntilFreeReroll > 0 then
|
|
prey.bottomButton:setText(tr("Buy list reroll"))
|
|
else
|
|
prey.bottomButton:setText(tr("Free list reroll"))
|
|
end
|
|
prey.bottomButton:show()
|
|
|
|
prey.button.onClick = function()
|
|
if bonusRerolls == 0 then
|
|
return showMessage(tr("Error"), tr("You don't have any bonus rerolls.\nYou can buy them in ingame store."))
|
|
end
|
|
g_game.preyAction(slot, PREY_ACTION_BONUSREROLL, 0)
|
|
end
|
|
|
|
prey.bottomButton.onClick = function()
|
|
g_game.preyAction(slot, PREY_ACTION_LISTREROLL, 0)
|
|
end
|
|
end
|
|
|
|
function onPreySelection(slot, bonusType, bonusValue, bonusGrade, names, outfits, timeUntilFreeReroll)
|
|
local prey = preyWindow["slot" .. (slot + 1)]
|
|
if not prey then return end
|
|
prey.state = "selection"
|
|
prey.title:setText(tr("Select monster"))
|
|
prey.list:show()
|
|
prey.listScrollbar:show()
|
|
prey.creature:hide()
|
|
prey.description:hide()
|
|
prey.bonuses:hide()
|
|
prey.button:setText(tr("Select"))
|
|
prey.button:show()
|
|
prey.bottomLabel:setText("Free list reroll: \n" .. timeleftTranslation(timeUntilFreeReroll * 60))
|
|
prey.bottomLabel:show()
|
|
prey.bottomButton:hide()
|
|
prey.list:destroyChildren()
|
|
for i, name in ipairs(names) do
|
|
local label = g_ui.createWidget("PreySelectionLabel", prey.list)
|
|
label:setText(name)
|
|
label.creature:setOutfit(outfits[i])
|
|
end
|
|
prey.button.onClick = function()
|
|
local child = prey.list:getFocusedChild()
|
|
if not child then
|
|
return showMessage(tr("Error"), tr("Select monster to proceed."))
|
|
end
|
|
local index = prey.list:getChildIndex(child)
|
|
g_game.preyAction(slot, PREY_ACTION_MONSTERSELECTION, index - 1)
|
|
end
|
|
end
|
|
|
|
function onResourceBalance(type, balance)
|
|
if type == 0 then -- bank gold
|
|
bankGold = balance
|
|
elseif type == 1 then -- inventory gold
|
|
inventoryGold = balance
|
|
elseif type == 10 then -- bonus rerolls
|
|
bonusRerolls = balance
|
|
preyWindow.bonusRerolls:setText(tr("Available bonus rerolls") .. ":\n" .. balance)
|
|
end
|
|
|
|
if type == 0 or type == 1 then
|
|
preyWindow.balance:setText(tr("Balance") .. ":\n" .. (bankGold + inventoryGold))
|
|
end
|
|
end
|
|
|
|
function showMessage(title, message)
|
|
if msgWindow then
|
|
msgWindow:destroy()
|
|
end
|
|
|
|
msgWindow = displayInfoBox(title, message)
|
|
msgWindow:show()
|
|
msgWindow:raise()
|
|
msgWindow:focus()
|
|
end |