From e0834f290b1225bc3090e3d43f18ec1047868cf9 Mon Sep 17 00:00:00 2001 From: mekolat Date: Fri, 1 May 2015 13:44:27 -0400 Subject: revamp the GM lounge --- world/map/conf/magic-quickdebug.sex | 4 + world/map/data/017-9.wlk | Bin 2707 -> 2707 bytes world/map/npc/017-9/_import.txt | 5 +- world/map/npc/017-9/_mobs.txt | 2 +- world/map/npc/017-9/_warps.txt | 10 +- world/map/npc/017-9/announcements.txt | 175 -------------------- world/map/npc/017-9/npcs.txt | 40 +++++ world/map/npc/017-9/secret.txt | 39 ----- world/map/npc/annuals/fathertime.txt | 20 --- world/map/npc/functions/announcements.txt | 193 +++++++++++++++++++++++ world/map/npc/functions/global_event_handler.txt | 3 +- world/map/npc/functions/gm_island.txt | 15 +- world/map/npc/functions/superdebug.txt | 52 ++++++ world/map/npc/scripts.conf | 2 + 14 files changed, 302 insertions(+), 258 deletions(-) delete mode 100644 world/map/npc/017-9/announcements.txt create mode 100644 world/map/npc/017-9/npcs.txt delete mode 100644 world/map/npc/017-9/secret.txt create mode 100644 world/map/npc/functions/superdebug.txt (limited to 'world/map') 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 Binary files a/world/map/data/017-9.wlk and b/world/map/data/017-9.wlk 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 -- cgit v1.2.3-60-g2f50