· 6 years ago · Sep 14, 2019, 11:12 AM
1#define BOOST // Оставить или убрать Boost mode
2//#define USE_PTS // Оставить или убрать PTS
3//#define CALCULATE_PTS //использовать калькуляцию птс на основе баланса
4//#define TEST // Использовать на лане
5#define RACE // Использовать баны за капитанов и race
6//#define INFO_START //Выводить информацию в начале микса (1. Прогноз (для игроков) \ Баланс (для спектаторов))
7
8#if defined USE_PTS
9 #define START_PTS 500
10
11 #if defined CALCULATE_PTS
12 #define DEF_RATIO 20.0 //коофициент калькуляции между птс 20.0
13 #else
14 #define PTS_WIN 20
15 #define PTS_LOSE -10
16 #define PTS_DRAW 5
17 #endif
18#endif
19
20#include <amxmodx>
21#include <amxmisc>
22#include <hamsandwich>
23#include <fakemeta_util>
24#include <fun>
25#include <reapi>
26#if defined USE_PTS
27 #include <sqlx>
28#endif
29
30
31#define PLUGIN "HNSRU Matches System"
32#define VERSION "1.2"
33#define AUTHOR "joymz & Garey"
34
35#define rnr_ACESS ADMIN_LEVEL_A // flag "m"
36new const rnr_tag[15] = "^1[^3HNS^1]"
37new const hns_jumpstat[] = "uq_jumpstats.amxx"; //Название плагина статистики прыжков которую ставить на паузу во время микса, и снимать с паузы по его завершению.
38
39#define rg_get_user_team(%0) get_member(%0, m_iTeam)
40
41new Float:PlayNoPlay[33];
42
43#if defined USE_PTS
44#define FASTLEAVETIMER 300.0
45#define SECURE_NAME_LEN 31 * 2 + 1
46
47enum _:Tiers
48{
49 tierLOW = 1,
50 tierDm,
51 tierD,
52 tierDp,
53 tierCm,
54 tierC,
55 tierCp,
56 tierBm,
57 tierB,
58 tierBp,
59 tierAm,
60 tierA,
61 tierAp,
62 tierTOP
63}
64
65new const Tier_Names[Tiers][10] =
66{
67 "N/A",
68 "B",
69 "L-",
70 "L",
71 "L+",
72 "M-",
73 "M",
74 "M+",
75 "H-",
76 "H",
77 "H+",
78 "P-",
79 "P",
80 "P+",
81 "G"
82}
83
84/* PTS */
85new Array:Leavers[3];
86#if defined TEST
87// TEST DB
88new Host[] = "localhost"
89new User[] = "admin"
90new Pass[] = "admin"
91new Db[] = "admin"
92new Table[] = "admin"
93#else
94// rnr DB
95new Host[] = "db3.myarena.ru"
96new User[] = "u7048_imm-hns"
97new Pass[] = "imm13372000"
98new Db[] = "u7048_imm-hns"
99new Table[] = "gather"
100#endif
101
102new Handle:g_SqlTuple
103new g_Error[512]
104
105new iPts[MAX_PLAYERS+1];
106new iRank[MAX_PLAYERS+1];
107#endif
108
109enum _:SaveData
110{
111 save_team,
112 SteamID[32],
113 Float:Origin[3],
114 Float:Velocity[3],
115 Float:Angles[3],
116 health,
117 flashnum,
118 smokenum
119}
120
121new Array:SavedState;
122
123new bool:GameSaved;
124new bool:CaptainSort;
125new CaptainSide;
126new Captain1;
127new Captain2;
128new CaptainWinner;
129new gmsgMoney;
130
131new Float:StartRoundTime;
132new SavedTime;
133new SavedFreezeTime;
134new Float:g_flRoundTime
135new g_Captime;
136new cvarGamename;
137
138//new bool:SoundFx;
139new bool:Survival
140new bool:GameStarted;
141new iCurrentSW
142new Float:flSidesTime[2];
143new Float:g_fTimerPlayer[33];
144new g_pRoundTime;
145new g_bShowSpeed[33 char];
146
147#define TIME 15
148#define TASK_MENUCLOSE 9001
149#define TASK_PLAYERSLIST 9002
150#define ROUNDENDTASK 10003
151#define LEAVERTASK 20004
152
153enum
154{
155 e_gTraining = 0,
156 e_gPaused,
157 e_gKnife,
158 e_gCaptain,
159 e_gMix,
160 e_gPub
161}
162
163new const g_szDefaultEntities[][] = {
164 "func_hostage_rescue",
165 "info_hostage_rescue",
166 "func_bomb_target",
167 "info_bomb_target",
168 "hostage_entity",
169 "info_vip_start",
170 "func_vip_safetyzone",
171 "func_escapezone",
172 "armoury_entity",
173 "monster_scentist"
174}
175
176new g_iGiveNadesTo;
177new const snd_denyselect[] = "common/wpn_denyselect.wav";
178new const g_szUseSound[] = "buttons/blip1.wav";
179new const g_szNewNadesMenu[] = "\rDo you need some nades?^n^n\r1. \wYes^n\r2. \wNo";
180
181new bool:rnr_hooked[32]
182new hookorigin[32][3]
183
184static const knifemodel[] = "models/v_knife.mdl"
185new alloc_KnifeModel;
186
187new bool:gOnOff[33];
188
189new HamHook:Player_Killed_Pre;
190new Float:gCheckpoints[MAX_PLAYERS+1][2][3];
191
192new g_CurrentMode
193new g_iScore[2]
194new g_iSecondHalf
195new g_iMaxPlayers
196
197new bool:g_bFreezePeriod
198new bool:g_bCheckpointAlternate[MAX_PLAYERS+1];
199new bool:g_bLastFlash
200new bool:ishooked[MAX_PLAYERS+1];
201new bool:plr_noplay[MAX_PLAYERS+1];
202
203new Sbeam = 0
204new bool:g_Spec[MAX_PLAYERS+1];
205new TeamName:hTeam[MAX_PLAYERS+1];
206
207new cvarTeamOne
208new cvarTeamTwo
209new cvarMaxRounds
210new cvarFlashNum
211new cvarSmokeNum
212new cvarAA
213new cvarDefaultMode
214new cvarRoundSwitch
215new cvarLastMode
216new WhatSemiclip
217
218new g_iHostageEnt, g_iRegisterSpawn
219new SyncHud[2]
220#if defined RACE
221new g_arena;
222
223native start_arena(id1, id2, arena);
224native start_bans(id1, id2);
225#endif
226
227public plugin_natives ()
228{
229#if defined USE_PTS
230 register_native("get_rank", "native_get_rank");
231#endif
232 register_native("get_mode", "native_get_mode");
233 register_native("set_mode", "native_set_mode");
234}
235
236#if defined USE_PTS
237public native_get_rank()
238{
239 new iLen = get_param( 2 );
240
241 new sz_Rank[ 32 ];
242 iLen = format(sz_Rank, iLen, "%s", Tier_Names[iRank[get_param( 1 )]]);
243
244 set_string( 2, sz_Rank, iLen );
245}
246#endif
247
248public native_set_mode()
249{
250 g_CurrentMode = get_param( 1 );
251}
252
253public native_get_mode()
254{
255 return g_CurrentMode;
256}
257
258public plugin_precache()
259{
260 engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone"));
261 g_iRegisterSpawn = register_forward(FM_Spawn, "fwdSpawn", 1)
262 precache_sound( g_szUseSound );
263 //precache_sound("rnr/endgame.wav");
264 //precache_sound("rnr/rnr_expire.wav");
265 Sbeam = precache_model("sprites/laserbeam.spr");
266}
267
268new g_msgScreenFade;
269new g_msg_showtimer
270new g_msg_roundtime
271
272new iFwd_MixFinished
273
274enum
275{
276 mode_mr,
277 mode_timebased,
278 mode_2switch
279}
280
281new current_mode;
282
283public enable_semiclip(team)
284{
285 server_cmd("semiclip_option semiclip 1"); // on
286 server_cmd("semiclip_option team %d", team)
287 server_cmd("semiclip_option time 0");
288}
289
290public disable_semiclip()
291{
292 server_cmd("semiclip_option semiclip 0"); // off
293 server_cmd("semiclip_option team 0")
294 server_cmd("semiclip_option time 0");
295}
296
297public RE_RoundEnd( WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay )
298{
299 if ( event == ROUND_GAME_COMMENCE )
300 {
301 set_member_game( m_bGameStarted, true );
302 SetHookChainReturn( ATYPE_INTEGER, false );
303
304 return(HC_SUPERCEDE);
305 }
306 return(HC_CONTINUE);
307}
308
309public plugin_init()
310{
311 register_plugin(PLUGIN, VERSION, AUTHOR)
312 g_pRoundTime = get_cvar_pointer( "mp_roundtime" );
313 g_Captime = register_cvar( "hns_wintime", "20");
314 iFwd_MixFinished = CreateMultiForward("MixFinished_Fwd", ET_IGNORE);
315 SavedState = ArrayCreate(SaveData);
316
317 #if defined USE_PTS
318 Leavers[0] = ArrayCreate(32);
319 Leavers[1] = ArrayCreate(4);
320 Leavers[2] = ArrayCreate(32);
321 #endif
322
323 register_clcmd("say", "sayHandle");
324
325 register_concmd("say /pub", "rnr_pub", rnr_ACESS)
326 register_concmd("say /def", "rnr_pub_off", rnr_ACESS)
327
328 register_concmd("say /skill", "rnr_skill", rnr_ACESS )
329#if defined BOOST
330 register_concmd("say /boost", "rnr_boost", rnr_ACESS )
331#endif
332 register_concmd("say /aa10", "rnr_aa10", rnr_ACESS )
333 register_concmd("say /aa100", "rnr_aa100", rnr_ACESS )
334 register_concmd("say /mr5", "rnr_mr5", rnr_ACESS )
335 register_concmd("say /mr7", "rnr_mr7", rnr_ACESS )
336 register_concmd("say /mr9", "rnr_mr9", rnr_ACESS )
337 register_clcmd( "say /rr", "CmdRestartRound", rnr_ACESS )
338 register_clcmd( "say /swap", "rnr_swap_teams", rnr_ACESS)
339
340 register_clcmd("+hook","rnr_hook_on")
341 register_clcmd("-hook","rnr_hook_off")
342
343 register_clcmd ( "say /knife", "cmdShowKnife");
344 register_clcmd ( "say /showknife", "cmdShowKnife");
345 register_clcmd ( "say /hideknife", "cmdShowKnife");
346
347 register_clcmd( "say /pause", "rnr_startpause", rnr_ACESS );
348 //register_clcmd( "say /live", "rnr_unpause", rnr_ACESS );
349
350 register_clcmd ( "nightvision", "rnr_mix_menu", rnr_ACESS )
351 register_clcmd ( "say /mix", "rnr_mix_menu", rnr_ACESS )
352
353 register_clcmd( "chooseteam", "BlockCmd" );
354 register_clcmd( "jointeam", "BlockCmd" );
355 register_clcmd( "joinclass", "BlockCmd" );
356
357 fnRegisterSayCmd("timer", "timermod", "rnr_timer", rnr_ACESS, "Timer mode");
358 fnRegisterSayCmd("normal", "normalmod", "rnr_normal", rnr_ACESS, "Normal mode");
359 fnRegisterSayCmd("rs", "rsmod", "rnr_2mod", rnr_ACESS, "RS mode");
360
361 fnRegisterSayCmd("specall", "specall", "rnr_transfer_spec", rnr_ACESS, "Spec Transfer")
362 fnRegisterSayCmd("ttall", "ttall", "rnr_transfer_tt", rnr_ACESS, "TT Transfer")
363 fnRegisterSayCmd("ctall", "ctall", "rnr_transfer_ct", rnr_ACESS, "CT Transfer")
364 fnRegisterSayCmd("score", "s", "Score", 0, "Starts Round")
365 fnRegisterSayCmd("startmix", "start", "cmdStartRound", rnr_ACESS, "Starts Round");
366 fnRegisterSayCmd("kniferound", "kf", "cmdKnifeRound", rnr_ACESS, "Knife Round");
367 fnRegisterSayCmd("captain", "cap", "CaptainCmd", rnr_ACESS, "Captain Mode");
368 fnRegisterSayCmd("stopcaptain", "stopcap", "StopCaptainCmd", rnr_ACESS, "Captain Mode");
369 fnRegisterSayCmd("stop", "stop", "cmdStop", rnr_ACESS, "Stop Current Mode");
370 fnRegisterSayCmd("live", "unpause", "rnr_unpause", rnr_ACESS, "UnPause");
371 fnRegisterSayCmd("checkpoint", "cp", "cmdCheckpoint", 0, "Save checkpoint");
372 fnRegisterSayCmd("savegame", "sg", "cmdsavegame", rnr_ACESS, "Save game");
373 fnRegisterSayCmd("loadgame", "lg", "cmdloadgame", rnr_ACESS, "Load saved game");
374 fnRegisterSayCmd("gocheck", "gc", "cmdGoCheck", 0, "Go to checkpoint");
375 fnRegisterSayCmd("teleport", "tp", "cmdGoCheck", 0, "Go to checkpoint");
376 fnRegisterSayCmd("pick", "pick", "captain_menu", 0, "Pick player");
377#if defined RACE
378 fnRegisterSayCmd("ban", "ban", "captain_ban", 0, "Pick player");
379#endif
380 fnRegisterSayCmd( "back", "spec", "team_spec", 0, "Spec/Back player");
381 //fnRegisterSayCmd( "race", "race2", "start_race", 0, "Start Race");
382 //fnRegisterSayCmd( "respawn", "spawn", "spawnxXx", 0, "respawn Player");
383 //fnRegisterSayCmd("myrank", "rank", "CmdRank", 0, "Starts Round")
384 fnRegisterSayCmd("np", "noplay", "CmdNoPlay", 0, "No play")
385 fnRegisterSayCmd("nop", "yaneplay", "CmdNoPlay", 0, "No play")
386 fnRegisterSayCmd("ip", "play", "CmdPlay", 0, "Play play")
387 fnRegisterSayCmd("ip", "yaplay", "CmdPlay", 0, "Play play")
388//fnRegisterSayCmd("dontcap", "nocap", "CmdNoCaptain", 0, "Balance Pts")
389#if defined USE_PTS
390 fnRegisterSayCmd("pts", "top", "Show_Top", 0, "Show Top")
391 fnRegisterSayCmd("pr", "npts", "CmdPrognoz", 0, "New Pts")
392 fnRegisterSayCmd("b", "balance", "CmdBalance", 0, "Balance Pts")
393#endif
394 alloc_KnifeModel = engfunc(EngFunc_AllocString, knifemodel)
395
396 cvarTeamOne = register_cvar("rnr_team1", "CT", FCVAR_ARCHIVE|FCVAR_SERVER)
397 cvarTeamTwo = register_cvar("rnr_team2", "TT", FCVAR_ARCHIVE|FCVAR_SERVER)
398 cvarFlashNum = register_cvar("rnr_flash", "2", FCVAR_ARCHIVE|FCVAR_SERVER)
399 cvarSmokeNum = register_cvar("rnr_smoke", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
400 cvarRoundSwitch = register_cvar("rnr_roundswitch", "2", FCVAR_ARCHIVE|FCVAR_SERVER)
401 cvarLastMode = register_cvar("rnr_lastmode", "0", FCVAR_ARCHIVE|FCVAR_SERVER)
402 cvarMaxRounds = register_cvar("rnr_rounds", "6", FCVAR_ARCHIVE|FCVAR_SERVER)
403 cvarAA = register_cvar("rnr_aa", "100", FCVAR_ARCHIVE|FCVAR_SERVER);
404 WhatSemiclip = register_cvar("rnr_semiclip", "0", FCVAR_ARCHIVE|FCVAR_SERVER);
405#if defined BOOST
406 cvarGamename = register_cvar( "rnr_gamename", "Boost / Skill" );
407#else
408 cvarGamename = register_cvar( "rnr_gamename", "Boost / Skill" );
409#endif
410
411 cvarDefaultMode = register_cvar("rnr_defaultmode", "0", FCVAR_ARCHIVE|FCVAR_SERVER)
412
413 RegisterHookChain( RG_RoundEnd, "RE_RoundEnd" );
414 register_event("CurWeapon", "eCurWeapon", "be", "1!0")
415 register_event("SendAudio","eEndRound","a","2=%!MRAD_terwin","2=%!MRAD_ctwin")
416 register_event("HLTV", "ePreFT", "a", "1=0", "2=0") // Detect freezetime started
417 register_logevent("ePostFT", 2, "0=World triggered", "1=Round_Start") // Detect freezetime ended
418
419 Player_Killed_Pre = RegisterHam( Ham_Killed, "player", "fwd_PlayerKilled_Pre", 0 );
420 RegisterHam( Ham_Spawn, "player", "CBasePlayer_Spawn_Post", true)
421 RegisterHam( Ham_Item_Deploy, "weapon_knife", "FwdDeployKnife", 1 )
422 RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_knife", "FwdKnifePrim" );
423 register_forward(FM_Voice_SetClientListening, "Forward_SetClientListening");
424 register_forward( FM_EmitSound, "fwd_EmitSound_Pre", 0 );
425 //register_forward( FM_ClientKill, "fwd_ClientKill" ) ;
426
427 /*RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", false);
428 RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", false);*/
429
430 unregister_forward(FM_Spawn, g_iRegisterSpawn, 1)
431 register_forward(FM_GetGameDescription,"GameNameDesc")
432
433 register_menucmd( register_menuid( "NadesMenu" ), 3, "HandleNadesMenu" );
434
435 g_msg_showtimer = get_user_msgid("ShowTimer")
436 g_msg_roundtime = get_user_msgid("RoundTime")
437
438 g_iMaxPlayers = get_maxplayers()
439 SyncHud[0] = CreateHudSyncObj() //tyt
440 SyncHud[1] = CreateHudSyncObj()
441
442 register_message( get_user_msgid( "ShowMenu" ), "message_show_menu" );
443 register_message( get_user_msgid( "VGUIMenu" ), "message_vgui_menu" );
444 g_msgScreenFade = get_user_msgid("ScreenFade");
445 register_message( g_msgScreenFade, "msg_ScreenFade" );
446 register_message( get_user_msgid( "TextMsg" ), "msgTextMsg" );
447
448 set_msg_block(get_user_msgid("HudTextArgs"),BLOCK_SET);
449
450 register_mode();
451 ePreFT();
452
453 set_task(0.5, "delayed_mode");
454 set_msg_block(gmsgMoney = get_user_msgid("Money"), BLOCK_SET);
455 set_task(0.1, "ShowSpeedAsMoney", 15671983, .flags="b");
456
457 if(!(get_pcvar_num(cvarDefaultMode)))
458 {
459 current_mode = mode_timebased
460 }
461 else
462 {
463 current_mode = mode_mr
464 }
465}
466
467
468public delayed_mode()
469{
470 new szMapName[ 33 ];
471 get_mapname( szMapName, 32 );
472 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
473 {
474 PrepareMode(e_gTraining);
475 }
476 else
477 if(!(get_pcvar_num(cvarLastMode)))
478 {
479 PrepareMode(e_gTraining);
480 }
481 else
482 {
483 PrepareMode(e_gPub);
484 }
485}
486
487public ShowSpeedAsMoney()
488{
489 if(Survival)
490 {
491 static players[32], num, id
492 get_players(players, num, "a");
493 for(--num; num>=0; num--)
494 {
495 id = players[num];
496 if( g_bShowSpeed {id} )
497 {
498 message_begin(MSG_ONE, gmsgMoney, .player=id);
499 write_long( floatround((get_pcvar_float(g_Captime)*60.0)-flSidesTime[iCurrentSW], floatround_floor) );
500 write_byte(0);
501 message_end();
502 }
503 }
504 }
505}
506
507public rnr_timer(id)
508{
509 if(!(get_user_flags(id) & rnr_ACESS))
510 return PLUGIN_HANDLED;
511
512 if(g_CurrentMode == e_gTraining)
513 {
514 new sz_name[64]; get_user_name(id, sz_name, 63);
515 client_print_color(0, print_team_blue, "%s ^3%s^1 changed mode to Time-Based.", rnr_tag, sz_name)
516 current_mode = mode_timebased
517 set_pcvar_num(cvarDefaultMode, 0);
518 }
519 else
520 {
521 client_print_color(id, id, "%s Mode cannot be changed during game!", rnr_tag);
522 }
523
524 return PLUGIN_CONTINUE;
525}
526
527public rnr_2mod(id)
528{
529 if(!(get_user_flags(id) & rnr_ACESS))
530 return PLUGIN_HANDLED;
531
532 if(g_CurrentMode == e_gTraining)
533 {
534 new sz_name[64]; get_user_name(id, sz_name, 63);
535 client_print_color(0, print_team_blue, "%s ^3%s^1 changed mode to ROUND SWITCH.", rnr_tag, sz_name )
536 current_mode = mode_2switch;
537 set_pcvar_num(cvarDefaultMode, 2);
538 }
539 else
540 {
541 client_print_color(id, id, "%s Mode cannot be changed during game!", rnr_tag);
542 }
543
544 return PLUGIN_CONTINUE;
545}
546
547public rnr_normal(id)
548{
549 if(!(get_user_flags(id) & rnr_ACESS))
550 return PLUGIN_HANDLED;
551
552 if(g_CurrentMode == e_gTraining)
553 {
554 new sz_name[64]; get_user_name(id, sz_name, 63);
555 client_print_color(0, print_team_blue, "%s ^3%s^1 changed mode to Standart (MR).", rnr_tag, sz_name)
556 current_mode = mode_mr
557 set_pcvar_num(cvarDefaultMode, 1);
558 }
559 else
560 {
561 client_print_color(id, id, "%s Mode cannot be changed during game!", rnr_tag);
562 }
563
564 return PLUGIN_CONTINUE;
565}
566
567public GameNameDesc( )
568{
569 static gamename[32];
570 get_pcvar_string( cvarGamename, gamename, 31 );
571 forward_return( FMV_STRING, gamename );
572 return FMRES_SUPERCEDE;
573}
574
575public CmdNoPlay(id)
576{
577 if(get_gametime() > PlayNoPlay[id])
578 if(!plr_noplay[id])
579 {
580 PlayNoPlay[id] = get_gametime()+60.0;
581 plr_noplay[id] = true;
582 new sz_name[64]; get_user_name(id, sz_name, 63);
583 client_print_color(0, print_team_blue, "%s ^3%s^1 is ^3not available^1 for pick. (^3NOPLAY^1)", rnr_tag, sz_name)
584 }
585}
586
587public CmdPlay(id)
588{
589 if(get_gametime() > PlayNoPlay[id])
590 if(plr_noplay[id])
591 {
592 PlayNoPlay[id] = get_gametime()+60.0;
593 plr_noplay[id] = false;
594 new sz_name[64]; get_user_name(id, sz_name, 63);
595 client_print_color(0, print_team_blue, "%s ^3%s^1 is now ^4available^1 for pick.", rnr_tag, sz_name);
596 }
597}
598
599
600public sayHandle(id)
601{
602 new szArgs[64];
603 read_args(szArgs, charsmax(szArgs));
604 remove_quotes(szArgs);
605 trim(szArgs);
606
607 if ( !szArgs[0] )
608 return PLUGIN_HANDLED;
609
610 if ( szArgs[0] != '/' )
611 return PLUGIN_CONTINUE;
612
613 new szTarget[32];
614
615 parse(szArgs, \
616 szArgs, charsmax(szArgs), \
617 szTarget, charsmax(szTarget));
618#if defined RACE
619 if ( equali(szArgs, "/race", 5) )
620 {
621 trim(szTarget);
622
623 if(!(get_user_flags(id) & rnr_ACESS))
624 return PLUGIN_HANDLED;
625
626 if(g_CurrentMode != e_gTraining && e_gCaptain)
627 {
628 client_print_color(id, print_team_blue, "%s Please disable other mode before start race", rnr_tag);
629 return PLUGIN_HANDLED;
630 }
631
632 if(containi(szTarget, "fast") != -1)
633 {
634 g_arena = 1;
635 start_arena(-1, -1, 1);
636 }
637 else if(containi(szTarget, "dyd") != -1)
638 {
639 g_arena = 2;
640 start_arena(-1, -1, 2);
641 }
642 else if(containi(szTarget, "coma") != -1)
643 {
644 g_arena = 3;
645 start_arena(-1, -1, 3);
646 }
647 else if(containi(szTarget, "pro") != -1)
648 {
649 g_arena = 4;
650 start_arena(-1, -1, 4);
651 }
652 else
653 {
654 g_arena = -1;
655 start_arena(-1, -1, -1);
656 }
657 RestartRound(3.0);
658 set_task(1.5, "pf_KnifeRound", id)
659 return PLUGIN_CONTINUE;
660 }
661#endif
662 if ( equali(szArgs, "/wintime", 8) )
663 {
664 trim(szTarget);
665
666 if(!(get_user_flags(id) & rnr_ACESS))
667 return PLUGIN_HANDLED;
668
669 if(is_str_num(szTarget))
670 {
671 set_pcvar_num(g_Captime, str_to_num(szTarget));
672 new sz_name[64]; get_user_name(id, sz_name, 63);
673 client_print_color(0, print_team_blue, "^1^4%s^1 ^3%s^1 set wintime to %d minutes.", rnr_tag, sz_name, str_to_num(szTarget));
674 }
675 return PLUGIN_CONTINUE;
676 }
677
678 if ( equali(szArgs, "/roundtime", 10) )
679 {
680 trim(szTarget);
681
682 if(!(get_user_flags(id) & rnr_ACESS))
683 return PLUGIN_HANDLED;
684
685 //if(is_str_num(szTarget))
686 {
687 set_pcvar_float(g_pRoundTime, str_to_float(szTarget));
688 new sz_name[64]; get_user_name(id, sz_name, 63);
689 client_print_color(0, print_team_blue, "^1^4%s^1 ^3%s^1 set roundtime to %.2f minutes.", rnr_tag, sz_name, str_to_float(szTarget));
690 }
691 return PLUGIN_CONTINUE;
692 }
693
694 if ( equali(szArgs, "/tt", 10) )
695 {
696 trim(szTarget);
697
698 if(!(get_user_flags(id) & rnr_ACESS))
699 return PLUGIN_HANDLED;
700
701 //if(is_str_num(szTarget))
702 {
703 //flSidesTime[iCurrentSW] = 0.0;
704 new Float:time = str_to_float(szTarget);
705 new minutes = floatround(time, floatround_floor);
706 new seconds = floatround((time-minutes)*100);
707 flSidesTime[iCurrentSW] = (get_pcvar_float(g_Captime)-(minutes+(seconds/60.0)))*60.0;
708 //flSidesTime[iCurrentSW] += str_to_float(szTarget); // tut dumayu bez raznici + ili =
709 client_print_color(0, print_team_blue, "^1^4%s^1 ^3%n^1 set timer for team TT to %.2f minutes.", rnr_tag, id, str_to_float(szTarget));
710 }
711 return PLUGIN_CONTINUE;
712 }
713
714 if ( equali(szArgs, "/ct", 10) )
715 {
716 trim(szTarget);
717
718 if(!(get_user_flags(id) & rnr_ACESS))
719 return PLUGIN_HANDLED;
720
721 //if(is_str_num(szTarget))
722 {
723 new Float:time = str_to_float(szTarget);
724 new minutes = floatround(time, floatround_floor);
725 new seconds = floatround((time-minutes)*100);
726 flSidesTime[!iCurrentSW] = (get_pcvar_float(g_Captime)-(minutes+(seconds/60.0)))*60.0;
727 client_print_color(0, print_team_blue, "^1^4%s^1 ^3%n^1 set timer for team CT to %.2f minutes.", rnr_tag, id, str_to_float(szTarget));
728 }
729 return PLUGIN_CONTINUE;
730 }
731
732 if ( equali(szArgs, "/rs", 3) )
733 {
734 trim(szTarget);
735
736 if(!(get_user_flags(id) & rnr_ACESS))
737 return PLUGIN_HANDLED;
738
739 if(is_str_num(szTarget))
740 {
741 set_pcvar_num(cvarRoundSwitch, str_to_num(szTarget));
742 new sz_name[64]; get_user_name(id, sz_name, 63);
743 client_print_color(0, print_team_blue, "^1^4%s^1 ^3%s^1 set Round Switch to %d rounds [RS%d].", rnr_tag, sz_name, str_to_num(szTarget), str_to_num(szTarget));
744 }
745 return PLUGIN_CONTINUE;
746 }
747
748#if defined USE_PTS
749
750 if ( !equali(szArgs, "/rank", 5) )
751 return PLUGIN_CONTINUE;
752 //Command
753
754//Delay
755 new const Float:fCommandDelay = 5.0;
756
757 static Float:fCommandUsed[MAX_PLAYERS+1];
758
759 if ( fCommandUsed[id] > get_gametime() )
760 {
761 return PLUGIN_HANDLED;
762 }
763//Delay
764
765
766//Display
767 trim(szTarget);
768
769 if ( !szTarget[0] )
770 CmdRank(id, id);
771 else {
772 new targetId = cmd_target(id, szTarget, 2);
773
774 if ( targetId )
775 CmdRank(id, targetId);
776 else {
777 client_print_color(id, id, "%s There is no OR multiple players with that name ->^x03 %s", rnr_tag, szTarget);
778 return PLUGIN_CONTINUE;
779 }
780 }
781
782 fCommandUsed[id] = get_gametime()+fCommandDelay;
783//Display
784
785#endif
786 return PLUGIN_CONTINUE;
787}
788
789public msg_ScreenFade( iMsgId, iMsgDest, id )
790{
791 if(is_user_connected(id))
792 {
793 if( get_msg_arg_int( 4 ) == 255 && get_msg_arg_int( 5 ) == 255 && get_msg_arg_int( 6 ) == 255)
794 {
795 if((rg_get_user_team(id) == TEAM_TERRORIST) || (rg_get_user_team(id) == TEAM_SPECTATOR))
796 {
797 return PLUGIN_HANDLED;
798 }
799 }
800 }
801 return PLUGIN_CONTINUE;
802}
803
804public message_show_menu( msgid, dest, id )
805{
806 if ( !should_autojoin( id ) )
807 return(PLUGIN_CONTINUE);
808
809 static team_select[] = "#Team_Select";
810 static menu_text_code[sizeof team_select];
811 get_msg_arg_string( 4, menu_text_code, sizeof menu_text_code - 1 );
812 if ( !equal( menu_text_code, team_select ) )
813 return(PLUGIN_CONTINUE);
814
815 set_force_team_join_task( id, msgid );
816
817 return(PLUGIN_HANDLED);
818}
819
820
821public message_vgui_menu( msgid, dest, id )
822{
823 if ( get_msg_arg_int( 1 ) != 2 || !should_autojoin( id ) )
824 return(PLUGIN_CONTINUE);
825
826 set_force_team_join_task( id, msgid );
827
828 return(PLUGIN_HANDLED);
829}
830
831
832bool:should_autojoin( id )
833{
834 return(!get_user_team( id ) && !task_exists( id ) );
835}
836
837
838set_force_team_join_task( id, menu_msgid )
839{
840 static param_menu_msgid[2];
841 param_menu_msgid[0] = menu_msgid;
842 set_task( 0.1, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid );
843}
844
845
846public task_force_team_join( menu_msgid[], id )
847{
848 if ( get_user_team( id ) )
849 return;
850
851 force_team_join( id, menu_msgid[0], "5", "5" );
852}
853
854
855stock force_team_join( id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0" )
856{
857 static jointeam[] = "jointeam";
858 if ( class[0] == '0' )
859 {
860 engclient_cmd( id, jointeam, team );
861 return;
862 }
863
864 static msg_block, joinclass[] = "joinclass";
865 msg_block = get_msg_block( menu_msgid );
866 set_msg_block( menu_msgid, BLOCK_SET );
867 engclient_cmd( id, jointeam, team );
868 engclient_cmd( id, joinclass, class );
869 set_msg_block( menu_msgid, msg_block );
870 respawn_player( id );
871}
872
873
874public respawn_player( id )
875{
876 if ( is_user_connected( id ) )
877 {
878 set_pev( id, pev_deadflag, DEAD_RESPAWNABLE );
879 set_pev( id, pev_iuser1, 0 );
880 dllfunc( DLLFunc_Think, id );
881
882 engfunc( EngFunc_SetOrigin, id, Float:{ -4800.0, -4800.0, -4800.0 } );
883
884 set_task(0.1, "spawnagain", id);
885 }
886}
887
888public spawnagain( id )
889{
890 if ( is_user_connected( id ) )
891 {
892 new bool:SortTeams = false;
893
894 if(g_CurrentMode != e_gPub)
895 {
896 rg_round_respawn(id);
897 dllfunc( DLLFunc_Spawn, id );
898 }
899 if((file_exists("addons/amxmodx/data/playerslist.ini")))
900 {
901 new szMapName[64]
902 get_mapname(szMapName, 63);
903 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
904 {
905 SortTeams = false;
906 }
907 else
908 {
909 SortTeams = true;
910 if(task_exists(92271))
911 remove_task(92271)
912
913 set_task(120.0, "remove_file", 92271);
914 }
915 }
916
917 if((( g_CurrentMode != e_gTraining && g_CurrentMode != e_gPub ) || SortTeams) || CaptainSort)
918 {
919 if(!CheckPlayer(id) || CaptainSort)
920 {
921 user_silentkill( id );
922 rg_set_user_team( id, TEAM_SPECTATOR );
923 }
924 else
925 {
926 rg_round_respawn(id);
927 dllfunc( DLLFunc_Spawn, id );
928 }
929 }
930 }
931}
932
933public remove_file( )
934{
935 if(file_exists("addons/amxmodx/data/playerslist.ini"))
936 delete_file("addons/amxmodx/data/playerslist.ini");
937}
938
939public spawnxXx(id)
940{
941 if(!is_user_alive(id) && g_CurrentMode == e_gTraining)
942 {
943 rg_set_user_team(id,TEAM_CT);
944 rg_round_respawn(id);
945 set_pev(id, pev_effects, 0)
946 set_pev(id, pev_movetype, MOVETYPE_WALK)
947 set_pev(id, pev_deadflag, DEAD_NO)
948 set_pev(id, pev_takedamage, DAMAGE_AIM)
949 ExecuteHamB(Ham_CS_RoundRespawn, id)
950 }
951}
952
953public BlockCmd(id)
954{
955 if ( g_CurrentMode != e_gTraining || CaptainSort )
956 {
957 return(PLUGIN_HANDLED);
958 }
959 return(PLUGIN_CONTINUE);
960}
961
962public msgTextMsg( const MsgId, const MsgDest, const MsgEntity )
963{
964 static szMessage[ 9 ];
965 get_msg_arg_string( 2, szMessage, 8 );
966
967 if( szMessage[ 1 ] == 'C' ) // #CTs_Win
968 {
969 for( new i = 1; i <= 32; i++ )
970 {
971 if( g_Spec[i] )
972 {
973 if( hTeam[i] == TEAM_CT ) hTeam[i] = TEAM_TERRORIST;
974 else hTeam[i] = TEAM_CT;
975 }
976 }
977 }
978}
979
980public team_spec(id)
981{
982 if(g_CurrentMode != e_gPub)
983 return PLUGIN_HANDLED;
984
985 if (g_Spec[id])
986 {
987 rg_set_user_team(id, hTeam[id]);
988 g_Spec[id] = false
989 }
990 else
991 {
992 if (rg_get_user_team(id) == TEAM_SPECTATOR)
993 return PLUGIN_HANDLED;
994
995 hTeam[id] = rg_get_user_team(id);
996 rg_set_user_team(id, TEAM_SPECTATOR);
997 user_silentkill(id);
998
999 g_Spec[id] = true
1000 }
1001
1002 return PLUGIN_HANDLED;
1003}
1004
1005
1006public fwd_EmitSound_Pre( id, iChannel, szSample[], Float:volume, Float:attenuation, fFlags, pitch )
1007{
1008 if( equal( szSample, "weapons/knife_deploy1.wav") )
1009 {
1010 return FMRES_SUPERCEDE;
1011 }
1012 if( is_user_alive( id ) && rg_get_user_team(id) == TEAM_TERRORIST && equal( szSample, snd_denyselect ) )
1013 {
1014 emit_sound( id, iChannel, g_szUseSound, volume, attenuation, fFlags, pitch );
1015 return FMRES_SUPERCEDE;
1016 }
1017 return FMRES_IGNORED;
1018}
1019
1020public fwd_ClientKill(id)
1021{
1022 return FMRES_SUPERCEDE ;
1023}
1024
1025public fwd_PlayerKilled_Pre( id )
1026{
1027 if( rg_get_user_team(id) != TEAM_TERRORIST )
1028 return;
1029
1030 new players[32], num, index;
1031 get_players(players, num, "ae", "TERRORIST");
1032 if( num == 1 )
1033 {
1034 g_bLastFlash = true;
1035 index = players[0];
1036 g_iGiveNadesTo = index;
1037 show_menu( index, 3, g_szNewNadesMenu, -1, "NadesMenu" );
1038 DisableHamForward( Player_Killed_Pre );
1039 }
1040}
1041
1042public HandleNadesMenu( id, key )
1043{
1044 if( !g_bLastFlash || id != g_iGiveNadesTo || !is_user_alive( id ) )
1045 return;
1046
1047 if( !key )
1048 {
1049 if( user_has_weapon( id, CSW_SMOKEGRENADE ) )
1050 {
1051 ExecuteHam( Ham_GiveAmmo, id, 1, "SmokeGrenade", 1024 );
1052 }
1053 else
1054 {
1055 rg_give_item(id, "weapon_smokegrenade");
1056 }
1057
1058/*#if defined BOOST
1059 if( user_has_weapon( id, CSW_HEGRENADE ) )
1060 {
1061 ExecuteHam( Ham_GiveAmmo, id, 1, "HeGrenade", 1024 );
1062 }
1063 else
1064 rg_give_item(id, "weapon_hegrenade");
1065#endif
1066 client_print_color(id, print_team_blue, "%s Fake grenade has three modes (MOUSE2)", rnr_tag)*/
1067
1068 if( user_has_weapon( id, CSW_FLASHBANG ) )
1069 {
1070 ExecuteHam( Ham_GiveAmmo, id, 1, "Flashbang", 1024 );
1071 }
1072 else
1073 rg_give_item(id, "weapon_flashbang");
1074 }
1075
1076 g_bLastFlash = false;
1077 g_iGiveNadesTo = 0;
1078
1079}
1080
1081public fwdSpawn(entid) {
1082 static szClassName[32];
1083 if(pev_valid(entid))
1084 {
1085 pev(entid, pev_classname, szClassName, 31);
1086 if(equal(szClassName, "func_buyzone")) engfunc(EngFunc_RemoveEntity, entid);
1087
1088 for(new i = 0; i < sizeof g_szDefaultEntities; i++)
1089 {
1090 if(equal(szClassName, g_szDefaultEntities[i]))
1091 {
1092 engfunc(EngFunc_RemoveEntity, entid);
1093 break;
1094 }
1095 }
1096 }
1097}
1098
1099public register_mode()
1100{
1101 g_iHostageEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "hostage_entity"));
1102 set_pev(g_iHostageEnt, pev_origin, Float:{ 0.0, 0.0, -55000.0 });
1103 set_pev(g_iHostageEnt, pev_size, Float:{ -1.0, -1.0, -1.0 }, Float:{ 1.0, 1.0, 1.0 });
1104 dllfunc(DLLFunc_Spawn, g_iHostageEnt);
1105}
1106
1107public rnr_hud_paused()
1108{
1109 if(g_CurrentMode == e_gPaused)
1110 {
1111 Task_Hud(0, 1.0, 0, 65, 105, 225, 0.5, "MIX PAUSED");
1112 }
1113}
1114
1115public rnr_startpause(id, level, cid)
1116{
1117 new Players[32], Count;
1118 get_players(Players, Count, "e", "TERRORIST");
1119 if(cmd_access(id, level, cid, 1) && g_CurrentMode == e_gMix && g_CurrentMode != e_gPaused)
1120 {
1121 g_CurrentMode = e_gPaused
1122
1123 if(current_mode != mode_mr)
1124 {
1125 if(GameStarted)
1126 {
1127 flSidesTime[iCurrentSW] -= g_flRoundTime;
1128 for(new i; i < Count; i++)
1129 g_fTimerPlayer[i] -= g_flRoundTime;
1130 new szName[64]
1131 get_user_name(id, szName, 63)
1132 server_cmd("amxx unpause training_menu.amxx")
1133 RestartRound();
1134 Survival = false;
1135 GameStarted = false;
1136 }
1137 else
1138 {
1139 client_print_color(id, print_team_blue, "%s Game not started or already paused (use /unpause)", rnr_tag);
1140 }
1141 }
1142
1143 set_task(0.5, "rnr_hud_paused", _, _, _, "b")
1144
1145 RestartRound();
1146 server_cmd("mp_freezetime 0")
1147 }
1148 return PLUGIN_HANDLED
1149}
1150
1151public rnr_unpause(id, level, cid)
1152{
1153 if(cmd_access(id, level, cid, 1) && g_CurrentMode == e_gPaused)
1154 {
1155 g_CurrentMode = e_gMix
1156 if(current_mode == mode_timebased)
1157 GameStarted = true;
1158
1159 Task_Hud(0, 2.0, 0, 255, 153, 0, 3.0, "LIVE LIVE LIVE");
1160
1161 RestartRound();
1162 server_cmd("mp_freezetime 15")
1163 server_cmd("amxx pause training_menu.amxx")
1164 LoadMapCFG();
1165 remove_hook(id)
1166
1167 if(get_pcvar_num(WhatSemiclip) == 1)
1168 enable_semiclip(3);
1169 else
1170 disable_semiclip();
1171 }
1172 return PLUGIN_HANDLED
1173}
1174
1175public rnr_swap_teams(id,level,cid) {
1176 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1177
1178 new rnr_name[32]
1179 get_user_name(id, rnr_name, charsmax(rnr_name))
1180 client_print_color(0, print_team_blue, "%s ^3%s ^1swap teams", rnr_tag, rnr_name)
1181
1182 iCurrentSW = !iCurrentSW;
1183 SwitchTeams()
1184 RestartRound();
1185
1186 return PLUGIN_HANDLED
1187}
1188
1189public CmdRestartRound(id, level, cid) {
1190 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1191 new rnr_name[32]
1192 get_user_name(id, rnr_name, 31)
1193 new Players[32], Count;
1194 get_players(Players, Count, "e", "TERRORIST");
1195 client_print_color(0, print_team_blue, "%s ^3%s ^1did restart", rnr_tag, rnr_name)
1196 RestartRound();
1197 flSidesTime[iCurrentSW] -= g_flRoundTime;
1198 for(new i; i < Count; i++)
1199 g_fTimerPlayer[i] -= g_flRoundTime;
1200 return PLUGIN_HANDLED
1201}
1202
1203
1204public rnr_pub(id, level, cid) {
1205 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1206
1207 new rnr_name[32]
1208 get_user_name(id, rnr_name, 31)
1209
1210 if(g_CurrentMode != e_gPub)
1211 {
1212 if(g_CurrentMode != e_gMix && g_CurrentMode != e_gKnife && g_CurrentMode != e_gPaused) {
1213 PrepareMode(e_gPub);
1214 client_print_color(0, print_team_blue, "%s ^3%s ^1has activated public HNS mode", rnr_tag, rnr_name)
1215 }
1216 } else
1217 client_print_color(id, print_team_blue, "%s ^3%s ^1Public HNS mode is already running", rnr_tag, rnr_name)
1218
1219 new szMap[64]
1220 get_mapname(szMap, 63);
1221#if defined BOOST
1222 if(containi(szMap, "boost") != -1)
1223 {
1224 disable_semiclip();
1225 }
1226 else
1227#endif
1228 {
1229 enable_semiclip(3);
1230 }
1231
1232 remove_hook(id)
1233
1234 return PLUGIN_HANDLED
1235}
1236
1237public rnr_pub_off(id, level, cid) {
1238 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1239
1240 new rnr_name[32]
1241 get_user_name(id, rnr_name, 31)
1242
1243 if(g_CurrentMode == e_gPub)
1244 {
1245 if(g_CurrentMode != e_gMix && g_CurrentMode != e_gKnife) {
1246 g_CurrentMode = e_gTraining;
1247 server_cmd("amxx unpause training_menu.amxx")
1248 enable_semiclip(0);
1249 server_cmd("mp_forcechasecam 2")
1250 server_cmd("mp_forcecamera 2")
1251 server_cmd("rnr_switch 0")
1252 server_cmd("rnr_training 1")
1253 server_cmd("mp_roundtime 2.5")
1254 //server_cmd("mp_freezetime 0")
1255 set_cvar_num("mp_freezetime",0)
1256 server_cmd("rnr_flash 3")
1257 server_cmd("mp_autoteambalance 0")
1258 server_cmd("rnr_join_team 1")
1259 server_cmd("rnr_block_change 0")
1260 RestartRound()
1261
1262 client_print_color(0, print_team_blue, "%s ^3%s ^1has disabled public HNS mode", rnr_tag, rnr_name)
1263 }
1264 } else
1265 client_print_color(id, print_team_blue, "%s ^3%s ^1Public HNS mode is not running", rnr_tag, rnr_name)
1266
1267 remove_hook(id)
1268
1269 return PLUGIN_HANDLED
1270}
1271
1272public rnr_transfer_spec(id)
1273{
1274 if(!(get_user_flags(id) & rnr_ACESS))
1275 return PLUGIN_HANDLED
1276
1277 new rnr_name[32]
1278 get_user_name(id, rnr_name, 31)
1279 client_print_color( 0, print_team_blue,"%s ^3%s ^1transfered all players to Spectators", rnr_tag, rnr_name )
1280 safe_transfer( TEAM_SPECTATOR );
1281 return PLUGIN_HANDLED
1282}
1283
1284public rnr_transfer_tt(id)
1285{
1286 if(!(get_user_flags(id) & rnr_ACESS))
1287 return PLUGIN_HANDLED
1288
1289 new rnr_name[32]
1290 get_user_name(id, rnr_name, 31)
1291 client_print_color( 0, print_team_blue,"%s ^3%s ^1transfered all players to Terrorist's", rnr_tag, rnr_name )
1292 new Players[32], Num; get_players(Players, Num, "h")
1293 safe_transfer( TEAM_TERRORIST );
1294 return PLUGIN_HANDLED
1295}
1296
1297public rnr_transfer_ct(id)
1298{
1299 if(!(get_user_flags(id) & rnr_ACESS))
1300 return PLUGIN_HANDLED
1301
1302 new rnr_name[32]
1303 get_user_name(id, rnr_name, 31)
1304 client_print_color( 0, print_team_blue,"%s ^3%s ^1transfered all players to Counter-Terrorist's", rnr_tag, rnr_name )
1305 new Players[32], Num; get_players(Players, Num, "h")
1306 safe_transfer( TEAM_CT );
1307 return PLUGIN_HANDLED
1308}
1309
1310
1311public rnr_skill(id,level,cid) {
1312 if(!cmd_access(id, level, cid, 1 )) return PLUGIN_HANDLED
1313 new rnr_name[32]
1314 get_user_name(id,rnr_name, 31)
1315 client_print_color(0, print_team_blue, "%s ^3%s ^1has activated Skill mod", rnr_tag, rnr_name)
1316
1317 new szMapName[ 33 ];
1318 get_mapname( szMapName, 32 );
1319 if(equali("hnsru_arena", szMapName))
1320 {
1321 enable_semiclip(0);
1322 }
1323 else
1324 {
1325 enable_semiclip(3);
1326 }
1327
1328 return PLUGIN_HANDLED
1329}
1330
1331public rnr_boost(id,level,cid) {
1332 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1333 new rnr_name[32]
1334 get_user_name(id,rnr_name, 31)
1335 client_print_color(0, print_team_blue, "%s ^3%s ^1has activated Boost mod", rnr_tag, rnr_name)
1336
1337 disable_semiclip();
1338
1339 return PLUGIN_HANDLED
1340}
1341
1342public rnr_aa10(id,level,cid) {
1343 if(!cmd_access(id, level, cid, 1 )) return PLUGIN_HANDLED;
1344 new rnr_name[32]
1345 get_user_name(id,rnr_name, 31)
1346 client_print_color(0, print_team_blue, "%s ^3%s ^1changed airaccelerate to 10", rnr_tag, rnr_name)
1347
1348 server_cmd("sv_airaccelerate 10")
1349 set_pcvar_num( cvarAA, 10 );
1350
1351 return PLUGIN_HANDLED
1352}
1353
1354public rnr_aa100(id,level,cid) {
1355 if(!cmd_access(id, level, cid, 1 )) return PLUGIN_HANDLED;
1356 new rnr_name[32]
1357 get_user_name(id,rnr_name, 31)
1358 client_print_color(0, print_team_blue, "%s ^3%s ^1changed airaccelerate to 100", rnr_tag, rnr_name)
1359
1360 server_cmd("sv_airaccelerate 100")
1361 set_pcvar_num( cvarAA, 100 );
1362
1363 return PLUGIN_HANDLED
1364}
1365
1366public rnr_mr5(id,level,cid) {
1367 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1368 new rnr_name[32]
1369 get_user_name(id,rnr_name, 31)
1370 client_print_color(0, print_team_blue, "%s ^3%s ^1established the: ^4MR5 ^1system", rnr_tag, rnr_name)
1371
1372 set_pcvar_num(cvarMaxRounds, 4);
1373
1374 return PLUGIN_HANDLED;
1375}
1376
1377public rnr_mr7(id,level,cid) {
1378 if(!cmd_access(id, level, cid, 1 ) ) return PLUGIN_HANDLED
1379 new rnr_name[32]
1380 get_user_name(id,rnr_name, 31)
1381 client_print_color(0, print_team_blue, "%s ^3%s ^1established the: ^4MR7 ^1system", rnr_tag, rnr_name)
1382
1383 set_pcvar_num(cvarMaxRounds, 6);
1384
1385 return PLUGIN_HANDLED
1386}
1387
1388public rnr_mr9(id,level,cid) {
1389 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
1390 new rnr_name[32]
1391 get_user_name(id,rnr_name, 31)
1392 client_print_color(0, print_team_blue, "%s ^3%s ^1established the: ^4MR9 ^1system", rnr_tag, rnr_name)
1393
1394 set_pcvar_num(cvarMaxRounds, 8);
1395
1396 return PLUGIN_HANDLED
1397}
1398
1399public cmdShowKnife(id)
1400{
1401 gOnOff[id] = !gOnOff[id];
1402
1403 client_print_color(id, print_team_blue, "%s Knife is now set %svisible", rnr_tag, gOnOff[id] ? "^3in" : "^4" );
1404
1405 if( !is_user_alive( id ) )
1406 return PLUGIN_HANDLED;
1407
1408 if( get_user_weapon( id ) == CSW_KNIFE )
1409 {
1410 if( gOnOff[id] )
1411 set_pev( id, pev_viewmodel, 0 );
1412 else
1413 {
1414 new weapon = get_member( id, m_pActiveItem );
1415 if( weapon != -1 )
1416 ExecuteHamB( Ham_Item_Deploy, weapon );
1417 }
1418 }
1419
1420 return PLUGIN_CONTINUE;
1421}
1422
1423public client_putinserver(id)
1424{
1425 g_bShowSpeed {id} = true;
1426 g_fTimerPlayer[id] = 0.0;
1427 gOnOff[id] = false // hns mode
1428}
1429
1430#if defined USE_PTS
1431public client_authorized(id)
1432{
1433 new sz_auth[32]
1434 get_user_authid(id, sz_auth, 31);
1435 new found = ArrayFindString(Leavers[0], sz_auth);
1436 if(found != -1)
1437 {
1438 new data[4];
1439 ArrayGetArray(Leavers[1], found, data);
1440 if(!data[0])
1441 {
1442 data[0] = 2;
1443 ArraySetArray(Leavers[1], found, data);
1444 remove_task(LEAVERTASK+found);
1445 }
1446 }
1447
1448 Load_MySql(id);
1449}
1450
1451public MarkAsLeaved(item)
1452{
1453 item -= LEAVERTASK;
1454 new sz_name[32];
1455
1456 ArrayGetString(Leavers[2], item, sz_name, 31);
1457 new data[4];
1458 ArrayGetArray(Leavers[1], item, data);
1459 data[0] = 1;
1460 ArraySetArray(Leavers[1], item, data);
1461
1462 client_print_color(0, print_team_blue, "%s Player ^4%s ^1 marked as ^3LEAVER", rnr_tag, sz_name);
1463
1464}
1465public LeaversScore(status)
1466{
1467 new size = ArraySize(Leavers[0]);
1468
1469 if(size)
1470 {
1471 new authid[32];
1472 for(new i = 0; i < size; i++)
1473 {
1474 if(task_exists(i+LEAVERTASK))
1475 remove_task(i+LEAVERTASK)
1476
1477 new szTemp[512];
1478 ArrayGetString(Leavers[0], i, authid, 31);
1479 new data[4];
1480 ArrayGetArray(Leavers[1], i, data);
1481 new team = data[1];
1482 new second_half = data[2];
1483 if(data[0] == 1)
1484 {
1485 //client_print_color(0, print_team_blue, "%s ^3%s FAST LEAVE: ^4NO", rnr_tag, authid);
1486 format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `pts` = `pts` - 150, `total` = `total` + 1,`leav` = `leav` + 1 WHERE `%s`.`steamid` = '%s';",Table, Table, authid)
1487 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",szTemp)
1488 }
1489 else if(!data[0])
1490 {
1491 //client_print_color(0, print_team_blue, "%s ^3%s FAST LEAVE: ^4YES", rnr_tag, authid);
1492 new Points,win,loss,draw;
1493 if(!status)
1494 {
1495 draw = 1;
1496 loss = win = 0;
1497 Points = 50;
1498 }
1499 else if (second_half)
1500 {
1501 if(status == team)
1502 {
1503 win = 1;
1504 loss = draw = 0;
1505 Points = 100;
1506 }
1507 else
1508 {
1509 loss = 1;
1510 win = draw = 0;
1511 Points = -50;
1512 }
1513 }
1514 else
1515 {
1516 if(status != team)
1517 {
1518 win = 1;
1519 loss = draw = 0;
1520 Points = 100;
1521 }
1522 else
1523 {
1524 loss = 1;
1525 win = draw = 0;
1526 Points = -50;
1527 }
1528 }
1529 format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `pts` = `pts` + %d, `total` = `total` + 1,`win` = `win` + %d,`loss` = `loss` + %d,`draw` = `draw` + %d WHERE `%s`.`steamid` = '%s'",Table,Points,win,loss,draw,Table, authid)
1530 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",szTemp)
1531 }
1532 }
1533 }
1534}
1535#endif
1536public client_disconnected(id)
1537{
1538 g_fTimerPlayer[id] = 0.0;
1539 PlayNoPlay[id] = get_gametime()+60.0;
1540#if defined USE_PTS
1541 Save_MySql(id) // PTS
1542
1543 if(g_CurrentMode == e_gMix)
1544 {
1545 if(get_user_team(id) == 1 || get_user_team(id) == 2)
1546 {
1547 new sz_auth[32], sz_name[32];
1548 get_user_authid(id, sz_auth, 31);
1549 get_user_name(id, sz_name, 31);
1550 new found = ArrayFindString(Leavers[0], sz_auth);
1551 if(found == -1)
1552 {
1553 ArrayPushString(Leavers[0], sz_auth);
1554 ArrayPushString(Leavers[2], sz_name);
1555 new data[4]
1556 data[0] = 0
1557 data[1] = get_user_team(id);
1558 data[2] = g_iSecondHalf ? 1 : 0;
1559 new index = ArrayPushArray(Leavers[1], data);
1560 set_task(FASTLEAVETIMER, "MarkAsLeaved", index+LEAVERTASK);
1561 }
1562 else
1563 {
1564 if(task_exists(found+LEAVERTASK))
1565 {
1566 remove_task(found+LEAVERTASK);
1567 }
1568 set_task(FASTLEAVETIMER, "MarkAsLeaved", found+LEAVERTASK);
1569 }
1570 }
1571 }
1572#endif
1573 if(get_user_team(id) == 1 || get_user_team(id) == 2)
1574 SaveState(id);
1575}
1576
1577
1578/* Menu (say /mix) */
1579public rnr_mix_menu(id)
1580{
1581 if(get_user_flags(id) & rnr_ACESS)
1582 {
1583 /*new title[64];
1584 formatex(title, 63, "\rHide'n'Seek Mix system")*/
1585 new i_Menu = menu_create("\rHide'n'Seek Mix system", "rnr_mix_menu_code")
1586
1587 new szMapName[ 33 ];
1588 get_mapname( szMapName, 32 );
1589 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
1590 {
1591 if(g_CurrentMode != e_gCaptain && g_CurrentMode != e_gKnife && CaptainSort == false)
1592 menu_additem(i_Menu, "\yStart Captain mod", "1")
1593 else
1594 menu_additem(i_Menu, "\rStop Captain mod", "1")
1595 }
1596 else
1597 {
1598 if(g_CurrentMode == e_gPub)
1599 menu_additem(i_Menu, "\yStart Mix match", "1")
1600 else if(g_CurrentMode == e_gTraining )
1601 menu_additem(i_Menu, "\yStart Mix match", "1")
1602 else
1603 {
1604 if(get_user_flags(id) & ADMIN_KICK)
1605 menu_additem(i_Menu, "\rStop Mix match", "1")
1606 else
1607 menu_additem(i_Menu, "\dStop Mix match", "1")
1608 }
1609 }
1610
1611
1612 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
1613 {
1614 if( g_CurrentMode != e_gMix && g_CurrentMode != e_gPaused )
1615 {
1616 if( g_CurrentMode == e_gKnife )
1617 menu_additem(i_Menu, "Stop kniferound", "2")
1618 else
1619 menu_additem(i_Menu, "Start kniferound", "2")
1620 }
1621 }
1622 else
1623 {
1624 if(g_CurrentMode == e_gTraining)
1625 menu_additem(i_Menu, "Start Public mode^n", "2")
1626 else if(g_CurrentMode == e_gPub)
1627 menu_additem(i_Menu, "Start Training mode^n", "2")
1628 else
1629 {
1630 if(g_CurrentMode != e_gPaused)
1631 menu_additem(i_Menu, "Pause match^n", "2")
1632 else
1633 menu_additem(i_Menu, "Unpause match^n", "2")
1634 }
1635 }
1636
1637
1638 menu_additem(i_Menu, "Mix system settings^n", "3")
1639
1640 menu_additem(i_Menu, "Restart round", "4")
1641 menu_additem(i_Menu, "Swap teams", "5")
1642
1643 menu_setprop( i_Menu, MPROP_EXIT, MEXIT_ALL );
1644 /*menu_addblank(i_Menu, 0)
1645 menu_additem(i_Menu, "Choose server watcher", "6")
1646 menu_additem(i_Menu, "Save/Load game status^n", "7")
1647 menu_additem(i_Menu, "Training menu", "8", 0)
1648 menu_additem(i_Menu, "Respawn \d(only TRAINING MODE)", "9")
1649
1650 menu_addblank(i_Menu, 0)
1651 menu_additem(i_Menu, "Exit", "MENU_EXIT" )
1652 menu_setprop(i_Menu,MPROP_NUMBER_COLOR, "\y" )*/
1653
1654 menu_display(id, i_Menu, 0)
1655 }
1656
1657 return PLUGIN_HANDLED
1658}
1659/* /Menu (say /mix) */
1660
1661/* Menu Functions (say /mix) */
1662public rnr_mix_menu_code(id, menu, item, level, cid)
1663{
1664 if (item == MENU_EXIT)
1665 {
1666 menu_destroy(menu)
1667 return PLUGIN_HANDLED
1668 }
1669
1670 new szMapName[ 33 ];
1671 get_mapname( szMapName, 32 );
1672
1673 new s_Data[6], s_Name[64], i_Access, i_Callback
1674 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
1675 new i_Key = str_to_num(s_Data)
1676
1677 switch(i_Key)
1678 {
1679 case 1:
1680 {
1681 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
1682 {
1683 if(g_CurrentMode != e_gCaptain && g_CurrentMode != e_gKnife && CaptainSort == false && get_user_flags(id) & rnr_ACESS)
1684 CaptainCmd(id,level,cid)
1685 else if(get_user_flags(id) & rnr_ACESS)
1686 cmdStop(id)
1687 }
1688 else
1689 {
1690 if(g_CurrentMode == e_gPub && get_user_flags(id) & rnr_ACESS)
1691 {
1692 cmdStop(id)
1693 cmdStartRound(id)
1694 }
1695 else if(g_CurrentMode == e_gTraining && get_user_flags(id) & rnr_ACESS )
1696 cmdStartRound(id)
1697 else
1698 {
1699 if(get_user_flags(id) & ADMIN_KICK)
1700 menu_verif(id)
1701 else
1702 client_print_color(id, print_team_blue, "%s Your doesn't have access to stop/start Mix", rnr_tag)
1703 }
1704 }
1705 }
1706 case 2:
1707 {
1708 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
1709 {
1710 if( g_CurrentMode != e_gMix && g_CurrentMode != e_gPaused && get_user_flags(id) & rnr_ACESS )
1711 {
1712 if( g_CurrentMode == e_gKnife && get_user_flags(id) & rnr_ACESS )
1713 cmdStop(id)
1714 else
1715 cmdKnifeRound(id)
1716 }
1717 }
1718 else
1719 {
1720 if(g_CurrentMode == e_gTraining && get_user_flags(id) & rnr_ACESS )
1721 rnr_pub(id, level, cid)
1722 else if(g_CurrentMode == e_gPub && get_user_flags(id) & rnr_ACESS )
1723 rnr_pub_off(id, level, cid)
1724 else
1725 {
1726 if(g_CurrentMode != e_gPaused && get_user_flags(id) & rnr_ACESS )
1727 rnr_startpause(id, level, cid)
1728 else
1729 rnr_unpause(id, level, cid)
1730 }
1731 }
1732 }
1733 case 3:
1734 {
1735 rnr_mix_menu_msettings(id) //mode setting
1736 }
1737 case 4:
1738 {
1739 CmdRestartRound(id, level, cid)
1740 }
1741 case 5:
1742 {
1743 rnr_swap_teams(id, level, cid)
1744 }
1745 /*case 6:
1746 {
1747 client_cmd(id, "say /watcher")
1748 }
1749 case 7:
1750 {
1751 menu_saveandload(id) //save\load game menu
1752 }
1753 case 8:
1754 {
1755 client_cmd(id, "say /training")
1756 }
1757 case 9:
1758 {
1759 client_cmd(id, "say /respawn")
1760 }*/
1761 }
1762
1763 menu_destroy(menu)
1764 return PLUGIN_HANDLED
1765}
1766
1767public rnr_mix_menu_msettings(id)
1768{
1769 if(get_user_flags(id) & rnr_ACESS)
1770 {
1771 new title[64];
1772 formatex(title, 63, "\rMix system settings")
1773 new i_Menu = menu_create(title, "rnr_mix_menu_msettings_code")
1774
1775 new title_roundtime[64]; formatex(title_roundtime, 63, "Roundtime: \y%.1f", get_cvar_float("mp_roundtime"));
1776 new title_freeztime[64]; formatex(title_freeztime, 63, "Freezetime: \y%d", get_cvar_num("mp_freezetime"));
1777 new title_timertime[64]; formatex(title_timertime, 63, "Timer to win: \y%d", get_pcvar_num(g_Captime));
1778 new title_flahs[64]; formatex(title_flahs, 63, "Flash: \y%d", get_pcvar_num(cvarFlashNum));
1779 new title_smoke[64]; formatex(title_smoke, 63, "Smoke: \y%d", get_pcvar_num(cvarSmokeNum));
1780 new title_aa[64]; formatex(title_aa, 63, "Airaccelerate \y%d", get_pcvar_num(cvarAA));
1781
1782 //new title_mr[64]; formatex(title_mr, 63, "Max rounds \y%d^n^t^t\wchange to:\r x", MaxRound)
1783
1784 menu_additem(i_Menu, title_roundtime, "1")
1785 menu_additem(i_Menu, title_freeztime, "2")
1786 menu_additem(i_Menu, title_timertime, "3")
1787 menu_addblank(i_Menu, 0)
1788 menu_additem(i_Menu, title_flahs, "4")
1789 menu_additem(i_Menu, title_smoke, "5")
1790 menu_addblank(i_Menu, 0)
1791 menu_additem(i_Menu, title_aa, "6")
1792 menu_addblank(i_Menu, 0)
1793 menu_additem(i_Menu, "Load default settings \yBoost \wgame", "7")
1794 menu_additem(i_Menu, "Load default settings \ySkill \wgame^n", "8")
1795 menu_additem(i_Menu, "Exit", "MENU_EXIT" )
1796 menu_setprop(i_Menu, MPROP_PERPAGE, 0)
1797 menu_display(id, i_Menu, 0)
1798 }
1799
1800 return PLUGIN_HANDLED
1801}
1802
1803public rnr_mix_menu_msettings_code(id, menu, item, level, cid)
1804{
1805 if (item == MENU_EXIT)
1806 {
1807 //menu_destroy(menu)
1808 rnr_mix_menu(id)
1809 //return PLUGIN_HANDLED
1810 }
1811
1812 new s_Data[6], s_Name[64], i_Access, i_Callback
1813 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
1814 new i_Key = str_to_num(s_Data)
1815
1816 switch(i_Key)
1817 {
1818 case 1:
1819 {
1820 if(get_cvar_float("mp_roundtime") == 2.5)
1821 set_cvar_float("mp_roundtime", 3.0);
1822 else if(get_cvar_float("mp_roundtime") == 3.0)
1823 set_cvar_float("mp_roundtime", 3.5);
1824 else if(get_cvar_float("mp_roundtime") == 3.5)
1825 set_cvar_float("mp_roundtime", 4.0);
1826 else if(get_cvar_float("mp_roundtime") == 4.0)
1827 set_cvar_float("mp_roundtime", 10.0);
1828 else if(get_cvar_float("mp_roundtime") == 10.0)
1829 set_cvar_float("mp_roundtime", 2.5);
1830
1831 rnr_mix_menu_msettings(id)
1832 }
1833 case 2:
1834 {
1835 if(get_cvar_num("mp_freezetime") == 0)
1836 set_cvar_num("mp_freezetime", 5);
1837 else if(get_cvar_num("mp_freezetime") == 5)
1838 set_cvar_num("mp_freezetime", 10);
1839 else if(get_cvar_num("mp_freezetime") == 10)
1840 set_cvar_num("mp_freezetime", 15);
1841 else if(get_cvar_num("mp_freezetime") == 15)
1842 set_cvar_num("mp_freezetime", 0);
1843
1844 rnr_mix_menu_msettings(id)
1845 }
1846 case 3:
1847 {
1848 if(get_pcvar_num(g_Captime) == 5)
1849 set_pcvar_num(g_Captime, 10);
1850 else if(get_pcvar_num(g_Captime) == 10)
1851 set_pcvar_num(g_Captime, 15);
1852 else if(get_pcvar_num(g_Captime) == 15)
1853 set_pcvar_num(g_Captime, 20);
1854 else if(get_pcvar_num(g_Captime) == 20)
1855 set_pcvar_num(g_Captime, 5);
1856
1857 rnr_mix_menu_msettings(id)
1858 }
1859 case 4:
1860 {
1861 if(get_pcvar_num(cvarFlashNum) == 1)
1862 set_pcvar_num(cvarFlashNum, 2);
1863 else if(get_pcvar_num(cvarFlashNum) == 2)
1864 set_pcvar_num(cvarFlashNum, 3);
1865 else if(get_pcvar_num(cvarFlashNum) == 3)
1866 set_pcvar_num(cvarFlashNum, 1);
1867
1868 rnr_mix_menu_msettings(id)
1869 }
1870 case 5:
1871 {
1872 if(get_pcvar_num(cvarSmokeNum) == 1)
1873 set_pcvar_num(cvarSmokeNum, 2);
1874 else if(get_pcvar_num(cvarSmokeNum) == 2)
1875 set_pcvar_num(cvarSmokeNum, 1);
1876
1877 rnr_mix_menu_msettings(id)
1878 }
1879 case 6:
1880 {
1881 if ( get_pcvar_num(cvarAA) < 100 )
1882 rnr_aa100(id, level, cid)
1883 else
1884 rnr_aa10(id, level, cid)
1885
1886 rnr_mix_menu_msettings(id)
1887 }
1888 case 7:
1889 {
1890 set_cvar_num("mp_freezetime", 15);
1891 set_cvar_float("mp_roundtime", 3.5)
1892 disable_semiclip();
1893 set_pcvar_num(g_Captime, 15);
1894 set_pcvar_num(cvarFlashNum, 3);
1895 set_pcvar_num(cvarSmokeNum, 1);
1896 client_print(id, print_center, "Setting: BOOST game")
1897 }
1898 case 8:
1899 {
1900 set_cvar_num("mp_freezetime", 5);
1901 set_cvar_float("mp_roundtime", 2.5)
1902 enable_semiclip(3);
1903 set_pcvar_num(g_Captime, 15);
1904 set_pcvar_num(cvarFlashNum, 1);
1905 set_pcvar_num(cvarSmokeNum, 1);
1906 client_print(id, print_center, "Setting: SKILL game")
1907 }
1908 }
1909
1910 menu_destroy(menu)
1911 return PLUGIN_HANDLED
1912}
1913
1914//Menu Round Time
1915/*public rnr_mix_menu_set_roundtime(id)
1916{
1917 if(get_user_flags(id) & rnr_ACESS)
1918 {
1919 new title[64];
1920 formatex(title, 63, "\rSetting: Roundtime menu")
1921 new i_Menu = menu_create(title, "rnr_mix_menu_set_roundtime_code")
1922
1923 menu_additem(i_Menu, "2.0", "1")
1924 menu_additem(i_Menu, "2.5", "2")
1925 menu_additem(i_Menu, "3.0", "3")
1926 menu_additem(i_Menu, "3.5", "4")
1927 menu_additem(i_Menu, "4.0", "5")
1928 menu_additem(i_Menu, "4.5", "6")
1929 menu_additem(i_Menu, "5.0", "7")
1930
1931 menu_display(id, i_Menu, 0)
1932 }
1933
1934 return PLUGIN_HANDLED
1935}
1936
1937public rnr_mix_menu_set_roundtime_code(id, menu, item, level, cid)
1938{
1939 if (item == MENU_EXIT)
1940 {
1941 menu_destroy(menu)
1942 return PLUGIN_HANDLED
1943 }
1944
1945 new s_Data[6], s_Name[64], i_Access, i_Callback
1946 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
1947 new i_Key = str_to_num(s_Data)
1948
1949 switch(i_Key)
1950 {
1951 case 1:
1952 {
1953 set_cvar_float("mp_roundtime", 2.0)
1954 client_print(id, print_center, "Setting: mp_roundtime 2.0")
1955 rnr_mix_menu_msettings(id)
1956 }
1957 case 2:
1958 {
1959 set_cvar_float("mp_roundtime", 2.5)
1960 client_print(id, print_center, "Setting: mp_roundtime 2.5")
1961 rnr_mix_menu_msettings(id)
1962 }
1963 case 3:
1964 {
1965 set_cvar_float("mp_roundtime", 3.0)
1966 client_print(id, print_center, "Setting: mp_roundtime 3.0")
1967 rnr_mix_menu_msettings(id)
1968 }
1969 case 4:
1970 {
1971 set_cvar_float("mp_roundtime", 3.5)
1972 client_print(id, print_center, "Setting: mp_roundtime 3.5")
1973 rnr_mix_menu_msettings(id)
1974 }
1975 case 5:
1976 {
1977 set_cvar_float("mp_roundtime", 4.0)
1978 client_print(id, print_center, "Setting: mp_roundtime 4.0")
1979 rnr_mix_menu_msettings(id)
1980 }
1981 case 6:
1982 {
1983 set_cvar_float("mp_roundtime", 4.5)
1984 client_print(id, print_center, "Setting: mp_roundtime 4.5")
1985 rnr_mix_menu_msettings(id)
1986 }
1987 case 7:
1988 {
1989 set_cvar_float("mp_roundtime", 5.0)
1990 client_print(id, print_center, "Setting: mp_roundtime 5.0")
1991 rnr_mix_menu_msettings(id)
1992 }
1993 }
1994
1995 menu_destroy(menu)
1996 return PLUGIN_HANDLED
1997}
1998//Menu Round Time
1999
2000//Menu Freezetime
2001public rnr_mix_menu_set_freezetime(id)
2002{
2003 if(get_user_flags(id) & rnr_ACESS)
2004 {
2005 new title[64];
2006 formatex(title, 63, "\rSetting: Freezetime menu")
2007 new i_Menu = menu_create(title, "rnr_mix_menu_set_freezetime_code")
2008
2009 menu_additem(i_Menu, "0", "1")
2010 menu_additem(i_Menu, "3", "2")
2011 menu_additem(i_Menu, "5", "3")
2012 menu_additem(i_Menu, "10", "4")
2013 menu_additem(i_Menu, "15", "5")
2014 menu_additem(i_Menu, "20", "6")
2015
2016 menu_display(id, i_Menu, 0)
2017 }
2018
2019 return PLUGIN_HANDLED
2020}
2021
2022public rnr_mix_menu_set_freezetime_code(id, menu, item, level, cid)
2023{
2024 if (item == MENU_EXIT)
2025 {
2026 menu_destroy(menu)
2027 return PLUGIN_HANDLED
2028 }
2029
2030 new s_Data[6], s_Name[64], i_Access, i_Callback
2031 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
2032 new i_Key = str_to_num(s_Data)
2033
2034 switch(i_Key)
2035 {
2036 case 1:
2037 {
2038 set_cvar_num("mp_freezetime", 0);
2039 client_print(id, print_center, "Setting: mp_freezetime 0")
2040 rnr_mix_menu_msettings(id)
2041 }
2042 case 2:
2043 {
2044 set_cvar_num("mp_freezetime", 3);
2045 client_print(id, print_center, "Setting: mp_freezetime 3")
2046 rnr_mix_menu_msettings(id)
2047 }
2048 case 3:
2049 {
2050 set_cvar_num("mp_freezetime", 5);
2051 client_print(id, print_center, "Setting: mp_freezetime 5")
2052 rnr_mix_menu_msettings(id)
2053 }
2054 case 4:
2055 {
2056 set_cvar_num("mp_freezetime", 10);
2057 client_print(id, print_center, "Setting: mp_freezetime 10")
2058 rnr_mix_menu_msettings(id)
2059 }
2060 case 5:
2061 {
2062 set_cvar_num("mp_freezetime", 15);
2063 client_print(id, print_center, "Setting: mp_freezetime 15")
2064 rnr_mix_menu_msettings(id)
2065 }
2066 case 6:
2067 {
2068 set_cvar_num("mp_freezetime", 20);
2069 client_print(id, print_center, "Setting: mp_freezetime 20")
2070 rnr_mix_menu_msettings(id)
2071 }
2072 }
2073
2074 menu_destroy(menu)
2075 return PLUGIN_HANDLED
2076}
2077//Menu Freezetime
2078
2079//Menu Timer mode
2080public rnr_mix_menu_set_timer(id)
2081{
2082 if(get_user_flags(id) & rnr_ACESS)
2083 {
2084 new title[64];
2085 formatex(title, 63, "\rSetting: Timer menu")
2086 new i_Menu = menu_create(title, "rnr_mix_menu_set_timer_code")
2087
2088 menu_additem(i_Menu, "5", "1")
2089 menu_additem(i_Menu, "10", "2")
2090 menu_additem(i_Menu, "15", "3")
2091 menu_additem(i_Menu, "20", "4")
2092
2093 menu_display(id, i_Menu, 0)
2094 }
2095
2096 return PLUGIN_HANDLED
2097}
2098
2099public rnr_mix_menu_set_timer_code(id, menu, item, level, cid)
2100{
2101 if (item == MENU_EXIT)
2102 {
2103 menu_destroy(menu)
2104 return PLUGIN_HANDLED
2105 }
2106
2107 new s_Data[6], s_Name[64], i_Access, i_Callback
2108 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
2109 new i_Key = str_to_num(s_Data)
2110
2111 switch(i_Key)
2112 {
2113 case 1:
2114 {
2115 set_pcvar_num(g_Captime, 5);
2116 client_print(id, print_center, "Setting: timer 5")
2117 rnr_mix_menu_msettings(id)
2118 }
2119 case 2:
2120 {
2121 set_pcvar_num(g_Captime, 10);
2122 client_print(id, print_center, "Setting: timer 10")
2123 rnr_mix_menu_msettings(id)
2124 }
2125 case 3:
2126 {
2127 set_pcvar_num(g_Captime, 15);
2128 client_print(id, print_center, "Setting: timer 15")
2129 rnr_mix_menu_msettings(id)
2130 }
2131 case 4:
2132 {
2133 set_pcvar_num(g_Captime, 20);
2134 client_print(id, print_center, "Setting: timer 20")
2135 rnr_mix_menu_msettings(id)
2136 }
2137 }
2138
2139 menu_destroy(menu)
2140 return PLUGIN_HANDLED
2141}
2142//Menu Timer mode
2143
2144//Menu Flash
2145public rnr_mix_menu_set_flash(id)
2146{
2147 if(get_user_flags(id) & rnr_ACESS)
2148 {
2149 new title[64];
2150 formatex(title, 63, "\rSetting: Flash granade menu")
2151 new i_Menu = menu_create(title, "rnr_mix_menu_set_flash_code")
2152
2153 menu_additem(i_Menu, "0", "1")
2154 menu_additem(i_Menu, "1", "2")
2155 menu_additem(i_Menu, "2", "3")
2156 menu_additem(i_Menu, "3", "4")
2157 menu_additem(i_Menu, "4", "5")
2158
2159 menu_display(id, i_Menu, 0)
2160 }
2161
2162 return PLUGIN_HANDLED
2163}
2164
2165public rnr_mix_menu_set_flash_code(id, menu, item, level, cid)
2166{
2167 if (item == MENU_EXIT)
2168 {
2169 menu_destroy(menu)
2170 return PLUGIN_HANDLED
2171 }
2172
2173 new s_Data[6], s_Name[64], i_Access, i_Callback
2174 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
2175 new i_Key = str_to_num(s_Data)
2176
2177 switch(i_Key)
2178 {
2179 case 1:
2180 {
2181 set_pcvar_num(cvarFlashNum, 0);
2182 client_print(id, print_center, "Setting: Flash granade 0")
2183 rnr_mix_menu_msettings(id)
2184 }
2185 case 2:
2186 {
2187 set_pcvar_num(cvarFlashNum, 1);
2188 client_print(id, print_center, "Setting: Flash granade 1")
2189 rnr_mix_menu_msettings(id)
2190 }
2191 case 3:
2192 {
2193 set_pcvar_num(cvarFlashNum, 2);
2194 client_print(id, print_center, "Setting: Flash granade 2")
2195 rnr_mix_menu_msettings(id)
2196 }
2197 case 4:
2198 {
2199 set_pcvar_num(cvarFlashNum, 3);
2200 client_print(id, print_center, "Setting: Flash granade 3")
2201 rnr_mix_menu_msettings(id)
2202 }
2203 case 5:
2204 {
2205 set_pcvar_num(cvarFlashNum, 4);
2206 client_print(id, print_center, "Setting: Flash granade 4")
2207 rnr_mix_menu_msettings(id)
2208 }
2209 }
2210
2211 menu_destroy(menu)
2212 return PLUGIN_HANDLED
2213}
2214//Menu Flash
2215
2216//Menu Smoke
2217public rnr_mix_menu_set_smoke(id)
2218{
2219 if(get_user_flags(id) & rnr_ACESS)
2220 {
2221 new title[64];
2222 formatex(title, 63, "\rSetting: Smoke granade menu")
2223 new i_Menu = menu_create(title, "rnr_mix_menu_set_smoke_code")
2224
2225 menu_additem(i_Menu, "0", "1")
2226 menu_additem(i_Menu, "1", "2")
2227 menu_additem(i_Menu, "2", "3")
2228
2229 menu_display(id, i_Menu, 0)
2230 }
2231
2232 return PLUGIN_HANDLED
2233}
2234
2235public rnr_mix_menu_set_smoke_code(id, menu, item, level, cid)
2236{
2237 if (item == MENU_EXIT)
2238 {
2239 menu_destroy(menu)
2240 return PLUGIN_HANDLED
2241 }
2242
2243 new s_Data[6], s_Name[64], i_Access, i_Callback
2244 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
2245 new i_Key = str_to_num(s_Data)
2246
2247 switch(i_Key)
2248 {
2249 case 1:
2250 {
2251 set_pcvar_num(cvarSmokeNum, 0);
2252 client_print(id, print_center, "Setting: Smoke granade 0")
2253 rnr_mix_menu_msettings(id)
2254 }
2255 case 2:
2256 {
2257 set_pcvar_num(cvarSmokeNum, 1);
2258 client_print(id, print_center, "Setting: Smoke granade 1")
2259 rnr_mix_menu_msettings(id)
2260 }
2261 case 3:
2262 {
2263 set_pcvar_num(cvarSmokeNum, 2);
2264 client_print(id, print_center, "Setting: Smoke granade 2")
2265 rnr_mix_menu_msettings(id)
2266 }
2267
2268 }
2269
2270 menu_destroy(menu)
2271 return PLUGIN_HANDLED
2272}*/
2273//Menu Smoke
2274
2275public menu_verif(id)
2276{
2277 new i_Menu = menu_create("\rVerification menu^n^n\dAre you sure you want to stop this mod:", "menu_verif_handler")
2278
2279 menu_additem(i_Menu, "\wNO", "1", 0)
2280 menu_additem(i_Menu, "\wYES", "2", 0)
2281 menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
2282 menu_display(id, i_Menu, 0)
2283}
2284
2285public menu_verif_handler(id, menu, item, level, cid)
2286{
2287 if (item == MENU_EXIT)
2288 {
2289 menu_destroy(menu)
2290
2291 return PLUGIN_HANDLED
2292 }
2293
2294 new s_Data[6], s_Name[64], i_Access, i_Callback
2295 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
2296 new i_Key = str_to_num(s_Data)
2297
2298 switch(i_Key)
2299 {
2300 case 1:
2301 {
2302 menu_destroy(menu)
2303 return PLUGIN_HANDLED
2304 }
2305 case 2:
2306 {
2307 if(g_CurrentMode != e_gCaptain && CaptainSort == false )
2308 cmdStop(id)
2309 else
2310 StopCaptainCmd(id,level,cid)
2311 }
2312 }
2313
2314 menu_destroy(menu)
2315 return PLUGIN_HANDLED
2316}
2317
2318
2319/* /Menu Functions (say /mix) */
2320
2321
2322/* Hook */
2323public rnr_hook_on(id)
2324{
2325 if ( g_CurrentMode > e_gPaused )
2326 return PLUGIN_HANDLED
2327
2328 if( !is_user_alive(id) )
2329 return PLUGIN_HANDLED
2330
2331 get_user_origin(id,hookorigin[id],3)
2332 rnr_hooked[id] = true
2333 set_task(0.1,"rnr_hook_task",id+9999,"",0,"ab")
2334 rnr_hook_task(id+9999)
2335
2336 return PLUGIN_HANDLED
2337}
2338
2339public is_hooked(id)
2340{
2341 return rnr_hooked[id]
2342}
2343
2344public rnr_hook_off(id)
2345{
2346 remove_hook(id)
2347
2348 return PLUGIN_HANDLED
2349}
2350
2351public rnr_hook_task(id)
2352{
2353 id -= 9999;
2354 if(!is_user_connected(id) || !is_user_alive(id) || g_CurrentMode > e_gPaused)
2355 {
2356 remove_hook(id)
2357 return;
2358 }
2359
2360 remove_beam(id)
2361 draw_hook(id)
2362
2363 new origin[3], Float:velocity[3]
2364 get_user_origin(id,origin)
2365 new distance = get_distance(hookorigin[id],origin)
2366 if(distance > 60)
2367 {
2368 velocity[0] = (hookorigin[id][0] - origin[0]) * (2.0 * 500 / distance)
2369 velocity[1] = (hookorigin[id][1] - origin[1]) * (2.0 * 500 / distance)
2370 velocity[2] = (hookorigin[id][2] - origin[2]) * (2.0 * 500 / distance)
2371 set_entvar(id, var_velocity, velocity)
2372 }
2373 else
2374 {
2375 set_entvar(id,var_velocity,Float:{0.0,0.0,0.0})
2376 set_entvar(id, var_gravity, 0.00000001);
2377 }
2378 set_entvar(id, var_sequence, 55);
2379 set_entvar(id,var_frame, 0.0);
2380}
2381
2382public draw_hook(id)
2383{
2384 message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
2385 write_byte(1) // TE_BEAMENTPOINT
2386 write_short(id) // entid
2387 write_coord(hookorigin[id][0]) // origin
2388 write_coord(hookorigin[id][1]) // origin
2389 write_coord(hookorigin[id][2]) // origin
2390 write_short(Sbeam) // sprite index
2391 write_byte(0) // start frame
2392 write_byte(0) // framerate
2393 write_byte(100) // life
2394 write_byte(5) // width
2395 write_byte(0) // noise
2396 write_byte(65) // r
2397 write_byte(105) // g
2398 write_byte(225) // b
2399 write_byte(100) // brightness
2400 write_byte(0) // speed
2401 message_end()
2402}
2403
2404
2405public remove_hook(id)
2406{
2407 if(task_exists(id+9999))
2408 remove_task(id+9999)
2409
2410 remove_beam(id)
2411 set_pev(id, pev_gravity, 1.0);
2412 ishooked[id] = false
2413}
2414
2415public remove_beam(id)
2416{
2417 message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
2418 write_byte(99) // TE_KILLBEAM
2419 write_short(id)
2420 message_end()
2421}
2422/* /Hook */
2423
2424
2425
2426// Commands
2427public cmdCheckpoint(plr)
2428{
2429 if( g_CurrentMode > e_gPaused )
2430 {
2431 //client_print(plr, print_chat, "Checkpoints are disabled.");
2432 Task_Hud(plr, 0.0, 1, 40, 40, 40, 1.0, "Checkpoints are disabled");
2433 return PLUGIN_HANDLED;
2434 }
2435 else if( !is_user_alive(plr) )
2436 {
2437 //client_print(plr, print_chat, "You can't do that while dead.");
2438 Task_Hud(plr, 0.0, 1, 40, 40, 40, 1.0, "You can't do that while dead");
2439 return PLUGIN_HANDLED;
2440 }
2441
2442 pev(plr, pev_origin, gCheckpoints[plr][g_bCheckpointAlternate[plr] ? 1 : 0]);
2443 g_bCheckpointAlternate[plr] = !g_bCheckpointAlternate[plr];
2444
2445 return PLUGIN_HANDLED;
2446}
2447
2448public cmdGoCheck(plr)
2449{
2450 if( g_CurrentMode > e_gPaused )
2451 {
2452 //client_print(plr, print_chat, "Checkpoints are disabled.");
2453 Task_Hud(plr, 0.0, 1, 40, 40, 40, 1.0, "Checkpoints are disabled");
2454 return PLUGIN_HANDLED;
2455 }
2456 else if( !is_user_alive(plr) )
2457 {
2458 //client_print(plr, print_chat, "You can't do that while dead.");
2459 Task_Hud(plr, 0.0, 1, 40, 40, 40, 1.0, "You can't do that while dead");
2460 return PLUGIN_HANDLED;
2461 }
2462 else if( !gCheckpoints[plr][0][0] )
2463 {
2464 //client_print(plr, print_chat, "%L", plr, "You don't have any checkpoints.");
2465 Task_Hud(plr, 0.0, 1, 40, 40, 40, 1.0, "You don't have any checkpoints");
2466 return PLUGIN_HANDLED;
2467 }
2468
2469 set_pev(plr, pev_velocity, Float:{0.0, 0.0, 0.0});
2470 set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_DUCKING)
2471 engfunc(EngFunc_SetOrigin, plr, gCheckpoints[plr][!g_bCheckpointAlternate[plr]]);
2472
2473 return PLUGIN_HANDLED;
2474}
2475
2476/* Training end */
2477
2478public cmdStartRound(id)
2479{
2480 if(get_user_flags(id) & rnr_ACESS)
2481 {
2482 if(g_CurrentMode != e_gTraining)
2483 {
2484 client_print_color(id, print_team_blue, "%s Please disable other mode before start mix", rnr_tag);
2485 return;
2486 }
2487 else
2488 {
2489 client_print_color(0, print_team_blue, "%s ^3%s ^1has started Mix", rnr_tag, GetName(id));
2490/*#if defined BOOST //tyt проверка на мод будет
2491 disable_semiclip();
2492#else
2493 enable_semiclip(3);
2494#endif*/
2495
2496#if defined INFO_START
2497 if(is_user_alive(id)) //tyt
2498 CmdPrognoz(id);
2499 else
2500 CmdBalance(id);
2501#endif
2502
2503 remove_hook(id);
2504 pf_Scrim();
2505 }
2506 }
2507}
2508
2509public cmdStop(id)
2510{
2511 if(get_user_flags(id) & rnr_ACESS)
2512 {
2513 switch(g_CurrentMode)
2514 {
2515 case e_gPaused:
2516 {
2517 client_print_color(0, print_team_blue, "%s ^3%s ^1stopped Mix", rnr_tag, GetName(id))
2518 }
2519 case e_gKnife:
2520 {
2521 client_print_color(0, print_team_blue, "%s ^3%s ^1stopped Knife Round", rnr_tag, GetName(id))
2522 }
2523 case e_gMix:
2524 {
2525 client_print_color(0, print_team_blue, "%s ^3%s ^1stopped Mix", rnr_tag, GetName(id))
2526 }
2527 case e_gPub:
2528 {
2529 client_print_color(0, print_team_blue, "%s ^3%s ^1stopped Public mode", rnr_tag, GetName(id))
2530 }
2531 }
2532 //server_cmd("amxx unpause training_menu.amxx")
2533
2534 if(g_CurrentMode)
2535 {
2536 GameStarted = false
2537 Survival = false;
2538 PrepareMode(e_gTraining);
2539 enable_semiclip(0);
2540 }
2541 }
2542}
2543
2544public cmdKnifeRound(id)
2545{
2546 if(get_user_flags(id) & rnr_ACESS)
2547 {
2548 if(g_CurrentMode != e_gTraining)
2549 {
2550 client_print_color(id, print_team_blue, "%s Please disable other mode before start knife", rnr_tag);
2551 return;
2552 }
2553 else
2554 {
2555#if defined RACE
2556 g_arena = 0;
2557#endif
2558 pf_KnifeRound(id)
2559 remove_hook(id)
2560 }
2561 }
2562}
2563
2564public pf_Scrim()
2565{
2566 set_task(4.5, "PrepareMode", e_gMix);
2567 Task_Hud(0, 0.0, 0, 255, 153, 0, 5.0, "GOING LIVE IN 5 SECONDS")
2568 Task_Hud(0, 7.0, 0, 255, 153, 0, 5.0, "LIVE LIVE LIVE^nGood Luck & Have Fun")
2569}
2570
2571public pf_KnifeRound(id)
2572{
2573 new szMap[64]
2574 get_mapname(szMap, 63);
2575
2576 PrepareMode(e_gKnife);
2577
2578#if defined RACE
2579 if(!equali(szMap, "hnsru_arena") || !g_arena)
2580 {
2581 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "Knife Round Started!");
2582 client_print_color(0, print_team_blue, "%s ^3%s ^1started Knife Round!", rnr_tag, GetName(id));
2583 disable_semiclip();
2584 }
2585 else
2586 {
2587 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "Bhop Battle Started!");
2588 client_print_color(0, print_team_blue, "%s ^3%s ^1started BHOP Battle!", rnr_tag, GetName(id));
2589 enable_semiclip(0);
2590 }
2591#else
2592 {
2593 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "Knife Round Started!");
2594 client_print_color(0, print_team_blue, "%s ^3%s ^1started Knife Round!", rnr_tag, GetName(id));
2595 disable_semiclip();
2596 }
2597#endif
2598
2599
2600 return PLUGIN_HANDLED
2601}
2602
2603public Score(id)
2604{
2605 if(current_mode == mode_timebased)
2606 {
2607 ShowTimers(id)
2608 return PLUGIN_CONTINUE
2609 }
2610
2611 new teamname[2][32]
2612 teamname[0] = "CT";
2613 teamname[1] = "TT";
2614 if(current_mode == mode_2switch)
2615 {
2616 if(!g_iSecondHalf)
2617 client_print_color(id, print_team_blue,"%s Score: %s ^3%d^1:^3%d^1 %s ^1(^3MR%d^1 | ^3RS%d^1)", rnr_tag, teamname[0], g_iScore[0], g_iScore[1], teamname[1],get_pcvar_num(cvarMaxRounds), get_pcvar_num(cvarRoundSwitch))
2618 else
2619 client_print_color(id, print_team_blue,"%s Score: %s ^3%d^1:^3%d^1 %s ^1(^3MR%d^1 | ^3RS%d^1)", rnr_tag, teamname[1], g_iScore[0], g_iScore[1], teamname[0],get_pcvar_num(cvarMaxRounds), get_pcvar_num(cvarRoundSwitch))
2620
2621
2622 return PLUGIN_CONTINUE
2623 }
2624 if(!g_iSecondHalf)
2625 client_print_color(id, print_team_blue,"%s Score: %s ^3%d^1:^3%d^1 %s ^1(^3MR%d^1)", rnr_tag, teamname[0], g_iScore[0], g_iScore[1], teamname[1], get_pcvar_num(cvarMaxRounds))
2626 else
2627 client_print_color(id, print_team_blue,"%s Score: %s ^3%d^1:^3%d^1 %s ^1(^3MR%d^1)", rnr_tag, teamname[1], g_iScore[0], g_iScore[1], teamname[0], get_pcvar_num(cvarMaxRounds))
2628
2629 return PLUGIN_CONTINUE
2630}
2631
2632
2633public eCurWeapon(id)
2634{
2635 if(g_CurrentMode == e_gKnife)
2636 {
2637 engclient_cmd(id, "weapon_knife")
2638 }
2639
2640 if(!g_bFreezePeriod)
2641 return
2642
2643 if (rg_get_user_team(id) == TEAM_TERRORIST)
2644 cs_reset_user_maxspeed(id)
2645}
2646
2647public cs_reset_user_maxspeed(id) {
2648 engfunc(EngFunc_SetClientMaxspeed, id, 250.0);
2649 set_pev(id, pev_maxspeed, 250.0)
2650 return PLUGIN_HANDLED
2651}
2652
2653#define TASK_ROUNDTIME 8888
2654
2655public ShowTimers(id)
2656{
2657 if(GameStarted || g_CurrentMode == e_gPaused)
2658 {
2659 new TimeToWin[2][24]
2660 fnConvertTime( (get_pcvar_float(g_Captime)*60.0)-flSidesTime[iCurrentSW], TimeToWin[0], 23 );
2661 fnConvertTime( (get_pcvar_float(g_Captime)*60.0)-flSidesTime[!iCurrentSW], TimeToWin[1], 23 );
2662 if(!iCurrentSW)
2663 client_print_color(id,print_team_blue, "%s TT [^3%s^1] vs [^3%s^1] CT ",rnr_tag, TimeToWin[iCurrentSW], TimeToWin[!iCurrentSW])
2664 else
2665 client_print_color(id,print_team_blue, "%s TT [^3%s^1] vs [^3%s^1] CT ",rnr_tag, TimeToWin[!iCurrentSW], TimeToWin[iCurrentSW])
2666 }
2667 else
2668 {
2669 client_print_color(id,print_team_blue, "%s ^1Sorry, but game ain't started atm.", rnr_tag)
2670 }
2671}
2672
2673#define TASK_ROUNDTIME 8888
2674
2675public ePreFT() {
2676 if(task_exists(ROUNDENDTASK))
2677 remove_task(ROUNDENDTASK);
2678 if(task_exists(TASK_ROUNDTIME))
2679 remove_task(TASK_ROUNDTIME);
2680
2681 if(GameStarted)
2682 {
2683 ShowTimers(0);
2684 }
2685
2686 g_flRoundTime = 0.0;
2687 EnableHamForward( Player_Killed_Pre );
2688 g_bLastFlash = false;
2689 g_bFreezePeriod = true;
2690
2691 set_task(0.1, "TaskDestroyBreakables");
2692}
2693public ePostFT() {
2694 StartRoundTime = get_gametime();
2695 g_bFreezePeriod = false;
2696
2697 if(current_mode == mode_timebased)
2698 {
2699 if(GameStarted)
2700 Survival = true
2701
2702 set_task(0.25, "RoundEnd", TASK_ROUNDTIME,.flags = "b");
2703 }
2704}
2705
2706/* Algoritm nahojdeinya missov po TT :/ */
2707
2708/*new g_iMissId[MAX_PLAYERS + 1][MAX_PLAYERS + 1];
2709#define TASK_MISS 3426
2710
2711public task_Miss(id)
2712{
2713 id -= TASK_MISS;
2714
2715 if(!is_user_connected(id))
2716 {
2717 remove_task(id + TASK_MISS);
2718 return;
2719 }
2720
2721 new iPlayers[MAX_PLAYERS], iNum, distance, buttons;
2722 buttons = get_entvar(id, var_button);
2723 get_players(iPlayers, iNum, "e", "TERRORIST");
2724
2725 for(new i; i < iNum; i++)
2726 {
2727 new MissId = g_iMissId[id][i];
2728
2729 new idOrigin[3], missOrigin[3];
2730 get_entvar(id, var_origin, idOrigin, 3);
2731 get_entvar(MissId, var_origin, missOrigin, 3);
2732
2733 distance = get_distance(idOrigin, missOrigin);
2734 }
2735
2736 if((buttons & IN_ATTACK || buttons & IN_ATTACK2) && distance <= 1814773376)
2737 {
2738 server_print(">>> IN_ATTACK: +");
2739 }
2740 //server_print("%d", distance);
2741}
2742
2743public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:flDamage, bitsDamageType)
2744{
2745 if(rg_get_user_team(attacker) != TEAM_CT)
2746 return HC_SUPERCEDE;
2747
2748 if(get_entvar(victim, var_health) <= 65)
2749 return HC_SUPERCEDE;
2750
2751 g_iMissId[attacker][victim] = victim;
2752 set_task(0.5, "task_Miss", attacker + TASK_MISS, .flags = "b");
2753
2754 return HC_CONTINUE;
2755}
2756
2757public CBasePlayer_Killed(victim, attacker, gib)
2758{
2759 if(rg_get_user_team(victim) == TEAM_CT && task_exists(victim + TASK_MISS))
2760 remove_task(victim + TASK_MISS);
2761}*/
2762
2763/*new g_iPlayerKilled[MAX_PLAYERS + 1];
2764new g_iPlayerIsDamaged[MAX_PLAYERS + 1];
2765new g_iPlayerAssists[MAX_PLAYERS + 1];
2766new g_AttackerId[MAX_PLAYERS + 1];
2767new g_VictimId[MAX_PLAYERS + 1];
2768new g_AttackerId2[MAX_PLAYERS + 1];
2769
2770public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:flDamage, bitsDamageType)
2771{
2772 if(get_entvar(victim, var_health) <= 65)
2773 return HC_SUPERCEDE;
2774
2775 g_AttackerId[attacker] = attacker;
2776 g_VictimId[victim] = victim;
2777 new id = g_VictimId[victim];
2778 g_iPlayerIsDamaged[id] = true;
2779 return HC_CONTINUE;
2780}
2781
2782public CBasePlayer_Killed(victim, attacker, gib)
2783{
2784 if(victim == attacker)
2785 return HC_SUPERCEDE;
2786
2787 g_AttackerId2[attacker] = attacker;
2788 g_iPlayerKilled[attacker]++;
2789
2790 for(new i = 0; i <= MaxClients; i++)
2791 {
2792 new id = g_VictimId[i];
2793 if(!is_user_connected(id))
2794 continue;
2795 server_print(">> %d, %n", id, id);
2796
2797 if(g_iPlayerIsDamaged[id])
2798 {
2799 new id2 = g_AttackerId[i];
2800 if(!is_user_connected(id))
2801 continue;
2802 g_iPlayerAssists[id2]++;
2803 g_iPlayerIsDamaged[id] = false;
2804 server_print(">> +++ %d, %n", id2, id2);
2805 }
2806 }
2807 return HC_CONTINUE;
2808}*/
2809
2810new msg[64];
2811
2812public RoundEnd()
2813{
2814 new Players[32], Count
2815 get_players(Players, Count, "e", "TERRORIST");
2816 if(Survival)
2817 {
2818 g_flRoundTime+= 0.25;
2819 flSidesTime[iCurrentSW]+=0.25;
2820 for(new i; i < Count; i++)
2821 {
2822 new id = Players[i];
2823 if(!is_user_alive(id))
2824 continue;
2825
2826 g_fTimerPlayer[id]+=0.25;
2827 }
2828 if(flSidesTime[iCurrentSW] >= get_pcvar_float(g_Captime)*60.0)
2829 {
2830 //SoundFx = false;
2831 GameStarted = false;
2832 Survival = false;
2833 new Float:TimeDiff
2834 if(iCurrentSW)
2835 TimeDiff = flSidesTime[iCurrentSW]-flSidesTime[0]
2836 else
2837 TimeDiff = flSidesTime[iCurrentSW]-flSidesTime[1]
2838
2839 new sTime[24];
2840 fnConvertTime( TimeDiff, sTime, 23 );
2841#if defined USE_PTS
2842 MixFinished(1);
2843#endif
2844 client_print_color(0, print_team_blue, "%s TT won the match! (%s difference)",rnr_tag, sTime)
2845 RestartRound();
2846 PrepareMode(e_gTraining)
2847
2848 /*for(new i; i < Count; i++) {
2849 new id = Players[i];
2850 fnConvertTime( g_fTimerPlayer[id], sTime, 23 );
2851 //client_print_color(0, print_team_blue, "%s ^3%n^1 | Time: ^3%s^1 seconds", rnr_tag, id, sTime);
2852 format(msg[id], 63, "^3%n^1 | ^3%s^1^n", id, sTime);
2853 g_fTimerPlayer[id] = 0.0;
2854 }*/
2855 new best_id[10];
2856 new Float:best_time[10];
2857 new iPlayers[MAX_PLAYERS], iNum;
2858 get_players(iPlayers, iNum);
2859 new bid = 0;
2860 for(new i; i < iNum; i++)
2861 {
2862 if(rg_get_user_team(iPlayers[i]) == TEAM_SPECTATOR)
2863 continue;
2864
2865 if(bid >= 10)
2866 break;
2867
2868 new id = iPlayers[i];
2869 server_print("%d", bid);
2870 best_id[bid] = id;
2871 best_time[bid] = g_fTimerPlayer[id];
2872 server_print("%i %n", i, best_id[bid])
2873 bid++;
2874 //server_print("%i %n", i, id);
2875 }
2876
2877 for(new i = 0 ; i < 10 ; i++)
2878 {
2879 for(new j = 0 ; j < 10 ; j++)
2880 {
2881 if(best_time[j] < best_time[i])
2882 {
2883 new Float:tmp = best_time[i];
2884 new tmpid = best_id[i];
2885 best_time[i] = best_time[j];
2886 best_time[j] = tmp;
2887 best_id[i] = best_id[j];
2888 best_id[j] = tmpid;
2889 }
2890 }
2891 }
2892
2893 new menu = menu_create("\rBest Players", "PlayersTimeHandler");
2894 /*new buff[64];
2895 for(new i = 0; i <= MaxClients; i++) {
2896 if(!is_user_connected(i))
2897 continue;
2898
2899 new id1 = g_AttackerId[i];
2900 new id2 = g_AttackerId2[i];
2901 format(buff, 63, "Kills: %d Assists: %d", g_iPlayerKilled[id2], g_iPlayerAssists[id1])
2902 }*/
2903
2904 for(new i = 0 ; i < 10; i++)
2905 {
2906 fnConvertTime( best_time[i], sTime, 23 );
2907 format(msg, 63, "^3%s^1 ^t^t ^3%n^1", sTime, best_id[i]);
2908 menu_additem(menu, msg);
2909 }
2910 menu_setprop(menu, MPROP_PERPAGE, 0)
2911 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
2912 for(new i = 0; i <= MaxClients; i++) {
2913 if(is_user_connected(i))
2914 menu_display(i, menu);
2915 }
2916 }
2917 /*else if(flSidesTime[iCurrentSW] >= get_pcvar_float(g_Captime)*60.0-1.5 && !SoundFx)
2918 {
2919 //EndSoundFx(1);
2920 SoundFx = true;
2921 }*/
2922 }
2923 if((g_flRoundTime/60.0) >= get_pcvar_float( g_pRoundTime ))
2924 {
2925 if(GameStarted)
2926 Survival = false;
2927 //RoundTerminating(0.5)
2928
2929 remove_task(TASK_ROUNDTIME)
2930 }
2931}
2932
2933public PlayersTimeHandler(id, menu, item)
2934{
2935 menu_destroy(menu);
2936 return PLUGIN_HANDLED;
2937}
2938
2939/*public EndSoundFx( toggle )
2940{
2941 if(toggle)
2942 client_cmd ( 0, "spk rnr/endgame.wav" )
2943 else
2944 {
2945 client_cmd(0, "stopsound");
2946 client_cmd ( 0, "spk rnr/rnr_expire.wav" )
2947 }
2948}*/
2949
2950public TTWin()
2951{
2952 new winner = 2;
2953 if(g_CurrentMode == e_gMix)
2954 {
2955 if(!g_iSecondHalf)
2956 {
2957 if(winner == 1)
2958 {
2959 g_iScore[0]++
2960 }
2961 if(winner == 2)
2962 {
2963 g_iScore[1]++
2964 }
2965 }
2966 else
2967 {
2968 if(winner == 1)
2969 {
2970 g_iScore[1]++
2971 }
2972 if(winner == 2)
2973 {
2974 g_iScore[0]++
2975 }
2976 }
2977 }
2978 RestartRound();
2979}
2980
2981public eEndRound()
2982{
2983 if(task_exists(ROUNDENDTASK))
2984 remove_task(ROUNDENDTASK);
2985
2986 new msg[32], winner;
2987 read_data(2,msg,32)
2988
2989 /*if(SoundFx)
2990 {
2991 EndSoundFx(0)
2992 SoundFx = false;
2993 }*/
2994
2995 if(containi(msg,"ct") != -1)
2996 {
2997 winner = 1
2998 }
2999
3000 else if(contain(msg,"ter") != -1)
3001 {
3002 winner = 2;
3003
3004 }
3005
3006 if(g_CurrentMode == e_gPub)
3007 {
3008 if(winner == 1)
3009 SwitchTeams()
3010 }
3011
3012 if(g_CurrentMode == e_gMix && current_mode == mode_timebased)
3013 {
3014 /*new players[32], num;
3015 get_players(players, num, "ae", "CT");
3016 if( num > 0 )
3017 {
3018 Survival = false;
3019 iCurrentSW = !iCurrentSW;
3020 SwitchTeams(); //swaps
3021 }*/
3022 if(winner == 1)
3023 {
3024 Survival = false;
3025 iCurrentSW = !iCurrentSW;
3026 SwitchTeams();
3027 }
3028 }
3029 else if(g_CurrentMode == e_gMix && current_mode == mode_mr)
3030 {
3031 if(!g_iSecondHalf)
3032 {
3033 if(winner == 1)
3034 {
3035 g_iScore[0]++
3036 }
3037 if(winner == 2)
3038 {
3039 g_iScore[1]++
3040 }
3041 }
3042 else
3043 {
3044 if(winner == 1)
3045 {
3046 g_iScore[1]++
3047 }
3048 if(winner == 2)
3049 {
3050 g_iScore[0]++
3051 }
3052 }
3053 CheckScore()
3054 }
3055 else if(g_CurrentMode == e_gMix && current_mode == mode_2switch)
3056 {
3057 static switchme = 0;
3058 switchme++;
3059 if(!g_iSecondHalf)
3060 {
3061 if(winner == 1)
3062 {
3063 g_iScore[0]++
3064 }
3065 if(winner == 2)
3066 {
3067 g_iScore[1]++
3068 }
3069 }
3070 else
3071 {
3072 if(winner == 1)
3073 {
3074 g_iScore[1]++
3075 }
3076 if(winner == 2)
3077 {
3078 g_iScore[0]++
3079 }
3080 }
3081 if(switchme == 2)
3082 {
3083 SwitchTeams();
3084 g_iSecondHalf = !g_iSecondHalf;
3085 switchme = 0;
3086 }
3087 CheckScore()
3088 }
3089 else if(g_CurrentMode == e_gKnife)
3090 {
3091 if(winner == 1)
3092 {
3093 Task_Hud(0, 2.0, 0, 65, 105, 225, 3.0, "KNIFE ROUND WIN COUNTER-TERRORISTS");
3094 }
3095 if(winner == 2)
3096 {
3097 Task_Hud(0, 2.0, 0, 205, 45, 15, 3.0, "KNIFE ROUND WIN TERRORISTS");
3098 }
3099
3100 if(CaptainWinner == 3)
3101 {
3102 if(winner == 1)
3103 CaptainSide = Captain1;
3104 else
3105 CaptainSide = Captain2;
3106 set_task(1.5, "captain_menu", CaptainSide);
3107 //set_task(0.2, "PlayersList", TASK_PLAYERSLIST, _, _, "b");
3108 CaptainWinner = 0;
3109 CaptainSort = true
3110 PrepareMode(e_gTraining); //e_gCaptain
3111 }
3112 else
3113 PrepareMode(e_gTraining);
3114
3115 SavePlayers();
3116 }
3117}
3118
3119
3120public CheckScore()
3121{
3122 new Rounds = get_pcvar_num(cvarMaxRounds)
3123
3124 Score(0);
3125
3126 if(!g_iSecondHalf && current_mode == mode_mr)
3127 {
3128 if(g_iScore[0]+g_iScore[1] == Rounds)
3129 {
3130 g_iSecondHalf = true;
3131 SwitchTeams();
3132 Task_Hud(0, 1.0, 0, 255, 153, 0, 6.0, "1ST HALF %d:%d^nSWITCHING SIDES...^n2ND HALF IN 5 SECONDS", g_iScore[0], g_iScore[1])
3133 Task_Hud(0, 8.0, 0, 255, 153, 0, 5.0, "LIVE LIVE LIVE");
3134 set_task(7.0, "RestartRound");
3135 }
3136 }
3137 else
3138 {
3139 new teamname[32]
3140 if(g_iScore[0] > Rounds)
3141 {
3142#if defined USE_PTS
3143 MixFinished(1)
3144#endif
3145 get_pcvar_string(cvarTeamOne, teamname, 31)
3146 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
3147 }
3148 else if(g_iScore[1] > Rounds)
3149 {
3150#if defined USE_PTS
3151 MixFinished(2)
3152#endif
3153 get_pcvar_string(cvarTeamTwo, teamname, 31)
3154 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
3155 }
3156 else if((g_iScore[0]+g_iScore[1]) == (Rounds*2))
3157 {
3158 Task_Hud(0, 1.0, 0, 255, 153, 0, 3.0, "MATCH FINISHED^nDRAW DRAW DRAW");
3159#if defined USE_PTS
3160 MixFinished(0)
3161#endif
3162 }
3163 }
3164}
3165
3166public SwitchTeams()
3167{
3168 /*for( new i = 1; i <= g_iMaxPlayers; i++ ) {
3169 if( is_user_connected( i ) )
3170 {
3171 switch( cs_get_user_team( i ) )
3172 {
3173 case TEAM_TERRORIST: cs_set_user_team( i, TEAM_CT )
3174 case TEAM_CT: cs_set_user_team( i, TEAM_TERRORIST )
3175 }
3176 }
3177 }*/
3178 rg_swap_all_players();
3179}
3180
3181public CBasePlayer_Spawn_Post(id) {
3182
3183 if (!is_user_alive(id))
3184 return;
3185
3186 set_member(id, m_bJustConnected, false);
3187 if(g_CurrentMode <= 1)
3188 rg_set_user_godmode(id, 1)
3189
3190 SetRole(id)
3191}
3192
3193public SetRole(id) {
3194 new CsTeams:team = rg_get_user_team(id);
3195 rg_remove_all_items(id);
3196 if(g_CurrentMode > e_gKnife )
3197 {
3198 switch (team)
3199 {
3200 case TEAM_TERRORIST:
3201 {
3202 set_user_footsteps(id, 1);
3203 rg_give_item(id, "weapon_knife")
3204 if( get_pcvar_num( cvarFlashNum ) >= 1 )
3205 {
3206 rg_give_item( id, "weapon_flashbang" );
3207 rg_set_user_bpammo( id, WEAPON_FLASHBANG, get_pcvar_num( cvarFlashNum ) );
3208 }
3209 if( get_pcvar_num( cvarSmokeNum ) >= 1 )
3210 {
3211 rg_give_item( id, "weapon_smokegrenade" );
3212 rg_set_user_bpammo( id, WEAPON_SMOKEGRENADE, get_pcvar_num( cvarSmokeNum ) );
3213 }
3214 }
3215 case TEAM_CT:
3216 {
3217 set_user_footsteps(id, 0);
3218 rg_give_item(id, "weapon_knife")
3219 }
3220 }
3221 }
3222 else
3223 {
3224 rg_give_item(id, "weapon_knife")
3225 }
3226}
3227
3228public GetName(id)
3229{
3230 new szName[128]
3231 get_user_name(id, szName, charsmax(szName))
3232 return szName
3233}
3234
3235/*public CheckCvars(mode)
3236 {
3237 switch(mode)
3238 {
3239 case 0:
3240 {
3241
3242 }
3243 case 3:
3244 {
3245 server_cmd( "rnr_hns 1" )
3246 server_cmd( "rnr_footsteps 1" )
3247 server_cmd( "mp_forcechasecam 2")
3248 server_cmd( "mp_forcecamera 2")
3249 server_cmd( "hns_alltalk 0" )
3250 server_cmd( "mp_timelimit 0" )
3251 }
3252 }
3253 }*/
3254
3255public PrepareMode(mode)
3256{
3257
3258 switch(mode)
3259 {
3260 case e_gTraining:
3261 {
3262 server_cmd("amxx unpause %s", hns_jumpstat)
3263 server_cmd( "mp_timelimit 0" )
3264 server_cmd( "mp_roundtime 10" )
3265 server_cmd( "mp_freezetime 0" )
3266 server_cmd("mp_autoteambalance 0")
3267 server_cmd( "sv_alltalk 1" )
3268 enable_semiclip(0);
3269 g_CurrentMode = e_gTraining;
3270 server_cmd("amxx unpause training_menu.amxx")
3271 server_cmd("rnr_lastmode 0")
3272 }
3273 case e_gKnife:
3274 {
3275 server_cmd("amxx pause %s", hns_jumpstat)
3276 server_cmd("mp_freezetime 0")
3277 server_cmd("mp_timelimit 0")
3278 server_cmd("mp_autoteambalance 0")
3279 server_cmd("mp_forcechasecam 2")
3280 server_cmd("mp_forcecamera 2")
3281 //disable_semiclip();
3282 g_CurrentMode = e_gKnife;
3283 server_cmd("amxx pause training_menu.amxx")
3284 server_cmd("rnr_lastmode 0")
3285 }
3286 case e_gMix:
3287 {
3288 flSidesTime[0] = 0.0
3289 flSidesTime[1] = 0.0
3290 iCurrentSW = 1;
3291 if(current_mode == mode_timebased)
3292 GameStarted = true;
3293
3294 g_iScore[0] = 0;
3295 g_iScore[1] = 0;
3296 g_iSecondHalf = false;
3297
3298 server_cmd("amxx pause %s", hns_jumpstat)
3299 server_cmd("rnr_hns 1" )
3300 server_cmd("rnr_flash 3")
3301 server_cmd( "rnr_footsteps 1" )
3302 server_cmd("mp_forcechasecam 2")
3303 server_cmd("mp_forcecamera 2")
3304 server_cmd( "mp_freezetime 15" )
3305 server_cmd("mp_autoteambalance 0")
3306 server_cmd( "mp_timelimit 0" )
3307
3308 if(get_pcvar_num(WhatSemiclip) == 1)
3309 enable_semiclip(3);
3310 else
3311 disable_semiclip();
3312
3313 g_CurrentMode = e_gMix;
3314 server_cmd("amxx pause training_menu.amxx")
3315 server_cmd("rnr_lastmode 0")
3316 LoadMapCFG();
3317 }
3318 case e_gPub:
3319 {
3320 g_CurrentMode = e_gPub;
3321
3322 server_cmd("amxx pause training_menu.amxx")
3323 server_cmd("amxx unpause %s", hns_jumpstat)
3324
3325 server_cmd("mp_timelimit 0" )
3326 server_cmd("mp_forcechasecam 0")
3327 server_cmd("mp_forcecamera 0")
3328 server_cmd("rnr_switch 1")
3329 server_cmd("rnr_footsteps 1")
3330 server_cmd("mp_autoteambalance 1")
3331 server_cmd("mp_roundtime 2.5")
3332 server_cmd("mp_freezetime 5")
3333 server_cmd("rnr_flash 1")
3334 server_cmd("rnr_block_change 0")
3335 server_cmd("rnr_training 0")
3336 server_cmd("rnr_checkpoints 1")
3337 server_cmd("rnr_hook 1")
3338 server_cmd("rnr_lastmode 1")
3339 enable_semiclip(3);
3340 }
3341 case e_gCaptain:
3342 {
3343 g_CurrentMode = e_gCaptain;
3344 server_cmd("amxx pause training_menu.amxx")
3345 server_cmd("amxx pause %s", hns_jumpstat)
3346 disable_semiclip()
3347 server_cmd("mp_autoteambalance 0")
3348 }
3349 }
3350
3351 RestartRound();
3352}
3353RestartRound( Float:delay = 0.7 )
3354{
3355 Survival = false;
3356 rg_round_end(delay, WINSTATUS_DRAW, ROUND_END_DRAW, "Round Restarted", "none");
3357}
3358
3359
3360public FwdKnifePrim( const iPlayer )
3361{
3362 if( g_CurrentMode )
3363 {
3364 ExecuteHamB( Ham_Weapon_SecondaryAttack, iPlayer );
3365 return HAM_SUPERCEDE;
3366 }
3367 return HAM_IGNORED;
3368}
3369
3370
3371public FwdDeployKnife( const iEntity )
3372{
3373 new iClient = get_member( iEntity, m_pPlayer );
3374
3375 if(gOnOff[iClient] )
3376 {
3377 set_pev(iClient, pev_viewmodel, 0)
3378 }
3379 else
3380 {
3381 set_pev(iClient, pev_viewmodel, alloc_KnifeModel)
3382 }
3383
3384 if(get_user_team(iClient) == 1 && g_CurrentMode != e_gKnife)
3385 {
3386 set_member( iEntity, m_Weapon_flNextPrimaryAttack, 9999.0 );
3387 set_member( iEntity, m_Weapon_flNextSecondaryAttack, 9999.0 );
3388 }
3389 return HAM_IGNORED;
3390}
3391
3392public Task_Hud(id, Float:Time,Dhud, Red, Green, Blue, Float:HoldTime, const Text[], any: ... )
3393{
3394 new message[128]; vformat( message, charsmax( message ), Text, 9 );
3395 new Args[7];
3396 Args[0] = id;
3397 Args[1] = EncodeText(message);
3398 Args[2] = Red
3399 Args[3] = Green
3400 Args[4] = Blue
3401 Args[5] = Dhud
3402 Args[6] = _:HoldTime
3403 if(Time > 0.0)
3404 set_task(Time, "Hud_Message", 89000, Args, 7)
3405 else
3406 Hud_Message(Args)
3407}
3408
3409public Hud_Message(Params[])
3410{
3411 new id, Text[128], RRR, GGG, BBB, dhud, Float:HoldTime
3412 id = Params[0]
3413 DecodeText(Params[1], Text, charsmax(Text))
3414 RRR = Params[2]
3415 GGG = Params[3]
3416 BBB = Params[4]
3417 dhud = Params[5]
3418 HoldTime = Float:Params[6]
3419
3420 if(!id || is_user_connected(id))
3421 {
3422 if(dhud)
3423 {
3424 set_dhudmessage(RRR, GGG, BBB, -1.0, 0.60, 0, 0.0, HoldTime, 0.1, 0.1)
3425
3426 show_dhudmessage(id, Text)
3427 }
3428 else
3429 {
3430 set_hudmessage(RRR, GGG, BBB, -1.0, 0.60, 0, 0.0, HoldTime, 0.1, 0.1, -1);
3431 show_hudmessage(id, Text)
3432 }
3433 }
3434}
3435
3436// Functions
3437stock fnRegisterSayCmd(const szCmd[], const szShort[], const szFunc[], flags = -1, szInfo[] = "")
3438{
3439 new szTemp[65], szInfoLang[65];
3440 format(szInfoLang, 64, "%L", LANG_SERVER, szInfo);
3441
3442 format(szTemp, 64, "say /%s", szCmd);
3443 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3444
3445 format(szTemp, 64, "%s", szCmd);
3446 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3447
3448 format(szTemp, 64, "/%s", szCmd);
3449 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3450
3451
3452 format(szTemp, 64, "say /%s", szShort);
3453 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3454
3455 format(szTemp, 64, "%s", szShort);
3456 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3457
3458 format(szTemp, 64, "/%s", szShort);
3459 register_clcmd(szTemp, szFunc, flags, szInfoLang);
3460
3461 return 1;
3462}
3463
3464stock EncodeText( const text[] )
3465{
3466 return engfunc( EngFunc_AllocString, text )
3467}
3468
3469stock DecodeText( const text, string[], const length )
3470{
3471 global_get( glb_pStringBase, text, string, length )
3472}
3473
3474#if defined RACE
3475public arena_menu(id)
3476{
3477 new i_Menu = menu_create("Select Arena:", "arena_menu_code")
3478
3479 menu_additem(i_Menu, "Ban system", "1")
3480 menu_additem(i_Menu, "Knife", "2")
3481
3482 menu_setprop(i_Menu, MPROP_PERPAGE, 0)
3483 menu_display(id, i_Menu, 0)
3484}
3485
3486
3487public arena_menu_code(id, menu, item, level, cid)
3488{
3489 if (item == MENU_EXIT)
3490 {
3491 menu_destroy(menu)
3492 return PLUGIN_HANDLED
3493 }
3494 new s_Data[6], s_Name[64], i_Access, i_Callback
3495 menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
3496 new i_Key = str_to_num(s_Data)
3497 switch(i_Key)
3498 {
3499 case 1:
3500 {
3501 g_arena = -1;
3502 }
3503 case 2:
3504 {
3505 g_arena = 0;
3506 }
3507 }
3508
3509 CaptainMenu(id);
3510 menu_destroy(menu)
3511 return PLUGIN_HANDLED
3512}
3513#endif
3514
3515public CaptainCmd(id,level,cid) {
3516 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
3517
3518 if(g_CurrentMode != e_gTraining)
3519 return PLUGIN_HANDLED
3520
3521 g_CurrentMode = e_gCaptain;
3522 server_cmd("amxx pause training_menu.amxx")
3523
3524 new rnr_name[32]
3525 get_user_name(id, rnr_name, charsmax(rnr_name))
3526 new iPlayers[32], iNum;
3527 get_players(iPlayers, iNum);
3528
3529 Captain1 = Captain2 = 0;
3530
3531 for(new i; i < iNum; i++)
3532 {
3533 user_silentkill(iPlayers[i]);
3534 rg_set_user_team(iPlayers[i], TEAM_SPECTATOR);
3535 }
3536
3537//PrepareMode(e_gKnife);
3538
3539 client_print_color (0, print_team_blue, "%s ^3%s ^1choosing captains..", rnr_tag, rnr_name);
3540 CaptainMenu(id);
3541
3542 return PLUGIN_HANDLED;
3543}
3544
3545public StopCaptainCmd(id,level,cid) {
3546 if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
3547
3548 if(!CaptainSort)
3549 return PLUGIN_HANDLED
3550
3551 new rnr_name[32]
3552 get_user_name(id, rnr_name, charsmax(rnr_name))
3553 if(is_user_connected(Captain1))
3554 menu_cancel(Captain1);
3555 if(is_user_connected(Captain2))
3556 menu_cancel(Captain2);
3557 CaptainWinner = 0;
3558 CaptainSort = false;
3559 if(task_exists(TASK_MENUCLOSE))
3560 remove_task(TASK_MENUCLOSE)
3561
3562 if(task_exists(TASK_PLAYERSLIST))
3563 remove_task(TASK_PLAYERSLIST)
3564
3565 PrepareMode(e_gTraining);
3566
3567 client_print_color(0, print_team_blue, "%s ^3%s ^1stopped captain mode", rnr_tag, rnr_name);
3568
3569 return PLUGIN_HANDLED;
3570}
3571
3572public CaptainMenu( id )
3573{
3574//Create a variable to hold the menu
3575 new menu = menu_create( "\rLook at this player menu:", "menu_handler" );
3576
3577//We will need to create some variables so we can loop through all the players
3578 new players[32], pnum, tempid;
3579
3580//Some variables to hold information about the players
3581 new szName[32], szUserId[32];
3582
3583 new callback = menu_makecallback("playermenu_callback");
3584
3585//Fill players with available players
3586 get_players(players, pnum);
3587//Start looping through all players
3588 new items = 1;
3589 for ( new i; i<pnum; i++ )
3590 {
3591 //Save a tempid so we do not re-index
3592 tempid = players[i];
3593 if(tempid == Captain1)
3594 continue;
3595
3596 //Get the players name and userid as strings
3597 get_user_name( tempid, szName, charsmax( szName ) );
3598 //We will use the data parameter to send the userid, so we can identify which player was selected in the handler
3599 formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid( tempid ) );
3600 if(items && items%7 == 0)
3601 {
3602 items++
3603 menu_additem( menu, "Refresh", "*", 0 );
3604 }
3605 if(plr_noplay[tempid])
3606 {
3607 add(szName, charsmax(szName), " \r[NOPLAY]");
3608 menu_additem( menu, szName, szUserId, 0, callback );
3609 }
3610 else menu_additem( menu, szName, szUserId, 0);
3611
3612 items++
3613 }
3614 items = menu_items(menu)+1;
3615 if(items%7 != 0)
3616 {
3617 while(items%7 != 0)
3618 {
3619 items++;
3620 menu_addblank2(menu);
3621 }
3622 }
3623
3624 menu_additem( menu, "Refresh", "*", 0 );
3625//We now have all players in the menu, lets display the menu
3626 menu_display( id, menu, 0 );
3627}
3628
3629
3630public playermenu_callback( id, menu, item )
3631{
3632 return ITEM_DISABLED;
3633}
3634
3635public menu_handler( id, menu, item )
3636{
3637//Do a check to see if they exited because menu_item_getinfo ( see below ) will give an error if the item is MENU_EXIT
3638 if ( item == MENU_EXIT )
3639 {
3640 menu_destroy( menu );
3641 return PLUGIN_HANDLED;
3642 }
3643
3644//now lets create some variables that will give us information about the menu and the item that was pressed/chosen
3645 new szData[6], szName[64];
3646 new _access, item_callback;
3647//heres the function that will give us that information ( since it doesnt magicaly appear )
3648 menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
3649 if(szData[0] == '*')
3650 {
3651 CaptainMenu(id);
3652 return PLUGIN_HANDLED;
3653 }
3654//Get the userid of the player that was selected
3655 new userid = str_to_num( szData );
3656
3657//Try to retrieve player index from its userid
3658 new player = find_player( "k", userid ); // flag "k" : find player from userid
3659
3660//If player == 0, this means that the player's userid cannot be found
3661//If the player is still alive ( we had retrieved alive players when formating the menu but some players may have died before id could select an item from the menu )
3662 if ( player )
3663 {
3664 new szName[64];
3665 get_user_name( player, szName, charsmax( szName ) );
3666
3667 if(!Captain1)
3668 {
3669 client_print_color(0, print_team_blue, "%s as first captain -> ^3%s", rnr_tag, szName);
3670 Captain1 = player;
3671
3672 CaptainMenu(id);
3673 }
3674 else
3675 {
3676 client_print_color(0, print_team_blue, "%s as second captain -> ^3%s", rnr_tag, szName);
3677 Captain2 = player;
3678
3679 rg_set_user_team(Captain1, TEAM_CT);
3680 rg_set_user_team(Captain2, TEAM_TERRORIST);
3681 CaptainWinner = 3;
3682 RestartRound();
3683 new szMap[64]
3684 get_mapname(szMap, 63);
3685#if defined RACE
3686 if(equali(szMap, "hnsru_arena"))
3687 {
3688 if(g_arena != -1)
3689 start_arena(Captain1, Captain2, g_arena);
3690 else
3691 start_bans(Captain1, Captain2);
3692 }
3693#endif
3694 RestartRound(3.0);
3695 set_task(1.5, "pf_KnifeRound", id);
3696 }
3697 }
3698
3699 menu_destroy( menu );
3700 return PLUGIN_HANDLED;
3701}
3702
3703public captain_menu(id)
3704{
3705 if(id != CaptainSide || !CaptainSort)
3706 {
3707 return PLUGIN_HANDLED;
3708 }
3709
3710 new menu = menu_create("Select a Player:", "captainmenu_handler")
3711 new callback = menu_makecallback("playermenu_callback");
3712//set_task(11.5, "menu_task", id + TASK_MENUCLOSE);
3713
3714 new players[32], pnum, tempid;
3715 new szName[32], szTempid[10];
3716
3717 get_players(players, pnum);
3718
3719 if(pnum == 0)
3720 {
3721 remove_task(id+TASK_MENUCLOSE)
3722 if(task_exists(TASK_PLAYERSLIST))
3723 remove_task(TASK_PLAYERSLIST);
3724 CaptainSort = false
3725
3726 client_print(0, print_chat, "%s Closing Captain Sort. Missing players.", rnr_tag);
3727 return PLUGIN_HANDLED;
3728 }
3729 else
3730 {
3731 CaptainSort = true;
3732 }
3733 new totalnum = 0;
3734 new items = 1;
3735 for(new i; i<pnum; i++)
3736 {
3737 tempid = players[i];
3738
3739 if(rg_get_user_team(tempid) != TEAM_SPECTATOR)
3740 {
3741 totalnum++;
3742 continue;
3743 }
3744
3745 get_user_name(tempid, szName, charsmax(szName));
3746 num_to_str(tempid, szTempid, charsmax(szTempid));
3747
3748
3749 if(items && items%7 == 0)
3750 {
3751 items++
3752 menu_additem( menu, "Refresh", "*", 0 );
3753 }
3754 items++
3755
3756 if(plr_noplay[tempid])
3757 {
3758 add(szName, charsmax(szName), " \r[NOPLAY]");
3759 menu_additem( menu, szName, szTempid, 0, callback );
3760 }
3761 else
3762 menu_additem( menu, szName, szTempid, 0 );
3763 }
3764 items = menu_items(menu)+1;
3765 if(items%7 != 0)
3766 {
3767 while(items%7 != 0)
3768 {
3769 items++;
3770 menu_addblank2(menu);
3771 }
3772 }
3773 menu_additem( menu, "Refresh", "*", 0 );
3774 menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
3775
3776
3777
3778 menu_display(id, menu, 0);
3779 return PLUGIN_HANDLED;
3780}
3781#if defined RACE
3782new bool:is_banned[33];
3783new counter_banned;
3784new bool:capbans = false;
3785
3786public captain_ban( id )
3787{
3788 if(id != CaptainSide || !capbans)
3789 return;
3790
3791//Create a variable to hold the menu
3792 new menu = menu_create( "\rBan Enemy Player:", "captain_ban_handler" );
3793
3794//We will need to create some variables so we can loop through all the players
3795 new players[32], pnum, tempid;
3796
3797//Some variables to hold information about the players
3798 new szName[32], szUserId[32];
3799
3800//Fill players with available players
3801 get_players(players, pnum);
3802//Start looping through all players
3803 new items = 1;
3804 for ( new i; i<pnum; i++ )
3805 {
3806 //Save a tempid so we do not re-index
3807 tempid = players[i];
3808 if(get_user_team(tempid) != 1 && get_user_team(tempid) != 2)
3809 continue;
3810
3811 if(get_user_team(tempid) == get_user_team(id) || is_banned[tempid])
3812 continue;
3813
3814 //Get the players name and userid as strings
3815 get_user_name( tempid, szName, charsmax( szName ) );
3816 //We will use the data parameter to send the userid, so we can identify which player was selected in the handler
3817 formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid( tempid ) );
3818 if(items && items%7 == 0)
3819 {
3820 items++
3821 menu_additem( menu, "Refresh", "*", 0 );
3822 }
3823 else menu_additem( menu, szName, szUserId, 0);
3824
3825 items++
3826 }
3827 items = menu_items(menu)+1;
3828 if(items%7 != 0)
3829 {
3830 while(items%7 != 0)
3831 {
3832 items++;
3833 menu_addblank2(menu);
3834 }
3835 }
3836
3837 menu_additem( menu, "Refresh", "*", 0 );
3838//We now have all players in the menu, lets display the menu
3839 menu_display( id, menu, 0 );
3840}
3841
3842
3843public captain_ban_handler( id, menu, item )
3844{
3845//Do a check to see if they exited because menu_item_getinfo ( see below ) will give an error if the item is MENU_EXIT
3846 if ( item == MENU_EXIT )
3847 {
3848 menu_destroy( menu );
3849 return PLUGIN_HANDLED;
3850 }
3851
3852//now lets create some variables that will give us information about the menu and the item that was pressed/chosen
3853 new szData[6], szName[64];
3854 new _access, item_callback;
3855//heres the function that will give us that information ( since it doesnt magicaly appear )
3856 menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
3857 if(szData[0] == '*')
3858 {
3859 CaptainMenu(id);
3860 return PLUGIN_HANDLED;
3861 }
3862//Get the userid of the player that was selected
3863 new userid = str_to_num( szData );
3864
3865//Try to retrieve player index from its userid
3866 new player = find_player( "k", userid ); // flag "k" : find player from userid
3867
3868//If player == 0, this means that the player's userid cannot be found
3869//If the player is still alive ( we had retrieved alive players when formating the menu but some players may have died before id could select an item from the menu )
3870 if ( player )
3871 {
3872 is_banned[player] = true;
3873 new szName[64];
3874 get_user_name( player, szName, charsmax( szName ) );
3875
3876 client_print_color(0, print_team_blue, "%s %s banned -> ^3%s", rnr_tag, GetName(CaptainSide), szName);
3877 if(++counter_banned >= 8)
3878 {
3879 new plr1, plr2;
3880 for(new i = 1; i <= g_iMaxPlayers; i++)
3881 {
3882 if(!is_user_connected(i))
3883 continue;
3884
3885 if((get_user_team(i) == 1 || get_user_team(i) == 2) && !is_banned[i])
3886 {
3887 if(!plr1)
3888 plr1 = i;
3889 else
3890 {
3891 plr2 = i;
3892 break;
3893 }
3894 }
3895 }
3896 start_arena(plr1, plr2, -1);
3897 counter_banned = 0;
3898 Captain1 = Captain2 = 0;
3899 CaptainSide = 0;
3900 capbans = false;
3901 set_task(1.5, "pf_KnifeRound", 0);
3902 return PLUGIN_HANDLED;
3903 }
3904
3905
3906 if(id == Captain1)
3907 CaptainSide = Captain2
3908 else
3909 CaptainSide = Captain1
3910
3911 captain_ban( CaptainSide );
3912 }
3913
3914 menu_destroy( menu );
3915 return PLUGIN_HANDLED;
3916}
3917#endif
3918public captainmenu_handler(id,menu,item)
3919{
3920 if(id != CaptainSide || !CaptainSort)
3921 {
3922 return PLUGIN_HANDLED;
3923 }
3924 if(item == MENU_EXIT)
3925 {
3926 menu_display(id,menu,0)
3927 return PLUGIN_HANDLED;
3928 }
3929 new data[6], szName[64];
3930 new access, callback;
3931 menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
3932
3933 if(data[0] == '*')
3934 {
3935 captain_menu(id)
3936 return PLUGIN_HANDLED
3937 }
3938 new tempid = str_to_num(data)
3939
3940 if(!is_user_connected(tempid))
3941 {
3942 client_print_color(id, print_team_blue, "%s Player ^3%n^1 disconnected", rnr_tag, tempid);
3943 return PLUGIN_HANDLED;
3944 }
3945
3946 new name[35], namec[35];
3947 get_user_name(tempid, name, charsmax(name));
3948 get_user_name(id, namec, charsmax(namec));
3949
3950 rg_set_user_team(tempid, rg_get_user_team(id));
3951 client_print_color(0, print_team_blue, "%s ^3%s^1 choose the player -> ^3%s", rnr_tag, namec, name);
3952
3953 //RestartRound();
3954 ExecuteHamB(Ham_CS_RoundRespawn, tempid)
3955
3956 remove_task(id+TASK_MENUCLOSE)
3957
3958 new iPlayers[32],pnum
3959 get_players(iPlayers,pnum,"h")
3960 new bool:has_spec
3961 new totalplayers;
3962 for(new i; i < pnum; i++)
3963 {
3964 if(rg_get_user_team(iPlayers[i]) == TEAM_SPECTATOR)
3965 {
3966 has_spec = true
3967 }
3968 else
3969 {
3970 totalplayers++;
3971 }
3972 }
3973 if(!has_spec || totalplayers == 10)
3974 {
3975 if(task_exists(TASK_PLAYERSLIST))
3976 remove_task(TASK_PLAYERSLIST);
3977 CaptainSort = false;
3978 PrepareMode(e_gTraining);
3979 menu_destroy(menu)
3980 return PLUGIN_HANDLED;
3981 }
3982 if(is_user_connected(Captain1) && is_user_connected(Captain2))
3983 {
3984 if(id == Captain1)
3985 CaptainSide = Captain2
3986 else
3987 CaptainSide = Captain1
3988 set_task(1.5,"captain_menu", CaptainSide)
3989 }
3990 else
3991 {
3992 set_task(5.0,"CheckCaptainJoin",id == Captain1 ? Captain1 : Captain2)
3993 }
3994 menu_destroy(menu)
3995 return PLUGIN_HANDLED
3996}
3997
3998public menu_task(id)
3999{
4000 id -= TASK_MENUCLOSE
4001
4002 new players[32], pnum;
4003 get_players(players, pnum, "h");
4004
4005 new randomnum = random(pnum)
4006 new bool:has_spec
4007 new totalplayers;
4008 for(new i; i < pnum; i++)
4009 {
4010 if(rg_get_user_team(players[i]) == TEAM_SPECTATOR)
4011 {
4012 has_spec = true
4013 }
4014 else
4015 {
4016 totalplayers++;
4017 }
4018 }
4019 if(!has_spec || totalplayers == 10)
4020 {
4021 if(task_exists(TASK_PLAYERSLIST))
4022 remove_task(TASK_PLAYERSLIST);
4023
4024 PrepareMode(e_gTraining);
4025 CaptainSort = false;
4026 return;
4027 }
4028 while(rg_get_user_team(players[randomnum]) != TEAM_SPECTATOR)
4029 {
4030 randomnum = random(pnum)
4031 }
4032 if(is_user_connected(id))
4033 {
4034 RestartRound();
4035 rg_set_user_team(players[randomnum],rg_get_user_team(id))
4036
4037 set_task(1.5, "captain_menu", id == Captain1 ? Captain2 : Captain1);
4038 }
4039 else
4040 {
4041 set_task(5.0, "CheckCaptainJoin", id == Captain1 ? Captain2 : Captain1);
4042
4043 client_print(0, print_chat, "%s Awaiting the arrival of a new Captain.", rnr_tag);
4044 }
4045 show_menu(id, 0, "^n", 1);
4046}
4047
4048public CheckCaptainJoin(NextCaptainMenu)
4049{
4050 if(is_user_connected(Captain1) && is_user_connected(Captain2))
4051 {
4052 set_task(1.5, "captain_menu", NextCaptainMenu)
4053 }
4054 else
4055 {
4056 set_task(5.0, "CheckCaptainJoin", NextCaptainMenu)
4057 }
4058}
4059
4060public PlayersList()
4061{
4062 new iPlayers[32], iNum;
4063 get_players(iPlayers, iNum, "h");
4064
4065 new posTR, posCT, posSPEC;
4066 new HudTextTR[512], HudTextCT[512], HudTextSPEC[512];
4067 new szName[38], name[38];
4068
4069 for(new i; i < iNum; i++)
4070 {
4071 get_user_name(iPlayers[i], szName, charsmax(szName));
4072
4073 if(iPlayers[i] == Captain1 || iPlayers[i] == Captain2)
4074 {
4075 formatex(name, charsmax(name), "%s [CAP]", szName);
4076 }
4077 else
4078 {
4079 name = szName;
4080 }
4081 if(rg_get_user_team(iPlayers[i]) == TEAM_TERRORIST)
4082 {
4083 posTR += formatex(HudTextTR[posTR], 511-posTR,"%s^n", name);
4084 }
4085 else if(rg_get_user_team(iPlayers[i]) == TEAM_CT)
4086 {
4087 posCT += formatex(HudTextCT[posCT], 511-posCT, "%s^n", name);
4088 }
4089 else
4090 {
4091 posSPEC += formatex(HudTextSPEC[posSPEC], 511-posSPEC, "%s^n", name);
4092 }
4093 }
4094 for(new i; i < iNum; i++)
4095 {
4096
4097 set_hudmessage( 180, 40, 40, 0.70, 0.16, 0, 0.0, 0.2, 0.2, 0.2, -1);
4098 ShowSyncHudMsg(iPlayers[i], SyncHud[0], "Terrorists:^n%s", HudTextTR);
4099
4100 set_hudmessage(40, 80, 150, 0.70, 0.51, 0, 0.0, 0.2, 0.2, 0.2, -1);
4101 ShowSyncHudMsg(iPlayers[i], SyncHud[1], "Counter-Terrorist:^n%s", HudTextCT);
4102 }
4103}
4104
4105public LoadMapCFG()
4106{
4107 new szMap[64]
4108 get_mapname(szMap, 63);
4109 new szPath[128]
4110 get_configsdir(szPath, 127);
4111 format(szPath, 127, "%s/mixsystem", szPath);
4112 if(!dir_exists(szPath))
4113 mkdir(szPath);
4114 format(szPath, 127, "%s/mapcfg", szPath);
4115 if(!dir_exists(szPath))
4116 mkdir(szPath);
4117
4118 format(szPath, 127, "%s/%s.cfg", szPath, szMap);
4119 if(file_exists(szPath))
4120 {
4121 server_cmd("exec %s", szPath);
4122 }
4123 else
4124 {
4125 server_cmd("mp_roundtime 3");
4126 }
4127}
4128
4129public bool:CheckPlayer(id)
4130{
4131 new szSteam[64];
4132 get_user_authid(id, szSteam, 63);
4133 new szMapName[64]
4134 get_mapname(szMapName, 63);
4135 if( equali( "rnr_valkyrie01", szMapName ) || equali("hnsru_arena", szMapName))
4136 {
4137 return false;
4138 }
4139 new string[128];
4140 new side;
4141 new exploded[2][64]
4142
4143 new PlayersFile = fopen("addons/amxmodx/data/playerslist.ini", "r");
4144
4145 if(PlayersFile)
4146 {
4147 while(!feof(PlayersFile))
4148 {
4149 fgets(PlayersFile, string, 127)
4150 if(containi(string, szSteam) != -1)
4151 {
4152 explode_string(string, " ", exploded, 2, 63);
4153 side = str_to_num(exploded[1]);
4154 break;
4155 }
4156 }
4157
4158 fclose(PlayersFile);
4159 }
4160
4161 if(side == 1)
4162 {
4163 rg_set_user_team(id, TEAM_TERRORIST);
4164 }
4165 else if(side == 2)
4166 {
4167 rg_set_user_team(id, TEAM_CT);
4168 }
4169 else
4170 {
4171 rg_set_user_team(id, TEAM_SPECTATOR);
4172 return false;
4173 }
4174
4175 return true;
4176}
4177
4178public SavePlayers()
4179{
4180 if(file_exists("addons/amxmodx/data/playerslist.ini"))
4181 delete_file("addons/amxmodx/data/playerslist.ini");
4182
4183 new PlayersFile = fopen("addons/amxmodx/data/playerslist.ini", "w");
4184 new players[MAX_PLAYERS], num;
4185 get_players(players, num, "ae", "TERRORIST");
4186
4187 for(new i = 1; i <= g_iMaxPlayers; i++)
4188 {
4189 if(!is_user_connected(i))
4190 continue;
4191
4192 new szString[128];
4193 new Steam[64]
4194 get_user_authid(i, Steam, 63);
4195 if(!num)
4196 {
4197 if(get_user_team(i) == 1)
4198 format(szString, 127, "%s %d^r^n", Steam, 2)
4199 else if(get_user_team(i) == 2)
4200 format(szString, 127, "%s %d^r^n", Steam, 1)
4201 else
4202 format(szString, 127, "%s %d^r^n", Steam, get_user_team(i))
4203 }
4204 else
4205 format(szString, 127, "%s %d^r^n", Steam, get_user_team(i))
4206
4207 fputs(PlayersFile, szString);
4208 }
4209
4210 fclose(PlayersFile);
4211}
4212
4213
4214public TaskDestroyBreakables( )
4215{
4216 new iEntity = -1;
4217 while ((iEntity = rg_find_ent_by_class(iEntity, "func_breakable" )))
4218 {
4219 if(get_entvar(iEntity, var_takedamage))
4220 {
4221 set_entvar(iEntity, var_origin, Float:{10000.0, 10000.0, 10000.0})
4222 }
4223 }
4224}
4225
4226public Forward_SetClientListening(iReceiver, iSender, bool:bListen)
4227{
4228 if(g_CurrentMode <= e_gPaused || g_CurrentMode == e_gCaptain || g_CurrentMode == e_gPub)
4229 {
4230 engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
4231 forward_return(FMV_CELL, true)
4232 return FMRES_SUPERCEDE
4233 }
4234
4235 if(is_user_connected(iReceiver) && is_user_connected(iSender))
4236 {
4237 if(get_user_team(iReceiver) == get_user_team(iSender))
4238 {
4239 engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
4240 forward_return(FMV_CELL, true)
4241 return FMRES_SUPERCEDE
4242 }
4243 else if(get_user_team(iReceiver) != 1 && get_user_team(iReceiver) != 2 )
4244 {
4245 engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
4246 forward_return(FMV_CELL, true)
4247 return FMRES_SUPERCEDE
4248 }
4249 }
4250
4251 engfunc(EngFunc_SetClientListening, iReceiver, iSender, false)
4252 forward_return(FMV_CELL, false)
4253 return FMRES_SUPERCEDE
4254}
4255
4256#define SAFETRANSFERTASK 7832
4257
4258public safe_transfer( TeamName:iTeam)
4259{
4260 new Float:flTime
4261 new iPlayers[ 32 ], iPlayersNum
4262 get_players( iPlayers, iPlayersNum, "h");
4263 for(new i = 0; i < iPlayersNum; i++)
4264 {
4265 new id = iPlayers[i];
4266 if(is_user_connected(id))
4267 {
4268 switch(id)
4269 {
4270 case 1 ..8: flTime = 0.1;
4271 case 9 ..16: flTime = 0.2;
4272 case 17 ..24: flTime = 0.3;
4273 case 25 ..32: flTime = 0.4;
4274 }
4275
4276 new task_params[2];
4277 task_params[0] = id;
4278 task_params[1] = _:iTeam;
4279
4280 if(task_exists(SAFETRANSFERTASK+id))
4281 remove_task(SAFETRANSFERTASK+id)
4282
4283 set_task(flTime, "task_to_team", SAFETRANSFERTASK+id, task_params, sizeof task_params);
4284 }
4285 }
4286}
4287
4288public task_to_team( Params[] )
4289{
4290 new id = Params[0];
4291 new team = Params[1];
4292 if(is_user_connected(id))
4293 {
4294 if(is_user_alive(id))
4295 user_kill(id, 0)
4296 if(get_user_team(id) != team)
4297 {
4298 rg_set_user_team(id, team);
4299 }
4300 }
4301}
4302
4303
4304public SaveState(id)
4305{
4306 new temp_array[SaveData];
4307 temp_array[save_team] = get_user_team(id);
4308 get_user_authid(id, temp_array[SteamID], 31);
4309 pev(id, pev_origin, temp_array[Origin]);
4310 pev(id, pev_velocity, temp_array[Velocity]);
4311 pev(id, pev_v_angle, temp_array[Angles]);
4312 if(is_user_alive(id))
4313 temp_array[health] = get_user_health(id);
4314 else
4315 temp_array[health] = 0;
4316
4317 new clip,ammo
4318 get_user_ammo(id,CSW_FLASHBANG,clip,ammo);
4319 temp_array[flashnum] = ammo;
4320 get_user_ammo(id,CSW_SMOKEGRENADE,clip,ammo);
4321 temp_array[smokenum] = ammo;
4322 ArrayPushArray(SavedState, temp_array);
4323}
4324
4325public LoadState(id, temp_array[SaveData])
4326{
4327 rg_remove_all_items(id);
4328 Timer(id, SavedTime);
4329 rg_set_user_footsteps(id, true);
4330
4331 set_pev(id, pev_origin, temp_array[Origin]);
4332 set_pev(id, pev_velocity, temp_array[Velocity]);
4333 set_pev(id, pev_angles, temp_array[Angles]);
4334 set_pev(id, pev_fixangle, 1);
4335 if(temp_array[health])
4336 fm_set_user_health(id, temp_array[health]);
4337 else if(is_user_alive(id))
4338 {
4339 user_silentkill(id);
4340 }
4341
4342 rg_give_item(id, "weapon_knife")
4343 if(temp_array[smokenum])
4344 {
4345 rg_give_item( id, "weapon_flashbang" );
4346 rg_set_user_bpammo( id, WEAPON_FLASHBANG, temp_array[flashnum] );
4347 }
4348 if(temp_array[smokenum])
4349 {
4350 rg_give_item( id, "weapon_smokegrenade" );
4351 rg_set_user_bpammo( id, WEAPON_SMOKEGRENADE, temp_array[smokenum] );
4352 }
4353 ArrayPushArray(SavedState, temp_array);
4354}
4355
4356public cmdsavegame(id)
4357{
4358 if(!(get_user_flags(id) & rnr_ACESS))
4359 return PLUGIN_HANDLED;
4360
4361 if(g_CurrentMode != e_gMix)
4362 {
4363 client_print_color(id, id, "%s Game state can be ^4saved ^1only on live match.", rnr_tag);
4364 return PLUGIN_HANDLED;
4365 }
4366
4367 new bool:exists = true;
4368 static temp_array[SaveData];
4369 while(exists)
4370 {
4371 exists = false;
4372 new isize = ArraySize(SavedState)
4373 for(new i = 0; i < isize; i++)
4374 {
4375 ArrayGetArray(SavedState, i, temp_array);
4376 if(find_player("c", temp_array[SteamID]))
4377 {
4378 exists = true;
4379 ArrayDeleteItem(SavedState, i);
4380 break;
4381 }
4382 }
4383 }
4384 GameSaved = true;
4385
4386 new players[MAX_PLAYERS], pnum;
4387 get_players(players, pnum);
4388
4389 SavedTime = (get_cvar_num("mp_roundtime")*60)-floatround(get_gametime()-StartRoundTime);
4390
4391 for(new i = 0; i < pnum; i++ )
4392 {
4393 new plr = players[i];
4394 if(get_user_team(plr) == 1 || get_user_team(plr) == 2)
4395 SaveState(plr);
4396 else
4397 continue;
4398 }
4399 new szName[128]
4400 get_user_name(id, szName, charsmax(szName))
4401 client_print_color(0, id, "%s ^3%s ^4saved gamestate!", rnr_tag, szName);
4402
4403 return PLUGIN_HANDLED;
4404}
4405
4406public cmdloadgame(id)
4407{
4408 if(!(get_user_flags(id) & rnr_ACESS))
4409 return PLUGIN_HANDLED;
4410
4411 if(!GameSaved)
4412 {
4413 client_print_color(id, id, "%s Nothing to load... (^4Game was not saved^1)", rnr_tag);
4414 return PLUGIN_HANDLED;
4415 }
4416
4417 if(task_exists(71234))
4418 remove_task(71234);
4419
4420 SavedFreezeTime = get_cvar_num("mp_freezetime");
4421 RestartRound();
4422 server_cmd("mp_freezetime 0");
4423 set_task(2.0, "loadgame", 71234);
4424 new szName[128]
4425 get_user_name(id, szName, charsmax(szName))
4426 client_print_color(0, id, "%s ^3%s ^4loaded ^1saved game!", rnr_tag, szName);
4427
4428 return PLUGIN_HANDLED;
4429}
4430public loadgame()
4431{
4432 new players[MAX_PLAYERS], pnum;
4433 get_players(players, pnum);
4434 server_cmd("mp_freezetime %d", SavedFreezeTime);
4435 loadgamefunc(1);
4436
4437 for(new i = 0; i < pnum; i++ )
4438 {
4439 new id = players[i];
4440 if(get_user_team(id) == 1 || get_user_team(id) == 2)
4441 {
4442 Timer(id, 10);
4443 set_user_freeze(id, 1);
4444 }
4445 }
4446
4447 set_task(10.0, "loadgamefunc", 0);
4448
4449
4450
4451 return PLUGIN_HANDLED;
4452}
4453
4454public loadgamefunc(preload)
4455{
4456 if(task_exists(ROUNDENDTASK))
4457 remove_task(ROUNDENDTASK);
4458
4459 if(!preload)
4460 set_task(float(SavedTime), "TerroristWin", ROUNDENDTASK);
4461 new players[MAX_PLAYERS], pnum, anum;
4462 get_players(players, anum, "a");
4463 get_players(players, pnum);
4464 new bool:found[MAX_PLAYERS+1], foundnum;
4465 static sz_steam[32]
4466 static temp_array[SaveData];
4467 new isize = ArraySize(SavedState)
4468 for(new i = 0; i < pnum; i++ )
4469 {
4470 new id = players[i];
4471 if(get_user_team(id) != 1 && get_user_team(id) != 2)
4472 continue;
4473
4474 set_user_freeze(id, 0);
4475 get_user_authid(id, sz_steam, 31);
4476 for(new i = 0; i < isize; i++)
4477 {
4478 ArrayGetArray(SavedState, i, temp_array);
4479 if(equal(temp_array[SteamID], sz_steam))
4480 {
4481 LoadState(id, temp_array);
4482 found[id] = true;
4483 foundnum++;
4484 break;
4485 }
4486 }
4487 /*client_print(0, print_chat, "%d", index);
4488 if(index != -1)
4489 {
4490 ArrayGetArray(SavedState, index, temp_array);
4491 LoadState(id, temp_array);
4492 found[id] = true;
4493 foundnum++;
4494 }*/
4495 }
4496 if(foundnum < anum)
4497 {
4498 for(new i = 0; i < isize; i++)
4499 {
4500 if(foundnum >= anum)
4501 break;
4502
4503 ArrayGetArray(SavedState, i, temp_array);
4504 if(find_player("c", temp_array[SteamID]))
4505 continue
4506 else
4507 {
4508 for(new i = 0; i < pnum; i++ )
4509 {
4510 new id = players[i];
4511 if(found[id])
4512 break;
4513 else if(temp_array[save_team] == get_user_team(id))
4514 {
4515 found[id] = true;
4516 LoadState(id, temp_array);
4517 foundnum++;
4518 }
4519 }
4520 }
4521 }
4522 }
4523}
4524
4525
4526stock set_user_freeze(client,freeze){
4527 new iFlag = pev(client,pev_flags);
4528 set_pev(client,pev_flags,freeze ? iFlag | FL_FROZEN : iFlag & ~FL_FROZEN);
4529}
4530
4531
4532public Timer(id, Time)
4533{
4534 message_begin(MSG_ONE, g_msg_showtimer, _, id)
4535 message_end()
4536
4537 message_begin(MSG_ONE, g_msg_roundtime, _, id)
4538 write_short(Time+1)
4539 message_end()
4540}
4541
4542
4543#if defined USE_PTS
4544public bool:CalcPTS(id, new_pts[3])
4545{
4546 #if defined CALCULATE_PTS
4547 new opos_team;
4548 new pnum[2];
4549 if(get_user_team(id) == 1)
4550 opos_team = 2;
4551 else if (get_user_team(id) == 2)
4552 opos_team = 1;
4553 else
4554 return false;
4555
4556 new sumranks[2];
4557 for(new i = 1; i <= g_iMaxPlayers; i++)
4558 {
4559 if(!is_user_connected(i))
4560 continue;
4561
4562 if(get_user_team(i) == opos_team)
4563 {
4564 sumranks[0] += iRank[i];
4565 pnum[0]++;
4566 }
4567 else if(get_user_team(id) == get_user_team(i))
4568 {
4569 sumranks[1] += iRank[i];
4570 pnum[1]++;
4571 }
4572 }
4573 if(!pnum[0] || !pnum[1])
4574 return false;
4575
4576 new Float:enemyaverage_rank = sumranks[0]/(1.0*pnum[0]);
4577 new Float:teamaverage_rank = sumranks[1]/(1.0*pnum[1]);
4578
4579 new_pts[1] = floatround((enemyaverage_rank/teamaverage_rank) * DEF_RATIO);
4580 new_pts[0] = -floatround((teamaverage_rank/enemyaverage_rank * DEF_RATIO));
4581 new_pts[2] = new_pts[1]/2;
4582 #else
4583 new_pts[1] = PTS_WIN;
4584 new_pts[0] = PTS_LOSE;
4585 new_pts[2] = PTS_DRAW;
4586 #endif
4587 return true;
4588}
4589
4590/* PTS */
4591
4592public MySql_Init()
4593{
4594 g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
4595
4596 // ok, we're ready to connect
4597 new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
4598 if(SqlConnection == Empty_Handle)
4599 // stop the plugin with an error message
4600 set_fail_state(g_Error)
4601
4602 new Handle:Queries
4603 // we must now prepare some random queries
4604 Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `steamid` varchar(32) NOT NULL, `user_name` varchar(72) NOT NULL, `pts` INT(11) NOT NULL, `total` INT(11) NOT NULL, `win` INT(11) NOT NULL, `loss` INT(11) NOT NULL, `draw` INT(11) NOT NULL, `leav` INT(11) NOT NULL)", Table);
4605
4606 if(!SQL_Execute(Queries))
4607 {
4608 // if there were any problems the plugin will set itself to bad load.
4609 SQL_QueryError(Queries,g_Error,charsmax(g_Error))
4610 set_fail_state(g_Error)
4611
4612 }
4613
4614 // Free the querie
4615 SQL_FreeHandle(Queries)
4616
4617 // you free everything with SQL_FreeHandle
4618 SQL_FreeHandle(SqlConnection)
4619
4620}
4621
4622public QueryHandle(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
4623{
4624 if( iFailState != TQUERY_SUCCESS )
4625 {
4626 log_amx("SQL Error #%d - %s", iErrnum, szError)
4627
4628
4629 }
4630
4631 return PLUGIN_CONTINUE
4632}
4633
4634public Load_MySql(id)
4635{
4636 new szSteamId[32], szTemp[512]
4637 get_user_authid(id, szSteamId, charsmax(szSteamId))
4638
4639 new Data[1]
4640 Data[0] = id
4641
4642//we will now select from the table `tutorial` where the steamid match
4643 format(szTemp,charsmax(szTemp),"SELECT * FROM `%s` WHERE (`%s`.`steamid` = '%s')", Table,Table, szSteamId)
4644 SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
4645}
4646
4647public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
4648{
4649 if(FailState == TQUERY_CONNECT_FAILED)
4650 {
4651 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
4652 }
4653 else if(FailState == TQUERY_QUERY_FAILED)
4654 {
4655 log_amx("Load Query failed. [%d] %s", Errcode, Error)
4656 }
4657
4658 new id
4659 id = Data[0]
4660
4661 if(SQL_NumResults(Query) < 1)
4662 {
4663 //.if there are no results found
4664
4665 new szSteamId[32], szNickName[SECURE_NAME_LEN]
4666 get_user_authid(id, szSteamId, charsmax(szSteamId)) // get user's steamid
4667 get_user_name(id, szNickName, charsmax(szNickName))
4668 // if its still pending we can't do anything with it
4669 if (equal(szSteamId,"ID_PENDING"))
4670 return PLUGIN_HANDLED
4671
4672 new szTemp[512]
4673
4674 // now we will insturt the values into our table.
4675 GetSecureName(szNickName)
4676 format(szTemp,charsmax(szTemp),"INSERT INTO `%s` ( `steamid` ,`user_name`, `pts`)VALUES ('%s','%s','1000');",Table,szSteamId,szNickName)
4677 iPts[id] = 1000;
4678 iRank[id] = CalcRank(id);
4679 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",szTemp)
4680 }
4681 else
4682 {
4683 // if there are results found
4684 iPts[id] = SQL_ReadResult(Query, 3)
4685 iRank[id] = CalcRank(id);
4686 }
4687
4688 return PLUGIN_HANDLED
4689}
4690
4691public Save_MySql(id)
4692{
4693 new szSteamId[32], szNickName[SECURE_NAME_LEN], szTemp[512]
4694 get_user_name(id, szNickName, charsmax(szNickName))
4695 get_user_authid(id, szSteamId, charsmax(szSteamId)) // get user's steamid
4696 GetSecureName(szNickName)
4697// Here we will update the user hes information in the database where the steamid matches.
4698 format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `user_name` = '%s' WHERE `%s`.`steamid` = '%s';",Table,szNickName,Table, szSteamId)
4699 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",szTemp)
4700
4701}
4702
4703public SetPts(id, status)
4704{
4705 new authid[64]
4706 get_user_authid(id, authid, 63)
4707 new szTemp[512]
4708 new pts[3], draw, win, loss, Points
4709 CalcPTS(id, pts);
4710 switch( status )
4711 {
4712 case 0:
4713 {
4714 Points = pts[2]
4715 draw = 1
4716 win = 0
4717 loss = 0
4718 }
4719 case 1:
4720 {
4721 Points = pts[1]
4722 loss = 0
4723 win = 1
4724 draw = 0
4725 }
4726 case 2:
4727 {
4728 Points = pts[0]
4729 loss = 1
4730 win = 0
4731 draw = 0
4732 }
4733 }
4734
4735 new time_date[32]
4736 get_time("%d-%m-%Y_%H-%M",time_date,31)
4737
4738 new sz_name[64]
4739 get_user_name(id, sz_name, 63);
4740 log_amx("%s | %s = %d Points",time_date, sz_name, Points);
4741 format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `pts` = `pts` + %d, `total` = `total` + 1,`win` = `win` + %d,`loss` = `loss` + %d,`draw` = `draw` + %d WHERE `%s`.`steamid` = '%s'",Table,Points,win,loss,draw, Table,authid)
4742 SQL_ThreadQuery(g_SqlTuple,"QueryHandle",szTemp)
4743}
4744
4745public Show_Top(id) {
4746 new website[128];
4747
4748 new motd[256];
4749
4750 formatex(motd, sizeof(motd) - 1,\
4751 "<html><head><meta http-equiv=^"Refresh^" content=^"0;url=https://imm-hns.myarena.site/pts/^"></head><body><p><center>LOADING...</center></p></body></html>",\
4752 website);
4753
4754 show_motd(id, motd);
4755
4756 return PLUGIN_HANDLED
4757}
4758
4759public CmdRank(id, target) {
4760 new Data[2]; Data[0] = id, Data[1] = target;
4761
4762 new szTemp[512]
4763 format(szTemp,charsmax(szTemp),"SELECT COUNT(*) FROM `%s` WHERE `pts` >= %i", Table,iPts[target])
4764 SQL_ThreadQuery(g_SqlTuple, "Sql_Rank", szTemp, Data, sizeof(Data))
4765 return PLUGIN_CONTINUE
4766}
4767
4768public Sql_Rank(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
4769
4770 if(FailState == TQUERY_CONNECT_FAILED)
4771 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
4772 else if(FailState == TQUERY_QUERY_FAILED)
4773 log_amx("Load Query failed. [%d] %s", Errcode, Error)
4774
4775 new count = 0;
4776 count = SQL_ReadResult(Query,0);
4777 if(count == 0)
4778 count = 1
4779
4780 new id, target
4781 id = Data[0]
4782 target = Data[1];
4783
4784 new szName[32];
4785
4786 if(id == target)
4787 get_user_name(id, szName, charsmax(szName));
4788 else
4789 get_user_name(target, szName, charsmax(szName));
4790
4791 client_print_color(id, print_team_blue, "%s ^3%s^1 %s rank is ^4%i^1 with ^4%i ^1points", rnr_tag, szName, (id == target) ? "your" : "", count, iPts[target])
4792
4793 return PLUGIN_HANDLED
4794}
4795
4796public CmdBalance(id)
4797{
4798 new ctnum, ttnum, ctrank, ttrank;
4799 for(new i = 1; i <= g_iMaxPlayers; i++)
4800 {
4801 if(!is_user_connected(i))
4802 continue
4803
4804 if(get_user_team(i) == 1)
4805 {
4806 ttnum++
4807 ttrank += iPts[i];
4808 }
4809 if(get_user_team(i) == 2)
4810 {
4811 ctnum++
4812 ctrank += iPts[i];
4813 }
4814 }
4815
4816 if(ttnum && ctnum)
4817 client_print_color(id, print_team_blue, "%s CTs' average PTS ^3%d^1 vs ^3%d^1 TTs' average PTS", rnr_tag, ctrank/ctnum, ttrank/ttnum)
4818}
4819
4820public CmdPrognoz(id)
4821{
4822 new pts[3];
4823 CalcPTS(id, pts);
4824 client_print_color(id, print_team_blue, "%s PTS if winning: ^3%d^1, losing: ^3%d^1, draw: ^3%d^1", rnr_tag, pts[1], pts[0], pts[2])
4825}
4826
4827public CalcRank(id)
4828{
4829 if(iPts[id] > 0)
4830 if(floatround(iPts[id] / 500.0, floatround_ceil) >= tierTOP)
4831 return tierTOP
4832 else
4833 return floatround(iPts[id] / 500.0, floatround_ceil)
4834
4835 return tierLOW;
4836}
4837
4838public MixFinished(status)
4839{
4840 new g_iReturn;
4841 ExecuteForward(iFwd_MixFinished, g_iReturn);
4842 LeaversScore(status);
4843 PrepareMode(e_gTraining)
4844 for( new i = 1; i <= g_iMaxPlayers; i++ ) {
4845 if( is_user_connected( i ) )
4846 {
4847 switch( rg_get_user_team( i ) )
4848 {
4849 case TEAM_TERRORIST:
4850 {
4851 switch(status)
4852 {
4853 case 0:
4854 {
4855 SetPts(i, 0)
4856 }
4857 case 1:
4858 {
4859 SetPts(i, 1)
4860 }
4861 case 2:
4862 {
4863 SetPts(i, 2)
4864 }
4865 }
4866 }
4867 case TEAM_CT:
4868 {
4869 switch(status)
4870 {
4871 case 0:
4872 {
4873 SetPts(i, 0)
4874 }
4875 case 1:
4876 {
4877 SetPts(i, 2)
4878 }
4879 case 2:
4880 {
4881 SetPts(i, 1)
4882 }
4883 }
4884 }
4885 }
4886 Load_MySql(i);
4887 }
4888 }
4889}
4890
4891
4892
4893public plugin_cfg()
4894{
4895 MySql_Init();
4896}
4897
4898
4899GetSecureName(name[SECURE_NAME_LEN])
4900{
4901 new secureName[SECURE_NAME_LEN];
4902 copy(secureName, charsmax(secureName), name);
4903
4904 //replace_all(secureName, charsmax(secureName), "\", " \\");
4905 replace_all(secureName, charsmax(secureName), "`", "\`");
4906 replace_all(secureName, charsmax(secureName), "'", "\'");
4907
4908 copy(name, charsmax(name), secureName);
4909}
4910
4911#endif
4912
4913public plugin_end() {
4914 #if defined USE_PTS
4915 if(g_SqlTuple) {
4916 SQL_FreeHandle(g_SqlTuple)
4917 }
4918 #endif
4919 if(iFwd_MixFinished)
4920 DestroyForward(iFwd_MixFinished);
4921}
4922
4923
4924/*public ach_add_progress(id, ach)
4925{
4926
4927}*/
4928
4929stock rg_set_user_godmode(index, godmode = 0) {
4930 set_entvar(index, var_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
4931
4932 return 1;
4933}
4934
4935public fnConvertTime( Float:time, convert_time[], len )
4936{
4937 new sTemp[24];
4938 new Float:fSeconds = time, iMinutes;
4939
4940 iMinutes = floatround( fSeconds / 60.0, floatround_floor );
4941 fSeconds -= iMinutes * 60.0;
4942 new intpart = floatround( fSeconds, floatround_floor );
4943 new Float:decpart = (fSeconds - intpart) * 100.0;
4944 intpart = floatround( decpart );
4945
4946 formatex( sTemp, charsmax( sTemp ), "%02i:%02.0f.%d", iMinutes, fSeconds, intpart );
4947
4948
4949 formatex( convert_time, len, sTemp );
4950
4951 return(PLUGIN_HANDLED);
4952}