// 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