Skip to content

Retro Goldpanning

The resource includes editable hooks and bridge files so custom server environments can be integrated without modifying the protected core.

Set:

Config.Framework = 'custom'

Then configure:

editable/server.lua

The custom framework interface includes:

Editable.Framework.RegisterUsableItem(item, cb)
Editable.Framework.GetIdentifier(source)
Editable.Framework.AddMoney(source, account, amount)
Editable.Framework.GetMoney(source, account)
Editable.Framework.RemoveMoney(source, account, amount)
Editable.Framework.HasGroup(source, groups)

Register the resource’s usable items through your framework.

Return a stable character identifier.

This is used for systems such as:

  • Machine ownership
  • Work light ownership
  • Bucket state
  • Levels
  • Orders
  • Character-based sale limits

Use a character-specific identifier when your framework supports multiple characters.

Used by buyer sales and the gear shop.

Supported account names are normally:

cash
bank

Set:

Config.Inventory = 'custom'

Then implement:

Editable.Inventory.AddItem(source, item, count, metadata)
Editable.Inventory.RemoveItem(source, item, count, slot)
Editable.Inventory.GetItemCount(source, item)
Editable.Inventory.CanCarry(source, item, count)

Optional metadata support:

Editable.Inventory.FindItem(source, item)
Editable.Inventory.SetMetadata(source, slot, metadata)

These are required only when using features such as pan durability.

The highbanker can use a persistent stash.

Implement:

Editable.Inventory.OpenStash(source, id, label, slots, weight)

Optionally implement:

Editable.Inventory.StashCount(id)

This allows the resource to prevent machine pickup while items remain in the stash.

ESX default inventory does not provide native stash support, so a custom stash implementation is required if you want to use the highbanker stash with that setup.

Set:

Config.Interaction = 'target'
Config.Target = 'custom'

Then edit:

editable/client.lua

Implement:

Editable.Target.AddEntity(entity, options)
Editable.Target.RemoveEntity(entity)

Target entities are local non-networked objects.

Each option can include:

name
label
icon
canInteract
onSelect

The default notification function uses ox_lib when available and falls back to GTA feed notifications.

Edit:

Editable.Notify(message, type, duration)

in:

editable/client.lua

to integrate another notification resource.

Set:

Config.HintUI = 'custom'

Then implement:

Editable.Hints.Show(title, items, progress)
Editable.Hints.Progress(progress)
Editable.Hints.Hide()

Set:

Config.ProgressUI = 'custom'

Then edit:

editable/progress.lua

The custom backend receives:

{
duration,
label,
canCancel,
anim,
prop
}

and should return true when completed or false when cancelled.

function Editable.OnStart()
end

Called when the player begins panning.

Common uses:

  • Hide HUD
  • Disable another interaction system
  • Trigger custom UI state
function Editable.OnStop()
end

Called when the panning session ends.

function Editable.CanStart()
return true
end

Use this for immediate client-side feedback.

Example use cases:

  • Player is handcuffed
  • Player is in a forbidden state
  • Job restriction
  • Custom minigame state

Return:

false, 'locale_key'

to block the action.

Client-side checks are for user experience only. Important restrictions should also be validated server-side.

function Editable.CanStartServer(source)
return true
end

This is checked when panning starts and again during the panning flow.

Use it for security-sensitive conditions that a modified client must not be able to bypass.

function Editable.CanPlaceServer(source, kind, coords)
return true
end

kind can be:

machine
pump
light

Use it for additional placement restrictions.

Examples:

  • Job requirements
  • Restricted areas
  • Character state
  • Custom permission checks

The core already validates important server-side rules such as items, player distance, zone relation, spacing and per-player limits.

Water surface, terrain slope and pump suction reach depend on client-side GTA natives and are therefore validated client-side.

Enable:

Config.Admin.custom = true

Then implement:

function Editable.IsAdmin(source)
return false
end

Enable:

Config.Admin.discord = true

Add IDs to:

Editable.AdminDiscordIds = {
'123456789012345678',
}

This table is located in editable/server.lua, so the IDs are not sent to clients.

function Editable.OnCollect(source, data)
end

Called when a pan wash is fully collected.

Example data:

{
zone = id,
zoneLabel = 'River',
items = {
gold_nugget = 1
},
rocks = 8,
panBroke = false
}

Use this for:

  • Achievements
  • Quests
  • External logs
  • Progression systems
  • Analytics

Webhook configuration is located in:

Editable.Logs

inside editable/server.lua.

Available categories:

default
sale
order
shop
find
rig
admin

Webhook URLs remain server-side.

Configure:

Editable.Logs.bigFind

Example:

bigFind = {
gold_nugget = 1,
silver_nugget = 3
}

Every log passes through:

function Editable.OnLog(event, payload)
end

Use it to send logs to another system.

Return false to prevent the configured Discord webhook from receiving that event.

The resource exposes server exports for inventory systems that require item-side exports:

rs_goldpanning.usePan
rs_goldpanning.useMachine
rs_goldpanning.usePump
rs_goldpanning.useBucket
rs_goldpanning.useLight

These are especially useful with ox_inventory when no supported framework is responsible for registering usable items.

/goldzones

Opens the gold zone management panel.

The command name can be changed with:

Config.Admin.command
/goldlevel <player id> [level]

Without a level value, displays the player’s current prospector progress.

With a level value, sets the player to the start of that level.

Configured with:

Config.Admin.levelCommand
/goldorders <player id>

Clears the player’s current buyer orders. New orders are generated the next time the player requests them.

Configured with:

Config.Admin.ordersCommand

While drawing a zone:

KeyAction
EAdd point
GRemove last point
Mouse WheelAdjust height above
Shift + Mouse WheelAdjust depth below
EnterFinish drawing
XCancel

At least three points are required.

Enable:

Config.Debug = true

Use:

/gptune

for pan position tuning.

Use:

/gptune cam

for camera tuning.

The command prints the final values to the F8 console so they can be copied into config.lua.