/[svn]/hlds/cstrike/addons/amxmodx/scripting/deagsmapmanager.sma
ViewVC logotype

Contents of /hlds/cstrike/addons/amxmodx/scripting/deagsmapmanager.sma

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9 - (hide annotations) (download)
Thu Sep 11 22:23:56 2008 UTC (15 years, 6 months ago) by cstrike
File size: 99252 byte(s)
Updated directory structure to match actual server.
Added linux scripts for managing a server.
1 cstrike 9 /********************************************************************************
2     * AMX Mod X script.
3     *
4     * Deagles Map Manager (deagsmapmanager.sma)
5     * Copyright (C) 2006-2007 Deages/AMXX Community
6     * (c) Copyright for original Mapchooser by OLO
7     *
8     * This program is free software; you can redistribute it and/or
9     * modify it under the terms of the GNU General Public License
10     * as published by the Free Software Foundation; either version 2
11     * of the License, or (at your option) any later version.
12     *
13     * This program is distributed in the hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     * GNU General Public License for more details.
17     *
18     * You should have received a copy of the GNU General Public License
19     * along with this program; if not, write to the Free Software
20     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21     *
22     * In addition, as a special exception, the author gives permission to
23     * link the code of this program with the Half-Life Game Engine ("HL
24     * Engine") and Modified Game Libraries ("MODs") developed by Valve,
25     * L.L.C ("Valve"). You must obey the GNU General Public License in all
26     * respects for all of the code used other than the HL Engine and MODs
27     * from Valve. If you modify this file, you may extend this exception
28     * to your version of the file, but you are not obligated to do so. If
29     * you do not wish to do so, delete this exception statement from your
30     * version.
31     *
32     *********************************************************************************
33     *
34     * Deagles Map Management v3.20
35     * Last Update: 2008-08-15
36     *
37     * by Deagles/AMXX Community & Posting/Supporting by bmann_420
38     * Link: http://forums.alliedmods.net/showthread.php?t=59535
39     *
40     *
41     * Changelog is in the .txt file
42     *
43     *
44     *********************************************************************************
45     */
46    
47    
48     #pragma semicolon 1
49     #include <amxmodx>
50     #include <amxmisc>
51    
52     new const PLUGIN[] = "DeagsMapManager";
53     new const VERSION[] = "3.20";
54     new const AUTHOR[] = "Deags/AMXX Community";
55    
56     // Comment out the following line to disable the dedicated log file
57     #define DEDICATED_LOG_ENABLED
58    
59     #define MAX_MAPS_AMOUNT 600
60     #define ADMIN_DMAP ADMIN_LEVEL_A
61     #define ADMIN_SUPER_DMAP ADMIN_LEVEL_F
62    
63     new maps_to_select, isbuytime = 0, isbetween = 0;
64     new ban_last_maps = 0, quiet = 0; //quiet=0 (words and sounds) quiet=1 (words only, no sound) quiet=2 (no sound, no words)
65     new Float:rtvpercent, Float:thespeed, Float:oldtimelimit;
66     new minimum = 1, minimumwait = 10, enabled = 1, cycle = 0, dofreeze = 1, maxnom = 3, maxcustnom = 5, frequency = 3, oldwinlimit = 0, addthiswait = 0;
67     new mapsurl[64], amt_custom = 0;
68     new isend = 0, isspeedset = 0, istimeset = 0, iswinlimitset = 0, istimeset2 = 0, mapssave = 0, atstart;
69     new usestandard = 1, currentplayers = 0, activeplayers = 0, counttovote = 0, countnum = 0;
70     new inprogress = 0, rocks = 0, rocked[33], hasbeenrocked = 0, waited = 0;
71     new pathtomaps[64];
72     new custompath[50];
73     new nmaps[MAX_MAPS_AMOUNT][32];
74     new listofmaps[MAX_MAPS_AMOUNT][32];
75     new totalbanned = 0;
76     new banthesemaps[MAX_MAPS_AMOUNT][32];
77     new totalmaps = 0;
78     new lastmaps[100 + 1][32];
79     new bannedsofar = 0;
80     new standard[50][32];
81     new standardtotal = 0;
82     new nmaps_num = 0; //this is number of nominated maps
83     new nbeforefill;
84     new nmapsfill[MAX_MAPS_AMOUNT][32];
85     new num_nmapsfill; //this is number of maps in users admin.cfg file that are valid
86     new bool:is_cstrike;
87     new nnextmaps[10], nvotes[12], nmapstoch, before_num_nmapsfill = 0, bool:mselected = false;
88     #if defined DEDICATED_LOG_ENABLED
89     new logfilename[256];
90     #endif
91     new teamscore[2], last_map[32];
92     new Nominated[MAX_MAPS_AMOUNT]; //?
93     new whonmaps_num[MAX_MAPS_AMOUNT];
94     new curtime = 0, staytime = 0, curplayers = 0, currounds = 0;
95     new dmap_strict, nominations_allowed, emptymap, idletime, emptymap_allowed, weapon_delay;
96    
97     forward public hudtext16(textblock[], colr, colg, colb, posx, posy, screen, time, id);
98     forward bool:isbanned(map[]);
99     forward bool:iscustommap(map[]);
100     forward bool:islastmaps(map[]);
101     forward bool:isnominated(map[]);
102     forward public handle_nominate(id, map[]);
103     forward available_maps();
104     forward public getready();
105     forward public timetovote();
106     forward public messagefifteen();
107     forward public messagenominated();
108     forward public messagemaps();
109     forward public stopperson();
110     forward public countdown();
111     forward public rock_it_now();
112     forward public timedisplay();
113     forward public messagethree();
114    
115     public client_connect(id) {
116     if (!is_user_bot(id)) {
117     currentplayers++;
118     }
119     return PLUGIN_CONTINUE;
120     }
121    
122     public loopmessages() {
123     if (quiet == 2) { //quiet=0 (words and sounds) quiet=1 (words only, no sound) quiet=2 (no sound, no words)
124     return PLUGIN_HANDLED;
125     }
126     new timeleft = get_timeleft();
127     new partialtime = timeleft % 370;
128     new maintime = timeleft % 600;
129     if ((maintime > 122 && maintime < 128) && timeleft > 114) {
130     set_task(1.0, "timedisplay", 454510, "", 0, "a", 5);
131     }
132     if ((partialtime > 320 && partialtime < 326) && !cycle) {
133     set_task(3.0, "messagethree", 987300); //, "", 0, "a", 4)
134     return PLUGIN_HANDLED;
135     }
136     return PLUGIN_HANDLED;
137     }
138    
139     public timedisplay() {
140     new timeleft = get_timeleft();
141     new seconds = timeleft % 60;
142     new minutes = floatround((timeleft - seconds) / 60.0);
143     if (timeleft < 1) {
144     remove_task(454510);
145     remove_task(454500);
146     remove_task(123452);
147     remove_task(123499);
148     return PLUGIN_HANDLED;
149     }
150     if (timeleft > 140) {
151     remove_task(454500);
152     }
153     if (timeleft > 30) {
154     set_hudmessage(255, 255, 220, 0.02, 0.2, 0, 1.0, 1.04, 0.0, 0.05, 3);
155     } else {
156     set_hudmessage(210, 0 ,0, 0.02, 0.15, 0, 1.0, 1.04, 0.0, 0.05, 3);
157     //Flashing red:set_hudmessage(210, 0, 0, 0.02, 0.2, 1, 1.0, 1.04, 0.0, 0.05, 3);
158     }
159     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_TIME_LEFT", minutes, seconds);
160     if (timeleft < 70 && (timeleft % 5) == 1) {
161     new smap[32];
162     get_cvar_string("amx_nextmap", smap, 31);
163     set_hudmessage(0, 132, 255, 0.02, 0.27, 0, 5.0, 5.04, 0.0, 0.5, 4);
164     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_NEXTMAP", smap);
165     }
166     return PLUGIN_HANDLED;
167    
168     }
169    
170     public messagethree() {
171     new timeleft = get_timeleft();
172     new time2 = timeleft - timeleft % 60;
173     new minutesleft = floatround(float(time2) / 60.0);
174     new mapname[32];
175     get_mapname(mapname, 31);
176     new smap[32];
177     get_cvar_string("amx_nextmap", smap, 31);
178     if (minutesleft >= 2 && !mselected) {
179     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NEXTMAP_VOTE_REMAINING",
180     (minutesleft == 3 || minutesleft == 2) ? timeleft -100 : minutesleft - 2, (minutesleft == 3 || minutesleft == 2) ? "seconds" : "minutes");
181     } else {
182     if (mselected) {
183     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NEXTMAP_VOTED", smap, timeleft);
184     } else {
185     if (minutesleft <= 2 && timeleft) {
186     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_CURRENT_MAP", mapname);
187     }
188     }
189     }
190     }
191    
192     public client_putinserver(id) {
193     if (!is_user_bot(id)) {
194     activeplayers++;
195     }
196     return PLUGIN_CONTINUE;
197     }
198    
199     public client_disconnect(id) {
200     remove_task(987600 + id);
201     remove_task(127600 + id);
202     if (is_user_bot(id)) {
203     return PLUGIN_CONTINUE;
204     }
205     currentplayers--;
206     activeplayers--;
207     if (rocked[id]) {
208     rocked[id] = 0;
209     rocks--;
210     }
211     if (get_timeleft() > 160) {
212     if (!mselected && !hasbeenrocked && !inprogress) {
213     check_if_need();
214     }
215     }
216     new kName[32];
217     get_user_name(id, kName, 31);
218    
219     new n = 0;
220     while (Nominated[id] > 0 && n < nmaps_num) {
221     if (whonmaps_num[n] == id) {
222     if (get_timeleft() > 50 && quiet != 2) { //quiet=0 (words and sounds) quiet=1 (words only, no sound) quiet=2 (no sound, no words)
223     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_PLAYER_LEFT", kName, nmaps[n]);
224     #if defined DEDICATED_LOG_ENABLED
225     log_to_file(logfilename, "%s has left; %s is no longer nominated", kName, nmaps[n]);
226     #endif
227     }
228    
229     new j = n;
230     while (j < nmaps_num - 1) {
231     whonmaps_num[j] = whonmaps_num[j + 1];
232     nmaps[j] = nmaps[j + 1];
233     j++;
234     }
235     nmaps_num--;
236     Nominated[id] = Nominated[id] - 1;
237     } else {
238     n++;
239     }
240     }
241     return PLUGIN_CONTINUE;
242     }
243    
244     public timer(id) {
245     if (get_playersnum() == 0) {
246     curtime++;
247     if (curtime >= staytime) {
248     change_maps();
249     }
250     } else {
251     new i, noncounted, players = get_playersnum();
252     for (i = 1; i <= get_maxplayers(); i++) {
253     if ((get_user_time(i, 1) >= (get_pcvar_num(idletime) * 216000)) || is_user_bot(i) || is_user_hltv(i)) {
254     noncounted++;
255     }
256     }
257     if (players == noncounted) {
258     curtime++;
259     if (curtime >= staytime) {
260     change_maps();
261     }
262     } else {
263     curtime = 0;
264     }
265     }
266     return curtime;
267     }
268    
269     public change_maps() {
270    
271     new map[51], curmap[51];
272     get_mapname(curmap,50);
273     get_pcvar_string(emptymap, map, 31);
274    
275     if (get_pcvar_num(emptymap_allowed) == 1 && strlen(map) > 0) {
276     server_cmd("changelevel %s", map);
277     }
278     }
279    
280     public list_maps(id) {
281     new m, idreal = id, iteration = 0;
282     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_LISTMAPS", totalmaps);
283     if (totalmaps - (50 * iteration) >= 50) {
284     console_print(idreal, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MAPS", iteration * 50 + 1, iteration * 50 + 50);
285     } else {
286     console_print(idreal, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MAPS", iteration * 50 + 1, iteration * 50 + (totalmaps - iteration * 50));
287     }
288    
289     for (m = 50 * iteration; (m < totalmaps && m < 50 * (iteration + 1)); m += 3)
290     if (m + 1 < totalmaps) {
291     if (m + 2 < totalmaps) {
292     console_print(id, " %s %s %s", listofmaps[m], listofmaps[m + 1], listofmaps[m + 2]);
293     } else {
294     console_print(id, " %s %s", listofmaps[m], listofmaps[m + 1]);
295     }
296     } else {
297     console_print(id, " %s", listofmaps[m]);
298     }
299     if (50 * (iteration + 1) < totalmaps) {
300     new kIdfake[32];
301     num_to_str((id + 50 * (iteration + 1)), kIdfake, 31);
302     client_print(idreal, print_console, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MORE");
303     set_task(4.0, "more_list_maps", 127600 + id, kIdfake, 6);
304     }
305     return PLUGIN_CONTINUE;
306     }
307    
308     public more_list_maps(idfakestr[]) {
309     new idfake = str_to_num(idfakestr);
310     new m, idreal = idfake, iteration = 0;
311     while (idreal >= 50) {
312     idreal -= 50;
313     iteration++;
314     } //Now idreal is the real id of client
315    
316     if (totalmaps - (50 * iteration) >= 50) {
317     console_print(idreal, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MAPS", iteration * 50 + 1, iteration * 50 + 50);
318     } else {
319     console_print(idreal, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MAPS", iteration * 50 + 1, iteration * 50 + (totalmaps - iteration * 50));
320     }
321    
322     for (m = 50 * iteration; (m < totalmaps && m < 50 * (iteration + 1)); m += 3) {
323     if (m + 1 < totalmaps) {
324     if (m + 2 < totalmaps) {
325     console_print(idreal, " %s %s %s", listofmaps[m], listofmaps[m + 1], listofmaps[m + 2]);
326     } else {
327     console_print(idreal, " %s %s", listofmaps[m], listofmaps[m + 1]);
328     }
329     } else {
330     console_print(idreal, " %s", listofmaps[m]);
331     }
332     }
333    
334     if (50 * (iteration + 1) < totalmaps) {
335     new kIdfake[32];
336     num_to_str((idreal + 50 * (iteration + 1)), kIdfake, 31);
337     client_print(idreal, print_console, "%L", LANG_PLAYER, "DMAP_LISTMAPS_MORE");
338     set_task(2.0, "more_list_maps", 127600 + idreal, kIdfake, 6);
339     } else { //Base case has been reached
340     client_print(idreal, print_console, "%L", LANG_PLAYER, "DMAP_LISTMAPS_FINISHED", totalmaps);
341     }
342     }
343    
344     public say_nextmap(id) {
345     new timeleft = get_timeleft();
346     new time2 = timeleft - timeleft % 60;
347     new minutesleft = floatround(float(time2) / 60.0);
348     new mapname[32];
349     get_mapname(mapname,31);
350     new smap[32];
351     get_cvar_string("amx_nextmap", smap, 31);
352     if (minutesleft >= 2 && !mselected)
353     if (get_pcvar_num(nominations_allowed) == 1) {
354     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_SAY_NOMINATIONS",
355     (minutesleft == 3 || minutesleft == 2) ? timeleft - 100 : minutesleft - 2, (minutesleft == 3 || minutesleft == 2) ? "sec." : "min.");
356     } else {
357     if (mselected) {
358     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NEXTMAP_VOTED", smap, timeleft);
359     } else {
360     if (inprogress) {
361     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_CURRENT_MAP", mapname);
362     }
363     }
364     }
365     return PLUGIN_HANDLED;
366     }
367    
368     public check_if_need() {
369     new Float:ratio = rtvpercent;
370     new needed = floatround(float(activeplayers) * ratio + 0.49);
371     new timeleft = get_timeleft();
372     new Float:minutesleft = float(timeleft) / 60.0;
373     new Float:currentlimit = get_cvar_float("mp_timelimit");
374     new Float:minutesplayed = currentlimit - minutesleft;
375     new wait;
376     wait = minimumwait;
377     if ((minutesplayed + 0.5) >= (float(wait))) {
378     if (rocks >= needed && rocks >= minimum) {
379     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_STARTING", rocks);
380     set_hudmessage(222, 70, 0, -1.0, 0.3, 1, 10.0, 10.0, 2.0, 4.0, 4);
381     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_RTV_START", rocks);
382     hasbeenrocked = 1;
383     inprogress = 1;
384     mselected = false;
385     set_task(10.0, "rock_it_now", 765100);
386     }
387     }
388     }
389    
390     public rock_the_vote(id) {
391     new Float:ratio = rtvpercent;
392     new needed = floatround(float(activeplayers) * ratio + 0.49);
393     new kName[32];
394     get_user_name(id, kName, 31);
395     new timeleft = get_timeleft();
396     new Float:minutesleft = float(timeleft) / 60.0;
397     new Float:currentlimit = get_cvar_float("mp_timelimit");
398     new Float:minutesplayed = currentlimit - minutesleft;
399     new wait;
400     wait = minimumwait;
401     if (cycle) {
402     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_DISABLED");
403     return PLUGIN_CONTINUE;
404     }
405     if (!enabled) {
406     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_DISABLED");
407     return PLUGIN_CONTINUE;
408     }
409     if (inprogress) {
410     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTE_BEGINNING");
411     return PLUGIN_CONTINUE;
412     }
413     if (mselected) {
414     new smap[32];
415     get_cvar_string("amx_nextmap", smap, 31);
416     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_COMPLETED", smap, get_timeleft());
417     return PLUGIN_CONTINUE;
418     }
419     if (hasbeenrocked) {
420     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAP_ALREADY_ROCKED", kName);
421     return PLUGIN_CONTINUE;
422     }
423     if (timeleft < 120) {
424     if (timeleft > 1) {
425     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_NOT_ENOUGH_TIME");
426     } else {
427     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_NO_TIMELIMIT");
428     }
429     return PLUGIN_CONTINUE;
430     }
431     if ((minutesplayed + 0.5) < (float(wait))) {
432     if (float(wait) - 0.5 - minutesplayed > 0.0) {
433     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_WAIT",
434     kName, (floatround(float(wait) + 0.5-minutesplayed) > 0) ? (floatround(float(wait) + 0.5 - minutesplayed)) : (1));
435     } else {
436     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_1MIN");
437     }
438     if ((get_user_flags(id) & ADMIN_MAP)) {
439     console_print(id, "%L", LANG_PLAYER, "DMAP_RTV_ADMIN_FORCE", kName);
440     }
441     return PLUGIN_CONTINUE;
442     }
443     if (!rocked[id]) {
444     rocked[id] = 1;
445     rocks++;
446     } else {
447     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_ALREADY_ROCKED", kName);
448     return PLUGIN_CONTINUE;
449     }
450     if (rocks >= needed && rocks >= minimum) {
451     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_STARTING", rocks);
452     set_hudmessage(222, 70,0, -1.0, 0.3, 1, 10.0, 10.0, 2.0, 4.0, 4);
453     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_RTV_START", rocks);
454     hasbeenrocked = 1;
455     inprogress = 1;
456     mselected = false;
457     set_task(15.0, "rock_it_now", 765100);
458     } else {
459     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_NEEDED", ((needed-rocks) > (minimum-needed)) ? (needed-rocks) : (minimum-rocks));
460     }
461     return PLUGIN_CONTINUE;
462     }
463    
464     public rock_it_now() {
465     new temprocked = hasbeenrocked;
466     hasbeenrocked = 1;
467     new timeleft = get_timeleft();
468     new Float:minutesleft=float(timeleft) / 60.0;
469     new Float:currentlimit = get_cvar_float("mp_timelimit");
470     new Float:minutesplayed = currentlimit-minutesleft;
471     new Float:timelimit;
472     counttovote = 0;
473     remove_task(459200);
474     remove_task(459100);
475     timelimit = float(floatround(minutesplayed + 1.5));
476     if (timelimit > 0.4) {
477     oldtimelimit = get_cvar_float("mp_timelimit");
478     istimeset = 1;
479     set_cvar_float("mp_timelimit", timelimit);
480     if (quiet != 2) {
481     console_print(0, "%L", LANG_PLAYER, "DMAP_TIMELIMIT_CHANGED", floatround(get_cvar_float("mp_timelimit")));
482     }
483     #if defined DEDICATED_LOG_ENABLED
484     log_to_file(logfilename, "Time limit changed to %d To enable vote to occur now", floatround(get_cvar_float("mp_timelimit")));
485     #endif
486     } else {
487     console_print(0, "%L", LANG_PLAYER, "DMAP_TIMELIMIT_NOTCHANGED");
488     #if defined DEDICATED_LOG_ENABLED
489     log_to_file(logfilename, "Will not set a timelimit of %d, vote is not rocked, seconds left on map:%d", floatround(timelimit), timeleft);
490     #endif
491     new inum, players[32], i;
492     get_players(players, inum, "c");
493     for (i = 0; i < inum; ++i) {
494     rocked[i] = 0;
495     }
496     rocks = 0;
497     hasbeenrocked = temprocked;
498     return PLUGIN_HANDLED;
499     }
500     timeleft = get_timeleft();
501     inprogress = 1;
502     mselected = false;
503     if (quiet != 2) {
504     set_hudmessage(0, 222,50, -1.0, 0.23, 1, 6.0, 6.0, 1.0, 1.0, 4);
505     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_START_MAPVOTE");
506     } else {
507     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_START_MAPVOTE");
508     }
509     if (quiet == 0) {
510     client_cmd(0, "spk ^"get red(e80) ninety(s45) to check(e20) use _comma(e10) bay(s18) mass(e42) cap(s50)^"");
511     }
512     set_task(3.5, "getready", 459100);
513     set_task(10.0, "startthevote");
514     remove_task(454500);
515     remove_task(123452);
516     rocks = 0;
517     new inum, players[32], i;
518     get_players(players, inum, "c");
519     for (i = 0; i < inum; ++i) {
520     rocked[i] = 0;
521     }
522     set_task(2.18, "calculate_custom");
523     return PLUGIN_HANDLED;
524     }
525    
526     public admin_rockit(id, level, cid) {
527     if (!cmd_access(id, level, cid, 1)) {
528     return PLUGIN_HANDLED;
529     }
530    
531     new arg[32];
532     read_argv(1, arg, 31);
533     new kName[32], timeleft = get_timeleft();
534     get_user_name(id, kName, 31);
535    
536     if (timeleft < 180.0) {
537     console_print(id, "%L", LANG_PLAYER, "DMAP_NOT_ENOUGH_TIME");
538     return PLUGIN_HANDLED;
539     }
540     if (inprogress || hasbeenrocked || isend) {
541     console_print(id, "%L", LANG_PLAYER, "DMAP_ALREADY_VOTING");
542     return PLUGIN_HANDLED;
543     }
544     if (cycle) {
545     console_print(id, "%L", LANG_PLAYER, "DMAP_ENABLE_VOTEMODE");
546     return PLUGIN_HANDLED;
547     }
548     if (!mselected) {
549     switch(get_cvar_num("amx_show_activity")) {
550     case 2: client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_VOTE_ROCKED_BY_ADMIN", kName);
551     case 1: client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_RTV_USED_BY_ADMIN");
552     }
553     } else {
554     switch(get_cvar_num("amx_show_activity")) {
555     case 2: client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_REVOTE_BY_ADMIN", kName);
556     case 1: client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_REVOTE");
557     }
558     }
559     remove_task(123450);
560     remove_task(123400);
561     remove_task(123452);
562     remove_task(123499);
563     counttovote = 0;
564     remove_task(459200);
565     remove_task(459100);
566     #if defined DEDICATED_LOG_ENABLED
567     log_to_file(logfilename, "Admin: <%s> calls rockthevote with %d seconds left on map", kName, timeleft);
568     #endif
569     inprogress = 1;
570     mselected = false;
571     set_task(15.0, "rock_it_now", 765100);
572     set_task(0.18, "calculate_custom");
573     return PLUGIN_HANDLED;
574     }
575    
576     public check_votes() {
577     new timeleft = get_timeleft();
578     new b = 0, a;
579     for (a = 0; a < nmapstoch; ++a) {
580     if (nvotes[b] < nvotes[a]) {
581     b = a;
582     }
583     }
584     if (nvotes[maps_to_select] > nvotes[b]) {
585     new mapname[32];
586     get_mapname(mapname, 31);
587     new Float:steptime = get_cvar_float("amx_extendmap_step");
588     set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") + steptime);
589     //oldtimelimit = get_cvar_float("mp_timelimit");
590     istimeset = 1;
591    
592     if (quiet != 2) {
593     set_hudmessage(222, 70,0, -1.0, 0.4, 0, 4.0, 10.0, 2.0, 2.0, 4);
594     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_MAP_EXTENDED", steptime);
595     if (quiet != 1) {
596     client_cmd(0, "speak ^"barney/waitin^"");
597     }
598     }
599     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_MAP_EXTENDED2", steptime);
600     #if defined DEDICATED_LOG_ENABLED
601     log_to_file(logfilename, "Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", mapname, steptime);
602     #endif
603     inprogress = isend = 0;
604     nmaps_num = nbeforefill;
605     num_nmapsfill = before_num_nmapsfill;
606     return PLUGIN_HANDLED;
607     }
608     if (nvotes[b] && nvotes[maps_to_select+1] <= nvotes[b]) {
609     set_cvar_string("amx_nextmap", nmaps[nnextmaps[b]]);
610     new smap[32];
611     get_cvar_string("amx_nextmap", smap, 31);
612     new players[32], inum;
613     get_players(players, inum, "c");
614     if (quiet != 2) {
615     new whenChange[40];
616     if (get_cvar_float("enforce_timelimit") == 1.0 && is_cstrike) {
617     format(whenChange, 39, "%L", LANG_PLAYER, "DMAP_IN_SECONDS", timeleft);
618     } else {
619     format(whenChange, 39, "%L", LANG_PLAYER, "DMAP_SHORTLY");
620     }
621     set_hudmessage(222, 70,0, -1.0, 0.36, 0, 4.0, 10.0, 2.0, 2.0, 4);
622     if (timeleft <= 0 || timeleft > 300) {
623     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_MAP_WINS", nmaps[nnextmaps[b]], nvotes[b], timeleft);
624     } else {
625     if (iscustommap(nmaps[nnextmaps[b]]) && usestandard) {
626     set_hudmessage(0, 152, 255, -1.0, 0.22, 0, 4.0, 7.0, 2.1, 1.5, 4);
627     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_MAP_WINS2", nmaps[nnextmaps[b]], nvotes[b], whenChange);
628     //set_hudmessage(0, 152, 255, -1.0, 0.38, 0, 4.0, 7.0, 2.1, 1.5, 7);
629     client_print(0, print_notify, "%L", LANG_PLAYER, "DMAP_DOWNLOAD_CUSTOM_MAP");
630     } else {
631     set_hudmessage(0, 152, 255, -1.0, 0.22, 0, 4.0, 7.0, 2.1, 1.5, 4);
632     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_MAP_WINS2", nmaps[nnextmaps[b]], nvotes[b], whenChange);
633     }
634     }
635     if ((containi(mapsurl, "www") != -1 || containi(mapsurl, "http") != -1) && iscustommap(nmaps[nnextmaps[b]])) {
636     //set_hudmessage(0, 152, 255, -1.0, 0.70, 1, 4.0, 12.0, 2.1, 1.5, 7);
637     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_DOWNLOAD_MAPS_URL", mapsurl);
638     }
639     if (quiet != 1) {
640     client_cmd(0, "speak ^"barney/letsgo^""); //quiet=0 (words and sounds) quiet=1 (words only, no sound) quiet=2 (no sound, no words)
641     }
642     }
643     }
644    
645     new smap[32];
646     get_cvar_string("amx_nextmap", smap, 31);
647     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_CHOOSING_FINISHED", smap);
648     #if defined DEDICATED_LOG_ENABLED
649     log_to_file(logfilename, "Vote: Voting for the nextmap finished. The nextmap will be %s", smap);
650     #endif
651     inprogress = waited = 0;
652     isend = 1;
653     //WE ARE near END OF MAP; time to invoke Round mode ALgorithm
654     //set_task(2.0, "endofround", 123452, "", 0, "b");
655     new waituntilready = timeleft - 60;
656     if (waituntilready > 30) {
657     waituntilready = 30;
658     }
659     if (waituntilready <= 0 || get_cvar_num("mp_winlimit")) {
660     addthiswait = 4;
661     set_task(4.0, "RoundMode", 333333);
662     } else {
663     set_task(float(waituntilready), "RoundMode", 333333);
664     addthiswait = waituntilready;
665     }
666     nmaps_num = nbeforefill;
667     num_nmapsfill = before_num_nmapsfill;
668     set_task(2.18, "calculate_custom");
669     return PLUGIN_HANDLED;
670     }
671    
672     public show_timer() {
673     set_task(1.0, "timedis2", 454500, "", 0, "b");
674     }
675    
676     public timedis2() {
677     new timeleft = get_timeleft();
678     if ((timeleft % 5) == 1) {
679     new smap[32];
680     get_cvar_string("amx_nextmap", smap, 31);
681     set_hudmessage(0, 132, 255, 0.02, 0.27, 0, 5.0, 5.04, 0.0, 0.5, 4);
682     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_NEXTMAP", smap);
683     if (waited < 90) {
684     set_hudmessage(255, 215, 190, 0.02, 0.2, 0, 5.0, 5.04, 0.0, 0.5, 3);
685     } else {
686     set_hudmessage(210, 0 ,0, 0.02, 0.15, 0, 5.0, 5.04, 0.0, 0.5, 3);
687     //Flashing red:set_hudmessage(210, 0 ,0, 0.02, 0.2, 1, 1.0, 1.04, 0.0, 0.05, 3);
688     }
689     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_LAST_ROUND");
690     }
691     return PLUGIN_HANDLED;
692     }
693    
694     public timedis3() {
695     new timeleft = get_timeleft();
696     if ((timeleft % 5) == 1) {
697     new smap[32];
698     get_cvar_string("amx_nextmap", smap, 31);
699     set_hudmessage(0, 132, 255, 0.02, 0.27, 0, 5.0, 5.04, 0.0, 0.5, 4);
700     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_NEXTMAP", smap);
701     if (timeleft > 30) {
702     set_hudmessage(255, 215, 190, 0.02, 0.2, 0, 5.0, 5.04, 0.0, 0.5, 3);
703     } else {
704     set_hudmessage(210, 0 ,0, 0.02, 0.15, 0, 5.0, 5.04, 0.0, 0.5, 3);
705     //Flashing red:set_hudmessage(210, 0, 0, 0.02, 0.2, 1, 5.0, 5.04, 0.0, 0.5, 3);
706     }
707     //countdown when "Enforcing timelimit"
708     new seconds = timeleft % 60;
709     new minutes = floatround((timeleft - seconds) / 60.0);
710     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_TIME_LEFT", minutes, seconds);
711     }
712     return PLUGIN_HANDLED;
713     }
714    
715     public RoundMode() {
716     if (get_cvar_float("mp_timelimit") > 0.1 && get_cvar_num("enforce_timelimit")) {
717     remove_task(333333);
718     remove_task(454500);
719     new timeleft = get_timeleft();
720     if (timeleft < 200) {
721     set_task(float(timeleft) - 5.8, "endofround");
722     set_task(1.0, "timedis3", 454500, "", 0, "b");
723     }
724     return PLUGIN_HANDLED;
725     } else {
726     if (waited == 0) {
727     set_task(1.0, "show_timer");
728     }
729     if (isbetween || isbuytime || (waited + addthiswait) > 190 || (!is_cstrike && (waited + addthiswait) >= 30) || activeplayers < 2) { //Time to switch maps!!!!!!!!
730     remove_task(333333);
731     remove_task(454500);
732     if (isbetween) {
733     set_task(3.9, "endofround");
734     } else {
735     endofround(); //switching very soon!
736     }
737     } else {
738     waited += 5;
739     //if (waited >= 15 && waited <= 150 && get_timeleft() < 7) {
740     if ((waited + addthiswait) <= 190 && get_timeleft() >= 0 && get_timeleft() <= 15) {
741     istimeset2 = 1;
742     set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") + 2.0);
743     if (is_cstrike) {
744     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_FINISHING_CUR_ROUND");
745     }
746     }
747     set_task(5.0, "RoundMode", 333333);
748     }
749     }
750     return PLUGIN_HANDLED;
751     }
752    
753     public vote_count(id, key) {
754     if (get_cvar_float("amx_vote_answers")) {
755     new name[32];
756     get_user_name(id, name, 31);
757     if (key == maps_to_select) {
758     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_CHOSE_MAPEXTENDING", name);
759     } else if (key < maps_to_select) {
760     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_CHOSE_MAP", name, nmaps[nnextmaps[key]]);
761     }
762     }
763     nvotes[key] = nvotes[key] + 1;
764     return PLUGIN_HANDLED;
765     }
766    
767     bool:isinmenu(id) {
768     new a;
769     for (a = 0; a < nmapstoch; ++a) {
770     if (id == nnextmaps[a]) {
771     return true;
772     }
773     }
774     return false;
775     }
776    
777     public dmapcancelvote(id, level, cid) {
778     if (!cmd_access(id, level, cid, 0)) {
779     return PLUGIN_HANDLED ;
780     }
781     if (task_exists(765100, 1)) {
782     new authid[32], name[32];
783    
784     get_user_authid(id, authid, 31) ;
785     get_user_name(id, name, 31);
786     #if defined DEDICATED_LOG_ENABLED
787     log_to_file(logfilename, "Admin: <%s> cancelled the map vote", name);
788     #endif
789     client_print(0, print_chat, "Admin: <%s> cancelled the map vote", name);
790     remove_task(765100, 1);
791     set_hudmessage(222, 70,0, -1.0, 0.3, 1, 10.0, 10.0, 2.0, 4.0, 8);
792     show_hudmessage(0, "Admin <%s> cancelled the map vote", name);
793     hasbeenrocked = 0;
794     inprogress = 0;
795     mselected = true;
796    
797     return PLUGIN_CONTINUE;
798     } else {
799     client_print(id, print_chat, "No current map vote to cancel");
800     }
801     return PLUGIN_HANDLED;
802     }
803    
804     public levelchange() {
805     if (istimeset2 == 1) { //Allow automatic map change to take place.
806     set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") - 2.0);
807     istimeset2 = 0;
808     } else {
809     if (get_cvar_float("mp_timelimit") >= 4.0) { //Allow automatic map change to take place.
810     if (!istimeset) {
811     oldtimelimit = get_cvar_float("mp_timelimit");
812     }
813     set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") - 3);
814     istimeset = 1;
815     } else {
816     if (get_cvar_num("mp_winlimit")) { //Allow automatic map change based on teamscores
817     new largerscore;
818     largerscore = (teamscore[0] > teamscore[1]) ? teamscore[0] : teamscore[1];
819     iswinlimitset = 1;
820     oldwinlimit = get_cvar_num("mp_winlimit");
821     set_cvar_num("mp_winlimit", largerscore);
822     }
823     }
824     }
825     //If we are unable to achieve automatic level change, FORCE it.
826     set_task(2.1, "DelayedChange", 444444);
827     }
828    
829     public changeMap() { //Default event copied from nextmap.amx, and changed around.
830     set_cvar_float("mp_chattime", 3.0); // make sure mp_chattime is long
831     remove_task(444444);
832     set_task(1.85, "DelayedChange");
833     }
834    
835     public DelayedChange() {
836     new smap[32];
837     get_cvar_string("amx_nextmap", smap, 31);
838     server_cmd("changelevel %s", smap);
839     }
840    
841     public endofround() { //Call when ready to switch maps in (?) seconds
842     remove_task(123452);
843     remove_task(987111);
844     remove_task(333333);
845     remove_task(454510);
846     remove_task(454500);
847     remove_task(123499);
848     new smap[32];
849     get_cvar_string("amx_nextmap", smap, 31);
850     set_task(6.0, "levelchange"); //used to be 7.0
851     if (quiet != 2) {
852     countnum = 0;
853     set_task(1.0, "countdown", 123400, "", 0, "a", 6);
854     if (quiet != 1) {
855     client_cmd(0, "speak ^"loading environment on to your computer^"");
856     }
857     } else {
858     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_MAP_ABOUT_CHANGE");
859     }
860     ///////////////////////////////////////////////
861     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NEXTMAP2", smap);
862     if ((containi(mapsurl, "www") != -1 || containi(mapsurl, "http") != -1) && iscustommap(smap)) {
863     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_DOWNLOAD_MAPS_URL2", smap, mapsurl);
864     }
865     ///////////////////////////////////////////////
866     if (dofreeze) {
867     isspeedset = 1;
868     thespeed = get_cvar_float("sv_maxspeed");
869     set_cvar_float("sv_maxspeed", 0.0);
870     new players[32], inum, i;
871     get_players(players, inum, "c");
872     for (i = 0; i < inum; ++i) {
873     client_cmd(players[i], "drop");
874     client_cmd(players[i], "+showscores");
875     }
876     }
877     if (dofreeze) {
878     set_task(1.1, "stopperson", 123450, "", 0, "a", 2);
879     }
880     return PLUGIN_HANDLED;
881     }
882    
883     public countdown() {
884     new smap[32];
885     get_cvar_string("amx_nextmap", smap, 31);
886     countnum++;
887     set_hudmessage(150, 120, 0, -1.0, 0.3, 0, 0.5, 1.1, 0.1, 0.1, 4);
888     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_MAP_CHANGING_IN", smap, 7 - countnum);
889     return PLUGIN_HANDLED;
890     }
891    
892     public stopperson() {
893     new players[32], inum, i;
894     get_players(players, inum, "c");
895     if (isspeedset >= 0 && isspeedset < 2) {
896     thespeed = get_cvar_float("sv_maxspeed");
897     isspeedset++;
898     set_cvar_float("sv_maxspeed", 0.0);
899     }
900     for (i = 0; i < inum; ++i) {
901     client_cmd(players[i], "drop");
902     }
903     return PLUGIN_HANDLED;
904     }
905    
906     public display_message() {
907     new timeleft = get_timeleft();
908     new parttime = timeleft % (frequency * 60 * 2); //460//period(minutes/cycle) * 60 seconds/minute = period in seconds
909     //if frequency = 2 (every 2 minutes one message will appear) THIS FUNCTION COVERS 2 MESSAGES WHICH MAKES ONE CYCLE
910     //parttime=timeleft%240;
911     new addition = frequency * 60;
912     if (mselected || inprogress || cycle) {
913     return PLUGIN_CONTINUE;
914     }
915     //if (parttime > 310 && parttime < 326 && timeleft > 132)
916     if (parttime > (40 + addition) && parttime < (56 + addition) && timeleft > 132) {
917     set_task(3.0, "messagenominated", 986100); //, "", 0, "a", 4)
918     } else {
919     //if (parttime > 155 && parttime < 171 && timeleft > 132)
920     if (parttime > 30 && parttime < 46 && timeleft > 132) {
921     set_task(10.0, "messagemaps", 986200, "", 0, "a", 1);
922     } else if (timeleft >= 117 && timeleft < 132) {
923     messagefifteen();
924     }
925     }
926     return PLUGIN_CONTINUE;
927     }
928    
929     // THIS IS UNTESTED, BUT SHOULD WORK
930     /* 1.6 hudtext function
931     Arguments:
932     textblock: a string containing the text to print, not more than 512 chars (a small calc shows that the max number of letters to be displayed is around 270 btw)
933     colr, colg, colb: color to print text in (RGB format)
934     posx, posy: position on screen * 1000 (if you want text to be displayed centered, enter -1000 for both, text on top will be posx=-1000 & posy=20
935     screen: the screen to write to, hl supports max 4 screens at a time, do not use screen+0 to screen+3 for other hudstrings while displaying this one
936     time: how long the text shoud be displayed (in seconds)
937     */
938    
939     public hudtext16(textblock[] ,colr, colg, colb, posx, posy, screen, time, id) {
940     new y;
941     if (contain(textblock, "^n") == -1) { // if there is no linebreak in the text, we can just show it as it is
942     set_hudmessage(colr, colg, colb, float(posx) / 1000.0, float(posy) / 1000.0, 0, 6.0, float(time), 0.2, 0.2, screen);
943     show_hudmessage(id, textblock);
944     } else { // more than one line
945     new out[128], rowcounter = 0, tmp[512], textremain = true;
946     y = screen;
947     new i = contain(textblock, "^n");
948     copy(out, i, textblock); // we need to get the first line of text before the loop
949     do { // this is the main print loop
950     setc(tmp, 511, 0); // reset string
951     copy(tmp, 511, textblock[i + 1]); // copy everything AFTER the first linebreak (hence the +1, we don't want the linebreak in our new string)
952     setc(textblock, 511, 0); // reset string
953     copy(textblock, 511, tmp); // copy back remaining text
954     i = contain(textblock, "^n"); // get next linebreak position
955     if ((strlen(out) + i < 64) && (i != -1)) { // we can add more lines to the outstring if total letter count don't exceed 64 chars (decrease if you have a lot of short lines since the leading linbreaks for following lines also take up one char in the string)
956     add(out, 127, "^n"); // add a linebreak before next row
957     add(out, strlen(out) + i, textblock);
958     rowcounter++; // we now have one more row in the outstring
959     } else { // no more lines can be added
960     set_hudmessage(colr, colg, colb, float(posx) / 1000.0, float(posy) / 1000.0, 0, 6.0, float(time), 0.2, 0.2, screen); // format our hudmsg
961     if ((i == -1) && (strlen(out) + strlen(textblock) < 64)) {
962     add(out, 127, "^n"); // if i == -1 we are on the last line, this line is executed if the last line can be added to the current string (total chars < 64)
963     } else { // not the last line or last line must have it's own screen
964     if (screen-y < 4) {
965     show_hudmessage(id, out); // we will only print the hudstring if we are under the 4 screen limit
966     }
967     screen++; // go to next screen after printing this one
968     rowcounter++; // one more row
969     setc(out, 127, 0); // reset string
970     for (new j = 0; j < rowcounter; j++) {
971     add(out, 127, "^n"); // add leading linebreaks equal to the number of rows we already printed
972     }
973     if (i == -1) {
974     set_hudmessage(colr, colg, colb, float(posx) / 1000.0, float(posy) / 1000.0, 0, 6.0, float(time), 0.2, 0.2, screen); // format our hudmsg if we are on the last line
975     } else {
976     add(out, strlen(out) + i, textblock); // else add the next line to the outstring, before this, out is empty (or have some leading linebreaks)
977     }
978     }
979     if (i == -1) { // apparently we are on the last line here
980     add(out, strlen(out) + strlen(textblock), textblock); // add the last line to out
981     if (screen - y < 4) show_hudmessage(id, out); // we will only print the hudstring if we are under the 4 screen limit
982     textremain = false; // we have no more text to print
983     }
984     }
985     } while (textremain);
986     }
987     return screen - y; // we will return how many screens of text we printed
988     }
989    
990     public messagenominated() {
991     if (quiet == 2) {
992     return PLUGIN_CONTINUE;
993     }
994    
995     new string[256], string2[256], string3[512];
996     if (nmaps_num < 1) {
997     format(string3, 511, "%L", LANG_PLAYER, "DMAP_NO_MAPS_NOMINATED");
998     } else {
999     new n = 0, foundone = 0;
1000     format(string, 255, "%L", LANG_PLAYER, "DMAP_NOMINATIONS");
1001     while (n < 3 && n < nmaps_num) {
1002     format(string, 255, "%s %s", string, nmaps[n++]);
1003     }
1004     while (n < 6 && n < nmaps_num) {
1005     foundone = 1;
1006     format(string2, 255, "%s %s", string2, nmaps[n++]);
1007     }
1008     if (foundone) {
1009     format(string3, 511, "%s^n%s", string, string2);
1010     } else {
1011     format(string3, 511, "%s", string);
1012     }
1013     }
1014     hudtext16(string3, random_num(0, 222), random_num(0, 111), random_num(111, 222), -1000, 50, random_num(1, 4), 10, 0);
1015     return PLUGIN_CONTINUE;
1016     }
1017    
1018     public listnominations(id) {
1019     if (get_pcvar_num(nominations_allowed) == 1) {
1020     new a = 0, string3[512], string1[128], temp[256];
1021     if (a < nmaps_num) {
1022     //show_hudmessage(id, "The following maps have been nominated for the next map vote:");
1023     format(temp, 255, "%L", LANG_PLAYER, "DMAP_NOMINATED_MAPS");
1024     add(string3, 511, temp);
1025     }
1026     while (a < nmaps_num) {
1027     new name1[33];
1028     get_user_name(whonmaps_num[a], name1, 32);
1029     //set_hudmessage(255, 0, 0, 0.12, 0.3 + 0.08 * float(a), 0, 15.0, 15.04, 1.5, 3.75, 2 + a);
1030     //show_hudmessage(id, "%s by: %s", nmaps[a], name1);
1031     format(string1, 128, "%L", LANG_PLAYER, "DMAP_MAP_BY", nmaps[a], name1);
1032     add(string3, 511, string1, 100);
1033     a++;
1034     }
1035     hudtext16(string3, random_num(0, 222), random_num(0, 111), random_num(111, 222), 300, 10, random_num(1, 4), 15, id);
1036     }
1037     }
1038    
1039     public messagemaps() {
1040     if (quiet == 2) {
1041     return PLUGIN_CONTINUE;
1042     }
1043    
1044     new string[256], string2[256], string3[512];
1045     new n = 0;
1046     new total = 0;
1047    
1048     if ((totalmaps - 6) > 0) {
1049     n = random_num(0, totalmaps - 6);
1050     }
1051     while (total < 3 && total < totalmaps && is_map_valid(listofmaps[n]) && n < totalmaps) {
1052     if (!islastmaps(listofmaps[n]) && !isbanned(listofmaps[n]) && !isnominated(listofmaps[n])) {
1053     format(string, 255, "%s %s", string, listofmaps[n]);
1054     total++;
1055     }
1056     n++;
1057     }
1058     while (total < 6 && n < totalmaps && is_map_valid(listofmaps[n]) && !isnominated(listofmaps[n])) {
1059     if (!islastmaps(listofmaps[n]) && !isbanned(listofmaps[n])) {
1060     format(string2, 255, "%s %s", string2, listofmaps[n]);
1061     total++;
1062     }
1063     n++;
1064     }
1065     if (total > 0) {
1066     //show_hudmessage(0, "The following maps are available to nominate:^n%s", string);
1067     new temp[256];
1068     format(temp, 255, "%L", LANG_PLAYER, "DMAP_AVAILABLE_MAPS");
1069     add(string3, 511, temp, 100);
1070     add(string3, 511, string, 100);
1071     add(string3, 511, "^n");
1072     }
1073     if (total > 3) {
1074     add(string3, 511, string2, 100);
1075     }
1076    
1077     hudtext16(string3, random_num(0, 222), random_num(0, 111), random_num(111, 222), -1000, 50, random_num(1, 4), 10, 0);
1078     return PLUGIN_CONTINUE;
1079     }
1080    
1081     public messagefifteen() {
1082     if (quiet == 2) {
1083     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_IN_15SEC");
1084     return PLUGIN_HANDLED;
1085     }
1086     set_hudmessage(0, 222, 50, -1.0, 0.23, 1, 6.5, 6.5, 1.0, 3.0, 4);
1087     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_VOTING_IN_15SEC");
1088     if (quiet == 0) {
1089     client_cmd(0, "spk ^"get red(e80) ninety(s45) to check(e20) use bay(s18) mass(e42) cap(s50)^"");
1090     }
1091     set_task(8.7, "getready", 459100);
1092     return PLUGIN_HANDLED;
1093     }
1094    
1095     public getready() {
1096     if (!cycle) {
1097     set_task(0.93, "timetovote", 459200, "", 0, "a", 5);
1098     }
1099     }
1100    
1101     public timetovote() {
1102     counttovote++;
1103     new speak[5][] = {"one", "two", "three", "four", "five"};
1104    
1105     if (get_timeleft() > 132 || counttovote > 5 || cycle || isbuytime) {
1106     counttovote = 0;
1107     remove_task(459200);
1108     remove_task(459100);
1109     return PLUGIN_HANDLED;
1110     } else {
1111     if (counttovote > 0 && counttovote <= 5) {
1112     set_hudmessage(0, 222, 50, -1.0, 0.13, 0, 1.0, 0.94, 0.0, 0.0, 4);
1113     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_VOTING_IN_XSEC", 6 - counttovote);
1114     if (quiet != 1) {
1115     client_cmd(0, "spk ^"fvox/%s^"", speak[5 - counttovote]);
1116     }
1117     }
1118     }
1119     return PLUGIN_HANDLED;
1120     }
1121    
1122     available_maps() { //return number of maps that havent that have been added yet
1123     new num = 0, isinlist;
1124     new current_map[32], a, i;
1125     get_mapname(current_map, 31);
1126     for (a = 0; a < num_nmapsfill; a++) {
1127     if (is_map_valid(nmapsfill[a])) {
1128     isinlist = 0;
1129     for (i = 0; i < nmaps_num; i++) {
1130     if (equali(nmapsfill[a], nmaps[i])) {
1131     isinlist = 1;
1132     }
1133     }
1134     if (!isinlist) {
1135     num++;
1136     }
1137     }
1138     }
1139     return num;
1140     }
1141    
1142     public askfornextmap() {
1143     display_message();
1144     new timeleft = get_timeleft();
1145    
1146     if (isspeedset && timeleft > 30) {
1147     isspeedset = 0;
1148     set_cvar_float("sv_maxspeed", thespeed);
1149     }
1150     if (waited > 0) {
1151     return PLUGIN_HANDLED;
1152     }
1153     if (timeleft > 300) {
1154     isend = 0;
1155     remove_task(123452);
1156     }
1157     new mp_winlimit = get_cvar_num("mp_winlimit");
1158     if (mp_winlimit) {
1159     new s = mp_winlimit - 2;
1160     if ((s > teamscore[0] && s > teamscore[1]) && (timeleft > 114 || timeleft < 1)) {
1161     remove_task(454500);
1162     mselected = false;
1163     return PLUGIN_HANDLED;
1164     }
1165     } else {
1166     if (timeleft > 114 || timeleft < 1) {
1167     if (timeleft > 135) {
1168     remove_task(454510);
1169     remove_task(454500);
1170     remove_task(123499);
1171     } else {
1172     remove_task(454500);
1173     }
1174     mselected = false;
1175     return PLUGIN_HANDLED;
1176     }
1177     }
1178     if (inprogress || mselected || cycle) {
1179     return PLUGIN_HANDLED;
1180     }
1181     mselected = false;
1182     inprogress = 1;
1183     if (mp_winlimit && !(timeleft >= 115 && timeleft < 134)) {
1184     if (quiet != 2) {
1185     set_hudmessage(0, 222, 50, -1.0, 0.13, 1, 6.0, 6.0, 1.0, 1.0, 4);
1186     show_hudmessage(0, "%L", LANG_PLAYER, "DMAP_START_MAPVOTE");
1187     if (quiet != 1) {
1188     client_cmd(0, "spk ^"get red(e80) ninety(s45) to check(e20) use bay(s18) mass(e42) cap(s50)^"");
1189     }
1190     set_task(4.2, "getready", 459100);
1191     set_task(10.0, "startthevote");
1192     } else {
1193     set_task(1.0, "startthevote");
1194     }
1195     } else {
1196     set_task(0.5, "startthevote");
1197     }
1198     return PLUGIN_HANDLED;
1199     }
1200    
1201     public startthevote() {
1202     new mp_winlimit = get_cvar_num("mp_winlimit"), j;
1203     if (cycle) {
1204     inprogress = 0;
1205     mselected = false;
1206     remove_task(459200);
1207     remove_task(459100);
1208     new smap[32];
1209     get_cvar_string("amx_nextmap", smap, 31);
1210     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NEXTMAP2", smap);
1211     return PLUGIN_HANDLED;
1212     }
1213     for (j = 0; j < maps_to_select + 2; j++) {
1214     nvotes[j] = 0;
1215     }
1216     mselected = true;
1217     inprogress = 1;
1218     counttovote = 0;
1219     if ((isbuytime || isbetween) && get_timeleft() && get_timeleft() > 54 && get_pcvar_num(weapon_delay)) {
1220     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_DELAYED");
1221     if (isbetween) {
1222     set_task(15.0, "getready", 459100);
1223     set_task(21.0, "startthevote");
1224     } else {
1225     set_task(8.0, "getready", 459100);
1226     set_task(14.0, "startthevote");
1227     }
1228     return PLUGIN_HANDLED;
1229     } //else startthevote anyways..., regardless of buytime
1230    
1231     remove_task(459200);
1232     remove_task(459100);
1233    
1234     if (quiet != 2) {
1235     if (is_cstrike) {
1236     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_POSSIBLE_NOMINATIONS", nmaps_num, maps_to_select);
1237     }
1238     }
1239    
1240     #if defined DEDICATED_LOG_ENABLED
1241     log_to_file(logfilename, "Nominations for the map vote: %d out of %d possible nominations", nmaps_num, maps_to_select);
1242     #endif
1243    
1244     before_num_nmapsfill = num_nmapsfill;
1245     new available = available_maps();
1246    
1247     if ((nmaps_num + available) < (maps_to_select + 1)) { //Loads maps from mapcycle.txt/allmaps.txt if not enough are in in mapchoice.ini
1248    
1249     new current_map[32];
1250     get_mapname(current_map,31);
1251     new overflowprotect = 0;
1252     new used[MAX_MAPS_AMOUNT];
1253     new k = num_nmapsfill;
1254     new totalfilled = 0;
1255     new alreadyused;
1256     new tryfill, custfill = 0;
1257     new q;
1258     new listpossible = totalmaps;
1259     while (((available_maps() + nmaps_num - custfill) < (maps_to_select + 7)) && listpossible > 0) {
1260     alreadyused = 0;
1261     q = 0;
1262     tryfill = random_num(0, totalmaps - 1);
1263     overflowprotect = 0;
1264     while (used[tryfill] && overflowprotect++ <= totalmaps * 15) {
1265     tryfill = random_num(0, totalmaps - 1);
1266     }
1267     if (overflowprotect >= totalmaps * 15) {
1268     alreadyused = 1;
1269     #if defined DEDICATED_LOG_ENABLED
1270     log_to_file(logfilename, "Overflow detected in Map Nominate plugin, there might not be enough maps in the current vote");
1271     #endif
1272     listpossible -= 1;
1273     } else {
1274     while (q < num_nmapsfill && !alreadyused) {
1275     if (equali(listofmaps[tryfill], nmapsfill[q])) {
1276     alreadyused = used[tryfill] = 1;
1277     listpossible--;
1278     }
1279     q++;
1280     }
1281     q = 0;
1282     while (q < nmaps_num && !alreadyused) {
1283     if (equali(listofmaps[tryfill], nmaps[q])) {
1284     alreadyused = used[tryfill] = 1;
1285     listpossible--;
1286     }
1287     q++;
1288     }
1289     }
1290    
1291     if (!alreadyused) {
1292     if (equali(listofmaps[tryfill], current_map) || equali(listofmaps[tryfill], last_map)||
1293     islastmaps(listofmaps[tryfill]) || isbanned(listofmaps[tryfill])) {
1294     listpossible--;
1295     used[tryfill] = 1;
1296     } else {
1297     if (iscustommap(listofmaps[tryfill])) {
1298     custfill++;
1299     }
1300     nmapsfill[k] = listofmaps[tryfill];
1301     num_nmapsfill++;
1302     listpossible--;
1303     used[tryfill] = 1;
1304     k++;
1305     totalfilled++;
1306     }
1307     }
1308     }
1309     #if defined DEDICATED_LOG_ENABLED
1310     log_to_file(logfilename, "Filled %d slots in the fill maps array with maps from mapcycle.txt, %d are custom", totalfilled, custfill);
1311     #endif
1312     }
1313    
1314     nbeforefill = nmaps_num; //extra maps do not act as "nominations" they are additions
1315    
1316     if (nmaps_num < maps_to_select) {
1317    
1318     new need = maps_to_select - nmaps_num;
1319     console_print(0, "%L", LANG_PLAYER, "DMAP_RANDOM_MAPSELECTION", need);
1320     #if defined DEDICATED_LOG_ENABLED
1321     log_to_file(logfilename, "Randomly Filling slots for the vote with %d out of %d", need, num_nmapsfill);
1322     #endif
1323     new fillpossible = num_nmapsfill;
1324     new k = nmaps_num;
1325     new overflowprotect = 0;
1326     new used[MAX_MAPS_AMOUNT];
1327     new totalfilled = 0, custchoice = 0, full = ((amt_custom + custchoice) >= maxcustnom);
1328     new alreadyused;
1329     new tryfill;
1330     if (num_nmapsfill < 1) {
1331     if (quiet != 2) {
1332     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NOMORE_RANDOM_DEFINED");
1333     }
1334     #if defined DEDICATED_LOG_ENABLED
1335     log_to_file(logfilename, "ERROR: Unable to fill any more voting slots with random maps, none defined in mapchoice.ini/allmaps.txt/mapcycle.txt");
1336     #endif
1337     } else {
1338     while (fillpossible > 0 && k < maps_to_select) {
1339     alreadyused = 0;
1340     new q = 0;
1341     tryfill = random_num(0, num_nmapsfill - 1);
1342     overflowprotect = 0;
1343     while (used[tryfill] && overflowprotect++ <= num_nmapsfill * 10) {
1344     tryfill = random_num(0, num_nmapsfill - 1);
1345     }
1346     if (overflowprotect >= num_nmapsfill * 15) {
1347     alreadyused = 1;
1348     #if defined DEDICATED_LOG_ENABLED
1349     log_to_file(logfilename, "Overflow detected in Map Nominate plugin, there might not be enough maps in the current vote");
1350     #endif
1351     fillpossible -= 2;
1352     } else {
1353     while (q < nmaps_num && !alreadyused) {
1354     if (equali(nmapsfill[tryfill], nmaps[q])) {
1355     alreadyused = used[tryfill] = 1;
1356     fillpossible--;
1357     }
1358     q++;
1359     }
1360     if (!alreadyused) {
1361     if (iscustommap(nmapsfill[tryfill]) && full) {
1362     alreadyused = used[tryfill] = 1;
1363     fillpossible--;
1364     }
1365     }
1366     }
1367    
1368     if (!alreadyused) {
1369     if (iscustommap(nmapsfill[tryfill])) {
1370     custchoice++;
1371     full = ((amt_custom + custchoice) >= maxcustnom);
1372     }
1373     nmaps[k] = nmapsfill[tryfill];
1374     nmaps_num++;
1375     fillpossible--;
1376     used[tryfill] = 1;
1377     k++;
1378     totalfilled++;
1379     }
1380     }
1381    
1382     if (totalfilled == 0) {
1383     console_print(0, "%L", LANG_PLAYER, "DMAP_NO_DEFAULTMAPS_FOUND");
1384     } else {
1385     if (quiet != 2) {
1386     console_print(0, "%L", LANG_PLAYER, "DMAP_FILLED_RANDOM_MAPS", totalfilled);
1387     }
1388     }
1389     #if defined DEDICATED_LOG_ENABLED
1390     log_to_file(logfilename, "Filled %d vote slots with random maps, %d are custom", totalfilled, custchoice);
1391     #endif
1392     }
1393     }
1394    
1395     new menu[512], a, mkeys = (1 << maps_to_select + 1);
1396     new Float:steptime = get_cvar_float("amx_extendmap_step");
1397     new extendint = floatround(steptime);
1398    
1399     //new pos = copy(menu, 511, cstrike_running ? "\yAMX Choose nextmap:\w^n^n" : "AMX Choose nextmap:^n^n");
1400     //ERROR LIES BELOW cstrike_running
1401     new pos;
1402    
1403     if (cstrike_running() == 1) {
1404     pos = format(menu, 511, "%L", LANG_PLAYER, "DMAP_CS_MENU_TITLE");
1405     } else {
1406     pos = format(menu, 511, "%L", LANG_PLAYER, "DMAP_MENU_TITLE");
1407     }
1408    
1409     new dmax = (nmaps_num > maps_to_select) ? maps_to_select : nmaps_num;
1410    
1411     for (nmapstoch = 0; nmapstoch < dmax; ++nmapstoch) {
1412     a = random_num(0, nmaps_num - 1);
1413     while (isinmenu(a)) {
1414     if (++a >= nmaps_num) {
1415     a = 0;
1416     }
1417     }
1418     nnextmaps[nmapstoch] = a;
1419     if (iscustommap(nmaps[a]) && usestandard) {
1420     if (cstrike_running() == 1) {
1421     pos += format(menu[pos], 511, "%L", LANG_PLAYER, "DMAP_CS_MENU_CUSTOM", nmapstoch + 1, nmaps[a]);
1422     } else {
1423     pos += format(menu[pos], 511, "%L", LANG_PLAYER, "DMAP_MENU_CUSTOM", nmapstoch + 1, nmaps[a]);
1424     }
1425     } else {
1426     pos += format(menu[pos], 511, "%d. %s^n", nmapstoch + 1, nmaps[a]);
1427     }
1428     mkeys |= (1 << nmapstoch);
1429     nvotes[nmapstoch] = 0;
1430     }
1431    
1432     menu[pos++] = '^n';
1433     nvotes[maps_to_select] = 0;
1434     nvotes[maps_to_select + 1] = 0;
1435     new mapname[32];
1436     get_mapname(mapname, 31);
1437     if (!mp_winlimit && get_cvar_float("mp_timelimit") < get_cvar_float("amx_extendmap_max")) {
1438     pos += format(menu[pos], 511, "%L", LANG_PLAYER, "DMAP_MENU_EXTEND", maps_to_select + 1, mapname, extendint);
1439     mkeys |= (1 << maps_to_select);
1440     }
1441    
1442     format(menu[pos], 511, "%L", LANG_PLAYER, "DMAP_MENU_NONE", maps_to_select + 2);
1443     show_menu(0, mkeys, menu, 19);
1444     set_task(20.0, "check_votes"); //set_task(15.0, "check_votes")
1445     if (is_cstrike) {
1446     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_TIME_TO_CHOOSE");
1447     }
1448     if (quiet == 0) {
1449     client_cmd(0, "spk Gman/Gman_Choose%d", random_num(1, 2));
1450     }
1451     #if defined DEDICATED_LOG_ENABLED
1452     log_to_file(logfilename, "Vote: Voting for the nextmap started");
1453     #endif
1454     return PLUGIN_HANDLED;
1455     }
1456    
1457     public handle_andchange(id, map2[]) {
1458     new tester[128];
1459     if (is_map_valid(map2) == 1) {
1460     handle_nominate(id, map2);
1461     } else {
1462     format(tester, 31, "cs_%s", map2);
1463     if (is_map_valid(tester) == 1) {
1464     handle_nominate(id, tester);
1465     } else {
1466     format(tester, 31, "de_%s", map2);
1467     if (is_map_valid(tester) == 1) {
1468     handle_nominate(id, tester);
1469     } else {
1470     format(tester, 31, "as_%s", map2);
1471     if (is_map_valid(tester) == 1) {
1472     handle_nominate(id, tester);
1473     } else {
1474     format(tester, 31, "dod_%s", map2);
1475     if (is_map_valid(tester) == 1) {
1476     handle_nominate(id, tester);
1477     } else {
1478     format(tester, 31, "fy_%s", map2);
1479     if (is_map_valid(tester) == 1) {
1480     handle_nominate(id, tester);
1481     } else {
1482     handle_nominate(id, map2);
1483     }
1484     }
1485     }
1486     }
1487     }
1488     }
1489     }
1490    
1491     public HandleSay(id) {
1492    
1493     new chat[256];
1494     read_args(chat, 256);
1495     new saymap[256];
1496     saymap = chat;
1497     remove_quotes(saymap);
1498     new saymap2[28];
1499     read_args(saymap2,28);
1500     remove_quotes(saymap2);
1501     new chat2[32];
1502     format(chat2, 31, "cs_%s", saymap2);
1503     if (containi(chat, "<") != -1 || containi(chat, "?") != -1 || containi(chat, ">") != -1 || containi(chat, "*") != -1 || containi(chat, "&") != -1 || containi(chat, ".") != -1) {
1504     return PLUGIN_CONTINUE;
1505     }
1506     if (containi(chat, "nominations") != -1) {
1507     if (get_pcvar_num(nominations_allowed) == 0) {
1508     client_print(id, print_chat, "Nominations are not currently allowed, maps will be chosen randomly");
1509     return PLUGIN_HANDLED;
1510     }
1511     if (mselected) {
1512     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTE_IN_PROGRESS");
1513     } else {
1514     if (nmaps_num == 0) {
1515     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_NO_NOMINATIONS");
1516     } else {
1517     listnominations(id);
1518     }
1519     }
1520     } else {
1521     if (containi(chat, "nominate ") == 1) {
1522     new mycommand[32];
1523     read_args(mycommand, 32);
1524     remove_quotes(mycommand);
1525     handle_andchange(id, mycommand[9]);
1526     } else {
1527     if (containi(chat, "vote ") == 1) {
1528     new mycommand[32];
1529     read_args(mycommand, 32);
1530     remove_quotes(mycommand);
1531     handle_andchange(id, mycommand[5]);
1532     } else {
1533     if (is_map_valid(saymap) == 1) {
1534     handle_nominate(id, saymap);
1535     } else {
1536     format(chat2, 31, "cs_%s", saymap2);
1537     if (is_map_valid(chat2) == 1) {
1538     handle_nominate(id, chat2);
1539     } else {
1540     format(chat2, 31, "de_%s", saymap2);
1541     if (is_map_valid(chat2) == 1) {
1542     handle_nominate(id, chat2);
1543     } else {
1544     format(chat2, 31, "as_%s", saymap2);
1545     if (is_map_valid(chat2) == 1) {
1546     handle_nominate(id, chat2);
1547     } else {
1548     format(chat2, 31, "dod_%s", saymap2);
1549     if (is_map_valid(chat2) == 1) {
1550     handle_nominate(id, chat2);
1551     } else {
1552     format(chat2, 31, "fy_%s", saymap2);
1553     if (is_map_valid(chat2) == 1) {
1554     handle_nominate(id, chat2);
1555     }
1556     }
1557     }
1558     }
1559     }
1560     }
1561     }
1562     }
1563     }
1564     return PLUGIN_CONTINUE;
1565     }
1566    
1567     public calculate_custom() {
1568     //New optional protection against "too many" custom maps being nominated.
1569     amt_custom = 0;
1570     new i;
1571     for (i = 0; i < nmaps_num; i++) {
1572     if (iscustommap(nmaps[i])) {
1573     amt_custom++;
1574     }
1575     }
1576     }
1577    
1578     public handle_nominate(id, map[]) {
1579     if (get_pcvar_num(nominations_allowed) == 0) {
1580     client_print(id, print_chat, "Nominations are not currently allowed");
1581     return PLUGIN_HANDLED;
1582     }
1583     strtolower(map);
1584     new current_map[32], iscust = 0, iscust_t = 0, full;
1585     full = (amt_custom >= maxcustnom);
1586     new n = 0, i, done = 0, isreplacement = 0; //0: (not a replacement), 1: (replacing his own), 2: (replacing others)
1587     new tempnmaps = nmaps_num;
1588     get_mapname(current_map, 31);
1589     if (maxnom == 0) {
1590     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_NOMINATIONS_DISABLED");
1591     return PLUGIN_HANDLED;
1592     }
1593     if (inprogress && mselected) {
1594     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_IN_PROGRESS");
1595     return PLUGIN_HANDLED;
1596     }
1597     if (mselected) {
1598     new smap[32];
1599     get_cvar_string("amx_nextmap", smap, 31);
1600     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_VOTING_OVER", smap);
1601     return PLUGIN_HANDLED;
1602     }
1603     if (!is_map_valid(map) || is_map_valid(map[1])) {
1604     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAP_NOTFOUND", map);
1605     return PLUGIN_HANDLED;
1606     }
1607     if (isbanned(map)) {
1608     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAPVOTE_NOT_AVAILABLE");
1609     return PLUGIN_HANDLED;
1610     }
1611     if (islastmaps(map) && !equali(map, current_map)) {
1612     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_CANT_NOMINATE_LASTMAP", ban_last_maps);
1613     return PLUGIN_HANDLED;
1614     }
1615     if (equali(map, current_map)) {
1616     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_EXTEND_MAP", map);
1617     return PLUGIN_HANDLED;
1618     }
1619     //Insert Strict Style code here, for pcvar dmap_strict 1
1620     if (get_pcvar_num(dmap_strict)) {
1621     new isinthelist = 0;
1622     for (new a = 0; a < totalmaps; a++) {
1623     if (equali(map, listofmaps[a]))
1624     isinthelist = 1;
1625     }
1626     if (!isinthelist) {
1627     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_ALLOWED_MAPS");
1628     return PLUGIN_HANDLED;
1629     }
1630     }
1631     iscust = iscustommap(map);
1632     if (nmaps_num >= maps_to_select || Nominated[id] >= maxnom) { //3 (1,2,3)
1633     if (Nominated[id] > maxnom) { //3
1634     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAX_MAPS_REACHED"); //Possible to reach here!
1635     //only if the command dmap_nominations is used to lower amount of maps that can be nominated
1636     return PLUGIN_HANDLED;
1637     }
1638    
1639     for (i = 0; i < nmaps_num; i++) {
1640     if (equali(map, nmaps[i])) {
1641    
1642     new name[32];
1643     get_user_name(whonmaps_num[i], name, 32);
1644     if (quiet == 2) {
1645     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_ALREADY_NOMINATED", map, name);
1646     } else {
1647     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_ALREADY_NOMINATED", map, name);
1648     }
1649     return PLUGIN_HANDLED;
1650     }
1651     }
1652    
1653     while (n < nmaps_num && !done && Nominated[id] > 1) { //If the person has nominated 2 or 3 maps, he can replace his own
1654     if (whonmaps_num[n] == id) { //If a map is found that he has nominated, replace his own nomination.
1655     iscust_t = iscustommap(nmaps[n]);
1656     if (!(full && iscust && !iscust_t)) {
1657     Nominated[id] = Nominated[id] - 1;
1658     nmaps_num = n;
1659     done = 1;
1660     isreplacement = 1;
1661     }
1662     }
1663     n++;
1664     }
1665    
1666     if (!done) {
1667     n = 0;
1668     while (n < nmaps_num && !done && Nominated[id] < 2) { //If the person has nom only 1 or no maps, he can replace ppl who nominated 3
1669     if (Nominated[whonmaps_num[n]] > 2) { //Replace the "greedy person's" nomination
1670     iscust_t = iscustommap(nmaps[n]);
1671     if (!(full && iscust && !iscust_t)) {
1672     done = 1;
1673     Nominated[whonmaps_num[n]] = Nominated[whonmaps_num[n]] - 1;
1674     nmaps_num = n;
1675     isreplacement = 2;
1676     }
1677     }
1678     n++;
1679     }
1680     }
1681     if (!done) {
1682     n = 0;
1683    
1684     while (n < nmaps_num && !done && Nominated[id] < 1) { //If the person has not nom any maps, he can replace those with more than one
1685     //he cannot replace those with only one nomination, that would NOT be fair
1686    
1687     if (Nominated[whonmaps_num[n]] > 1) { //Replace the "greedy person's" nomination
1688     iscust_t = iscustommap(nmaps[n]);
1689     if (!(full && iscust && !iscust_t)) {
1690     done = 1;
1691     Nominated[whonmaps_num[n]] = Nominated[whonmaps_num[n]] - 1;
1692     nmaps_num = n;
1693     isreplacement = 2;
1694     }
1695     }
1696     n++;
1697     }
1698     }
1699    
1700     if (!done) {
1701     n = 0;
1702    
1703     while (n < nmaps_num && !done && Nominated[id] > 0) { //If the person has nominated a map, he can replace his own
1704     if (whonmaps_num[n] == id) { //If a map is found that he has nominated, replace his own nomination.
1705     iscust_t = iscustommap(nmaps[n]);
1706     if (!(full && iscust && !iscust_t)) { //Check to see if too many custom maps are nominated
1707     Nominated[id] = Nominated[id] - 1;
1708     nmaps_num = n;
1709     done = 1;
1710     isreplacement = 1;
1711     }
1712     }
1713     n++;
1714     }
1715     }
1716     if (!done) {
1717     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAX_NOMINATIONS_REACHED", nmaps_num);
1718     return PLUGIN_HANDLED;
1719     }
1720     }
1721    
1722     for (i = 0; i < nmaps_num; i++) {
1723     if (equali(map, nmaps[i])) {
1724     new name[32];
1725     get_user_name(whonmaps_num[i], name, 32);
1726    
1727     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_ALREADY_NOMINATED", map, name);
1728    
1729     nmaps_num = tempnmaps;
1730    
1731     return PLUGIN_HANDLED;
1732     }
1733     }
1734    
1735     if (!isreplacement && iscust && full) {
1736     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MAX_CUSTOMMAPS_REACHED", maxcustnom);
1737     return PLUGIN_HANDLED;
1738     }
1739    
1740     new name[32];
1741     get_user_name(id, name, 21);
1742     if (isreplacement == 1) { //They are replacing their old map
1743     if (quiet == 2) {
1744     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_REPLACE_PREVIOUS_NOMINATION", nmaps[nmaps_num]);
1745     } else {
1746     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_PLAYER_REPLACED_NOMINATION", name, nmaps[nmaps_num]);
1747     }
1748     } else {
1749     if (isreplacement == 2) {
1750     if (quiet == 2) {
1751     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NOMINATION_REPLACED", nmaps[nmaps_num]);
1752     } else {
1753     new name21[32];
1754     get_user_name(whonmaps_num[nmaps_num], name21, 31);
1755     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NOMINATION_REPLACED2", name21, nmaps[nmaps_num]);
1756     }
1757     }
1758     }
1759    
1760     Nominated[id]++;
1761    
1762     console_print(id, "%L", LANG_PLAYER, "DMAP_ADD_NOMINATION", map, nmaps_num + 1);
1763    
1764     set_task(0.18, "calculate_custom");
1765     copy(nmaps[nmaps_num], 31, map);
1766     whonmaps_num[nmaps_num] = id;
1767    
1768     if (isreplacement) {
1769     nmaps_num = tempnmaps;
1770     } else {
1771     nmaps_num = tempnmaps + 1;
1772     }
1773     client_print(0, print_chat, "%L", LANG_PLAYER, "DMAP_NOMINATED_MAP", name, map);
1774    
1775     return PLUGIN_HANDLED;
1776     }
1777    
1778     public team_score() {
1779    
1780     new team[2];
1781     read_data(1, team, 1);
1782     teamscore[(team[0] == 'C') ? 0 : 1] = read_data(2);
1783    
1784     return PLUGIN_CONTINUE;
1785     }
1786    
1787     public plugin_end() {
1788     new current_map[32];
1789     get_mapname(current_map, 31);
1790     set_localinfo("amx_lastmap", current_map);
1791    
1792     if (istimeset) {
1793     set_cvar_float("mp_timelimit", oldtimelimit);
1794     } else {
1795     if (istimeset2) {
1796     set_cvar_float("mp_timelimit", get_cvar_float("mp_timelimit") - 2.0);
1797     }
1798     }
1799     if (isspeedset) {
1800     set_cvar_float("sv_maxspeed", thespeed);
1801     }
1802     if (iswinlimitset) {
1803     set_cvar_num("mp_winlimit", oldwinlimit);
1804     }
1805     return PLUGIN_CONTINUE;
1806     }
1807    
1808     public get_listing() {
1809     new i = 0, iavailable = 0;
1810     new line = 0, p;
1811     new stextsize = 0, isinthislist = 0, found_a_match = 0, done = 0;
1812     new linestr[256];
1813     new maptext[32];
1814     new current_map[32];
1815     get_mapname(current_map, 31);
1816     //pathtomaps = "mapcycle.txt";
1817     get_cvar_string("mapcyclefile", pathtomaps, 63);
1818     new smap[32];
1819     get_cvar_string("amx_nextmap", smap, 31);
1820     if (file_exists(pathtomaps)) {
1821     while (read_file(pathtomaps, line, linestr, 255, stextsize) && !done) {
1822     format(maptext, 31, "%s", linestr);
1823     if (is_map_valid(maptext) && !is_map_valid(maptext[1]) && equali(maptext, current_map)) {
1824     done = found_a_match = 1;
1825     line++;
1826     if (read_file(pathtomaps, line, linestr, 255, stextsize)) {
1827     format(maptext, 31, "%s", linestr);
1828     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1829     //////////////////////////////////////////
1830     if (equali(smap, "")) {
1831     register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
1832     }
1833     set_cvar_string("amx_nextmap", maptext);
1834     } else {
1835     found_a_match = 0;
1836     }
1837     } else {
1838     found_a_match = 0;
1839     }
1840     } else {
1841     line++;
1842     }
1843     }
1844     /*
1845     if (!found_a_match) {
1846     line = 0;
1847     while (read_file(pathtomaps, line, linestr, 255, stextsize) && !found_a_match && line < 1024) {
1848     format(maptext, 31, "%s", linestr);
1849     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1850     if (equali(smap, "")) {
1851     register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
1852     }
1853     set_cvar_string("amx_nextmap", maptext);
1854     found_a_match = 1;
1855     } else {
1856     line++;
1857     }
1858     }
1859     }
1860     */
1861     /* CODE TO RANDOMIZE NEXTMAP VARIABLE!*/
1862     if (!found_a_match) {
1863     line = random_num(0, 50);
1864     new tries = 0;
1865    
1866     while ((read_file(pathtomaps, line, linestr, 255, stextsize) || !found_a_match) && (tries < 1024 && !found_a_match)) {
1867     format(maptext, 31, "%s", linestr);
1868     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1869     if (equali(smap, "")) {
1870     register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);
1871     }
1872     set_cvar_string("amx_nextmap", maptext);
1873     found_a_match = 1;
1874     } else {
1875     line = random_num(0, 50);
1876     tries++;
1877     }
1878     }
1879     }
1880     }
1881    
1882     line = 0;
1883     format(pathtomaps, 64, "%s/allmaps.txt", custompath);
1884     if (!file_exists(pathtomaps)) {
1885     new mapsadded = 0;
1886     while ((line = read_dir("maps", line, linestr, 255, stextsize)) != 0) {
1887     stextsize -= 4;
1888    
1889     if (stextsize > 0) {
1890     if (!equali(linestr[stextsize], ".bsp")) {
1891     continue; // skip non map files
1892     }
1893     linestr[stextsize] = 0; // remove .bsp
1894     }
1895    
1896     if (is_map_valid(linestr)) {
1897     write_file(pathtomaps, linestr);
1898     mapsadded++;
1899     }
1900     }
1901     #if defined DEDICATED_LOG_ENABLED
1902     log_to_file(logfilename, "Found %d maps in your <mod>/MAPS folder, and added these to the addons/amxmodx/allmaps.txt file", mapsadded);
1903     #endif
1904     line = 0;
1905     }
1906    
1907     if (get_pcvar_float(dmap_strict) == 1.0) {
1908     get_cvar_string("mapcyclefile", pathtomaps, 63);
1909     //pathtomaps = "mapcycle.txt";
1910     }
1911    
1912     if (file_exists(pathtomaps)) {
1913     while (read_file(pathtomaps, line, linestr, 255, stextsize) && i < MAX_MAPS_AMOUNT) {
1914     format(maptext, 31, "%s", linestr);
1915     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1916     isinthislist = 0;
1917     for (p = 0; p < i; p++) {
1918     if (equali(maptext, listofmaps[p])) {
1919     isinthislist = 1;
1920     }
1921     }
1922     if (!isinthislist) {
1923     listofmaps[i++] = maptext;
1924     }
1925     }
1926     line++;
1927     }
1928     }
1929    
1930     line = 0;
1931     for (p = 0; p < i; p++) {
1932     if (!isbanned(listofmaps[p]) && !islastmaps(listofmaps[p])) {
1933     iavailable++;
1934     }
1935     }
1936     new dummy_str[64];
1937     get_cvar_string("mapcyclefile", dummy_str, 63);
1938     //if (iavailable < maps_to_select && !equali(pathtomaps, "mapcycle.txt"))
1939     if (iavailable < maps_to_select && !equali(pathtomaps, dummy_str)) {
1940     //pathtomaps = "mapcycle.txt";
1941     get_cvar_string("mapcyclefile", pathtomaps, 63);
1942     if (file_exists(pathtomaps)) {
1943     while (read_file(pathtomaps, line, linestr, 255, stextsize) && i < MAX_MAPS_AMOUNT) {
1944     format(maptext, 31, "%s", linestr);
1945     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1946     isinthislist = 0;
1947     for (p = 0; p < i; p++)
1948     if (equali(maptext, listofmaps[p])) {
1949     isinthislist = 1;
1950     }
1951     if (!isinthislist) {
1952     listofmaps[i++] = maptext;
1953     }
1954     }
1955     line++;
1956     }
1957     }
1958     }
1959     totalmaps = i;
1960     iavailable = 0;
1961     for (p = 0; p < i; p++) {
1962     if (!isbanned(listofmaps[p]) && !islastmaps(listofmaps[p])) {
1963     iavailable++;
1964     }
1965     }
1966     #if defined DEDICATED_LOG_ENABLED
1967     log_to_file(logfilename, "Found %d Maps in your mapcycle.txt/allmaps.txt file, %d are available for filling slots", i, iavailable);
1968     #endif
1969     }
1970    
1971     public ban_some_maps() {
1972     //BAN MAPS FROM CONFIG FILE
1973     new banpath[64];
1974     format(banpath, 64, "%s/mapstoban.ini", custompath);
1975     new i = 0;
1976     new line = 0;
1977     new stextsize = 0;
1978     new linestr[256];
1979     new maptext[32];
1980    
1981     if (file_exists(banpath)) {
1982     while (read_file(banpath, line, linestr, 255, stextsize) && i < MAX_MAPS_AMOUNT) {
1983     format(maptext, 31, "%s", linestr);
1984     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
1985     banthesemaps[i++] = maptext;
1986     }
1987     line++;
1988     }
1989     }
1990     totalbanned = i;
1991     #if defined DEDICATED_LOG_ENABLED
1992     if (totalbanned > 0) {
1993     log_to_file(logfilename, "Banned %d Maps in your mapstoban.ini file", totalbanned);
1994     } else {
1995     log_to_file(logfilename, "Did not ban any maps from mapstoban.ini file");
1996     }
1997     #endif
1998     //BAN RECENT MAPS PLAYED
1999     new lastmapspath[64];
2000     format(lastmapspath, 64, "%s/lastmapsplayed.txt", custompath);
2001     //new linestring[32];
2002     line = stextsize = 0;
2003     new current_map[32];
2004     get_mapname(current_map, 31);
2005     lastmaps[0] = current_map;
2006     bannedsofar++;
2007     currentplayers = activeplayers = rocks = 0;
2008     if (file_exists(lastmapspath)) {
2009     while(read_file(lastmapspath, line, linestr, 255, stextsize) && bannedsofar <= ban_last_maps) {
2010     if ((strlen(linestr) > 0) && (is_map_valid(linestr))) {
2011     format(lastmaps[bannedsofar++], 31, "%s", linestr);
2012     //copy(lastmaps[bannedsofar++], 31, "%s", linestr);
2013     }
2014     line++;
2015     }
2016     }
2017     write_lastmaps(); //deletes and writes to lastmapsplayed.txt
2018     }
2019    
2020     public write_lastmaps() {
2021     new lastmapspath[64];
2022     format(lastmapspath, 64, "%s/lastmapsplayed.txt", custompath);
2023     if (file_exists(lastmapspath)) {
2024     delete_file(lastmapspath);
2025     }
2026     new text[256], p;
2027     for (p = 0; p < bannedsofar; p++) {
2028     format(text, 255, "%s", lastmaps[p]);
2029     write_file(lastmapspath, text);
2030     }
2031     write_file(lastmapspath, "Generated by map_nominate plugin,");
2032     write_file(lastmapspath, "these are most recent maps played");
2033    
2034     load_maps();
2035     }
2036    
2037     public load_maps() {
2038     new choicepath[64];
2039     format(choicepath, 64, "%s/mapchoice.ini", custompath);
2040     new line = 0;
2041     new stextsize = 0, isinlist, unable = 0, i;
2042     new linestr[256];
2043     new maptext[32];
2044     new current_map[32];
2045     get_mapname(current_map, 31);
2046     if (file_exists(choicepath)) {
2047     while (read_file(choicepath, line, linestr, 255, stextsize) && (num_nmapsfill < MAX_MAPS_AMOUNT)) {
2048     format(maptext, 31, "%s", linestr);
2049     if (is_map_valid(maptext) && !is_map_valid(maptext[1])) {
2050     isinlist = 0;
2051     if (isbanned(maptext) || islastmaps(maptext)) {
2052     isinlist = 1;
2053     } else {
2054     if (equali(maptext, current_map) || equali(maptext, last_map)) {
2055     isinlist = 1;
2056     } else {
2057     for (i = 0; i < num_nmapsfill; i++) {
2058     if (equali(maptext, nmapsfill[i])) {
2059     #if defined DEDICATED_LOG_ENABLED
2060     log_to_file(logfilename, "Map ^"%s^" is already in list! It is defined it twice", maptext);
2061     #endif
2062     isinlist = 1;
2063     }
2064     }
2065     }
2066     }
2067     if (!isinlist) {
2068     copy(nmapsfill[num_nmapsfill++], 31, maptext);
2069     } else {
2070     unable++;
2071     }
2072     }
2073     line++;
2074     }
2075     #if defined DEDICATED_LOG_ENABLED
2076     log_to_file(logfilename, "Loaded %d Maps into the maps that will be picked for the vote", num_nmapsfill);
2077     log_to_file(logfilename, "%d Maps were not loaded because they were the last maps played, or defined twice, or banned", unable);
2078     } else {
2079     log_to_file(logfilename, "Unable to open file %s, In order to get maps: your mapcycle.txt file will be searched", choicepath);
2080     #endif
2081     }
2082     get_listing();
2083     }
2084    
2085     public load_defaultmaps() {
2086     new standardpath[64];
2087     format(standardpath, 64, "%s/standardmaps.ini", custompath);
2088     new i = 0;
2089     new line = 0;
2090     new stextsize = 0;
2091     new linestr[256];
2092     new maptext[32];
2093     usestandard = 1;
2094     if (!file_exists(standardpath)) {
2095     usestandard = standardtotal = 0;
2096     } else {
2097     while(read_file(standardpath, line, linestr, 255, stextsize) && i < 40) {
2098     format(maptext, 31, "%s", linestr);
2099     if (is_map_valid(maptext)) {
2100     standard[i++] = maptext;
2101     }
2102     line++;
2103     }
2104     standardtotal = i;
2105     }
2106     if (standardtotal < 5) {
2107     usestandard = 0;
2108     #if defined DEDICATED_LOG_ENABLED
2109     log_to_file(logfilename, "Attention, %d Maps were found in the standardmaps.ini file. This is no problem, but the words Custom will not be used", standardtotal);
2110     #endif
2111     }
2112     }
2113    
2114     bool:iscustommap(map[]) {
2115     new a;
2116     for (a = 0; a < standardtotal; a++) {
2117     if (equali(map, standard[a])) {
2118     return false;
2119     }
2120     }
2121     if (usestandard) {
2122     return true;
2123     }
2124     return false;
2125     }
2126    
2127     bool:islastmaps(map[]) {
2128     new a;
2129     for (a = 0; a < bannedsofar; a++) {
2130     if (equali(map, lastmaps[a])) {
2131     return true;
2132     }
2133     }
2134     return false;
2135     }
2136    
2137     bool:isnominated(map[]) {
2138     new a;
2139     for (a = 0; a < nmaps_num; a++) {
2140     if (equali(map, nmaps[a])) {
2141     return true;
2142     }
2143     }
2144     return false;
2145     }
2146    
2147     bool:isbanned(map[]) {
2148     new a;
2149     for (a = 0; a < totalbanned; a++) {
2150     if (equali(map, banthesemaps[a])) {
2151     return true;
2152     }
2153     }
2154     return false;
2155     }
2156    
2157     loadsettings(filename[]) {
2158     if (!file_exists(filename)) {
2159     return 0;
2160     }
2161    
2162     new text[256], percent[5], strban[4], strplay[3], strwait[3], strwait2[3], strurl[64], strnum[3], strnum2[3];
2163     new len, pos = 0;
2164     new Float:numpercent;
2165     new banamount, nplayers, waittime, mapsnum;
2166     while (read_file(filename, pos++, text, 255, len)) {
2167     if (text[0] == ';') {
2168     continue;
2169     }
2170     switch(text[0]) {
2171     case 'r': {
2172     format(percent, 4, "%s", text[2]);
2173     numpercent = float(str_to_num(percent)) / 100.0;
2174     if (numpercent >= 0.03 && numpercent <= 1.0) {
2175     rtvpercent = numpercent;
2176     }
2177     }
2178     case 'q': {
2179     if (text[1] == '2') {
2180     quiet = 2;
2181     } else {
2182     quiet = 1;
2183     }
2184     }
2185     case 'c': {
2186     cycle = 1;
2187     }
2188     case 'd': {
2189     enabled = 0;
2190     }
2191     case 'f': {
2192     if (text[1] == 'r') {
2193     format(strwait2, 2, "%s", text[2]);
2194     waittime = str_to_num(strwait2);
2195     if (waittime >= 2 && waittime <= 20) {
2196     frequency = waittime;
2197     }
2198     } else {
2199     dofreeze = 0;
2200     }
2201     }
2202     case 'b': {
2203     format(strban, 3, "%s", text[2]);
2204     banamount = str_to_num(strban);
2205     if (banamount >= 0 && banamount <= 100) {
2206     if ((banamount == 0 && text[2] == '0') || banamount > 0) {
2207     ban_last_maps = banamount;
2208     }
2209     }
2210     }
2211     case 'm': {
2212     if (atstart) {
2213     format(strnum, 2, "%s", text[2]);
2214     mapsnum = str_to_num(strnum);
2215     if (mapsnum >= 2 && mapsnum <= 8) {
2216     maps_to_select = mapssave = mapsnum;
2217     }
2218     }
2219     }
2220     case 'p': {
2221     format(strplay, 2, "%s", text[2]);
2222     nplayers = str_to_num(strplay);
2223     if (nplayers > 0 && nplayers <= 32) {
2224     minimum = nplayers;
2225     }
2226     }
2227     case 'u': {
2228     format(strurl, 63, "%s", text[2]);
2229     if ((containi(strurl, "www") != -1 || containi(strurl, "http") != -1) && !equali(strurl, "http")) {
2230     mapsurl = strurl;
2231     }
2232     }
2233     case 'w': {
2234     format(strwait, 2, "%s", text[2]);
2235     waittime = str_to_num(strwait);
2236     if (waittime >= 5 && waittime <= 30) {
2237     minimumwait = waittime;
2238     }
2239     }
2240     case 'x': {
2241     format(strnum2, 2, "%s", text[2]);
2242     mapsnum = str_to_num(strnum2);
2243     if (mapsnum >= 1 && mapsnum <= 3) {
2244     maxnom = mapsnum;
2245     }
2246     }
2247     case 'y': {
2248     format(strnum2, 2, "%s", text[2]);
2249     mapsnum = str_to_num(strnum2);
2250     if (mapsnum >= 0 && mapsnum <= mapssave) {
2251     maxcustnom = mapsnum;
2252     }
2253     }
2254     }
2255     }
2256     return 1;
2257     }
2258    
2259     set_defaults(myid) {
2260    
2261     rtvpercent = 0.6;
2262     ban_last_maps = 4;
2263     maxnom = frequency = 3;
2264     quiet = cycle = 0;
2265     minimum = enabled = 1;
2266     minimumwait = 10;
2267     mapssave = maxcustnom = 5;
2268     mapsurl = "";
2269     dofreeze = cstrike_running() == 1;
2270    
2271     if (myid < 0) {
2272     savesettings(-1);
2273     } else {
2274     savesettings(myid);
2275     showsettings(myid);
2276     console_print(myid, "================== DEFAULTS SET =========================");
2277     }
2278     }
2279    
2280     public dmaprtvpercent(id, level, cid) {
2281     if (!cmd_access(id, level, cid, 2)) {
2282     return PLUGIN_HANDLED;
2283     }
2284    
2285     new arg[32];
2286     read_argv(1, arg, 3);
2287     new Float:percentage = float(str_to_num(arg)) / 100.0;
2288     if (percentage >= 0.03 && percentage <= 1.0) {
2289     rtvpercent = percentage;
2290     savesettings(id);
2291     showsettings(id);
2292     } else {
2293     console_print(id, "You must specify a value between 3 and 100 for dmap_rtvpercent");
2294     console_print(id, "This sets minimum percent of players that must say rockthevote to rockit");
2295     }
2296     return PLUGIN_HANDLED;
2297     }
2298    
2299     public dmaprtvplayers(id, level, cid) {
2300     if (!cmd_access(id, level, cid, 2)) {
2301     return PLUGIN_HANDLED;
2302     }
2303    
2304     new arg[32];
2305     read_argv(1, arg, 3);
2306     new players = str_to_num(arg);
2307     if (players >= 1 && players <= 32) {
2308     minimum = players;
2309     savesettings(id);
2310     showsettings(id);
2311     } else {
2312     console_print(id, "You must specify a value between 1 and 32 for dmap_rtvplayers");
2313     console_print(id, "This sets minimum num of players that must say rockthevote to rockit");
2314     }
2315     return PLUGIN_HANDLED;
2316     }
2317    
2318     public dmaprtvwait(id, level, cid) {
2319     if (!cmd_access(id, level, cid, 2)) {
2320     return PLUGIN_HANDLED;
2321     }
2322    
2323     new arg[32];
2324     read_argv(1, arg, 3);
2325     new wait = str_to_num(arg);
2326     if (wait >= 5 && wait <= 30) {
2327     minimumwait = wait;
2328     savesettings(id);
2329     showsettings(id);
2330     } else {
2331     console_print(id, "You must specify a value between 5 and 30 for dmap_rtvwait");
2332     console_print(id, "This sets how long must pass from the start of map before players may rockthevote");
2333     }
2334     return PLUGIN_HANDLED;
2335     }
2336    
2337     public dmapmessages(id, level, cid) {
2338     if (!cmd_access(id, level, cid, 2)) {
2339     return PLUGIN_HANDLED;
2340     }
2341    
2342     new arg[32];
2343     read_argv(1, arg, 3);
2344     new wait = str_to_num(arg);
2345     if (wait >= 2 && wait <= 20) {
2346     frequency = wait;
2347     savesettings(id);
2348     showsettings(id);
2349     } else {
2350     console_print(id, "You must specify a value between 2 and 20 minutes for dmap_messages");
2351     console_print(id, "This sets how many minutes will pass between messages for nominations for available maps");
2352     }
2353     return PLUGIN_HANDLED;
2354     }
2355    
2356     public dmapmapsnum(id, level, cid) {
2357     if (!cmd_access(id, level, cid, 2)) {
2358     return PLUGIN_HANDLED;
2359     }
2360    
2361     new arg[32];
2362     read_argv(1, arg, 3);
2363     new maps = str_to_num(arg);
2364     if (maps >= 2 && maps <= 8) {
2365     mapssave = maps;
2366     savesettings(id);
2367     showsettings(id);
2368     console_print(id, "***** Settings for dmap_mapsnum do NOT take effect until the next map!!! ******");
2369     } else {
2370     console_print(id, "You must specify a value between 2 and 8 for dmap_mapsnum");
2371     console_print(id, "This sets the # of maps in the vote, changing this doesn't take effect until the next map");
2372     }
2373     return PLUGIN_HANDLED;
2374     }
2375    
2376     public dmapmaxnominations(id, level, cid) {
2377     if (!cmd_access(id, level, cid, 2)) {
2378     return PLUGIN_HANDLED;
2379     }
2380    
2381     new arg[32];
2382     read_argv(1, arg, 3);
2383     new thisnumber = str_to_num(arg);
2384     if (thisnumber >= 0 && thisnumber <= 3) {
2385     maxnom = thisnumber;
2386     savesettings(id);
2387     showsettings(id);
2388     console_print(id, "***** Settings for dmap_nominations do NOT take effect until the next map!!! ******");
2389     } else {
2390     console_print(id, "You must specify a value between 0 and 3 for dmap_nominations");
2391     console_print(id, "This sets the maximum number of maps a person can nominate");
2392     }
2393     return PLUGIN_HANDLED;
2394     }
2395    
2396     public dmapmaxcustom(id, level, cid) {
2397     if (!cmd_access(id, level, cid, 2)) {
2398     return PLUGIN_HANDLED;
2399     }
2400    
2401     new arg[32];
2402     read_argv(1, arg, 3);
2403     new thisnumber = str_to_num(arg);
2404     if (thisnumber >= 0 && thisnumber <= mapssave) {
2405     maxcustnom = thisnumber;
2406     savesettings(id);
2407     showsettings(id);
2408     } else {
2409     console_print(id, "You must specify a value between {0} and maximum maps in the vote, which is {%d}, for dmap_maxcustom", mapssave);
2410     console_print(id, "This sets the maximum number of custom maps that may be nominated by the players");
2411     }
2412     return PLUGIN_HANDLED;
2413     }
2414    
2415     public dmapquiet(id, level, cid) {
2416     if (!cmd_access(id, level, cid, 2)) {
2417     return PLUGIN_HANDLED;
2418     }
2419    
2420     new arg[32];
2421     read_argv(1, arg, 31);
2422     if (containi(arg, "off") != -1) {
2423     console_print(id, "======Quiet mode is now OFF, messages pertaining to maps will be shown=====");
2424     quiet = 0;
2425     } else if (containi(arg, "silent") != -1) {
2426     console_print(id, "======Quiet mode is now set to SILENT, A minimal amount of messages will be shown!=====");
2427     quiet = 2;
2428     } else if (containi(arg, "nosound") != -1) {
2429     console_print(id, "======Quiet mode is now set to NOSOUND, messages pertaining to maps will be shown, with no sound=====");
2430     quiet = 1;
2431     } else {
2432     console_print(id, "USAGE: dmap_quietmode <OFF|NOSOUND|SILENT>");
2433     return PLUGIN_HANDLED;
2434     }
2435     savesettings(id);
2436     showsettings(id);
2437     return PLUGIN_HANDLED;
2438     }
2439    
2440     public dmaprtvtoggle(id, level, cid) {
2441     if (!cmd_access(id, level, cid, 1)) {
2442     return PLUGIN_HANDLED;
2443     }
2444    
2445     if (enabled == 0) {
2446     console_print(id, "=========Rockthevote is now enabled==============");
2447     } else {
2448     console_print(id, "=========Rockthevote is not disabled=================");
2449     }
2450     enabled = !enabled;
2451     savesettings(id);
2452     showsettings(id);
2453     return PLUGIN_HANDLED;
2454     }
2455    
2456     public changefreeze(id, level, cid) {
2457     if (!cmd_access(id, level, cid, 1)) {
2458     return PLUGIN_HANDLED;
2459     }
2460    
2461     if (!cstrike_running()) {
2462     console_print(id, "Freeze is always off on non-Counter Strike Servers");
2463     return PLUGIN_HANDLED;
2464     }
2465    
2466     new arg[32];
2467     read_argv(1, arg, 31);
2468     if (containi(arg, "off") != -1) {
2469     console_print(id, "=========FREEZE/Weapon Drop at end of round is now disabled==============");
2470     dofreeze = 0;
2471     } else {
2472     if (containi(arg, "on") != -1) {
2473     console_print(id, "=========FREEZE/Weapon Drop at end of round is now enabled==============");
2474     dofreeze = 1;
2475     } else {
2476     console_print(id, "========= USAGE of dmap_freeze: dmap_freeze on|off (this will turn freeze/weapons drop at end of round on/off");
2477     return PLUGIN_HANDLED;
2478     }
2479     }
2480     savesettings(id);
2481     showsettings(id);
2482     return PLUGIN_HANDLED;
2483     }
2484    
2485     public dmapcyclemode(id, level, cid) {
2486     if (!cmd_access(id, level, cid, 1)) {
2487     return PLUGIN_HANDLED;
2488     }
2489    
2490     if (!cycle) {
2491     console_print(id, "========= Cylce mode is now ON, NO VOTE will take place! =========");
2492     } else {
2493     console_print(id, "========= Cycle Mode is already on, no change is made =========");
2494     console_print(id, "========= If you are trying to enable voting, use command dmap_votemode");
2495     return PLUGIN_HANDLED;
2496     }
2497     cycle = 1;
2498     savesettings(id);
2499     showsettings(id);
2500     if (inprogress) {
2501     console_print(id, "========= The Vote In Progress cannot be terminated, unless it hasn't started! =========");
2502     }
2503     return PLUGIN_HANDLED;
2504     }
2505    
2506     public dmapvotemode(id, level, cid) {
2507     if (!cmd_access(id, level, cid, 1)) {
2508     return PLUGIN_HANDLED;
2509     }
2510    
2511     if (cycle) {
2512     console_print(id, "========= Voting mode is now ON, Votes WILL take place =========");
2513     } else {
2514     console_print(id, "========= Voting mode is already ON, no change is made =========");
2515     console_print(id, "========= If you are trying to disable voting, use command dmap_cyclemode");
2516     return PLUGIN_HANDLED;
2517     }
2518     cycle = 0;
2519     savesettings(id);
2520     showsettings(id);
2521     return PLUGIN_HANDLED;
2522     }
2523    
2524     public dmapbanlastmaps(id, level, cid) {
2525     if (!cmd_access(id, level, cid, 2)) {
2526     return PLUGIN_HANDLED;
2527     }
2528    
2529     new arg[32];
2530     read_argv(1, arg, 4);
2531     new banamount;
2532     banamount = str_to_num(arg);
2533     if (banamount >= 0 && banamount <= 99) {
2534     if (banamount > ban_last_maps) {
2535     console_print(id, "You have choosen to increase the number of banned maps");
2536     console_print(id, "Changes will not take affect until the nextmap; maps played more than %d maps ago will not be included in the ban", ban_last_maps);
2537     } else {
2538     if (banamount < ban_last_maps) {
2539     console_print(id, "You have choosen to decrease the number of banned maps");
2540     }
2541     }
2542     ban_last_maps = banamount;
2543     savesettings(id);
2544     showsettings(id);
2545     } else {
2546     console_print(id, "You must specify a value between 0 and 99 for dmap_banlastmaps");
2547     console_print(id, "dmap_banlastmaps <n> will ban the last <n> maps from being voted/nominated");
2548     }
2549     return PLUGIN_HANDLED;
2550     }
2551    
2552     public dmaphelp(id) {
2553     if (!(get_user_flags(id) & ADMIN_MAP)) {
2554     new myversion[32];
2555     get_cvar_string("Deags_Map_Manage", myversion, 31);
2556     console_print(id, "*****This server uses the plugin Deagles NextMap Management %s *****", myversion);
2557     console_print(id, "");
2558     if (cycle) {
2559     console_print(id, "=================== The plugin is set to cycle mode. No vote will take place =================");
2560     return PLUGIN_HANDLED;
2561     }
2562     console_print(id, "Say ^"vote mapname^" ^"nominate mapname^" or just simply ^"mapname^" to nominate a map");
2563     console_print(id, "");
2564     console_print(id, "Say ^"nominations^" to see a list of maps already nominated.");
2565     console_print(id, "Say ^"listmaps^" for a list of maps you can nominate");
2566     console_print(id, "Number of maps for the vote at the end of this map will be: %d", maps_to_select);
2567     console_print(id, "Players may nominate up to %d maps for the vote (dmap_nominations)", maxnom);
2568     console_print(id, "Players may nominate up to %d **Custom** maps for the vote (dmap_maxcustom)", maxcustnom);
2569     if (enabled) {
2570     console_print(id, "Say ^"rockthevote^" to rockthevote");
2571     console_print(id, "In order to rockthevote the following 3 conditions need to be true:");
2572     console_print(id, "%d percent of players must rockthevote, and at least %d players must rockthevote", floatround(rtvpercent * 100.0), minimum);
2573     console_print(id, "Vote may not be rocked before %d minutes have elapsed on the map", minimumwait);
2574     }
2575     if (containi(mapsurl, "www") != -1 || containi(mapsurl, "http") != -1) {
2576     console_print(id, "You can download Custom maps at %s (dmap_mapsurl)", mapsurl);
2577     }
2578     return PLUGIN_HANDLED;
2579     }
2580     //For CS 1.6, the following MOTD will display nicely, for 1.5, It will show html tags.
2581     client_print(id, print_chat, "%L", LANG_PLAYER, "DMAP_MOTD_LOADING");
2582     showmotdhelp(id);
2583    
2584     return PLUGIN_HANDLED;
2585     }
2586    
2587     public gen_maphelphtml() {
2588     new path[64], text[128];
2589     format(path, 63, "%s/map_manage_help.htm", custompath);
2590     if (file_exists(path)) {
2591     delete_file(path);
2592     }
2593     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP");
2594     write_file(path, text);
2595     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP2");
2596     write_file(path, text);
2597     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP3");
2598     write_file(path, text);
2599     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP4");
2600     write_file(path, text);
2601     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP5");
2602     write_file(path, text);
2603     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP6");
2604     write_file(path, text);
2605     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP7");
2606     write_file(path, text);
2607     format(text, 127, "%L", LANG_SERVER, "DMAP_HELP8");
2608     write_file(path, text);
2609     }
2610    
2611     public showmotdhelp(id) {
2612     new header[80];
2613     new myversion[32];
2614     new helpfile[60];
2615     format(helpfile, 60, "%s/map_manage_help.htm", custompath);
2616     get_cvar_string("Deags_Map_Manage", myversion, 31);
2617     format(header, 79, "%L", LANG_PLAYER, "DMAP_HELP9", myversion);
2618     if (!file_exists(helpfile)) {
2619     gen_maphelphtml();
2620     }
2621     show_motd(id, helpfile, header);
2622     }
2623    
2624     public dmapstatus(id, level, cid) {
2625     if (!cmd_access(id, level, cid, 1)) {
2626     return PLUGIN_HANDLED;
2627     }
2628    
2629     showsettings(id);
2630     return PLUGIN_CONTINUE;
2631     }
2632    
2633     showsettings(id) {
2634    
2635     console_print(id, "-----------------------------------------------------------------------------------------------");
2636     console_print(id, " Status of Deagles Map Management Version %s", VERSION);
2637    
2638     if (cycle) {
2639     console_print(id, "=================== Mode is Cycle Mode NO vote will take place =================");
2640     console_print(id, "=================== To enable voting use command dmap_votemode ===================");
2641     } else {
2642     console_print(id, "======================= Current Mode is Voting Mode ===============================");
2643     if (quiet == 2) {
2644     console_print(id, "Quiet Mode is set to SILENT. Minimal text messages will be shown, no sound will be played (dmap_quietmode)");
2645     } else {
2646     if (quiet == 1) {
2647     console_print(id, "Quiet Mode is set to NOSOUND. Text messages will be shown, with no sound. (dmap_quietmode)");
2648     } else {
2649     console_print(id, "Quiet Mode is OFF, messages will be shown with sound (dmap_quietmode)");
2650     }
2651     console_print(id, "The time between messages about maps is %d minutes (dmap_messages)", frequency);
2652     }
2653    
2654     console_print(id, "The last %d Maps played will not be in the vote (changing this will not start until the Next Map)", ban_last_maps);
2655    
2656     if (maps_to_select != mapssave) {
2657     console_print(id, "Number of maps for the vote on this map is: %d (Next Map it will be: %d)", maps_to_select, mapssave);
2658     } else {
2659     console_print(id, "Number of maps for the vote at the end of this map will be: %d (dmap_mapsnum)", maps_to_select);
2660     }
2661    
2662     console_print(id, "Players may nominate up to %d maps each for the vote (dmap_nominations)", maxnom);
2663    
2664     console_print(id, "Players may nominate up to %d **Custom** maps each for the vote (dmap_maxcustom)", maxcustnom);
2665    
2666     if (get_cvar_num("enforce_timelimit")) {
2667     console_print(id, "^"Timeleft^" will be followed to change the maps, not allowing players to finish the round");
2668     console_print(id, "To change this, ask your server admin to set the cvar ^"enforce_timelimit^" to 0");
2669     }
2670    
2671     if (enabled == 0) {
2672     if (!get_cvar_num("mp_timelimit")) {
2673     console_print(id, "rockthevote is disabled since mp_timelimit is set to 0");
2674     } else {
2675     console_print(id, "rockthevote is disabled; (dmap_rtvtoggle)");
2676     }
2677     }
2678     console_print(id, "In order to rockthevote the following 3 conditions need to be met:");
2679     console_print(id, "%d percent of players must rockthevote, and at least %d players must rockthevote", floatround(rtvpercent * 100.0), minimum);
2680     console_print(id, "Vote may not be rocked before %d minutes have elapsed on the map (10 is recommended)", minimumwait);
2681     }
2682    
2683     console_print(id, "The Freeze/Weapons Drop at the end of the round is %s (dmap_freeze)", dofreeze ? "ENABLED" : "DISABLED");
2684    
2685     if (!usestandard) {
2686     console_print(id, "Custom will not be shown by any maps, since file standardmaps.ini is not on the server");
2687     } else {
2688     console_print(id, "The words custom will be shown by Custom maps");
2689     }
2690     if (containi(mapsurl, "www") != -1 || containi(mapsurl, "http") != -1) {
2691     console_print(id, "URL to download Custom maps is %s (dmap_mapsurl)", mapsurl);
2692     } else {
2693     console_print(id, "URL to download maps from will not be shown (dmap_mapsurl)");
2694     }
2695     console_print(id, "------------------------------------------------------------------------------------------------");
2696     console_print(id, "Commands : dmap_status; dmap_cyclemode; dmap_votemode; dmap_quietmode <OFF|NOSOUND|SILENT>; ");
2697     console_print(id, "Commands : dmap_banlastmaps <n>; dmap_default ; dmap_mapsurl <url>; dmap_mapsnum <n>; dmap_maxcustom <n>;");
2698     console_print(id, "Commands : dmap_rtvtoggle; dmap_rtvpercent <n>; dmap_rtvplayers <n>; dmap_rtvwait <n>");
2699     console_print(id, "Commands : dmap_rockthevote; dmap_freeze; dmap_nominations <n>; dmap_messages <n(minutes)>");
2700     console_print(id, "Cvars: dmap_strict <0|1>, enforce_timelimit <0|1>; amx_extendmap_max <n>; amx_extendmap_step <n>");
2701     console_print(id, "------------------------- use command dmap_help for more information -----------------------");
2702     }
2703    
2704     change_custom_path() {
2705     new temp[64];
2706     format(temp, 63, "%s/dmap", custompath);
2707     if (dir_exists(temp)) {
2708     copy(custompath, 48, temp);
2709     }
2710     }
2711    
2712     savesettings(myid) {
2713    
2714     new settings[64];
2715     format(settings, 64, "%s/mapvault.dat", custompath);
2716    
2717     if (file_exists(settings)) {
2718     delete_file(settings);
2719     }
2720     new text[32], text2[128], percent, success = 1, usedany = 0;
2721     format(text2, 127, ";To use comments simply use ;");
2722     if (!write_file(settings,text2)) {
2723     success = 0;
2724     }
2725     format(text2, 127, ";Do not modify this variables, this is used by the Nomination_style_voting plugin to save settings");
2726    
2727     if (!write_file(settings, text2)) {
2728     success = 0;
2729     }
2730     format(text2, 127, ";If you delete this file, defaults will be restored.");
2731     if (!write_file(settings, text2)) {
2732     success = 0;
2733     }
2734     format(text2, 127, ";If you make an invalid setting, that specific setting will restore to the default");
2735     if (!write_file(settings, text2)) {
2736     success = 0;
2737     }
2738     if (!enabled) {
2739     format(text, 31, "d"); //d for disabled
2740     usedany = 1;
2741     if (!write_file(settings, text)) {
2742     success = 0;
2743     }
2744     }
2745     if (quiet != 0) {
2746     if (quiet == 1) {
2747     format(text, 31, "q1"); //d for disabled
2748     } else {
2749     format(text, 31, "q2"); //d for disabled
2750     }
2751     usedany = 1;
2752     if (!write_file(settings, text)) {
2753     success = 0;
2754     }
2755     }
2756     if (!dofreeze || !(cstrike_running() == 1)) {
2757     format(text, 31, "f");
2758     if (!write_file(settings, text)) {
2759     success = 0;
2760     }
2761     }
2762     if (cycle) {
2763     format(text, 31, "c"); //c for Cycle mode=on
2764     usedany = 1;
2765     if (!write_file(settings, text)) {
2766     success = 0;
2767     }
2768     }
2769     percent = floatround(rtvpercent * 100.0);
2770     if (percent >= 3 && percent <= 100) {
2771     format(text, 31, "r %d", percent);
2772     usedany = 1;
2773     if (!write_file(settings, text)) {
2774     success = 0;
2775     }
2776     }
2777     if (ban_last_maps >= 0 && ban_last_maps <= 100) {
2778     format(text, 31, "b %d", ban_last_maps);
2779     usedany = 1;
2780     if (!write_file(settings, text)) {
2781     success = 0;
2782     }
2783     }
2784     if (mapssave >= 2 && mapssave <= 8) {
2785     format(text, 31, "m %d", mapssave);
2786     usedany = 1;
2787     if (!write_file(settings, text)) {
2788     success = 0;
2789     }
2790     }
2791     if (maxnom >= 0 && maxnom <= 3) {
2792     format(text, 31, "x %d", maxnom);
2793     usedany = 1;
2794     if (!write_file(settings, text)) {
2795     success = 0;
2796     }
2797     }
2798     if (maxcustnom >= 0 && maxcustnom <= mapssave) {
2799     format(text, 31, "y %d", maxcustnom);
2800     usedany = 1;
2801     if (!write_file(settings, text)) {
2802     success = 0;
2803     }
2804     }
2805     if (minimum > 0 && minimum <= 32) {
2806     format(text, 31, "p %d", minimum);
2807     usedany = 1;
2808     if (!write_file(settings, text)) {
2809     success = 0;
2810     }
2811     }
2812     if (minimumwait >= 5 && minimumwait <= 30) {
2813     format(text, 31, "w %d", minimumwait);
2814     usedany = 1;
2815     if (!write_file(settings, text)) {
2816     success = 0;
2817     }
2818     }
2819     if (frequency >= 2 && frequency <= 20) {
2820     format(text, 31, "fr %d", frequency);
2821     usedany = 1;
2822     if (!write_file(settings, text)) {
2823     success = 0;
2824     }
2825     }
2826     if (containi(mapsurl, "www") != -1 || containi(mapsurl, "http") != -1) {
2827     format(text2, 75, "u %s", mapsurl);
2828     usedany = 1;
2829     if (!write_file(settings, text2)) {
2830     success = 0;
2831     }
2832     }
2833     if (usedany) {
2834     if (myid >= 0) {
2835     if (success) {
2836     console_print(myid, "********* Settings saved successfully *********");
2837     } else {
2838     console_print(myid, "Unable to write to file %s", settings);
2839     }
2840     }
2841     if (!success) {
2842     #if defined DEDICATED_LOG_ENABLED
2843     log_to_file(logfilename, "Unable to write to file %s", settings);
2844     #endif
2845     return 0;
2846     }
2847     } else {
2848     if (myid >= 0) {
2849     console_print(myid, "Variables not valid, not saving to %s", settings);
2850     }
2851     #if defined DEDICATED_LOG_ENABLED
2852     log_to_file(logfilename, "Warning: Variables not valid, not saving to %s", settings);
2853     #endif
2854     return 0;
2855     }
2856     return 1;
2857     }
2858    
2859     public dmapmapsurl(id, level, cid) {
2860     if (!cmd_access(id, level, cid, 2)) {
2861     return PLUGIN_HANDLED;
2862     }
2863    
2864     new arg[64];
2865     read_argv(1, arg, 63);
2866     if (equali(arg, "http")) {
2867     console_print(id, "You must specify a url that contains www or http (do not use any colons)(use ^"none^" to disable)");
2868     return PLUGIN_HANDLED;
2869     }
2870     if (containi(arg, "www") != -1 || containi(arg, "http") != -1) {
2871     console_print(id, "You have changed the mapsurl to %s", arg);
2872     mapsurl = arg;
2873     savesettings(id);
2874     showsettings(id);
2875     } else {
2876     if (containi(arg, "none") != -1) {
2877     console_print(id, "You have choosen to disable your mapsurl, none will be used");
2878     mapsurl = "";
2879     savesettings(id);
2880     showsettings(id);
2881     } else {
2882     console_print(id, "You must specify a url that contains www or http (do not use any colons)(use ^"none^" to disable)");
2883     }
2884     }
2885     return PLUGIN_HANDLED;
2886     }
2887    
2888     public dmapdefaults(id, level, cid) {
2889     if (!cmd_access(id, level, cid, 1)) {
2890     return PLUGIN_HANDLED;
2891     }
2892    
2893     set_defaults(id);
2894     return PLUGIN_HANDLED;
2895     }
2896    
2897     public event_RoundStart() {
2898     isbetween = 0;
2899     isbuytime = 1;
2900     set_task(10.0, "now_safe_to_vote");
2901    
2902     currounds++;
2903     new players[32], playernum;
2904     get_players(players, playernum, "c");
2905     curplayers += playernum;
2906     }
2907    
2908     public event_RoundEnd() {
2909     isbetween = 1;
2910     }
2911    
2912     public now_safe_to_vote() {
2913     //client_print(0, print_chat, "Now it is safe to vote");
2914     isbuytime = 0;
2915     }
2916    
2917     public list_maps2() {
2918     messagemaps();
2919     }
2920    
2921     public list_maps3() {
2922     messagenominated();
2923     }
2924    
2925     public plugin_init() {
2926    
2927     register_plugin(PLUGIN, VERSION, AUTHOR);
2928     register_dictionary("deagsmapmanager.txt");
2929    
2930     get_configsdir(custompath, 49);
2931     change_custom_path();
2932    
2933     register_clcmd("say", "HandleSay", 0, "Say: vote mapname, nominate mapname, or just mapname to nominate a map, say: nominations");
2934     register_clcmd("say rockthevote", "rock_the_vote", 0, "Rocks the Vote");
2935     register_clcmd("say rtv", "rock_the_vote", 0, "Rocks the Vote");
2936     register_clcmd("say listmaps", "list_maps", 0, "Lists all maps in a window and in console");
2937     register_clcmd("say nextmap", "say_nextmap", 0, "Shows nextmap information to players");
2938     register_concmd("dmap_help", "dmaphelp", 0, "Shows on-screen help information about Map Plugin");
2939     register_concmd("dmap_status", "dmapstatus", ADMIN_DMAP, "Shows settings/status/help of the map management variables");
2940     register_concmd("dmap_votemode", "dmapvotemode", ADMIN_SUPER_DMAP, "Enables Voting (This is default mode)");
2941     register_concmd("dmap_cyclemode", "dmapcyclemode", ADMIN_SUPER_DMAP, "Disables Voting (To restore voting use dmap_votemode)");
2942     register_concmd("dmap_banlastmaps", "dmapbanlastmaps", ADMIN_SUPER_DMAP, "Bans the last <n> maps played from being voted (0-99)");
2943     register_concmd("dmap_quietmode", "dmapquiet", ADMIN_SUPER_DMAP, "Usage: <OFF|nosound|silent>");
2944     register_concmd("dmap_freeze", "changefreeze", ADMIN_SUPER_DMAP, "Toggles Freeze/Drop at end of round ON|off");
2945     register_concmd("dmap_messages", "dmapmessages", ADMIN_SUPER_DMAP, "Sets the time interval in minutes between messages");
2946     register_concmd("dmap_rtvtoggle", "dmaprtvtoggle", ADMIN_SUPER_DMAP, "Toggles on|off Ability of players to use rockthevote");
2947     register_concmd("dmap_rockthevote", "admin_rockit", ADMIN_DMAP, "(option: now) Allows admins to force a vote");
2948     register_concmd("amx_rockthevote", "admin_rockit", ADMIN_DMAP, "(option: now) Allows admins to force a vote");
2949     register_concmd("amx_rtv", "admin_rockit", ADMIN_DMAP, "(option: now) Allows admins to force a vote");
2950     register_concmd("dmap_rtvpercent", "dmaprtvpercent", ADMIN_SUPER_DMAP, "Set the percent (3-100) of players for a rtv");
2951     register_concmd("dmap_rtvplayers", "dmaprtvplayers", ADMIN_SUPER_DMAP, "Sets the minimum number of players needed to rockthevote");
2952     register_concmd("dmap_rtvwait", "dmaprtvwait", ADMIN_SUPER_DMAP, "Sets the minimum time before rockthevote can occur (5-30)");
2953     register_concmd("dmap_default", "dmapdefaults", ADMIN_SUPER_DMAP, "Will restore settings to default");
2954     register_concmd("dmap_mapsurl", "dmapmapsurl", ADMIN_SUPER_DMAP, "Specify what website to get custom maps from");
2955     register_concmd("dmap_mapsnum", "dmapmapsnum", ADMIN_SUPER_DMAP, "Set number of maps in vote (will not take effect until next map");
2956     register_concmd("dmap_nominations", "dmapmaxnominations", ADMIN_SUPER_DMAP, "Set maximum number of nominations for each person");
2957     register_concmd("dmap_maxcustom", "dmapmaxcustom", ADMIN_SUPER_DMAP, "Set maximum number of custom nominations that may be made");
2958     register_concmd("dmap_cancelvote", "dmapcancelvote", ADMIN_DMAP, "Cancels the rocked vote");
2959    
2960     register_logevent("event_RoundStart", 2, "0=World triggered", "1=Round_Start");
2961     register_logevent("event_RoundEnd", 2, "0=World triggered", "1=Round_End");
2962    
2963     register_event("30", "changeMap", "a");
2964     #if defined DEDICATED_LOG_ENABLED
2965     get_time("dmaplog%m%d.log", logfilename, 255);
2966     #endif
2967     dmap_strict = register_cvar("dmap_strict", "0");
2968     nominations_allowed = register_cvar("nominations_allowed", "1");
2969    
2970     register_cvar("enforce_timelimit", "0");
2971     register_cvar("amx_extendmap_max", "90");
2972     register_cvar("amx_extendmap_step", "15");
2973     register_cvar("amx_staytime", "300");
2974    
2975     emptymap = register_cvar("amx_emptymap", "de_dust2");
2976     idletime = register_cvar("amx_idletime", "5");
2977     emptymap_allowed = register_cvar("emptymap_allowed", "0");
2978     weapon_delay = register_cvar("weapon_delay", "1");
2979    
2980     staytime = get_cvar_num("amx_staytime");
2981    
2982     is_cstrike = (cstrike_running() == 1);
2983     nmaps_num = num_nmapsfill = 0;
2984    
2985     if (cstrike_running() == 1) {
2986     register_cvar("Deags_Map_Manage", VERSION,FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY);
2987     register_event("TeamScore", "team_score", "a");
2988     } else {
2989     dofreeze = 0;
2990     register_cvar("Deags_Map_Manage", VERSION);
2991     }
2992     rtvpercent = 0.6;
2993     ban_last_maps = 4;
2994     minimumwait = 10;
2995     atstart = enabled = minimum = 1;
2996     quiet = cycle = isend = 0;
2997     mapsurl = "";
2998     set_task(3.0, "ban_some_maps"); //reads from lastmapsplayed.txt and stores into global array
2999     //set_task(8.0, "write_lastmaps"); //deletes and writes to lastmapsplayed.txt
3000     //set_task(2.0, "get_listing"); //loads mapcycle / allmaps.txt
3001     set_task(14.0, "load_defaultmaps"); //loads standardmaps.ini
3002     //set_task(17.0, "load_maps"); //loads mapchoice.ini
3003     set_task(15.0, "askfornextmap", 987456, "", 0, "b");
3004     set_task(5.0, "loopmessages", 987111, "", 0, "b");
3005     set_task(34.0, "gen_maphelphtml"); //Writes to help file, which is read every time that dmap_help is called by ANY player
3006     oldtimelimit = get_cvar_float("mp_timelimit");
3007     get_localinfo("amx_lastmap", last_map, 31);
3008     set_localinfo("amx_lastmap", "");
3009     set_task(1.0, "timer", 0, "curtime", 0, "b", 1);
3010     maps_to_select = mapssave = 5;
3011     new temparray[64];
3012     format(temparray, 64, "%s/mapvault.dat", custompath);
3013     if (!loadsettings(temparray)) {
3014     set_defaults(-1);
3015     }
3016     atstart = 0;
3017     register_menucmd(register_menuid("Choose the next map:"), (-1 ^ (-1 << (maps_to_select + 2))), "vote_count");
3018     }

Contact webmaster
ViewVC Help
Powered by ViewVC RSS 2.0 feed