From 05e6ffa722923ad7b587273e6326dcd644900915 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Tue, 25 Oct 2022 22:21:14 -0300 Subject: Take advantage of a TMWA bug and use it to export data. This allows TMW Legacy to make near full use of the Mirror Lake Protocol. --- world/map/db/const.txt | 6 ++++ world/map/npc/functions/vault.txt | 61 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/world/map/db/const.txt b/world/map/db/const.txt index f4625294..54df1324 100644 --- a/world/map/db/const.txt +++ b/world/map/db/const.txt @@ -499,3 +499,9 @@ SMSG_LEGAL 6 SMSG_MOTD 7 SMSG_AUTOMATIC 8 SMSG_EVENT 9 + +// API Export Protocols +API_VAULT 607 +API_SENDMAIL 501 +//API_DISCORD 301 +//API_PINCODE 302 diff --git a/world/map/npc/functions/vault.txt b/world/map/npc/functions/vault.txt index 25e6d263..1c08dba1 100644 --- a/world/map/npc/functions/vault.txt +++ b/world/map/npc/functions/vault.txt @@ -39,6 +39,8 @@ S_Preset: set #X21, (#X21 & ~(BYTE_3_MASK)) | (##PRESET << BYTE_3_SHIFT); // Each preset is 5 levels (Preset 1 = Lv 5, Preset 10 = Lv 50, Max Preset 20 - hard limit is 127) + // TODO: Give more ammo, iron powder, sulphur powder, etc. instead of equips + // Give also some bug legs and maggot slime if applicable? /* Handle weapons */ if (##PRESET >= 1 && @last_preset < 1) getitem "SharpKnife",1; @@ -109,3 +111,62 @@ S_Preset: return; } + +// Remember: ##VAULT_EXP, ##VAULT_GOTO, ##VAULT_MLTO for Mirror Lake Protocol +// However, without kick(7), it is not really worth anything +// Remember: Quote symbols are illegal, simple or double, except for parameter +// To reset the database: +// cleararray $EXPORT_DATA$[0], "", 254; +// set $EXPORT_MAX_ID, 0; + +// Schemas: +//API_VAULT: "UID", ##VAULT, "GID", getcharid(3) +//API_SENDMAIL: "UID": ##VAULT, "MSG": "message", "TITLE": "subject line" +// +// Using the API_EXPORT hack for TMWA: +// +// set $@API_PROTOCOL, API_SENDMAIL; +// set $@API_DATA$, "'UID': 0, 'TITLE': 'About TMWA', 'MSG': 'I hate it!'"; +// callfunc "FlushAPI"; +// +// (The curly brace is added to DATA on its own) +function|script|FlushAPI +{ + // Function called improperly + // DATA cannot be null or the array order will crash + if ($@API_PROTO <= 0) goto L_Dumb; + if ($@API_DATA$ == "") goto L_Dumb; + + // Save it to mapreg + // The script will strip "##" + // and convert the part after to a JSON dict + set $EXPORT_DATA$[$EXPORT_MAX_ID], $@API_PROTO + "##" + $@API_DATA$; + set $@API_PROTO, ""; + set $@API_DATA$, ""; + + // Update TMWA tracker + set $EXPORT_MAX_ID, $EXPORT_MAX_ID + 1; + + // Keep in mind an array can only go up to 255 + // Trying to go past that, causes a SIGSEGV and map server dies + // So we periodically truncate the table when it's full + if ($EXPORT_MAX_ID > 240) goto L_Flush; + if ($EXPORT_MAX_ID == 120) goto L_Flush2; + return; + +L_Dumb: + debugmes "FlushAPI called without enough arguments"; + debugmes " - $@API_PROTO, API_* constant"; + debugmes " - $@API_DATA$, json dict without curly braces"; + return; + +L_Flush: + cleararray $EXPORT_DATA$[0], "", 220; + set $EXPORT_MAX_ID, 0; + return; + +L_Flush2: + cleararray $EXPORT_DATA$[220], "", 25; + return; +} + -- cgit v1.2.3-60-g2f50