Skip to content

Commit c7a9a38

Browse files
committed
scheduler: new cvars mapm_change_to_default_map, mapm_default_map
1 parent 6517447 commit c7a9a38

3 files changed

Lines changed: 67 additions & 6 deletions

File tree

addons/amxmodx/configs/map_manager.cfg

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ mapm_second_vote "0"
6363
// Если карта набирает меньше процентов, чем в кваре, то происходит второе голосование.
6464
mapm_second_vote_percent "50"
6565

66+
// Если вышел последний игрок, через сколько минут сменить на карту поумолчанию.
67+
// 0 - disable
68+
// minutes
69+
mapm_change_to_default_map "0"
70+
71+
// Карта поумолчанию.
72+
mapm_default_map "de_dust2"
73+
6674
// Тип продления карты.
6775
// 0 - minutes, 1 - rounds
6876
mapm_extended_type "0"

addons/amxmodx/scripting/include/map_manager_stocks.inc

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,22 @@ stock intermission()
5757
emessage_begin(MSG_ALL, SVC_INTERMISSION);
5858
emessage_end();
5959
}
60-
stock get_players_num()
60+
stock get_players_num(ignore = 0)
6161
{
62-
new players[32], pnum; get_players(players, pnum, "ch");
62+
static maxplayers;
63+
if(!maxplayers) {
64+
maxplayers = get_maxplayers();
65+
}
66+
new pnum;
67+
for(new i = 1; i <= maxplayers; i++) {
68+
if(ignore && i == ignore
69+
|| !is_user_connected(i)
70+
|| is_user_bot(i)
71+
|| is_user_hltv(i)) {
72+
continue;
73+
}
74+
pnum++;
75+
}
6376
return pnum;
6477
}
6578
stock send_audio(id, audio[], pitch)

addons/amxmodx/scripting/map_manager_scheduler.sma

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,27 @@
77
#endif
88

99
#define PLUGIN "Map Manager: Scheduler"
10-
#define VERSION "0.0.7"
10+
#define VERSION "0.0.8"
1111
#define AUTHOR "Mistrick"
1212

1313
#pragma semicolon 1
1414

15+
#if !defined client_disconnected
16+
#define client_disconnected client_disconnect
17+
#endif
18+
1519
#define get_num(%0) get_pcvar_num(g_pCvars[%0])
1620
#define set_num(%0,%1) set_pcvar_num(g_pCvars[%0],%1)
1721
#define get_float(%0) get_pcvar_float(g_pCvars[%0])
1822
#define set_float(%0,%1) set_pcvar_float(g_pCvars[%0],%1)
23+
#define get_string(%0,%1,%2) get_pcvar_string(g_pCvars[%0],%1,%2)
1924

2025
#define EVENT_SVC_INTERMISSION "30"
2126

2227
enum (+=100) {
2328
TASK_CHECKTIME,
24-
TASK_DELAYED_CHANGE
29+
TASK_DELAYED_CHANGE,
30+
TASK_CHANGE_TO_DEFAULT
2531
};
2632

2733
enum {
@@ -39,6 +45,8 @@ enum Cvars {
3945
LAST_ROUND,
4046
SECOND_VOTE,
4147
SECOND_VOTE_PERCENT,
48+
CHANGE_TO_DEFAULT,
49+
DEFAULT_MAP,
4250
EXTENDED_TYPE,
4351
EXTENDED_MAX,
4452
EXTENDED_TIME,
@@ -80,6 +88,9 @@ public plugin_init()
8088
g_pCvars[SECOND_VOTE] = register_cvar("mapm_second_vote", "0"); // 0 - disable, 1 - enable
8189
g_pCvars[SECOND_VOTE_PERCENT] = register_cvar("mapm_second_vote_percent", "50");
8290

91+
g_pCvars[CHANGE_TO_DEFAULT] = register_cvar("mapm_change_to_default_map", "0"); // minutes, 0 - disable
92+
g_pCvars[DEFAULT_MAP] = register_cvar("mapm_default_map", "de_dust2");
93+
8394
g_pCvars[EXTENDED_TYPE] = register_cvar("mapm_extended_type", "0"); // 0 - minutes, 1 - rounds
8495
g_pCvars[EXTENDED_MAX] = register_cvar("mapm_extended_map_max", "3");
8596
g_pCvars[EXTENDED_TIME] = register_cvar("mapm_extended_time", "15"); // minutes
@@ -202,6 +213,35 @@ public clcmd_votemap()
202213
// Block default vote
203214
return PLUGIN_HANDLED;
204215
}
216+
public client_putinserver(id)
217+
{
218+
if(!is_user_bot(id) && !is_user_hltv(id)) {
219+
remove_task(TASK_CHANGE_TO_DEFAULT);
220+
}
221+
}
222+
public client_disconnect(id)
223+
{
224+
new Float:change_time = get_float(CHANGE_TO_DEFAULT);
225+
if(change_time > 0.0 && !get_players_num(id)) {
226+
set_task(change_time * 60, "task_change_to_default", TASK_CHANGE_TO_DEFAULT);
227+
}
228+
}
229+
public task_change_to_default()
230+
{
231+
if(get_players_num()) {
232+
return;
233+
}
234+
235+
new default_map[MAPNAME_LENGTH]; get_string(DEFAULT_MAP, default_map, charsmax(default_map));
236+
237+
if(!is_map_valid(default_map)) {
238+
return;
239+
}
240+
241+
log_amx("map changed to default[%s]", default_map);
242+
set_pcvar_string(g_pCvars[NEXTMAP], default_map);
243+
intermission();
244+
}
205245
public task_checktime()
206246
{
207247
if(is_vote_started() || is_vote_finished() || get_float(TIMELIMIT) <= 0.0) {
@@ -253,7 +293,7 @@ public event_newround()
253293
}
254294

255295
if(is_vote_finished() && (g_bChangeMapNextRound || get_num(LAST_ROUND))) {
256-
new nextmap[MAPNAME_LENGTH]; get_pcvar_string(g_pCvars[NEXTMAP], nextmap, charsmax(nextmap));
296+
new nextmap[MAPNAME_LENGTH]; get_string(NEXTMAP, nextmap, charsmax(nextmap));
257297
client_print_color(0, print_team_default, "%s^1 %L^3 %s^1.", g_sPrefix, LANG_PLAYER, "MAPM_NEXTMAP", nextmap);
258298
intermission();
259299
}
@@ -278,7 +318,7 @@ public event_intermission()
278318
}
279319
public delayed_change()
280320
{
281-
new nextmap[MAPNAME_LENGTH]; get_pcvar_string(g_pCvars[NEXTMAP], nextmap, charsmax(nextmap));
321+
new nextmap[MAPNAME_LENGTH]; get_string(NEXTMAP, nextmap, charsmax(nextmap));
282322
set_float(CHATTIME, get_float(CHATTIME) - 1.0);
283323
server_cmd("changelevel %s", nextmap);
284324
}

0 commit comments

Comments
 (0)