From 304e2f02ae0d46a3cc688d25d78a69c8d5fde520 Mon Sep 17 00:00:00 2001 From: OTCv8 Date: Sat, 14 Mar 2020 10:05:10 +0100 Subject: [PATCH] Bug fixes for imbuing --- data/images/game/imbuing/100percent.png | Bin 0 -> 3868 bytes data/images/game/imbuing/clear.png | Bin 0 -> 5549 bytes data/images/game/imbuing/imbue_empty.png | Bin 0 -> 4291 bytes data/images/game/imbuing/imbue_green.png | Bin 0 -> 5541 bytes data/images/game/imbuing/slot.png | Bin 0 -> 1532 bytes data/images/game/imbuing/slot_disabled.png | Bin 0 -> 1484 bytes data/images/game/imbuing/slot_inactive.png | Bin 0 -> 1589 bytes modules/game_imbuement/imbuement.lua | 39 --- modules/game_imbuement/imbuement.otmod | 9 - modules/game_imbuement/imbuement.otui | 199 ------------ modules/game_imbuing/imbuing.lua | 304 ++++++++++++++++++ modules/game_imbuing/imbuing.otmod | 9 + modules/game_imbuing/imbuing.otui | 346 +++++++++++++++++++++ modules/game_interface/interface.otmod | 2 +- 14 files changed, 660 insertions(+), 248 deletions(-) create mode 100644 data/images/game/imbuing/100percent.png create mode 100644 data/images/game/imbuing/clear.png create mode 100644 data/images/game/imbuing/imbue_empty.png create mode 100644 data/images/game/imbuing/imbue_green.png create mode 100644 data/images/game/imbuing/slot.png create mode 100644 data/images/game/imbuing/slot_disabled.png create mode 100644 data/images/game/imbuing/slot_inactive.png delete mode 100644 modules/game_imbuement/imbuement.lua delete mode 100644 modules/game_imbuement/imbuement.otmod delete mode 100644 modules/game_imbuement/imbuement.otui create mode 100644 modules/game_imbuing/imbuing.lua create mode 100644 modules/game_imbuing/imbuing.otmod create mode 100644 modules/game_imbuing/imbuing.otui diff --git a/data/images/game/imbuing/100percent.png b/data/images/game/imbuing/100percent.png new file mode 100644 index 0000000000000000000000000000000000000000..9d26eb54c414812924eeaa0c1627731b3a4d465d GIT binary patch literal 3868 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 O3n1aB*vDwE)c*t7^wz@w literal 0 HcmV?d00001 diff --git a/data/images/game/imbuing/clear.png b/data/images/game/imbuing/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..f18e66712a5895904583cab7b9e2af64b2a45a45 GIT binary patch literal 5549 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 literal 0 HcmV?d00001 diff --git a/data/images/game/imbuing/imbue_green.png b/data/images/game/imbuing/imbue_green.png new file mode 100644 index 0000000000000000000000000000000000000000..19e4a92d84537766c96d2a99aa17f225dda1a135 GIT binary patch literal 5541 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 literal 0 HcmV?d00001 diff --git a/data/images/game/imbuing/slot.png b/data/images/game/imbuing/slot.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b1e051ea391bed2a407c1976792eb94c7838f2 GIT binary patch literal 1532 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 literal 0 HcmV?d00001 diff --git a/modules/game_imbuement/imbuement.lua b/modules/game_imbuement/imbuement.lua deleted file mode 100644 index 3c8c414..0000000 --- a/modules/game_imbuement/imbuement.lua +++ /dev/null @@ -1,39 +0,0 @@ - function init() - connect(g_game, { - onImbuementWindow = onImbuementWindow, - onCloseImbuementWindow = onCloseImbuementWindow - }) -end - -function terminate() - disconnect(g_game, { - onImbuementWindow = onImbuementWindow, - onCloseImbuementWindow = onCloseImbuementWindow - }) - -end - -function onImbuementWindow(itemId, slots, activeSlots, imbuements, needItems) - print("window " .. slots) - for i, slot in pairs(activeSlots) do - local duration = slot.duration - local removalCost = slot.removalCost - local imbuement = slot.imbuement - for i, source in pairs(imbuement.sources) do - print(source.description, source.item:getId(), source.item:getCount()) - end - - end - for i, imbuement in ipairs(imbuements) do - for i, source in pairs(imbuement.sources) do - print(source.description, source.item:getId(), source.item:getCount()) - end - end - for i, item in ipairs(needItems) do - print(item:getId(), item:getCount()) - end -end - -function onCloseImbuementWindow() - print("close") -end \ No newline at end of file diff --git a/modules/game_imbuement/imbuement.otmod b/modules/game_imbuement/imbuement.otmod deleted file mode 100644 index d690907..0000000 --- a/modules/game_imbuement/imbuement.otmod +++ /dev/null @@ -1,9 +0,0 @@ -Module - name: game_imbuement - description: Imbuement - author: otclient.ovh - website: http://otclient.ovh - sandboxed: true - scripts: [ imbuement ] - @onLoad: init() - @onUnload: terminate() diff --git a/modules/game_imbuement/imbuement.otui b/modules/game_imbuement/imbuement.otui deleted file mode 100644 index ddd262d..0000000 --- a/modules/game_imbuement/imbuement.otui +++ /dev/null @@ -1,199 +0,0 @@ -PreySelectionLabel < Label - font: verdana-11px-monochrome - background-color: alpha - text-offset: 34 0 - margin-right: 5 - text-align: center - text-wrap: true - focusable: true - height: 34 - - $focus: - background-color: #00000055 - color: #ffffff - - UICreature - id: creature - size: 32 32 - anchors.top: parent.top - anchors.left: parent.left - margin-top: 1 - -PreySlot < Panel - width: 190 - height: 280 - border: 1 black - padding: 5 - - Label - id: title - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - text-align: center - !text: tr("Prey Inactive") - - TextList - id: list - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - margin-top: 15 - margin-right: 10 - vertical-scrollbar: listScrollbar - height: 150 - visible: false - focusable: false - - VerticalScrollBar - id: listScrollbar - anchors.top: prev.top - anchors.bottom: prev.bottom - anchors.right: parent.right - pixels-scroll: true - visible: false - step: 10 - - UICreature - id: creature - anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - margin-top: 40 - height: 64 - width: 64 - visible: false - - Label - id: description - margin-top: 30 - margin-left: 5 - margin-right: 5 - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - text-auto-resize: true - text-align: center - text-wrap: true - visible: false - - Label - id: bonuses - margin-top: 5 - margin-left: 5 - margin-right: 5 - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - text-auto-resize: true - text-align: center - text-wrap: true - visible: false - - Button - id: button - margin-top: 5 - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - margin-left: 10 - margin-right: 10 - visible: false - - Label - id: bottomLabel - margin-left: 5 - margin-right: 5 - margin-bottom: 5 - anchors.bottom: next.top - anchors.left: parent.left - anchors.right: parent.right - text-auto-resize: true - text-align: center - text-wrap: true - visible: false - - Button - id: bottomButton - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - margin-left: 10 - margin-right: 10 - text: 11 - visible: false - - $hidden: - height: 0 - - $!hidden: - height: 22 - -MainWindow - id: preyWindow - !text: tr('Preys') - size: 600 405 - background-color: #AAAAAA - @onEscape: modules.game_prey.hide() - - PreySlot - id: slot1 - anchors.left: parent.left - anchors.top: parent.top - - PreySlot - id: slot2 - anchors.left: prev.right - anchors.top: prev.top - - PreySlot - id: slot3 - anchors.left: prev.right - anchors.top: prev.top - - HorizontalSeparator - id: mainSeparator - anchors.top: slot3.bottom - anchors.left: parent.left - anchors.right: parent.right - margin-top: 5 - - Label - id: rerollPrice - anchors.top: mainSeparator.bottom - anchors.left: parent.left - margin-top: 5 - width: 190 - height: 30 - text-align: center - - Label - id: balance - anchors.top: mainSeparator.bottom - anchors.left: prev.right - margin-top: 5 - width: 190 - height: 30 - text-align: center - - Label - id: bonusRerolls - anchors.top: mainSeparator.bottom - anchors.left: prev.right - margin-top: 5 - width: 190 - height: 30 - text-align: center - - HorizontalSeparator - anchors.bottom: buttonCancel.top - anchors.left: parent.left - anchors.right: parent.right - margin-bottom: 5 - - Button - id: buttonCancel - !text: tr('Close') - width: 64 - anchors.right: parent.right - anchors.bottom: parent.bottom - @onClick: modules.game_prey.hide() \ No newline at end of file diff --git a/modules/game_imbuing/imbuing.lua b/modules/game_imbuing/imbuing.lua new file mode 100644 index 0000000..c551f2f --- /dev/null +++ b/modules/game_imbuing/imbuing.lua @@ -0,0 +1,304 @@ +local imbuingWindow +local bankGold = 0 +local inventoryGold = 0 +local itemImbuements = {} +local emptyImbue +local groupsCombo +local imbueLevelsCombo +local protectionBtn +local clearImbue +local selectedImbue +local imbueItems = {} +local protection = false +local clearConfirmWindow +local imbueConfirmWindow + +function init() + connect(g_game, { + onGameEnd = hide, + onResourceBalance = onResourceBalance, + onImbuementWindow = onImbuementWindow, + onCloseImbuementWindow = onCloseImbuementWindow + }) + + imbuingWindow = g_ui.displayUI('imbuing') + emptyImbue = imbuingWindow.emptyImbue + groupsCombo = emptyImbue.groups + imbueLevelsCombo = emptyImbue.imbuement + protectionBtn = emptyImbue.protection + clearImbue = imbuingWindow.clearImbue + imbuingWindow:hide() + + groupsCombo.onOptionChange = function(widget) + imbueLevelsCombo:clear() + if itemImbuements ~= nil then + local selectedGroup = widget:getCurrentOption()["text"] + selectedImbue = itemImbuements[widget.currentIndex] + for _,imbuement in ipairs(itemImbuements) do + if imbuement["group"] == selectedGroup then + emptyImbue.imbuement:addOption(imbuement["name"]) + end + end + end + end + + imbueLevelsCombo.onOptionChange = function(widget) + setProtection(false) + for _,imbuement in ipairs(itemImbuements) do + if imbuement["group"] == selectedImbue["group"] then + if #imbuement["sources"] == widget.currentIndex then + selectedImbue = imbuement + for i,source in ipairs(imbuement["sources"]) do + for _,item in ipairs(imbueItems) do + if item:getId() == source["item"]:getId() then + if item:getCount() >= source["item"]:getCount() then + emptyImbue.imbue:setImageSource("/images/game/imbuing/imbue_green") + emptyImbue.imbue:setEnabled(true) + emptyImbue.requiredItems:getChildByIndex(i).count:setColor("white") + end + if item:getCount() < source["item"]:getCount() then + emptyImbue.imbue:setEnabled(false) + emptyImbue.imbue:setImageSource("/images/game/imbuing/imbue_empty") + emptyImbue.requiredItems:getChildByIndex(i).count:setColor("red") + end + emptyImbue.requiredItems:getChildByIndex(i).count:setText(item:getCount() .. "/" .. source["item"]:getCount()) + end + end + emptyImbue.requiredItems:getChildByIndex(i).item:setItemId(source["item"]:getId()) + emptyImbue.requiredItems:getChildByIndex(i).item:setTooltip("The imbuement requires " .. source["description"] .. ".") + end + for i = 3, widget.currentIndex + 1, -1 do + emptyImbue.requiredItems:getChildByIndex(i).count:setText("") + emptyImbue.requiredItems:getChildByIndex(i).item:setItemId(0) + emptyImbue.requiredItems:getChildByIndex(i).item:setTooltip("") + end + emptyImbue.protectionCost:setText(imbuement["protectionCost"]) + emptyImbue.cost:setText(imbuement["cost"]) + if not protection and (bankGold + inventoryGold) < imbuement["cost"] then + emptyImbue.imbue:setEnabled(false) + emptyImbue.imbue:setImageSource("/images/game/imbuing/imbue_empty") + emptyImbue.cost:setColor("red") + end + if not protection and (bankGold + inventoryGold) >= imbuement["cost"] then + emptyImbue.cost:setColor("white") + end + if protection and (bankGold + inventoryGold) < (imbuement["cost"] + imbuement["protectionCost"]) then + emptyImbue.imbue:setEnabled(false) + emptyImbue.imbue:setImageSource("/images/game/imbuing/imbue_empty") + emptyImbue.cost:setColor("red") + end + if protection and (bankGold + inventoryGold) >= (imbuement["cost"] + imbuement["protectionCost"]) then + emptyImbue.cost:setColor("white") + end + emptyImbue.successRate:setText(imbuement["successRate"] .. "%") + if selectedImbue["successRate"] > 50 then + emptyImbue.successRate:setColor("white") + else + emptyImbue.successRate:setColor("red") + end + emptyImbue.description:setText(imbuement["description"]) + end + end + end + end + + protectionBtn.onClick = function() + setProtection(not protection) + end +end + +function setProtection(value) + protection = value + if protection then + emptyImbue.successRate:setText("100%") + emptyImbue.successRate:setColor("green") + protectionBtn:setImageClip(torect("66 0 66 66")) + else + if selectedImbue then + emptyImbue.successRate:setText(selectedImbue["successRate"] .. "%") + if selectedImbue["successRate"] > 50 then + emptyImbue.successRate:setColor("white") + else + emptyImbue.successRate:setColor("red") + end + end + protectionBtn:setImageClip(torect("0 0 66 66")) + end +end + +function terminate() + disconnect(g_game, { + onGameEnd = hide, + onResourceBalance = onResourceBalance, + onImbuementWindow = onImbuementWindow, + onCloseImbuementWindow = onCloseImbuementWindow + }) + + imbuingWindow:destroy() +end + +function resetSlots() + emptyImbue:setVisible(false) + clearImbue:setVisible(false) + for i=1,3 do + imbuingWindow.itemInfo.slots:getChildByIndex(i):setText("Slot " .. i) + imbuingWindow.itemInfo.slots:getChildByIndex(i):setEnabled(false) + imbuingWindow.itemInfo.slots:getChildByIndex(i):setTooltip("Items can have up to three imbuements slots. This slot is not available for this item.") + imbuingWindow.itemInfo.slots:getChildByIndex(i).onClick = nil + end +end + +function selectSlot(widget, slotId, activeSlot) + if activeSlot then + emptyImbue:setVisible(false) + widget:setText(activeSlot[1]["name"]) + clearImbue.title:setText('Clear Imbuement "' .. activeSlot[1]["name"] .. '"') + clearImbue.groups:clear() + clearImbue.groups:addOption(activeSlot[1]["group"]) + clearImbue.imbuement:clear() + clearImbue.imbuement:addOption(activeSlot[1]["name"]) + clearImbue.description:setText(activeSlot[1]["description"]) + + hours = string.format("%02.f", math.floor(activeSlot[2]/3600)) + mins = string.format("%02.f", math.floor(activeSlot[2]/60 - (hours*60))) + clearImbue.time.timeRemaining:setText(hours..":"..mins.."h") + + clearImbue.cost:setText(activeSlot[3]) + if (bankGold + inventoryGold) < activeSlot[3] then + emptyImbue.clear:setEnabled(false) + emptyImbue.clear:setImageSource("/images/game/imbuing/imbue_empty") + emptyImbue.cost:setColor("red") + end + + local yesCallback = function() + g_game.clearImbuement(slotId) + widget:setText("Slot " .. (slotId + 1)) + if clearConfirmWindow then + clearConfirmWindow:destroy() + clearConfirmWindow=nil + end + end + local noCallback = function() + imbuingWindow:show() + if clearConfirmWindow then + clearConfirmWindow:destroy() + clearConfirmWindow=nil + end + end + + clearImbue.clear.onClick = function() + imbuingWindow:hide() + clearConfirmWindow = displayGeneralBox(tr('Confirm Clearing'), tr('Do you wish to spend ' .. activeSlot[3] .. ' gold coins to clear the imbuement "' .. activeSlot[1]["name"] .. '" from your item?'), { + { text=tr('Yes'), callback=yesCallback }, + { text=tr('No'), callback=noCallback }, + anchor=AnchorHorizontalCenter}, yesCallback, noCallback) + end + + clearImbue:setVisible(true) + else + emptyImbue:setVisible(true) + clearImbue:setVisible(false) + + local yesCallback = function() + g_game.applyImbuement(slotId, selectedImbue["id"], protection) + if clearConfirmWindow then + clearConfirmWindow:destroy() + clearConfirmWindow=nil + end + widget:setText(selectedImbue["name"]) + imbuingWindow:show() + end + local noCallback = function() + imbuingWindow:show() + if clearConfirmWindow then + clearConfirmWindow:destroy() + clearConfirmWindow=nil + end + end + + emptyImbue.imbue.onClick = function() + imbuingWindow:hide() + clearConfirmWindow = displayGeneralBox(tr('Confirm Imbuing Attempt'), tr('You are about to imbue your item with "' .. selectedImbue["name"] .. '".\nYour chance to succeed is ' .. selectedImbue["successRate"] .. '. It will consume the required astral sources and '.. selectedImbue["cost"]..' gold coins.\nDo you wish to proceed?'), { + { text=tr('Yes'), callback=yesCallback }, + { text=tr('No'), callback=noCallback }, + anchor=AnchorHorizontalCenter}, yesCallback, noCallback) + end + end +end + +function onImbuementWindow(itemId, slots, activeSlots, imbuements, needItems) + if not itemId then + return + end + resetSlots() + imbueItems = table.copy(needItems) + imbuingWindow.itemInfo.item:setItemId(itemId) + + for i=1, slots do + local slot = imbuingWindow.itemInfo.slots:getChildByIndex(i) + slot.onClick = function(widget) + selectSlot(widget, i - 1) + end + slot:setTooltip("Use this slot to imbue your item. Depending on the item you can have up to three different imbuements.") + slot:setEnabled(true) + + if slot:getId() == "slot0" then + selectSlot(slot, i - 1) + end + end + + for i, slot in pairs(activeSlots) do + local activeSlotBtn = imbuingWindow.itemInfo.slots:getChildById("slot" .. i) + activeSlotBtn.onClick = function(widget) + selectSlot(widget, i, slot) + end + if activeSlotBtn:getId() == "slot0" then + selectSlot(activeSlotBtn, i, slot) + end + end + + if imbuements ~= nil then + groupsCombo:clear() + imbueLevelsCombo:clear() + itemImbuements = table.copy(imbuements) + for _,imbuement in ipairs(itemImbuements) do + if not groupsCombo:isOption(imbuement["group"]) then + groupsCombo:addOption(imbuement["group"]) + end + end + end + show() +end + +function onResourceBalance(type, balance) + if type == 0 then + bankGold = balance + elseif type == 1 then + inventoryGold = balance + end + if type == 0 or type == 1 then + imbuingWindow.balance:setText(tr("Balance") .. ":\n" .. (bankGold + inventoryGold)) + end +end + +function onCloseImbuementWindow() + resetSlots() +end + +function hide() + g_game.closeImbuingWindow() + imbuingWindow:hide() +end + +function show() + imbuingWindow:show() + imbuingWindow:raise() + imbuingWindow:focus() +end + +function toggle() + if imbuingWindow:isVisible() then + return hide() + end + show() +end \ No newline at end of file diff --git a/modules/game_imbuing/imbuing.otmod b/modules/game_imbuing/imbuing.otmod new file mode 100644 index 0000000..036a849 --- /dev/null +++ b/modules/game_imbuing/imbuing.otmod @@ -0,0 +1,9 @@ +Module + name: game_imbuing + description: imbuing + author: Vincent#1766 on discord + website: http://otclient.ovh + sandboxed: true + scripts: [ imbuing ] + @onLoad: init() + @onUnload: terminate() \ No newline at end of file diff --git a/modules/game_imbuing/imbuing.otui b/modules/game_imbuing/imbuing.otui new file mode 100644 index 0000000..9ae7505 --- /dev/null +++ b/modules/game_imbuing/imbuing.otui @@ -0,0 +1,346 @@ +Slot < Button + width: 70 + height: 66 + anchors.verticalCenter: parent.verticalCenter + enabled: false + text-wrap: true + !tooltip: tr('Items can have up to three imbuements slots. This slot is not available for this item.') + +RequiredItem < Panel + width: 66 + height: 90 + + UIItem + id: item + height: 66 + width: 66 + anchors.left: parent.left + anchors.top: parent.top + + FlatLabel + id: count + margin-top: 5 + text-align: center + anchors.left: prev.left + anchors.right: prev.right + anchors.top: prev.bottom + +ItemInformation < Panel + height: 100 + border: 1 black + padding: 5 + + Label + id: title + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + text-align: center + !text: tr("Item Information") + + UIItem + id: item + anchors.top: parent.top + anchors.left: parent.left + anchors.VerticalCenter: parent.VerticalCenter + margin-left: 10 + margin-top: 5 + height: 64 + width: 64 + + Panel + id: slots + width: 240 + height: 66 + margin-top: 5 + anchors.VerticalCenter: parent.VerticalCenter + anchors.top: prev.top + anchors.right: parent.right + + Slot + id: slot0 + !text: tr("Slot 1") + text-align: center + anchors.left: parent.left + + Slot + id: slot1 + !text: tr("Slot 2") + text-align: center + margin-left: 10 + anchors.left: prev.right + + Slot + id: slot2 + !text: tr("Slot 3") + text-align: center + margin-left: 10 + anchors.left: prev.right + + Label + id: selectSlot + margin-right: 15 + anchors.right: slots.left + anchors.VerticalCenter: parent.VerticalCenter + !text: tr("Select Slot:") + +EmptyImbue < Panel + height: 240 + border: 1 black + padding: 5 + + Label + id: title + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + text-align: center + !text: tr("Imbue Empty Slot") + + ComboBox + id: groups + anchors.top: title.bottom + anchors.left: parent.left + anchors.right: parent.HorizontalCenter + margin-right: 3 + margin-top: 5 + isdisabled: true + + ComboBox + id: imbuement + anchors.top: prev.top + anchors.left: groups.right + anchors.right: parent.right + margin-left: 3 + + Label + id: description + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + margin-top: 10 + height: 85 + + Label + id: info + anchors.bottom: prev.bottom + anchors.left: parent.left + !text: tr('Requires the following astral sources:') + + Label + id: successRate + anchors.top: info.top + anchors.right: parent.right + width: 35 + text-align: right + + Label + id: successRateTitle + anchors.top: info.top + anchors.right: successRate.left + margin-right: 15 + !text: tr('Success Rate:') + + Panel + id: requiredItems + width: 210 + height: 90 + anchors.left: parent.left + anchors.bottom: parent.bottom + + RequiredItem + id: item1 + anchors.left: parent.left + + RequiredItem + id: item2 + margin-left: 10 + anchors.left: prev.right + + RequiredItem + id: item3 + margin-left: 10 + anchors.left: prev.right + + UIButton + id: protection + width: 66 + height: 66 + anchors.top: prev.top + anchors.left: prev.right + image-source: /images/game/imbuing/100percent + image-clip: 0 0 66 66 + margin-left: 15 + !tooltip: ("Bribe the fates! Click here to raise your chance to 100%. For guaranteed success use gold.") + + FlatLabel + id: protectionCost + margin-top: 5 + text-align: center + anchors.left: prev.left + anchors.right: prev.right + anchors.top: prev.bottom + + UIWidget + id: horizontalArrow + anchors.left: prev.right + anchors.verticalCenter: requiredItems.verticalCenter + margin-left: 45 + width: 12 + height: 21 + image-source: /images/ui/arrow_horizontal + image-rect: 0 0 12 21 + image-clip: 12 0 12 21 + phantom: false + + UIButton + id: imbue + width: 128 + height: 66 + anchors.top: requiredItems.top + anchors.right: parent.right + image-source: /images/game/imbuing/imbue_empty + image-clip: 0 0 128 66 + margin-left: 15 + !tooltip: tr("Click here to carry out the selected imbuement. This will consume the required astral sources and gold.") + + $pressed: + image-clip: 0 66 128 66 + + FlatLabel + id: cost + margin-top: 5 + text-align: center + anchors.left: prev.left + anchors.right: prev.right + anchors.top: prev.bottom + +ClearImbue < Panel + height: 240 + border: 1 black + padding: 5 + + Label + id: title + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + text-align: center + !text: tr("Clear Imbuement") + + ComboBox + id: groups + anchors.top: title.bottom + anchors.left: parent.left + anchors.right: parent.HorizontalCenter + margin-right: 3 + margin-top: 5 + enabled: false + + ComboBox + id: imbuement + anchors.top: prev.top + anchors.left: groups.right + anchors.right: parent.right + margin-left: 3 + enabled: false + + Label + id: description + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + margin-top: 10 + height: 85 + + Label + id: info + anchors.bottom: prev.bottom + anchors.left: parent.left + !text: tr('Time remaining:') + + Label + id: clearImbuementTitle + anchors.top: info.top + anchors.right: parent.right + !text: tr('Clear imbuement:') + + Panel + id: time + width: 210 + height: 90 + anchors.left: parent.left + anchors.bottom: parent.bottom + + FlatLabel + id: timeRemaining + size: 86 25 + margin-bottom: 20 + text-align: center + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + + UIButton + id: clear + width: 128 + height: 66 + anchors.top: time.top + anchors.right: parent.right + image-source: /images/game/imbuing/clear + image-clip: 0 0 128 66 + margin-left: 15 + !tooltip: tr("Your needs have changed? Click here to clear the imbuement from your item for a fee.") + + $pressed: + image-clip: 0 66 128 66 + + FlatLabel + id: cost + margin-top: 5 + text-align: center + anchors.left: prev.left + anchors.right: prev.right + anchors.top: prev.bottom + + +MainWindow + id: imbuingWindow + !text: tr('Imbue Item') + size: 550 430 + background-color: #AAAAAA + @onEscape: modules.game_imbuing.hide() + + ItemInformation + id: itemInfo + anchors.left: parent.left + anchors.top: parent.top + anchors.right: parent.right + + EmptyImbue + id: emptyImbue + anchors.left: parent.left + anchors.top: prev.bottom + anchors.right: parent.right + margin-top: 5 + + ClearImbue + id: clearImbue + anchors.left: parent.left + anchors.top: emptyImbue.top + anchors.right: parent.right + + Button + id: close + !text: tr('Close') + width: 50 + anchors.right: parent.right + anchors.bottom: parent.bottom + @onClick: modules.game_imbuing.hide() + + Label + id: balance + height: 25 + anchors.right: prev.left + anchors.left: parent.left + anchors.bottom: parent.bottom diff --git a/modules/game_interface/interface.otmod b/modules/game_interface/interface.otmod index a102c65..93ababe 100644 --- a/modules/game_interface/interface.otmod +++ b/modules/game_interface/interface.otmod @@ -36,7 +36,7 @@ Module - game_textedit - game_actionbar - game_prey - - game_imbuement + - game_imbuing - game_bot @onLoad: init() @onUnload: terminate()