summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormekolat <mekolat@users.noreply.github.com>2015-05-01 13:44:27 -0400
committermekolat <mekolat@users.noreply.github.com>2015-05-12 07:02:36 -0400
commite0834f290b1225bc3090e3d43f18ec1047868cf9 (patch)
tree50ae683a16c36f6e85a33e69eb8bb283697bf2fc
parentda0f4578b83cc2f9df249dc1bb5bb33d720cb7a8 (diff)
downloadserverdata-e0834f290b1225bc3090e3d43f18ec1047868cf9.tar.gz
serverdata-e0834f290b1225bc3090e3d43f18ec1047868cf9.tar.bz2
serverdata-e0834f290b1225bc3090e3d43f18ec1047868cf9.tar.xz
serverdata-e0834f290b1225bc3090e3d43f18ec1047868cf9.zip
revamp the GM lounge
-rw-r--r--world/map/conf/magic-quickdebug.sex4
-rw-r--r--world/map/data/017-9.wlkbin2707 -> 2707 bytes
-rw-r--r--world/map/npc/017-9/_import.txt5
-rw-r--r--world/map/npc/017-9/_mobs.txt2
-rw-r--r--world/map/npc/017-9/_warps.txt10
-rw-r--r--world/map/npc/017-9/announcements.txt175
-rw-r--r--world/map/npc/017-9/npcs.txt40
-rw-r--r--world/map/npc/017-9/secret.txt39
-rw-r--r--world/map/npc/annuals/fathertime.txt20
-rw-r--r--world/map/npc/functions/announcements.txt193
-rw-r--r--world/map/npc/functions/global_event_handler.txt3
-rw-r--r--world/map/npc/functions/gm_island.txt15
-rw-r--r--world/map/npc/functions/superdebug.txt52
-rw-r--r--world/map/npc/scripts.conf2
14 files changed, 302 insertions, 258 deletions
diff --git a/world/map/conf/magic-quickdebug.sex b/world/map/conf/magic-quickdebug.sex
index c1d4ff72..1b5f582c 100644
--- a/world/map/conf/magic-quickdebug.sex
+++ b/world/map/conf/magic-quickdebug.sex
@@ -4,3 +4,7 @@
(SPELL (NONMAGIC SILENT) debug0 "#debug" ()
(EFFECT
(SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"Debug\";}")))
+
+(SPELL (NONMAGIC SILENT) debug1 "#numa" ()
+ (EFFECT
+ (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"SuperDebug\";}")))
diff --git a/world/map/data/017-9.wlk b/world/map/data/017-9.wlk
index e83f810b..16fcf306 100644
--- a/world/map/data/017-9.wlk
+++ b/world/map/data/017-9.wlk
Binary files differ
diff --git a/world/map/npc/017-9/_import.txt b/world/map/npc/017-9/_import.txt
index 74718fa7..55b1495e 100644
--- a/world/map/npc/017-9/_import.txt
+++ b/world/map/npc/017-9/_import.txt
@@ -1,8 +1,7 @@
-// Map 017-9: Backstage
+// Map 017-9: GM Lounge
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-9
npc: npc/017-9/_mobs.txt
npc: npc/017-9/_warps.txt
-npc: npc/017-9/announcements.txt
npc: npc/017-9/mapflags.txt
-npc: npc/017-9/secret.txt
+npc: npc/017-9/npcs.txt
diff --git a/world/map/npc/017-9/_mobs.txt b/world/map/npc/017-9/_mobs.txt
index 64e6dd7e..9f351648 100644
--- a/world/map/npc/017-9/_mobs.txt
+++ b/world/map/npc/017-9/_mobs.txt
@@ -1,5 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Backstage mobs
+// GM Lounge mobs
diff --git a/world/map/npc/017-9/_warps.txt b/world/map/npc/017-9/_warps.txt
index 439dea5e..5c7d4fe1 100644
--- a/world/map/npc/017-9/_warps.txt
+++ b/world/map/npc/017-9/_warps.txt
@@ -1,8 +1,8 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Backstage warps
+// GM Lounge warps
-017-9,22,20|warp|To Nivalis#017-90|-1,-1,020-1,60,75
+017-9,29,20|warp|To Nivalis#017-90|-1,-1,020-1,60,75
017-9,26,21|warp|To Hurnscald#017-91|-1,-1,009-1,43,45
-017-9,30,20|warp|To Tumlishar#017-92|-1,-1,001-1,55,118
-017-9,26,28|warp|To second warpz#017-93|-1,-1,017-2,26,23
-017-9,31,28|warp|To Crypt#017-94|-1,-1,027-2,118,109
+017-9,21,20|warp|To Tumlishar#017-92|-1,-1,001-1,54,118
+017-9,31,20|warp|To Crypt#017-93|-1,-1,027-2,118,109
+017-9,23,20|warp|To Candor#017-94|-1,-1,029-1,34,95
diff --git a/world/map/npc/017-9/announcements.txt b/world/map/npc/017-9/announcements.txt
deleted file mode 100644
index aa6df918..00000000
--- a/world/map/npc/017-9/announcements.txt
+++ /dev/null
@@ -1,175 +0,0 @@
-//############################################################################
-//# #
-//# GM scheduled broadcasts #
-//# #
-//############################################################################
-
-// $@GMSA_STATUS values:
-// 0: Broadcasts not running
-// 1: Broadcasts running
-// $@GMSA_NAME$: the GM/Admin who created the broadcast, if any
-// $@GMSA_MSG$: the message to be broadcasted
-// $@GMSA_MAX: the number of times the broadcast will be performed, if > 0
-// $@GMSA_TICK: broadcast the message every $@GMSA_TICK hours
-// $@GMSA_CURRENT_TICK: internal counter incremented every hour
-
-017-9,26,24,0|script|Stone Board|145
-{
- if (getgmlevel() < 30)
- goto L_Close;
-
- if ($@GMSA_STATUS)
- goto L_InfoBroadcast;
- goto L_PrepareBroadcast;
-
-L_InfoBroadcast:
- set @next_broadcast_ts, (3600000*($@GMSA_TICK - $@GMSA_CURRENT_TICK) - getnpctimer(0))/1000;
- set @next_broadcast_h, @next_broadcast_ts/3600;
- set @next_broadcast_m, (@next_broadcast_ts - @next_broadcast_h*3600)/60;
-
- mes "[GM Scheduled Broadcasts Board]";
- mes $@GMSA_NAME$ + " scheduled the current message, every " + $@GMSA_TICK + " hour(s):";
- mes $@GMSA_MSG$;
- next;
- if (@next_broadcast_h > 0)
- mes "The next broadcast will happen in " + @next_broadcast_h + " hour(s) and " + @next_broadcast_m + " minute(s).";
- if (@next_broadcast_h == 0)
- mes "The next broadcast will happen in " + @next_broadcast_m + " minute(s).";
- next;
-
- set @next_broadcast_ts, 0;
- set @next_broadcast_h, 0;
- set @next_broadcast_m, 0;
-
- mes "What do you want to do?";
- menu
- "Nothing.", L_Close,
- "Nothing but... what is this?", L_Help,
- "Stop broadcasting.", L_StopBroadcast,
- "Trigger manually the current broadcast.", L_ManualBroadcast;
-
-L_PrepareBroadcast:
- callsub S_Help;
- next;
- mes "There is no broadcast scheduled.";
- mes "Do you want to create one?";
- menu
- "No.", L_Close,
- "Yes.", L_CreateBroadcast;
-
-L_CreateBroadcast:
- mes "[GM Scheduled Broadcasts Board]";
- mes "Enter the message to broadcast:";
- input $@GMSA_MSG$;
- if ($@GMSA_MSG$ == "")
- goto L_InvalidBMsg;
-
- next;
- mes "[GM Scheduled Broadcasts Board]";
- mes "The message will be broadcasted every X hour(s). Enter X:";
- input $@GMSA_TICK;
- if ($@GMSA_TICK < 1)
- goto L_InvalidBroadcastTick;
-
- next;
- mes "[GM Scheduled Broadcasts Board]";
- mes "If you want the message to be broadcasted a limited number of times, enter its value. Keep 0 otherwise:";
- input $@GMSA_MAX;
-
- next;
- mes "[GM Scheduled Broadcasts Board]";
- if ($@GMSA_MAX == 0)
- mes "The current message will be broadcasted every " + $@GMSA_TICK + " hour(s):";
- if ($@GMSA_MAX > 0)
- mes "The current message will be broadcasted every " + $@GMSA_TICK + " hour(s), up to " + $@GMSA_MAX + " times:";
- mes $@GMSA_MSG$;
- next;
- mes "Is this correct?";
- menu
- "No. I'll retry.", L_CreateBroadcast,
- "No", L_Close,
- "Yes. Broadcast this. (the first broadcast will happen in " + $@GMSA_TICK + " hour(s).)", L_StartBroadcast,
- "Yes. Broadcast this, and make an extra broadcast right now.", L_StartBroadcast2;
-
-L_InvalidBMsg:
- mes "[GM Scheduled Broadcasts Board]";
- mes "The message can't be empty. Please retry.";
- goto L_CreateBroadcast;
-
-L_InvalidBroadcastTick:
- mes "[GM Scheduled Broadcasts Board]";
- mes "You obviously can't repeat a message every 0 hours. Please retry.";
- goto L_CreateBroadcast;
-
-L_Help:
- callsub S_Help;
- goto L_Close;
-
-S_Help:
- mes "[GM Scheduled Broadcasts Board]";
- mes "This board allows a GM to schedule a message to be broadcast every X hours.";
- mes "Only one broadcast can be scheduled at a time.";
- return;
-
-S_PerformBroadcast:
- announce $@GMSA_MSG$, 0;
- return;
-
-L_ManualBroadcast:
- callsub S_PerformBroadcast;
- mes "Done.";
- goto L_Close;
-
-L_StopBroadcast:
- callsub S_StopBroadcast;
- mes "Done.";
- goto L_Close;
-
-S_StopBroadcast:
- stopnpctimer;
- setnpctimer 0;
- set $@GMSA_STATUS, 0;
- set $@GMSA_NAME$, "";
- set $@GMSA_MSG$, "";
- set $@GMSA_TICK, 0;
- set $@GMSA_MAX, 0;
- set $@GMSA_CURRENT_TICK, 0;
- return;
-
-L_StartBroadcast2:
- if ($@GMSA_STATUS == 1)
- goto L_Abort;
- callsub S_PerformBroadcast;
- goto L_StartBroadcast;
-
-L_StartBroadcast:
- if ($@GMSA_STATUS == 1)
- goto L_Abort;
- set $@GMSA_STATUS, 1;
- set $@GMSA_NAME$, strcharinfo(0);
- set $@GMSA_CURRENT_TICK, 0;
- initnpctimer;
- mes "Done.";
- goto L_Close;
-
-L_Abort:
- mes "[GM Scheduled Broadcasts Board]";
- mes $@GMSA_NAME$ + " has created a scheduled broadcast just before you, hence yours will abort.";
- goto L_Close;
-
-L_Close:
- close;
-
-OnTimer3600000:
- set $@GMSA_CURRENT_TICK, $@GMSA_CURRENT_TICK + 1;
- setnpctimer 0;
- if ($@GMSA_CURRENT_TICK != $@GMSA_TICK)
- end;
- callsub S_PerformBroadcast;
- set $@GMSA_CURRENT_TICK, 0;
- set $@GMSA_MAX, $@GMSA_MAX - 1;
- if ($@GMSA_MAX != 0)
- end;
- callsub S_StopBroadcast;
- end;
-}
diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt
new file mode 100644
index 00000000..25409829
--- /dev/null
+++ b/world/map/npc/017-9/npcs.txt
@@ -0,0 +1,40 @@
+009-1,42,43,0|script|#SecretDoor|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ warp "017-9", 27, 23;
+ end;
+}
+
+020-1,60,76,0|script|#SecretDoor2|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ warp "017-9", 29, 21;
+ end;
+}
+
+001-1,54,118,0|script|#SecretDoor3|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ warp "017-9", 21, 21;
+ end;
+}
+
+027-2,118,111,0|script|#SecretDoor4|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ warp "017-9", 31, 21;
+ end;
+}
+
+029-1,34,96,0|script|#SecretDoor5|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ warp "017-9", 23, 21;
+ end;
+}
+
+017-9,30,28,0|script|Numa|393
+{
+ callfunc "SuperDebug";
+ end;
+}
diff --git a/world/map/npc/017-9/secret.txt b/world/map/npc/017-9/secret.txt
deleted file mode 100644
index 4c48f0f7..00000000
--- a/world/map/npc/017-9/secret.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-009-1,42,43,0|script|#SecretDoor|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 26, 25;
- goto L_close;
-
-L_close:
- close;
-}
-
-020-1,60,76,0|script|#SecretDoor2|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 22, 22;
- goto L_close;
-
-L_close:
- close;
-}
-
-001-1,54,118,0|script|#SecretDoor3|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 30, 22;
- goto L_close;
-
-L_close:
- close;
-}
-
-027-2,118,111,0|script|#SecretDoor4|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 30, 29;
- goto L_close;
-
-L_close:
- close;
-}
diff --git a/world/map/npc/annuals/fathertime.txt b/world/map/npc/annuals/fathertime.txt
index 852b0025..6d61f446 100644
--- a/world/map/npc/annuals/fathertime.txt
+++ b/world/map/npc/annuals/fathertime.txt
@@ -20,23 +20,3 @@ OnTimer20000:
initnpctimer;
end;
}
-017-9,31,24,0|script|HolidayDebug#1|105
-{
- if(getgmlevel() < 40)
- goto L_End;
-
- menu
- "Xmas.", L_XmasDebug,
- "Halloween.", L_HalloweenDebug;
-
-L_XmasDebug:
- callfunc "XmasDebug";
- goto L_End;
-
-L_HalloweenDebug:
- callfunc "HalloweenDebug";
- goto L_End;
-
-L_End:
- end;
-}
diff --git a/world/map/npc/functions/announcements.txt b/world/map/npc/functions/announcements.txt
index cd4e3b80..35bd3e78 100644
--- a/world/map/npc/functions/announcements.txt
+++ b/world/map/npc/functions/announcements.txt
@@ -1,3 +1,176 @@
+//############################################################################
+//# #
+//# GM scheduled broadcasts #
+//# #
+//############################################################################
+
+// $@GMSA_STATUS values:
+// 0: Broadcasts not running
+// 1: Broadcasts running
+// $@GMSA_NAME$: the GM/Admin who created the broadcast, if any
+// $@GMSA_MSG$: the message to be broadcasted
+// $@GMSA_MAX: the number of times the broadcast will be performed, if > 0
+// $@GMSA_TICK: broadcast the message every $@GMSA_TICK hours
+// $@GMSA_CURRENT_TICK: internal counter incremented every hour
+
+function|script|SBConfig
+{
+ if ($@GMSA_STATUS)
+ goto L_InfoBroadcast;
+ goto L_PrepareBroadcast;
+
+L_InfoBroadcast:
+ set @ms, (3600000*($@GMSA_TICK - $@GMSA_CURRENT_TICK) - getnpctimer(0, "Stone Board"));
+ callfunc "HumanTime";
+
+ mes "[GM Scheduled Broadcasts Board]";
+ mes $@GMSA_NAME$ + " scheduled the current message, every " + $@GMSA_TICK + " hour(s):";
+ mes $@GMSA_MSG$;
+ next;
+ mes "The next broadcast will happen in " + @time$ + ".";
+ next;
+
+ set @next_broadcast_ts, 0;
+ set @next_broadcast_h, 0;
+ set @next_broadcast_m, 0;
+
+ mes "What do you want to do?";
+ menu
+ "Nothing.", L_Close,
+ "Nothing but... what is this?", L_Help,
+ "Stop broadcasting.", L_StopBroadcast,
+ "Trigger manually the current broadcast.", L_ManualBroadcast;
+
+L_PrepareBroadcast:
+ callsub S_Help;
+ next;
+ mes "There is no broadcast scheduled.";
+ mes "Do you want to create one?";
+ menu
+ "No.", L_Close,
+ "Yes.", L_CreateBroadcast;
+
+L_CreateBroadcast:
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "Enter the message to broadcast:";
+ input $@GMSA_MSG$;
+ if ($@GMSA_MSG$ == "")
+ goto L_InvalidBMsg;
+
+ next;
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "The message will be broadcasted every X hour(s). Enter X:";
+ input $@GMSA_TICK;
+ if ($@GMSA_TICK < 1 || $@GMSA_TICK > 24)
+ goto L_InvalidBroadcastTick;
+
+ next;
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "If you want the message to be broadcasted a limited number of times, enter its value. Keep 0 otherwise:";
+ input $@GMSA_MAX;
+
+ next;
+ mes "[GM Scheduled Broadcasts Board]";
+ if ($@GMSA_MAX == 0)
+ mes "The current message will be broadcasted every " + $@GMSA_TICK + " hour(s):";
+ if ($@GMSA_MAX > 0)
+ mes "The current message will be broadcasted every " + $@GMSA_TICK + " hour(s), up to " + $@GMSA_MAX + " times:";
+ mes $@GMSA_MSG$;
+ next;
+ mes "Is this correct?";
+ menu
+ "No. I'll retry.", L_CreateBroadcast,
+ "No", L_Close,
+ "Yes. Broadcast this. (the first broadcast will happen in " + $@GMSA_TICK + " hour(s).)", L_StartBroadcast,
+ "Yes. Broadcast this, and make an extra broadcast right now.", L_StartBroadcast2;
+
+L_InvalidBMsg:
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "The message can't be empty. Please retry.";
+ goto L_CreateBroadcast;
+
+L_InvalidBroadcastTick:
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "You obviously can't repeat a message every 0 hours. Please retry.";
+ goto L_CreateBroadcast;
+
+L_Help:
+ callsub S_Help;
+ goto L_Close;
+
+S_Help:
+ mes "[GM Scheduled Broadcasts Board]";
+ mes "This board allows a GM to schedule a message to be broadcast every X hours.";
+ mes "Only one broadcast can be scheduled at a time.";
+ return;
+
+L_ManualBroadcast:
+ announce $@GMSA_MSG$, 0;
+ mes "Done.";
+ goto L_Close;
+
+L_StopBroadcast:
+ donpcevent "Stone Board::OnStopBroadcast";
+ mes "Done.";
+ goto L_Close;
+
+L_StartBroadcast2:
+ if ($@GMSA_STATUS == 1)
+ goto L_Abort;
+ announce $@GMSA_MSG$, 0;
+ goto L_StartBroadcast;
+
+L_StartBroadcast:
+ if ($@GMSA_STATUS == 1)
+ goto L_Abort;
+ set $@GMSA_STATUS, 1;
+ set $@GMSA_NAME$, strcharinfo(0);
+ set $@GMSA_CURRENT_TICK, 0;
+ initnpctimer "Stone Board";
+ mes "Done.";
+ goto L_Close;
+
+L_Abort:
+ mes "[GM Scheduled Broadcasts Board]";
+ mes $@GMSA_NAME$ + " has created a scheduled broadcast just before you, hence yours will abort.";
+ goto L_Close;
+
+L_Close:
+ return;
+}
+
+
+017-9,26,28,0|script|Stone Board|32767
+{
+ end;
+
+OnStopBroadcast:
+ goto L_Stop;
+
+L_Stop:
+ stopnpctimer "Stone Board";
+ setnpctimer 0, "Stone Board";
+ set $@GMSA_STATUS, 0;
+ set $@GMSA_NAME$, "";
+ set $@GMSA_MSG$, "";
+ set $@GMSA_TICK, 0;
+ set $@GMSA_MAX, 0;
+ set $@GMSA_CURRENT_TICK, 0;
+ end;
+
+OnTimer3600000:
+ set $@GMSA_CURRENT_TICK, $@GMSA_CURRENT_TICK + 1;
+ setnpctimer 0, "Stone Board";
+ if ($@GMSA_CURRENT_TICK != $@GMSA_TICK)
+ end;
+ announce $@GMSA_MSG$, 0;
+ set $@GMSA_CURRENT_TICK, 0;
+ set $@GMSA_MAX, $@GMSA_MAX - 1;
+ if ($@GMSA_MAX != 0)
+ end;
+ goto L_Stop;
+}
+
function|script|DisplayMOTD
{
if($@MOTD_Disabled || $@MOTD$[0] == "") goto L_Return;
@@ -12,3 +185,23 @@ L_MOTD:
L_Return:
return;
}
+
+function|script|getBroadcast
+{
+ if (getmap() == "029-2" && getx() == 22 && gety() == 24) goto L_NewPlayer;
+ goto L_ReturningPlayer;
+
+L_NewPlayer:
+ // todo: show game rules on login (in another PR)
+ // ... does not look like it work.. the `menu`
+ // builtin behaves weirdly when on login
+ goto L_Return;
+
+L_ReturningPlayer:
+ if ($@GMSA_STATUS < 1) goto L_Return;
+ announce $@GMSA_MSG$, 3;
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt
index 04f89159..7d380b0c 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -12,6 +12,7 @@ OnPCLoginEvent:
callfunc "getHeadStyles"; // converts class, color and hair
callfunc "ClearVariables"; // removes / converts old variables
callfunc "DisplayMOTD"; // send the motd to the client, if enabled
+ callfunc "getBroadcast"; // get the scheduled broadcast, if any
// add more here
set @login_event, 2;
end;
@@ -29,7 +30,7 @@ OnPCDieEvent:
callfunc "fightclub_event_die"; // this is used by the 1v1 arena
end;
-OnInit: //fixme: change to OnInterIfInit
+OnInit:
callfunc "ClearGlobalVars";
callfunc "MOTD"; // set the MOTD array
end;
diff --git a/world/map/npc/functions/gm_island.txt b/world/map/npc/functions/gm_island.txt
index 94c745a7..89c0790a 100644
--- a/world/map/npc/functions/gm_island.txt
+++ b/world/map/npc/functions/gm_island.txt
@@ -16,11 +16,6 @@ function|script|GmWarp
}
function|script|GmDebug
{
- if (getgmlevel() < 60)
- goto L_Return;
- goto L_Main;
-
-L_Main:
mes "[Gm Debug]";
mes "What do you want to do?";
menu
@@ -31,22 +26,14 @@ L_GmStart:
enablenpc "Gm Event#1";
enablenpc "Gm Event#2";
enablenpc "Gm Event#3";
- goto L_Return;
+ return;
L_GmStop:
disablenpc "Gm Event#1";
disablenpc "Gm Event#2";
disablenpc "Gm Event#3";
- goto L_Return;
-
-L_Return:
return;
}
-017-9,32,21,0|script|Gm Event Debug|368
-{
- callfunc "GmDebug";
- close;
-}
001-1,49,68,0|script|Gm Event#1|368,0,0
{
callfunc "GmWarp";
diff --git a/world/map/npc/functions/superdebug.txt b/world/map/npc/functions/superdebug.txt
new file mode 100644
index 00000000..8bb9350a
--- /dev/null
+++ b/world/map/npc/functions/superdebug.txt
@@ -0,0 +1,52 @@
+// all-in-one debug
+// author: meko
+
+function|script|SuperDebug
+{
+ goto L_Main;
+
+L_Main:
+ mes "[Numa]";
+ mes "How may I help you?";
+ next;
+ menu
+ "Announcements", L_StoneBoard,
+ "Holiday debug", L_Holiday,
+ "Event debug", L_Event;
+ // todo: generic npcs (in a future PR)
+ // todo: map list (in a future PR)
+ // todo: quest log debug (in a future PR)
+
+L_Holiday:
+ if(getgmlevel() < 40) goto L_GM;
+ mes "[Numa]";
+ mes "What holiday do you want to debug?";
+ next;
+ menu
+ "Xmas.", L_XmasDebug,
+ "Halloween.", L_HalloweenDebug;
+
+L_XmasDebug:
+ callfunc "XmasDebug";
+ end;
+
+L_HalloweenDebug:
+ callfunc "HalloweenDebug";
+ end;
+
+L_Event:
+ if(getgmlevel() < 60) goto L_GM;
+ callfunc "GmDebug";
+ close;
+
+L_StoneBoard:
+ if (getgmlevel() < 30) goto L_GM;
+ callfunc "SBConfig";
+ close;
+
+L_GM:
+ mes "[Numa]";
+ mes "I'm awfully sorry.";
+ mes "You do not have the required GM level to perform this action.";
+ close;
+}
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 39ad7d92..1830a807 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -19,6 +19,8 @@ npc: npc/functions/time.txt
npc: npc/functions/water_bottle.txt
npc: npc/functions/evil_obelisk.txt
npc: npc/functions/debug.txt
+npc: npc/functions/superdebug.txt
+npc: npc/functions/announcements.txt
npc: npc/functions/lockpicking.txt
npc: npc/functions/default_npc_checks.txt
npc: npc/functions/undead_debug.txt