mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-11-03 04:16:23 +01:00
Updated to OTCv8 3.1 rev 229
This commit is contained in:
674
modules/game_bot/default_configs/vBot_4.8/vBot/Containers.lua
Normal file
674
modules/game_bot/default_configs/vBot_4.8/vBot/Containers.lua
Normal file
@@ -0,0 +1,674 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user