diff options
author | Jesusaves <cpntb1@ymail.com> | 2021-09-24 03:58:27 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2021-09-24 03:58:27 -0300 |
commit | 3079464676d63e74c5c5caab59dd50fbfe00edaa (patch) | |
tree | bbcbadfb9cd7cbaf6a6473d6c8d9bc6d9683beed /npc/functions | |
parent | 7f8db3e37c31e185e2aef18fee193febc7a8dc78 (diff) | |
download | serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.gz serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.bz2 serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.tar.xz serverdata-3079464676d63e74c5c5caab59dd50fbfe00edaa.zip |
Domain 030
Diffstat (limited to 'npc/functions')
-rw-r--r-- | npc/functions/maze.txt | 97 |
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 + |