Integracja z pluginem MajestatTopCore: publiczne hooki API_* dla innych pluginów Oxide/Carbon oraz endpointy HTTP wbudowanego panelu WWW.
Publiczne API dla pluginów#
Publiczne API (dla innych pluginów, przez plugins.Find("MajestatTopCore").Call(...)):
| Hook | Zwraca | Opis |
|---|---|---|
API_RegisterTab(Dictionary<string,object> def) |
bool | Własna zakładka rankingu (id, label, sort, fame_sort, order, columns) |
API_UnregisterTab(string tabId) |
— | Usunięcie zakładki |
API_RegisterXpSource(string statKey, double xp) |
— | Źródło XP dla API_AddStat(..., addXP: true) |
API_AddStat(steamId, statKey, amount, addToFame, addXP) |
— | Dopisanie statystyki (i XP wg progu) |
API_GetStat(steamId, statKey, fame) |
double | Jedna statystyka |
API_GetAllStats(steamId, fame) |
Dictionary<string,double> | Wszystkie statystyki (pusty słownik dla nieznanego gracza) |
API_GetLeaderboard(tabId, fame, limit) |
List<Dictionary> | Ranking zakładki |
API_GetTabs() / API_GetModules() |
List<Dictionary> | Zakładki / zarejestrowane moduły |
API_RegisterModule(Dictionary) / API_UnregisterModule(name) |
bool / — | Wpis w stopce panelu WWW |
API_GetPlayerName(steamId) |
string | Ostatni znany nick |
API_GetCombatMeta(steamId) |
Dictionary | Ostatni kill / ostatnia śmierć |
API_GetOnlinePlayers() |
List<Dictionary> | Gracze online z XP, killami, czasem sesji |
API_GetServerInfo() / API_GetXpInfo() |
Dictionary | Info o serwerze / efektywne stawki XP |
API_GetMapData(steamId, isAdmin) / API_GetMonuments() / API_GetMapInfo() / API_GetVendingMachines() |
… | Dane mapy |
API_GetChatHistory(limit, channel) |
List<Dictionary> | Historia czatu |
API_SendWebChat(nick, text, channel, steamId, isAdmin) |
— | Wiadomość do gry w imieniu WWW |
API_GetVoteData() / API_CastVoteFor(steamId, index) / API_IsVoteActive() / API_OpenPanel(player) |
… | Głosowanie |
API_OpenInfoPanel(player, tab, dismiss) / API_CloseInfoPanel(player) / API_IsInfoOpen(player) / API_GetInfoData() |
… | Panel Info |
API_GetPendingUpdates() / API_ReportUpdateResult(name, latest, url) |
… | Rejestr dostępnych aktualizacji (stopka WWW) |
API_GetLogLevel() / API_IsAutoReloading() |
int / bool | Poziom logów / czy trwa start pluginu |
Hooki wysyłane: OnMajestatChatMessage(steamId, nick, text, channel, source, isAdmin, timestamp), OnMajestatMapUpdate(object[] entities) (tylko przy włączonym WEB), OnMajestatInfoClosed(BasePlayer).
Panel WWW — endpointy HTTP#
Moduł WEB uruchamia HttpListener na porcie WEB - HTTP Port (domyślnie 28020), gdy WEB - Mode = http lub both. Każde żądanie obsługuje osobny wątek z puli; strumienie SSE mają własne wątki (limit 50 klientów czatu).
Strony HTML
| Ścieżka | Opis |
|---|---|
/ /index |
Strona główna: rankingi, XP INFO, Game Info, czat, mapa, głosowanie |
/player/<steamId> |
Profil gracza (sezon + Fame). 404 dla nieznanego lub błędnego SteamID |
/avatar/<steamId> |
Przekierowanie 302 na avatar Steam (cache w pamięci) |
Logowanie Steam
| Ścieżka | Opis |
|---|---|
/auth/steam |
Start logowania OpenID (?ret= = strona powrotu) |
/auth/steam/callback |
Powrót ze Steam; tworzy sesję (cookie session + ?session_token=) |
/auth/logout |
Wylogowanie |
/api/auth/me |
Dane zalogowanego: steamId, nick, isAdmin, teamId |
Token sesji można podać nagłówkiem X-Session-Token, cookie session albo parametrem ?token= (dla proxy i Androida).
Dane (JSON)
| Ścieżka | Metoda | Opis |
|---|---|---|
/api/server |
GET | Info o serwerze (m.in. friendlyFirePvp, friendlyFirePve, friendlyFireNpc[], friendlyFireSource) |
/api/tabs |
GET | Lista zakładek rankingu |
/api/top/<tab> |
GET | Ranking sezonowy zakładki (pvp, gather, loot, build) |
/api/top/<tab>/fame |
GET | Ranking Fame zakładki |
/api/all |
GET | Serwer + wszystkie rankingi (sezon i Fame) |
/api/player/<steamId> |
GET | Statystyki gracza (sezon i Fame). 404 dla nieznanego gracza |
/api/xpinfo |
GET | Tabela XP (pole source = local/master, wiersze FF jako kara ujemna, obiekt friendlyFire, progi amounts) |
/api/gameinfo |
GET | Treść zakładek panelu Info |
Czat i konsola
| Ścieżka | Metoda | Opis |
|---|---|---|
/api/chat/messages |
GET | Historia czatu (?channel=global|team|clan|friends; team/clan tylko dla zalogowanych, filtrowane po drużynie) |
/api/chat/channels |
GET | Dostępne kanały dla zalogowanego (inTeam, clan, friends) |
/api/chat/team-members |
GET | Członkowie drużyny zalogowanego (online/offline, lider) |
/api/chat/send |
POST | Wysłanie wiadomości z WWW do gry ({text, channel, nick?}), limit WEB - Chat Rate limit |
/api/chat/stream |
GET (SSE) | Czat na żywo |
/api/console/logs |
GET | Logi konsoli — tylko admin |
/api/console/stream |
GET (SSE) | Konsola na żywo — tylko admin |
Mapa
| Ścieżka | Metoda | Opis |
|---|---|---|
/api/map/img |
GET | Obraz mapy (PNG z rendermap) |
/api/map/image |
GET | {has_image, page_url} — czy obraz jest gotowy + link RustMaps |
/api/map/info |
GET | worldSize, seed, name, seaMargin |
/api/map/monuments |
GET | Monumenty (name, x, z, size) |
/api/map/data |
GET | Encje na mapie. Bez sesji: nic; zalogowany: eventy + siebie + drużynę/klan/znajomych; admin: wszystkich |
/api/map/vending |
GET | Aktywne sklepy z ofertami (name, x, z, items[{item, amount, cost, currency}]) |
/api/map/stream |
GET (SSE) | Pozycje na żywo |
Głosowanie
| Ścieżka | Metoda | Opis |
|---|---|---|
/api/vote |
GET | Stan głosowania (mapy i głosy) |
/api/vote/cast |
POST | Oddanie głosu {index} — wymaga sesji Steam; podlega VOTE - Who Can Vote |
/api/vote/img?index=N |
GET | Bitmapa mapy zapisana na dysku serwera (nie wygasa jak link RustMaps) |
Autoryzacja: gdy WEB - API Key nie jest pusty, każde żądanie musi mieć nagłówek X-Api-Key. Tryb czatu: WEB - Chat Auth Mode = steam / played / readonly / open. Zalecamy ustawić klucz, jeśli port panelu jest dostępny z internetu — bez niego dane rankingów i graczy są dostępne dla każdego.