mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-05-09 07:19:20 +02:00
187 lines
5.5 KiB
Lua
187 lines
5.5 KiB
Lua
CaveBot.Editor = {}
|
|
CaveBot.Editor.Actions = {}
|
|
|
|
-- also works as registerAction(action, params), then text == action
|
|
-- params are options for text editor or function to be executed when clicked
|
|
-- you have many examples how to use it bellow
|
|
CaveBot.Editor.registerAction = function(action, text, params)
|
|
if type(text) ~= 'string' then
|
|
params = text
|
|
text = action
|
|
end
|
|
|
|
local color = nil
|
|
if type(params) ~= 'function' then
|
|
local raction = CaveBot.Actions[action]
|
|
if not raction then
|
|
return warn("CaveBot editor warn: action " .. action .. " doesn't exist")
|
|
end
|
|
CaveBot.Editor.Actions[action] = params
|
|
color = raction.color
|
|
end
|
|
|
|
local button = UI.createWidget('CaveBotEditorButton', CaveBot.Editor.ui.buttons)
|
|
button:setText(text)
|
|
if color then
|
|
button:setColor(color)
|
|
end
|
|
button.onClick = function()
|
|
if type(params) == 'function' then
|
|
params()
|
|
return
|
|
end
|
|
CaveBot.Editor.edit(action, nil, function(action, value)
|
|
local focusedAction = CaveBot.actionList:getFocusedChild()
|
|
local index = CaveBot.actionList:getChildCount()
|
|
if focusedAction then
|
|
index = CaveBot.actionList:getChildIndex(focusedAction)
|
|
end
|
|
local widget = CaveBot.addAction(action, value)
|
|
CaveBot.actionList:moveChildToIndex(widget, index + 1)
|
|
CaveBot.actionList:focusChild(widget)
|
|
CaveBot.save()
|
|
end)
|
|
end
|
|
return button
|
|
end
|
|
|
|
CaveBot.Editor.setup = function()
|
|
CaveBot.Editor.ui = UI.createWidget("CaveBotEditorPanel")
|
|
local ui = CaveBot.Editor.ui
|
|
local registerAction = CaveBot.Editor.registerAction
|
|
|
|
registerAction("move up", function()
|
|
local action = CaveBot.actionList:getFocusedChild()
|
|
if not action then return end
|
|
local index = CaveBot.actionList:getChildIndex(action)
|
|
if index < 2 then return end
|
|
CaveBot.actionList:moveChildToIndex(action, index - 1)
|
|
CaveBot.actionList:ensureChildVisible(action)
|
|
CaveBot.save()
|
|
end)
|
|
registerAction("edit", function()
|
|
local action = CaveBot.actionList:getFocusedChild()
|
|
if not action or not action.onDoubleClick then return end
|
|
action.onDoubleClick(action)
|
|
end)
|
|
registerAction("move down", function()
|
|
local action = CaveBot.actionList:getFocusedChild()
|
|
if not action then return end
|
|
local index = CaveBot.actionList:getChildIndex(action)
|
|
if index >= CaveBot.actionList:getChildCount() then return end
|
|
CaveBot.actionList:moveChildToIndex(action, index + 1)
|
|
CaveBot.actionList:ensureChildVisible(action)
|
|
CaveBot.save()
|
|
end)
|
|
registerAction("remove", function()
|
|
local action = CaveBot.actionList:getFocusedChild()
|
|
if not action then return end
|
|
action:destroy()
|
|
CaveBot.save()
|
|
end)
|
|
|
|
registerAction("label", {
|
|
value="labelName",
|
|
title="Label",
|
|
description="Add label",
|
|
multiline=false
|
|
})
|
|
registerAction("delay", {
|
|
value="500",
|
|
title="Delay",
|
|
description="Delay next action (in milliseconds)",
|
|
multiline=false,
|
|
validation="^\\s*[0-9]{1,10}\\s*$"
|
|
})
|
|
registerAction("gotolabel", "go to label", {
|
|
value="labelName",
|
|
title="Go to label",
|
|
description="Go to label",
|
|
multiline=false
|
|
})
|
|
registerAction("goto", "go to", {
|
|
value=function() return posx() .. "," .. posy() .. "," .. posz() end,
|
|
title="Go to position",
|
|
description="Go to position (x,y,z)",
|
|
multiline=false,
|
|
validation="^\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+),?\\s*([0-9]?)$"
|
|
})
|
|
registerAction("use", {
|
|
value=function() return posx() .. "," .. posy() .. "," .. posz() end,
|
|
title="Use",
|
|
description="Use item from position (x,y,z) or from inventory (itemId)",
|
|
multiline=false
|
|
})
|
|
registerAction("usewith", "use with", {
|
|
value=function() return "itemId," .. posx() .. "," .. posy() .. "," .. posz() end,
|
|
title="Use with",
|
|
description="Use item at position (itemid,x,y,z)",
|
|
multiline=false,
|
|
validation="^\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)$"
|
|
})
|
|
registerAction("say", {
|
|
value="text",
|
|
title="Say",
|
|
description="Enter text to say",
|
|
multiline=false
|
|
})
|
|
registerAction("follow", {
|
|
value="NPC name",
|
|
title="Follow Creature",
|
|
description="insert creature name to follow",
|
|
multiline=false
|
|
})
|
|
registerAction("npcsay", {
|
|
value="text",
|
|
title="NPC Say",
|
|
description="Enter text to NPC say",
|
|
multiline=false
|
|
})
|
|
registerAction("function", {
|
|
title="Edit bot function",
|
|
multiline=true,
|
|
value=CaveBot.Editor.ExampleFunctions[1][2],
|
|
examples=CaveBot.Editor.ExampleFunctions,
|
|
width=650
|
|
})
|
|
|
|
ui.autoRecording.onClick = function()
|
|
if ui.autoRecording:isOn() then
|
|
CaveBot.Recorder.disable()
|
|
else
|
|
CaveBot.Recorder.enable()
|
|
end
|
|
end
|
|
|
|
-- callbacks
|
|
onPlayerPositionChange(function(pos)
|
|
ui.pos:setText("Position: " .. pos.x .. ", " .. pos.y .. ", " .. pos.z)
|
|
end)
|
|
ui.pos:setText("Position: " .. posx() .. ", " .. posy() .. ", " .. posz())
|
|
end
|
|
|
|
CaveBot.Editor.show = function()
|
|
CaveBot.Editor.ui:show()
|
|
end
|
|
|
|
|
|
CaveBot.Editor.hide = function()
|
|
CaveBot.Editor.ui:hide()
|
|
end
|
|
|
|
CaveBot.Editor.edit = function(action, value, callback) -- callback = function(action, value)
|
|
local params = CaveBot.Editor.Actions[action]
|
|
if not params then return end
|
|
if not value then
|
|
if type(params.value) == 'function' then
|
|
value = params.value()
|
|
elseif type(params.value) == 'string' then
|
|
value = params.value
|
|
end
|
|
end
|
|
|
|
UI.EditorWindow(value, params, function(newText)
|
|
callback(action, newText)
|
|
end)
|
|
end
|