OPX//77
Migration

From opx77_* to opx_infinity

Last updated on

Where every old opx77_* resource, export, event, command and config key went when the framework became the single opx_infinity resource, and what has no replacement.

In September 2026 the separate opx77_* resources were replaced by one resource, opx_infinity; each old resource is now a module inside it. General changes first, then one folded table set per old resource.

What changed for everyone

BeforeNow
Sixteen documented opx77_* resources (twenty-one in all)One resource, opx_infinity, plus the client library opx_lib
Each resource published exports (Open77.exports.call('opx77_core', ...))Modules call each other's contracts with OPX.Api.Get('<module>'), inside opx_infinity only.
Answers { ok = true, ... } with fields at the top levelContracts mostly answer Result: { ok = true, value = ... } / { ok = false, error, detail }. Money mutators still answer ok, code. Each module page gives the exact shape.
A service found its caller with GetInvokingResource()The caller passes its own owner name (menus, prompts, effects, animations).
Events opx77:client:*, opx77:server:*, <resource>:*opx:net:<module>:<verb>, opx:on:..., opx:in:...
Client events heard by other resourcesClient opx:on: events stay inside opx_infinity.
Commands opx77.*, rights command.opx77.*Commands opx.*, rights command.opx.*; optional short aliases.
One config global per resource (OPX_HUD_CONFIG)config/<module>.lua setting OPX.Config.MODULES.<module>. LOCALE keys are gone from module configs; the language is SHARED.LOCALE.
One CEF page per resourceOne WebUI page for every screen.
OPX.* helpers in lowerCamel (OPX.Result.ok)PascalCase (OPX.Result.Ok). See the API reference.
Database tables opx77_*Same names, kept. Several modules still read old tables and adopt their rows at boot. No migrations run.

For a separate resource that used the old exports

No drop-in replacement, but a curated set: call opx_infinity instead of opx77_core, with new names and the operator's allowlist in front. See For creators.

Old callNew call
opx77_core client GetPlayerData, HasJob, HasGangserver exports GetPlayerData, HasJob, HasGang; the client export GetPlayerData for the local player (the state bag is empty since PR #93)
opx77_core server GetIdentityserver exports GetPlayerData, GetPlayerByCitizenId
opx77_core server GetVersionserver export GetVersion
opx77_inventory AddItem, RemoveItem, HasItem, GetItemCountserver exports AddItem, RemoveItem, HasItem, CountItem
opx77_menu open, update, closeclient exports OpenMenu, UpdateMenu, CloseMenu (answers through your OnOpxEvent export)
opx77_input open, closeclient exports OpenForm, CloseForm
opx77_notify show, dismissclient exports ShowToast, DismissToast
opx77_animations play, stopclient exports PlayAnimation, StopAnimation
opx77_chat server chat:addMessageserver exports SendChat, BroadcastChat
server events opx77:player:loaded, moneyChange, jobUpdate…public server events opx:on:character:loaded, money, job…
opx77_core OPX.SetJob, SetGang, RemovePlayerFromJob, SetJobDuty (in-VM)server exports SetJob, SetGang, RemoveJob, RemoveGang, SetDuty
opx77_core OPX.SetMetadata/GetMetadataserver exports SetMetadata/GetMetadata, in your resource's own ext.<resource>.* space
client events opx77:client:onMoneyChange, onJobUpdate, opx77:status:needs…client export Subscribe('opx:on:character:money') and the other subscribable events
  • Anything not in that set must move into a module.
  • In the folded tables below, "no exports" describes the first opx_infinity release; the creator exports above were added afterwards.

Old resource → new module

Old resourceNew module(s)Notes
opx77_corecharacter, vehicles, inventory storage, core runtime (API reference)Split by concern.
opx77_charselectorremoved — character commands /opx.characters, /opx.selectNo selection screen.
opx77_charcreatorentry + appearanceName form only; body and face from the game's creator.
opx77_appearanceappearance (+ new clothing)
opx77_menumenu
opx77_inputform
opx77_notifycore OPX.Toast, OPX.Notify
opx77_hudhud/hud and the F8 toggle are gone.
opx77_statusneedsSame database table.
opx77_promptsprompts
opx77_chatchat
opx77_weatherweatherTime commands are now /opx.time*.
opx77_elevatorselevators
opx77_animationsanimations
opx77_adminadmin
opx77_inventoryinventory

Old URLs

Every page of the old site (reference/opx77_<name>/...) redirects to the module page that replaced it.

Detailed mappings

Old name → new name. "Removed" means there is no equivalent.

On this page