This document is a single-source reference for generating Lua scripts for ValidusBot. It is designed for LLM usage (ChatGPT/Claude/etc.) and includes:
- runtime assumptions,
- available core libraries,
- known constraints,
- safe scripting rules,
- output quality rules for generated scripts.
Important: No document can guarantee 100% perfect code in all scenarios. This file is intended to maximize correctness and safety.
Short answer: it will know what is explicitly documented here.
For highest accuracy:
- Attach this file.
- Instruct the LLM to use only APIs documented in this file.
- Instruct the LLM to treat undocumented APIs as unavailable.
- Ask for strict argument validation and nil-safe logic.
This file includes a curated behavior guide plus an auto-generated public API appendix derived from docs/Scripts/core. The appendix lists canonical function names, parameter types where annotated, and return types while deliberately omitting local helpers, compatibility aliases, raw bindings, protocol details, and bootstrap internals.
- Lua runs cooperatively on the bot/game thread. Managed coroutines provide yielding and fairness; they are not background OS threads. Game reads/actions, script callbacks, and Lua state access therefore remain serialized.
- The runtime loads
Scripts/corebefore the user file. Generated scripts should use the canonical PascalCase globals from this document, such asSelf,Creature,Map,Cavebot,Module,Storage, andEngine. - With the sandbox enabled, each user file and required user module has a private
_ENV._Gpoints to that private environment. Supported native/core globals are available through a restricted fallback, but user assignments do not modify the shared core environment. - The top-level script body is a managed coroutine. After it finishes, the
runtime resolves and starts
init()from the same private_ENV, if present.init()is also managed and may callwait, HTTP, or WebSocket APIs. Modulecallbacks, scheduled callbacks, and registered event callbacks run as managed coroutines. Long or repeated work must yield withwait(ms)or return promptly and be scheduled again.terminate()is different: it is protected synchronous cleanup, cannot yield, has a 50 ms execution limit, and runs at most once. Do not start HTTP, WebSocket, scheduled, or module work from it.- A normal script remains alive while it owns runnable/sleeping coroutines, registered callbacks, scheduled events, HUD elements, or WebSockets. A script with no remaining work/resources finishes automatically.
pcallandxpcallretain normal Lua behavior. An expected error caught by the script does not count as an uncaught runtime failure.- An uncaught top-level-body or
init()error stops only that script. - An uncaught repeating-module error stops that module. If another healthy repeating module exists, it keeps running; if the failed module was the script's only module, the runtime stops the script.
- An uncaught
Events.Scheduleerror ends only that one-shot callback. - A key, packet, or Walker event registration is disabled after exactly three consecutive uncaught callback failures. One successful completion resets that registration's failure counter.
- A Walker interceptor always releases its owned pause before callback failure policy is applied, so a broken script cannot leave Walker indefinitely held.
- Supported C++ exceptions from native bindings become contextual Lua errors and follow the same component policy. An ordinary C++ exception escaping a script tick quarantines that script and does not prevent later scripts from ticking. A native access violation is the exceptional emergency case: Lua execution is disabled for the client session, Walker ownership is released, and a dump is written because continuing through corrupted native state is unsafe.
- Uncaught diagnostics include script, component kind/name, callback source,
source line, safe error value, traceback,
failure_scope,runtime_action, andpolicy_reason. Complete output is written to the per-script log even when UI notifications for identical errors are rate-limited. - Error values may be strings, numbers, tables, userdata, threads,
nil, or values with hostile__tostringmetamethods. Runtime diagnostics serialize them without invoking user metamethods.
Do not wrap an entire repeating module in pcall merely to print and continue.
That converts a genuine component failure into an apparent success and prevents
the runtime from stopping the broken module. Catch only errors that the script
can handle meaningfully, then either recover or rethrow with context.
- Key/packet/Walker events, scheduled events, HUD elements/callbacks, HTTP results, WebSockets, sounds, and Walker holds are owned by the creating script. Teardown removes or cancels only that owner's resources.
- Explicit cleanup in
terminate()is useful for restoring feature settings the script deliberately changed, but native owner-scoped resources are also released automatically. - Per script: 64 MiB Lua memory, 256 managed coroutines, 64 pending event callbacks, and 32 outstanding async result tokens.
- Scheduler limits are 3 ms per coroutine resume, 4 ms per script per frame, and 8 ms for all Lua work per frame. Yieldable Lua is time-sliced. Deadline misses remain available as telemetry, while three consecutive unpreempted resumes of at least 5 ms or one unpreempted 50 ms resume circuit-breaks the offending component.
- Delays are integer milliseconds from 0 through 86,400,000 unless a narrower function-specific range is documented.
- Use only functions and constants explicitly documented here. Never invent a plausible API name; treat an absent function as unavailable.
- Use canonical PascalCase modules. Do not generate lower-camel compatibility
calls such as
self.*,map.*,CaveBot,_G.position, or oldengine.ammoRefill.*paths. - Do not busy-loop. Repeating work must use
Module.Every,Events.Schedule, or a loop that callswait(ms). - Do not use
os.execute,os.getenv, oros.tmpname.os.exit()is reserved for an explicit emergency full-client shutdown policy and is audit-logged. - Never expose, query, or toggle the reserved Objects Dumper feature through
Features/Engine.Features. - Validate external input and option-table fields. Treat game-derived objects,
capabilities, and snapshots as potentially
nilor stale. - Use
pcallonly around an operation whose failure has a defined local recovery path. Let unexpected module/event errors reach the runtime policy. - Getter tables from
Engineare detached snapshots. Mutating them does nothing; use the matching validated setter. - Keep feature changes idempotent. Prefer
Features.SetActive/Enable/Disableover assuming the previous state and toggling blindly. - Use
Time.MonotonicMs()for elapsed time. Never useos.clock()for wall-time timeouts. - Keep callbacks short, use stable owner-local IDs, and avoid high-frequency allocation or full-creature scans when a smaller query suffices.
- If the script changes persistent bot configuration, state whether the
change should remain after the script stops and restore it in
terminate()when appropriate.
- Module tables are exposed for user scripts in PascalCase form.
- Some modules also expose grouped namespaces such as
Cavebot.Walker,Cavebot.Actions,Cooldowns.Spell, andEngine.Healer. - Use the direct canonical methods documented here. Do not infer a
QueryorActionsnamespace unless it is explicitly listed. - Compatibility aliases are not part of the supported script-writing surface; generated scripts must use the exact names documented in this file.
- Hotkeys: alt cannot be used with Events.RegisterKeyEvent/Hotkeys.RegisterCombo, but it is supported by Hotkeys.SendCombo.
- Standard Lua
table.concatis allowed in sandboxed user scripts and can be used for safe string assembly. - Extended keys: insert/delete/home/end/pageup/pagedown/arrows default to extended=true in Hotkeys.ParseCombo.
- Features API excludes Objects Dumper from public get/set/list/status paths.
- HTTP and WebSocket operations must be started from a managed script coroutine. They yield cooperatively while waiting.
- HTTP has no callback lifecycle API. WebSockets use explicit
Receive; there are noonOpen,onClose,onError,onRedirect, or automatic reconnect callbacks. - Use
Time.MonotonicMs()for elapsed time, retry backoff, timeouts, and telemetry cadence. It advances while the process is idle and is unaffected by system wall-clock changes. Its epoch is unspecified, so compare two returned values. Do not useos.clock()for elapsed time; Lua defines it as process CPU time. - Capability wrappers such as Inventory and NPC trade can return nil/false when the corresponding game state is unavailable. Check
IsAvailable/capability methods where provided. - Sandboxed
io.open,os.remove, andos.renameresolve inside the current product's userScriptsdirectory and cannot accessScripts/core. Individual file reads/writes are limited to 1 MiB. PreferStoragefor normal script state. - Sandboxed
requireloads text-only Lua modules from the allowed script/library roots under the same restricted environment. Do not depend on native C-module loading or DLL search paths. - Current builds do not export
Game.GetMinimapTilePixelColor.Minimap.GetTilePixelColorandMinimap.IsWalkableByColorare compatibility capability calls and returnnil; useMinimap.GetTileFlags,Minimap.IsWalkable, orMappathfinding.
Use these exact values to avoid numeric mapping mistakes.
- MoveDirection.NORTH = 0
- MoveDirection.EAST = 1
- MoveDirection.SOUTH = 2
- MoveDirection.WEST = 3
- MoveDirection.NORTHEAST = 5
- MoveDirection.SOUTHEAST = 6
- MoveDirection.SOUTHWEST = 7
- MoveDirection.NORTHWEST = 8
- MoveDirection.INVALID = 9
Important:
- Value 4 is not a valid MoveDirection in this runtime.
- For diagonals, use constants from lua_consts.lua (5..8), not hardcoded legacy 4..7 mappings.
- RotateDirection.NORTH = 0
- RotateDirection.EAST = 1
- RotateDirection.SOUTH = 2
- RotateDirection.WEST = 3
- PathFindResult.OK = 0
- PathFindResult.SAME_POSITION = 1
- PathFindResult.IMPOSSIBLE = 2
- PathFindResult.TOO_FAR = 3
- PathFindResult.NO_WAY = 4
- PathFindResult.GOAL_BLOCKED = 5
- PathFindResult.NONE = 6
- PathFindFlags.ALLOW_NOT_SEEN_TILES = 1
- PathFindFlags.ALLOW_CREATURES = 2
- PathFindFlags.ALLOW_NON_PATHABLE = 4
- PathFindFlags.ALLOW_NON_WALKABLE = 8
- PathFindFlags.IGNORE_CREATURES = 16
- PathFindFlags.IGNORE_GOAL_POSITION = 32
- PathFindFlags.CHECK_GOAL_POSITION = 64
- PathFindFlags.PRIORITIZE_DIAGONAL_MOVEMENTS = 128
- CooldownGroupId.ATTACK = 1
- CooldownGroupId.HEALING = 2
- CooldownGroupId.SUPPORT = 3
- CooldownGroupId.SPECIAL = 4
- CooldownGroupId.CRIPPLING = 5
- CooldownGroupId.FOCUS = 7
- CooldownGroupId.ULTIMATE = 8
- CooldownGroupId.GREAT_BEAMS = 9
- CooldownGroupId.BURST_OF_NATURE = 10
- CooldownGroupId.VIRTUE = 11
Native-backed JSON encoding and decoding. It does not load a Lua C module or an additional dependency DLL.
Primary API:
- Json.Encode(value, pretty?)
- Json.Decode(text)
- Json.TryEncode(value, pretty?)
- Json.TryDecode(text)
- Json.Array(table)
- Json.Object(table)
- Json.Null
Notes:
- Json.Encode and Json.Decode raise normal, catchable Lua errors when encoding or decoding fails.
- Json.TryEncode and Json.TryDecode do not throw for codec failures; they return
nil, error. - Decoded JSON null values are represented by Json.Null so arrays and objects round-trip without losing null entries.
- Empty Lua tables encode as objects by default. Use Json.Array({}) to force an empty array.
- Input/output is limited to 2 MB, nesting to 32 levels, and values to 65,536 nodes.
- Only nil, booleans, finite numbers, strings, tables, and Json.Null are supported.
Coroutine-friendly HTTP and HTTPS requests. No extra dependency DLL is required.
Primary API:
- Http.Request(options)
- Http.Get(url, options?)
- Http.Post(url, body?, options?)
- Http.GetJson(url, options?)
- Http.PostJson(url, value, options?)
Request options:
- url: string (required)
- method: GET, POST, PUT, PATCH, DELETE, or HEAD (default GET)
- headers: table of string names to string values
- body: string (default empty; maximum 1 MB)
- timeoutMs: 250..30000 (default 5000; one total active-request deadline, including redirect handling)
- maxResponseBytes: 1..4194304 (default 2 MB)
- followRedirects: boolean (default true; up to five redirects)
The returned response contains ok, status, headers, headerList, body, error, url, and redirects. headers uses lower-case names for convenient lookup; headerList preserves repeated headers as ordered { name, value } entries. GetJson returns decodedValue, response, decodeError; PostJson JSON-encodes the request value and returns the normal response table.
Calls must run inside a managed script coroutine; init() is managed and may call them. A script may have at most four pending HTTP requests. Local/private endpoints are allowed. validusbot.net, its subdomains, and the registered service host are blocked, including redirect destinations. TLS certificate validation remains enabled, HTTPS-to-HTTP redirects are rejected, and sensitive/custom headers are not forwarded across origins except for a small safe set such as Accept and User-Agent. Cookies and automatic authentication are not provided.
Per-request User-Agent:
- Set
headers = { ["User-Agent"] = "MyScript/1.0" }in that request's options. - The value is scoped to that request and is retained across allowed redirects.
- Header names/values must be strings; at most 64 request headers and 32 KB of combined header text are accepted.
Independent ws:// and wss:// client connections. No extra dependency DLL is required.
Primary API:
- WebSocket.Connect(url, options?)
- connection:Send(data, binary?)
- connection:Receive(timeoutMs?)
- connection:Close(closeCode?, reason?)
- connection:IsOpen()
Connect options support headers, subprotocol, timeoutMs (default 10000), and maxMessageBytes (default 1 MB, maximum 4 MB). maxMessageBytes limits both messages sent by the script and messages received from the server. Connect returns connection, nil on success or nil, error on failure. Headers, including a custom User-Agent, are scoped to that connection attempt.
Receive yields and returns an event table with type equal to text, binary, close, error, or timeout; relevant fields include data, closeCode, error, and url. Its default timeout is 30000 ms and values are clamped to 0..60000. Send and Close return boolean, errorOrNil.
A script may own up to four simultaneous WebSockets; eight are allowed across all scripts. Queues and message sizes are bounded, text/reason values must be valid UTF-8, and close codes/reasons are validated. Connections and outstanding operations are cancelled when their owning script stops. validusbot.net, its subdomains, and the registered service host are blocked. wss:// uses normal TLS certificate validation. Reconnect is explicit: after a close/error, call WebSocket.Connect again from script logic.
Public feature control wrappers.
- Supports identifiers by numeric BotFeatureId or feature name string.
- Public IDs are HEALER..TIMER_ACTIONS.
- Objects Dumper is reserved and intentionally blocked.
Primary API:
- Features.IsActive(featureIdentifier)
- Features.Enable(featureIdentifier)
- Features.Disable(featureIdentifier)
- Features.Toggle(featureIdentifier)
- Features.SetActive(featureIdentifier, activeStatus)
- Features.GetName(featureIdentifier)
- Features.GetAllFeatureIds()
- Features.GetActiveFeatures()
- Features.EnableMultiple(featureList)
- Features.DisableMultiple(featureList)
- Features.DisableAllExcept(excludeList)
- Features.PrintStatus()
Enable and Disable use the native idempotent SetActive operation and return
the resulting active state. Toggle also returns the new state, but should be
used only when inversion is the intended operation. Feature activation changes
live bot state; the feature's own settings remain intact.
Lua scripts can inspect and configure existing Magic Shooter entries without rebuilding profiles. Magic Shooter uses one normalized action model for spells, runes, directional attacks, target-centered areas, chains, support effects, and stances:
Engine.MagicShooter.GetEntries(profile?) -> entries|nil, error?Engine.MagicShooter.SetEntryRune(entryIndex, runeId, profile?) -> success, error?Engine.MagicShooter.SetEntrySpell(entryIndex, spellWords, profile?) -> success, error?Engine.MagicShooter.SetEntryEnabled(entryIndex, enabled, profile?) -> booleanEngine.MagicShooter.SetEntryMonsterNames(entryIndex, names, profile?) -> booleanEngine.MagicShooter.SetEntryRange(entryIndex, range, profile?) -> boolean- Invocation and placement:
SetEntryCastMethod,SetEntryPatternAnchor,SetEntryPatternSource,SetEntryPatternVariant, andSetEntryPatternId. - Evaluation and ordering:
SetEntryEffectType,SetEntryPriorityLane,SetEntryTargetPolicy,SetEntryHitCountMode,SetEntryMonsterCount, andSetEntryMonsterCountCondition. - Chain behavior:
SetEntryChainMaxTargets,SetEntryChainJumpRange, andSetEntryChainSelector. - Requirements/effect tracking:
SetEntryEquipmentRequirementandSetEntryTrackedEffect. - Explicit setters also exist for option, condition, mana/health thresholds, monster HP range, danger, PvP safety, ally shooting, target requirement, custom/walk/momentum delays, skill-buff percentages, and movement/momentum flags.
profile defaults to the active Magic Shooter profile. It may be a 1-based profile index or an exact profile name. Entry indexes are also 1-based and match the order shown in the selected profile. GetEntries returns a detached snapshot with all public condition, threshold, delay, safety, skill-buff, and pattern fields. Editing that returned table has no effect; call the matching setter.
The enum tables live under Engine.MagicShooter: Option, Condition,
CastCondition, MonsterCountCondition, CastMethod, PatternAnchor,
PatternSource, PatternVariant, EffectType, PriorityLane, TargetPolicy,
HitCountMode, EquipmentRequirement, TrackedEffect, and ChainSelector.
Use these named constants instead of hard-coded integers. PatternVariant
exposes only Default and Custom; numeric value 1 is reserved and rejected.
Runtime selection is strict vector order. On every pass Magic Shooter starts at
entry 1, checks that entry's complete type-specific conditions and cooldowns,
then continues downward only when it cannot use that entry. The first fully
eligible entry is used. Spell/rune type, area size, PriorityLane, and
dangerLevel do not reorder evaluation. Those advanced fields remain readable
and settable for profile/model compatibility, but scripts must arrange actual
priority by moving entries in the profile UI.
Conditions are evaluated per entry, including DontCastWhileWalking; enabling
that option on one entry does not suppress a later entry that permits casting
while walking. Creature candidates are read from current game storage while the
entry is being evaluated. There is no shared Lua-style creature snapshot whose
contents can be edited or reused to change the selection.
Chain entries can count guaranteed hits or possible hits. ChainSelector provides Closest, Random, and HighestHealth; use the named constant because historical and current chain spells may use different selectors. Monster name, HP, and tracked-effect filters decide which chained monsters count toward the condition, but excluded creatures may still physically relay a chain. PvP safety follows the complete possible chain and rejects a cast that could reach a non-allowed player. Current-target chains fall back to a valid in-range creature when necessary.
For directly targeted actions (runes and supported crosshair spells), SetEntryRequiresTarget(false) allows the configured target-selection policy to choose a valid creature without requiring an existing client attack target. Ordinary spoken targeted spells still resolve against Tibia's current attack target and cannot be redirected by a bot-only policy.
Monster names are case-insensitive and accept comma, semicolon, or newline separators. Range, floor, shootability, monster HP, and Monster Name filters are applied consistently to spells and runes. PvP safety is evaluated independently of monster-name and HP filters.
Momentum is the sole intentional priority exception. When the Momentum effect is
triggered, Magic Shooter scans from the top for the first enabled attack spell
or attack rune with PrioritizeWithMomentum enabled whose individual cooldown
is at most its configured MomentumDelay. That entry is reserved for the
Momentum window. Until it fires or the window expires, other attack spells and
runes are skipped. Stances, empowerment/support entries, challenge/exeta, and
avatar entries may still run. The option is meaningful only for attack spells
and runes; scripts should not enable it for support/stance entries.
SetEntryCustomDelay also provides the retry window for custom actions whose
cooldown is not exposed by the client; when a normal entry is waiting, scanning
continues to the next entry. SetEntryAttackSkillBuffSpell remains for old
support entries, but new scripts should prefer TrackedEffect.SkillBuff.
x64-only controls are exported only when supported by the native client build.
Harmony and Monk-specific controls belong to x64 clients from 15.00 onward.
CrossHairSpell, TargetOrSelf, stance behavior/effect tracking, and
SetEntryStanceGroup, SetEntryStanceId, and
SetEntryForceUnknownStance require the newer x64 client features from 15.25
onward. None exist in the x86 API. Check
type(Engine.MagicShooter.SetEntryStanceId) == "function" when targeting both
architectures.
The stance tracker observes outgoing manual and scripted stance words even while
Magic Shooter is disabled. It groups mutually exclusive stances, tracks a
pending cast, confirms it from spell cooldown/exhaustion, and abandons an
unconfirmed attempt after two seconds. Casting the currently active stance is
tracked as toggling that group off. State resets to unknown after injection or a
character change. By default an unknown group does not force a cast; enable
SetEntryForceUnknownStance only for the entry that should establish the
initial state.
To build a sequence such as uteta flam, then a fire attack, then another
attack, place those entries in that order. The stance entry runs only when its
group is not already in the requested state. Subsequent strict-order passes can
then reach the dependent attack and later fallback entries as their own
conditions/cooldowns allow.
Replacing an action preserves that entry's enabled state, position, monster names, creature-count/health/mana conditions, delays, momentum option, stance fields, and advanced settings. A recognized rune or spell also updates its action type, range, and built-in pattern using the same automatic detection as the Magic Shooter UI. An unknown custom action can replace an entry that is already the same kind, but cannot cross from rune to spell or spell to rune because the missing action metadata would be ambiguous.
Entry/profile fields changed through Lua affect live in-memory settings and are included in a later normal settings save. Older settings files load with safe defaults for newly added fields, and the next save writes the new fields. Momentum timestamps, pending/active stance tracking, per-entry retry timers, and other transient runtime state are intentionally not persisted.
Engine.Targeting.GetEntries(profile?) -> table[]|nilEngine.Targeting.SetEntryEnabled(entryIndex, enabled, profile?) -> booleanEngine.Targeting.SetEntryMonsterName(entryIndex, name, profile?) -> booleanEngine.Targeting.SetEntryMonstersIgnoreList(entryIndex, names, profile?) -> boolean- Explicit setters cover priority, danger, attack option, keep-distance option/range, HP range, anchoring/range, looting, diagonal movement, shootable, and reachable requirements.
Targeting getters return detached snapshots. Monster-name and ignore-list setters rebuild the same lowercase parsed caches used by targeting. Ignore lists accept comma, semicolon, or newline separators.
The following are grouped under Engine and use explicit getters/setters or feature actions:
Engine.WalkerandEngine.Lure: waypoint/lure configuration and runtime actions already available through their native APIs.Engine.Extras: individual toggles, follow settings, training actions, and copied item-ID lists.Engine.TankMode: mana-shield/cancel spells, thresholds, costs, potion ID, and individual toggles.Engine.Looter: mode, action type, minimum capacity, andLootAroundCharacter().Engine.TimerActions: copied entries, individual entry setters, add/remove/clear.Engine.SuppliesSorter: copied entries, individual entry setters, add/remove/clear.Engine.Channels: copied entries, individual entry setters, global delay, add/remove/clear. Mutations clear stale queued messages where required.Engine.HUD: the HUD element API with its original per-script ownership semantics.
All GetEntries() results and ID lists are copies. Never modify those tables expecting bot state to change. Configuration changes remain in memory until the bot's normal settings save runs.
Example HUD callback logic for a rune entry:
local AREA_RUNE_ENTRY = 4
local function selectAvalanche()
local ok, err = Engine.MagicShooter.SetEntryRune(AREA_RUNE_ENTRY, 3161)
if not ok then
print("Could not select avalanche rune: " .. tostring(err))
end
endCombo parser and event registration wrapper.
Primary API:
- Hotkeys.ParseCombo(combination)
- Hotkeys.RegisterCombo(params)
- Hotkeys.SendKey(key, clientOnly?)
- Hotkeys.SendCombo(combination, clientOnly?)
SendKey and SendCombo always queue a key-down/key-up sequence for the current injected Tibia client window. clientOnly defaults to true, which bypasses ImGui, Lua callback hotkeys, and ValidusBot feature hotkeys. Pass false only when the synthetic input should travel through the normal client window procedure. A true return means the sequence was queued, not that Tibia had an action assigned to it. No arbitrary window handles or system-wide input are exposed.
Hotkeys.SendKey("f1")
Hotkeys.SendCombo("ctrl+shift+f9")
Hotkeys.SendCombo("alt+f1")
Hotkeys.SendCombo("ctrl+f1", false) -- opt into normal ImGui/bot/Lua routingExpected params for RegisterCombo:
- id: string (required)
- combo: string (required)
- callback: function (required)
- name: string (optional)
- trigger_on_keydown: boolean (optional)
- extended: boolean (optional override)
Module runtime plus scheduling helpers built on Module.New/Stop/Pause/Resume.
Primary API:
- Module.New(name, callback, delayMs)
- Module.Stop(name)
- Module.Pause(name)
- Module.Resume(name)
- Module.Every(name, callback, delayMs)
- Module.After(name, callback, delayMs)
- Module.Cancel(name)
- Module.PauseManaged(name)
- Module.ResumeManaged(name)
- Module.Exists(name)
- Module.Get(name)
- Module.List()
Module.New creates a repeating managed coroutine. Its callback may call
wait(...); it must not busy-loop. Module.Every is the recommended repeating
helper: it stops an existing module with the same name before registering the new
one and records it in the core helper registry. Module.After is a one-shot
managed coroutine that waits, invokes the callback once, then removes itself.
Module.Cancel, PauseManaged, ResumeManaged, Exists, Get, and List
operate on modules created through Every or After; raw Module.New modules
are not added to that Lua-side registry.
Names must be non-empty and should be stable and script-specific. Delays are
integer milliseconds from 0 through 86,400,000. An uncaught callback error is
reported with script/module context and stops the offending module. It stops the
entire script only when no healthy sibling work remains. Do not wrap the whole
repeating callback in pcall; catch only an operation whose failure is expected
and recoverable.
Position object utilities and spatial checks.
Primary API:
- Position.New(x, y, z | table)
- Position:DistanceTo(otherPos)
- Position.IsReachable(fromPos, toPos)
- Position.IsShootable(fromPos, toPos)
- targetPosition:IsReachable(fromPos?)
- targetPosition:IsShootable(fromPos?)
Notes:
- Reach/shoot checks default source to local player when fromPos is nil.
- DistanceTo returns 9999 on different z-level.
Creature wrapper for reading and interacting with visible game creatures.
Factory and static helpers:
- Creature:New(creatureId)
- Creature.GetFollowed()
- Creature.GetTarget()
- Creature.GetLocalPlayer()
Core methods include:
- identity/state: GetId, GetName, GetLowercaseName, IsValid, IsVisible
- relation/type: IsPlayer, IsMonster, IsNPC, IsSummon, IsGameMaster, IsMounted, IsInParty, IsPartyLeader, IsInGuild, IsWarEnemy, IsWarAlly, IsSkulled
- stats/meta: GetHealthPercent, GetDirection, GetSpeed, GetVocation, GetSkull, GetPartyShield, GetGuildShield, GetOutfit, GetMasterId
- spatial: GetPosition, DistanceTo, DistanceToCreature, IsAdjacentTo, IsSameFloor, IsReachable, IsShootable
- utilities: Equals, ToString, ClearCache
Iterators and scan helpers for creature collections.
Iterators:
- Creature.ICreatures()
- Creature.IPlayers()
- Creature.IMonsters()
- Creature.INpcs()
Collection helpers:
- Creatures.GetVisibleCreatureIds()
- Creatures.GetVisibleCreatures()
- Creatures.GetCreatureByName(name)
- Creatures.GetLocalPlayerId()
- Creatures.GetPlayerIdUnderMouse()
- Creatures.GetFollowingCreatureId()
- Creatures.GetAttackingCreatureId()
- Creatures.IsCreatureOnScreen(...)
- Creatures.GetCreatureIdsByScan(...)
- Creatures.GetCreaturesByScan(...)
- Creatures.GetVisiblePlayers()
- Creatures.GetVisibleMonsters(ignoreSummons)
- Creatures.GetVisibleNpcs()
Normalized access to opened/sendable chat channels.
Object API:
- ChatChannel.New(channelOrId, channelName?)
- ChatChannel.FromIdentifier(identifier)
- ChatChannel.GetById(channelId) / GetByName(channelName)
- channel:GetId() / GetName() / CanSend() / IsOpened() / IsLocal() / IsServerLog() / IsValid()
- channel:Send(message) / Refresh() / ToTable() / ToString()
Storage/query API:
- ChatChannelStorage.IsAvailable()
- ChatChannelStorage.GetOpenedChannels() / GetChatChannels()
- ChatChannelStorage.GetLocalChatChannel() / GetServerLogChannel()
- ChatChannelStorage.GetChatChannelByName(name) / GetChatChannelById(id)
- ChatChannelStorage.HasChannelByName(name) / HasChannelById(id)
- ChatChannelStorage.GetOpenedChannelCount() / GetChatChannelCount()
- ChatChannelStorage.GetChannelNames(onlySendable?)
- ChatChannelStorage.ResolveChannel(identifier) / CanSend(identifier) / Send(message, identifier)
- ChatChannelStorage.ToNameLookupTable() / ToIdLookupTable() / GetSnapshot() / FormatChannel(channel)
A channel identifier may be an id, name, or normalized channel table. Public channel fields are id, name, canSend, isOpened, isLocal, and isServerLog. Check CanSend before sending; local chat and server-log pseudo-channels are not normal sendable channels.
Player-centric wrapper API.
Common state:
- Self.GetHealth / GetMaxHealth / GetHealthPercentage
- Self.GetMana / GetMaxMana / GetManaPercentage
- Self.GetCapacity / GetStamina
- Self.GetItemCount(itemId, tierLevel?)
- Self.GetCharacterWorld(characterName)
- Self.GetLevel / GetSoul / GetLevelPercentage
- Self.IsOnline / IsAlive / IsAttacking / IsFollowing
- Self.GetTargetId / GetFollowId / HasTarget / HasFollow
World/mouse:
- Self.GetMousePositionInWorld
- Self.GetMouseWorldX/Y/Z
- Self.GetMousePositionText
Actions:
- chat: Say, Whisper, Yell, SayOnChannel, SayToNpc, PrivateMessage
- combat: Attack, Follow, StopAttackAndFollow
- movement: Step, CancelWalk, Mount, Dismount
- interaction: UseItemInContainer, UseItemOnFloor, LookAtPosition, LookAtCreature
- npc trade: BuyItem, SellItem
Utilities:
- Self.GetStatsSnapshot()
- Self.FormatStatsSnapshot(...)
- Self.IsAvailable()
Account/session and window helpers.
Login/session API:
- Game.GetCharacterWorld(characterName)
- Game.LoginToPreviouslyLoggedCharacter()
- Game.LoginToAccount(email, password)
- Game.LoginToCharacter(characterName)
- Game.Logout()
- Game.EnterWorld()
- Game.OpenStore()
- Game.OpenContainerInNewWindow(equipmentSlotOrContainerId, fromContainerNumber?, fromContainerSlot?)
Notes:
- Login functions validate required string arguments and return boolean success from the Lua wrapper.
OpenContainerInNewWindowaccepts either oneEquipmentSlot.*value or a container item id plus its source container number and source slot.- Prefer Self wrappers for local-player convenience operations when they exist.
Map tile interaction wrappers.
Primary API:
- Map.UseItemOnFloor(position, stackPosition, itemId)
- Map.Look(position)
- Map.MoveItemFloorToContainer(itemId, fromPosition, containerIndex, slotIndex, itemCount)
- Map.MoveItemFloorToFloor(fromPosition, itemId, toPosition, itemCount)
- Map.GetTileFlags(position)
- Map.GetTileItems(position, includeCreatures)
- Map.GetObjectInfo(itemId)
- Map.FindPath(fromPosition, toPosition, maxComplexity, flags)
Read-only minimap tile queries and pathfinding helpers.
Primary API:
- Minimap.GetTileFlags(position)
- Minimap.GetTileItems(position, includeCreatures?)
- Minimap.IsWalkable(position) / IsPathable(position)
- Minimap.GetTilePixelColor(position)
- Minimap.IsPixelColorWalkable(pixelColorIndex)
- Minimap.IsWalkableByColor(position)
- Minimap.FindPath(fromPosition, toPosition, maxComplexity?, flags?)
- Minimap.GetTileInfo(position, includeCreatures?)
Tile checks may return nil when minimap data is unavailable. FindPath returns { Directions = integer[], pathFindResult = PathFindResult.* }; note the capital D in Directions. GetTileInfo returns position, flags, items, pixelColor, and walkableByColor.
Item use and trade wrappers.
Primary API:
- Item.Use(itemId)
- Item.UseOnSelf(itemId)
- Item.UseOnCreature(itemId, creatureId)
- Item.Buy(itemId, itemCount, ignoreCapacity, buyInShoppingBags)
- Item.Sell(itemId, itemCount, sellEquipped)
- Item.UseFromContainerOnFloor(floorPosition, fromItemId, toItemId, toStackPosition)
- Item.UseFromFloorToContainer(floorPosition, fromItemId, fromStackPosition, toItemId)
- Item.UseFromContainerToContainer(fromContainer, fromSlot, fromItemId, toContainer, toSlot, toItemId)
- Item.GetInfo(itemId)
- Item.GetName(itemId)
- Item.GetDescription(itemId)
- Item.HasFlag(itemId, fieldName)
- Item.IsContainer(itemId)
- Item.IsCumulative(itemId)
- Item.IsUsable(itemId)
- Item.IsMultiUsable(itemId)
- Item.IsMovable(itemId)
- Item.IsTakable(itemId)
- Item.IsGround(itemId)
- Item.IsLiquidContainer(itemId)
- Item.IsCreature(itemId)
- Item.GetFromContainer(containerNumber, slotIndex)
- Item.FindInContainer(containerNumber, itemId, tierLevel)
Capability-safe access to the currently opened NPC trade window.
Primary API:
- NpcTradeStorage.IsAvailable() / IsOpen()
- NpcTradeStorage.GetNpcName()
- NpcTradeStorage.GetOffers()
- NpcTradeStorage.GetOfferByItemId(itemId) / GetOfferByName(itemName)
- NpcTradeStorage.Buy(itemId, itemCount, ignoreCapacity?, buyInShoppingBags?)
- NpcTradeStorage.Sell(itemId, itemCount, sellEquipped?)
- NpcTradeStorage.FormatOffers()
- NpcTradeStorage.GetSnapshot()
Normalized offers contain itemId, name, buyPrice, sellPrice, and capacity. State/capability calls can return nil when no supported trade window is open; validate offers before buying or selling.
Container item movement and look wrappers.
Primary API:
- Container.MoveItemToContainer(...)
- Container.UseItem(...)
- Container.MoveItemToFloor(...)
- Container.MoveItemFromEquipmentToContainer(...)
- Container.MoveItemToEquipment(...)
- Container.LookItem(...)
- Container.GetOpenContainers()
- Container.GetByNumber(containerNumber)
- Container.GetByName(containerName)
- Container.GetById(containerId)
- Container.GetItems(containerNumber)
- Container.GetItem(containerNumber, slotIndex)
- Container.FindItem(containerNumber, itemId, tierLevel)
- Container.FindItemInOpenContainers(itemId, tierLevel)
- Container.GetSize(containerNumber)
- Container.GetItemsCount(containerNumber)
- Container.GetFreeSlots(containerNumber)
- Container.GetId(containerNumber)
- Container.GetName(containerNumber)
Equipment-slot reading and movement helpers.
Primary API:
- Inventory.GetEquipmentSlotConstants()
- Inventory.CanReadEquipment() / CanMoveEquipment()
- Inventory.GetSlotItem(equipmentSlot) / GetAllSlotItems()
- Inventory.Equip(itemId, tierLevel?)
- Inventory.LookSlotItem(itemId, equipmentSlot)
- Inventory.MoveFromContainerToSlot(containerIndex, slotIndex, itemId, equipmentSlot, itemCount?)
- Inventory.MoveFromSlotToContainer(equipmentSlot, containerIndex, slotIndex, itemId, itemCount?)
- Inventory.GetSlotItemId(equipmentSlot) / HasItemInSlot(equipmentSlot)
- Inventory.GetSlotIds() / GetSnapshot()
Use EquipmentSlot.* constants. Read helpers may return nil when equipment access is unavailable; call the capability methods and avoid assuming that a nil item means an empty slot.
Cooldown abstraction helpers.
Namespaces:
- Cooldowns.Spell: IsInCooldown, GetTimeLeft, WillBeReady, IsReady
- Cooldowns.Item: IsInCooldown, GetTimeLeft, WillBeReady, IsReady
- Cooldowns.Group: IsInCooldown, GetTimeLeft, WillBeReady, IsReady
- Cooldowns.UseWith: IsExhausted, IsReady
- Cooldowns.Utils: FormatTime, GetStatus, PrintStatus
Primary API:
- Spells.GetIdByWords(words)
- Spells.GetIdByName(name)
- Spells.GetWordsById(spellId)
- Spells.IsInCooldown(spellWordsOrId)
- Spells.GetLeftCooldownTime(spellWordsOrId)
- Spells.IsReady(spellWordsOrId)
- Spells.WillBeReady(spellWordsOrId, timeMs)
- Spells.GetGroupIds(spellWordsOrId)
- Spells.GetLeftGroupCooldownTime(groupId)
- Spells.GroupIsInCooldown(groupId)
- Spells.IsUseWithItemExhausted()
- Spells.GetInfo(spellWordsOrId)
- Spells.Item.* for rune/item cooldown APIs
Use the high-level Hotkeys, Cavebot, and proxy APIs when one matches the
task. The native Events table is available for direct scheduling and custom
registrations:
Events.Schedule(callback, delayMs, ...args) -> stringreturns an owner-scoped event ID.Events.GetScheduledEvents() -> string[]returns this script's pending IDs.Events.CancelScheduledEvent(eventId) -> booleancancels a pending callback.Events.RegisterKeyEvent(options) -> stringregisters a key callback and returns its opaque registration ID; useHotkeys.RegisterCombofor normal combinations.Events.RegisterPacketEvent(options) -> stringacceptsid,packet_id(one opcode or an array),callback, and optionalincoming(defaulttrue), then returns its opaque registration ID.Events.RegisterWalkerEvent(eventId, callback) -> integer|nilreturns a function reference for singular unregistration.Events.UnregisterKeyEvent(registrationId),UnregisterPacketEvent(registrationId), andUnregisterWalkerEvent(functionRef)return booleans. Pass the exact opaque value returned at registration. A stale or foreign ID returnsfalseand cannot remove another script's callback.Events.UnregisterAllKeyEvents(),UnregisterAllPacketEvents(), andUnregisterAllWalkerEvents()remove this script's registrations.
All registrations and scheduled callbacks are owned by the current script and are removed automatically when it stops. Scheduled callbacks run as managed coroutines and may yield. A scheduled callback failure ends only that callback. An event callback is disabled after exactly three consecutive uncaught failures; one successful terminal invocation resets its failure count. At most 64 event callbacks may be pending for a script, so callbacks should be short and should coalesce or discard replaceable telemetry rather than building a backlog.
Event proxy wrappers for common game event categories.
Available proxies:
- GenericTextMessageProxy
- BattleMessageProxy
- LootMessageProxy
- ContainerOpenProxy
- ContainerCloseProxy
- ContainerAddItemProxy
- ContainerUpdateItemProxy
- ContainerRemoveItemProxy
- StatsChangeProxy
- SkillsChangeProxy
- CreatureAddProxy
- CreatureRemoveProxy
- DeathProxy
Common pattern:
- local p = SomeProxy:New("name")
- p:OnReceive(function(proxy, ...) ... end)
Callback arguments after proxy:
- GenericTextMessageProxy, BattleMessageProxy, LootMessageProxy:
message - ContainerOpenProxy:
containerIndex, containerName, containerID - ContainerCloseProxy:
containerIndex - ContainerAddItemProxy, ContainerUpdateItemProxy:
containerIndex, slot, item - ContainerRemoveItemProxy:
containerIndex, slot - StatsChangeProxy, SkillsChangeProxy:
eventData - CreatureAddProxy:
creatureId, creatureName, position - CreatureRemoveProxy:
creatureId - DeathProxy: no additional arguments
The main high-level interface for querying and controlling configured bot features. Native state remains owned by the bot; Engine methods validate arguments and return Lua snapshots or operation results.
Primary namespaces:
- Engine.Healer
- Engine.Alarms
- Engine.AmmoRefill
- Engine.Features
- Engine.Equipment
- Engine.PVPTools
- Engine.MagicShooter
- Engine.Targeting
- Engine.Walker
- Engine.Lure
- Engine.Extras
- Engine.Channels
- Engine.Looter
- Engine.TankMode
- Engine.TimerActions
- Engine.SuppliesSorter
- Engine.HUD
- Engine.Scripter
- Engine.Delays
Use Engine.Features to query, enable, disable, or toggle public bot features, including Supplies Sorter. IDs for internal object dumping, queue/event infrastructure, and the scripter are rejected by the native boundary. Engine.Equipment provides live equipped-slot data and equipment actions; it is distinct from Equipment Manager's saved configuration. Magic Shooter and Targeting expose profile and explicit entry control.
The older global Features, Inventory, PVPTools, MagicShooter, and Targeting tables remain available for compatibility. New scripts should prefer the corresponding Engine.* namespaces.
Getters return values or detached tables; editing a returned entry/list never
edits native feature state. Use the matching explicit setter so validation,
parsed caches, timers, queued work, packet subscriptions, and HUD refresh side
effects remain correct. Engine.Walker.Defer(timeoutMs) and
CompleteDeferred(token) implement Walker's blocking-decision
handshake. Complete or allow every accepted token before its timeout.
Engine.Lure.UpdateSetting(index, setting) updates an existing copied lure
setting using native validation.
High-level cavebot orchestration wrappers over Walker and Lure Manager feature toggles.
Primary API:
- Cavebot.SetEnabled(enabled)
- Cavebot.Enable()
- Cavebot.Disable()
- Cavebot.IsEnabled()
- Cavebot.SetLureEnabled(enabled)
- Cavebot.EnableLure()
- Cavebot.DisableLure()
- Cavebot.IsLureEnabled()
- Cavebot.SetEnginesEnabled(walkerEnabled, lureEnabled)
- Cavebot.Resume()
- Cavebot.Defer(timeoutMs)
- Cavebot.GoTo(labelName)
- Cavebot.GoToLabel(labelName)
- Cavebot.Pause(milliseconds, autoResume)
- Cavebot.RegisterEvent(eventId, callback)
- Cavebot.ObserveLabel(callback)
- Cavebot.ObserveAction(callback)
- Cavebot.ObserveWaypointChange(callback)
- Cavebot.OnActionStarted(callback)
- Cavebot.OnActionCompleted(callback)
- Cavebot.OnWaypointChange(callback)
- Cavebot.InterceptLabel(callback)
- Cavebot.InterceptAction(callback)
- Cavebot.OnLabel(callback) (legacy blocking alias)
- Cavebot.OnAction(callback) (legacy blocking alias)
- Cavebot.UnregisterAllEvents()
- Cavebot.GetStatus()
- Cavebot.PrintStatus()
ObserveLabel, ObserveAction, and ObserveWaypointChange are non-blocking
telemetry callbacks and cannot pause Walker by registering. ObserveAction
reports that an Action waypoint was reached, before any blocking interceptor has
finished; it is not a success signal. OnWaypointChange is retained as a
compatibility alias for ObserveWaypointChange.
ObserveWaypointChange receives one table containing previousIndex, index,
type, x, y, z, label, labelName, and uniqueId; indices are
one-based and previousIndex is nil for the initial selection.
OnActionStarted and OnActionCompleted are the truthful, non-blocking Action
lifecycle APIs. Each receives one table. Both tables contain executionId,
action/name, the numeric Action kind, and a waypoint table with index,
uniqueId, x, y, and z. The completion table additionally contains:
ok:trueonly when the Action reached a successful terminal result.outcome:success,skipped,failure,timeout, orcancelled.description: the result or error description.result: the description on success; otherwisenil.error: the description on failure; otherwisenil.durationMs: elapsed milliseconds from actual Action start to completion.
Use executionId to correlate a start with exactly one terminal completion.
Action start is dispatched only after legacy Action interceptors have released.
Changing the selected waypoint, replacing or deleting the Action, clearing or
reloading the route, or resetting Walker completes an active Action as
cancelled; it is never reported as successful merely because it started.
OnLabel and OnAction retain their historical blocking behavior.
InterceptLabel and InterceptAction are the preferred explicit names when a
script deliberately needs that behavior.
Blocking interceptors release automatically when their callback returns.
Cavebot.Defer(timeoutMs) may be called only inside an interceptor when work
must continue after the callback returns. It returns an owner-scoped handle with
handle:Complete() and handle:Cancel(); both release the hold, return true
only on the first successful release, and cannot release another script's hold.
timeoutMs must be between 1 and 60000, and expiration fails open.
Walker namespace (full runtime wrappers):
- Cavebot.Walker.SetEnabled(enabled)
- Cavebot.Walker.IsEnabled()
- Cavebot.Walker.Resume()
- Cavebot.Walker.Defer(timeoutMs)
- Cavebot.Walker.CompleteDeferred(token)
- Cavebot.Walker.GoTo(labelName)
- Cavebot.Walker.GetSelectedWaypointIndex()
- Cavebot.Walker.SetSelectedWaypointIndex(index)
- Cavebot.Walker.SetWaypointPosition(index, x, y, z)
- Cavebot.Walker.SelectClosestWaypoint()
- Cavebot.Walker.GetWaypointCount()
- Cavebot.Walker.GetWaypoints()
- Cavebot.Walker.AddWaypoint(waypoint)
- Cavebot.Walker.InsertWaypoint(index, waypoint)
- Cavebot.Walker.ReplaceWaypoint(index, waypoint)
- Cavebot.Walker.DeleteWaypoint(index)
- Cavebot.Walker.ClearWaypoints()
- Cavebot.Walker.MoveWaypointUp(index?)
- Cavebot.Walker.MoveWaypointDown(index?)
- Cavebot.Walker.IsStuck()
- Cavebot.Walker.SetStartFromNearestWaypoint(enabled)
- Cavebot.Walker.GetStartFromNearestWaypoint()
- Cavebot.Walker.SetNodeDistance(distance)
- Cavebot.Walker.GetNodeDistance()
- Cavebot.Walker.SetWalkToLureCenter(enabled)
- Cavebot.Walker.GetWalkToLureCenter()
- Cavebot.Walker.SetLeaveLureOnPlayer(enabled)
- Cavebot.Walker.GetLeaveLureOnPlayer()
- Cavebot.Walker.SetLeaveLurePlayerMode(mode)
- Cavebot.Walker.GetLeaveLurePlayerMode()
- Cavebot.Walker.SetDebugHud(enabled)
- Cavebot.Walker.GetDebugHud()
- Cavebot.Walker.SetAutoRecorderEnabled(enabled)
- Cavebot.Walker.GetAutoRecorderEnabled()
- Cavebot.Walker.SetAutoRecorderOptions(options)
- Cavebot.Walker.GetAutoRecorderOptions()
- Cavebot.Walker.SetDistanceBetweenWaypoints(distance)
- Cavebot.Walker.GetDistanceBetweenWaypoints()
- Cavebot.Walker.SetPausedByLua(paused)
- Cavebot.Walker.IsPausedByLua()
Leave-lure player detection modes:
Cavebot.Walker.LeaveLurePlayerMode.NonAllyPlayers(0, default) ignores party and guild/allied-guild players.Cavebot.Walker.LeaveLurePlayerMode.AnyPlayer(1) reacts to every visible player other than the local character.
Waypoint script note:
- Script waypoints should call
Cavebot.Walker.Resume()when they are done. - If a waypoint script exits without resuming, the runtime resumes walking and reports a warning.
- Disabling the walker also stops an active waypoint script so it can later be enabled cleanly.
Position waypoint notes:
- Weak Horizontal Stand tries the exact target tile first, then accepts or moves to X - 1 or X + 1 on the same Y/Z.
- Weak Vertical Stand tries the exact target tile first, then accepts or moves to Y - 1 or Y + 1 on the same X/Z.
Actions namespace:
- Cavebot.Actions.GetLastResult()
- Cavebot.Actions.Register(actionType, handler)
- Cavebot.Actions.Run(context)
Built-in action types:
- check_supplies
- buy_supplies
- sell_loot
- open_depot
- deposit_items
- stash_items
- withdraw_supplies
- npc_say
- bank
- custom_script
- tasker
- imbuing
Action context conventions:
- actionType or action_type selects the handler.
- actionConfig or action_config contains action-specific config.
- successLabel and failureLabel can route the walker after action completion.
- Handlers return a table, commonly including ok, actionType, error, pending, goToLabel, and action-specific result fields.
- Cavebot.Actions.Run resumes the walker when the action completes unless a handler returns a route that changes the current waypoint.
Lure namespace (full runtime wrappers):
- Cavebot.Lure.SetEnabled(enabled)
- Cavebot.Lure.IsEnabled()
- Cavebot.Lure.GetState()
- Cavebot.Lure.IsLuring()
- Cavebot.Lure.IsFighting()
- Cavebot.Lure.SetForceLure(enabled)
- Cavebot.Lure.IsForceLure()
- Cavebot.Lure.EndForceLure()
- Cavebot.Lure.SetOption(option) -- 0 = Start/End, 1 = Dynamic, 2 = Kiting
- Cavebot.Lure.GetOption()
- Cavebot.Lure.SetNearRange(range)
- Cavebot.Lure.GetNearRange()
- Cavebot.Lure.SetAttackWhileLuring(enabled)
- Cavebot.Lure.GetAttackWhileLuring()
- Cavebot.Lure.SetConsiderOnlyReachable(enabled)
- Cavebot.Lure.GetConsiderOnlyReachable()
- Cavebot.Lure.SetSlowWalkDelayMs(delayMs)
- Cavebot.Lure.GetSlowWalkDelayMs()
- Cavebot.Lure.SetSlowWalkingCreaturesCount(count)
- Cavebot.Lure.GetSlowWalkingCreaturesCount()
- Cavebot.Lure.SetSlowWalkBurstSteps(steps)
- Cavebot.Lure.GetSlowWalkBurstSteps()
- Cavebot.Lure.SetIgnoringMonsters(enabled)
- Cavebot.Lure.GetIgnoringMonsters()
- Cavebot.Lure.SetStartEndLureActive(enabled)
- Cavebot.Lure.GetStartEndLureActive()
- Cavebot.Lure.SetWaypointDynamicLureActive(enabled)
- Cavebot.Lure.GetWaypointDynamicLureActive()
- Cavebot.Lure.SetUnblocking(enabled)
- Cavebot.Lure.GetUnblocking()
- Cavebot.Lure.GetLuredCreaturesCount()
- Cavebot.Lure.HasActiveSettings()
- Cavebot.Lure.IsOtherPlayerOnScreen()
- Cavebot.Lure.GetSettings()
- Cavebot.Lure.GetSettingCount()
- Cavebot.Lure.AddSetting(setting)
- Cavebot.Lure.UpdateSetting(index, updateData)
- Cavebot.Lure.RemoveSetting(index)
- Cavebot.Lure.ClearSettings()
Sound playback and queue control.
Primary API:
- Sound.Play(options)
- Sound.Stop()
- Sound.ClearQueue()
- Sound.GetQueueSize()
- Sound.IsPlaying()
- Sound.IsQueued(options)
- Sound.SetMinDelay(delayMs)
- Sound.GetCurrentDuration()
- Sound.GetFileDuration(filePath)
- Sound.PlayById(soundId, instant?)
- Sound.PlayByName(soundName, instant?)
- Sound.PlayFile(filePath, instant?)
- Sound.StopAll()
- Sound.GetQueueLength()
- Sound.PlayAndWait(options, maxWaitMs?)
- Sound.WaitForCompletion(maxWaitMs?)
- Sound.PlayByIdSmart(soundId, instant?)
- Sound.PlayByNameSmart(soundName, instant?)
- Sound.PlayFileSmart(filePath, instant?)
- Sound.PlayBotSound(nameOrWavFilename, instant?)
Sound.Play and Sound.IsQueued options must identify exactly one source:
sound_id = BotSoundId.*, sound_name = string, or file_path = string.
Sound.Play also accepts instant = boolean. Built-in IDs are exactly 0 through
13 (DISCONNECTED through UNJUSTIFIED_KILL); there are no custom IDs 14
through 18. PlayBotSound resolves a canonical built-in name and strips an
optional .wav suffix. For an arbitrary WAV file, pass its explicit absolute
path to PlayFile or Sound.Play({ file_path = ... }); do not construct an old
Documents/ValidusBot alarm path.
Playback, queue state, and stop/cleanup are owner-scoped, so one script cannot
claim another script's playback as its own. SetMinDelay changes the shared
sound manager delay and accepts 0 through 60,000 ms. The waiting helpers must run
inside a managed coroutine because they yield, and they use Time.MonotonicMs
instead of wall/CPU time. Smart helpers return false when the same source is
already queued or playing.
Time.MonotonicMs() -> integer
Returns milliseconds from an unspecified monotonic epoch. Use differences
between readings for elapsed-time decisions. The runtime uses the same
std::chrono::steady_clock basis for scheduler deadlines.
The current script's top-level body is executed first and its optional init()
is then invoked as a managed coroutine. Define init() for setup that may yield.
Define terminate() for short, synchronous cleanup only: it is protected,
non-yielding, called at most once, and has a 50 ms limit. Native owner-scoped
modules, schedules, events, HUD elements, sounds, network handles, and async
tokens are cleaned even if Lua cleanup fails.
Engine.Scripter.GetAvailableScripts()lists exact runnable.luafilenames.Engine.Scripter.Start(name),Stop(name), andRestart(name)operate on those exact names.Engine.Scripter.Refresh()refreshes the script list.Engine.Scripter.GetRunningScripts()reports currently active script names.Engine.Scripter.GetOutput(name)returns current output or the most recently archived output.Engine.Scripter.StopSelf()is the only supported way for a running script to stop itself.Script.Unload()remains a compatibility self-stop call; preferStopSelf.
A script cannot use Stop(name) or Restart(name) on itself and cannot disable
the sandbox or execute an arbitrary source string. Every script writes its own
runtime log under the product UserData/BotLogs area, including explicit PASS
and FAIL messages printed by test scripts. GetOutput is read-only and returns
an empty string when no current or archived output exists.
Persistent JSON-compatible values with per-script scopes and explicit named scopes shared between scripts. No file paths or manual serialization are needed. Existing per-script behavior is unchanged.
Direct scopes:
- Storage.Global.Get(key, default?) / Set(key, value) / Remove(key) / Clear()
- Storage.Character.Get(key, default?) / Set(key, value) / Remove(key) / Clear()
Logical namespaces:
- Storage.Namespace(namespace, perCharacter?)
- Storage.ForCharacter(namespace)
- scope:Get(key, default?) / Set(key, value) / Remove(key)
Named cross-script scopes:
- Storage.Shared(namespace)
- Storage.SharedForCharacter(namespace)
- shared:Get(key, default?) -> value, errorMessage?
- shared:Set(key, value) -> success, errorMessage?
- shared:Remove(key) -> success, errorMessage?
- shared:Clear() -> success, errorMessage?
- shared:Update(key, updater, default?) -> success, newValue, errorMessage?
- shared:OnChanged(callback, key?, includeSelf?) -> subscriptionId?, errorMessage?
- shared:OffChanged(subscriptionId) -> success, errorMessage?
Storage.Global, Storage.Character, Storage.Namespace, and
Storage.ForCharacter remain private to the current script file. "Global" in
that API means every character running that one script; it does not mean every
Lua script.
Storage.Shared("name") opens a durable namespace available to every script,
including temporary Walker Lua waypoints. Storage.SharedForCharacter("name")
opens the same named file but selects data isolated by the currently logged-in
character. Any installed script that knows a shared namespace can access it, so
a namespace is a coordination boundary rather than a security boundary.
Use Update for read-modify-write operations which must not lose concurrent
changes:
local state = Storage.SharedForCharacter("cavebot.supplies")
local success, visits, updateError = state:Update("visits", function(current)
return (current or 0) + 1
end)The updater runs without a native or filesystem lock and may run again when a
different script or bot process wins a concurrent write. It should therefore
be deterministic and free of external side effects. Returning nil removes the
key. If default is a table, do not mutate that table in place; construct and
return a new table instead. Updates retry at most eight times and then return
an error instead of blocking indefinitely.
Shared operations coordinate across scripts and bot processes, use bounded lock waits, revisions, and atomic file replacement. Calls may still perform local disk I/O, so storage should persist meaningful state transitions rather than act as a per-frame message bus. Keep frequently changing values in Lua memory and persist them only when needed.
Use OnChanged to receive committed mutations from other scripts in the same
injected bot process. Pass a key to observe one field or nil to observe the
whole selected scope. Notifications exclude writes made by the subscribing
script unless includeSelf is true. The returned subscription is owned by the
script, keeps it alive as an event resource, and is removed automatically when
the script stops; OffChanged removes it early.
local state = Storage.Shared("cavebot.supplies")
local subscriptionId, subscribeError = state:OnChanged(function(event)
print(event.operation, event.key, event.writer.name, event.revision)
if event.newValueIncluded then
print("new value:", event.newValue)
end
end, "visits")The callback receives a table with namespace, operation (set, remove,
or clear), scope, revision, timestampUnixMs, and a writer table with
stable process-local id, human-readable name, and type (script,
walker, or one_shot). Key-specific events also include key,
previousExists, newExists, previousValueIncluded, newValueIncluded, and
the corresponding previousValue/newValue fields when included. A whole-scope
clear instead reports changedCount, up to 256 changedKeys, and
changedKeysTruncated. Individual values larger than 256 KiB are omitted from
the notification while their existence flags remain accurate; the subscriber
can call Get when it needs the large current value.
Change callbacks are queued only after the storage lock is released and run as normal managed event coroutines. They may yield and may access storage safely. The standard event failure policy disables a subscription after three consecutive uncaught callback failures. Each script may own at most 64 shared storage subscriptions; the native notification queue is bounded to 32 events and 8 MiB, the process accepts at most 512 subscriptions, and callback fan-out is time-sliced to 128 admissions per manager pass. Remaining deliveries stay queued, so a writer cannot grow DLL memory or monopolize the game thread without limit.
Notifications are process-local: storage writes remain safe across bot
processes, but a change made by another injected client is observed on the next
explicit Get, not through OnChanged. Reads do not emit access events. That
avoids recursion (Get causing a callback which calls Get again), unnecessary
disk traffic, and leaking read activity between cooperating scripts. Use an
explicit audit key if scripts need to record meaningful reads.
Subscriptions and event metadata exist only at runtime. They do not change the shared-storage JSON format, so existing storage files and Lua scripts remain compatible.
Namespaces must be non-empty, at most 64 bytes, and contain only letters,
numbers, _, -, and .. Per-script namespace plus key combinations and
shared keys may not exceed 256 bytes; shared keys cannot contain NUL bytes.
Supported values are nil, booleans,
finite numbers, strings, and nested tables with string keys or contiguous
1-based array indexes. Cyclic tables are rejected. Each storage file is limited
to 2 MB, 12 nested levels, and 4,096 entries per table.
Read-only VIP/contact queries through the canonical VIP table.
Primary API:
- VIP.IsAvailable()
- VIP.GetAll() / Get(name) / Exists(name)
- VIP.Count() / CountOnline()
- VIP.IsOnline(name) / GetType(name) / GetDescription(name) / GetNotifyOnLogin(name)
- VIP.GetNames(onlyOnline?) / GetByType(vipType) / GetHearts() / IsHeart(name)
- VIP.FindByPrefix(prefix, onlyOnline?)
- VIP.ToLookupTable() / GetSnapshot()
Normalized VIP entries contain name, description, type, online, and notifyOnLogin. GetSnapshot contains available, count, onlineCount, heartCount, names, onlineNames, and vips. Use VipFlag.* when filtering by type.
UI drawing wrapper classes for screen/world overlays.
Core classes:
- ScreenText
- ScreenImage
- WorldText
- WorldBox
- WorldImage
All classes support New, Create, Remove, SetEnabled, SetZIndex, SetRenderLayer, SetParent, ClearParent, IsCreated, GetEnabled, GetVisible, GetPosition, GetWidth, and GetHeight as applicable. Setters return the same object for chaining.
Class-specific methods:
- ScreenText: SetText, SetColor, SetFont, SetFontFamily, SetFontSize, SetAlignment, SetDraggable, SetDragTarget, SetOnDragEnd, SetClickable, SetScreenPosition, GetText, GetColor
- ScreenImage: SetSource, SetSourceBase64, SetSourceBytes, SetItemId, SetItemName, SetSize, SetLabel, SetAlignment, SetDraggable, SetDragTarget, SetOnDragEnd, SetClickable, SetScreenPosition
- WorldText: SetText, SetColor, SetFont, SetFontFamily, SetFontSize, SetPosition, SetLifetime, SetOffset, GetText, GetColor
- WorldBox: SetSize, SetWidth, SetHeight, SetColor, SetBorderWidth, SetBorderColor, SetPosition, SetLifetime, GetColor
- WorldImage: SetSource, SetSourceBase64, SetSourceBytes, SetItemId, SetItemName, SetSize, SetLabel, SetPosition, SetOffset, SetLifetime
Use HUD objects for visual diagnostics, status displays, labels, and map markers. IDs should be stable and unique within the script.
Render-layer notes:
- Every HUD element uses
HUDRenderLayer.MAPby default, preserving the established game-view parent and clipping behavior. - Pass
HUDRenderLayer.OVERLAYas the finalNew(...)argument or callSetRenderLayer(HUDRenderLayer.OVERLAY)beforeCreate()to draw over Tibia panels outside the map rectangle. - A literal null Qt parent is not exposed because an unparented
QQuickItemnormally leaves the visual scene. The overlay layer safely uses the highest available item in Tibia's existing Qt scene. SetRenderLayeris creation-only. Choose the layer beforeCreate(); changing it afterward raises a Lua error.SetZIndexstill orders elements within their selected layer. Overlay elements receive an internal scene-layer bias so they remain above normal client QQuick items.SetParentandClearParentare separate logical HUD relationships; they control visibility/removal/movement cascades and do not select the Qt render layer. Logical parents and children must use the same render layer.
local overlayTitle = ScreenText:New("overlay_title", HUDRenderLayer.OVERLAY)
:SetText("Drawn above Tibia panels")
:SetFont("Segoe UI", 20)
:SetScreenPosition(700, 120)
:SetZIndex(10)
:Create()
-- Equivalent builder form:
local overlayIcon = ScreenImage:New("overlay_icon")
:SetRenderLayer(HUDRenderLayer.OVERLAY)
:SetSourceBase64(MY_PNG_OR_GIF_BASE64)
:SetSize(32, 32)
:SetScreenPosition(760, 120)
:Create()Screen image notes:
- ScreenImage:SetLabel(text, color, offsetX, offsetY) attaches or updates text on the image.
- ScreenImage:SetScreenPosition(x, y) positions image HUD elements in screen pixels.
- ScreenImage:SetParent(parent_id) can parent icons to a draggable ScreenText handle; children keep their current offset when the parent moves.
ScreenImage:SetSource(path)andWorldImage:SetSource(path)load PNG, JPG, or animated GIF files from a full path. Asynchronous PNG/GIF loading requires a local path; remote/UNC PNG/GIF paths are rejected so script shutdown cannot be held by network filesystem I/O.ScreenImage:SetSourceBase64(base64Image)andWorldImage:SetSourceBase64(base64Image)embed PNG or animated GIF data directly in the script. Raw Base64,data:image/png;base64,..., anddata:image/gif;base64,...values are accepted.ScreenImage:SetSourceBytes(imageBytes)andWorldImage:SetSourceBytes(imageBytes)accept either a contiguous Lua array of integer bytes or a binary Lua string, including hexadecimal PNG or GIF bytes.- Animated GIF frames and their frame delays are preserved for both screen and world images. GIF delays are bounded to 33-1000 ms per frame.
- PNG/GIF file reads, Base64 parsing, and image decompression run asynchronously.
Create()returns after queuing the HUD element; the image becomes visible when decoding finishes. Removing the element or stopping its script safely cancels or discards unfinished work. - Embedded image data is limited to 4 MiB. A Lua byte-array table is limited to 128 KiB so copying it cannot monopolize the client thread; use Base64 or a binary string for larger embedded images. PNG dimensions are limited to 2048x2048. GIFs are limited to 512x512, 64 frames, and a bounded total decoded size.
- Choose exactly one source setter per image; calling another source setter replaces the prior selection.
Text font notes:
ScreenTextandWorldTextuse Tibia's HUD font and size by default.SetFont(family, pixelSize)selects an installed system-font family and a pixel size from 1 to 256. It works both before and afterCreate().SetFontFamily(family)andSetFontSize(pixelSize)update one property while preserving the other.- Pass
nilfor a property to inherit that property from Tibia again;SetFont(nil, nil)fully resets the element. - A missing system font may be replaced by a platform fallback, so scripts should prefer common Windows font-family names.
local title = ScreenText:New("status_title")
:SetText("Validus status")
:SetFont("Segoe UI", 20)
:SetScreenPosition(120, 80)
:Create()
title:SetFontSize(26) -- runtime resize
title:SetFontFamily("Arial") -- runtime family change
title:SetFont(nil, nil) -- restore Tibia font and sizeShared gameplay constants/enums for movement, pathfinding, effects, equipment, chat, creature state, combat modes, skills, VIP flags, vocation, and walker events.
Use constants from this file instead of magic numbers.
These examples are intentionally small, defensive, and written in the public PascalCase API style. They are good patterns for LLM-generated scripts to copy.
Use Module.Every for repeating work and check that the player is available.
Leave unexpected failures uncaught so the runtime can log and isolate the
module. Add a narrow pcall only around an operation that has a defined
recoverable fallback.
local SCRIPT_ID = "low_hp_sound_example"
local function tick()
if not Self.IsAvailable() then
return
end
local hp = Self.GetHealthPercentage()
if type(hp) == "number" and hp <= 35 then
Sound.PlayByIdSmart(BotSoundId.LOW_HEALTH)
end
end
function init()
Module.Every(SCRIPT_ID .. "_tick", tick, 1000)
print("[" .. SCRIPT_ID .. "] PASS: initialized")
endUse Creatures.GetVisibleMonsters() and creature wrapper methods instead of direct engine globals.
local SCRIPT_ID = "monster_scan_example"
Module.Every(SCRIPT_ID .. "_scan", function()
local player = Creature.GetLocalPlayer()
if not player then
return
end
local monsters = Creatures.GetVisibleMonsters(true)
local closestName = nil
local closestDistance = nil
for _, monster in ipairs(monsters) do
if monster:IsValid() then
local distance = monster:DistanceToCreature(player)
if closestDistance == nil or distance < closestDistance then
closestDistance = distance
closestName = monster:GetName()
end
end
end
if closestName then
print("Closest monster: " .. closestName .. " at distance " .. tostring(closestDistance))
end
end, 1000)Create a persistent HUD object once, then update its text from a scheduled module.
local SCRIPT_ID = "screen_status_example"
local statusText = ScreenText:New(SCRIPT_ID .. "_hud")
statusText
:SetColor({ r = 255, g = 255, b = 255, a = 255 })
:SetText("Starting...")
:Create()
:SetScreenPosition(25, 80)
Module.Every(SCRIPT_ID .. "_update", function()
if not Self.IsAvailable() then
statusText:SetText("Player unavailable")
return
end
local hp = Self.GetHealthPercentage() or 0
local mana = Self.GetManaPercentage() or 0
statusText:SetText("HP " .. tostring(hp) .. "% | Mana " .. tostring(mana) .. "%")
end, 1000)Use world HUD objects for short-lived visual debugging.
local SCRIPT_ID = "mouse_marker_example"
local pos = Self.GetMousePositionInWorld()
if pos then
WorldBox:New(SCRIPT_ID .. "_box", pos.x, pos.y, pos.z)
:SetSize(32, 32)
:SetColor({ r = 255, g = 0, b = 0, a = 60 })
:SetBorderColor({ r = 255, g = 0, b = 0, a = 255 })
:SetLifetime(3000)
:Create()
endContainer searches should tolerate missing items and closed backpacks.
local ITEM_ID = 268
local item = Container.FindItemInOpenContainers(ITEM_ID)
if item then
print("Found item " .. tostring(ITEM_ID) .. " in an open container.")
else
print("Item " .. tostring(ITEM_ID) .. " was not found in open containers.")
endWaypoint script labels should always resume the walker when done.
Self.Say("hi")
-- Keep this as the final line of normal waypoint scripts.
Cavebot.Walker.Resume()Return structured action results so the cavebot can decide whether to continue or jump to another label.
Cavebot.Actions.Register("check_capacity_for_refill", function(context)
local minCapacity = tonumber(context.minCapacity) or 100
local capacity = Self.GetCapacity()
if type(capacity) ~= "number" then
return {
ok = false,
actionType = "check_capacity_for_refill",
error = "capacity_unavailable",
goToLabel = context.failureLabel
}
end
local needsRefill = capacity < minCapacity
return {
ok = true,
actionType = "check_capacity_for_refill",
needsRefill = needsRefill,
goToLabel = needsRefill and context.failureLabel or context.successLabel
}
end)Register hotkeys with a stable id and keep the callback short.
Hotkeys.RegisterCombo({
id = "say_hi_hotkey",
combo = "ctrl+h",
callback = function()
if Self.IsAvailable() then
Self.Say("hi")
end
end
})Use the public PascalCase modules from the core libraries.
-- Good
local hp = Self.GetHealthPercentage()
local monsters = Creatures.GetVisibleMonsters(true)
local player = Creature.GetLocalPlayer()Do not generate scripts that call old lower-camel names or undocumented low-level globals. Use the documented PascalCase modules instead.
Before finalizing any script, verify:
- All loops yield with
wait, a module, or a scheduled callback and cannot freeze the game thread. - Every table access checks nil/type when live game or feature data can be absent.
- Only documented PascalCase APIs and named enum constants are used.
- Feature operations do not touch reserved/internal features and use idempotent Set/Enable/Disable calls.
- Alt is not used for registered callback hotkeys; it is allowed only for synthetic
Hotkeys.SendCombo. - Position/creature access handles invalid, despawned, or cross-floor objects safely.
- IDs, indexes, percentages, delays, and ranges are validated before mutation.
- Repeating modules are not hidden inside a blanket
pcall; recoverable catches are narrow and logged. - Callback work is bounded, event backlogs are avoided, and delays use monotonic time.
- Detached getter snapshots are never edited as if they were live settings.
- Every accepted Walker defer token is completed or intentionally allowed to time out.
terminate()is synchronous, non-yielding, fast, and restores any non-owner-scoped setting the script intentionally changed.- Stable IDs/names are used for modules, events, hotkeys, HUD elements, and storage namespaces.
- Tests print explicit PASS and FAIL results so both UI output and per-script log files are useful.
Use this as baseline for generated scripts.
local SCRIPT_ID = "my_script_id"
local function log(msg)
print("[" .. SCRIPT_ID .. "] " .. tostring(msg))
end
local function tick()
if not Self.IsAvailable() then
return
end
-- Keep work bounded. Let unexpected errors reach the runtime so this
-- module is logged and isolated. Use pcall only for a known recoverable
-- operation with a real fallback.
end
function init()
Module.Every(SCRIPT_ID .. "_tick", tick, 200)
log("PASS: initialized")
end
function terminate()
-- Do not call wait() here. Native owner-scoped resources are cleaned
-- automatically; only restore intentional shared/live setting changes.
log("stopped")
endWhen generating ValidusBot Lua scripts:
- Use only exact APIs and enum names documented in this file and its generated appendix; never invent a getter, action, or generic update table.
- Prefer canonical core wrappers and
Engine.*namespaces over compatibility globals or underscore-prefixed bindings. - Include argument validation and nil/type checks for unavailable live state.
- Use Alt only with
Hotkeys.SendCombo, never with callback registration. - Never use or toggle the Objects Dumper or another internal/reserved feature.
- For repeated logic, use
Module.Every; for one-shot work, useModule.AfterorEvents.Schedule; all loops must yield. - Keep callbacks small because Lua shares the game thread and is cooperatively budgeted.
- Do not blanket-
pcallrepeating modules. Catch only expected recoverable failures, log them, and preserve a useful fallback. - Treat getter tables as snapshots and change bot state only through explicit setters/actions.
- Use
Time.MonotonicMs()for elapsed time andStoragefor JSON-compatible persistent script state. - Put yieldable setup in
init()and only fast, non-yielding cleanup interminate(). - Use stable owner-scoped names and emit explicit PASS/FAIL lines in diagnostic scripts.
- Return one complete runnable
.luafile with concise comments and no TODO placeholders unless requested.
For each requested behavior, an LLM should:
- Find the canonical signature in Appendix A and named constants in Appendix B.
- Prefer the highest-level matching wrapper (
Cavebot,Hotkeys,Cooldowns,Spells,Sound,Storage, or a HUD class). - Use
Engine.<Feature>only for explicit feature configuration or actions, and call a setter rather than editing a getter snapshot. - Decide whether the work is immediate, repeating, one-shot, or event-driven and choose
init,Module.Every,Module.After/Events.Schedule, or an event proxy accordingly. - Add capability checks for architecture/client-version-specific functions and nil checks for unavailable game state.
- Identify owner-scoped resources and any shared/live setting that must be restored in
terminate(). - Ensure errors remain observable, callbacks stay bounded, and validation/test output states PASS or FAIL explicitly.
Use this prompt with this file attached:
"Generate a production-safe ValidusBot Lua script using only exact APIs from the attached spec and its generated appendix. Script goal: . Prefer canonical high-level wrappers, validate live values, use managed yielding/scheduling, keep callbacks bounded, and let unexpected module errors reach the runtime. Use Alt only for synthetic SendCombo calls. Return one complete .lua file with explicit diagnostic logging and no invented APIs."
Use Engine for bot feature configuration and actions. Configuration is exposed through explicit getters and setters; do not assume that feature objects or their internal fields are available. Getter tables are detached snapshots, so changing a returned table does not change the bot. Call the matching setter.
The main feature namespaces are Engine.Healer, Engine.Conditions, Engine.HealFriend, Engine.MagicShooter, Engine.Targeting, Engine.AmmoRefill, Engine.EquipmentManager, Engine.Alarms, Engine.PVPTools, Engine.ComboBot, Engine.Extras, Engine.TankMode, Engine.Looter, Engine.TimerActions, Engine.SuppliesSorter, Engine.Channels, Engine.Walker, Engine.Lure, Engine.HUD, Engine.Delays, and Engine.Scripter. Feature activation remains under Engine.Features.
Important behavior:
- Entry indices are 1-based. Most entry setters affect the active profile; profile-selection functions should be called first when a feature supports profiles.
- Explicit setters validate types and ranges and preserve feature side effects such as timer resets, parsed-name cache rebuilds, packet-event refreshes, and HUD state refreshes.
Engine.ComboBot.GetRoomState()omits room passwords and transport details. Lua cannot connect, disconnect, or send raw Combo Bot room commands.Engine.Scripter.Start(name)accepts only an exact.luafilename returned byEngine.Scripter.GetAvailableScripts(). It cannot execute source strings or disable the sandbox.Engine.Scripter.GetOutput(name)returns the current or most recently archived Runtime Workspace output for that exact script filename. It is read-only and returns an empty string when no output is available.- A running script must call
Engine.Scripter.StopSelf()to unload itself. Self-restart is intentionally unavailable; another script may callRestart(name). Engine.HUDelement operations retain per-script ownership. A script cannot mutate or remove another script's HUD elements.Engine.Walker.Defer(timeoutMs)returns an owner-bound decision token. Finish it withCompleteDeferred(token); invalid, expired, or cross-script tokens are rejected.Engine.Lure.UpdateSetting(index, setting)updates a 1-based setting through native parsing/validation; tables returned byGetSettings()are still detached copies.Engine.Delays.SetServerPingCheckEnabled()also applies the required game ping-check interval change.- Internal services such as the object dumper, packet/event dispatcher, use-item queue, and Validus networking are not exposed through
Engine.
The exact signatures below are authoritative. Avoid legacy generic update-table helpers; use the explicit field setter for the value being changed.
Generated from docs/Scripts/core. It intentionally excludes local helpers, compatibility aliases, raw bindings, protocol details, and API-surface bootstrap internals. Use the canonical names below; if a function is absent, treat it as unavailable.
Cavebot.Defer(timeoutMs)Cavebot.Disable()Cavebot.DisableLure()Cavebot.Enable()Cavebot.EnableLure()Cavebot.GetStatus()Cavebot.GoTo(labelName)Cavebot.GoToLabel(labelName)Cavebot.InterceptAction(callback)Cavebot.InterceptLabel(callback)Cavebot.IsEnabled()Cavebot.IsLureEnabled()Cavebot.Lure.AddSetting(setting)Cavebot.Lure.ClearSettings()Cavebot.Lure.EndForceLure()Cavebot.Lure.GetAttackWhileLuring()Cavebot.Lure.GetConsiderOnlyReachable()Cavebot.Lure.GetIgnoringMonsters()Cavebot.Lure.GetLuredCreaturesCount()Cavebot.Lure.GetNearRange()Cavebot.Lure.GetOption()Cavebot.Lure.GetSettingCount()Cavebot.Lure.GetSettings()Cavebot.Lure.GetSlowWalkBurstSteps()Cavebot.Lure.GetSlowWalkDelayMs()Cavebot.Lure.GetSlowWalkingCreaturesCount()Cavebot.Lure.GetStartEndLureActive()Cavebot.Lure.GetState()Cavebot.Lure.GetUnblocking()Cavebot.Lure.GetWaypointDynamicLureActive()Cavebot.Lure.HasActiveSettings()Cavebot.Lure.IsEnabled()Cavebot.Lure.IsFighting()Cavebot.Lure.IsForceLure()Cavebot.Lure.IsLuring()Cavebot.Lure.IsOtherPlayerOnScreen()Cavebot.Lure.RemoveSetting(index)Cavebot.Lure.SetAttackWhileLuring(enabled)Cavebot.Lure.SetConsiderOnlyReachable(enabled)Cavebot.Lure.SetEnabled(enabled)Cavebot.Lure.SetForceLure(enabled)Cavebot.Lure.SetIgnoringMonsters(enabled)Cavebot.Lure.SetNearRange(range)Cavebot.Lure.SetOption(option)Cavebot.Lure.SetSlowWalkBurstSteps(steps)Cavebot.Lure.SetSlowWalkDelayMs(delayMs)Cavebot.Lure.SetSlowWalkingCreaturesCount(count)Cavebot.Lure.SetStartEndLureActive(enabled)Cavebot.Lure.SetUnblocking(enabled)Cavebot.Lure.SetWaypointDynamicLureActive(enabled)Cavebot.Lure.UpdateSetting(index, updateData)Cavebot.ObserveAction(callback)Cavebot.ObserveLabel(callback)Cavebot.ObserveWaypointChange(callback)Cavebot.OnAction(callback)Cavebot.OnActionCompleted(callback)Cavebot.OnActionStarted(callback)Cavebot.OnLabel(callback)Cavebot.OnWaypointChange(callback)Cavebot.Pause(milliseconds, autoResume)Cavebot.PrintStatus()Cavebot.RegisterEvent(eventId, callback)Cavebot.Resume()Cavebot.SetEnabled(enabled)Cavebot.SetEnginesEnabled(walkerEnabled, lureEnabled)Cavebot.SetLureEnabled(enabled)Cavebot.UnregisterAllEvents()Cavebot.Walker.AddWaypoint(waypoint)Cavebot.Walker.ClearWaypoints()Cavebot.Walker.CompleteDeferred(token)Cavebot.Walker.Defer(timeoutMs)Cavebot.Walker.DeleteWaypoint(index)Cavebot.Walker.GetAutoRecorderEnabled()Cavebot.Walker.GetAutoRecorderOptions()Cavebot.Walker.GetDebugHud()Cavebot.Walker.GetDistanceBetweenWaypoints()Cavebot.Walker.GetLeaveLureOnPlayer()Cavebot.Walker.GetLeaveLurePlayerMode() -> integerCavebot.Walker.GetNodeDistance()Cavebot.Walker.GetSelectedWaypointIndex()Cavebot.Walker.GetStartFromNearestWaypoint()Cavebot.Walker.GetWalkToLureCenter()Cavebot.Walker.GetWaypointCount()Cavebot.Walker.GetWaypoints()Cavebot.Walker.GoTo(labelName)Cavebot.Walker.InsertWaypoint(index, waypoint)Cavebot.Walker.IsEnabled()Cavebot.Walker.IsPausedByLua()Cavebot.Walker.IsStuck()Cavebot.Walker.MoveWaypointDown(index)Cavebot.Walker.MoveWaypointUp(index)Cavebot.Walker.ReplaceWaypoint(index, waypoint)Cavebot.Walker.Resume()Cavebot.Walker.SelectClosestWaypoint()Cavebot.Walker.SetAutoRecorderEnabled(enabled)Cavebot.Walker.SetAutoRecorderOptions(options)Cavebot.Walker.SetDebugHud(enabled)Cavebot.Walker.SetDistanceBetweenWaypoints(distance)Cavebot.Walker.SetEnabled(enabled)Cavebot.Walker.SetLeaveLureOnPlayer(enabled)Cavebot.Walker.SetLeaveLurePlayerMode(mode: integer) -> booleanCavebot.Walker.SetNodeDistance(distance)Cavebot.Walker.SetPausedByLua(paused)Cavebot.Walker.SetSelectedWaypointIndex(index)Cavebot.Walker.SetStartFromNearestWaypoint(enabled)Cavebot.Walker.SetWalkToLureCenter(enabled)Cavebot.Walker.SetWaypointPosition(index: integer, x: integer, y: integer, z: integer) -> boolean
Cavebot.Actions.GetLastResult()Cavebot.Actions.Register(actionType, handler)Cavebot.Actions.Run(context)
ChatChannel.FromIdentifier(identifier: any) -> table|nilChatChannel.GetById(channelId: integer) -> table|nilChatChannel.GetByName(channelName: string) -> table|nilChatChannel.New(channelOrId: table|integer, channelName?: string) -> tableChatChannel:CanSend() -> booleanChatChannel:GetId() -> integerChatChannel:GetName() -> stringChatChannel:IsLocal() -> booleanChatChannel:IsOpened() -> booleanChatChannel:IsServerLog() -> booleanChatChannel:IsValid() -> booleanChatChannel:Refresh() -> booleanChatChannel:Send(message: string) -> booleanChatChannel:ToString() -> stringChatChannel:ToTable() -> table
ChatChannelStorage.CanSend(channelIdentifier: any) -> booleanChatChannelStorage.FormatChannel(channel: table) -> stringChatChannelStorage.GetChannelNames(onlySendable?: boolean) -> string[]ChatChannelStorage.GetChatChannelById(channelId: integer) -> table|nilChatChannelStorage.GetChatChannelByName(channelName: string) -> table|nilChatChannelStorage.GetChatChannelCount() -> integerChatChannelStorage.GetChatChannels() -> table[]ChatChannelStorage.GetLocalChatChannel() -> table|nilChatChannelStorage.GetOpenedChannelCount() -> integerChatChannelStorage.GetOpenedChannels() -> table[]ChatChannelStorage.GetServerLogChannel() -> table|nilChatChannelStorage.GetSnapshot() -> tableChatChannelStorage.HasChannelById(channelId: integer) -> booleanChatChannelStorage.HasChannelByName(channelName: string) -> booleanChatChannelStorage.IsAvailable() -> booleanChatChannelStorage.ResolveChannel(channelIdentifier: any) -> table|nilChatChannelStorage.Send(message: string, channelIdentifier: any) -> booleanChatChannelStorage.ToIdLookupTable() -> tableChatChannelStorage.ToNameLookupTable() -> table
Container.FindItem(containerNumber: integer, itemId: integer, tierLevel?: integer) -> table|nilContainer.FindItemInOpenContainers(itemId: integer, tierLevel?: integer) -> table|nilContainer.GetById(containerId: integer) -> table|nilContainer.GetByName(containerName: string) -> table|nilContainer.GetByNumber(containerNumber: integer) -> table|nilContainer.GetFreeSlots(containerNumber: integer) -> integer|nilContainer.GetId(containerNumber: integer) -> integer|nilContainer.GetItem(containerNumber: integer, slotIndex: integer) -> table|nilContainer.GetItems(containerNumber: integer) -> table[]Container.GetItemsCount(containerNumber: integer) -> integer|nilContainer.GetName(containerNumber: integer) -> string|nilContainer.GetOpenContainers() -> table[]Container.GetSize(containerNumber: integer) -> integer|nilContainer.LookItem(itemId: integer, itemPos: integer, containerIndex: integer) -> anyContainer.MoveItemFromEquipmentToContainer(equipmentSlot: integer, containerIndex: integer, slotIndex: integer, itemId: integer, itemCount: integer) -> anyContainer.MoveItemToContainer(fromContainerIndex: integer, fromSlotIndex: integer, itemId: integer, toContainerIndex: integer, toSlotIndex: integer, itemCount: integer) -> anyContainer.MoveItemToEquipment(containerIndex: integer, slotIndex: integer, itemId: integer, equipmentSlot: integer, itemCount: integer) -> anyContainer.MoveItemToFloor(containerIndex: integer, slotIndex: integer, itemId: integer, toPosition: table, itemCount: integer) -> anyContainer.UseItem(itemId: integer, containerIndex: integer, itemPos: integer, useItemWithHotkey?: boolean) -> any
Cooldowns.Group.GetTimeLeft(groupId: integer) -> integerCooldowns.Group.IsInCooldown(groupId: integer) -> booleanCooldowns.Group.IsReady(groupId: integer) -> booleanCooldowns.Group.WillBeReady(groupId: integer, timeMs?: integer) -> booleanCooldowns.Item.GetTimeLeft(itemId: integer) -> integerCooldowns.Item.IsInCooldown(itemId: integer) -> booleanCooldowns.Item.IsReady(itemId: integer) -> booleanCooldowns.Item.WillBeReady(itemId: integer, timeMs?: integer) -> booleanCooldowns.Spell.GetTimeLeft(spellWords: string) -> integerCooldowns.Spell.IsInCooldown(spellWords: string) -> booleanCooldowns.Spell.IsReady(spellWords: string) -> booleanCooldowns.Spell.WillBeReady(spellWords: string, timeMs?: integer) -> booleanCooldowns.UseWith.IsExhausted() -> booleanCooldowns.UseWith.IsReady() -> booleanCooldowns.Utils.FormatTime(ms: number) -> stringCooldowns.Utils.GetStatus(spells?: string[]) -> tableCooldowns.Utils.PrintStatus(spells?: string[])
Creature.GetFollowed() -> Creature|nilCreature.GetLocalPlayer() -> Creature|nilCreature.GetTarget() -> Creature|nilCreature:ClearCache()Creature:DistanceTo(targetPos: table) -> numberCreature:DistanceToCreature(otherCreature: Creature) -> numberCreature:Equals(other: Creature) -> booleanCreature:GetDirection() -> numberCreature:GetGuildShield() -> numberCreature:GetHealthPercent() -> numberCreature:GetId() -> numberCreature:GetLowercaseName() -> stringCreature:GetMasterId() -> numberCreature:GetName() -> stringCreature:GetOutfit() -> tableCreature:GetPartyShield() -> numberCreature:GetPosition() -> tableCreature:GetSkull() -> numberCreature:GetSpeed() -> numberCreature:GetVocation() -> numberCreature:IsAdjacentTo(targetPos: table) -> booleanCreature:IsGameMaster() -> booleanCreature:IsInGuild() -> booleanCreature:IsInParty() -> booleanCreature:IsMonster() -> booleanCreature:IsMounted() -> booleanCreature:IsNPC() -> booleanCreature:IsPartyLeader() -> booleanCreature:IsPlayer() -> booleanCreature:IsReachable() -> booleanCreature:IsSameFloor(targetPos: table) -> booleanCreature:IsShootable() -> booleanCreature:IsSkulled() -> booleanCreature:IsSummon() -> booleanCreature:IsValid() -> booleanCreature:IsVisible() -> booleanCreature:IsWarAlly() -> booleanCreature:IsWarEnemy() -> booleanCreature:New(creatureId: number) -> CreatureCreature:ToString() -> string
Creature.ICreatures() -> functionCreature.IMonsters() -> functionCreature.INpcs() -> functionCreature.IPlayers() -> functionCreatures.GetAttackingCreatureId() -> integer|nilCreatures.GetCreatureByName(creatureName: string) -> table|nilCreatures.GetCreatureIdsByScan(typeFlags?: integer, xRelativeDistance?: integer, yRelativeDistance?: integer, multifloor?: boolean, ignoreSummons?: boolean) -> integer[]Creatures.GetCreaturesByScan(typeFlags?: integer, xRelativeDistance?: integer, yRelativeDistance?: integer, multifloor?: boolean, ignoreSummons?: boolean) -> table[]Creatures.GetFollowingCreatureId() -> integer|nilCreatures.GetLocalPlayerId() -> integer|nilCreatures.GetPlayerIdUnderMouse() -> integer|nilCreatures.GetVisibleCreatureIds() -> integer[]Creatures.GetVisibleCreatures() -> table[]Creatures.GetVisibleMonsters(ignoreSummons?: boolean) -> table[]Creatures.GetVisibleNpcs() -> table[]Creatures.GetVisiblePlayers() -> table[]Creatures.IsCreatureOnScreen(creatureId: integer, xRelativeDistance?: integer, yRelativeDistance?: integer, multifloor?: boolean) -> boolean
Engine.Alarms.Disable(alarmId: number) -> booleanEngine.Alarms.DisableAll() -> nilEngine.Alarms.Enable(alarmId: number) -> booleanEngine.Alarms.EnableAll() -> nilEngine.Alarms.EnableOnly(alarmIdsList: table) -> nilEngine.Alarms.GetConfig() -> tableEngine.Alarms.GetCreatureFilter() -> stringEngine.Alarms.GetLowHealthThreshold() -> numberEngine.Alarms.GetLowManaThreshold() -> numberEngine.Alarms.GetMessageFilter() -> stringEngine.Alarms.IsBringToFocusEnabled() -> booleanEngine.Alarms.IsEnabled(alarmId: number) -> booleanEngine.Alarms.IsFlashWindowEnabled() -> booleanEngine.Alarms.IsIgnoringAllyPlayers() -> booleanEngine.Alarms.PrintStatus() -> nilEngine.Alarms.SetAlarmMessages(messages: any) -> booleanEngine.Alarms.SetBringToFocus(enabled: boolean) -> booleanEngine.Alarms.SetBringToFocusEnabled(value: boolean) -> booleanEngine.Alarms.SetCreatureDetectedNames(names: any) -> booleanEngine.Alarms.SetCreatureFilter(namesString: string) -> booleanEngine.Alarms.SetDamageTakenRange(minimumDamage: integer, maximumDamage: integer) -> booleanEngine.Alarms.SetEnemyNames(value: string) -> booleanEngine.Alarms.SetFlashWindow(enabled: boolean) -> booleanEngine.Alarms.SetFlashWindowEnabled(value: boolean) -> booleanEngine.Alarms.SetGmChatCheckEnabled(value: boolean) -> booleanEngine.Alarms.SetGmNames(value: string) -> booleanEngine.Alarms.SetIgnoreAllyPlayers(ignore: boolean) -> booleanEngine.Alarms.SetLowHealthPercentage(arg1: any) -> booleanEngine.Alarms.SetLowHealthThreshold(percentage: number) -> booleanEngine.Alarms.SetLowManaPercentage(arg1: any) -> booleanEngine.Alarms.SetLowManaThreshold(percentage: number) -> booleanEngine.Alarms.SetMessageFilter(messagesString: string) -> booleanEngine.Alarms.SetPlayerAttackFilterMode(value: integer) -> booleanEngine.Alarms.SetPlayerAttackNames(value: string) -> booleanEngine.Alarms.SetPlayerDetectedFilterMode(value: integer) -> booleanEngine.Alarms.SetPlayerDetectedNames(value: string) -> booleanEngine.Alarms.SetSkullFilterMode(value: integer) -> booleanEngine.Alarms.SetSkullNames(value: string) -> booleanEngine.Alarms.Toggle(alarmId: number) -> booleanEngine.AmmoRefill.Add(ammoData: table) -> numberEngine.AmmoRefill.AddProfile(profileName: string|nil) -> number|booleanEngine.AmmoRefill.ClearAll() -> nilEngine.AmmoRefill.Disable(index: number) -> booleanEngine.AmmoRefill.DisableAll() -> nilEngine.AmmoRefill.Enable(index: number) -> booleanEngine.AmmoRefill.EnableAll() -> nilEngine.AmmoRefill.EnableOnly(itemIdsList: table) -> nilEngine.AmmoRefill.FindByItemId(itemId: number) -> table|nilEngine.AmmoRefill.FindProfileByName(profileName: string) -> number|nilEngine.AmmoRefill.Get(index: number) -> table|nilEngine.AmmoRefill.GetAll() -> tableEngine.AmmoRefill.GetCurrentProfile() -> table|nilEngine.AmmoRefill.GetProfileNames() -> tableEngine.AmmoRefill.PrintProfiles() -> nilEngine.AmmoRefill.PrintStatus() -> nilEngine.AmmoRefill.Remove(index: number) -> booleanEngine.AmmoRefill.RemoveProfile(indexOrName: number|string) -> booleanEngine.AmmoRefill.RenameProfile(indexOrName: number|string, newName: string) -> booleanEngine.AmmoRefill.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.AmmoRefill.SetEntryEquipFromHotkey(entryIndex: integer, value: boolean) -> booleanEngine.AmmoRefill.SetEntryItemId(entryIndex: integer, value: integer) -> booleanEngine.AmmoRefill.SetEntryRefillLeftHand(entryIndex: integer, value: boolean) -> booleanEngine.AmmoRefill.SetEntryThreshold(entryIndex: integer, value: integer) -> booleanEngine.AmmoRefill.SetProfile(indexOrName: number|string) -> booleanEngine.AmmoRefill.Toggle(index: number) -> boolean|nilEngine.Channels.AddEntry(name: string, message: string, intervalSeconds: integer, channelId: integer, talkAction: integer, enabled: boolean|nil) -> integerEngine.Channels.ClearEntries() -> booleanEngine.Channels.GetEntries() -> table[]Engine.Channels.GetGlobalDelay() -> integerEngine.Channels.RemoveEntry(index: integer) -> booleanEngine.Channels.SetEntryChannelId(entryIndex: integer, value: integer) -> booleanEngine.Channels.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.Channels.SetEntryIntervalSeconds(entryIndex: integer, value: integer) -> booleanEngine.Channels.SetEntryMessage(entryIndex: integer, message: string) -> booleanEngine.Channels.SetEntryName(entryIndex: integer, value: string) -> booleanEngine.Channels.SetEntryTalkAction(entryIndex: integer, value: integer) -> booleanEngine.Channels.SetGlobalDelay(value: integer) -> booleanEngine.ComboBot.GetClientEntries() -> table[]Engine.ComboBot.GetMode() -> integerEngine.ComboBot.GetRoomEntries() -> table[]Engine.ComboBot.GetRoomState() -> tableEngine.ComboBot.SetClientEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.ComboBot.SetClientEntryFocusOption(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetClientEntryLeaderAction(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetClientEntryLeaderName(entryIndex: integer, value: string) -> booleanEngine.ComboBot.SetClientEntryLeaderSpellWords(entryIndex: integer, value: string) -> booleanEngine.ComboBot.SetClientEntryMyAction(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetClientEntryMyRuneId(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetClientEntryMySpellWords(entryIndex: integer, value: string) -> booleanEngine.ComboBot.SetClientEntryRange(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetClientEntryRequiresTarget(entryIndex: integer, value: boolean) -> booleanEngine.ComboBot.SetClientEntryShootType(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetMode(value: integer) -> booleanEngine.ComboBot.SetRoomEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.ComboBot.SetRoomEntryEquipMode(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryLeaderAction(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryLeaderRuneId(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryLeaderSpellWords(entryIndex: integer, value: string) -> booleanEngine.ComboBot.SetRoomEntryMyAction(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryMyRuneId(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryMySpellWords(entryIndex: integer, value: string) -> booleanEngine.ComboBot.SetRoomEntryRange(entryIndex: integer, value: integer) -> booleanEngine.ComboBot.SetRoomEntryRequiresTarget(entryIndex: integer, value: boolean) -> booleanEngine.Conditions.GetCastInProtectionZoneEnabled() -> booleanEngine.Conditions.GetHoldSpells() -> table[]Engine.Conditions.GetManaShieldDelay() -> integerEngine.Conditions.GetManaShieldTimerBased() -> integerEngine.Conditions.GetRecoverySpellDelay() -> integerEngine.Conditions.GetRecoverySpellTimerBased() -> integerEngine.Conditions.GetSpells() -> table[]Engine.Conditions.GetUseHasteWithSharpShooterEnabled() -> booleanEngine.Conditions.SetCastInProtectionZoneEnabled(value: boolean) -> booleanEngine.Conditions.SetHoldSpellEnabled(entryIndex: integer, value: boolean) -> booleanEngine.Conditions.SetHoldSpellFlag(entryIndex: integer, value: integer) -> booleanEngine.Conditions.SetHoldSpellManaCost(entryIndex: integer, value: integer) -> booleanEngine.Conditions.SetHoldSpellWords(entryIndex: integer, value: string) -> booleanEngine.Conditions.SetManaShieldDelay(value: integer) -> booleanEngine.Conditions.SetManaShieldTimerBased(value: integer) -> booleanEngine.Conditions.SetRecoverySpellDelay(value: integer) -> booleanEngine.Conditions.SetRecoverySpellTimerBased(value: integer) -> booleanEngine.Conditions.SetSpellEnabled(entryIndex: integer, value: boolean) -> booleanEngine.Conditions.SetSpellFlag(entryIndex: integer, value: integer) -> booleanEngine.Conditions.SetSpellManaCost(entryIndex: integer, value: integer) -> booleanEngine.Conditions.SetSpellWords(entryIndex: integer, value: string) -> booleanEngine.Conditions.SetUseHasteWithSharpShooterEnabled(value: boolean) -> booleanEngine.Delays.GetAlarmDelay() -> integerEngine.Delays.GetAntiIdleDelay() -> integerEngine.Delays.GetAttackCreatureDelay() -> integerEngine.Delays.GetAttackItemDelay() -> integerEngine.Delays.GetAttackSpellDelay() -> integerEngine.Delays.GetConnectionStabilityCheckEnabled() -> booleanEngine.Delays.GetDashDelay() -> integerEngine.Delays.GetDropItemDelay() -> integerEngine.Delays.GetEatFoodDelay() -> integerEngine.Delays.GetEquipItemDelay() -> integerEngine.Delays.GetGlobalQueueSystemEnabled() -> booleanEngine.Delays.GetHealFriendItemDelay() -> integerEngine.Delays.GetHealFriendSpellDelay() -> integerEngine.Delays.GetHealItemDelay() -> integerEngine.Delays.GetHealSpellDelay() -> integerEngine.Delays.GetItemCooldownSystemEnabled() -> booleanEngine.Delays.GetItemPredictionSystemEnabled() -> booleanEngine.Delays.GetLootDelay() -> integerEngine.Delays.GetMoveDelay() -> integerEngine.Delays.GetReconnectDelay() -> integerEngine.Delays.GetServerPingCheckEnabled() -> booleanEngine.Delays.GetSpellCooldownSystemEnabled() -> booleanEngine.Delays.GetSpellPredictionSystemEnabled() -> booleanEngine.Delays.GetSupportSpellDelay() -> integerEngine.Delays.GetTargetingWalkDelay() -> integerEngine.Delays.GetUseItemInContainerDelay() -> integerEngine.Delays.GetUseWithCooldownSystemEnabled() -> booleanEngine.Delays.GetWalkerUseItemDelay() -> integerEngine.Delays.GetWalkerUseWithItemDelay() -> integerEngine.Delays.GetWalkerWalkDelay() -> integerEngine.Delays.SetAlarmDelay(value: integer) -> booleanEngine.Delays.SetAntiIdleDelay(value: integer) -> booleanEngine.Delays.SetAttackCreatureDelay(value: integer) -> booleanEngine.Delays.SetAttackItemDelay(value: integer) -> booleanEngine.Delays.SetAttackSpellDelay(value: integer) -> booleanEngine.Delays.SetConnectionStabilityCheckEnabled(value: boolean) -> booleanEngine.Delays.SetDashDelay(value: integer) -> booleanEngine.Delays.SetDropItemDelay(value: integer) -> booleanEngine.Delays.SetEatFoodDelay(value: integer) -> booleanEngine.Delays.SetEquipItemDelay(value: integer) -> booleanEngine.Delays.SetGlobalQueueSystemEnabled(value: boolean) -> booleanEngine.Delays.SetHealFriendItemDelay(value: integer) -> booleanEngine.Delays.SetHealFriendSpellDelay(value: integer) -> booleanEngine.Delays.SetHealItemDelay(value: integer) -> booleanEngine.Delays.SetHealSpellDelay(value: integer) -> booleanEngine.Delays.SetItemCooldownSystemEnabled(value: boolean) -> booleanEngine.Delays.SetItemPredictionSystemEnabled(value: boolean) -> booleanEngine.Delays.SetLootDelay(value: integer) -> booleanEngine.Delays.SetMoveDelay(value: integer) -> booleanEngine.Delays.SetReconnectDelay(value: integer) -> booleanEngine.Delays.SetServerPingCheckEnabled(value: boolean) -> booleanEngine.Delays.SetSpellCooldownSystemEnabled(value: boolean) -> booleanEngine.Delays.SetSpellPredictionSystemEnabled(value: boolean) -> booleanEngine.Delays.SetSupportSpellDelay(value: integer) -> booleanEngine.Delays.SetTargetingWalkDelay(value: integer) -> booleanEngine.Delays.SetUseItemInContainerDelay(value: integer) -> booleanEngine.Delays.SetUseWithCooldownSystemEnabled(value: boolean) -> booleanEngine.Delays.SetWalkerUseItemDelay(value: integer) -> booleanEngine.Delays.SetWalkerUseWithItemDelay(value: integer) -> booleanEngine.Delays.SetWalkerWalkDelay(value: integer) -> booleanEngine.Equipment.CanMove() -> booleanEngine.Equipment.CanRead() -> booleanEngine.Equipment.Equip(itemId: integer, tierLevel?: integer) -> booleanEngine.Equipment.GetAllSlotItems() -> tableEngine.Equipment.GetSlotConstants() -> tableEngine.Equipment.GetSlotIds() -> integer[]Engine.Equipment.GetSlotItem(equipmentSlot: integer) -> table|nilEngine.Equipment.GetSlotItemId(equipmentSlot: integer) -> integer|nilEngine.Equipment.GetSnapshot() -> tableEngine.Equipment.HasItemInSlot(equipmentSlot: integer) -> boolean|nilEngine.Equipment.LookSlotItem(itemId: integer, equipmentSlot: integer) -> booleanEngine.Equipment.MoveFromContainerToSlot(containerIndex: integer, slotIndex: integer, itemId: integer, equipmentSlot: integer, itemCount: integer) -> booleanEngine.Equipment.MoveFromSlotToContainer(equipmentSlot: integer, containerIndex: integer, slotIndex: integer, itemId: integer, itemCount: integer) -> booleanEngine.EquipmentManager.GetEntries() -> table[]Engine.EquipmentManager.GetProfiles() -> table[]Engine.EquipmentManager.SetActiveProfile(index: integer) -> booleanEngine.EquipmentManager.SetConditionCreatureNames(entryIndex: integer, conditionIndex: integer, creatureNames: string) -> booleanEngine.EquipmentManager.SetConditionCreaturesCount(entryIndex: integer, conditionIndex: integer, count: integer) -> booleanEngine.EquipmentManager.SetConditionMonstersAround(entryIndex: integer, conditionIndex: integer, count: integer) -> booleanEngine.EquipmentManager.SetConditionPlayersAround(entryIndex: integer, conditionIndex: integer, count: integer) -> booleanEngine.EquipmentManager.SetConditionTargetName(entryIndex: integer, conditionIndex: integer, targetName: string) -> booleanEngine.EquipmentManager.SetConditionType(entryIndex: integer, conditionIndex: integer, conditionType: integer) -> booleanEngine.EquipmentManager.SetEntryCheckHealthRange(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryCheckManaRange(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryConditionOperator(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryDelay(entryIndex: integer, delayMs: integer) -> booleanEngine.EquipmentManager.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryEquipAction(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryEquipFromHotkey(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryExcludedItemIds(entryIndex: integer, value: integer[]) -> booleanEngine.EquipmentManager.SetEntryExcludedItemIdsEnabled(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryHasDelay(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryHealthManaOperator(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryHealthRange(entryIndex: integer, minimumPercentage: integer, maximumPercentage: integer) -> booleanEngine.EquipmentManager.SetEntryItemId(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryKeepEquipped(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryKeepEquippedDuration(entryIndex: integer, value: boolean) -> booleanEngine.EquipmentManager.SetEntryManaRange(entryIndex: integer, minimumPercentage: integer, maximumPercentage: integer) -> booleanEngine.EquipmentManager.SetEntrySecondaryItemId(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntrySlot(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryTier(entryIndex: integer, value: integer) -> booleanEngine.EquipmentManager.SetEntryUseExtraConditions(entryIndex: integer, value: boolean) -> booleanEngine.Extras.GetAntiIdleEnabled() -> booleanEngine.Extras.GetAutoMountEnabled() -> booleanEngine.Extras.GetChangeGoldEnabled() -> booleanEngine.Extras.GetDashEnabled() -> booleanEngine.Extras.GetDisableMagicEffectsEnabled() -> booleanEngine.Extras.GetDisplayItemIdEnabled() -> booleanEngine.Extras.GetDodgeEnabled() -> booleanEngine.Extras.GetEatFoodEnabled() -> booleanEngine.Extras.GetEatFoodIds() -> integer[]Engine.Extras.GetExerciseDummyIds() -> integer[]Engine.Extras.GetExerciseWeaponIds() -> integer[]Engine.Extras.GetFakeXlogEnabled() -> booleanEngine.Extras.GetFollowDistance() -> integerEngine.Extras.GetFollowMode() -> integerEngine.Extras.GetFollowPlayerEnabled() -> booleanEngine.Extras.GetFollowPlayerName() -> stringEngine.Extras.GetGoldChangeIds() -> integer[]Engine.Extras.GetOpenPrivateChannelOnPMEnabled() -> booleanEngine.Extras.GetReconnectEnabled() -> booleanEngine.Extras.GetReconnectWhenDeadEnabled() -> booleanEngine.Extras.GetShowShootEffectsEnabled() -> booleanEngine.Extras.GetTrainingDelay() -> integerEngine.Extras.GetTrainingEnabled() -> booleanEngine.Extras.SetAntiIdleEnabled(value: boolean) -> booleanEngine.Extras.SetAutoMountEnabled(value: boolean) -> booleanEngine.Extras.SetChangeGoldEnabled(value: boolean) -> booleanEngine.Extras.SetDashEnabled(value: boolean) -> booleanEngine.Extras.SetDisableMagicEffectsEnabled(value: boolean) -> booleanEngine.Extras.SetDisplayItemIdEnabled(value: boolean) -> booleanEngine.Extras.SetDodgeEnabled(value: boolean) -> booleanEngine.Extras.SetEatFoodEnabled(value: boolean) -> booleanEngine.Extras.SetEatFoodIds(itemIds: integer[]) -> booleanEngine.Extras.SetExerciseDummyIds(value: integer[]) -> booleanEngine.Extras.SetExerciseWeaponIds(value: integer[]) -> booleanEngine.Extras.SetFakeXlogEnabled(value: boolean) -> booleanEngine.Extras.SetFollowDistance(value: integer) -> booleanEngine.Extras.SetFollowMode(value: integer) -> booleanEngine.Extras.SetFollowPlayerEnabled(value: boolean) -> booleanEngine.Extras.SetFollowPlayerName(name: string) -> booleanEngine.Extras.SetGoldChangeIds(value: integer[]) -> booleanEngine.Extras.SetOpenPrivateChannelOnPMEnabled(value: boolean) -> booleanEngine.Extras.SetReconnectEnabled(enabled: boolean) -> booleanEngine.Extras.SetReconnectWhenDeadEnabled(value: boolean) -> booleanEngine.Extras.SetShowShootEffectsEnabled(value: boolean) -> booleanEngine.Extras.SetTrainingDelay(value: integer) -> booleanEngine.Extras.SetTrainingEnabled(value: boolean) -> booleanEngine.Extras.StartTraining() -> booleanEngine.Extras.StopTraining() -> booleanEngine.Features.Disable(featureIdentifier: integer|string) -> nilEngine.Features.DisableAllExcept(excludeList?: table) -> nilEngine.Features.DisableMultiple(featureList: table) -> nilEngine.Features.Enable(featureIdentifier: integer|string) -> nilEngine.Features.EnableMultiple(featureList: table) -> nilEngine.Features.GetActiveFeatures() -> integer[]Engine.Features.GetAllFeatureIds() -> integer[]Engine.Features.GetName(featureIdentifier: integer|string) -> stringEngine.Features.IsActive(featureIdentifier: integer|string) -> booleanEngine.Features.PrintStatus() -> nilEngine.Features.SetActive(featureIdentifier: integer|string, activeStatus: boolean) -> nilEngine.Features.Toggle(featureIdentifier: integer|string) -> nilEngine.Healer.AddItem(itemData: table) -> numberEngine.Healer.AddSpell(spellData: table) -> numberEngine.Healer.ClearAllItems() -> nilEngine.Healer.ClearAllSpells() -> nilEngine.Healer.DisableAllItems() -> nilEngine.Healer.DisableAllSpells() -> nilEngine.Healer.DisableItem(index: number) -> booleanEngine.Healer.DisableSpell(index: number) -> booleanEngine.Healer.EnableItem(index: number) -> booleanEngine.Healer.EnableOnlyItems(itemIdsList: table) -> nilEngine.Healer.EnableOnlySpells(spellWordsList: table) -> numberEngine.Healer.EnableSpell(index: number) -> booleanEngine.Healer.FindItemById(itemId: number) -> table|nilEngine.Healer.FindSpellByWords(spellWords: string) -> table|nilEngine.Healer.GetItems() -> tableEngine.Healer.GetSpellByIndex(index: number) -> table|nilEngine.Healer.GetSpells() -> tableEngine.Healer.PrintItems() -> nilEngine.Healer.PrintSpells() -> nilEngine.Healer.RemoveItem(index: number) -> booleanEngine.Healer.RemoveSpell(index: number) -> booleanEngine.Healer.SetItemAction(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemAttribute(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemCastValue(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemCondition(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemDelay(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemEnabled(index: any, enabled: any) -> booleanEngine.Healer.SetItemId(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetItemUseWhenFeared(entryIndex: integer, value: boolean) -> booleanEngine.Healer.SetSpellAttribute(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetSpellCastValue(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetSpellCondition(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetSpellEnabled(index: any, enabled: any) -> booleanEngine.Healer.SetSpellManaCost(entryIndex: integer, value: integer) -> booleanEngine.Healer.SetSpellWords(entryIndex: integer, value: string) -> booleanEngine.Healer.ToggleItem(index: number) -> booleanEngine.Healer.ToggleSpell(index: number) -> boolean|nilEngine.HealFriend.GetArea() -> tableEngine.HealFriend.GetMode() -> integerEngine.HealFriend.GetPlayerNames() -> stringEngine.HealFriend.GetPrioritizeBeforeHealer() -> integerEngine.HealFriend.GetPriorityOverHealer() -> integerEngine.HealFriend.GetSafeHealthPercentage() -> integerEngine.HealFriend.GetVocations() -> table[]Engine.HealFriend.SetActionEnabled(vocationIndex: integer, actionIndex: integer, enabled: boolean) -> booleanEngine.HealFriend.SetActionHealthPercentage(vocationIndex: integer, actionIndex: integer, healthPercentage: integer) -> booleanEngine.HealFriend.SetActionItemId(vocationIndex: integer, actionIndex: integer, itemId: integer) -> booleanEngine.HealFriend.SetActionManaCost(vocationIndex: integer, actionIndex: integer, manaCost: integer) -> booleanEngine.HealFriend.SetActionMethod(vocationIndex: integer, actionIndex: integer, method: integer) -> booleanEngine.HealFriend.SetActionSpellWords(vocationIndex: integer, actionIndex: integer, spellWords: string) -> booleanEngine.HealFriend.SetAreaDruidRequired(value: boolean) -> booleanEngine.HealFriend.SetAreaEnabled(value: boolean) -> booleanEngine.HealFriend.SetAreaExtended(value: integer) -> booleanEngine.HealFriend.SetAreaHealthPercentage(value: integer) -> booleanEngine.HealFriend.SetAreaKnightRequired(value: boolean) -> booleanEngine.HealFriend.SetAreaManaCost(value: integer) -> booleanEngine.HealFriend.SetAreaMinimumHarmony(value: integer) -> booleanEngine.HealFriend.SetAreaMonkRequired(value: boolean) -> booleanEngine.HealFriend.SetAreaPaladinRequired(value: boolean) -> booleanEngine.HealFriend.SetAreaPlayersNeeded(count: integer) -> booleanEngine.HealFriend.SetAreaSorcererRequired(value: boolean) -> booleanEngine.HealFriend.SetAreaSpellWords(value: string) -> booleanEngine.HealFriend.SetAreaVocation(value: integer) -> booleanEngine.HealFriend.SetMode(value: integer) -> booleanEngine.HealFriend.SetPlayerNames(value: string) -> booleanEngine.HealFriend.SetPrioritizeBeforeHealer(value: integer) -> booleanEngine.HealFriend.SetPriorityOverHealer(value: integer) -> booleanEngine.HealFriend.SetSafeHealthPercentage(value: boolean) -> booleanEngine.HealFriend.SetVocationEnabled(vocationIndex: integer, enabled: boolean) -> booleanEngine.HealFriend.SetVocationPriority(vocationIndex: integer, priority: integer) -> booleanEngine.HUD.AddScreenImage(params: table) -> tableEngine.HUD.AddScreenText(params: table) -> tableEngine.HUD.AddWorldBox(params: table) -> tableEngine.HUD.AddWorldImage(params: table) -> tableEngine.HUD.AddWorldText(params: table) -> tableEngine.HUD.ClearParent(child_id: string) -> nilEngine.HUD.GetConfig() -> tableEngine.HUD.GetElementColor(id: string) -> table|nilEngine.HUD.GetElementEnabled(id: string) -> booleanEngine.HUD.GetElementHeight(id: string) -> numberEngine.HUD.GetElementText(id: string) -> string|nilEngine.HUD.GetElementVisible(id: string) -> booleanEngine.HUD.GetElementWidth(id: string) -> numberEngine.HUD.GetScreenElementPosition(id: string) -> table|nilEngine.HUD.GetSpecialFoodCounters() -> table[]Engine.HUD.GetWorldElementPosition(id: string) -> table|nilEngine.HUD.RemoveElement(id: string) -> nilEngine.HUD.RemoveSpecialFoodCounter(itemId: integer) -> booleanEngine.HUD.SetAlignment(id: string, horizontal_align: integer, vertical_align: integer) -> nilEngine.HUD.SetClickable(id: string, clickable: boolean, callback: function|nil) -> nilEngine.HUD.SetDraggable(id: string, draggable: boolean) -> nilEngine.HUD.SetDragTarget(id: string, targetId: string|nil) -> nilEngine.HUD.SetEnabled(elementId: string, enabled: boolean) -> nilEngine.HUD.SetLevelSpyEnabled(value: boolean) -> booleanEngine.HUD.SetMagicWallIds(value: integer[]) -> booleanEngine.HUD.SetMagicWallTimersEnabled(value: boolean) -> booleanEngine.HUD.SetOnDragEnd(id: string, callback: function|nil) -> nilEngine.HUD.SetParent(child_id: string, parent_id: string) -> nilEngine.HUD.SetPosition(params: table) -> nilEngine.HUD.SetScreenPosition(params: table) -> nilEngine.HUD.SetSpecialFoodCounterDelay(itemId: integer, delaySeconds: integer) -> booleanEngine.HUD.SetTargetingAnchorEnabled(value: boolean) -> booleanEngine.HUD.SetTimerColor(red: number, green: number, blue: number, alpha: number) -> booleanEngine.HUD.SetWildGrowthIds(value: integer[]) -> booleanEngine.HUD.SetXRayEnabled(value: boolean) -> booleanEngine.HUD.SetZIndex(id: string, zIndex: integer) -> nilEngine.HUD.UpdateBorderColor(id: string, color: table) -> nilEngine.HUD.UpdateBorderWidth(id: string, border_width: number) -> nilEngine.HUD.UpdateColor(id: string, color: table) -> nilEngine.HUD.UpdateFont(id: string, fontFamily: string|nil, fontSize: integer|nil) -> nilEngine.HUD.UpdateHeight(id: string, height: number) -> nilEngine.HUD.UpdateImageLabel(params: table) -> nilEngine.HUD.UpdateLifetime(id: string, lifetime_ms: integer) -> nilEngine.HUD.UpdateOffset(id: string, offset_x: number, offset_y: number) -> nilEngine.HUD.UpdateText(id: string, text: string) -> nilEngine.HUD.UpdateWidth(id: string, width: number) -> nilEngine.Looter.GetActionType() -> integerEngine.Looter.GetMinimumCapacity() -> integerEngine.Looter.GetMode() -> integerEngine.Looter.LootAroundCharacter() -> booleanEngine.Looter.SetActionType(value: integer) -> booleanEngine.Looter.SetMinimumCapacity(value: integer) -> booleanEngine.Looter.SetMode(value: integer) -> booleanEngine.Lure.AddSetting() -> anyEngine.Lure.ClearSettings() -> anyEngine.Lure.EndForceLure() -> anyEngine.Lure.GetAttackWhileLuring() -> anyEngine.Lure.GetConsiderOnlyReachable() -> anyEngine.Lure.GetIgnoringMonsters() -> anyEngine.Lure.GetLuredCreaturesCount() -> anyEngine.Lure.GetNearRange() -> anyEngine.Lure.GetOption() -> anyEngine.Lure.GetSettingCount() -> anyEngine.Lure.GetSettings() -> anyEngine.Lure.GetSlowWalkBurstSteps() -> anyEngine.Lure.GetSlowWalkDelayMs() -> anyEngine.Lure.GetSlowWalkingCreaturesCount() -> anyEngine.Lure.GetStartEndLureActive() -> anyEngine.Lure.GetState() -> anyEngine.Lure.GetUnblocking() -> anyEngine.Lure.GetWaypointDynamicLureActive() -> anyEngine.Lure.HasActiveSettings() -> anyEngine.Lure.IsEnabled() -> anyEngine.Lure.IsFighting() -> anyEngine.Lure.IsForceLure() -> anyEngine.Lure.IsLuring() -> anyEngine.Lure.IsOtherPlayerOnScreen() -> anyEngine.Lure.RemoveSetting() -> anyEngine.Lure.SetAttackWhileLuring() -> anyEngine.Lure.SetConsiderOnlyReachable() -> anyEngine.Lure.SetEnabled() -> anyEngine.Lure.SetForceLure() -> anyEngine.Lure.SetIgnoringMonsters() -> anyEngine.Lure.SetNearRange() -> anyEngine.Lure.SetOption() -> anyEngine.Lure.SetSlowWalkBurstSteps() -> anyEngine.Lure.SetSlowWalkDelayMs() -> anyEngine.Lure.SetSlowWalkingCreaturesCount() -> anyEngine.Lure.SetStartEndLureActive() -> anyEngine.Lure.SetUnblocking() -> anyEngine.Lure.SetWaypointDynamicLureActive() -> anyEngine.Lure.UpdateSetting() -> anyEngine.MagicShooter.GetActiveProfile() -> table|nilEngine.MagicShooter.GetCurrentProfile() -> table|nilEngine.MagicShooter.GetEntries(profile?: integer|string) -> table[]|nil, string|nilEngine.MagicShooter.GetProfileCount() -> integerEngine.MagicShooter.GetProfileNames() -> string[]Engine.MagicShooter.NextProfile() -> table|nilEngine.MagicShooter.SetActiveProfile(profile: integer|string) -> booleanEngine.MagicShooter.SetCurrentProfile(profile: integer|string) -> booleanEngine.MagicShooter.SetEntryAttackSkillBuffSpell(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryCastMethod(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryChainJumpRange(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryChainMaxTargets(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryChainSelector(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryCondition(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryCustomDelay(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryCustomSpell(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryDangerLevel(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryDistanceSkillIncreasePercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryDontCastWhileWalking(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryEffectType(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryEnabled(entryIndex: integer, enabled: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryEquipmentRequirement(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryForceUnknownStance(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryHarmony(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryHarmonyCondition(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryHealthCondition(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryHealthPercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryHitCountMode(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryManaPercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMaximumMonsterHealthPercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMeleeSkillIncreasePercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMinimumMonsterHealthPercentage(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMomentumDelay(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMonsterCount(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMonsterCountCondition(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryMonsterNames(entryIndex: integer, names: string, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryOption(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPatternAnchor(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPatternId(entryIndex: integer, patternId: string, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPatternSource(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPatternVariant(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPrioritizeWithMomentum(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPriorityLane(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryPVPSafe(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryRange(entryIndex: integer, range: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryRequiresTarget(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryRune(entryIndex: integer, runeId: integer, profile?: integer|string) -> boolean, string|nilEngine.MagicShooter.SetEntryShootAfterWalkDelay(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryShootOverAllies(entryIndex: integer, value: boolean, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntrySpell(entryIndex: integer, spellWords: string, profile?: integer|string) -> boolean, string|nilEngine.MagicShooter.SetEntryStanceGroup(entryIndex: integer, value: string, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryStanceId(entryIndex: integer, value: string, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryTargetPolicy(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.MagicShooter.SetEntryTrackedEffect(entryIndex: integer, value: integer, profile: integer|string|nil) -> booleanEngine.PVPTools.GetConfig() -> tableEngine.PVPTools.IsAntiPushEnabled() -> booleanEngine.PVPTools.IsHoldTargetEnabled() -> booleanEngine.PVPTools.ResetLastTarget() -> booleanEngine.PVPTools.SetAntiPushEnabled(enabled: boolean) -> booleanEngine.PVPTools.SetAntiPushTrashItem(entryIndex: integer, itemId: integer, quantity: integer) -> booleanEngine.PVPTools.SetDelayBetweenRuneAndPush(delayMs: integer) -> booleanEngine.PVPTools.SetHoldTargetEnabled(enabled: boolean) -> booleanEngine.PVPTools.SetKillTargetEnabled(value: boolean) -> booleanEngine.PVPTools.SetKillTargetHealthPercentage(value: integer) -> booleanEngine.PVPTools.SetKillTargetManaCost(value: integer) -> booleanEngine.PVPTools.SetKillTargetSpellWords(value: string) -> booleanEngine.PVPTools.SetMagicWallKeeperEnabled(value: boolean) -> booleanEngine.PVPTools.SetMouseTrashItem(entryIndex: integer, itemId: integer, quantity: integer) -> booleanEngine.PVPTools.SetPreviousSpotRuneIds(value: integer[]) -> booleanEngine.PVPTools.SetPreviousSpotWallEnabled(value: boolean) -> booleanEngine.PVPTools.SetPushAttackedPlayerEnabled(value: boolean) -> booleanEngine.PVPTools.SetPushmaxDisintegrateRuneId(value: integer) -> booleanEngine.PVPTools.SetPushmaxEnabled(value: boolean) -> booleanEngine.PVPTools.SetPushmaxNonDisintegrateRuneId(value: integer) -> booleanEngine.PVPTools.SetTrashOnMouseEnabled(value: boolean) -> booleanEngine.PVPTools.SetWallKeeperRuneIds(value: integer[]) -> booleanEngine.PVPTools.SetWildGrowthKeeperEnabled(value: boolean) -> booleanEngine.PVPTools.SetWildGrowthKeeperRuneIds(value: integer[]) -> booleanEngine.PVPTools.ToggleAntiPush() -> booleanEngine.PVPTools.ToggleHoldTarget() -> booleanEngine.Scripter.GetAutoStartEnabled() -> booleanEngine.Scripter.GetAvailableScripts() -> table[]Engine.Scripter.GetOutput(scriptName: string) -> stringEngine.Scripter.GetRunningScripts() -> table[]Engine.Scripter.IsRunning(scriptName: string) -> booleanEngine.Scripter.Refresh() -> booleanEngine.Scripter.Restart(scriptName: string) -> booleanEngine.Scripter.SetAutoStartEnabled(value: boolean) -> booleanEngine.Scripter.Start(scriptName: string) -> booleanEngine.Scripter.Stop(scriptName: string) -> booleanEngine.Scripter.StopSelf() -> booleanEngine.SuppliesSorter.AddEntry(destinationContainerId: integer, itemIds: integer[], enabled: boolean|nil) -> integerEngine.SuppliesSorter.ClearEntries() -> booleanEngine.SuppliesSorter.GetEntries() -> table[]Engine.SuppliesSorter.RemoveEntry(index: integer) -> booleanEngine.SuppliesSorter.SetEntryDestinationContainerId(entryIndex: integer, value: integer) -> booleanEngine.SuppliesSorter.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.SuppliesSorter.SetEntryItemIds(entryIndex: integer, value: integer[]) -> booleanEngine.TankMode.GetCancelManaShieldEnabled() -> booleanEngine.TankMode.GetCancelManaShieldHealthPercentage() -> integerEngine.TankMode.GetCancelManaShieldManaCost() -> integerEngine.TankMode.GetCancelManaShieldManaPercentage() -> integerEngine.TankMode.GetCancelManaShieldSpellWords() -> stringEngine.TankMode.GetCancelWhileManaShieldReadyEnabled() -> booleanEngine.TankMode.GetManaShieldEnabled() -> booleanEngine.TankMode.GetManaShieldHealthPercentage() -> integerEngine.TankMode.GetManaShieldManaCost() -> integerEngine.TankMode.GetManaShieldManaPercentage() -> integerEngine.TankMode.GetManaShieldPotionEnabled() -> booleanEngine.TankMode.GetManaShieldPotionId() -> integerEngine.TankMode.GetManaShieldSpellWords() -> stringEngine.TankMode.GetPotionOnSpellCooldownEnabled() -> booleanEngine.TankMode.GetPotionWhenFearedEnabled() -> booleanEngine.TankMode.SetCancelManaShieldEnabled(value: boolean) -> booleanEngine.TankMode.SetCancelManaShieldHealthPercentage(value: integer) -> booleanEngine.TankMode.SetCancelManaShieldManaCost(value: integer) -> booleanEngine.TankMode.SetCancelManaShieldManaPercentage(value: integer) -> booleanEngine.TankMode.SetCancelManaShieldSpellWords(value: string) -> booleanEngine.TankMode.SetCancelWhileManaShieldReadyEnabled(value: boolean) -> booleanEngine.TankMode.SetManaShieldEnabled(enabled: boolean) -> booleanEngine.TankMode.SetManaShieldHealthPercentage(percentage: integer) -> booleanEngine.TankMode.SetManaShieldManaCost(value: integer) -> booleanEngine.TankMode.SetManaShieldManaPercentage(value: integer) -> booleanEngine.TankMode.SetManaShieldPotionEnabled(value: boolean) -> booleanEngine.TankMode.SetManaShieldPotionId(value: integer) -> booleanEngine.TankMode.SetManaShieldSpellWords(value: string) -> booleanEngine.TankMode.SetPotionOnSpellCooldownEnabled(value: boolean) -> booleanEngine.TankMode.SetPotionWhenFearedEnabled(value: boolean) -> booleanEngine.Targeting.GetActiveProfile() -> table|nilEngine.Targeting.GetCurrentProfile() -> table|nilEngine.Targeting.GetEntries(profile: integer|string|nil) -> table[]|nilEngine.Targeting.GetProfileCount() -> integerEngine.Targeting.GetProfileNames() -> string[]Engine.Targeting.NextProfile() -> table|nilEngine.Targeting.SetActiveProfile(profile: integer|string) -> booleanEngine.Targeting.SetCurrentProfile(profile: integer|string) -> booleanEngine.Targeting.SetEntryAnchoring(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryAnchoringRange(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryAttackOption(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryDangerLevel(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.Targeting.SetEntryKeepDistanceOption(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryKeepDistanceRange(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryLootMonster(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryMaximumHealthPercentage(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryMinimumHealthPercentage(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryMonsterName(entryIndex: integer, name: string, profile: integer|string|nil) -> booleanEngine.Targeting.SetEntryMonstersIgnoreList(entryIndex: integer, names: string, profile: integer|string|nil) -> booleanEngine.Targeting.SetEntryMustBeReachable(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryMustBeShootable(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryPriority(entryIndex: integer, value: integer) -> booleanEngine.Targeting.SetEntryStayDiagonal(entryIndex: integer, value: integer) -> booleanEngine.TimerActions.AddEntry(type: integer, spellWords: string, itemId: integer, delay: integer, timeUnit: integer, useInProtectionZone: boolean, enabled: boolean|nil) -> integerEngine.TimerActions.ClearEntries() -> booleanEngine.TimerActions.GetEntries() -> table[]Engine.TimerActions.RemoveEntry(index: integer) -> booleanEngine.TimerActions.SetEntryDelay(entryIndex: integer, delay: integer, timeUnit: integer) -> booleanEngine.TimerActions.SetEntryEnabled(entryIndex: integer, value: boolean) -> booleanEngine.TimerActions.SetEntryItemId(entryIndex: integer, value: integer) -> booleanEngine.TimerActions.SetEntrySpellWords(entryIndex: integer, value: string) -> booleanEngine.TimerActions.SetEntryType(entryIndex: integer, value: integer) -> booleanEngine.TimerActions.SetEntryUseInProtectionZone(entryIndex: integer, value: boolean) -> booleanEngine.Walker.AddWaypoint() -> anyEngine.Walker.ClearWaypoints() -> anyEngine.Walker.CompleteDeferred(token: integer) -> booleanEngine.Walker.Defer(timeoutMs: integer) -> integerEngine.Walker.DeleteWaypoint() -> anyEngine.Walker.GetAutoRecorderEnabled() -> anyEngine.Walker.GetAutoRecorderOptions() -> anyEngine.Walker.GetDebugHud() -> anyEngine.Walker.GetDistanceBetweenWaypoints() -> anyEngine.Walker.GetLeaveLureOnPlayer() -> anyEngine.Walker.GetLeaveLurePlayerMode() -> integerEngine.Walker.GetNodeDistance() -> anyEngine.Walker.GetSelectedWaypointIndex() -> anyEngine.Walker.GetStartFromNearestWaypoint() -> anyEngine.Walker.GetWalkToLureCenter() -> anyEngine.Walker.GetWaypointCount() -> anyEngine.Walker.GetWaypoints() -> anyEngine.Walker.GoTo() -> anyEngine.Walker.InsertWaypoint() -> anyEngine.Walker.IsEnabled() -> anyEngine.Walker.IsPausedByLua() -> anyEngine.Walker.IsStuck() -> anyEngine.Walker.MoveWaypointDown() -> anyEngine.Walker.MoveWaypointUp() -> anyEngine.Walker.ReplaceWaypoint() -> anyEngine.Walker.Resume() -> anyEngine.Walker.SelectClosestWaypoint() -> anyEngine.Walker.SetAutoRecorderEnabled() -> anyEngine.Walker.SetAutoRecorderOptions() -> anyEngine.Walker.SetDebugHud() -> anyEngine.Walker.SetDistanceBetweenWaypoints() -> anyEngine.Walker.SetEnabled() -> anyEngine.Walker.SetLeaveLureOnPlayer() -> anyEngine.Walker.SetLeaveLurePlayerMode(mode: integer) -> booleanEngine.Walker.SetNodeDistance() -> anyEngine.Walker.SetPausedByLua() -> anyEngine.Walker.SetSelectedWaypointIndex() -> anyEngine.Walker.SetStartFromNearestWaypoint() -> anyEngine.Walker.SetWalkToLureCenter() -> anyEngine.Walker.SetWaypointPosition(index: integer, x: integer, y: integer, z: integer) -> boolean
BattleMessageProxy:GetName() -> stringBattleMessageProxy:New(name: string) -> tableBattleMessageProxy:OnReceive(callback: function) -> tableContainerAddItemProxy:GetName() -> stringContainerAddItemProxy:New(name: string) -> tableContainerAddItemProxy:OnReceive(callback: function) -> tableContainerCloseProxy:GetName() -> stringContainerCloseProxy:New(name: string) -> tableContainerCloseProxy:OnReceive(callback: function) -> tableContainerOpenProxy:GetName() -> stringContainerOpenProxy:New(name: string) -> tableContainerOpenProxy:OnReceive(callback: function) -> tableContainerRemoveItemProxy:GetName() -> stringContainerRemoveItemProxy:New(name: string) -> tableContainerRemoveItemProxy:OnReceive(callback: function) -> tableContainerUpdateItemProxy:GetName() -> stringContainerUpdateItemProxy:New(name: string) -> tableContainerUpdateItemProxy:OnReceive(callback: function) -> tableCreatureAddProxy:GetName() -> stringCreatureAddProxy:New(name: string) -> tableCreatureAddProxy:OnReceive(callback: function) -> tableCreatureRemoveProxy:GetName() -> stringCreatureRemoveProxy:New(name: string) -> tableCreatureRemoveProxy:OnReceive(callback: function) -> tableDeathProxy:GetName() -> stringDeathProxy:New(name: string) -> tableDeathProxy:OnReceive(callback: function) -> tableGenericTextMessageProxy:GetName() -> stringGenericTextMessageProxy:New(name: string) -> tableGenericTextMessageProxy:OnReceive(callback: function) -> tableLootMessageProxy:GetName() -> stringLootMessageProxy:New(name: string) -> tableLootMessageProxy:OnReceive(callback: function) -> tableSkillsChangeProxy:GetName() -> stringSkillsChangeProxy:New(name: string) -> tableSkillsChangeProxy:OnReceive(callback: function) -> tableStatsChangeProxy:GetName() -> stringStatsChangeProxy:New(name: string) -> tableStatsChangeProxy:OnReceive(callback: function) -> table
BotFeatureId.ALARMS = 8BotFeatureId.AMMO_REFILL = 16BotFeatureId.CHANNELS_MANAGER = 11BotFeatureId.COMBO_BOT = 14BotFeatureId.CONDITIONS_MANAGER = 2BotFeatureId.EQUIPMENT_MANAGER = 10BotFeatureId.EXTRAS = 9BotFeatureId.HEAL_FRIEND = 3BotFeatureId.HEALER = 1BotFeatureId.HUD = 15BotFeatureId.LOOTER = 13BotFeatureId.LURE_MANAGER = 4BotFeatureId.MAGIC_SHOOTER = 7BotFeatureId.PVP_TOOLS = 12BotFeatureId.SUPPLIES_SORTER = 19BotFeatureId.TANK_MODE = 17BotFeatureId.TARGETING = 6BotFeatureId.TIMER_ACTIONS = 18BotFeatureId.WALKER = 5Features.Disable(featureIdentifier: integer|string) -> booleanFeatures.DisableAllExcept(ExcludeList)Features.DisableMultiple(featureList)Features.Enable(featureIdentifier: integer|string) -> booleanFeatures.EnableMultiple(featureList)Features.GetActiveFeatures()Features.GetAllFeatureIds()Features.GetName(featureIdentifier)Features.IsActive(featureIdentifier)Features.PrintStatus()Features.SetActive(featureIdentifier: integer|string, activeStatus: boolean) -> booleanFeatures.Toggle(featureIdentifier: integer|string) -> boolean
Game.EnterWorld() -> booleanGame.GetCharacterWorld(characterName: string) -> stringGame.LoginToAccount(email: string, password: string) -> booleanGame.LoginToCharacter(characterName: string) -> booleanGame.LoginToPreviouslyLoggedCharacter() -> booleanGame.Logout() -> booleanGame.OpenContainerInNewWindow(equipmentSlotOrContainerId: number, fromContainerNumber: number|nil, fromContainerSlot: number|nil) -> booleanGame.OpenStore() -> boolean
Hotkeys.ParseCombo(combination: string) -> table|nil, string|nilHotkeys.RegisterCombo(params: table) -> boolean, stringHotkeys.SendCombo(combination: string, clientOnly?: boolean) -> booleanHotkeys.SendKey(key: string|integer, clientOnly?: boolean) -> boolean
Http.Get(url: string, options?: table) -> tableHttp.GetJson(url: string, options?: table) -> any|nil, table, string|nilHttp.Post(url: string, body?: string, options?: table) -> tableHttp.PostJson(url: string, value: any, options?: table) -> tableHttp.Request(options: table) -> table
ScreenImage:ClearParent() -> ScreenImageScreenImage:Create()ScreenImage:GetEnabled() -> booleanScreenImage:GetHeight() -> numberScreenImage:GetPosition() -> tableScreenImage:GetVisible() -> booleanScreenImage:GetWidth() -> numberScreenImage:IsCreated() -> booleanScreenImage:New(id, renderLayer?: string)ScreenImage:Remove()ScreenImage:SetAlignment(h_align, v_align)ScreenImage:SetClickable(callback)ScreenImage:SetDraggable(draggable)ScreenImage:SetDragTarget(target: ScreenText|ScreenImage|string|nil) -> ScreenImageScreenImage:SetEnabled(enabled)ScreenImage:SetItemId(itemId)ScreenImage:SetItemName(itemName)ScreenImage:SetLabel(text, color, offsetX, offsetY)ScreenImage:SetOnDragEnd(callback: function|nil) -> ScreenImageScreenImage:SetParent(parent: ScreenText|ScreenImage|string) -> ScreenImageScreenImage:SetRenderLayer(renderLayer: string) -> ScreenImageScreenImage:SetScreenPosition(x: number, y: number) -> ScreenImageScreenImage:SetSize(width, height)ScreenImage:SetSource(path: string) -> ScreenImageScreenImage:SetSourceBase64(base64Image: string) -> ScreenImageScreenImage:SetSourceBytes(imageBytes: number[]|string) -> ScreenImageScreenImage:SetZIndex(zIndex)ScreenText:ClearParent() -> ScreenTextScreenText:Create() -> ScreenTextScreenText:GetColor() -> tableScreenText:GetEnabled() -> booleanScreenText:GetHeight() -> numberScreenText:GetPosition() -> tableScreenText:GetText() -> stringScreenText:GetVisible() -> booleanScreenText:GetWidth() -> numberScreenText:IsCreated() -> booleanScreenText:New(id: string, renderLayer?: string) -> ScreenTextScreenText:Remove()ScreenText:SetAlignment(h_align: number, v_align: number) -> ScreenTextScreenText:SetClickable(callback: function) -> ScreenTextScreenText:SetColor(color: table) -> ScreenTextScreenText:SetDraggable(draggable: boolean) -> ScreenTextScreenText:SetDragTarget(target: ScreenText|ScreenImage|string|nil) -> ScreenTextScreenText:SetEnabled(enabled: boolean) -> ScreenTextScreenText:SetFont(family: string|nil, pixelSize: integer|nil) -> ScreenTextScreenText:SetFontFamily(family: string|nil) -> ScreenTextScreenText:SetFontSize(pixelSize: integer|nil) -> ScreenTextScreenText:SetOnDragEnd(callback: function|nil) -> ScreenTextScreenText:SetParent(parent: ScreenText|ScreenImage|string) -> ScreenTextScreenText:SetRenderLayer(renderLayer: string) -> ScreenTextScreenText:SetScreenPosition(x: number, y: number) -> ScreenTextScreenText:SetText(text: string) -> ScreenTextScreenText:SetZIndex(zIndex: number) -> ScreenTextWorldBox:ClearParent() -> WorldBoxWorldBox:Create() -> WorldBoxWorldBox:GetColor() -> tableWorldBox:GetEnabled() -> booleanWorldBox:GetHeight() -> numberWorldBox:GetPosition() -> tableWorldBox:GetVisible() -> booleanWorldBox:GetWidth() -> numberWorldBox:IsCreated() -> booleanWorldBox:New(id: string, x: number, y: number, z: number, renderLayer?: string) -> WorldBoxWorldBox:Remove()WorldBox:SetBorderColor(border_color: table) -> WorldBoxWorldBox:SetBorderWidth(border_width: number) -> WorldBoxWorldBox:SetColor(color: table) -> WorldBoxWorldBox:SetEnabled(enabled: boolean) -> WorldBoxWorldBox:SetHeight(height: number) -> WorldBoxWorldBox:SetLifetime(lifetime_ms: number) -> WorldBoxWorldBox:SetParent(parent_id: string) -> WorldBoxWorldBox:SetPosition(x: number, y: number, z: number) -> WorldBoxWorldBox:SetRenderLayer(renderLayer: string) -> WorldBoxWorldBox:SetSize(width: number, height: number) -> WorldBoxWorldBox:SetWidth(width: number) -> WorldBoxWorldBox:SetZIndex(zIndex: number) -> WorldBoxWorldImage:ClearParent() -> WorldImageWorldImage:Create()WorldImage:GetEnabled() -> booleanWorldImage:GetHeight() -> numberWorldImage:GetPosition() -> tableWorldImage:GetVisible() -> booleanWorldImage:GetWidth() -> numberWorldImage:IsCreated() -> booleanWorldImage:New(id, x, y, z, renderLayer?: string)WorldImage:Remove()WorldImage:SetEnabled(enabled: boolean) -> WorldImageWorldImage:SetItemId(itemId)WorldImage:SetItemName(itemName)WorldImage:SetLabel(text: string|nil, color?: table, offsetX?: number, offsetY?: number) -> WorldImageWorldImage:SetLifetime(lifetimeMs)WorldImage:SetOffset(offsetX, offsetY)WorldImage:SetParent(parent_id: string) -> WorldImageWorldImage:SetPosition(x, y, z)WorldImage:SetRenderLayer(renderLayer: string) -> WorldImageWorldImage:SetSize(width, height)WorldImage:SetSource(path: string) -> WorldImageWorldImage:SetSourceBase64(base64Image: string) -> WorldImageWorldImage:SetSourceBytes(imageBytes: number[]|string) -> WorldImageWorldImage:SetZIndex(zIndex)WorldText:ClearParent() -> WorldTextWorldText:Create() -> WorldTextWorldText:GetColor() -> tableWorldText:GetEnabled() -> booleanWorldText:GetHeight() -> numberWorldText:GetPosition() -> tableWorldText:GetText() -> stringWorldText:GetVisible() -> booleanWorldText:GetWidth() -> numberWorldText:IsCreated() -> booleanWorldText:New(id: string, x: number, y: number, z: number, renderLayer?: string) -> WorldTextWorldText:Remove()WorldText:SetColor(color: table) -> WorldTextWorldText:SetEnabled(enabled: boolean) -> WorldTextWorldText:SetFont(family: string|nil, pixelSize: integer|nil) -> WorldTextWorldText:SetFontFamily(family: string|nil) -> WorldTextWorldText:SetFontSize(pixelSize: integer|nil) -> WorldTextWorldText:SetLifetime(lifetime_ms: number) -> WorldText|WorldBoxWorldText:SetOffset(offset_x: number, offset_y: number) -> WorldText|WorldBoxWorldText:SetParent(parent_id: string) -> WorldTextWorldText:SetPosition(x: number, y: number, z: number) -> WorldTextWorldText:SetRenderLayer(renderLayer: string) -> WorldTextWorldText:SetText(text: string) -> WorldTextWorldText:SetZIndex(zIndex: number) -> WorldText
Inventory.CanMoveEquipment() -> booleanInventory.CanReadEquipment() -> booleanInventory.Equip(itemId: integer, tierLevel?: integer) -> anyInventory.GetAllSlotItems() -> tableInventory.GetEquipmentSlotConstants() -> tableInventory.GetSlotIds() -> integer[]Inventory.GetSlotItem(equipmentSlot: integer) -> table|nilInventory.GetSlotItemId(equipmentSlot: integer) -> integer|nilInventory.GetSnapshot() -> tableInventory.HasItemInSlot(equipmentSlot: integer) -> boolean|nilInventory.LookSlotItem(itemId: integer, equipmentSlot: integer) -> anyInventory.MoveFromContainerToSlot(containerIndex: integer, slotIndex: integer, itemId: integer, equipmentSlot: integer, itemCount: integer) -> anyInventory.MoveFromSlotToContainer(equipmentSlot: integer, containerIndex: integer, slotIndex: integer, itemId: integer, itemCount: integer) -> any
Item.Buy(itemId: integer, itemCount: integer, ignoreCapacity?: boolean, buyInShoppingBags?: boolean) -> anyItem.FindInContainer(containerNumber: integer, itemId: integer, tierLevel?: integer) -> table|nilItem.GetDescription(itemId: integer) -> string|nilItem.GetFromContainer(containerNumber: integer, slotIndex: integer) -> table|nilItem.GetInfo(itemId: integer) -> table|nilItem.GetName(itemId: integer) -> string|nilItem.HasFlag(itemId: integer, fieldName: string) -> booleanItem.IsContainer(itemId)Item.IsCreature(itemId)Item.IsCumulative(itemId)Item.IsGround(itemId)Item.IsLiquidContainer(itemId)Item.IsMovable(itemId)Item.IsMultiUsable(itemId)Item.IsTakable(itemId)Item.IsUsable(itemId)Item.Sell(itemId: integer, itemCount: integer, sellEquipped?: boolean) -> anyItem.Use(itemId: integer) -> booleanItem.UseFromContainerOnFloor(floorPosition: table, fromItemId: integer, toItemId: integer, toStackPosition: integer) -> anyItem.UseFromContainerToContainer(fromContainer: integer, fromSlot: integer, fromItemId: integer, toContainer: integer, toSlot: integer, toItemId: integer) -> anyItem.UseFromFloorToContainer(floorPosition: table, fromItemId: integer, fromStackPosition: integer, toItemId: integer) -> anyItem.UseOnCreature(itemId: integer, creatureId: integer) -> booleanItem.UseOnSelf(itemId: integer) -> boolean
- Constant:
Json.Null(JSON null sentinel) Json.Array(value: table) -> tableJson.Decode(text: string) -> anyJson.Encode(value: any, pretty?: boolean|integer) -> stringJson.Object(value: table) -> tableJson.TryDecode(text: string) -> any|nil, string|nilJson.TryEncode(value: any, pretty?: boolean|integer) -> string|nil, string|nil
CharacterFlag.BLEEDING = 15CharacterFlag.BURNING = 1CharacterFlag.CURSED = 11CharacterFlag.DAZZLED = 10CharacterFlag.DROWNING = 8CharacterFlag.DRUNK = 3CharacterFlag.ELECTRIFIED = 2CharacterFlag.FEARED = 20CharacterFlag.FREEZING = 9CharacterFlag.HASTED = 6CharacterFlag.IN_COMBAT = 7CharacterFlag.IN_PROTECTION_ZONE = 14CharacterFlag.MANA_SHIELDED = 4CharacterFlag.PARALYSED = 5CharacterFlag.POISONED = 0CharacterFlag.ROOTED = 19CharacterFlag.STRENGTHENED = 12ChaseMode.CHASE = 1ChaseMode.STAND = 0ChaseMode.UNKNOWN = 2CooldownGroupId.ATTACK = 1CooldownGroupId.BURST_OF_NATURE = 10CooldownGroupId.CRIPPLING = 5CooldownGroupId.FOCUS = 7CooldownGroupId.GREAT_BEAMS = 9CooldownGroupId.HEALING = 2CooldownGroupId.SPECIAL = 4CooldownGroupId.SUPPORT = 3CooldownGroupId.ULTIMATE = 8CooldownGroupId.VIRTUE = 11CreatureIcon.FIENDISH = 5CreatureIcon.INFLUENCED = 4CreatureIcon.LOWER_DAMAGE = 2CreatureIcon.NONE = 0CreatureIcon.REDUCED_HEALTH = 6CreatureIcon.TURNED_MELEE = 3CreatureIcon.WEAKENED = 1CreatureType.CREATURETYPE_HIDDEN = 5CreatureType.CREATURETYPE_MONSTER = 1CreatureType.CREATURETYPE_NPC = 2CreatureType.CREATURETYPE_PLAYER = 0CreatureType.CREATURETYPE_SUMMON_OTHERS = 4CreatureType.CREATURETYPE_SUMMON_OWN = 3CreatureType.HIDDEN = 5CreatureType.MONSTER = 1CreatureType.NPC = 2CreatureType.PLAYER = 0CreatureType.SUMMON_OTHERS = 4CreatureType.SUMMON_OWN = 3EquipmentSlot.AMULET = 2EquipmentSlot.ARMOR = 4EquipmentSlot.ARROW = 10EquipmentSlot.BACKPACK = 3EquipmentSlot.BOOTS = 8EquipmentSlot.HELMET = 1EquipmentSlot.LEFT_HAND = 6EquipmentSlot.LEGS = 7EquipmentSlot.NONE = 0EquipmentSlot.RIGHT_HAND = 5EquipmentSlot.RING = 9EquipmentSlot.STORE = 11FightMode.BALANCED = 2FightMode.DEFENSIVE = 3FightMode.OFFENSIVE = 1FightMode.UNKNOWN = 0MessageClasses.DAMAGE_DEALED = 21MessageClasses.DAMAGE_OTHERS = 25MessageClasses.DAMAGE_RECEIVED = 22MessageClasses.EXP = 24MessageClasses.EXP_OTHERS = 27MessageClasses.FAILURE = 19MessageClasses.GAME = 18MessageClasses.GAME_HIGHLIGHT = 50MessageClasses.GAME_MASTER_CONSOLE = 13MessageClasses.GUILD = 31MessageClasses.HEAL_OTHERS = 26MessageClasses.HEALED = 23MessageClasses.HOTKEY_USE = 37MessageClasses.LOGIN = 17MessageClasses.LOOK = 20MessageClasses.LOOT = 29MessageClasses.MANA = 41MessageClasses.MONSTER_SAY = 44MessageClasses.MONSTER_YELL = 43MessageClasses.NONE = 0MessageClasses.PARTY = 33MessageClasses.PARTY_MANAGEMENT = 32MessageClasses.REPORT = 36MessageClasses.STATUS = 28MessageClasses.STATUS_WARNING = 9MessageClasses.TRADE_NPC = 30MessageMode.BARK_LOUD = 35MessageMode.BARK_LOW = 34MessageMode.BEYOND_LAST = 42MessageMode.BLUE = 46MessageMode.CHANNEL = 7MessageMode.CHANNEL_HIGHLIGHT = 8MessageMode.CHANNEL_MANAGEMENT = 6MessageMode.DAMAGE_DEALED = 21MessageMode.DAMAGE_OTHERS = 25MessageMode.DAMAGE_RECEIVED = 22MessageMode.EXP = 24MessageMode.EXP_OTHERS = 27MessageMode.FAILURE = 19MessageMode.GAME = 18MessageMode.GAME_HIGHLIGHT = 50MessageMode.GAMEMASTER_BROADCAST = 12MessageMode.GAMEMASTER_CHANNEL = 13MessageMode.GAMEMASTER_PRIVATE_FROM = 14MessageMode.GAMEMASTER_PRIVATE_TO = 15MessageMode.GUILD = 31MessageMode.HEAL = 23MessageMode.HEAL_OTHERS = 26MessageMode.HOTKEY_USE = 37MessageMode.INVALID = 255MessageMode.LAST = 52MessageMode.LOGIN = 16MessageMode.LOOK = 20MessageMode.LOOT = 29MessageMode.MANA = 41MessageMode.MARKET = 40MessageMode.MONSTER_SAY = 44MessageMode.MONSTER_YELL = 43MessageMode.NPC_FROM = 10MessageMode.NPC_FROM_START_BLOCK = 51MessageMode.NPC_TO = 11MessageMode.PARTY = 33MessageMode.PARTY_MANAGEMENT = 32MessageMode.PRIVATE_FROM = 4MessageMode.PRIVATE_TO = 5MessageMode.RED = 45MessageMode.REPORT = 36MessageMode.RVR_ANSWER = 48MessageMode.RVR_CHANNEL = 47MessageMode.RVR_CONTINUE = 49MessageMode.SAY = 1MessageMode.SPELL = 9MessageMode.STATUS = 28MessageMode.THANKYOU = 39MessageMode.TRADE_NPC = 30MessageMode.TUTORIAL_HINT = 38MessageMode.WARNING = 17MessageMode.WHISPER = 0MessageMode.YELL = 2PrintMessagePosition.BOTTOM = 1PrintMessagePosition.LOOT = 2PrintMessagePosition.MIDDLE = 0PVPMode.RED_FIST = 3PVPMode.UNKNOWN = 4PVPMode.WHITE_DOVE = 0PVPMode.WHITE_HAND = 1PVPMode.YELLOW_HAND = 2Skill.AXE = 14Skill.CAPACITY = 9Skill.CLEAVE_PERCENTAGE = 30Skill.CLUB = 12Skill.CRITICAL_CHANCE = 21Skill.CRITICAL_EXTRA_DAMAGE = 22Skill.DAMAGE_REFLECTION = 36Skill.DISTANCE = 11Skill.EXPERIENCE = 1Skill.EXPERIENCE_GAIN = 3Skill.FISHING = 16Skill.FIST = 15Skill.FOOD = 17Skill.HIT_POINTS = 6Skill.LEVEL = 2Skill.LIFE_LEECH_AMOUNT = 24Skill.LIFE_LEECH_CHANCE = 23Skill.MAGIC_LEVEL = 4Skill.MAGIC_SHIELD_FLAT = 31Skill.MAGIC_SHIELD_PERCENT = 32Skill.MANA = 7Skill.MANA_LEECH_AMOUNT = 26Skill.MANA_LEECH_CHANCE = 25Skill.MOMENTUM_LEVEL = 29Skill.NONE = 0Skill.OFFLINE_TRAINING = 20Skill.ONSLAUGHT_LEVEL = 27Skill.PERFECT_SHOT_DAMAGE = 33Skill.RUSE_LEVEL = 28Skill.SHIELDING = 10Skill.SOUL = 18Skill.SPEED = 8Skill.STAMINA = 19Skill.SWORD = 13Skull.BLACK = 5Skull.GREEN = 2Skull.NO_SKULL = 0Skull.RED = 4Skull.REVENGE = 6Skull.WHITE = 3Skull.YELLOW = 1SpeakClasses.TALKTYPE_BROADCAST = 13SpeakClasses.TALKTYPE_CHANNEL_MANAGER = 6SpeakClasses.TALKTYPE_CHANNEL_O = 8SpeakClasses.TALKTYPE_CHANNEL_R1 = 14SpeakClasses.TALKTYPE_CHANNEL_R2 = 0xFFSpeakClasses.TALKTYPE_CHANNEL_Y = 7SpeakClasses.TALKTYPE_MONSTER_LAST_OLDPROTOCOL = 38SpeakClasses.TALKTYPE_MONSTER_SAY = 36SpeakClasses.TALKTYPE_MONSTER_YELL = 37SpeakClasses.TALKTYPE_NPC_UNKOWN = 11SpeakClasses.TALKTYPE_PRIVATE_FROM = 4SpeakClasses.TALKTYPE_PRIVATE_NP = 10SpeakClasses.TALKTYPE_PRIVATE_PN = 12SpeakClasses.TALKTYPE_PRIVATE_RED_FROM = 15SpeakClasses.TALKTYPE_PRIVATE_RED_TO = 16SpeakClasses.TALKTYPE_PRIVATE_TO = 5SpeakClasses.TALKTYPE_SAY = 1SpeakClasses.TALKTYPE_SPELL_USE = 9SpeakClasses.TALKTYPE_WHISPER = 2SpeakClasses.TALKTYPE_YELL = 3VipFlag.AIM_TARGET = 4VipFlag.CROSS = 8VipFlag.GREEN_TARGET = 10VipFlag.GREEN_TRIANGLE = 7VipFlag.HEART = 1VipFlag.MONEY_SIGN = 9VipFlag.NO_FLAG = 0VipFlag.SKULL_CROSSED = 2VipFlag.STAR = 5VipFlag.THUNDER = 3VipFlag.YING_YANG = 6Vocation.VOCATION_DRUID_CIP = 4Vocation.VOCATION_KNIGHT_CIP = 1Vocation.VOCATION_MONK_CIP = 5Vocation.VOCATION_PALADIN_CIP = 2Vocation.VOCATION_SORCERER_CIP = 3WalkerEvent.ACTION_COMPLETED = 6WalkerEvent.ACTION_STARTED = 5WalkerEvent.OBSERVE_ACTION = 4WalkerEvent.OBSERVE_LABEL = 3WalkerEvent.ON_ACTION = 2WalkerEvent.ON_LABEL = 0WalkerEvent.ON_WAYPOINT_CHANGE = 1
Map.FindPath(fromPosition: table, toPosition: table, maxComplexity?: integer, flags?: integer) -> tableMap.GetObjectInfo(itemId: integer) -> table|nilMap.GetTileFlags(position: table) -> table|nilMap.GetTileItems(position: table, includeCreatures?: boolean) -> table[]Map.Look(position: table) -> anyMap.MoveItemFloorToContainer(itemId: integer, fromPosition: table, containerIndex: integer, slotIndex: integer, itemCount: integer) -> anyMap.MoveItemFloorToFloor(fromPosition: table, itemId: integer, toPosition: table, itemCount: integer) -> anyMap.UseItemOnFloor(position: table, stackPosition: integer, itemId: integer) -> any
Minimap.FindPath(fromPosition: table, toPosition: table, maxComplexity?: integer, flags?: integer) -> tableMinimap.GetTileFlags(position: table) -> table|nilMinimap.GetTileInfo(position: table, includeCreatures?: boolean) -> tableMinimap.GetTileItems(position: table, includeCreatures?: boolean) -> table[]Minimap.GetTilePixelColor(position: table) -> integer|nilMinimap.IsPathable(position: table) -> boolean|nilMinimap.IsPixelColorWalkable(pixelColorIndex: integer) -> booleanMinimap.IsWalkable(position: table) -> boolean|nilMinimap.IsWalkableByColor(position: table) -> boolean|nil
Module.After(name: string, callback: function, delayMs: integer) -> booleanModule.Cancel(name: string) -> booleanModule.Every(name: string, callback: function, delayMs: integer) -> booleanModule.Exists(name: string) -> booleanModule.Get(name: string) -> table|nilModule.List() -> table[]Module.New(name: string, callback: function, delayMs?: integer) -> nilModule.Pause(name: string) -> nilModule.PauseManaged(name: string) -> booleanModule.Resume(name: string) -> nilModule.ResumeManaged(name: string) -> booleanModule.Stop(name: string) -> nil
NpcTradeStorage.Buy(itemId: integer, itemCount: integer, ignoreCapacity?: boolean, buyInShoppingBags?: boolean) -> anyNpcTradeStorage.FormatOffers() -> string[]NpcTradeStorage.GetNpcName() -> string|nilNpcTradeStorage.GetOfferByItemId(itemId: integer) -> table|nilNpcTradeStorage.GetOfferByName(itemName: string) -> table|nilNpcTradeStorage.GetOffers() -> table[]NpcTradeStorage.GetSnapshot() -> tableNpcTradeStorage.IsAvailable() -> booleanNpcTradeStorage.IsOpen() -> boolean|nilNpcTradeStorage.Sell(itemId: integer, itemCount: integer, sellEquipped?: boolean) -> any
Position.IsReachable(fromOrTarget: table|Position|nil, toOrFrom?: table) -> booleanPosition.IsShootable(fromOrTarget: table|Position|nil, toOrFrom?: table) -> booleanPosition.New(x: number|table, y?: number, z?: number) -> PositionPosition:DistanceTo(otherPos: table|Position) -> integer
Self.Attack(creatureId: integer) -> booleanSelf.BuyItem(itemId: integer, itemCount: integer, ignoreCapacity?: boolean, buyInShoppingBags?: boolean) -> booleanSelf.CancelWalk() -> booleanSelf.Dismount() -> booleanSelf.Equip(itemId: integer, tierLevel?: integer) -> booleanSelf.Follow(creatureId: integer) -> booleanSelf.FormatStatsSnapshot(stats?: table, prefix?: string) -> stringSelf.GetCapacity() -> number|nilSelf.GetCapacityFloor() -> integer|nilSelf.GetCharacterWorld(characterName: string) -> string|nilSelf.GetFollowId() -> integer|nilSelf.GetHealth() -> integer|nilSelf.GetHealthPercentage() -> number|nilSelf.GetItemCount(itemId: integer, tierLevel?: integer) -> integerSelf.GetLevel() -> integer|nilSelf.GetLevelPercentage() -> number|nilSelf.GetMana() -> integer|nilSelf.GetManaPercentage() -> number|nilSelf.GetManaShieldCapacity() -> integer|nilSelf.GetMaxHealth() -> integer|nilSelf.GetMaxMana() -> integer|nilSelf.GetMaxManaShieldCapacity() -> integer|nilSelf.GetMousePositionInWorld() -> table|nilSelf.GetMousePositionText() -> stringSelf.GetMouseWorldX() -> number|nilSelf.GetMouseWorldY() -> number|nilSelf.GetMouseWorldZ() -> number|nilSelf.GetSoul() -> integer|nilSelf.GetStamina() -> integer|nilSelf.GetStaminaDays() -> integer|nilSelf.GetStaminaHours() -> integer|nilSelf.GetStatsSnapshot() -> tableSelf.GetStatusFlagsSnapshot() -> tableSelf.GetTargetId() -> integer|nilSelf.HasFollow() -> boolean|nilSelf.HasTarget() -> boolean|nilSelf.IsAlive() -> boolean|nilSelf.IsAttacking() -> boolean|nilSelf.IsAvailable() -> booleanSelf.IsBleeding() -> boolean|nilSelf.IsBurning() -> boolean|nilSelf.IsCursed() -> boolean|nilSelf.IsDazzled() -> boolean|nilSelf.IsDrowning() -> boolean|nilSelf.IsDrunk() -> boolean|nilSelf.IsElectrified() -> boolean|nilSelf.IsFeared() -> boolean|nilSelf.IsFollowing() -> boolean|nilSelf.IsFreezing() -> boolean|nilSelf.IsHasted() -> boolean|nilSelf.IsHungry() -> boolean|nilSelf.IsInCombat() -> boolean|nilSelf.IsInProtectionZone() -> boolean|nilSelf.IsInRestingArea() -> boolean|nilSelf.IsManaShielded() -> boolean|nilSelf.IsOnline() -> boolean|nilSelf.IsParalyzed() -> boolean|nilSelf.IsPoisoned() -> boolean|nilSelf.IsRooted() -> boolean|nilSelf.IsStrengthened() -> boolean|nilSelf.LookAtCreature(creatureId: integer) -> booleanSelf.LookAtPosition(position: table) -> booleanSelf.Mount() -> booleanSelf.PrivateMessage(playerName: string, message: string) -> booleanSelf.Say(message: string) -> booleanSelf.SayOnChannel(message: string, channelId: integer) -> booleanSelf.SayToNpc(message: string) -> booleanSelf.SellItem(itemId: integer, itemCount: integer, sellEquipped?: boolean) -> booleanSelf.Step(direction: integer) -> booleanSelf.StopAttackAndFollow() -> booleanSelf.UseItemInContainer(itemId: integer, containerIndex: integer, itemPos: integer, useItemWithHotkey?: boolean) -> booleanSelf.UseItemOnFloor(position: table, stackPosition: integer, itemId: integer) -> booleanSelf.Whisper(message: string) -> booleanSelf.Yell(message: string) -> boolean
BotSoundId.CREATURE_DETECTED = 5BotSoundId.DAMAGE_TAKEN = 1BotSoundId.DISCONNECTED = 0BotSoundId.ENEMY_ON_SCREEN = 9BotSoundId.GM_ON_SCREEN = 11BotSoundId.LOCAL_MESSAGE = 10BotSoundId.LOW_HEALTH = 2BotSoundId.LOW_MANA = 3BotSoundId.PLAYER_ATTACK = 6BotSoundId.PLAYER_DETECTED = 7BotSoundId.PRIVATE_MESSAGE = 4BotSoundId.SKULL_ON_SCREEN = 8BotSoundId.UNJUSTIFIED_KILL = 13BotSoundId.WALKER_STUCK = 12Sound.ClearQueue()Sound.GetCurrentDuration() -> integerSound.GetFileDuration(filePath: string) -> integerSound.GetQueueSize() -> integerSound.IsPlaying() -> booleanSound.IsQueued(options: table) -> booleanSound.Play(options: table)Sound.SetMinDelay(delayMs: integer)Sound.Stop()Time.MonotonicMs() -> integer
Spells.GetGroupIds(spellOrWordsOrId)Spells.GetIdByName(name)Spells.GetIdByWords(words)Spells.GetInfo(spellOrWordsOrId)Spells.GetLeftCooldownTime(spellOrWordsOrId)Spells.GetLeftGroupCooldownTime(groupId)Spells.GetWordsById(spellId)Spells.GroupIsInCooldown(groupId)Spells.IsInCooldown(spellOrWordsOrId)Spells.IsReady(spellOrWordsOrId)Spells.IsUseWithItemExhausted()Spells.Item.GetCooldownId(itemId)Spells.Item.GetGroupIds(itemId)Spells.Item.GetInfo(itemId)Spells.Item.GetLeftCooldownTime(itemId)Spells.Item.IsInCooldown(itemId)Spells.Item.IsReady(itemId)Spells.Item.WillBeReady(itemId, timeMs)Spells.WillBeReady(spellOrWordsOrId, timeMs)
SharedStorageScope:Clear() -> boolean, string|nilSharedStorageScope:Get(key: string, default?: any) -> any, string|nilSharedStorageScope:OffChanged(subscriptionId: string) -> boolean, string|nilSharedStorageScope:OnChanged(callback: function, key?: string, includeSelf?: boolean) -> string|nil, string|nilSharedStorageScope:Remove(key: string) -> boolean, string|nilSharedStorageScope:Set(key: string, value: any) -> boolean, string|nilSharedStorageScope:Update(key: string, updater: function, default?: any) -> boolean, any, string|nilStorage.Character.Clear() -> booleanStorage.Character.Get(key: string, default?: any) -> anyStorage.Character.Remove(key: string) -> booleanStorage.Character.Set(key: string, value: any) -> booleanStorage.ForCharacter(namespace: string) -> StorageScopeStorage.Global.Clear() -> booleanStorage.Global.Get(key: string, default?: any) -> anyStorage.Global.Remove(key: string) -> booleanStorage.Global.Set(key: string, value: any) -> booleanStorage.Namespace(namespace: string, perCharacter?: boolean) -> StorageScopeStorage.Shared(namespace: string) -> SharedStorageScopeStorage.SharedForCharacter(namespace: string) -> SharedStorageScopeStorageScope:Get(key: string, default?: any) -> anyStorageScope:Remove(key: string) -> booleanStorageScope:Set(key: string, value: any) -> boolean
VIP.Count() -> integerVIP.CountOnline() -> integerVIP.Exists(vipName: string) -> booleanVIP.FindByPrefix(namePrefix: string, onlyOnline?: boolean) -> table[]VIP.Get(vipName: string) -> table|nilVIP.GetAll() -> table[]VIP.GetByType(vipType: integer) -> table[]VIP.GetDescription(vipName: string) -> string|nilVIP.GetHearts() -> table[]VIP.GetNames(onlyOnline?: boolean) -> string[]VIP.GetNotifyOnLogin(vipName: string) -> boolean|nilVIP.GetSnapshot() -> tableVIP.GetType(vipName: string) -> integer|nilVIP.IsAvailable() -> booleanVIP.IsHeart(vipName: string) -> booleanVIP.IsOnline(vipName: string) -> booleanVIP.ToLookupTable() -> table
WebSocket.Connect(url: string, options?: table) -> table|nil, string|nilWebSocketConnection:Close(closeCode?: integer, reason?: string) -> boolean, string|nilWebSocketConnection:IsOpen() -> booleanWebSocketConnection:Receive(timeoutMs?: integer) -> tableWebSocketConnection:Send(data: string, binary?: boolean) -> boolean, string|nil