summaryrefslogtreecommitdiff
path: root/npc/functions/maze.txt
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-09-24 03:58:27 -0300
committerJesusaves <cpntb1@ymail.com>2021-09-24 03:58:27 -0300
commit3079464676d63e74c5c5caab59dd50fbfe00edaa (patch)
treebbcbadfb9cd7cbaf6a6473d6c8d9bc6d9683beed /npc/functions/maze.txt
parent7f8db3e37c31e185e2aef18fee193febc7a8dc78 (diff)
downloadserverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.gz
serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.bz2
serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.xz
serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.zip
Domain 030
Diffstat (limited to 'npc/functions/maze.txt')
-rw-r--r--npc/functions/maze.txt97
1 files changed, 97 insertions, 0 deletions
diff --git a/npc/functions/maze.txt b/npc/functions/maze.txt
new file mode 100644
index 000000000..8fd9c438e
--- /dev/null
+++ b/npc/functions/maze.txt
@@ -0,0 +1,97 @@
+// TMW2 Scripts
+// Author:
+// Jesusalva
+// Description:
+// Controls map domain 030 and provide helpers. See constants;
+// Player Variables:
+// MAZE_ID → ID of the maze being used
+// MAZE_MAP$ → Map being used for the maze
+// MAZE_INST → Instance ID of the Maze
+
+/////////////////////////////////////////////////////////////////////////////////
+// CreateMaze(scope=IOT_CHAR)
+// Creates the maze instances so they can be configured
+// But does not initializes anything
+function script CreateMaze {
+ .@scope = getarg(0, IOT_CHAR);
+ // Pseudo-random maze ID
+ // (It is not random at all; But two mazes won't repeat)
+ MAZE_ID += 1;
+ if (MAZE_ID > MAZE_MAX)
+ MAZE_ID = MAZE_MIN;
+ if (MAZE_ID < MAZE_MIN)
+ MAZE_ID = MAZE_MIN;
+
+ .@MAZEMP$=sprintf("030-%02d", MAZE_ID);
+ MAZE_MAP$=sprintf("mz%02d@"+getcharid(0), MAZE_ID);
+
+ // Maze is not yet started
+ if (.@scope == IOT_CHAR) {
+ MAZE_INST = instance_create("Maze "+MAZE_ID+" "+getcharid(0), getcharid(3), IOT_CHAR);
+ // Failed
+ if (MAZE_INST < 0) {
+ consolebug("Instance \"%s\" already exists! (Error %d)", "Maze "+MAZE_ID+" "+getcharid(0), MAZE_INST);
+ return 0;
+ }
+ // Attach map
+ instance_attachmap(.@MAZEMP$, .@inst, false, MAZE_MAP$);
+ } else {
+ consolebug("Scope %d not yet supported by maze system", .@scope);
+ return 0;
+ }
+ return MAZE_ID;
+}
+
+/////////////////////////////////////////////////////////////////////////////////
+// InitMaze(duration=2 hours)
+// Puts maze to work and send player there.
+// Exit must have been configured prior to the maze.
+function script InitMaze {
+ .@t = getarg(0, 7200);
+ instance_set_timeout(.@t, .@t, MAZE_INST);
+ instance_init(MAZE_INST);
+
+ // Find random, warpable coordinates
+ .@e=0; .@x=0; .@y=0;
+ .@mx=getmapinfo(MAPINFO_SIZE_X, MAZE_MAP$)-20;
+ .@my=getmapinfo(MAPINFO_SIZE_Y, MAZE_MAP$)-20;
+ do {
+ .@x = rand2(20, .@mx);
+ .@y = rand2(20, .@my);
+ .@e += 1;
+ if (.@e > 30) {
+ consolebug("Too many failures at Maze \"%s\"! Trying anyway!", MAZE_MAP$);
+ break;
+ }
+ } while (!checknpccell(MAZE_MAP$, .@x, .@y, cell_chkpass));
+
+ warp MAZE_MAP$, .@x, .@y;
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////////
+// RenewMaze(duration=2 hours)
+// Renews the map expiration time
+function script RenewMaze {
+ .@t = getarg(0, 7200);
+ instance_set_timeout(.@t, .@t, MAZE_INST);
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////////
+// Configure maze maps as MMO zones
+030-01 mapflag zone MMO
+030-02 mapflag zone MMO
+030-03 mapflag zone MMO
+030-04 mapflag zone MMO
+030-05 mapflag zone MMO
+030-06 mapflag zone MMO
+030-07 mapflag zone MMO
+030-08 mapflag zone MMO
+030-09 mapflag zone MMO
+030-10 mapflag zone MMO
+030-11 mapflag zone MMO
+030-12 mapflag zone MMO
+030-13 mapflag zone MMO
+030-14 mapflag zone MMO
+