Difference between revisions of "Plugins"
From Zenbot Wiki
Views
Actions
Namespaces
Variants
Tools
| (46 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
=== Definition === | === Definition === | ||
==== A plugin is defined as a folder, or | ==== Content ==== | ||
A plugin is defined as a folder, or [encrypted] archive that contains the following: | |||
===== | ===== header.lua <code>[required]</code> ===== | ||
- id | |||
the unique identifier for this plugin | |||
- name | - name | ||
this will get displayed in menu | |||
- description [optional] | |||
this will get displayed in menu as tooltip | |||
- icon [optional] | |||
this will get displayed in menu | |||
- dependencies [optional] | |||
- | |||
- | |||
- dependencies | |||
- required | - required | ||
plugin needs those libraries to work and will not load if one or more is missing/not available | |||
example: { "SomeOrbwalkerLib", "SomeHealthPredictionLib" } | |||
- optional | - optional | ||
plugin integrates those libraries but will load regardless if they are missing/not available | |||
example: { "? SomeEvadeLib" } | |||
- conflicts | - conflicts | ||
plugin cannot work if one or more of those is loaded, plugin will not load if they are loaded | |||
example: { "! SomeAatroxPlugin" } | |||
- library | - library [optional] | ||
boolean to indicate if submodules should be loadable outside of this plugin | |||
- load | - load [optional] | ||
(lambda) function returning a boolean that indicates if the plugin should show up ingame | |||
function() return player.charName == "Aatrox" end | |||
`player.charName == 'Aatrox'` | |||
- encrypt [optional] | |||
table containing every single file to be added to the encrypted file | |||
- | encrypt = { -- main.lua and header.lua can be omitted | ||
- | "menu", -- //scripts//yourfolder//menu.lua | ||
- | "logic", -- //scripts//yourfolder//logic.lua | ||
"sprite.png" -- //scripts//yourfolder//sprite.png | |||
} | |||
- strip [optional] | |||
boolean to indicate if debug information should be omitted when encrypting, increases security slightly but removes any error information | |||
===== thumbnail.png <code>[optional]</code> ===== | ===== thumbnail.png <code>[optional]</code> ===== | ||
- this will get displayed in loader/menu | - this will get displayed in loader/menu | ||
===== main.lua <code>[required]</code> ===== | ===== main.lua <code>[required]</code> ===== | ||
- this is the entry to your plugin | - this is the entry to your plugin | ||
==== Example ==== | |||
==== | header.lua: | ||
<pre> | <pre> | ||
return { | return { | ||
id = "my_plugin_id", | |||
name = "My Plugin", | |||
description = "Does plugin things", | |||
icon = "\xef\xa3\xbf", -- font awesome | |||
dependencies = { | dependencies = { | ||
required = { " | "some_ts_lib_id", -- required | ||
"? some_pred_lib_id", -- optional | |||
"! some_other_plugin" -- conflicts | |||
}, | |||
load = `()=> player.charName == "Aatrox"`, | |||
encrypt = { | |||
"hud/main", | |||
"hud/overlay", | |||
"hud.png", | |||
"font.ttf" | |||
}, | }, | ||
strip = true | |||
} | } | ||
</pre> | </pre> | ||
=== Loading === | === Loading/Importing === | ||
==== Importing Plugins ==== | |||
Libraries and internals can be loaded by using module api | |||
local mylib = module.lib("mylib") | |||
or | |||
local mylib_maybe = module.seek("mylib") | |||
or | |||
local orb = module.internal("orb") | |||
Similarly your Lua files can be loaded by using module api | |||
local mymenu = module.load(header.id, "menu") | |||
==== | ==== Example ==== | ||
rectangle.lua | |||
local rectangle = class() | |||
function rectangle:__init(x, y, w, h) | |||
self.x = x | |||
self.y = y | |||
self.w = w | |||
self.h = h | |||
end | |||
function rectangle:__tostring() | |||
return string.format("rectangle(%d, %d, %d, %d)", self.x, self.y, self.w, self.h) | |||
end | |||
function rectangle:__eq(other) | |||
return self.x == other.x and self.y == other.y and self.w == other.w and self.h == other.h | |||
end | |||
function rectangle:contains(x, y) | |||
return x >= self.x and x <= self.x + self.w and y >= self.y and y <= self.y + self.h | |||
end | |||
function rectangle:draw(color, var) | |||
graphics.draw_rect(vec2(self.x, self.y), vec2(self.w, self.h), color, true) | |||
end | |||
return rectangle | |||
== | main.lua | ||
local rectangle = module.load(header.id, "rectangle") | |||
local rect1 = rectangle(100, 100, 400, 200) | |||
cb.add(cb.draw, function() | |||
rect1:draw(0xff7f7f7f, rect1:contains(cursorPos.x, cursorPos.y) or 4) | |||
end) | |||
Latest revision as of 16:12, 1 April 2023
Definition
Content
A plugin is defined as a folder, or [encrypted] archive that contains the following:
header.lua [required]
- id
the unique identifier for this plugin
- name
this will get displayed in menu
- description [optional]
this will get displayed in menu as tooltip
- icon [optional]
this will get displayed in menu
- dependencies [optional]
- required
plugin needs those libraries to work and will not load if one or more is missing/not available
example: { "SomeOrbwalkerLib", "SomeHealthPredictionLib" }
- optional
plugin integrates those libraries but will load regardless if they are missing/not available
example: { "? SomeEvadeLib" }
- conflicts
plugin cannot work if one or more of those is loaded, plugin will not load if they are loaded
example: { "! SomeAatroxPlugin" }
- library [optional]
boolean to indicate if submodules should be loadable outside of this plugin
- load [optional]
(lambda) function returning a boolean that indicates if the plugin should show up ingame
function() return player.charName == "Aatrox" end
`player.charName == 'Aatrox'`
- encrypt [optional]
table containing every single file to be added to the encrypted file
encrypt = { -- main.lua and header.lua can be omitted
"menu", -- //scripts//yourfolder//menu.lua
"logic", -- //scripts//yourfolder//logic.lua
"sprite.png" -- //scripts//yourfolder//sprite.png
}
- strip [optional]
boolean to indicate if debug information should be omitted when encrypting, increases security slightly but removes any error information
thumbnail.png [optional]
- this will get displayed in loader/menu
main.lua [required]
- this is the entry to your plugin
Example
header.lua:
return {
id = "my_plugin_id",
name = "My Plugin",
description = "Does plugin things",
icon = "\xef\xa3\xbf", -- font awesome
dependencies = {
"some_ts_lib_id", -- required
"? some_pred_lib_id", -- optional
"! some_other_plugin" -- conflicts
},
load = `()=> player.charName == "Aatrox"`,
encrypt = {
"hud/main",
"hud/overlay",
"hud.png",
"font.ttf"
},
strip = true
}
Loading/Importing
Importing Plugins
Libraries and internals can be loaded by using module api
local mylib = module.lib("mylib")
or
local mylib_maybe = module.seek("mylib")
or
local orb = module.internal("orb")
Similarly your Lua files can be loaded by using module api
local mymenu = module.load(header.id, "menu")
Example
rectangle.lua
local rectangle = class()
function rectangle:__init(x, y, w, h)
self.x = x
self.y = y
self.w = w
self.h = h
end
function rectangle:__tostring()
return string.format("rectangle(%d, %d, %d, %d)", self.x, self.y, self.w, self.h)
end
function rectangle:__eq(other)
return self.x == other.x and self.y == other.y and self.w == other.w and self.h == other.h
end
function rectangle:contains(x, y)
return x >= self.x and x <= self.x + self.w and y >= self.y and y <= self.y + self.h
end
function rectangle:draw(color, var)
graphics.draw_rect(vec2(self.x, self.y), vec2(self.w, self.h), color, true)
end
return rectangle
main.lua
local rectangle = module.load(header.id, "rectangle")
local rect1 = rectangle(100, 100, 400, 200)
cb.add(cb.draw, function()
rect1:draw(0xff7f7f7f, rect1:contains(cursorPos.x, cursorPos.y) or 4)
end)