Feed API

Co moduł klienta gry wysyła i otrzymuje. Każde wywołanie poza pierwszym niesie token z parowania:

Authorization: Bearer <token>

Adres bazowy: http://127.0.0.1:8090/api/v1. Opis dla programów jest pod openapi.json.

POST/api/v1/pair

Ask for a pairing code Call it once, when the module has no token yet. Show the code and the link in the game.

Bez tokenu.

Treść zapytania

PoleTypOpis
characterwymaganestringThe character the client playsdo 30 znaków
serverwymaganestringServer slug or name, for example oriondo 60 znaków
platformstringOperating system, for example Windows 11do 40 znaków
modulestringModule name and versiondo 40 znaków

Odpowiedź

PoleTypOpis
codewymaganestringShow it to the player. It is valid for 15 minutes
urlwymaganestringOpen it to start a guest dashboard, or to add the client to an account
tokenwymaganestringThe client's secret. Store it; it works once the code is used
expiresAtwymaganeinteger

POST/api/v1/status

Send the character's state Every 5 to 10 seconds while the client runs. The reply says when to send the next capture.

Treść zapytania

PoleTypOpis
schema"vw.status/1"Payload schema and version
modulewymaganestringName and version of the sending module, for example voidwatch-feed/0.3.0do 40 znaków
onlinewymaganebooleanThe character is logged in
characterwymaganeCharacter
character.namewymaganestringCharacter namedo 30 znaków
character.vocationstringVocation, for example Elite Knightdo 30 znaków
character.levelwymaganeinteger≥ 1, ≤ 5000
character.expwymaganeintegerTotal experience points≥ 0
poswymaganePosition
pos.xwymaganeintegerMap x≥ 0, ≤ 65535
pos.ywymaganeintegerMap y≥ 0, ≤ 65535
pos.zwymaganeintegerFloor, 0 to 15; 7 is ground level≥ 0, ≤ 15
capintegerFree capacity, in oz≥ 0
staminaintegerStamina, in minutes≥ 0, ≤ 2520
expPerHourintegerExp per hour as the client measures it≥ 0
routestringThe loaded cavebot routedo 80 znaków
routeOnbooleanThe cavebot is running
labelstringThe route label the bot is atdo 40 znaków
routesstring[]Every route the bot can loaddo 100 elementów
suppliesCounted[]do 30 elementów
supplies[].namewymaganestringItem or creature name, as the game writes itdo 60 znaków
supplies[].havewymaganeintegerHow many the character has now≥ 0
supplies[].wantwymaganeintegerHow many the bot keeps in stock, or the task goal≥ 0
tasksCounted[]do 10 elementów
tasks[].namewymaganestringItem or creature name, as the game writes itdo 60 znaków
tasks[].havewymaganeintegerHow many the character has now≥ 0
tasks[].wantwymaganeintegerHow many the bot keeps in stock, or the task goal≥ 0
lootLootItem[]do 200 elementów
loot[].namewymaganestringItem namedo 60 znaków
loot[].countwymaganeintegerLooted since the session started≥ 0
loot[].sellintegerNPC price per item, if the module knows it. The server fills it in otherwise≥ 0
lootHoursnumberHours since the loot counter started≥ 0
skullsSkull[]Skulled players in viewdo 20 elementów
skulls[].namewymaganestringPlayer namedo 30 znaków
skulls[].skullwymagane"white" | "red" | "black" | "yellow" | "green" | "orange"Skull colour
blessedbooleanOnly on servers with blessings
redemptionLeftintegerOnly on servers with redemption≥ 0

Odpowiedź

PoleTypOpis
okwymaganeboolean
statusEverywymaganeintegerSeconds until the next status: 2 while someone watches the character, 30 otherwise
captureEverywymaganeintegerSeconds until the next capture: short while someone watches or an alert fired
commandswymaganeintegerCommands waiting; fetch them from /api/v1/commands
settingsSettingsThe player's module settings, for example minimap: true

GET/api/v1/wait

Wait for a change A long poll: the answer comes the moment someone opens the character on the dashboard, an alert fires or a command is sent, or after `timeout` seconds (at most 25). Keep one open while the client runs, so it switches to the fast pace within a second and costs no requests while nothing happens.

Odpowiedź

PoleTypOpis
wakewymaganebooleanTrue when something changed before the timeout
statusEverywymaganeinteger
captureEverywymaganeinteger
commandswymaganeinteger

POST/api/v1/minimap

Send the minimap file The client's minimap<version>.otmm, as it is on disk, at most 40 MB. It becomes the player's own map for the server. Send it when the file changed and the reply's settings say minimap: true.

Treść zapytania

application/octet-stream

Odpowiedź

any

POST/api/v1/capture

Send a screenshot The game window as JPEG or PNG, at most 2 MB. Send one when /status says so.

Treść zapytania

image/jpeg, image/png

Odpowiedź

any

GET/api/v1/commands

Fetch waiting commands Commands the player sent from the dashboard, oldest first. Fetching marks them as sent.

Odpowiedź

Command[]

POST/api/v1/commands/{cid}/result

Report how a command went

Treść zapytania

PoleTypOpis
okwymaganeboolean
messagestringShown in the command logdo 200 znaków

Odpowiedź

any

Błędy

Dane niezgodne ze schematem dostają status 422 z listą wszystkich problemów:

{
  "error": "invalid payload",
  "problems": [
    {
      "field": "pos.z",
      "message": "Input should be less than or equal to 15"
    }
  ],
  "schema": "/developers/schema"
}

Status 401 oznacza nieznany token albo klienta, któremu gracz odebrał dostęp. Sparuj ponownie, aby dostać nowy.