mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-04-29 18:59:20 +02:00
674 lines
19 KiB
Lua
674 lines
19 KiB
Lua
setDefaultTab("Tools")
|
|
local panelName = "renameContainers"
|
|
if type(storage[panelName]) ~= "table" then
|
|
storage[panelName] = {
|
|
enabled = false;
|
|
height = 170,
|
|
purse = true;
|
|
list = {
|
|
{
|
|
value = "Main Backpack",
|
|
enabled = true,
|
|
item = 9601,
|
|
min = false,
|
|
items = { 3081, 3048 }
|
|
},
|
|
{
|
|
value = "Runes",
|
|
enabled = true,
|
|
item = 2866,
|
|
min = true,
|
|
items = { 3161, 3180 }
|
|
},
|
|
{
|
|
value = "Money",
|
|
enabled = true,
|
|
item = 2871,
|
|
min = true,
|
|
items = { 3031, 3035, 3043 }
|
|
},
|
|
{
|
|
value = "Purse",
|
|
enabled = true,
|
|
item = 23396,
|
|
min = true,
|
|
items = {}
|
|
},
|
|
}
|
|
}
|
|
end
|
|
|
|
local config = storage[panelName]
|
|
|
|
UI.Separator()
|
|
local renameContui = setupUI([[
|
|
Panel
|
|
height: 50
|
|
|
|
Label
|
|
text-align: center
|
|
text: Container Panel
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.top: parent.top
|
|
font: verdana-11px-rounded
|
|
|
|
BotSwitch
|
|
id: title
|
|
anchors.top: prev.bottom
|
|
anchors.left: parent.left
|
|
text-align: center
|
|
width: 130
|
|
!text: tr('Open Minimised')
|
|
font: verdana-11px-rounded
|
|
|
|
Button
|
|
id: editContList
|
|
anchors.top: prev.top
|
|
anchors.left: prev.right
|
|
anchors.right: parent.right
|
|
margin-left: 3
|
|
height: 17
|
|
text: Setup
|
|
font: verdana-11px-rounded
|
|
|
|
Button
|
|
id: reopenCont
|
|
!text: tr('Reopen All')
|
|
anchors.left: parent.left
|
|
anchors.top: prev.bottom
|
|
anchors.right: parent.horizontalCenter
|
|
margin-right: 2
|
|
height: 17
|
|
margin-top: 3
|
|
font: verdana-11px-rounded
|
|
|
|
Button
|
|
id: minimiseCont
|
|
!text: tr('Minimise All')
|
|
anchors.top: prev.top
|
|
anchors.left: parent.horizontalCenter
|
|
anchors.right: parent.right
|
|
margin-right: 2
|
|
height: 17
|
|
font: verdana-11px-rounded
|
|
]])
|
|
renameContui:setId(panelName)
|
|
|
|
g_ui.loadUIFromString([[
|
|
BackpackName < Label
|
|
background-color: alpha
|
|
text-offset: 18 2
|
|
focusable: true
|
|
height: 17
|
|
font: verdana-11px-rounded
|
|
|
|
CheckBox
|
|
id: enabled
|
|
anchors.left: parent.left
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: 15
|
|
height: 15
|
|
margin-top: 1
|
|
margin-left: 3
|
|
|
|
$focus:
|
|
background-color: #00000055
|
|
|
|
Button
|
|
id: state
|
|
!text: tr('M')
|
|
anchors.right: remove.left
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
margin-right: 1
|
|
width: 15
|
|
height: 15
|
|
|
|
Button
|
|
id: remove
|
|
!text: tr('X')
|
|
!tooltip: tr('Remove')
|
|
anchors.right: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
margin-right: 15
|
|
width: 15
|
|
height: 15
|
|
|
|
Button
|
|
id: openNext
|
|
!text: tr('N')
|
|
anchors.right: state.left
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
margin-right: 1
|
|
width: 15
|
|
height: 15
|
|
tooltip: Open container inside with the same ID.
|
|
|
|
ContListsWindow < MainWindow
|
|
!text: tr('Container Names')
|
|
size: 465 170
|
|
@onEscape: self:hide()
|
|
|
|
TextList
|
|
id: itemList
|
|
anchors.left: parent.left
|
|
anchors.top: parent.top
|
|
anchors.bottom: separator.top
|
|
width: 200
|
|
margin-bottom: 6
|
|
margin-top: 3
|
|
margin-left: 3
|
|
vertical-scrollbar: itemListScrollBar
|
|
|
|
VerticalScrollBar
|
|
id: itemListScrollBar
|
|
anchors.top: itemList.top
|
|
anchors.bottom: itemList.bottom
|
|
anchors.right: itemList.right
|
|
step: 14
|
|
pixels-scroll: true
|
|
|
|
VerticalSeparator
|
|
id: sep
|
|
anchors.top: parent.top
|
|
anchors.left: itemList.right
|
|
anchors.bottom: separator.top
|
|
margin-top: 3
|
|
margin-bottom: 6
|
|
margin-left: 10
|
|
|
|
Label
|
|
id: lblName
|
|
anchors.left: sep.right
|
|
anchors.top: sep.top
|
|
width: 70
|
|
text: Name:
|
|
margin-left: 10
|
|
margin-top: 3
|
|
font: verdana-11px-rounded
|
|
|
|
TextEdit
|
|
id: contName
|
|
anchors.left: lblName.right
|
|
anchors.top: sep.top
|
|
anchors.right: parent.right
|
|
font: verdana-11px-rounded
|
|
|
|
Label
|
|
id: lblCont
|
|
anchors.left: lblName.left
|
|
anchors.verticalCenter: contId.verticalCenter
|
|
width: 70
|
|
text: Container:
|
|
font: verdana-11px-rounded
|
|
|
|
BotItem
|
|
id: contId
|
|
anchors.left: contName.left
|
|
anchors.top: contName.bottom
|
|
margin-top: 3
|
|
|
|
BotContainer
|
|
id: sortList
|
|
anchors.left: prev.left
|
|
anchors.right: parent.right
|
|
anchors.top: prev.bottom
|
|
anchors.bottom: separator.top
|
|
margin-bottom: 6
|
|
margin-top: 3
|
|
|
|
Label
|
|
anchors.left: lblCont.left
|
|
anchors.verticalCenter: sortList.verticalCenter
|
|
width: 70
|
|
text: Items:
|
|
font: verdana-11px-rounded
|
|
|
|
Button
|
|
id: addItem
|
|
anchors.right: contName.right
|
|
anchors.top: contName.bottom
|
|
margin-top: 5
|
|
text: Add
|
|
width: 40
|
|
font: cipsoftFont
|
|
|
|
HorizontalSeparator
|
|
id: separator
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
anchors.bottom: closeButton.top
|
|
margin-bottom: 8
|
|
|
|
CheckBox
|
|
id: purse
|
|
anchors.left: parent.left
|
|
anchors.bottom: parent.bottom
|
|
text: Open Purse
|
|
tooltip: Opens Store/Charm Purse
|
|
width: 85
|
|
height: 15
|
|
margin-top: 2
|
|
margin-left: 3
|
|
font: verdana-11px-rounded
|
|
|
|
CheckBox
|
|
id: sort
|
|
anchors.left: prev.right
|
|
anchors.bottom: parent.bottom
|
|
text: Sort Items
|
|
tooltip: Sort items based on items widget
|
|
width: 85
|
|
height: 15
|
|
margin-top: 2
|
|
margin-left: 15
|
|
font: verdana-11px-rounded
|
|
|
|
CheckBox
|
|
id: forceOpen
|
|
anchors.left: prev.right
|
|
anchors.bottom: parent.bottom
|
|
text: Keep Open
|
|
tooltip: Will keep open containers all the time
|
|
width: 85
|
|
height: 15
|
|
margin-top: 2
|
|
margin-left: 15
|
|
font: verdana-11px-rounded
|
|
|
|
CheckBox
|
|
id: lootBag
|
|
anchors.left: prev.right
|
|
anchors.bottom: parent.bottom
|
|
text: Loot Bag
|
|
tooltip: Open Loot Bag (gunzodus franchaise)
|
|
width: 85
|
|
height: 15
|
|
margin-top: 2
|
|
margin-left: 15
|
|
font: verdana-11px-rounded
|
|
|
|
Button
|
|
id: closeButton
|
|
!text: tr('Close')
|
|
font: cipsoftFont
|
|
anchors.right: parent.right
|
|
anchors.bottom: parent.bottom
|
|
size: 45 21
|
|
margin-top: 15
|
|
|
|
ResizeBorder
|
|
id: bottomResizeBorder
|
|
anchors.fill: separator
|
|
height: 3
|
|
minimum: 170
|
|
maximum: 245
|
|
margin-left: 3
|
|
margin-right: 3
|
|
background: #ffffff88
|
|
]])
|
|
|
|
function findItemsInArray(t, tfind)
|
|
local tArray = {}
|
|
for x,v in pairs(t) do
|
|
if type(v) == "table" then
|
|
local aItem = t[x].item
|
|
local aEnabled = t[x].enabled
|
|
if aItem then
|
|
if tfind and aItem == tfind then
|
|
return x
|
|
elseif not tfind then
|
|
if aEnabled then
|
|
table.insert(tArray, aItem)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if not tfind then return tArray end
|
|
end
|
|
|
|
local lstBPs
|
|
|
|
|
|
local openContainer = function(id)
|
|
local t = {getRight(), getLeft(), getAmmo()} -- if more slots needed then add them here
|
|
for i=1,#t do
|
|
local slotItem = t[i]
|
|
if slotItem and slotItem:getId() == id then
|
|
return g_game.open(slotItem, nil)
|
|
end
|
|
end
|
|
|
|
for i, container in pairs(g_game.getContainers()) do
|
|
for i, item in ipairs(container:getItems()) do
|
|
if item:isContainer() and item:getId() == id then
|
|
return g_game.open(item, nil)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function reopenBackpacks()
|
|
lstBPs = findItemsInArray(config.list)
|
|
|
|
for _, container in pairs(g_game.getContainers()) do g_game.close(container) end
|
|
bpItem = getBack()
|
|
if bpItem ~= nil then
|
|
g_game.open(bpItem)
|
|
end
|
|
|
|
schedule(500, function()
|
|
local delay = 200
|
|
|
|
if config.purse then
|
|
local item = getPurse()
|
|
if item then
|
|
use(item)
|
|
end
|
|
end
|
|
for i=1,#lstBPs do
|
|
schedule(delay, function()
|
|
openContainer(lstBPs[i])
|
|
end)
|
|
delay = delay + 250
|
|
end
|
|
end)
|
|
|
|
end
|
|
|
|
rootWidget = g_ui.getRootWidget()
|
|
if rootWidget then
|
|
contListWindow = UI.createWindow('ContListsWindow', rootWidget)
|
|
contListWindow:hide()
|
|
|
|
contListWindow.onGeometryChange = function(widget, old, new)
|
|
if old.height == 0 then return end
|
|
|
|
config.height = new.height
|
|
end
|
|
|
|
contListWindow:setHeight(config.height or 170)
|
|
|
|
renameContui.editContList.onClick = function(widget)
|
|
contListWindow:show()
|
|
contListWindow:raise()
|
|
contListWindow:focus()
|
|
end
|
|
|
|
renameContui.reopenCont.onClick = function(widget)
|
|
reopenBackpacks()
|
|
end
|
|
|
|
renameContui.minimiseCont.onClick = function(widget)
|
|
for i, container in ipairs(getContainers()) do
|
|
local containerWindow = container.window
|
|
containerWindow:setContentHeight(34)
|
|
end
|
|
end
|
|
|
|
renameContui.title:setOn(config.enabled)
|
|
renameContui.title.onClick = function(widget)
|
|
config.enabled = not config.enabled
|
|
widget:setOn(config.enabled)
|
|
end
|
|
|
|
contListWindow.closeButton.onClick = function(widget)
|
|
contListWindow:hide()
|
|
end
|
|
|
|
contListWindow.purse.onClick = function(widget)
|
|
config.purse = not config.purse
|
|
contListWindow.purse:setChecked(config.purse)
|
|
end
|
|
contListWindow.purse:setChecked(config.purse)
|
|
|
|
contListWindow.sort.onClick = function(widget)
|
|
config.sort = not config.sort
|
|
contListWindow.sort:setChecked(config.sort)
|
|
end
|
|
contListWindow.sort:setChecked(config.sort)
|
|
|
|
contListWindow.forceOpen.onClick = function(widget)
|
|
config.forceOpen = not config.forceOpen
|
|
contListWindow.forceOpen:setChecked(config.forceOpen)
|
|
end
|
|
contListWindow.forceOpen:setChecked(config.forceOpen)
|
|
|
|
contListWindow.lootBag.onClick = function(widget)
|
|
config.lootBag = not config.lootBag
|
|
contListWindow.lootBag:setChecked(config.lootBag)
|
|
end
|
|
contListWindow.lootBag:setChecked(config.lootBag)
|
|
|
|
local function refreshSortList(k, t)
|
|
t = t or {}
|
|
UI.Container(function()
|
|
t = contListWindow.sortList:getItems()
|
|
config.list[k].items = t
|
|
end, true, nil, contListWindow.sortList)
|
|
contListWindow.sortList:setItems(t)
|
|
end
|
|
refreshSortList(t)
|
|
|
|
local refreshContNames = function(tFocus)
|
|
local storageVal = config.list
|
|
if storageVal and #storageVal > 0 then
|
|
for i, child in pairs(contListWindow.itemList:getChildren()) do
|
|
child:destroy()
|
|
end
|
|
for k, entry in pairs(storageVal) do
|
|
local label = g_ui.createWidget("BackpackName", contListWindow.itemList)
|
|
label.onMouseRelease = function()
|
|
contListWindow.contId:setItemId(entry.item)
|
|
contListWindow.contName:setText(entry.value)
|
|
if not entry.items then
|
|
entry.items = {}
|
|
end
|
|
contListWindow.sortList:setItems(entry.items)
|
|
refreshSortList(k, entry.items)
|
|
end
|
|
label.enabled.onClick = function(widget)
|
|
entry.enabled = not entry.enabled
|
|
label.enabled:setChecked(entry.enabled)
|
|
label.enabled:setTooltip(entry.enabled and 'Disable' or 'Enable')
|
|
label.enabled:setImageColor(entry.enabled and '#00FF00' or '#FF0000')
|
|
end
|
|
label.remove.onClick = function(widget)
|
|
table.removevalue(config.list, entry)
|
|
label:destroy()
|
|
end
|
|
label.state:setChecked(entry.min)
|
|
label.state.onClick = function(widget)
|
|
entry.min = not entry.min
|
|
label.state:setChecked(entry.min)
|
|
label.state:setColor(entry.min and '#00FF00' or '#FF0000')
|
|
label.state:setTooltip(entry.min and 'Open Minimised' or 'Do not minimise')
|
|
end
|
|
label.openNext.onClick = function(widget)
|
|
entry.openNext = not entry.openNext
|
|
label.openNext:setChecked(entry.openNext)
|
|
label.openNext:setColor(entry.openNext and '#00FF00' or '#FF0000')
|
|
end
|
|
label:setText(entry.value)
|
|
label.enabled:setChecked(entry.enabled)
|
|
label.enabled:setTooltip(entry.enabled and 'Disable' or 'Enable')
|
|
label.enabled:setImageColor(entry.enabled and '#00FF00' or '#FF0000')
|
|
label.state:setColor(entry.min and '#00FF00' or '#FF0000')
|
|
label.state:setTooltip(entry.min and 'Open Minimised' or 'Do not minimise')
|
|
label.openNext:setColor(entry.openNext and '#00FF00' or '#FF0000')
|
|
|
|
if tFocus and entry.item == tFocus then
|
|
tFocus = label
|
|
end
|
|
end
|
|
if tFocus then contListWindow.itemList:focusChild(tFocus) end
|
|
end
|
|
end
|
|
contListWindow.addItem.onClick = function(widget)
|
|
local id = contListWindow.contId:getItemId()
|
|
local trigger = contListWindow.contName:getText()
|
|
|
|
if id > 100 and trigger:len() > 0 then
|
|
local ifind = findItemsInArray(config.list, id)
|
|
if ifind then
|
|
config.list[ifind] = { item = id, value = trigger, enabled = config.list[ifind].enabled, min = config.list[ifind].min, items = config.list[ifind].items}
|
|
else
|
|
table.insert(config.list, { item = id, value = trigger, enabled = true, min = false, items = {} })
|
|
end
|
|
contListWindow.contId:setItemId(0)
|
|
contListWindow.contName:setText('')
|
|
contListWindow.contName:setColor('white')
|
|
contListWindow.contName:setImageColor('#ffffff')
|
|
contListWindow.contId:setImageColor('#ffffff')
|
|
refreshContNames(id)
|
|
else
|
|
contListWindow.contId:setImageColor('red')
|
|
contListWindow.contName:setImageColor('red')
|
|
contListWindow.contName:setColor('red')
|
|
end
|
|
end
|
|
refreshContNames()
|
|
end
|
|
|
|
onContainerOpen(function(container, previousContainer)
|
|
if not container.window then return end
|
|
local containerWindow = container.window
|
|
if not previousContainer then
|
|
containerWindow:setContentHeight(34)
|
|
end
|
|
|
|
local storageVal = config.list
|
|
if storageVal and #storageVal > 0 then
|
|
for _, entry in pairs(storageVal) do
|
|
if entry.enabled and string.find(container:getContainerItem():getId(), entry.item) then
|
|
if entry.min then
|
|
containerWindow:minimize()
|
|
end
|
|
if renameContui.title:isOn() then
|
|
containerWindow:setText(entry.value)
|
|
end
|
|
if entry.openNext then
|
|
for i, item in ipairs(container:getItems()) do
|
|
if item:getId() == entry.item then
|
|
local time = #storageVal * 250
|
|
schedule(time, function()
|
|
time = time + 250
|
|
g_game.open(item)
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
local function nameContainersOnLogin()
|
|
for i, container in ipairs(getContainers()) do
|
|
if renameContui.title:isOn() then
|
|
if not container.window then return end
|
|
local containerWindow = container.window
|
|
local storageVal = config.list
|
|
if storageVal and #storageVal > 0 then
|
|
for _, entry in pairs(storageVal) do
|
|
if entry.enabled and string.find(container:getContainerItem():getId(), entry.item) then
|
|
containerWindow:setText(entry.value)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
nameContainersOnLogin()
|
|
|
|
local function moveItem(item, destination)
|
|
return g_game.move(item, destination:getSlotPosition(destination:getItemsCount()), item:getCount())
|
|
end
|
|
|
|
local function properTable(t)
|
|
local r = {}
|
|
for _, entry in pairs(t) do
|
|
if type(entry) == "number" then
|
|
table.insert(r, entry)
|
|
else
|
|
table.insert(r, entry.id)
|
|
end
|
|
end
|
|
return r
|
|
end
|
|
|
|
local mainLoop = macro(150, function(macro)
|
|
if not config.sort and not config.purse then return end
|
|
|
|
local storageVal = config.list
|
|
for _, entry in pairs(storageVal) do
|
|
local dId = entry.item
|
|
local items = properTable(entry.items)
|
|
-- sorting
|
|
if config.sort then
|
|
for _, container in pairs(getContainers()) do
|
|
local cName = container:getName():lower()
|
|
if not cName:find("depot") and not cName:find("depot") and not cName:find("quiver") then
|
|
local cId = container:getContainerItem():getId()
|
|
for __, item in ipairs(container:getItems()) do
|
|
local id = item:getId()
|
|
if table.find(items, id) and cId ~= dId then
|
|
local destination = getContainerByItem(dId, true)
|
|
if destination and not containerIsFull(destination) then
|
|
return moveItem(item, destination)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- keep open / purse 23396
|
|
if config.forceOpen then
|
|
local container = getContainerByItem(dId)
|
|
if not container then
|
|
local t = {getBack(), getAmmo(), getFinger(), getNeck(), getLeft(), getRight()}
|
|
for i=1,#t do
|
|
local slot = t[i]
|
|
if slot and slot:getId() == dId then
|
|
return g_game.open(slot)
|
|
end
|
|
end
|
|
local cItem = findItem(dId)
|
|
if cItem then
|
|
return g_game.open(cItem)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if config.purse and config.forceOpen and not getContainerByItem(23396) then
|
|
return use(getPurse())
|
|
end
|
|
if config.lootBag and config.forceOpen and not getContainerByItem(23721) then
|
|
if findItem(23721) then
|
|
g_game.open(findItem(23721), getContainerByItem(23396))
|
|
else
|
|
return use(getPurse())
|
|
end
|
|
end
|
|
macro:setOff()
|
|
end)
|
|
|
|
|
|
onContainerOpen(function(container, previousContainer)
|
|
mainLoop:setOn()
|
|
end)
|
|
|
|
onAddItem(function(container, slot, item, oldItem)
|
|
mainLoop:setOn()
|
|
end)
|
|
|
|
onPlayerInventoryChange(function(slot, item, oldItem)
|
|
mainLoop:setOn()
|
|
end)
|
|
|
|
onContainerClose(function(container)
|
|
if not container.lootContainer then
|
|
mainLoop:setOn()
|
|
end
|
|
end) |