Zenbot Wiki Difference between revisions of "Plugins"

Difference between revisions of "Plugins"

From Zenbot Wiki
Line 2: Line 2:


==== Content ====
==== Content ====
A plugin is defined as a folder, or (encrypted) archive that contains the following:
A plugin is defined as a folder, or [encrypted] archive that contains the following:


===== info.lua <code>[required]</code> =====
===== header.lua <code>[required]</code> =====
    - id
        the unique identifier for this plugin
     - name
     - name
         this will get displayed in loader/menu
         this will get displayed in menu
    - version [optional]
     - description
        for example "0.0.1"
         this will get displayed in menu as tooltip
        this will get displayed in loader
    - author [optional]
        this will get displayed in loader/menu
     - description [optional]
         this will get displayed in loader/menu
     - icon [optional]
     - icon [optional]
         this will get displayed in menu
         this will get displayed in menu
Line 19: Line 16:
         - required
         - required
             plugin needs those libraries to work and will not load if one or more is missing/not available
             plugin needs those libraries to work and will not load if one or more is missing/not available
             example: { "Orbwalker", "HealthPrediction" }
             example: { "SomeOrbwalkerLib", "SomeHealthPredictionLib" }
         - optional
         - optional
             plugin integrates those libraries but will load regardless if they are missing/not available
             plugin integrates those libraries but will load regardless if they are missing/not available
             example: { "? Evade" }
             example: { "? SomeEvadeLib" }
         - conflicts
         - conflicts
             plugin cannot work if one or more of those is loaded, plugin will not load if they are loaded
             plugin cannot work if one or more of those is loaded, plugin will not load if they are loaded
             example: { "! Aatrox" }
             example: { "! SomeAatroxPlugin" }
     - library [optional]
     - library [optional]
         boolean to indicate if submodules should be loadable outside of this plugin
         boolean to indicate if submodules should be loadable outside of this plugin
     - load [optional]
     - load [optional]
         (lambda) function returning a boolean that indicates if the plugin should show up ingame
         (lambda) function returning a boolean that indicates if the plugin should show up ingame
             function() return GameData.champion == "Aatrox" end
             function() return player.charName == "Aatrox" end
             "Game.champion == 'Aatrox'"
             `player.charName == 'Aatrox'`
         only Game data will be available inside the function with the following properties:
    - encrypt [optional]
            - champion  : string
         table containing every single file to be added to the encrypted file
             - map      : number
          encrypt = {    -- main.lua and header.lua can be omitted
             - mode      : string
             "menu",      -- //scripts//yourfolder//menu.lua
             - matchmade : boolean
             "logic",    -- //scripts//yourfolder//logic.lua
             "sprite.png" -- //scripts//yourfolder//sprite.png
          }
      strip [optional]
        boolean to indicate if debug information should be omitted, increases security 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
===== init.lua <code>[optional]</code> =====
    - this will get loaded during loading screen
    - you can pre-create menu here
    - most objects and instances are not available


===== main.lua <code>[required]</code> =====
===== main.lua <code>[required]</code> =====
Line 50: Line 46:


==== Example ====
==== Example ====
info.lua:
header.lua:
<pre>
<pre>
return {
return {
     id = "my_plugin",
     id = "my_plugin_id",
     name = "My Plugin",
     name = "My Plugin",
    version = "0.0.1",
    title = "My Awesome Plugin",
    author = "Me",
    description = "Does awesome things",
     dependencies = {
     dependencies = {
         "Orbwalker", "HealthPrediction", -- required
         "some_ts_lib_id", -- required
         "? SomeLibrary", -- optional
         "? some_pred_lib_id", -- optional
         "! Aatrox" -- conflicts  
         "! some_other_plugin" -- conflicts  
     },
     },
     load = `()=> Game.champion == "Aatrox"`
     load = `()=> player.charName == "Aatrox"`
}
}
</pre>
</pre>


=== Loading/Importing ===
=== Loading/Importing ===
==== Virtual File System ====
Zenbot uses a virtual file system to load its plugins
1. Core files are pre-loaded
  Core virtual folder will contain
    /classes/
    /common/
    /core/
    /extension/
    /library/
    /plugin/
    /shader/
    /main.lua
2. Plugins are pre-loaded and dependencies are determined and pre-loaded
    /plugin/plugin1/
    /plugin/plugin2/
    /plugin/plugin3/
    /library/dependency1/
    /library/dependency2/
    /library/dependency3/
3. Core entry point is executed, successfully loaded plugins are added to menu
    /main.lua
4. Plugin entry points are executed, if activated in menu
    /plugin/plugin1/main.lua
    /plugin/plugin2/main.lua
    /plugin/plugin3/main.lua


==== Importing Plugins ====
==== Importing Plugins ====
Libraries and internals can be loaded by using module api or import keyword
Libraries and internals can be loaded by using module api


   local Player = module.load"Player"
   local mylib = module.lib("mylib")
     or
     or
   import "Player"
   local mymenu = module.load(header.id, "menu")


   local Orbwalker = module.load"Orbwalker"
   local mylib_maybe = module.seek("mylib")
     or
     or
   import "Orbwalker"
   local orb = module.internal("orb")
===== Lookup Priority =====
The priority order for lookups is:
# Current plugin folder
# All library folders
# Core folders
# Instances[name]
# Enums[name]

Revision as of 15:42, 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
       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, increases security 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",
    dependencies = {
        "some_ts_lib_id", -- required
        "? some_pred_lib_id", -- optional
        "! some_other_plugin" -- conflicts 
    },
    load = `()=> player.charName == "Aatrox"`
}

Loading/Importing

Importing Plugins

Libraries and internals can be loaded by using module api

 local mylib = module.lib("mylib")
   or
 local mymenu = module.load(header.id, "menu")
 local mylib_maybe = module.seek("mylib")
   or
 local orb = module.internal("orb")