summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoraK-FDF <horak-fdf@web.de>2023-11-11 18:07:19 +0100
committerHoraK-FDF <horak-fdf@web.de>2023-11-11 18:07:19 +0100
commit46b59594691cab563d8a01eeb8d729cd8a959857 (patch)
tree293f363cb71b65f98d3ad01bf1e0969c9ee17b17
parent0c2c5fad59c0ebdc6cbe5bedc051fd4ea593dfe2 (diff)
downloadserverdata-46b59594691cab563d8a01eeb8d729cd8a959857.tar.gz
serverdata-46b59594691cab563d8a01eeb8d729cd8a959857.tar.bz2
serverdata-46b59594691cab563d8a01eeb8d729cd8a959857.tar.xz
serverdata-46b59594691cab563d8a01eeb8d729cd8a959857.zip
fluffy event vault stuff
-rw-r--r--world/map/npc/functions/global_event_handler.txt6
-rw-r--r--world/map/npc/functions/vault.txt230
2 files changed, 233 insertions, 3 deletions
diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt
index eba97ab2..91879525 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -17,8 +17,8 @@ OnPCLoginEvent:
callfunc "MaybeGiveBirthday";
callfunc "MiriamExpire"; // force the speed skill quest to expire
callfunc "ConvertChristmas21"; // Christmas 2021
- callfunc "VaultLogin"; // Mirror Lake Protocol biddings
- callfunc "VaultLogout"; // Clean some stuff, to be safe
+ //callfunc "VaultLogin"; // Mirror Lake Protocol biddings
+ //callfunc "VaultLogout"; // Clean some stuff, to be safe
// add more here
set @login_event, 2;
end;
@@ -44,7 +44,7 @@ OnPCDieEvent:
end;
OnPCLogoutEvent:
- callfunc "VaultLogout";
+ //callfunc "VaultLogout";
end;
OnInit:
diff --git a/world/map/npc/functions/vault.txt b/world/map/npc/functions/vault.txt
new file mode 100644
index 00000000..f2c51387
--- /dev/null
+++ b/world/map/npc/functions/vault.txt
@@ -0,0 +1,230 @@
+// Mirror Lake Protocol and The Mana World Vault utilities
+// TMWA is hopelessy broken, so most helpers simply don't exist.
+//
+// Author: jesusalva
+
+function|script|VaultLogin
+{
+ if (##VAULT < 1) goto L_Return;
+
+ // Imports & Vitals
+ callsub S_Exp;
+ callsub S_Gold;
+ callsub S_Preset;
+
+ // Quest Handlers
+ callsub S_Quest_CR1;
+
+ // Mirror lake
+ callsub S_MirrorLake;
+
+ // Clean up
+ set @last_preset, 0;
+ return; // go back to global handler
+
+S_Return: // this is to end execution of a sub
+ return;
+
+L_Return:
+ return;
+
+S_Exp:
+ if (##ADD_LVL < 1) goto S_Return;
+ set #EXP_CREDIT, #EXP_CREDIT + ##ADD_LVL;
+ set ##ADD_LVL, 0;
+ return;
+
+S_Gold:
+ if (##ADD_GP < 1) goto S_Return;
+ set Zeny, Zeny + ##ADD_GP;
+ set ##ADD_GP, 0;
+ return;
+
+S_Preset:
+ if (##PRESET < 1) goto S_Return;
+ set @last_preset, (#X21 & BYTE_3_MASK) >> BYTE_3_SHIFT;
+ 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;
+ if (##PRESET >= 2 && @last_preset < 2)
+ getitem "SlingBullet",500;
+ if (##PRESET >= 3 && @last_preset < 3)
+ getitem "Bow",1;
+ if (##PRESET >= 3 && @last_preset < 3)
+ getitem "Arrow",500;
+ if (##PRESET >= 4 && @last_preset < 4)
+ getitem "Arrow",500;
+ if (##PRESET >= 5 && @last_preset < 5)
+ getitem "JeansShorts",1;
+ if (##PRESET >= 6 && @last_preset < 6)
+ getitem "IronArrow",500;
+ if (##PRESET >= 7 && @last_preset < 7)
+ getitem "IronArrow",500;
+ if (##PRESET >= 8 && @last_preset < 8)
+ getitem "IronPowder", 150;
+ if (##PRESET >= 9 && @last_preset < 9)
+ getitem "BoneArrows",150;
+ if (##PRESET >= 10 && @last_preset < 10)
+ getitem "BoneArrows",150;
+ if (##PRESET >= 11 && @last_preset < 11)
+ getitem "SilverArrow",200;
+ if (##PRESET >= 12 && @last_preset < 12)
+ getitem "ThornArrow",100;
+ if (##PRESET >= 13 && @last_preset < 13)
+ getitem "SilverArrow",200;
+ if (##PRESET >= 14 && @last_preset < 14)
+ getitem "TerraniteArrow",100;
+ if (##PRESET >= 15 && @last_preset < 15)
+ getitem "ArmorBreaker",100;
+ if (##PRESET >= 16 && @last_preset < 16)
+ getitem "ThornArrow",100;
+ if (##PRESET >= 17 && @last_preset < 17)
+ getitem "TerraniteArrow",100;
+ if (##PRESET >= 18 && @last_preset < 18)
+ getitem "IronPowder", 150;
+ if (##PRESET >= 19 && @last_preset < 19)
+ getitem "TerraniteArrow",250;
+ */
+ set ##PRESET, 0;
+ return;
+
+////////////////////////////////
+S_Quest_CR1:
+ if (!(##01_CRQUEST & 1)) goto S_Return;
+ if (##03_TMWWORLD & MLP_CR_DEBUT) goto S_Return;
+ // Check if you can receive the rewards
+ getinventorylist;
+ if (@inventorylist_count >= 96) goto S_Return;
+ // Mark quest as done and issue rewards
+ set BOSS_POINTS, BOSS_POINTS + 871;
+ set ##03_TMWWORLD, ##03_TMWWORLD | MLP_CR_DEBUT;
+ getitem WhiteCake, 1;
+ getitem ChocolateCake, 1;
+ getitem OrangeCake, 1;
+ getitem AppleCake, 1;
+ message strcharinfo(0), "Mirror Lake : You gained 871 boss points.";
+ return;
+
+////////////////////////////////
+S_MirrorLake:
+ // Wipe any existing TMWA internal mirror lake information
+ set ##VAULT_GOTO, 0;
+ set ##VAULT_MLTO, 0;
+ // TODO: Put the Mirror Lake Portal into the shipwreck? (see portal #2)
+ set .@gto, call("get_byte", ##00_INFO, 3);
+ set .@mlp, call("get_nibble", ##00_INFO, 5);
+ // If we're moving from Mirror Lake to TMW
+ if (.@gto != WORLD_ID) goto S_MirrorFix;
+ debugmes "Vault User "+##VAULT+" moved to lake "+.@mlp;
+ if (.@mlp == 1) warp "013-2", 37, 23; // Hurnscald Mirror Lake
+ if (.@mlp == 2) warp "002-1", 30, 58; // Tulimshar Mirror Lake
+ // Unset the target lake/world
+ void call("set_byte", ##00_INFO, 3, 0);
+ void call("set_nibble", ##00_INFO, 5, 0);
+ return;
+
+// We've moved to the wrong world, so preserve it.
+S_MirrorFix:
+ set ##VAULT_GOTO, call("get_byte", ##00_INFO, 3);
+ set ##VAULT_MLTO, call("get_nibble", ##00_INFO, 5);
+ return;
+}
+
+
+// Remember: ##VAULT_EXP, ##VAULT_GOTO, ##VAULT_MLTO for Mirror Lake Protocol
+// However, without kick(7), it is not really worth anything - so I presumed 7
+// 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;
+}
+
+function|script|VaultLogout
+{
+ if (##VAULT < 1) goto L_Return;
+ // TODO: Or #VAULT ? Which of the two is set?
+ set $@API_PROTOCOL, API_VAULT;
+ set $@API_DATA$, "'UID': "+##VAULT+", 'GID': "+getcharid(3);
+ callfunc "FlushAPI";
+
+ return;
+
+L_Return:
+ return;
+}
+
+// MirrorLakeSendTo(World)
+function|script|MirrorLakeSendTo
+{
+ if (##VAULT < 1) goto L_Return;
+ set ##VAULT_GOTO, getarg(0);
+ // This is TMWA - so it'll always use Lake #0 for performance reasons
+ set $@API_PROTOCOL, API_VAULT;
+ set $@API_DATA$, "'UID': "+##VAULT+", 'GID': "+getcharid(3);
+ callfunc "FlushAPI";
+ message strcharinfo(0), "Darkness fills your vision...";
+ // TODO: Misc effects
+ // TODO: Sleep for 10~15 seconds (for mapreg)
+ // TODO: Disconnect user
+ return;
+
+L_Return:
+ return;
+}
+