OPX//77
opx_infinityteleports

teleports

Last updated on

Operator-placed teleport pads to places players cannot walk to, optionally locked to a job, with every trip checked and performed by the server.

Lets operators place pads that move a player to another spot: a rooftop with no stair, a mezzanine, an interior the game only reaches by cutscene. The player sees a marker, stands on it and presses E; the prompt strip names the destination. A pad can be one-way or two-way, and its outbound leg can be locked to jobs, grades and duty. The client only sends a pad key and a direction; the server re-checks the job gate, the player's own position and bucket, then moves the player with the platform's teleport. Use it to open up unreachable places or give a job its own entrance.

Sideboth
Requirescharacter (hard)
Optionalprompts (the strip row), downed (refuses while down)
Contractteleports v1 — server, client
Configconfig/teleports.lua (shared)
Datanone

No pad ships enabled

The three entries in POINTS are examples at coordinate 0,0,0 with enabled = false. A server has no teleports until an operator adds real ones. Read positions and heading with /opx.admin.self.pos.

Commands

CommandAccessArgumentsEffect
/opx.teleports.whereACL command.opx.teleports.where[key]Prints config problems, then one line per pad: label, bucket, one/two-way, both ends, job gate, and how many trips were taken, refused and lost. Ends with whether the platform teleport native exists. Name set by COMMAND.

Configuration

config/teleports.lua sets OPX.Config.MODULES.teleports.

KeyDefaultEffect
enabledtruefalse switches the module off.
USE_RADIUS2.0Metres across the ground from an entrance within which it may be used. The server allows REACH_SLACK (1 m) more.
USE_HEIGHT2.5Metres above or below the entrance that still count, so a player falling past is not on it.
MARKER{ shape = 'cylinder', style = 'interaction', RADIUS = 1.2 }Marker look. Shapes ring, cylinder; styles interaction, objective, spawn, danger; radius 0.1..50.
LOCKED_STYLE'danger'Marker style for a pad the player may not use (with DENIED = 'shown').
DENIED'shown'shown draws locked pads in LOCKED_STYLE; hidden draws nothing for them. The server refuses either way.
MAX_DISTANCE120.0Metres beyond which a marker is not drawn, 1..500.
GROUND_OFFSET0.06Metres the marker is lifted off the declared Z, 0..2.
POLL_MS15000How often the client re-asks for the list (carries duty and job changes).
SCAN_MS500Client marker and prompt pass.
JOB_MAX_AGE_MS60000Job snapshot age past which gated pads close.
MEMBERSHIP'primary'primary or any, as in elevators.
FADE_MS400Screen fade around the move. Tunable TP_FADE_MS.
SETTLE_MS12000How long the platform waits for the body to stand at the destination, 1000..30000. Tunable TP_SETTLE_MS.
REQUEST_WINDOW_MS10000Rate window. Tunable TP_REQUEST_WINDOW_MS.
REQUESTS_PER_WINDOW6Trips asked per player per window, as every other place (was 4 before PR #95). Tunable TP_REQUESTS_PER_WINDOW.
KEY{ ID = 'opx.teleports.use', NAME = 'teleports.key.use', DEFAULT = 'E' }The use key. Players rebind it in the pause menu under ID. DEFAULT = false registers none.
COMMAND'opx.teleports.where'Diagnostic command name; false registers none.
POINTS3 disabled examplesPad key → definition. See below.
config/teleports.lua — the shipped gated example
example_secure = {
  enabled = false,
  LABEL = 'EXAMPLE: secure floor',
  BUCKET = 0,
  ENTRY = { LABEL = 'Lobby', X = 0.0, Y = 0.0, Z = 0.0, HEADING = 0.0 },
  EXIT = { LABEL = 'Secure floor', X = 0.0, Y = 0.0, Z = 60.0, HEADING = 270.0 },
  RETURN = true,
  DISMOUNT = false,
  JOBS = { arasaka = 2 },
  ON_DUTY = true,
  REASON = 'Arasaka Counterintel, on duty',
},
  • key: pad name, 1..48 characters.
  • enabled: false skips the pad.
  • LABEL: pad name for the diagnostic, max 64.
  • BUCKET: routing bucket, default 0. Both ends share it.
  • ENTRY: { LABEL, X, Y, Z, HEADING } — where the player stands.
  • EXIT: { LABEL, X, Y, Z, HEADING } — where they land and which way they face.
  • RETURN: true makes the exit an entrance back to ENTRY.
  • DISMOUNT: true pulls the player out of a vehicle instead of refusing. The vehicle stays behind.
  • JOBS, ON_DUTY, REASON: the job gate, outbound leg only.
  • The prompt shows the label of the end the player is going to. The way back (RETURN) is never gated, so nobody is stranded after losing a job.

The job gate

Same format as elevators; see OPX.JobGate.Evaluate.

FieldMeaning
JOBS{ [jobName] = minimumGradeLevel }. Any one listed job at its grade passes. No JOBS = public.
ON_DUTYtrue also requires that job to be the worked job and on duty.
REASONText shown to a refused player, max 64. Never translated.

Refusal codes

CodeMeaningPlayer sees
rate_limitedToo many requests.error.tooFast
in_flightA trip is already running (lock released after 45 s). A trip that fails is always answered, and the client's own latch also opens after 45 s.teleports.inFlight
no_such_teleportUnknown key, or back on a one-way pad.teleports.noSuchTeleport
no_character, job_stale, job_required, grade_too_low, off_dutyThe job gate refused.REASON, else teleports.locked
downedThe player is down.teleports.downed
no_position, wrong_bucket, too_farNot standing on the entrance.teleports.noPosition, teleports.tooFar
unavailable, no_promiseOpen77.players.teleport is missing on this host.teleports.unavailable
player_in_vehicle, dismount_failed, player_not_alive, player_not_ready, invalid_positionRefused by the platform teleport.teleports.inVehicle, teleports.notAlive, teleports.notReady, teleports.badDestination
settle_timeoutThe body never stood at the exit in SETTLE_MS. Usually no floor at the exit.teleports.neverArrived

On this page