· 6 years ago · May 03, 2019, 11:54 AM
1#include <amxmodx>
2#include <amxmisc>
3#include <cstrike>
4#include <hamsandwich>
5#include <fakemeta>
6#include <fun>
7#include <engine>
8#include <fakemeta_util>
9#include <csx>
10#include <sqlx>
11
12// Hostname
13#define HOSTNAME "[MIX] PlayMix.se"
14
15// Prefix'as prie tekstu
16#define PREFIX "^4PlayMix.se^1"
17
18// Flag for admins so they can start mix and use mix menu
19#define FLAG ADMIN_BAN
20
21#define MIX_HOST ""
22#define MIX_USER ""
23#define MIX_PASSWORD ""
24#define MIX_DATABASE ""
25
26#define POINTS_KILL 1
27#define POINTS_DEATH -1
28#define POINTS_ACE 0
29#define POINTS_HS 0
30#define POINTS_MINI_ACE 0
31#define POINTS_MIX_PLAYED 0
32#define POINTS_MIX_LOST 0
33#define POINTS_MIX_WON 0
34#define POINTS_MIX_DRAW 0
35
36#define BOMB_PLANTED_POINTS 0
37#define BOMB_DEFUSED_POINTS 0
38
39enum
40{
41 TASK_MVP = 15
42}
43
44new Handle:g_hTuple;
45
46new const szTables[][] =
47{
48 "CREATE TABLE IF NOT EXISTS `mix_players` (`player_id` varchar(32) NOT NULL, `player_name` varchar(64), `kills` int(16) NOT NULL, `deaths` int(16) NOT NULL, `headshots` int(16), `m_aces` int(16), `aces` int(16), `mix_played` int(16) NOT NULL, `mix_won` int(16) NOT NULL, `mix_lost` int(16) NOT NULL, `mix_draw` int(16) NOT NULL, `points` int(16) NOT NULL, `last_online` varchar(64), PRIMARY KEY (`player_id`))"
49}
50
51new pKills[33], pDeaths[33], pHeadshots[33], pAces[33], pMiniAces[33], pMixPlayed[33], pMixLost[33], pMixDraw[33], pMixWon[33], pPoints[33], bool:pLoaded[33];
52
53new pTempKills[33], pTempDeaths[33], pTempHeadshots[33], pTempAces[33], pTempMiniAces[33], pTempPoints[33], pTempPlants[33], pTempDefusions[33];
54
55#define isAdmin(%1) (get_user_flags(%1) & FLAG)
56
57new scoreT, scoreCT, serverPassword[64], tempCT, tempT, tempCount;
58new bool:WarmUp = true, bool:KnifeRound, bool:passwordStatus, bool:canChat = true, bool:PrepareRound, bool:Fire;
59new Kills[33];
60
61new const BlockCmds[][] =
62{
63 "amx_unban",
64 "amx_rcon",
65 "amx_cvar"
66}
67
68new const Commands[][][] =
69{
70 {"menu", "mainMenu"},
71 {"mixmenu", "mainMenu"},
72 {"start", "setLive"},
73 {"live", "setLive"},
74 {"rr", "restartRound"},
75 {"restart", "restartRound"},
76 {"wm", "warmUP"},
77 {"warmup", "warmUP"},
78 {"gg", "endGame"},
79 {"stop", "endGame"},
80 {"knife", "setKnife"},
81 {"knf", "setKnife"},
82 {"score", "getScore"},
83 {"rez", "getScore"},
84 {"pw", "infoPassword"},
85 {"team", "setPrepare"},
86 {"teams", "setPrepare"}
87}
88
89public plugin_init()
90{
91 register_plugin("MIX Panel", "1.5", "InvIs");
92
93 register_dictionary("mix_arena.txt");
94
95 new szFmt[64];
96
97 for(new i = 0; i < sizeof(BlockCmds); i++)
98 {
99 register_concmd(BlockCmds[i], "BlockConsole");
100 }
101
102 for(new i = 0; i < sizeof(Commands); i++)
103 {
104 format(szFmt, 63, "say .%s", Commands[i][0]);
105 register_clcmd(szFmt, Commands[i][1]);
106 format(szFmt, 63, "say /%s", Commands[i][0]);
107 register_clcmd(szFmt, Commands[i][1]);
108 format(szFmt, 63, "say !%s", Commands[i][0]);
109 register_clcmd(szFmt, Commands[i][1]);
110 format(szFmt, 63, "say_team .%s", Commands[i][0]);
111 register_clcmd(szFmt, Commands[i][1]);
112 format(szFmt, 63, "say_team /%s", Commands[i][0]);
113 register_clcmd(szFmt, Commands[i][1]);
114 format(szFmt, 63, "say_team !%s", Commands[i][0]);
115 register_clcmd(szFmt, Commands[i][1]);
116 }
117
118 register_clcmd("jointeam", "cmd_block");
119
120 register_clcmd("say .choose", "choosePlayers");
121 register_clcmd("say /choose", "choosePlayers");
122 register_clcmd("say .ch", "choosePlayers");
123 register_clcmd("say /ch", "choosePlayers");
124
125 register_clcmd("say .ban", "BanMenu");
126 register_clcmd("say .kick", "KickMenu");
127 register_clcmd("say .maps", "MapsMenu");
128 register_clcmd("say .leave", "LeaveMenu");
129 register_clcmd("say .chaton", "Chat");
130 register_clcmd("say .chatoff", "ChatMenu");
131 register_clcmd("say .ff", "FriendlyFire");
132 register_clcmd("say .stats", "PlayerRank");
133 register_clcmd("say .top", "showTOP");
134 register_clcmd("say .rank", "showPlayerStats");
135 register_clcmd("say .me", "showPlayerRank");
136 register_clcmd("say .ace", "showPlayerAce");
137
138 register_clcmd("SetPassword", "_SetPassword");
139
140 register_clcmd("say /setstats", "Ranking");
141
142 register_clcmd("say", "hookSay");
143
144 server_cmd("sv_password ^"^"");
145
146 register_event("DeathMsg", "DeathEvent", "a");
147
148 RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
149
150 register_logevent("RoundEnd", 2, "1=Round_End");
151
152 register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin");
153 register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin");
154
155 register_forward(FM_Voice_SetClientListening, "ClientListen");
156
157 server_cmd("hostname ^"%s^"", HOSTNAME);
158}
159
160public PlayerRank(id)
161{
162 static query[512];
163 formatex(query, charsmax(query), "SELECT COUNT(*) FROM mix_players WHERE points > '%d'", pPoints[id]);
164 log_amx(query)
165 static data[2];
166 data[0] = id;
167
168 SQL_ThreadQuery(g_hTuple, "QueryLoadStats", query, data, sizeof(data));
169 return PLUGIN_HANDLED;
170}
171
172public QueryLoadStats(failstate, Handle:hQuery, error[], errnum, data[], size, Float:queuetime)
173{
174 if(failstate == TQUERY_CONNECT_FAILED || failstate == TQUERY_QUERY_FAILED)
175 {
176 set_fail_state(error);
177 }
178 else
179 {
180 new id = data[0];
181
182 if(SQL_NumResults(hQuery))
183 {
184 client_printcolor(id, "/y[/ctr%s/y] /yPoints: ^3%d ^4| /yKills: ^3%d ^4| /yDeaths: ^3%d ^4| /yHS: ^3%d ^4| /ymACE: ^3%d ^4| /yACE: ^3%d", PREFIX, pPoints[id], pKills[id], pDeaths[id], pHeadshots[id], pMiniAces[id], pAces[id])
185 client_printcolor(id, "/y[/ctr%s/y] /yTotal mix's: ^3%d ^4| /yWon: ^3%d ^4| /yLost: ^3%d ^4| /yDraw: ^3%d", PREFIX, pMixPlayed[id], pMixWon[id], pMixLost[id], pMixDraw[id])
186 }
187 }
188}
189
190public QueryLoadRank(failstate, Handle:hQuery, error[], errnum, data[], size, Float:queuetime)
191{
192 if( failstate == TQUERY_CONNECT_FAILED || failstate == TQUERY_QUERY_FAILED)
193 {
194 set_fail_state(error);
195 }
196 else
197 {
198 new id = data[0];
199
200 if(SQL_NumResults(hQuery))
201 {
202 new colRank = SQL_ReadResult(hQuery, 0) + 1;
203 client_printcolor(id, "/y[/ctr%s/y] Your rank is /ctr%d", PREFIX, colRank);
204 }
205 }
206}
207
208public showPlayerRank(id)
209{
210 static query[512];
211 formatex(query, charsmax(query), "SELECT COUNT(*) FROM mix_players WHERE points > '%d'", pPoints[id]);
212 log_amx(query)
213 static data[2];
214 data[0] = id;
215
216 SQL_ThreadQuery(g_hTuple, "QueryLoadRank", query, data, sizeof(data));
217 return PLUGIN_HANDLED;
218}
219
220public showPlayerStats(id)
221{
222 new menu = menu_create("\w[\rMIX\w] Statistics\r", "showPlayerStatsHandler");
223
224 new players[32], pnum, tempid;
225
226 new szName[35], szUserId[35];
227
228 get_players(players, pnum);
229
230 for(new i; i<pnum; i++)
231 {
232 tempid = players[i];
233
234 if(!is_user_connected(tempid)) continue;
235
236 get_user_name(tempid, szName, charsmax(szName));
237 get_user_authid(tempid, szUserId, 34);
238
239 menu_additem(menu, szName, szUserId, 0);
240 }
241
242 menu_display(id, menu, 0);
243
244 return PLUGIN_HANDLED;
245}
246
247public showPlayerStatsHandler(id, menu, item)
248{
249 if(item == MENU_EXIT)
250 {
251 menu_destroy(menu)
252 return PLUGIN_HANDLED;
253 }
254 new szData[64], szName[64];
255 new _access, item_callback;
256 menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
257
258 new link[128];
259
260 format(link, 127, "http://cs.saudyk.lt/stats/player.php?sid=%s", szData);
261 show_motd(id, link, "Player statistics");
262
263 menu_destroy(menu);
264 return PLUGIN_HANDLED;
265}
266
267public BanMenu(id)
268{
269 if(!isAdmin(id))
270 return PLUGIN_HANDLED;
271
272 client_cmd(id, "amx_banmenu");
273
274 return PLUGIN_HANDLED;
275}
276
277public KickMenu(id)
278{
279 if(!isAdmin(id))
280 return PLUGIN_HANDLED;
281
282 client_cmd(id, "amx_kickmenu");
283
284 return PLUGIN_HANDLED;
285}
286
287public MapsMenu(id)
288{
289 if(!isAdmin(id))
290 return PLUGIN_HANDLED;
291
292 engclient_cmd(id, "amx_mapmenu");
293
294 return PLUGIN_HANDLED;
295}
296
297public LeaveMenu(id)
298{
299 if(!isAdmin(id))
300 return PLUGIN_HANDLED;
301
302 client_cmd(id, "amx_bandisconnectedmenu");
303
304 return PLUGIN_HANDLED;
305}
306
307public ChatMenu(id)
308{
309 if(!isAdmin(id)) return PLUGIN_HANDLED;
310
311 canChat = false;
312
313 client_printcolor(id, "/y[/ctr%s/y] Chat OFF!", PREFIX);
314
315 return PLUGIN_HANDLED;
316}
317
318public Chat(id)
319{
320 if(!isAdmin(id))
321 return PLUGIN_HANDLED;
322
323 canChat = true;
324
325 client_printcolor(id, "/y[/ctr%s/y] Chat ON!", PREFIX);
326
327 return PLUGIN_HANDLED;
328}
329
330public showStats(id)
331{
332 new link[128], steamid[64];
333 get_user_authid(id, steamid, 63);
334 format(link, 127, "http://cs.saudyk.lt/stats/player.php?sid=%s", steamid);
335
336 show_motd(id, link, "Player statistika");
337}
338
339public showTOP(id)
340{
341 new link[128];
342 format(link, 127, "https://mp3kung.se/stats/stats.php");
343
344 show_motd(id, link, "TOP STATS");
345}
346
347public plugin_cfg()
348{
349 set_task(0.5, "MySQLx_Init");
350}
351
352public MySQLx_Init()
353{
354 g_hTuple = SQL_MakeDbTuple(MIX_HOST, MIX_USER, MIX_PASSWORD, MIX_DATABASE);
355
356 for(new i = 0; i < sizeof szTables; i++)
357 {
358 SQL_ThreadQuery(g_hTuple, "QuerySetData", szTables[i]);
359 }
360}
361
362public QuerySetData(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
363{
364 if( iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
365 {
366 log_amx("%s", szError);
367 return;
368 }
369}
370
371public ClientListen(pid, id)
372{
373 if(pid == id) return 1;
374
375 if(is_user_connected(id))
376 {
377 new szTeam[2];
378 szTeam[0] = get_pdata_int(id, 114);
379 szTeam[1] = get_pdata_int(pid, 114);
380
381 if(szTeam[0] == szTeam[1] || WarmUp || KnifeRound || PrepareRound)
382 {
383 engfunc(EngFunc_SetClientListening, pid, id, 1);
384 return 4;
385 }
386 engfunc(EngFunc_SetClientListening, pid, id, 0);
387 return 4;
388 }
389 return 1;
390}
391
392public client_connect(id)
393{
394 if(WarmUp)
395 {
396 set_task(1.0, "RespawnPlayer")
397 }
398
399 if(!WarmUp && !PrepareRound)
400 {
401 if(get_playersnum() < 10)
402 {
403 set_task(1.0, "set_password")
404 }
405 }
406
407 pTempKills[id] = 0;
408 pTempDeaths[id] = 0;
409 pTempHeadshots[id] = 0;
410 pTempAces[id] = 0;
411 pTempMiniAces[id] = 0;
412 pTempPoints[id] = 0;
413 pTempPlants[id] = 0;
414 pTempDefusions[id] = 0;
415
416 pKills[id] = 0;
417 pDeaths[id] = 0;
418 pHeadshots[id] = 0;
419 pAces[id] = 0;
420 pMiniAces[id] = 0;
421 pMiniAces[id] = 0;
422 pMiniAces[id] = 0;
423 pMixPlayed[id] = 0;
424 pMixLost[id] = 0;
425 pMixDraw[id] = 0;
426 pMixWon[id] = 0;
427 pPoints[id] = 0;
428 pLoaded[id] = false;
429 LoadPlayerData(id);
430}
431
432
433
434public SavePlayer(id)
435{
436 if(!pLoaded[id])
437 return PLUGIN_HANDLED;
438
439 if(pPoints[id] < 0)
440 pPoints[id] = 0;
441
442 new Name[64], steam[64];
443 get_user_name(id, Name, 63);
444
445 get_user_authid(id, steam, 63);
446
447 static szQuery[3800];
448 formatex(szQuery, 3799, "REPLACE INTO `mix_players` (`player_id`, `player_name`, `kills`, `deaths`, `headshots`, `aces`, `m_aces`, `mix_played`, `mix_lost`, `mix_won`, `mix_draw`, `points`, `last_online`) VALUES ('%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', NOW());", steam, GetSecureName(Name), pKills[id], pDeaths[id], pHeadshots[id], pAces[id], pMiniAces[id], pMixPlayed[id], pMixLost[id], pMixWon[id], pMixDraw[id], pPoints[id]);
449
450 #if AMXX_VERSION_NUM >= 183
451 SQL_SetCharset(g_hTuple,"utf8");
452 #endif
453
454 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
455
456 return PLUGIN_CONTINUE;
457}
458
459public LoadPlayerData(id)
460{
461 new steam[64];
462 get_user_authid(id, steam, 63);
463
464 static szQuery[256], iData[1];
465 formatex(szQuery, 255, "SELECT * FROM `mix_players` WHERE (`player_id` = '%s');", steam);
466
467 iData[0] = id;
468 SQL_ThreadQuery(g_hTuple, "QuerySelectData", szQuery, iData, 1);
469
470 return PLUGIN_CONTINUE;
471}
472
473public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
474{
475 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
476 {
477 log_amx("%s", szError);
478
479 return;
480 }
481 else
482 {
483 new id = iData[0];
484 new data_kills = SQL_FieldNameToNum(hQuery, "kills");
485 new data_deaths = SQL_FieldNameToNum(hQuery, "deaths");
486 new data_headshots = SQL_FieldNameToNum(hQuery, "headshots");
487 new data_aces = SQL_FieldNameToNum(hQuery, "aces");
488 new data_mini_aces = SQL_FieldNameToNum(hQuery, "m_aces");
489 new data_mix_played = SQL_FieldNameToNum(hQuery, "mix_played");
490 new data_mix_lost = SQL_FieldNameToNum(hQuery, "mix_lost");
491 new data_mix_draw = SQL_FieldNameToNum(hQuery, "mix_draw");
492 new data_mix_won = SQL_FieldNameToNum(hQuery, "mix_won");
493 new data_points = SQL_FieldNameToNum(hQuery, "points");
494
495 while (SQL_MoreResults(hQuery))
496 {
497 pKills[id] = SQL_ReadResult(hQuery, data_kills);
498 pDeaths[id] = SQL_ReadResult(hQuery, data_deaths);
499 pHeadshots[id] = SQL_ReadResult(hQuery, data_headshots);
500 pAces[id] = SQL_ReadResult(hQuery, data_aces);
501 pMiniAces[id] = SQL_ReadResult(hQuery, data_mini_aces);
502 pMixPlayed[id] = SQL_ReadResult(hQuery, data_mix_played);
503 pMixLost[id] = SQL_ReadResult(hQuery, data_mix_lost);
504 pMixDraw[id] = SQL_ReadResult(hQuery, data_mix_draw);
505 pMixWon[id] = SQL_ReadResult(hQuery, data_mix_won);
506 pPoints[id] = SQL_ReadResult(hQuery, data_points);
507
508 SQL_NextRow(hQuery);
509 }
510 pLoaded[id] = true;
511 }
512}
513
514public client_disconnected(id)
515{
516 if(!WarmUp && !PrepareRound)
517 {
518 if(1 <= get_user_team(id) <= 2)
519 {
520 server_cmd("sv_password ^"^"");
521 client_printcolor(0, "/y[/ctr%s/y] Player: /g%s /ydisconnected!", PREFIX, get_admin_name(id))
522 }
523 }
524
525 if(!WarmUp && !PrepareRound)
526 {
527 if(get_playersnum() < 10)
528 {
529 set_task(1.0, "set_password")
530 }
531 }
532}
533
534public bomb_planted(planter)
535{
536 if(!WarmUp && !PrepareRound)
537 {
538 pTempPlants[planter]++;
539 pPoints[planter] += BOMB_PLANTED_POINTS;
540
541 client_printcolor(planter, "/y[/ctr%s/y] Got /ctr%d/y points for bomb plant", PREFIX, BOMB_PLANTED_POINTS);
542
543 SavePlayer(planter);
544 }
545}
546
547public bomb_defused(defuser)
548{
549 if(!WarmUp && !PrepareRound)
550 {
551 pTempDefusions[defuser]++;
552 pPoints[defuser] += BOMB_DEFUSED_POINTS;
553
554 client_printcolor(defuser, "/y[/ctr%s/y] Got /ctr%d/y points for bomb defuse", PREFIX, BOMB_DEFUSED_POINTS);
555
556 SavePlayer(defuser);
557 }
558}
559
560public t_win(id)
561{
562 if(!WarmUp && !KnifeRound && !PrepareRound) scoreT++;
563
564 if(KnifeRound)
565 {
566 if(tempT)
567 {
568 showTeamMenu(tempT);
569 }
570 }
571}
572
573public ct_win(id)
574{
575 if(!WarmUp && !KnifeRound && !PrepareRound) scoreCT++;
576
577 if(KnifeRound)
578 {
579 if(tempCT)
580 {
581 showTeamMenu(tempCT);
582 }
583 }
584}
585
586public PlayerSpawn(id)
587{
588 if(WarmUp && is_user_connected(id))
589 {
590 cs_set_user_money(id, 16000);
591 }
592
593 Kills[id] = 0;
594
595 return PLUGIN_HANDLED;
596}
597
598public RoundEnd()
599{
600 if(WarmUp) server_cmd("hostname ^"%s [Warmup]^"", HOSTNAME);
601 else if(KnifeRound) server_cmd("hostname ^"%s [Knife Round]^"", HOSTNAME);
602 else if(PrepareRound) server_cmd("hostname ^"%s [Choosing teams]^"", HOSTNAME);
603 else
604 {
605 if(scoreT == 16 || scoreCT == 16)
606 {
607 server_cmd("hostname ^"[Mix finished - [CT] %i : %i [T]] %s^"", scoreCT, scoreT, HOSTNAME);
608 }
609 else if(scoreT == 15 || scoreCT == 15)
610 {
611 server_cmd("hostname ^"[Live (MB) - [CT] %i : %i [T]] %s^"", scoreCT, scoreT, HOSTNAME);
612 }
613 else
614 {
615 if(scoreCT+scoreT == 15)
616 {
617 server_cmd("hostname ^"[Live - [CT] %i : %i [T]] %s^"", scoreCT, scoreT, HOSTNAME);
618 }
619 else
620 {
621 server_cmd("hostname ^"[Live - [T] %i : %i [CT]] %s^"", scoreT, scoreCT, HOSTNAME);
622 }
623 }
624 }
625
626 if(!WarmUp && !KnifeRound && !PrepareRound)
627 {
628 for(new i = 1; i <= 32; i++)
629 {
630 if(is_user_connected(i))
631 {
632 if(Kills[i] == 4)
633 {
634 client_printcolor(0, "/y[/ctr%s/y] Player: /g%s /ymade /ctrMINI ACE", PREFIX, get_admin_name(i));
635 client_printcolor(0, "/y[/ctr%s/y] Player: /g%s /yuž MINI ACE /ctrgauna /g%i tašku!", PREFIX, get_admin_name(i), POINTS_MINI_ACE);
636
637 if(!WarmUp && !PrepareRound)
638 {
639 // Temp
640 pTempMiniAces[i]++;
641 pTempPoints[i] += POINTS_MINI_ACE;
642
643 pMiniAces[i]++;
644 pPoints[i] += POINTS_MINI_ACE;
645
646 SavePlayer(i);
647 }
648 }
649 else if(Kills[i] == 5)
650 {
651 client_printcolor(0, "/y[/ctr%s/y] Player: /g%s /ymade /ctrACE", PREFIX, get_admin_name(i));
652 client_printcolor(0, "/y[/ctr%s/y] Player: /g%s /yuž ACE /ctrgauna /g%i tašku!", PREFIX, get_admin_name(i), POINTS_ACE);
653
654 // Temp
655 pTempAces[i]++;
656 pTempPoints[i] += POINTS_ACE;
657
658 pAces[i]++;
659 pPoints[i] += POINTS_ACE;
660
661 SavePlayer(i);
662 }
663 }
664 }
665
666 if(scoreCT + scoreT == 15)
667 {
668 new temp = scoreCT;
669 scoreCT = scoreT;
670 scoreT = temp;
671 client_printcolor(0, "/y[/ctr%s/y] Switching sides!", PREFIX);
672 changeTeams();
673 server_cmd("sv_restart 5");
674 }
675
676 client_printcolor(0, "/y[/ctr%s/y] [CT] /g%i /y: /g%i /y[T]", PREFIX, scoreCT, scoreT);
677
678 if(scoreT == 15 && scoreCT == 15)
679 {
680 client_printcolor(0, "/y[/ctr%s/y] /gMix finished. /yDraw!", PREFIX);
681 client_printcolor(0, "/y[/ctr%s/y] /gPlayers gets: /g%i points!", PREFIX, POINTS_MIX_DRAW);
682 drawGame();
683 setEndGame();
684 }
685 else if(scoreT == 15) client_printcolor(0, "/y[/ctr%s/y] Terrorists MB", PREFIX);
686 else if(scoreCT == 15) client_printcolor(0, "/y[/ctr%s/y] Counter-Terrorists MB", PREFIX);
687
688 else if(scoreT == 16)
689 {
690 TeamWon(1);
691 client_printcolor(0, "/y[/ctr%s/y] /gMix finished. Winner: /yTerrorists team!", PREFIX);
692 client_printcolor(0, "/y[/ctr%s/y] /gTerrorists team players gets: /g%i points!", PREFIX, POINTS_MIX_WON);
693 setEndGame();
694 }
695 else if(scoreCT == 16)
696 {
697 TeamWon(2);
698 client_printcolor(0, "/y[/ctr%s/y] /gMix finished. Winner: /yCounter-Terrorists team!", PREFIX);
699 client_printcolor(0, "/y[/ctr%s/y] /gCounter-Terrorists team players gets: /g%i points!", PREFIX, POINTS_MIX_WON);
700 setEndGame();
701 }
702 }
703}
704
705public changeTeams()
706{
707 for(new i = 1; i <= 32; i++)
708 {
709 add_delay(i);
710 }
711}
712
713public changeTeam(id)
714{
715 if(is_user_connected(id))
716 {
717 switch(get_user_team(id))
718 {
719 case 2: cs_set_user_team(id, CS_TEAM_T);
720 case 1: cs_set_user_team(id, CS_TEAM_CT);
721 }
722 }
723}
724
725add_delay(id)
726{
727 switch(id)
728 {
729 case 1..5: set_task(0.1, "changeTeam", id);
730 case 6..10: set_task(0.2, "changeTeam", id);
731 case 11..15: set_task(0.3, "changeTeam", id);
732 case 16..20: set_task(0.4, "changeTeam", id);
733 case 21..25: set_task(0.5, "changeTeam", id);
734 case 26..32: set_task(0.6, "changeTeam", id);
735 }
736}
737
738public DeathEvent(victim, attacker)
739{
740 new attacker = read_data(1);
741 new victim = read_data(2);
742 new hs = read_data(3);
743 new weapon_name[32]; read_data(4, weapon_name, 31);
744
745 if(WarmUp)
746 {
747 set_task(1.0, "RespawnPlayer", victim);
748 }
749 else if(1 <= victim <= 32 && 1 <= attacker <= 32)
750 {
751 if(!WarmUp && !PrepareRound)
752 {
753 Kills[attacker]++;
754 pKills[attacker]++;
755 pPoints[attacker] += POINTS_KILL;
756
757 client_printcolor(attacker, "/y[/ctr%s/y] Got /ctr%d/y points for kill", PREFIX, POINTS_KILL);
758
759 pTempKills[attacker]++;
760 pTempPoints[attacker] += POINTS_KILL;
761
762 if(hs)
763 {
764 pTempHeadshots[attacker]++;
765 pTempPoints[attacker] += POINTS_HS;
766
767 pHeadshots[attacker]++;
768 pPoints[attacker] += POINTS_HS;
769 }
770
771 pTempDeaths[victim]++;
772 pTempPoints[victim] += POINTS_DEATH;
773
774 client_printcolor(victim, "/y[/ctr%s/y] Lost /ctr%d/y points for death", PREFIX, POINTS_DEATH);
775
776 pDeaths[victim]++;
777 pPoints[victim] += POINTS_DEATH;
778
779 SavePlayer(victim);
780 SavePlayer(attacker);
781
782
783
784
785 }
786 }
787}
788
789public RespawnPlayer(id)
790{
791 if(!is_user_alive(id) && is_user_connected(id) && 1 <= get_user_team(id) <= 2)
792 {
793 ExecuteHamB(Ham_CS_RoundRespawn, id);
794 }
795}
796
797public event_CurWeapon(id)
798{
799 if(KnifeRound && get_user_weapon(id) != CSW_KNIFE)
800 {
801 engclient_cmd(id, "weapon_knife");
802 }
803}
804
805public infoPassword(id)
806{
807 if(!passwordStatus)
808 {
809 client_printcolor(id, "/y[/ctr%s/y] Server password: /g%s", PREFIX, serverPassword);
810 }
811 else
812 {
813 client_printcolor(id, "/y[/ctr%s/y] No server password!", PREFIX, serverPassword);
814 }
815 return PLUGIN_HANDLED;
816}
817
818public hookSay(id)
819{
820 if(!canChat)
821 {
822 client_printcolor(id, "/y[/ctr%s/y] Chat OFF!", PREFIX);
823 return PLUGIN_HANDLED;
824 }
825 return PLUGIN_CONTINUE;
826}
827
828public cmd_block(id)
829{
830 if(!WarmUp && !PrepareRound)
831 {
832 if(1 <= get_user_team(id) <= 2)
833 return PLUGIN_HANDLED;
834 }
835 return PLUGIN_CONTINUE;
836}
837
838public BlockConsole(id)
839{
840 return PLUGIN_HANDLED;
841}
842
843public mainMenu(id)
844{
845 if(!isAdmin(id))
846 return PLUGIN_HANDLED;
847
848 new menu = menu_create("\w[\yMIX\w] \rMix Menu", "onMainMenu");
849
850 new szMsg[64];
851
852 menu_additem(menu, "Mix Menu");
853
854 format(szMsg, 63, "\wChat \d[%s\d]", canChat ? "\yON" : "\rOFF");
855 menu_additem(menu, szMsg);
856
857 if(serverPassword[0]) format(szMsg, 63, "\wPassword \d[\y%s\d]", serverPassword);
858 else format(szMsg, 63, "\wPassword \d[\rNO PASSWORD\d]");
859 menu_additem(menu, szMsg);
860
861 menu_additem(menu, "Kick player");
862 menu_additem(menu, "Ban Player");
863 menu_additem(menu, "Change Map");
864 menu_additem(menu, "Disconnected Players");
865
866 menu_display(id, menu, 0)
867
868 return PLUGIN_HANDLED;
869}
870
871public onMainMenu(id, menu, item)
872{
873 switch(item)
874 {
875 case 0: actMix(id);
876 case 1:
877 {
878 canChat = !canChat;
879 mainMenu(id);
880 return PLUGIN_HANDLED;
881 }
882 case 2: optionsPassword(id);
883 case 3: client_cmd(id, "amx_kickmenu");
884 case 4: client_cmd(id, "amx_banmenu");
885 case 5: client_cmd(id, "amx_mapmenu");
886 case 6: client_cmd(id, "amx_bandisconnectedmenu");
887 }
888 menu_destroy(menu);
889 return PLUGIN_HANDLED;
890}
891
892public optionsPassword(id)
893{
894 if(!isAdmin(id))
895 return PLUGIN_HANDLED;
896
897 new szText[64];
898 if(serverPassword[0]) format(szText, 63, "\w[\yPlayMix.se\w] \rPassword: \d(\y%s\d)", serverPassword);
899
900 else format(szText, 63, "\w[\yMIX\w] \rPlayMix.se \d(\rNo password\d)");
901 new menu = menu_create(szText, "onOptionsPassword");
902
903 format(szText, 63, "\wPassword \d[%s\d]", passwordStatus ? "\yON" : "\rOFF");
904
905 menu_additem(menu, szText);
906 menu_additem(menu, "Change Password");
907 menu_additem(menu, "Remove Password");
908
909 menu_display(id, menu, 0);
910
911 return PLUGIN_HANDLED;
912}
913
914public onOptionsPassword(id, menu, item)
915{
916 switch(item)
917 {
918 case MENU_EXIT:
919 {
920 mainMenu(id);
921 return PLUGIN_HANDLED;
922 }
923 case 0:
924 {
925 if(serverPassword[0])
926 {
927 passwordStatus = !passwordStatus;
928
929 if(passwordStatus)
930 {
931 server_cmd("sv_password", serverPassword);
932 }
933 else server_cmd("sv_password ^"^"");
934 }
935 else
936 {
937 if(passwordStatus)
938 passwordStatus = false;
939 client_printcolor(id, "/y[/ctr%s/y] No password!", PREFIX);
940 }
941
942 }
943 case 1: client_cmd(id, "messagemode SetPassword");
944 case 2: format(serverPassword, 63, "");
945 }
946 optionsPassword(id);
947 return PLUGIN_HANDLED;
948}
949
950public _SetPassword(id)
951{
952 if(!isAdmin(id))
953 return;
954
955 new szTemp[64];
956 read_args(szTemp, charsmax(szTemp));
957 remove_quotes(szTemp);
958 format(serverPassword, 63, szTemp);
959 optionsPassword(id);
960
961 if(!passwordStatus)
962 {
963 server_cmd("sv_password %s", serverPassword);
964 client_printcolor(0, "/y[/ctr%s/y] /g%s/y] Server Password: /g%s" , PREFIX, get_admin_name(id), szTemp);
965 }
966}
967
968public actMix(id)
969{
970 if(!isAdmin(id))
971 return PLUGIN_HANDLED;
972
973 new menu = menu_create("\w[\yMIX\w] \rMix Menu", "onactMix");
974
975 menu_additem(menu, "Start Mix");
976 menu_additem(menu, "Choose Captains");
977 menu_additem(menu, "Warm up");
978 menu_additem(menu, "Knife");
979 menu_additem(menu, "Friendly Fire");
980 menu_additem(menu, "Restart Round");
981 menu_additem(menu, "Stop Mix");
982
983 menu_display(id, menu, 0);
984
985 return PLUGIN_HANDLED;
986}
987
988public onactMix(id, menu, item)
989{
990 switch(item)
991 {
992 case 0: setLive(id);
993 case 1: setPrepare(id);
994 case 2: warmUP(id);
995 case 3: setKnife(id);
996 case 4: FriendlyFire(id);
997 case 5: restartRound(id);
998 case 6: endGame(id);
999 }
1000 menu_destroy(menu);
1001}
1002
1003public setPrepare(id)
1004{
1005 if(!isAdmin(id))
1006 return PLUGIN_HANDLED;
1007
1008 if(get_playersnum() >= 2)
1009 {
1010 server_cmd("sv_restart 1");
1011
1012 KnifeRound = false;
1013 PrepareRound = true;
1014 WarmUp = false;
1015 scoreCT = 0;
1016 scoreT = 0;
1017 tempCount = 0;
1018 tempCT = 0;
1019 tempT = 0;
1020
1021 for(new i = 1; i <= 32; i++)
1022 {
1023 if(is_user_connected(id) && (1 <= get_user_team(i) <= 2))
1024 {
1025 if(is_user_alive(i))
1026 user_silentkill(i);
1027 cs_set_user_team(i, CS_TEAM_SPECTATOR);
1028 }
1029 }
1030
1031 client_printcolor(0, "/y[/ctr%s/y] [/g%s/y] Team selection has started! Admin will now choose 2 captains!", PREFIX, get_admin_name(id));
1032 showPrepareMenu(id);
1033 }
1034 else
1035 {
1036 client_printcolor(id, "/y[/ctr%s/y] Cant choose captains - need more players!", PREFIX);
1037 }
1038 return PLUGIN_HANDLED;
1039}
1040
1041public showPrepareMenu(id)
1042{
1043 if(!isAdmin(id))
1044 return PLUGIN_HANDLED;
1045
1046 new menu = menu_create("\w[\yMIX\w] \rChoose CT captain", "onPrepareCT");
1047
1048 new players[32], num;
1049 get_players(players, num, "ch");
1050 new szText[64], ui[32];
1051
1052 for(new i; i < num; i++)
1053 {
1054 format(ui, 31, "%d",get_user_userid(players[i]))
1055
1056 if(pPoints[players[i]] <= 10000)
1057 {
1058 formatex(szText, charsmax(szText), "\d%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1059 }
1060 else if(pPoints[players[i]] <= 20000)
1061 {
1062 formatex(szText, charsmax(szText), "\w%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1063 }
1064 if(pPoints[players[i]] <= 30000)
1065 {
1066 formatex(szText, charsmax(szText), "\y%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1067 }
1068 else
1069 {
1070 formatex(szText, charsmax(szText), "\r%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1071 }
1072 menu_additem(menu, szText, ui);
1073 }
1074
1075 menu_display(id, menu, 0);
1076
1077 return PLUGIN_HANDLED;
1078}
1079
1080public onPrepareCT(id, menu, item)
1081{
1082 new szData[6], szName[64];
1083 new _access, item_callback;
1084
1085 menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
1086
1087 new userid = str_to_num(szData);
1088 new player = find_player("k", userid);
1089
1090 switch(item)
1091 {
1092 case MENU_EXIT:
1093 {
1094 if(PrepareRound) showPrepareMenu(id);
1095 return PLUGIN_HANDLED;
1096 }
1097 default: if(PrepareRound && is_user_connected(player)) cs_set_user_team(player, CS_TEAM_CT);
1098 }
1099
1100 if(PrepareRound)
1101 {
1102 tempCT = player;
1103 client_printcolor(0, "/y[/ctr%s/y] CT captain: /g%s", PREFIX, szName);
1104 client_printcolor(0, "/y[/ctr%s/y] Admin will now choose T captain!", PREFIX);
1105 showPrepareMenuT(id);
1106 }
1107
1108 return PLUGIN_HANDLED;
1109}
1110
1111public showPrepareMenuT(id)
1112{
1113 if(!isAdmin(id))
1114 return PLUGIN_HANDLED;
1115 new menu = menu_create("\w[\yMIX\w] \rChoose T captain", "onPrepareT");
1116
1117 new players[32], num;
1118 get_players(players, num, "ceh", "SPECTATOR");
1119 new szText[64], ui[32];
1120
1121 for(new i; i < num; i++)
1122 {
1123 format(ui, 31, "%d",get_user_userid(players[i]))
1124
1125 if(pPoints[players[i]] <= 10000)
1126 {
1127 formatex(szText, charsmax(szText), "\d%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1128 }
1129 else if(pPoints[players[i]] <= 20000)
1130 {
1131 formatex(szText, charsmax(szText), "\w%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1132 }
1133 if(pPoints[players[i]] <= 30000)
1134 {
1135 formatex(szText, charsmax(szText), "\y%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1136 }
1137 else
1138 {
1139 formatex(szText, charsmax(szText), "\r%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1140 }
1141 menu_additem(menu, szText, ui);
1142 }
1143
1144 menu_display(id, menu, 0)
1145
1146 return PLUGIN_HANDLED;
1147}
1148
1149public onPrepareT(id, menu, item)
1150{
1151 new szData[6], szName[64];
1152 new _access, item_callback;
1153
1154 menu_item_getinfo( menu, item, _access, szData,charsmax(szData), szName, charsmax(szName), item_callback);
1155
1156 new userid = str_to_num(szData);
1157 new player = find_player("k", userid);
1158
1159 switch(item)
1160 {
1161 case MENU_EXIT:
1162 {
1163 if(PrepareRound) showPrepareMenuT(id);
1164 return PLUGIN_HANDLED;
1165 }
1166 default: if(PrepareRound && is_user_connected(player)) cs_set_user_team(player, CS_TEAM_T)
1167 }
1168 if(PrepareRound)
1169 {
1170 tempT = player;
1171 client_printcolor(0, "/y[/ctr%s/y] T captain is: /g%s", PREFIX, szName);
1172 client_printcolor(0, "/y[/ctr%s/y] Captains start to choose players", PREFIX);
1173 client_printcolor(0, "/y[/ctr%s/y] /gIMPORTANT: /yIf you cant see player menu write /ctr.choose", PREFIX);
1174 ShowList(tempCT);
1175 }
1176 return PLUGIN_HANDLED;
1177}
1178
1179public choosePlayers(id)
1180{
1181 switch(tempCount)
1182 {
1183 case 0, 2, 4, 6: if(tempT == id) ShowList(id);
1184 case 1, 3, 5, 7: if(tempCT == id) ShowList(id);
1185 }
1186 return PLUGIN_HANDLED;
1187}
1188
1189public showTeamMenu(id)
1190{
1191 new menu = menu_create("\w[\yMIX\w] \rChoose side", "onTeamChange")
1192
1193 menu_additem(menu, "Stay");
1194 menu_additem(menu, "Switch");
1195
1196 menu_display(id, menu, 0);
1197
1198 return PLUGIN_HANDLED;
1199}
1200
1201public onTeamChange(id, menu, item)
1202{
1203 switch(item)
1204 {
1205 case 0:
1206 {
1207 client_printcolor(0, "/y[/ctr%s/y] Vote: /gStay", PREFIX);
1208 setServerLive();
1209 }
1210 case 1:
1211 {
1212 client_printcolor(0, "/y[/ctr%s/y] Vote: /gSwith side", PREFIX);
1213 changeTeams();
1214 set_task(2.0, "setServerLive", 1);
1215 }
1216 }
1217}
1218
1219public ShowList(id)
1220{
1221 new menu = menu_create("\w[\yMIX\w] \rChoose a player", "onShowList")
1222
1223 new players[32], num;
1224 get_players(players, num, "ceh", "SPECTATOR");
1225 new szText[64], ui[32];
1226
1227 for(new i; i < num; i++)
1228 {
1229 format(ui, 31, "%d",get_user_userid(players[i]));
1230
1231 if(pPoints[players[i]] <= 10000)
1232 {
1233 formatex(szText, charsmax(szText), "\d%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1234 }
1235 else if(pPoints[players[i]] <= 20000)
1236 {
1237 formatex(szText, charsmax(szText), "\w%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1238 }
1239 if(pPoints[players[i]] <= 30000)
1240 {
1241 formatex(szText, charsmax(szText), "\y%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1242 }
1243 else
1244 {
1245 formatex(szText, charsmax(szText), "\r%s - %d", get_admin_name(players[i]), pPoints[players[i]]);
1246 }
1247 menu_additem(menu, szText, ui)
1248 }
1249
1250 menu_display(id, menu, 0);
1251
1252 return PLUGIN_HANDLED;
1253}
1254
1255public onShowList(id, menu, item)
1256{
1257 new szData[6], szName[64];
1258 new _access, item_callback;
1259
1260 new Where;
1261 switch(tempCount)
1262 {
1263 case 0, 2, 4, 6: Where = 0;
1264 case 1, 3, 5, 7: Where = 1;
1265 default: Where = -1;
1266 }
1267
1268 menu_item_getinfo(menu, item, _access, szData,charsmax(szData), szName,charsmax(szName), item_callback);
1269
1270 new userid = str_to_num(szData);
1271 new player = find_player("k", userid);
1272
1273 switch(item)
1274 {
1275 case MENU_EXIT:
1276 {
1277 if(PrepareRound) ShowList(id)
1278 return PLUGIN_HANDLED;
1279 }
1280 default: if(PrepareRound && is_user_connected(player))
1281 {
1282 if(Where == 0)
1283 {
1284 cs_set_user_team(player, CS_TEAM_CT);
1285 }
1286 else
1287 {
1288 cs_set_user_team(player, CS_TEAM_T);
1289 }
1290 }
1291 }
1292 if(PrepareRound)
1293 {
1294 tempCount++;
1295 client_printcolor(0, "/y[/ctr%s/y] [/g%s /yChose /g%s", PREFIX, get_admin_name(id), szName);
1296
1297 if(tempCount < 8)
1298 {
1299 ShowList(Where == 1 ? tempCT : tempT);
1300 }
1301 else
1302 {
1303 /*KnifeRound = true;
1304 PrepareRound = false;
1305 WarmUp = false;
1306 scoreCT = 0;
1307 scoreT = 0;
1308
1309 server_cmd("mp_roundtime 1.8")
1310 server_cmd("mp_buytime 0.30")
1311 server_cmd("mp_startmoney 16000")
1312 server_cmd("mp_freezetime 7")
1313
1314 server_cmd("sv_restart 1")*/
1315
1316 client_printcolor(0, "/y[/ctr%s/y] Team slection finished!", PREFIX)
1317
1318 setServerLive()
1319 }
1320 }
1321 return PLUGIN_HANDLED;
1322}
1323
1324public restartRound(id)
1325{
1326 if(!isAdmin(id))
1327 return PLUGIN_HANDLED;
1328
1329 server_cmd("sv_restart 1");
1330
1331 client_printcolor(0, "/y[/ctr%s/y] Round restarted!", PREFIX);
1332 return PLUGIN_HANDLED;
1333}
1334
1335public setServerLive()
1336{
1337 KnifeRound = false;
1338 PrepareRound = false;
1339 WarmUp = false;
1340 scoreCT = 0;
1341 scoreT = 0;
1342
1343 server_cmd("mp_roundtime 1.8")
1344 server_cmd("mp_buytime 0.30")
1345 server_cmd("mp_startmoney 800")
1346 server_cmd("mp_freezetime 7")
1347
1348 server_cmd("sv_restart 3")
1349
1350 set_task(1.0, "set_password");
1351
1352 client_printcolor(0, "/y[/ctr%s/y] MIX is LIVE! GL-HF", PREFIX)
1353 client_printcolor(0, "/y[/ctr%s/y] MIX is LIVE! GL-HF", PREFIX)
1354 client_printcolor(0, "/y[/ctr%s/y] MIX is LIVE! GL-HF", PREFIX)
1355 client_printcolor(0, "/y[/ctr%s/y] MIX is LIVE! GL-HF", PREFIX)
1356
1357 server_cmd("hostname ^"[Live - [CT] 0 : 0 [T] %s^"", HOSTNAME)
1358
1359 return PLUGIN_HANDLED;
1360}
1361
1362public setLive(id)
1363{
1364 if(!isAdmin(id))
1365 return PLUGIN_HANDLED
1366
1367 KnifeRound = false;
1368 PrepareRound = false;
1369 WarmUp = false;
1370 scoreCT = 0;
1371 scoreT = 0;
1372
1373 server_cmd("mp_roundtime 1.8");
1374 server_cmd("mp_buytime 0.30");
1375 server_cmd("mp_startmoney 800");
1376 server_cmd("mp_freezetime 7");
1377
1378 server_cmd("sv_restart 3");
1379
1380 set_task(1.0, "set_password");
1381
1382 client_printcolor(0, "/y[/ctr%s/y] MIX is LIVE! GL-HF", PREFIX)
1383
1384 server_cmd("hostname ^"[Live - [CT] 0 : 0 [T] %s^"", HOSTNAME)
1385
1386 return PLUGIN_HANDLED;
1387}
1388
1389public setRestart(id)
1390{
1391 if(!isAdmin(id))
1392 return PLUGIN_HANDLED;
1393
1394 server_cmd("sv_restart 1");
1395
1396 client_printcolor(0, "/y[/ctr%s/y] Round restarted!", PREFIX);
1397 return PLUGIN_HANDLED;
1398}
1399
1400public warmUP(id)
1401{
1402 if(!isAdmin(id))
1403 return PLUGIN_HANDLED;
1404
1405 passwordStatus = false;
1406 KnifeRound = false;
1407 PrepareRound = false;
1408 WarmUp = true;
1409 scoreCT = 0;
1410 scoreT = 0;
1411
1412 server_cmd("mp_roundtime 60");
1413 server_cmd("mp_buytime 999999");
1414 server_cmd("mp_startmoney 16000");
1415 server_cmd("mp_freezetime 0");
1416 server_cmd("sv_password ^"^"");
1417
1418 server_cmd("sv_restart 1");
1419
1420 client_printcolor(0, "/y[/ctr%s/y] [/g%s/y] Warmup started!", PREFIX, get_admin_name(id));
1421
1422 server_cmd("hostname ^"%s [Warmup]^"", HOSTNAME)
1423
1424 return PLUGIN_HANDLED;
1425}
1426
1427public setKnife(id)
1428{
1429 if(!isAdmin(id))
1430 return PLUGIN_HANDLED;
1431
1432 KnifeRound = true;
1433 PrepareRound = false;
1434 WarmUp = false;
1435 scoreCT = 0;
1436 scoreT = 0;
1437
1438 server_cmd("mp_roundtime 1.8");
1439 server_cmd("mp_buytime 0.30");
1440 server_cmd("mp_startmoney 800");
1441 server_cmd("mp_freezetime 7");
1442
1443 server_cmd("sv_restart 1");
1444
1445 client_printcolor(0, "/y[/ctr%s/y] [/g%s/y] Knife round started!", PREFIX, get_admin_name(id));
1446 return PLUGIN_HANDLED;
1447}
1448
1449public FriendlyFire(id)
1450{
1451 if(!isAdmin(id))
1452 return PLUGIN_HANDLED;
1453
1454 if(Fire == true)
1455 {
1456 server_cmd( "mp_friendlyfire 0" );
1457 client_printcolor(0, "/y[/ctr%s/y] FriendlyFire /yOFF!", PREFIX);
1458 Fire = false;
1459 }
1460 else
1461 {
1462 server_cmd( "mp_friendlyfire 1" );
1463 client_printcolor(0, "/y[/ctr%s/y] FriendlyFire /yON!", PREFIX);
1464 Fire = true;
1465 }
1466 return PLUGIN_HANDLED;
1467}
1468
1469public drawGame()
1470{
1471 for(new i = 1; i <= 32; i++)
1472 {
1473 if(is_user_connected(i) && (1 <= get_user_team(i) <= 2))
1474 {
1475 pMixPlayed[i]++;
1476 pPoints[i] += POINTS_MIX_PLAYED;
1477
1478 pMixDraw[i]++;
1479 pPoints[i] += POINTS_MIX_DRAW;
1480 SavePlayer(i);
1481 }
1482 }
1483}
1484
1485public TeamWon(team)
1486{
1487 for(new i = 1; i <= 32; i++)
1488 {
1489 if(is_user_connected(i) && (1 <= get_user_team(i) <= 2))
1490 {
1491 pMixPlayed[i]++;
1492 pPoints[i] += POINTS_MIX_PLAYED;
1493
1494 if(get_user_team(i) == team)
1495 {
1496 pMixWon[i]++;
1497 pPoints[i] += POINTS_MIX_WON;
1498 }
1499 else
1500 {
1501 pMixLost[i]++;
1502 pPoints[i] += POINTS_MIX_LOST;
1503 }
1504 SavePlayer(i);
1505 }
1506 }
1507}
1508
1509public setEndGame()
1510{
1511
1512 set_task(1.0, "showMVP");
1513
1514 passwordStatus = false;
1515 KnifeRound = false;
1516 PrepareRound = false;
1517 WarmUp = true;
1518 canChat = true;
1519 scoreCT = 0;
1520 scoreT = 0;
1521
1522 server_cmd("mp_roundtime 60")
1523 server_cmd("mp_startmoney 16000")
1524 server_cmd("mp_buytime 999999")
1525 server_cmd("mp_freezetime 0")
1526 server_cmd("sv_password ^"^"")
1527
1528 server_cmd("sv_restart 1")
1529
1530 client_printcolor(0, "/y[/ctr%s/y] Warmup started!", PREFIX)
1531 return PLUGIN_HANDLED
1532}
1533
1534public showMVP()
1535{
1536 new motdWindow[2000];
1537
1538 formatex(motdWindow, 2000, "<body style='background-color:#252525;color:white'><table width='100%%'><tr><td>#</td><td>Name</td><td>Kills</td><td>Deaths</td><td>Points</td></tr>");
1539 new numPlayers, players[33];
1540
1541 for(new i = 1; i <= get_maxplayers(); i++)
1542 {
1543 if(!is_user_connected(i)) continue;
1544 players[numPlayers] = i;
1545 numPlayers++;
1546 }
1547
1548 for(new i = 0; i < numPlayers; i++)
1549 {
1550 for(new j = 0; j <= numPlayers; j++)
1551 {
1552 if(i == j) continue;
1553 if(pTempPoints[players[i]] > pTempPoints[players[j]])
1554 {
1555 new temp = players[i]
1556 players[i] = players[j];
1557 players[j] = temp;
1558 }
1559 }
1560 }
1561
1562 new name[35];
1563 for(new i = 0; i < numPlayers; i++)
1564 {
1565 get_user_name(players[i], name, 34)
1566 formatex(motdWindow, 2000, "%s<tr><td>%d</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td></tr>", motdWindow, i+1, name, pTempKills[players[i]], pTempDeaths[players[i]], pTempPoints[players[i]]);
1567 }
1568 formatex(motdWindow, 2000, "%s</table></body>", motdWindow);
1569
1570 show_motd(0, motdWindow, "MIX statistics");
1571}
1572
1573public endGame(id)
1574{
1575 if(!isAdmin(id)) return PLUGIN_HANDLED
1576
1577 passwordStatus = false;
1578 KnifeRound = false;
1579 PrepareRound = false;
1580 WarmUp = true;
1581 canChat = true;
1582 scoreCT = 0;
1583 scoreT = 0;
1584
1585 server_cmd("mp_roundtime 60")
1586 server_cmd("mp_startmoney 16000")
1587 server_cmd("mp_buytime 999999")
1588 server_cmd("mp_freezetime 0")
1589 server_cmd("sv_password ^"^"")
1590
1591 server_cmd("sv_restart 1")
1592
1593 client_printcolor(0, "/y[/ctr%s/y] [/g%s/y] MIX finished! Warmup started!", PREFIX, get_admin_name(id))
1594 server_cmd("hostname ^"%s [Warmup]^"", HOSTNAME);
1595 return PLUGIN_HANDLED
1596}
1597
1598public Ranking(id)
1599{
1600 static query[512];
1601 formatex(query, charsmax(query), "SELECT COUNT(*) FROM mix_players WHERE points > '%d'", pTempPoints[id]);
1602 log_amx(query)
1603 static data[2];
1604 data[0] = id;
1605
1606 SQL_ThreadQuery(g_hTuple, "RankTableMVP", query, data, sizeof(data));
1607 return PLUGIN_HANDLED;
1608}
1609
1610public RankTableMVP(failstate, Handle:hQuery, error[], errnum, data[], size, Float:queuetime)
1611{
1612 if(failstate == TQUERY_CONNECT_FAILED || failstate == TQUERY_QUERY_FAILED)
1613 {
1614 set_fail_state(error);
1615 }
1616 else
1617 {
1618 new id = data[0];
1619 new msgToDisplay[456] = "%L";
1620
1621 if(SQL_NumResults(hQuery))
1622 {
1623 format(msgToDisplay, charsmax(msgToDisplay), msgToDisplay, LANG_PLAYER, "RANKTABLE_MVP", pTempPoints[id], pTempKills[id], pTempDeaths[id], pTempHeadshots[id], pTempPlants[id], pTempDefusions[id], pTempMiniAces[id], pTempAces[id]);
1624
1625 set_hudmessage(255, 255, 255, -1.0, 0.35, 0, 6.0, 30.0)
1626 show_hudmessage(id, msgToDisplay, "^n%L", LANG_PLAYER, "RANKTABLE_MVP", pTempPoints[id], pTempKills[id], pTempDeaths[id], pTempHeadshots[id], pTempPlants[id], pTempDefusions[id], pTempMiniAces[id], pTempAces[id]);
1627 }
1628 }
1629}
1630
1631public restart(id)
1632{
1633 server_cmd("restart");
1634}
1635
1636public getScore(id)
1637{
1638 if(WarmUp || KnifeRound || PrepareRound)
1639 client_printcolor(id, "/y[/ctr%s/y] MIX has not started!", PREFIX);
1640 else client_printcolor(id, "/y[/ctr%s/y] [CT] /g%i /y: /g%i /y[T]", PREFIX, scoreCT, scoreT);
1641 return PLUGIN_HANDLED;
1642}
1643
1644public showPlayerAce(id)
1645{
1646 static query[512];
1647 formatex(query, charsmax(query), "SELECT COUNT(*) FROM mix_players WHERE points > '%d'", pPoints[id]);
1648 log_amx(query)
1649 static data[2];
1650 data[0] = id;
1651
1652 SQL_ThreadQuery(g_hTuple, "QueryLoadAce", query, data, sizeof(data));
1653 return PLUGIN_HANDLED;
1654}
1655
1656public QueryLoadAce(failstate, Handle:hQuery, error[], errnum, data[], size, Float:queuetime)
1657{
1658 if( failstate == TQUERY_CONNECT_FAILED
1659 || failstate == TQUERY_QUERY_FAILED )
1660 {
1661 set_fail_state(error);
1662 }
1663 else
1664 {
1665 new id = data[0];
1666
1667 if(SQL_NumResults(hQuery))
1668 {
1669 if(SQL_NumResults(hQuery))
1670 {
1671 client_printcolor(id, "/y[/ctr%s/y] /yMini-ACE: ^3%d ^4| /yACE: ^3%d", PREFIX, pMiniAces[id], pAces[id])
1672 }
1673 }
1674 }
1675}
1676
1677public set_password(id)
1678{
1679 new rnd = random_num(99, 9999);
1680 new serverPassword[10];
1681
1682 num_to_str(rnd, serverPassword, 9);
1683
1684 server_cmd("sv_password %s", serverPassword);
1685}
1686
1687
1688
1689stock get_admin_name(id)
1690{
1691 new name[64]
1692 get_user_name(id, name, 63)
1693 return name
1694}
1695
1696stock client_printcolor(const id, const input[], any:...)
1697{
1698 new count = 1, players[32];
1699 static msg[191];
1700 vformat(msg, 190, input, 3);
1701
1702 replace_all(msg,190,"/g","^4"); // green txt
1703 replace_all(msg,190,"/y","^1"); // orange txt
1704 replace_all(msg,190,"/ctr","^3"); // team txt
1705 replace_all(msg,190,"/w","^0"); // team txt
1706
1707 if(id) players[0] = id; else get_players(players,count,"ch");
1708
1709 for(new i = 0; i < count; i++)
1710
1711 if(is_user_connected(players[i]))
1712 {
1713 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
1714 write_byte(players[i]);
1715 write_string(msg);
1716 message_end();
1717 }
1718}
1719
1720GetSecureName(const name[])
1721{
1722 static secureName[64];
1723 copy(secureName, charsmax(secureName), name);
1724
1725 replace_all(secureName, charsmax(secureName), "\", "\\");
1726 replace_all(secureName, charsmax(secureName), "'", "\'");
1727 replace_all(secureName, charsmax(secureName), "`", "\`");
1728
1729 return secureName;
1730}