From c2aaa6cf0303936236e92b346ceb13720baf19aa Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 3 Dec 2006 12:52:23 +0000 Subject: [PATCH] new command g_maplist_shufflenow to randomize the maplist immediately (useful to call in server.cfg after setting g_maplist) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1973 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 1 + data/qcsrc/server/g_world.qc | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/data/default.cfg b/data/default.cfg index 802281b40..90eea6427 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -760,3 +760,4 @@ seta cl_shownames 1 // show player names pointed to (0: never, 1: teamplay only, set sv_allow_shownames 1 alias teamstatus "set _scoreboard 1" +alias g_maplist_shufflenow "set _g_maplist_shufflenow 1" diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index 435033faf..4ade33357 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -1245,6 +1245,39 @@ void PrintScoreboard() ServerConsoleEcho(".", FALSE); } +void ShuffleMaplist() +{ + string result; + float start; + float items; + float selected; + float i; + + result = cvar_string("g_maplist"); + items = tokenize(result); + + for(start = 0; start < items - 1; ++start) + { + result = ""; + + // select a random item + selected = ceil(random() * (items - start) + start) - 1; + + // shift this item to the place start + for(i = 0; i < start; ++i) + result = strcat(result, "'", argv(i), "'"); + result = strcat(result, "'", argv(selected), "'"); + for(i = start; i < items; ++i) + if(i != selected) + result = strcat(result, "'", argv(i), "'"); + + items = tokenize(result); + + dprint(result, "\n"); + } + + cvar_set("g_maplist", result); +} /* ============ @@ -1281,6 +1314,12 @@ void() CheckRules_World = PrintScoreboard(); } + if(cvar("_g_maplist_shufflenow")) + { + cvar_set("_g_maplist_shufflenow", "0"); + ShuffleMaplist(); + } + timelimit = cvar("timelimit") * 60; fraglimit = cvar("fraglimit"); -- 2.39.2