Skip to content

Commit b8f6410

Browse files
committed
Fixes local map vote transitions not working
+ improves logic for map transitions
1 parent 5ccf8ce commit b8f6410

File tree

5 files changed

+159
-180
lines changed

5 files changed

+159
-180
lines changed

scripts/beta_date.script

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
const BETA_TIMESTAMP "RELEASE: Sun 11/20/2022 21:19:47.72"
2+
const BETA_TIMESTAMP "RELEASE: Mon 11/21/2022 20:05:37.46"
33
}

scripts/game_master.script

Lines changed: 8 additions & 166 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include [casual] $currentmap_game_master
3838

3939
//Game master modules
40+
#include game_master/map_transitions
4041
#include game_master/vote_generic
4142

4243
{ game_spawn
@@ -104,13 +105,6 @@
104105
callevent 0.1 setup_gm
105106
callevent 1.0 gm_setup_weather
106107
callevent 60.0 time_sync_check
107-
108-
//Crash file name configuration
109-
setvarg G_CRASHCFG game.cvar.ms_crashcfg
110-
if ( G_CRASHCFG !contains '.cfg' )
111-
{
112-
stradd G_CRASHCFG ".cfg"
113-
}
114108
}
115109

116110
{ [server] time_sync_check
@@ -150,7 +144,6 @@
150144
dodamage PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 PARAM6 PARAM7
151145
}
152146

153-
154147
//Spawn gold bag post-mortem -
155148
{ [server] gold_spew //PARAM1=gold_per_bag PARAM2=bags_player PARAM3=dist_from_mon PARAM4=min#bags PARAM5 max#bags
156149

@@ -474,69 +467,6 @@
474467
}
475468
}
476469

477-
{ gm_manual_map_change //[map] [destspawn]
478-
479-
//redundancy, but maybe a bit late
480-
setvard GM_DISABLE_TRANSITIONS 1 //tells msarea_transitions to disable code side, so they don't change spawns
481-
if ( PARAM2 !startswith PARAM ) setvard GM_DEST_TRANS PARAM2
482-
if ( GM_DEST_TRANS isnot 'GM_DEST_TRANS' ) callexternal players ext_setspawn GM_DEST_TRANS
483-
//saveallnow
484-
485-
local L_MAP_NAME MAP_NAME
486-
if ( PARAM1 isnot 'PARAM1' ) local L_MAP_NAME PARAM1
487-
messageall green Traveling to L_MAP_NAME
488-
setvard F_MAP_NAME L_MAP_NAME
489-
490-
erasefile G_CRASHCFG
491-
local OUT_LINE "map "
492-
local COMMENT "/"
493-
stradd COMMENT "/"
494-
strconc OUT_LINE F_MAP_NAME COMMENT written from MSC
495-
writeline G_CRASHCFG OUT_LINE
496-
local SRV_COMMAND "echo Changelevel: "
497-
stradd SRV_COMMAND F_MAP_NAME
498-
servercmd SRV_COMMAND
499-
500-
setvarg G_WEATHER_LOCK clear
501-
setvarg global.map.weather "clear;clear;clear"
502-
setvarg G_OVERRIDE_WEATHER_CODE "clear;clear;clear"
503-
setvarg G_CUR_WEATHER "clear"
504-
setvarg G_IDLE_MUSIC none
505-
setvarg G_IDLE_MUSIC_LENGTH 0
506-
setvarg G_COMBAT_MUSIC none
507-
setvarg G_COMBAT_MUSIC_LENGTH 0
508-
setvarg G_MAP_ADDPARAMS 0
509-
510-
if ( G_SERVER_LOCKED )
511-
{
512-
local SV_CMD "sv_password "
513-
stradd SV_CMD $quote()
514-
stradd SV_CMD $quote()
515-
servercmd SV_CMD
516-
}
517-
518-
if ( game.players > 0 )
519-
{
520-
callexternal players ext_changelevel_prep
521-
}
522-
523-
//this used to be a 0.1 delay
524-
//but I wanted to give more time for the ext_changelevel_prep to set the player's wait delays
525-
526-
setvard GM_CHANGELEVEL 1
527-
528-
callevent 1.0 gm_manual_map_change2
529-
}
530-
531-
{ gm_manual_map_change2
532-
callevent 2.0 gm_manual_map_change3
533-
}
534-
535-
{ gm_manual_map_change3
536-
setvard VOTE_IN_PROGRESS 0
537-
changelevel F_MAP_NAME
538-
}
539-
540470
{ gm_find_highest
541471

542472
local CUR_VOTE_IDX game.script.iteration
@@ -566,57 +496,6 @@
566496
//infomsg all "DEBUG ALERT" "MSAREA_MONSTERSPAWN REMOVED"
567497
}
568498

569-
{ game_transition_triggered //1: Transition_desc //2: DestBSP //3: local_spawn //4: dest_spawn
570-
571-
local MAP_TO_VOTE PARAM2
572-
local MAP_DESC PARAM1
573-
local LOCAL_TRANS PARAM3
574-
local DEST_TRANS PARAM4
575-
setvard GM_DEST_TRANS PARAM4
576-
577-
local L_PLAYER_LIST ''
578-
579-
if ( !$map_exists(MAP_TO_VOTE) )
580-
{
581-
messageall green MAP_TO_VOTE does not exist on this server. Perhaps this is a future transition point?
582-
local EXIT_SUB 1
583-
}
584-
if !EXIT_SUB
585-
586-
getplayers L_PLAYER_LIST //using this method instead of game.players so we can test with bots
587-
588-
callexternal players ext_set_map MAP_TO_VOTE LOCAL_TRANS DEST_TRANS //mark map quest data
589-
590-
if ( $get_token_amt(L_PLAYER_LIST) > 1 )
591-
{
592-
local MSG_TITLE "Travel to "
593-
stradd MSG_TITLE MAP_DESC
594-
infomsg all MSG_TITLE "Vote now..."
595-
596-
local VOTE_TITLE "Travel to "
597-
stradd VOTE_TITLE MAP_DESC
598-
stradd VOTE_TITLE "?"
599-
600-
local VOTE_CALLER $get(ent_me,id)
601-
602-
callevent gm_map_vote VOTE_CALLER MAP_TO_VOTE VOTE_TITLE 1
603-
}
604-
605-
if ( $get_token_amt(L_PLAYER_LIST) == 1 )
606-
{
607-
setvard MAP_NAME MAP_TO_VOTE
608-
local AMX_STRING force_map_
609-
stradd AMX_STRING MAP_NAME
610-
usetrigger AMX_STRING
611-
612-
setvard GM_DISABLE_TRANSITIONS 1 //tells msarea_transitions to disable code side, so they don't change spawns
613-
if ( GM_DEST_TRANS isnot 'GM_DEST_TRANS' ) callexternal players ext_setspawn GM_DEST_TRANS
614-
//saveallnow
615-
616-
callevent 5.0 gm_manual_map_change
617-
}
618-
}
619-
620499
{ reset_server
621500

622501
dbg *** reset_server check: var game.cvar.ms_reset_if_empty plrs game.players
@@ -629,12 +508,6 @@
629508

630509
if ( game.cvar.ms_chatlog > 0 ) chatlog $timestamp(>) "SERVER_SHUTDOWN: reason: ms_reset_if_empty 1"
631510

632-
erasefile G_CRASHCFG
633-
local OUT_LINE "map "
634-
local COMMENT "/"
635-
stradd COMMENT "/"
636-
strconc OUT_LINE edana COMMENT written from MSC
637-
writeline G_CRASHCFG OUT_LINE
638511
callevent 0.1 exit_server
639512
}
640513

@@ -661,8 +534,6 @@
661534
chatlog WRITE_LOG
662535
}
663536

664-
665-
666537
{ player_left
667538
if ( game.cvar.ms_chatlog )
668539
{
@@ -706,25 +577,19 @@
706577
{ manual_edana
707578
//this changes to edana when no players are present (sending clientcmd with no players causes errors)
708579
if ( game.players > 0 ) callexternal all game_playercmd_setweather clear 0.01 0.01 //just in case of weirdness
709-
erasefile G_CRASHCFG
710-
local OUT_LINE "map "
711-
local COMMENT "/"
712-
stradd COMMENT "/"
713-
strconc OUT_LINE edana COMMENT written from MSC
714-
writeline G_CRASHCFG OUT_LINE
715580
if ( game.cvar.ms_chatlog > 0 ) chatlog $timestamp(>) "Server empty, switching to Edana via ms_timelimit."
716-
callevent 1.0 manual_edana2
581+
setvard DEST_MAP edana
582+
callevent 1.0 delay_changelevel
717583
}
718584

719-
{ manual_edana2
720-
changelevel edana
585+
{ delay_changelevel //Uses var DEST_MAP to change level. Intended for delays
586+
changelevel DEST_MAP
721587
}
722588

723589
{ gm_setname
724590
name PARAM1
725591
}
726592

727-
728593
//==================================== POTION OF FORGETFUNLESS - BEGIN
729594

730595
{ forget_spell //PARAM1=owner PARAM2=potion_ID
@@ -2038,30 +1903,9 @@
20381903
}
20391904
}
20401905

2041-
{ game_triggered //<map trigger fired>
2042-
dbg game_triggered PARAM1
2043-
2044-
local L_TRIG PARAM1
2045-
2046-
if ( L_TRIG startswith touch_trans_ )
2047-
{
2048-
if !VOTE_BUSY
2049-
if !GM_CHANGELEVEL
2050-
if game.players > 0
2051-
local L_VOTEMAP $string_from(L_TRIG,touch_trans_)
2052-
local L_VOTETITLE "Change map to "
2053-
stradd L_VOTETITLE L_VOTEMAP
2054-
getplayers T_PLAYERLIST
2055-
local L_VOTESTARTER $get_token(T_PLAYERLIST,0)
2056-
callexternal GAME_MASTER gm_map_vote L_VOTESTARTER L_VOTEMAP L_VOTETITLE 1 1
2057-
}
2058-
else if ( L_TRIG startswith force_map_ )
2059-
{
2060-
if !GM_CHANGELEVEL
2061-
local L_FORCEMAP $string_from(L_TRIG,force_map_)
2062-
callevent gm_manual_map_change L_FORCEMAP
2063-
}
2064-
}
1906+
//{ game_triggered //<map trigger fired>
1907+
//
1908+
//}
20651909

20661910
//---Quest Items
20671911

@@ -2133,5 +1977,3 @@
21331977
{ ext_dump_quest_items_loop
21341978
dbg $get_array(ARRAY_QUEST_ITEMS,game.script.iteration)
21351979
}
2136-
2137-
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
//Handles map transitions and systems based on transitioning.
2+
3+
//Handles crashed cfg file
4+
//-Creates cfg file in case game crashes so servers can reset back to the map it crashed on.
5+
//-The file name is configurable
6+
7+
//Handles prep for transitioning to new map
8+
//-Calls appropriate events on players to make sure their flags get set correctly
9+
//-Displays messages relating to map changes
10+
11+
{ game_spawn
12+
//Crash file name configuration
13+
setvarg G_CRASHCFG game.cvar.ms_crashcfg
14+
if ( G_CRASHCFG !contains '.cfg' )
15+
{
16+
stradd G_CRASHCFG ".cfg"
17+
}
18+
}
19+
20+
{ game_transition_triggered //1: Transition_desc //2: DestBSP //3: local_spawn //4: dest_spawn //called when player activates a transition
21+
22+
local L_MAP_TITLE PARAM1
23+
local L_MAP PARAM2
24+
local L_LOCAL_TRANS PARAM3
25+
setvard GM_DEST_TRANS PARAM4
26+
27+
if ( !$map_exists(L_MAP) ) //If map doesnt exist yet, display error message
28+
{
29+
messageall green L_MAP " does not exist on this server. Perhaps this is a future transition point?"
30+
}
31+
else
32+
{
33+
callexternal players ext_set_map L_MAP L_LOCAL_TRANS GM_DEST_TRANS //mark map quest data
34+
35+
if ( game.playersnb > 1 )
36+
{
37+
local VOTE_TITLE "Travel to " L_MAP_TITLE "?"
38+
local L_OPTIONS "Yes!:" L_MAP ";No!:" 0 //Im kinda shocked that this works. It concatenates each value to each other in L_OPTIONS
39+
40+
callexternal GAME_MASTER gm_create_vote gm_votemap L_OPTIONS VOTE_TITLE "Voting begins now!" 0
41+
}
42+
else
43+
{
44+
callevent gm_manual_map_change L_MAP
45+
}
46+
}
47+
}
48+
49+
{ gm_manual_map_change //<map> [destspawn]
50+
51+
if !GM_CHANGELEVEL
52+
setvard GM_DISABLE_TRANSITIONS 1 //tells msarea_transitions to disable code side, so they don't change spawns
53+
setvard GM_CHANGELEVEL 1
54+
55+
setvard DEST_MAP PARAM1
56+
local L_DEST_SPAWN PARAM2
57+
58+
if ( L_DEST_SPAWN isnot 'PARAM2' )
59+
{
60+
callexternal players ext_setspawn GM_DEST_TRANS
61+
}
62+
63+
callevent write_crashcfg DEST_MAP
64+
65+
local L_CMD "echo Changelevel: " DEST_MAP
66+
servercmd L_CMD //Report changelevel to server
67+
68+
setvarg G_WEATHER_LOCK clear
69+
setvarg global.map.weather "clear;clear;clear"
70+
setvarg G_OVERRIDE_WEATHER_CODE "clear;clear;clear"
71+
setvarg G_CUR_WEATHER "clear"
72+
setvarg G_IDLE_MUSIC none
73+
setvarg G_IDLE_MUSIC_LENGTH 0
74+
setvarg G_COMBAT_MUSIC none
75+
setvarg G_COMBAT_MUSIC_LENGTH 0
76+
setvarg G_MAP_ADDPARAMS 0
77+
78+
if ( G_SERVER_LOCKED )
79+
{
80+
local L_CMD "sv_password " $quote() $quote()
81+
servercmd L_CMD
82+
}
83+
84+
if ( game.playersnb > 0 )
85+
{
86+
callexternal players ext_changelevel_prep //clears weather
87+
}
88+
89+
local L_STR "TRAVELING TO " DEST_MAP
90+
infomsg all L_STR "You will be reconnected shortly."
91+
92+
setvard VOTE_IN_PROGRESS 0
93+
94+
callevent 5.0 delay_changelevel
95+
}
96+
97+
{ write_crashcfg //<mapname> //Writes to the crashed cfg file
98+
99+
erasefile G_CRASHCFG
100+
local L_STR "map " PARAM1 " //written from MSR"
101+
writeline G_CRASHCFG L_STR
102+
}
103+
104+
{ reset_server //called from game_master
105+
106+
callevent write_crashcfg edana
107+
}
108+
109+
{ manual_edana //called from game_master
110+
111+
callevent write_crashcfg edana
112+
}
113+
114+
{ game_triggered //<map trigger fired>
115+
dbg game_triggered PARAM1
116+
117+
local L_TRIG PARAM1
118+
119+
if !GM_CHANGELEVEL
120+
if ( L_TRIG startswith touch_trans_ ) //This is used from invalid spawns. They try to take you back to the start of a gauntlet.
121+
{
122+
local MAP_TO_VOTE $string_from(L_TRIG,touch_trans_)
123+
124+
local VOTE_TITLE "Change to " MAP_TO_VOTE "?" //Create options for vote menu
125+
local L_OPTIONS "Yes!:" MAP_TO_VOTE ";No!:" 0
126+
127+
callexternal GAME_MASTER gm_create_vote gm_votemap L_OPTIONS VOTE_TITLE "Voting begins now!" 0 //Send vote menu
128+
}
129+
else if ( L_TRIG startswith force_map_ )
130+
{
131+
local L_FORCEMAP $string_from(L_TRIG,force_map_)
132+
callevent gm_manual_map_change L_FORCEMAP
133+
}
134+
}

0 commit comments

Comments
 (0)