Advertisement
Guest User

Untitled

a guest
Feb 15th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 90.29 KB | None | 0 0
  1. //* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <cstrike>
  6. #include <hamsandwich>
  7. #include <fakemeta_util>
  8. #include <fun>
  9. #include <engine>
  10. #include <player_settings_saver>
  11. //#include <roundcontrol>
  12.  
  13. #if AMXX_VERSION_NUM < 183
  14. #include <dhudmessage>
  15. #define client_disconnected client_disconnect
  16. #endif
  17.  
  18. #define PLUGIN_HOST "127.0.0.1"
  19.  
  20. #define PLUGIN "rnr Match System"
  21. #define VERSION "DEV"
  22. #define AUTHOR "Garey & Medusa"
  23.  
  24. #define FASTLEAVETIMER 300.0
  25.  
  26. #define rnr_ACESS ADMIN_LEVEL_F // flag "r"
  27.  
  28. #define m_bJustConnected 480
  29. #define MAX_PLAYERS 32
  30. #define SETTING_KNIFES "KNIFE"
  31. #define SETTING_EMITSOUND "EMITSOUND"
  32. #define SECURE_NAME_LEN 31 * 2 + 1 // Twice as long as name (31 * 2 + zero terminator) in case all 31 characters are insecure
  33. new Float:g_flRoundTime
  34. new g_Captime;
  35. new bool:SoundFx;
  36. new bool:Survival
  37. new bool:GameStarted;
  38. new iCurrentSW
  39. new Float:flSidesTime[2];
  40. new Float:PlayNoPlay[33];
  41. new g_pRoundTime;
  42. new g_bShowSpeed[33 char];
  43. new Float:RingWidth
  44. new bool:SlowMo;
  45. new RoundControlHook:g_pCheckWinHook;
  46.  
  47. enum _:SaveData
  48. {
  49. save_team,
  50. SteamID[32],
  51. Float:Origin[3],
  52. Float:Velocity[3],
  53. Float:Angles[3],
  54. health,
  55. Flags,
  56. flashnum,
  57. smokenum
  58. }
  59.  
  60. new Array:SavedState;
  61.  
  62. new bool:GameSaved;
  63. new bool:CaptainSort;
  64. new CaptainSide;
  65. new Captain1;
  66. new Captain2;
  67. new CaptainWinner;
  68.  
  69. new Float:StartRoundTime;
  70. new SavedTime;
  71. new SavedFreezeTime;
  72. #define TIME 15
  73. #define TASK_MENUCLOSE 9001
  74. #define TASK_PLAYERSLIST 9002
  75. #define ROUNDENDTASK 10003
  76. #define RINGTASK 10004
  77. #define LEAVERTASK 20004
  78. enum
  79. {
  80. e_gTraining = 0,
  81. e_gCaptain,
  82. e_gPaused,
  83. e_gKnife,
  84. e_gMix,
  85. e_gPub
  86. }
  87.  
  88. enum
  89. {
  90. mode_mr,
  91. mode_timebased,
  92. mode_winter
  93. }
  94.  
  95. new current_mode;
  96. new gmsgMoney;
  97.  
  98. new const g_szDefaultEntities[][] = {
  99. "func_hostage_rescue",
  100. "info_hostage_rescue",
  101. "func_bomb_target",
  102. "info_bomb_target",
  103. "hostage_entity",
  104. "info_vip_start",
  105. "func_vip_safetyzone",
  106. "func_escapezone",
  107. "armoury_entity",
  108. "monster_scentist"
  109. }
  110.  
  111. new ring_cvar;
  112. new g_iGiveNadesTo;
  113. new const snd_denyselect[] = "common/wpn_denyselect.wav";
  114. new const g_szUseSound[] = "buttons/blip1.wav";
  115.  
  116. new const g_szNewNadesMenu[] = "\rNew nades?^n^n\r1. \wYes^n\r2. \wNo";
  117. /* rnr_Hook_Integration */
  118. new bool:rnr_hooked[32]
  119. new hookorigin[32][3]
  120. /* /rnr_Hook_Integration */
  121.  
  122.  
  123. static const knifemodel[] = "models/v_knife.mdl"
  124. new alloc_KnifeModel;
  125.  
  126. const m_pPlayer = 41;
  127. new bool:gOnOff[33];
  128. new bool:gEmitSound[33];
  129. const EXTRAOFFSET_WEAPONS = 4;
  130. const m_flNextPrimaryAttack = 46;
  131. const m_flNextSecondaryAttack = 47;
  132.  
  133. new const rnr_tag[7] = "ProHNS"
  134. new HamHook:Player_Killed_Pre;
  135. new Float:gCheckpoints[MAX_PLAYERS+1][2][3];
  136.  
  137. new g_CurrentMode
  138. new g_iScore[2]
  139. new g_iSecondHalf
  140. new g_iMaxPlayers
  141.  
  142. new bool:g_bFreezePeriod
  143. new bool:g_bCheckpointAlternate[MAX_PLAYERS+1];
  144. new bool:g_bLastFlash
  145. new bool:ishooked[MAX_PLAYERS+1];
  146. new bool:plr_noplay[MAX_PLAYERS+1];
  147.  
  148. new Sbeam = 0
  149. new bool:g_Spec[MAX_PLAYERS+1];
  150. new hDeath[MAX_PLAYERS+1], CsTeams:hTeam[MAX_PLAYERS+1];
  151.  
  152. new cvarTeam[2]
  153. new cvarMaxRounds
  154. new cvarFlashNum
  155. new cvarSmokeNum
  156. new cvarSemiclip
  157. new cvarDefaultMode
  158.  
  159. new g_iHostageEnt, g_iRegisterSpawn
  160. new m_spriteTexture;
  161. new SyncHud[2]
  162.  
  163. public plugin_precache() {
  164.  
  165. m_spriteTexture = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr");
  166.  
  167.  
  168. engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone"));
  169. g_iRegisterSpawn = register_forward(FM_Spawn, "fwdSpawn", 1)
  170. precache_sound( g_szUseSound );
  171. Sbeam = precache_model("sprites/laserbeam.spr");
  172. /*
  173. for(new i = 0; i < sizeof g_szLoadingSounds; i++)
  174. {
  175. precache_sound(g_szLoadingSounds[i]);
  176. }
  177.  
  178. for(new i = 0; i < sizeof g_szSwitchSounds; i++)
  179. {
  180. precache_sound(g_szSwitchSounds[i]);
  181. }
  182.  
  183. for(new i = 0; i < sizeof g_szDrawSounds; i++)
  184. {
  185. precache_sound(g_szDrawSounds[i]);
  186. }
  187.  
  188. for(new i = 0; i < sizeof g_szLoseSounds; i++)
  189. {
  190. precache_sound(g_szLoseSounds[i]);
  191. }
  192.  
  193.  
  194. for(new i = 0; i < sizeof g_szWinSounds; i++)
  195. {
  196. precache_sound(g_szWinSounds[i]);
  197. }
  198. */
  199. }
  200.  
  201. new g_msgScreenFade;
  202. new g_msg_showtimer
  203. new g_msg_roundtime
  204.  
  205. new iFwd_MixFinished
  206.  
  207.  
  208. public plugin_init() {
  209. register_plugin(PLUGIN, VERSION, AUTHOR)
  210. //OrpheuRegisterHook(OrpheuGetFunction("PM_Move"),"OnPM_move");
  211.  
  212. g_pRoundTime = get_cvar_pointer( "mp_roundtime" );
  213. iFwd_MixFinished = CreateMultiForward("MixFinished_Fwd", ET_IGNORE);
  214. SavedState = ArrayCreate(SaveData);
  215. register_clcmd("say", "sayHandle");
  216.  
  217. g_Captime = register_cvar( "hns_wintime", "20");
  218.  
  219. /* Mode */
  220. register_concmd("say /pub", "rnr_pub", rnr_ACESS)
  221. register_concmd("say /def", "rnr_pub_off", rnr_ACESS)
  222.  
  223. /* Settings Commands*/
  224. register_concmd("say /skill", "rnr_skill", rnr_ACESS )
  225. register_concmd("say /boost", "rnr_boost", rnr_ACESS )
  226. register_concmd("say /aa10", "rnr_aa10", rnr_ACESS )
  227. register_concmd("say /aa100", "rnr_aa100", rnr_ACESS )
  228. register_concmd("say /mr5", "rnr_mr5", rnr_ACESS )
  229. register_concmd("say /mr7", "rnr_mr7", rnr_ACESS )
  230. register_concmd("say /mr9", "rnr_mr9", rnr_ACESS )
  231.  
  232. register_clcmd( "say /rr", "CmdRestartRound", rnr_ACESS )
  233. register_clcmd( "say /swap", "rnr_swap_teams", rnr_ACESS)
  234.  
  235. /* rnr_Hook_Integration */
  236. register_clcmd("+hook","rnr_hook_on")
  237. register_clcmd("-hook","rnr_hook_off")
  238.  
  239. /* HideNSeek Commands */
  240. register_clcmd ( "say /knife", "cmdShowKnife");
  241. register_clcmd ( "say /showknife", "cmdShowKnife");
  242. register_clcmd ( "say /hideknife", "cmdShowKnife");
  243.  
  244. /* Pause / UnPause */
  245. register_clcmd( "say /pause", "rnr_startpause", rnr_ACESS );
  246. //register_clcmd( "say /live", "rnr_unpause", rnr_ACESS );
  247.  
  248. //register_clcmd ( "nightvision", "rnr_mix_menu", rnr_ACESS )
  249. register_clcmd ( "say /mix", "rnr_mix_menu", rnr_ACESS )
  250. register_clcmd ( "say /mr", "rnr_mr_menu", rnr_ACESS )
  251. register_clcmd ( "say /aa", "rnr_aa_menu", rnr_ACESS )
  252. register_clcmd ( "say /type", "rnr_semi_menu", rnr_ACESS )
  253. register_clcmd ( "say /trans", "rnr_trans_menu", rnr_ACESS )
  254. register_clcmd ( "say /mode", "rnr_mode_menu", rnr_ACESS )
  255.  
  256. register_clcmd( "chooseteam", "BlockCmd" ); /* block cmd case team completed */
  257. register_clcmd( "jointeam", "BlockCmd" );
  258. register_clcmd( "joinclass", "BlockCmd" );
  259.  
  260. fnRegisterSayCmd("timer", "timermod", "rnr_timer", rnr_ACESS, "Timer mode");
  261. fnRegisterSayCmd("normal", "normalmod", "rnr_normal", rnr_ACESS, "Normal mode");
  262. fnRegisterSayCmd("winter", "wintt", "rnr_wintt", rnr_ACESS, "Normal mode");
  263. fnRegisterSayCmd("specall", "specall", "rnr_transfer_spec", rnr_ACESS, "Spec Transfer")
  264. fnRegisterSayCmd("ttall", "ttall", "rnr_transfer_tt", rnr_ACESS, "TT Transfer")
  265. fnRegisterSayCmd("ctall", "ctall", "rnr_transfer_ct", rnr_ACESS, "CT Transfer")
  266. fnRegisterSayCmd("score", "s", "Score", 0, "Starts Round")
  267. fnRegisterSayCmd("startmix", "start", "cmdStartRound", rnr_ACESS, "Starts Round");
  268. fnRegisterSayCmd("kniferound", "kf", "cmdKnifeRound", rnr_ACESS, "Knife Round");
  269. fnRegisterSayCmd("captain", "cap", "CaptainCmd", rnr_ACESS, "Captain Mode");
  270. fnRegisterSayCmd("stopcaptain", "stopcap", "StopCaptainCmd", rnr_ACESS, "Captain Mode");
  271. fnRegisterSayCmd("stop", "stop", "cmdStop", rnr_ACESS, "Stop Current Mode");
  272. fnRegisterSayCmd("live", "unpause", "rnr_unpause", rnr_ACESS, "UnPause");
  273. fnRegisterSayCmd("checkpoint", "cp", "cmdCheckpoint", 0, "Save checkpoint");
  274. fnRegisterSayCmd("savegame", "sg", "cmdsavegame", rnr_ACESS, "Save game");
  275. fnRegisterSayCmd("loadgame", "lg", "cmdloadgame", rnr_ACESS, "Load saved game");
  276. fnRegisterSayCmd("gocheck", "gc", "cmdGoCheck", 0, "Go to checkpoint");
  277. fnRegisterSayCmd("teleport", "tp", "cmdGoCheck", 0, "Go to checkpoint");
  278. fnRegisterSayCmd("pick", "pick", "captain_menu", 0, "Pick player");
  279. fnRegisterSayCmd( "back", "spec", "team_spec", 0, "Spec/Back player");
  280. //fnRegisterSayCmd("myrank", "rank", "CmdRank", 0, "Starts Round")
  281. //fnRegisterSayCmd("newpts", "npts", "CmdPrognoz", 0, "New Pts")
  282. //fnRegisterSayCmd("b", "balance", "CmdBalance", 0, "Balance Pts")
  283. fnRegisterSayCmd("np", "noplay", "CmdNoPlay", 0, "No play")
  284. fnRegisterSayCmd("ip", "play", "CmdPlay", 0, "Play play")
  285. //fnRegisterSayCmd("dontcap", "nocap", "CmdNoCaptain", 0, "Balance Pts")
  286. //fnRegisterSayCmd("pts", "top", "Show_Top", 0, "Show Top")
  287.  
  288. alloc_KnifeModel = engfunc(EngFunc_AllocString, knifemodel)
  289.  
  290. ring_cvar = register_cvar("rnr_ring", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
  291. cvarTeam[0] = register_cvar("rnr_team1", "Blue", FCVAR_ARCHIVE|FCVAR_SERVER)
  292. cvarTeam[1] = register_cvar("rnr_team2", "Red", FCVAR_ARCHIVE|FCVAR_SERVER)
  293. cvarFlashNum = register_cvar("rnr_flash", "2", FCVAR_ARCHIVE|FCVAR_SERVER)
  294. cvarSmokeNum = register_cvar("rnr_smoke", "1", FCVAR_ARCHIVE|FCVAR_SERVER)
  295. cvarMaxRounds = register_cvar("rnr_rounds", "6", FCVAR_ARCHIVE|FCVAR_SERVER)
  296. cvarSemiclip = register_cvar("rnr_semiclip", "0", FCVAR_ARCHIVE|FCVAR_SERVER)
  297. cvarDefaultMode = register_cvar("rnr_defaultmode", "0", FCVAR_ARCHIVE|FCVAR_SERVER)
  298. register_event("CurWeapon", "eCurWeapon", "be", "1!0")
  299. //gisterControl( RC_RoundEnd, "eEndRound", 0 );
  300. register_event("SendAudio","eEndRound","a","2=%!MRAD_terwin","2=%!MRAD_ctwin")
  301. register_event("HLTV", "ePreFT", "a", "1=0", "2=0") // Detect freezetime started
  302. register_logevent("ePostFT", 2, "0=World triggered", "1=Round_Start") // Detect freezetime ended
  303.  
  304. Player_Killed_Pre = RegisterHam( Ham_Killed, "player", "fwd_PlayerKilled_Pre", 0 );
  305. RegisterHam( Ham_Spawn, "player", "CBasePlayer_Spawn_Post", true)
  306. RegisterHam( Ham_Item_Deploy, "weapon_knife", "FwdDeployKnife", 1 )
  307. RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_knife", "FwdKnifePrim" );
  308. register_forward(FM_Voice_SetClientListening, "Forward_SetClientListening");
  309. register_forward( FM_EmitSound, "fwd_EmitSound_Pre", 0 );
  310.  
  311. unregister_forward(FM_Spawn, g_iRegisterSpawn, 1)
  312. register_forward(FM_PlayerPreThink, "preThink")
  313. register_forward(FM_PlayerPostThink, "postThink")
  314.  
  315. register_forward(FM_AddToFullPack, "addToFullPack", 1)
  316. register_menucmd( register_menuid( "NadesMenu" ), 3, "HandleNadesMenu" );
  317.  
  318. g_msg_showtimer = get_user_msgid("ShowTimer")
  319. g_msg_roundtime = get_user_msgid("RoundTime")
  320.  
  321. g_iMaxPlayers = get_maxplayers()
  322. SyncHud[0] = CreateHudSyncObj()
  323. SyncHud[1] = CreateHudSyncObj()
  324.  
  325. register_message( get_user_msgid( "ShowMenu" ), "message_show_menu" );
  326. register_message( get_user_msgid( "VGUIMenu" ), "message_vgui_menu" );
  327. g_msgScreenFade = get_user_msgid("ScreenFade");
  328. register_message( g_msgScreenFade, "msg_ScreenFade" );
  329. register_message( get_user_msgid( "TextMsg" ), "msgTextMsg" );
  330.  
  331. set_msg_block(get_user_msgid("HudTextArgs"),BLOCK_SET);
  332.  
  333. register_mode();
  334. ePreFT();
  335. PrepareMode(e_gPub);
  336.  
  337. set_msg_block(gmsgMoney = get_user_msgid("Money"), BLOCK_SET);
  338. set_task(0.1, "ShowSpeedAsMoney", 15671983, .flags="b");
  339.  
  340. if(!(get_pcvar_num(cvarDefaultMode)))
  341. {
  342. current_mode = mode_timebased
  343. }
  344. else
  345. {
  346. current_mode = mode_mr
  347. }
  348. }
  349.  
  350. public ClCmd_Speed(id)
  351. {
  352. g_bShowSpeed{id} = !g_bShowSpeed{id};
  353. }
  354.  
  355. public ShowSpeedAsMoney()
  356. {
  357. if(Survival)
  358. {
  359. static players[32], num, id
  360. get_players(players, num, "a");
  361. for(--num; num>=0; num--)
  362. {
  363. id = players[num];
  364. if( g_bShowSpeed{id} )
  365. {
  366. message_begin(MSG_ONE, gmsgMoney, .player=id);
  367. write_long( floatround((get_pcvar_float(g_Captime)*60.0)-flSidesTime[iCurrentSW], floatround_floor) );
  368. write_byte(0);
  369. message_end();
  370. }
  371. }
  372. }
  373. }
  374.  
  375. public rnr_timer(id)
  376. {
  377. if(!(get_user_flags(id) & rnr_ACESS))
  378. return PLUGIN_HANDLED;
  379.  
  380. if(g_CurrentMode == e_gTraining)
  381. {
  382. new sz_name[64]; get_user_name(id, sz_name, 63);
  383. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 changed mode to Time-Based.", rnr_tag, sz_name)
  384. current_mode = mode_timebased
  385. set_pcvar_num(cvarDefaultMode, 0);
  386. }
  387. else
  388. {
  389. client_print_color(id, id, "^1[^4%s^1] Mode cannot be changed during game!", rnr_tag);
  390. }
  391.  
  392. return PLUGIN_CONTINUE;
  393. }
  394.  
  395. public rnr_wintt(id)
  396. {
  397. if(!(get_user_flags(id) & rnr_ACESS))
  398. return PLUGIN_HANDLED;
  399.  
  400. if(g_CurrentMode == e_gTraining)
  401. {
  402. new sz_name[64]; get_user_name(id, sz_name, 63);
  403. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 changed mode to Win-Ter [3].", rnr_tag, sz_name)
  404. current_mode = mode_winter
  405. set_pcvar_num(cvarDefaultMode, 0);
  406. }
  407. else
  408. {
  409. client_print_color(id, id, "^1[^4%s^1] Mode cannot be changed during game!", rnr_tag);
  410. }
  411.  
  412. return PLUGIN_CONTINUE;
  413. }
  414.  
  415. public rnr_normal(id)
  416. {
  417. if(!(get_user_flags(id) & rnr_ACESS))
  418. return PLUGIN_HANDLED;
  419.  
  420. if(g_CurrentMode == e_gTraining)
  421. {
  422. new sz_name[64]; get_user_name(id, sz_name, 63);
  423. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 changed mode to Standart (MR).", rnr_tag, sz_name)
  424. current_mode = mode_mr
  425. set_pcvar_num(cvarDefaultMode, 1);
  426. }
  427. else
  428. {
  429. client_print_color(id, id, "^1[^4%s^1] Mode cannot be changed during game!", rnr_tag);
  430. }
  431.  
  432. return PLUGIN_CONTINUE;
  433. }
  434.  
  435. public CmdNoPlay(id)
  436. {
  437. if(get_gametime() > PlayNoPlay[id])
  438. if(!plr_noplay[id])
  439. {
  440. PlayNoPlay[id] = get_gametime()+60.0;
  441. plr_noplay[id] = true;
  442. new sz_name[64]; get_user_name(id, sz_name, 63);
  443. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 is ^3not available^1 for pick. (^3NOPLAY^1)", rnr_tag, sz_name)
  444. }
  445. }
  446.  
  447. public CmdPlay(id)
  448. {
  449. if(get_gametime() > PlayNoPlay[id])
  450. if(plr_noplay[id])
  451. {
  452. PlayNoPlay[id] = get_gametime()+60.0;
  453. plr_noplay[id] = false;
  454. new sz_name[64]; get_user_name(id, sz_name, 63);
  455. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 is now ^4available^1 for pick.", rnr_tag, sz_name);
  456. }
  457. }
  458.  
  459.  
  460. public sayHandle(id)
  461. {
  462. new szArgs[64];
  463. read_args(szArgs, charsmax(szArgs));
  464. remove_quotes(szArgs);
  465. trim(szArgs);
  466.  
  467. if ( !szArgs[0] )
  468. return PLUGIN_HANDLED;
  469.  
  470. if ( szArgs[0] != '/' )
  471. return PLUGIN_CONTINUE;
  472.  
  473.  
  474. //Command
  475. new szTarget[32];
  476.  
  477. parse(szArgs,\
  478. szArgs, charsmax(szArgs),\
  479. szTarget, charsmax(szTarget));
  480. if ( equali(szArgs, "/namett", 6) )
  481. {
  482. trim(szTarget);
  483.  
  484. if(!(get_user_flags(id) & rnr_ACESS))
  485. return PLUGIN_HANDLED;
  486.  
  487.  
  488. set_pcvar_string(cvarTeam[1], szTarget);
  489. new sz_name[64]; get_user_name(id, sz_name, 63);
  490. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 set name to %s", rnr_tag, sz_name, szTarget);
  491.  
  492. return PLUGIN_CONTINUE;
  493. }
  494. if ( equali(szArgs, "/namect", 6) )
  495. {
  496. trim(szTarget);
  497.  
  498. if(!(get_user_flags(id) & rnr_ACESS))
  499. return PLUGIN_HANDLED;
  500.  
  501.  
  502. set_pcvar_string(cvarTeam[0], szTarget);
  503. new sz_name[64]; get_user_name(id, sz_name, 63);
  504. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 set name to %s", rnr_tag, sz_name, szTarget);
  505.  
  506. return PLUGIN_CONTINUE;
  507. }
  508. if ( equali(szArgs, "/mr", 2) )
  509. {
  510. trim(szTarget);
  511.  
  512. if(!(get_user_flags(id) & rnr_ACESS))
  513. return PLUGIN_HANDLED;
  514.  
  515. if(is_str_num(szTarget))
  516. {
  517. set_pcvar_num(cvarMaxRounds, str_to_num(szTarget));
  518. new sz_name[64]; get_user_name(id, sz_name, 63);
  519. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 set mr to %d", rnr_tag, sz_name, str_to_num(szTarget));
  520. }
  521. return PLUGIN_CONTINUE;
  522. }
  523. if ( equali(szArgs, "/wintime", 7) )
  524. {
  525. trim(szTarget);
  526.  
  527. if(!(get_user_flags(id) & rnr_ACESS))
  528. return PLUGIN_HANDLED;
  529.  
  530. if(is_str_num(szTarget))
  531. {
  532. set_pcvar_num(g_Captime, str_to_num(szTarget));
  533. new sz_name[64]; get_user_name(id, sz_name, 63);
  534. client_print_color(0, print_team_red, "^1[^4%s^1] ^3%s^1 set wintime to %d minutes.", rnr_tag, sz_name, str_to_num(szTarget));
  535. }
  536. return PLUGIN_CONTINUE;
  537. }
  538.  
  539. if ( !equali(szArgs, "/rank", 4) )
  540. return PLUGIN_CONTINUE;
  541. //Command
  542.  
  543.  
  544. //Delay
  545. new Float:fCommandDelay = 5.0;
  546.  
  547. static Float:fCommandUsed[MAX_PLAYERS+1];
  548.  
  549. if ( fCommandUsed[id] > get_gametime() )
  550. {
  551. return PLUGIN_HANDLED;
  552. }
  553. //Delay
  554.  
  555. fCommandUsed[id] = get_gametime()+fCommandDelay;
  556. //Display
  557.  
  558.  
  559. return PLUGIN_CONTINUE;
  560. }
  561.  
  562. public msg_ScreenFade( iMsgId, iMsgDest, id )
  563. {
  564. if(is_user_connected(id))
  565. {
  566. if( get_msg_arg_int( 4 ) == 255 && get_msg_arg_int( 5 ) == 255 && get_msg_arg_int( 6 ) == 255)
  567. {
  568. if((cs_get_user_team(id) == CS_TEAM_T) || (cs_get_user_team(id) == CS_TEAM_SPECTATOR))
  569. {
  570. return PLUGIN_HANDLED;
  571. }
  572. }
  573. }
  574. return PLUGIN_CONTINUE;
  575. }
  576.  
  577. public message_show_menu( msgid, dest, id )
  578. {
  579. if ( !should_autojoin( id ) )
  580. return(PLUGIN_CONTINUE);
  581.  
  582. static team_select[] = "#Team_Select";
  583. static menu_text_code[sizeof team_select];
  584. get_msg_arg_string( 4, menu_text_code, sizeof menu_text_code - 1 );
  585. if ( !equal( menu_text_code, team_select ) )
  586. return(PLUGIN_CONTINUE);
  587.  
  588. set_force_team_join_task( id, msgid );
  589.  
  590. return(PLUGIN_HANDLED);
  591. }
  592.  
  593.  
  594. public message_vgui_menu( msgid, dest, id )
  595. {
  596. if ( get_msg_arg_int( 1 ) != 2 || !should_autojoin( id ) )
  597. return(PLUGIN_CONTINUE);
  598.  
  599. set_force_team_join_task( id, msgid );
  600.  
  601. return(PLUGIN_HANDLED);
  602. }
  603.  
  604.  
  605. bool:should_autojoin( id )
  606. {
  607. return(!get_user_team( id ) && !task_exists( id ) );
  608. }
  609.  
  610.  
  611. set_force_team_join_task( id, menu_msgid )
  612. {
  613. static param_menu_msgid[2];
  614. param_menu_msgid[0] = menu_msgid;
  615. set_task( 0.1, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid );
  616. }
  617.  
  618.  
  619. public task_force_team_join( menu_msgid[], id )
  620. {
  621. if ( get_user_team( id ) )
  622. return;
  623.  
  624. force_team_join( id, menu_msgid[0], "5", "5" );
  625. }
  626.  
  627.  
  628. stock force_team_join( id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0" )
  629. {
  630. static jointeam[] = "jointeam";
  631. if ( class[0] == '0' )
  632. {
  633. engclient_cmd( id, jointeam, team );
  634. return;
  635. }
  636.  
  637. static msg_block, joinclass[] = "joinclass";
  638. msg_block = get_msg_block( menu_msgid );
  639. set_msg_block( menu_msgid, BLOCK_SET );
  640. engclient_cmd( id, jointeam, team );
  641. engclient_cmd( id, joinclass, class );
  642. set_msg_block( menu_msgid, msg_block );
  643. respawn_player( id );
  644. }
  645.  
  646.  
  647. public respawn_player( id )
  648. {
  649. if ( is_user_connected( id ) )
  650. {
  651. /* Make the engine think he is spawning */
  652. set_pev( id, pev_deadflag, DEAD_RESPAWNABLE );
  653. set_pev( id, pev_iuser1, 0 );
  654. dllfunc( DLLFunc_Think, id );
  655.  
  656. /* Move his body so if corpse is created it is not in map */
  657. engfunc( EngFunc_SetOrigin, id, Float:{ -4800.0, -4800.0, -4800.0 } );
  658.  
  659. /* Actual Spawn */
  660. set_task(0.1, "spawnagain", id);
  661. }
  662. }
  663.  
  664. public spawnagain( id )
  665. {
  666. /* Make sure he didn't disconnect in the 0.5 seconds that have passed. */
  667. if ( is_user_connected( id ) )
  668. {
  669. new bool:SortTeams = false;
  670. /* Spawn player */
  671. if(g_CurrentMode != e_gPub)
  672. {
  673. spawn( id );
  674. dllfunc( DLLFunc_Spawn, id );
  675. }
  676. if((file_exists("addons/amxmodx/data/playerslist.ini")))
  677. {
  678. new szMap[64]
  679. get_mapname(szMap, 63);
  680. if(containi(szMap, "valkyrie") != -1)
  681. {
  682. SortTeams = false;
  683. }
  684. else
  685. {
  686. SortTeams = true;
  687. if(task_exists(92271))
  688. remove_task(92271)
  689.  
  690. set_task(5.0, "remove_file", 92271);
  691. }
  692. }
  693. if(( g_CurrentMode != e_gTraining && g_CurrentMode != e_gPub ) || SortTeams)
  694. {
  695. if(!CheckPlayer(id))
  696. {
  697. user_silentkill( id );
  698. cs_set_user_team( id, CS_TEAM_SPECTATOR );
  699. }
  700. else
  701. {
  702. spawn( id );
  703. dllfunc( DLLFunc_Spawn, id );
  704. }
  705. }
  706.  
  707.  
  708. /*
  709. * After 1.0 the player will be spawned fully and you can mess with the ent (give weapons etc)
  710. * set_task(1.0,"player_fully_spawned",id)
  711. */
  712. }
  713. }
  714. public remove_file( )
  715. {
  716. if(file_exists("addons/amxmodx/data/playerslist.ini"))
  717. delete_file("addons/amxmodx/data/playerslist.ini");
  718. }
  719.  
  720. public BlockCmd(id)
  721. {
  722. if ( g_CurrentMode != e_gTraining )
  723. {
  724. return(PLUGIN_HANDLED);
  725. }
  726. return(PLUGIN_CONTINUE);
  727. }
  728.  
  729. public msgTextMsg( const MsgId, const MsgDest, const MsgEntity )
  730. {
  731. static szMessage[ 9 ];
  732. get_msg_arg_string( 2, szMessage, 8 );
  733.  
  734. if( szMessage[ 1 ] == 'C' ) // #CTs_Win
  735. {
  736. for( new i = 1; i <= 32; i++ )
  737. {
  738. if( g_Spec[i] )
  739. {
  740. if( hTeam[i] == CS_TEAM_CT ) hTeam[i] = CS_TEAM_T;
  741. else hTeam[i] = CS_TEAM_CT;
  742. }
  743. }
  744. }
  745. }
  746.  
  747. public team_spec(id)
  748. {
  749. if(g_CurrentMode != e_gPub)
  750. return PLUGIN_HANDLED;
  751.  
  752. if (g_Spec[id])
  753. {
  754. cs_set_user_team(id, hTeam[id]);
  755. cs_set_user_deaths(id, hDeath[id]);
  756. g_Spec[id] = false
  757. }
  758. else
  759. {
  760. if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
  761. return PLUGIN_HANDLED;
  762.  
  763. hDeath[id] = cs_get_user_deaths(id);
  764. hTeam[id] = cs_get_user_team(id);
  765. if (is_user_alive(id))
  766. cs_set_user_deaths(id, hDeath[id] - 1);
  767. cs_set_user_team(id, CS_TEAM_SPECTATOR);
  768. user_silentkill(id);
  769. g_Spec[id] = true
  770. }
  771.  
  772. return PLUGIN_HANDLED;
  773. }
  774.  
  775. public fwd_EmitSound_Pre( id, iChannel, szSample[], Float:volume, Float:attenuation, fFlags, pitch )
  776. {
  777. if( equal( szSample, "weapons/knife_deploy1.wav") )
  778. {
  779. return FMRES_SUPERCEDE;
  780. }
  781.  
  782. if( is_user_alive( id ) && cs_get_user_team(id) == CS_TEAM_T && equal( szSample, snd_denyselect ) )
  783. {
  784. emit_sound( id, iChannel, g_szUseSound, volume, attenuation, fFlags, pitch );
  785. return FMRES_SUPERCEDE;
  786. }
  787. return FMRES_IGNORED;
  788. }
  789.  
  790. public fwd_PlayerKilled_Pre( id )
  791. {
  792. if( cs_get_user_team(id) != CS_TEAM_T )
  793. return;
  794.  
  795. new players[32], num, index;
  796. get_players(players, num, "ae", "TERRORIST");
  797. if( num == 1 )
  798. {
  799. g_bLastFlash = true;
  800. index = players[0];
  801. g_iGiveNadesTo = index;
  802. show_menu( index, 3, g_szNewNadesMenu, -1, "NadesMenu" );
  803. DisableHamForward( Player_Killed_Pre );
  804. }
  805. }
  806.  
  807. public HandleNadesMenu( id, key )
  808. {
  809. if( !g_bLastFlash || id != g_iGiveNadesTo || !is_user_alive( id ) )
  810. return;
  811.  
  812. if( !key )
  813. {
  814.  
  815. if( user_has_weapon( id, CSW_SMOKEGRENADE ) )
  816. {
  817. ExecuteHam( Ham_GiveAmmo, id, 1, "SmokeGrenade", 1024 );
  818. }
  819. else
  820. give_item(id, "weapon_smokegrenade");
  821.  
  822.  
  823. if( user_has_weapon( id, CSW_FLASHBANG ) )
  824. {
  825. ExecuteHam( Ham_GiveAmmo, id, 1, "Flashbang", 1024 );
  826. }
  827. else
  828. give_item(id, "weapon_flashbang");
  829.  
  830. emit_sound( id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  831. }
  832. else
  833. {
  834. //ach_add_progress(id, ac_charity);
  835. }
  836.  
  837. g_bLastFlash = false;
  838. g_iGiveNadesTo = 0;
  839.  
  840. }
  841.  
  842. public fwdSpawn(entid) {
  843. static szClassName[32];
  844. if(pev_valid(entid))
  845. {
  846. pev(entid, pev_classname, szClassName, 31);
  847. if(equal(szClassName, "func_buyzone")) engfunc(EngFunc_RemoveEntity, entid);
  848.  
  849. for(new i = 0; i < sizeof g_szDefaultEntities; i++)
  850. {
  851. if(equal(szClassName, g_szDefaultEntities[i]))
  852. {
  853. engfunc(EngFunc_RemoveEntity, entid);
  854. break;
  855. }
  856. }
  857. }
  858. }
  859.  
  860. public register_mode()
  861. {
  862. g_iHostageEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "hostage_entity"));
  863. set_pev(g_iHostageEnt, pev_origin, Float:{ 0.0, 0.0, -55000.0 });
  864. set_pev(g_iHostageEnt, pev_size, Float:{ -1.0, -1.0, -1.0 }, Float:{ 1.0, 1.0, 1.0 });
  865. dllfunc(DLLFunc_Spawn, g_iHostageEnt);
  866. }
  867.  
  868. public rnr_hud_paused()
  869. {
  870. if(g_CurrentMode == e_gPaused)
  871. {
  872. Task_Hud(0, 1.0, 1, 65, 105, 225, 0.5, "MATCH PAUSED");
  873. }
  874. }
  875.  
  876. public rnr_startpause(id, level, cid)
  877. {
  878. if(cmd_access(id, level, cid, 1) && g_CurrentMode == e_gMix && g_CurrentMode != e_gPaused)
  879. {
  880. g_CurrentMode = e_gPaused
  881.  
  882. if(current_mode != mode_mr)
  883. {
  884. if(GameStarted)
  885. {
  886. flSidesTime[iCurrentSW] -= g_flRoundTime;
  887. new szName[64]
  888. get_user_name(id, szName, 63)
  889. client_print(0, print_chat, "[%s] %s paused Survival Mode", rnr_tag, szName);
  890. server_cmd("sv_restart 1")
  891. Survival = false;
  892. GameStarted = false;
  893. }
  894. else
  895. {
  896. client_print(id, print_chat, "[%s] Game not started or already paused (use /unpause)", rnr_tag);
  897. }
  898. }
  899.  
  900. set_task(0.5, "rnr_hud_paused", _, _, _, "b")
  901.  
  902. server_cmd("amxx unpause uq_jumpstats.amxx")
  903. server_cmd("sv_restart 1")
  904. //server_cmd("hns_alltalk 1");
  905. server_cmd("mp_freezetime 0")
  906. }
  907. return PLUGIN_HANDLED
  908. }
  909.  
  910. public rnr_unpause(id, level, cid)
  911. {
  912. if(cmd_access(id, level, cid, 1) && g_CurrentMode == e_gPaused)
  913. {
  914. g_CurrentMode = e_gMix
  915. if(current_mode != mode_mr)
  916. GameStarted = true;
  917.  
  918. Task_Hud(0, 2.0, 1, 255, 153, 0, 3.0, "LIVE LIVE LIVE");
  919.  
  920. server_cmd("amxx pause uq_jumpstats.amxx")
  921. server_cmd("sv_restart 1")
  922. //server_cmd("hns_alltalk 0");
  923. server_cmd("mp_freezetime 15")
  924. remove_hook(id)
  925. }
  926. return PLUGIN_HANDLED
  927. }
  928.  
  929. public rnr_swap_teams(id,level,cid) {
  930. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  931.  
  932. new rnr_name[32]
  933. get_user_name(id, rnr_name, charsmax(rnr_name))
  934. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1swap teams", rnr_tag, rnr_name)
  935.  
  936. SwitchTeams()
  937. server_cmd("sv_restart 1")
  938.  
  939. return PLUGIN_HANDLED
  940. }
  941.  
  942. public CmdRestartRound(id, level, cid) {
  943. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  944. new rnr_name[32]
  945. get_user_name(id, rnr_name, 31)
  946. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1did restart", rnr_tag, rnr_name)
  947. RingWidth = 2300.0;
  948. RestartRound();
  949.  
  950. return PLUGIN_HANDLED
  951. }
  952.  
  953.  
  954. /* Commands for management */
  955. /* Commands for management */
  956. /* Commands for management */
  957. public rnr_pub(id, level, cid) {
  958. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  959.  
  960. new rnr_name[32]
  961. get_user_name(id, rnr_name, 31)
  962.  
  963. if(g_CurrentMode != e_gPub)
  964. {
  965. if(g_CurrentMode != e_gMix && g_CurrentMode != e_gKnife) {
  966. PrepareMode(e_gPub);
  967. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1activated public HNS mode", rnr_tag, rnr_name)
  968. }
  969. } else
  970. client_print_color(id, id, "^1[^4%s^1] ^3%s ^1Public HNS mode is ^4already running", rnr_tag, rnr_name)
  971.  
  972. remove_hook(id)
  973.  
  974. return PLUGIN_HANDLED
  975. }
  976.  
  977. public rnr_pub_off(id, level, cid) {
  978. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  979.  
  980. new rnr_name[32]
  981. get_user_name(id, rnr_name, 31)
  982.  
  983. if(g_CurrentMode == e_gPub)
  984. {
  985. if(g_CurrentMode != e_gMix && g_CurrentMode != e_gKnife) {
  986. g_CurrentMode = e_gTraining;
  987.  
  988. server_cmd("mp_forcechasecam 2")
  989. server_cmd("mp_forcecamera 2")
  990. server_cmd("rnr_switch 0")
  991. server_cmd("rnr_training 1")
  992. server_cmd("rnr_footsteps 0")
  993. server_cmd("mp_roundtime 3")
  994. server_cmd("mp_freezetime 0")
  995. server_cmd("rnr_flash 3")
  996. server_cmd("mp_autoteambalance 0")
  997. server_cmd("rnr_join_team 1")
  998. server_cmd("rnr_block_change 0")
  999. server_cmd("sv_restart 1")
  1000.  
  1001. client_print_color(0, id, "^1[^4%s^1] ^3%s ^4disabled ^1public HNS mode", rnr_tag, rnr_name)
  1002. }
  1003. } else
  1004. client_print_color(id, id, "^1[^4%s^1] ^3%s ^1Public HNS mode is ^4not running", rnr_tag, rnr_name)
  1005.  
  1006. remove_hook(id)
  1007.  
  1008. return PLUGIN_HANDLED
  1009. }
  1010.  
  1011. public rnr_transfer_spec(id)
  1012. {
  1013. if(!(get_user_flags(id) & rnr_ACESS))
  1014. return PLUGIN_HANDLED
  1015.  
  1016. new rnr_name[32]
  1017. get_user_name(id, rnr_name, 31)
  1018. client_print_color( 0, id,"^1[^4%s^1] ^3%s ^1transfered all players to ^4Spectators", rnr_tag, rnr_name )
  1019. /*new Players[32], Num; get_players(Players, Num, "h")
  1020.  
  1021. for(new i = 0; i < Num; i++)
  1022. {
  1023. if(is_user_alive(Players[i]))
  1024. user_kill(Players[i], 0)
  1025. if(cs_get_user_team(Players[i]) != CS_TEAM_SPECTATOR)
  1026. cs_set_user_team(Players[i], CS_TEAM_SPECTATOR, CS_DONTCHANGE)
  1027. }*/
  1028.  
  1029. safe_transfer( CS_TEAM_SPECTATOR );
  1030. return PLUGIN_HANDLED
  1031. }
  1032.  
  1033. public rnr_transfer_tt(id)
  1034. {
  1035. if(!(get_user_flags(id) & rnr_ACESS))
  1036. return PLUGIN_HANDLED
  1037.  
  1038. new rnr_name[32]
  1039. get_user_name(id, rnr_name, 31)
  1040. client_print_color( 0, id,"^1[^4%s^1] ^3%s ^1transfered all players to ^4TT's", rnr_tag, rnr_name )
  1041. new Players[32], Num; get_players(Players, Num, "h")
  1042. /*
  1043. for(new i = 0; i < Num; i++)
  1044. {
  1045. if(is_user_alive(Players[i]))
  1046. user_kill(Players[i], 0)
  1047. if(cs_get_user_team(Players[i]) != CS_TEAM_T)
  1048. cs_set_user_team(Players[i], CS_TEAM_T, CS_T_ARCTIC)
  1049. }
  1050. */
  1051. safe_transfer( CS_TEAM_T );
  1052. return PLUGIN_HANDLED
  1053. }
  1054.  
  1055. public rnr_transfer_ct(id)
  1056. {
  1057. if(!(get_user_flags(id) & rnr_ACESS))
  1058. return PLUGIN_HANDLED
  1059.  
  1060. new rnr_name[32]
  1061. get_user_name(id, rnr_name, 31)
  1062. client_print_color( 0, id,"^1[^4%s^1] ^3%s ^1transfered all players to ^4CT's", rnr_tag, rnr_name )
  1063. new Players[32], Num; get_players(Players, Num, "h")
  1064. /*
  1065. for(new i = 0; i < Num; i++)
  1066. {
  1067. if(is_user_alive(Players[i]))
  1068. user_kill(Players[i], 0)
  1069. if(cs_get_user_team(Players[i]) != CS_TEAM_CT)
  1070. cs_set_user_team(Players[i], CS_TEAM_CT, CS_CT_GIGN)
  1071. }
  1072. */
  1073. safe_transfer( CS_TEAM_CT );
  1074. return PLUGIN_HANDLED
  1075. }
  1076.  
  1077.  
  1078. public rnr_skill(id,level,cid) {
  1079. if(!cmd_access(id, level, cid, 1 )) return PLUGIN_HANDLED
  1080. new rnr_name[32]
  1081. get_user_name(id,rnr_name, 31)
  1082. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1activated ^4Skill mod ^1(semiclip: ^4on^1)", rnr_tag, rnr_name)
  1083.  
  1084. server_cmd("rnr_semiclip 0")
  1085.  
  1086. return PLUGIN_HANDLED
  1087. }
  1088.  
  1089. public rnr_boost(id,level,cid) {
  1090. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  1091. new rnr_name[32]
  1092. get_user_name(id,rnr_name, 31)
  1093. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1activated ^4Boost mod ^1(semiclip: ^4off^1)", rnr_tag, rnr_name)
  1094.  
  1095. server_cmd("rnr_semiclip 1")
  1096.  
  1097. return PLUGIN_HANDLED
  1098. }
  1099.  
  1100. public rnr_aa10(id,level,cid) {
  1101. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  1102. new rnr_name[32]
  1103. get_user_name(id,rnr_name, 31)
  1104. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1changed ^4sv_airaccelerate^1 to^4 10", rnr_tag, rnr_name)
  1105.  
  1106. server_cmd("sv_airaccelerate 10")
  1107.  
  1108. return PLUGIN_HANDLED
  1109. }
  1110.  
  1111. public rnr_aa100(id,level,cid) {
  1112. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  1113. new rnr_name[32]
  1114. get_user_name(id,rnr_name, 31)
  1115. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1changed ^4sv_airaccelerate^1 to^4 100", rnr_tag, rnr_name)
  1116.  
  1117. server_cmd("sv_airaccelerate 100")
  1118.  
  1119. return PLUGIN_HANDLED
  1120. }
  1121.  
  1122.  
  1123. public rnr_mr5(id,level,cid) {
  1124. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  1125. new rnr_name[32]
  1126. get_user_name(id,rnr_name, 31)
  1127. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1established the: [^4MR 5^1] system", rnr_tag, rnr_name)
  1128.  
  1129. set_pcvar_num(cvarMaxRounds, 4);
  1130.  
  1131. return PLUGIN_HANDLED;
  1132. }
  1133.  
  1134. public rnr_mr7(id,level,cid) {
  1135. if(!cmd_access(id, level, cid, 1 ) ) return PLUGIN_HANDLED
  1136. new rnr_name[32]
  1137. get_user_name(id,rnr_name, 31)
  1138. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1established the: [^4MR 7^1] system", rnr_tag, rnr_name)
  1139.  
  1140. set_pcvar_num(cvarMaxRounds, 6);
  1141.  
  1142. return PLUGIN_HANDLED
  1143. }
  1144.  
  1145. public rnr_mr9(id,level,cid) {
  1146. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  1147. new rnr_name[32]
  1148. get_user_name(id,rnr_name, 31)
  1149. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1established the: [^4MR 9^1] system", rnr_tag, rnr_name)
  1150.  
  1151. set_pcvar_num(cvarMaxRounds, 8);
  1152.  
  1153. return PLUGIN_HANDLED
  1154. }
  1155.  
  1156. const m_pActiveItem = 373;
  1157.  
  1158. public change_setting_value ( id, const setting[], const value[] )
  1159. {
  1160. if ( !strcmp ( setting, SETTING_KNIFES ) )
  1161. gOnOff[id] = bool:str_to_num ( value )
  1162.  
  1163. if ( !strcmp ( setting, SETTING_EMITSOUND ) )
  1164. gEmitSound[id] = bool:str_to_num ( value )
  1165. }
  1166.  
  1167. public cmdShowKnife(id)
  1168. {
  1169. //gOnOff[id] = !gOnOff[id];
  1170. gOnOff[id] = gOnOff[id] ? false : true
  1171. set_setting_bool ( id, SETTING_KNIFES, gOnOff[id] )
  1172. client_print_color(id, print_team_red, "^1[^4%s^1] Knife is now set %svisible", rnr_tag, gOnOff[id] ? "^3in" : "^4" );
  1173.  
  1174. if( !is_user_alive( id ) )
  1175. return PLUGIN_HANDLED;
  1176.  
  1177. if( get_user_weapon( id ) == CSW_KNIFE )
  1178. {
  1179. if( gOnOff[id] )
  1180. set_pev( id, pev_viewmodel, 0 );
  1181. else
  1182. {
  1183. new weapon = get_pdata_cbase( id, m_pActiveItem, 5 );
  1184. if( weapon != -1 )
  1185. ExecuteHamB( Ham_Item_Deploy, weapon );
  1186. }
  1187. }
  1188.  
  1189. return PLUGIN_CONTINUE;
  1190.  
  1191. }
  1192.  
  1193. public ShowTimers(id)
  1194. {
  1195. if(GameStarted)
  1196. {
  1197. new TimeToWin[2][24]
  1198. new szTeam[2][64]
  1199. fnConvertTime( (get_pcvar_float(g_Captime)*60.0)-flSidesTime[iCurrentSW], TimeToWin[0], 23 );
  1200. get_pcvar_string(cvarTeam[iCurrentSW], szTeam[0], 63)
  1201. fnConvertTime( (get_pcvar_float(g_Captime)*60.0)-flSidesTime[!iCurrentSW], TimeToWin[1], 23 );
  1202. get_pcvar_string(cvarTeam[!iCurrentSW], szTeam[1], 63)
  1203. if(!iCurrentSW)
  1204. client_print_color(id,print_team_red, "^1[^%s^1] TT [^3%s^1] vs [^3%s^1] CT ",rnr_tag, TimeToWin[iCurrentSW], TimeToWin[!iCurrentSW])
  1205. else
  1206. client_print_color(id,print_team_red, "^1[^%s^1] TT [^3%s^1] vs [^3%s^1] CT ",rnr_tag, TimeToWin[!iCurrentSW], TimeToWin[iCurrentSW])
  1207. }
  1208. else
  1209. {
  1210. client_print_color(id,print_team_red, "^1[^%s^1] ^1Sorry, but game ain't started atm.", rnr_tag)
  1211. }
  1212. }
  1213.  
  1214. public client_putinserver(id)
  1215. {
  1216. g_bShowSpeed{id} = true;
  1217. //gOnOff[id] = false // hns mode
  1218. gOnOff[id] = get_setting_bool ( id, SETTING_KNIFES, true ) //knife
  1219. gEmitSound[id] = get_setting_bool ( id, SETTING_EMITSOUND, true ) //sound death
  1220. }
  1221.  
  1222. public client_disconnected(id)
  1223. {
  1224. if(CaptainWinner == id)
  1225. CaptainWinner = 0;
  1226. if(CaptainSide == id)
  1227. CaptainSide = 0;
  1228. if(Captain1 == id)
  1229. Captain1 = 0;
  1230. if(Captain2 == id)
  1231. Captain2 = 0;
  1232.  
  1233. PlayNoPlay[id] = get_gametime()+60.0;
  1234.  
  1235. if(get_user_team(id) == 1 || get_user_team(id) == 2)
  1236. SaveState(id);
  1237. }
  1238.  
  1239. /* Menu (say /mix) */
  1240. /* Menu (say /mix) */
  1241. /* Menu (say /mix) */
  1242. public rnr_mix_menu(id)
  1243. {
  1244. new title[64];
  1245. new MaxRound = get_pcvar_num(cvarMaxRounds) + 1;
  1246. new AiraCcel = get_cvar_num( "sv_airaccelerate");
  1247. formatex(title, 63, "\r#rip'n'roll Match System^n\d[MR:%d] [Airaccelerate:%d]", MaxRound, AiraCcel)
  1248. new i_Menu = menu_create(title, "rnr_mix_menu_code")
  1249.  
  1250. // Старт и стоп матча
  1251. if(g_CurrentMode != e_gMix)
  1252. menu_additem(i_Menu, "Start match", "1")
  1253. else
  1254. menu_additem(i_Menu, "Stop match", "1")
  1255.  
  1256.  
  1257. // Старт и стоп кнайфраунда + Пауза Матча
  1258. if(g_CurrentMode != e_gMix && g_CurrentMode != e_gPaused) {
  1259. if( g_CurrentMode == e_gKnife )
  1260. menu_additem(i_Menu, "Stop kniferound", "2")
  1261. else
  1262. menu_additem(i_Menu, "Start kniferound", "2")
  1263. }
  1264. else {
  1265. if(g_CurrentMode != e_gPaused)
  1266. menu_additem(i_Menu, "Pause match", "2")
  1267. else
  1268. menu_additem(i_Menu, "Unpause match", "2")
  1269. }
  1270.  
  1271. // Капитан мод
  1272. if(g_CurrentMode != e_gCaptain && CaptainSort == false )
  1273. menu_additem(i_Menu, "Start Captain mod", "3")
  1274. else
  1275. menu_additem(i_Menu, "Stop Captain mod", "3")
  1276.  
  1277. //Путое место
  1278. menu_addblank(i_Menu, 0)
  1279.  
  1280. // Рестарт раунда
  1281. menu_additem(i_Menu, "Restart round", "4")
  1282.  
  1283. // Сменить команды местами
  1284. menu_additem(i_Menu, "Swap teams", "5")
  1285.  
  1286. //Путое место
  1287. menu_addblank(i_Menu, 0)
  1288.  
  1289. menu_additem(i_Menu, "Choose server watcher^n", "6", 0)
  1290.  
  1291. //Мод сервера
  1292. if(g_CurrentMode == e_gPub)
  1293. menu_additem(i_Menu, "Server mode: \rPublic", "7")
  1294. else {
  1295. if(g_CurrentMode == e_gKnife) {
  1296. menu_additem(i_Menu, "Server mode: \rKnife Round", "7")
  1297. } else {
  1298. if(g_CurrentMode == e_gMix)
  1299. menu_additem(i_Menu, "Server mode: \rMatch", "7")
  1300. else
  1301. menu_additem(i_Menu, "Server mode: \rTraining", "7")
  1302. }
  1303. }
  1304.  
  1305. // Boost / Skill
  1306. if(get_pcvar_num(cvarSemiclip) == 1)
  1307. menu_additem(i_Menu, "Game type: \rBoost", "8", 0)
  1308. if(get_pcvar_num(cvarSemiclip) == 0)
  1309. menu_additem(i_Menu, "Game type: \rSkill", "8", 0)
  1310.  
  1311. // Открыть меню чтобы перевести игроков
  1312. menu_additem(i_Menu, "\wTransferning players^n", "9", ADMIN_MENU)
  1313.  
  1314. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1315.  
  1316. menu_setprop(i_Menu, MPROP_PERPAGE, 0)
  1317. menu_display(id, i_Menu, 0)
  1318.  
  1319. return PLUGIN_HANDLED
  1320. }
  1321. /* /Menu (say /mix) */
  1322. /* /Menu (say /mix) */
  1323. /* /Menu (say /mix) */
  1324.  
  1325.  
  1326.  
  1327. /* Menu Functions (say /mix) */
  1328. /* Menu Functions (say /mix) */
  1329. /* Menu Functions (say /mix) */
  1330. public rnr_mix_menu_code(id, menu, item, level, cid)
  1331. {
  1332. if (item == MENU_EXIT)
  1333. {
  1334. menu_destroy(menu)
  1335. return PLUGIN_HANDLED
  1336. }
  1337.  
  1338. new s_Data[6], s_Name[64], i_Access, i_Callback
  1339. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1340. new i_Key = str_to_num(s_Data)
  1341.  
  1342. switch(i_Key)
  1343. {
  1344. case 1:
  1345. {
  1346. if(g_CurrentMode != e_gMix)
  1347. client_cmd(id, "say /start")
  1348. else
  1349. client_cmd(id, "say /stop")
  1350. }
  1351. case 2:
  1352. {
  1353. if(g_CurrentMode != e_gMix && g_CurrentMode != e_gPaused) {
  1354. if( g_CurrentMode == e_gKnife )
  1355. client_cmd(id, "say /stop")
  1356. else
  1357. client_cmd(id, "say /kf")
  1358. }
  1359. else {
  1360. if(g_CurrentMode != e_gPaused)
  1361. client_cmd(id, "say /pause")
  1362. else
  1363. client_cmd(id, "say /live")
  1364. }
  1365. }
  1366. case 3:
  1367. {
  1368. if(g_CurrentMode != e_gCaptain && CaptainSort == false )
  1369. client_cmd(id, "say /cap")
  1370. else
  1371. client_cmd(id, "say /stopcap")
  1372. }
  1373. case 4:
  1374. {
  1375. client_cmd(id, "say /rr")
  1376. }
  1377. case 5:
  1378. {
  1379. client_cmd(id, "say /swap")
  1380. }
  1381. case 6:
  1382. {
  1383. client_cmd(id, "say /watcher")
  1384. }
  1385. case 7:
  1386. {
  1387. client_cmd(id, "say /mode")
  1388. }
  1389. case 8:
  1390. {
  1391. client_cmd(id, "say /type")
  1392. }
  1393. case 9:
  1394. {
  1395. client_cmd(id, "say /trans")
  1396. }
  1397. }
  1398.  
  1399. menu_destroy(menu)
  1400. return PLUGIN_HANDLED
  1401. }
  1402.  
  1403.  
  1404. public rnr_mr_menu(id) {
  1405. new i_Menu = menu_create("rnr MR", "rnr_mr_menu_code")
  1406.  
  1407. menu_additem(i_Menu, "MR5", "1", 0)
  1408. menu_additem(i_Menu, "MR7", "2", 0)
  1409. menu_additem(i_Menu, "MR9", "3", 0)
  1410. menu_addblank(i_Menu, 0)
  1411. menu_additem(i_Menu, "Back to Mix menu", "4", 0)
  1412.  
  1413. menu_display(id, i_Menu, 0)
  1414. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1415.  
  1416. return PLUGIN_HANDLED
  1417. }
  1418.  
  1419. public rnr_mr_menu_code(id, menu, item, level, cid)
  1420. {
  1421. if (item == MENU_EXIT)
  1422. {
  1423. menu_destroy(menu)
  1424. return PLUGIN_HANDLED
  1425. }
  1426. new s_Data[6], s_Name[64], i_Access, i_Callback
  1427. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1428. new i_Key = str_to_num(s_Data)
  1429.  
  1430. switch(i_Key)
  1431. {
  1432. case 1:
  1433. {
  1434. client_cmd(id, "say /mr5")
  1435. }
  1436. case 2:
  1437. {
  1438. client_cmd(id, "say /mr7")
  1439. }
  1440. case 3:
  1441. {
  1442. client_cmd(id, "say /mr9")
  1443. }
  1444. case 4:
  1445. {
  1446. rnr_mix_menu(id)
  1447. }
  1448. }
  1449. menu_destroy(menu)
  1450. return PLUGIN_HANDLED
  1451. }
  1452.  
  1453. public rnr_semi_menu(id) {
  1454. new i_Menu = menu_create("rnr TYPE", "rnr_semi_menu_code")
  1455.  
  1456. menu_additem(i_Menu, "Boost", "1", 0)
  1457. menu_additem(i_Menu, "Skill", "2", 0)
  1458. menu_addblank(i_Menu, 0)
  1459. menu_additem(i_Menu, "Back to Mix menu", "3", 0)
  1460.  
  1461. menu_display(id, i_Menu, 0)
  1462. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1463. return PLUGIN_HANDLED
  1464. }
  1465.  
  1466. public rnr_semi_menu_code(id, menu, item, level, cid)
  1467. {
  1468. if (item == MENU_EXIT)
  1469. {
  1470. menu_destroy(menu)
  1471. return PLUGIN_HANDLED
  1472. }
  1473. new s_Data[6], s_Name[64], i_Access, i_Callback
  1474. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1475. new i_Key = str_to_num(s_Data)
  1476.  
  1477. switch(i_Key)
  1478. {
  1479. case 1:
  1480. {
  1481. client_cmd(id, "say /boost")
  1482. }
  1483. case 2:
  1484. {
  1485. client_cmd(id, "say /skill")
  1486. }
  1487. case 3:
  1488. {
  1489. rnr_mix_menu(id)
  1490. }
  1491. }
  1492.  
  1493. menu_destroy(menu)
  1494. return PLUGIN_HANDLED
  1495. }
  1496.  
  1497. public rnr_aa_menu(id) {
  1498. new i_Menu = menu_create("rnr AA", "rnr_aa_menu_code")
  1499.  
  1500. menu_additem(i_Menu, "100aa", "1", 0)
  1501. menu_additem(i_Menu, "10aa", "2", 0)
  1502. menu_addblank(i_Menu, 0)
  1503. menu_additem(i_Menu, "Back to Mix menu", "3", 0)
  1504. menu_display(id, i_Menu, 0)
  1505. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1506. return PLUGIN_HANDLED
  1507. }
  1508.  
  1509. public rnr_aa_menu_code(id, menu, item, level, cid)
  1510. {
  1511. if (item == MENU_EXIT)
  1512. {
  1513. menu_destroy(menu)
  1514. return PLUGIN_HANDLED
  1515. }
  1516. new s_Data[6], s_Name[64], i_Access, i_Callback
  1517. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1518. new i_Key = str_to_num(s_Data)
  1519.  
  1520. switch(i_Key)
  1521. {
  1522. case 1:
  1523. {
  1524. client_cmd(id, "say /aa100")
  1525. }
  1526. case 2:
  1527. {
  1528. client_cmd(id, "say /aa10")
  1529. }
  1530. case 3:
  1531. {
  1532. rnr_mix_menu(id)
  1533. }
  1534. }
  1535. menu_destroy(menu)
  1536. return PLUGIN_HANDLED
  1537. }
  1538.  
  1539. public rnr_trans_menu(id) {
  1540. new i_Menu = menu_create("rnr TRANSFERS", "rnr_trans_menu_code")
  1541. menu_additem(i_Menu, "All to Spectators ", "1", 0)
  1542. menu_additem(i_Menu, "All to Terrorist ", "2", 0)
  1543. menu_additem(i_Menu, "All to Counter-Terrorist", "3", 0)
  1544. menu_addblank(i_Menu, 0)
  1545. menu_additem(i_Menu, "Back to Mix menu", "4", 0)
  1546.  
  1547. menu_display(id, i_Menu, 0)
  1548. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1549. return PLUGIN_HANDLED
  1550. }
  1551.  
  1552. public rnr_trans_menu_code(id, menu, item, level, cid)
  1553. {
  1554. if (item == MENU_EXIT)
  1555. {
  1556. menu_destroy(menu)
  1557. return PLUGIN_HANDLED
  1558. }
  1559. new s_Data[6], s_Name[64], i_Access, i_Callback
  1560. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1561. new i_Key = str_to_num(s_Data)
  1562.  
  1563. switch(i_Key)
  1564. {
  1565. case 1:
  1566. {
  1567. client_cmd(id, "say /spec")
  1568. }
  1569. case 2:
  1570. {
  1571. client_cmd(id, "say /tt")
  1572. }
  1573. case 3:
  1574. {
  1575. client_cmd(id, "say /ct")
  1576. }
  1577. case 4:
  1578. {
  1579. rnr_mix_menu(id)
  1580. }
  1581. }
  1582. menu_destroy(menu)
  1583. return PLUGIN_HANDLED
  1584. }
  1585.  
  1586. public rnr_mode_menu(id) {
  1587. new i_Menu = menu_create("rnr MODE", "rnr_mode_menu_code")
  1588.  
  1589. if(g_CurrentMode == e_gPub)
  1590. {
  1591. menu_additem(i_Menu, "\dPublic HNS mode \d(\rrunning\d)", "1", 0)
  1592. menu_additem(i_Menu, "Training + Matches", "2", 0)
  1593. } else {
  1594. menu_additem(i_Menu, "Public HNS mode", "1", 0)
  1595. menu_additem(i_Menu, "\dTraining + Matches \d(\rrunning\d)", "2", 0)
  1596. }
  1597.  
  1598. menu_addblank(i_Menu, 0)
  1599. menu_additem(i_Menu, "Back to Mix menu", "3", 0)
  1600. menu_display(id, i_Menu, 0)
  1601. menu_additem(i_Menu, "Exit", "MENU_EXIT" )
  1602. return PLUGIN_HANDLED
  1603. }
  1604.  
  1605. public rnr_mode_menu_code(id, menu, item, level, cid)
  1606. {
  1607. if (item == MENU_EXIT)
  1608. {
  1609. menu_destroy(menu)
  1610. return PLUGIN_HANDLED
  1611. }
  1612. new s_Data[6], s_Name[64], i_Access, i_Callback
  1613. menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
  1614. new i_Key = str_to_num(s_Data)
  1615.  
  1616. switch(i_Key)
  1617. {
  1618. case 1:
  1619. {
  1620. client_cmd(id, "say /pub")
  1621. }
  1622. case 2:
  1623. {
  1624. client_cmd(id, "say /def")
  1625. }
  1626. case 3:
  1627. {
  1628. rnr_mix_menu(id)
  1629. }
  1630. }
  1631. menu_destroy(menu)
  1632. return PLUGIN_HANDLED
  1633. }
  1634. /* /Menu Functions (say /mix) */
  1635. /* /Menu Functions (say /mix) */
  1636. /* /Menu Functions (say /mix) */
  1637.  
  1638. /* Training start */
  1639.  
  1640. /* Hook */
  1641. /* Hook */
  1642. /* Hook */
  1643. public rnr_hook_on(id)
  1644. {
  1645. if ( g_CurrentMode > e_gPaused )
  1646. return PLUGIN_HANDLED
  1647.  
  1648. if( !is_user_alive(id) )
  1649. return PLUGIN_HANDLED
  1650.  
  1651. get_user_origin(id,hookorigin[id],3)
  1652. rnr_hooked[id] = true
  1653. set_task(0.1,"rnr_hook_task",id+9999,"",0,"ab")
  1654. rnr_hook_task(id+9999)
  1655.  
  1656. return PLUGIN_HANDLED
  1657. }
  1658.  
  1659. public is_hooked(id)
  1660. {
  1661. return rnr_hooked[id]
  1662. }
  1663.  
  1664. public rnr_hook_off(id)
  1665. {
  1666. remove_hook(id)
  1667.  
  1668. return PLUGIN_HANDLED
  1669. }
  1670.  
  1671. public rnr_hook_task(id)
  1672. {
  1673. id -= 9999;
  1674. if(!is_user_connected(id) || !is_user_alive(id) || g_CurrentMode > e_gPaused)
  1675. remove_hook(id)
  1676.  
  1677. remove_beam(id)
  1678. draw_hook(id)
  1679.  
  1680. new origin[3], Float:velocity[3]
  1681. get_user_origin(id,origin)
  1682. new distance = get_distance(hookorigin[id],origin)
  1683. if(distance > 60)
  1684. {
  1685. velocity[0] = (hookorigin[id][0] - origin[0]) * (2.0 * 500 / distance)
  1686. velocity[1] = (hookorigin[id][1] - origin[1]) * (2.0 * 500 / distance)
  1687. velocity[2] = (hookorigin[id][2] - origin[2]) * (2.0 * 500 / distance)
  1688. entity_set_vector(id,EV_VEC_velocity,velocity)
  1689. }
  1690. else
  1691. {
  1692. entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
  1693. entity_set_float(id, EV_FL_gravity, 0.00000001);
  1694. }
  1695. entity_set_int(id, EV_INT_sequence, 55);
  1696. entity_set_float(id,EV_FL_frame, 0.0);
  1697. }
  1698.  
  1699. public draw_hook(id)
  1700. {
  1701. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  1702. write_byte(1) // TE_BEAMENTPOINT
  1703. write_short(id) // entid
  1704. write_coord(hookorigin[id][0]) // origin
  1705. write_coord(hookorigin[id][1]) // origin
  1706. write_coord(hookorigin[id][2]) // origin
  1707. write_short(Sbeam) // sprite index
  1708. write_byte(0) // start frame
  1709. write_byte(0) // framerate
  1710. write_byte(100) // life
  1711. write_byte(10) // width
  1712. write_byte(0) // noise
  1713. write_byte(0) // r
  1714. write_byte(64) // g
  1715. write_byte(39) // b
  1716. write_byte(250) // brightness
  1717. write_byte(0) // speed
  1718. message_end()
  1719. }
  1720.  
  1721.  
  1722. public remove_hook(id)
  1723. {
  1724. if(task_exists(id+9999))
  1725. remove_task(id+9999)
  1726.  
  1727. remove_beam(id)
  1728. entity_set_float(id, EV_FL_gravity, 1.0);
  1729. ishooked[id] = false
  1730. }
  1731.  
  1732. public remove_beam(id)
  1733. {
  1734. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  1735. write_byte(99) // TE_KILLBEAM
  1736. write_short(id)
  1737. message_end()
  1738. }
  1739. /* /Hook */
  1740. /* /Hook */
  1741. /* /Hook */
  1742.  
  1743.  
  1744. // Commands
  1745. public cmdCheckpoint(plr)
  1746. {
  1747. if( g_CurrentMode > e_gPaused )
  1748. {
  1749. client_print(plr, print_chat, "Checkpoints are disabled.");
  1750. return PLUGIN_HANDLED;
  1751. }
  1752. else if( !is_user_alive(plr) )
  1753. {
  1754. client_print(plr, print_chat, "You can't do that while dead.");
  1755. return PLUGIN_HANDLED;
  1756. }
  1757.  
  1758. pev(plr, pev_origin, gCheckpoints[plr][g_bCheckpointAlternate[plr] ? 1 : 0]);
  1759. g_bCheckpointAlternate[plr] = !g_bCheckpointAlternate[plr];
  1760.  
  1761. return PLUGIN_HANDLED;
  1762. }
  1763.  
  1764. public cmdGoCheck(plr)
  1765. {
  1766. if( g_CurrentMode > e_gPaused )
  1767. {
  1768. client_print(plr, print_chat, "Checkpoints are disabled.");
  1769. return PLUGIN_HANDLED;
  1770. }
  1771. else if( !is_user_alive(plr) )
  1772. {
  1773. client_print(plr, print_chat, "You can't do that while dead.");
  1774. return PLUGIN_HANDLED;
  1775. }
  1776. else if( !gCheckpoints[plr][0][0] )
  1777. {
  1778. client_print(plr, print_chat, "%L", plr, "You don't have any checkpoints.");
  1779. return PLUGIN_HANDLED;
  1780. }
  1781.  
  1782. set_pev(plr, pev_velocity, Float:{0.0, 0.0, 0.0});
  1783. set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_DUCKING)
  1784. engfunc(EngFunc_SetOrigin, plr, gCheckpoints[plr][!g_bCheckpointAlternate[plr]]);
  1785.  
  1786. return PLUGIN_HANDLED;
  1787. }
  1788. /* Training end */
  1789.  
  1790. public cmdStartRound(id)
  1791. {
  1792. if(get_user_flags(id) & rnr_ACESS)
  1793. {
  1794. if(g_CurrentMode > e_gKnife)
  1795. {
  1796. client_print_color(id, id, "[^4%s^1] Please ^4disable ^1other mode before start mix", rnr_tag);
  1797. }
  1798. else
  1799. {
  1800. if(current_mode == mode_mr || current_mode == mode_winter)
  1801. pf_Scrim(id)
  1802. else
  1803. StartSMCmd(id);
  1804. }
  1805. }
  1806. }
  1807.  
  1808. public StartSMCmd(id) {
  1809.  
  1810. if(!GameStarted)
  1811. {
  1812. set_dhudmessage(0, 128, 0, -1.0, 0.60, 2, 0.0, 5.0, 0.01, 0.01)
  1813.  
  1814. show_dhudmessage(0, "SURVIVAL MODE STARTS IN 5 SECONDS")
  1815. set_task(5.0, "StartSM");
  1816. }
  1817. else
  1818. {
  1819. client_print(id, print_chat, "[%s] Survival Mode is already started, to stop it say /stop", rnr_tag);
  1820. }
  1821. return PLUGIN_HANDLED
  1822. }
  1823.  
  1824. public StopSMCmd(id) {
  1825. if(GameStarted)
  1826. {
  1827. GameStarted = false
  1828. Survival = false;
  1829. new szName[64]
  1830. get_user_name(id, szName, 63)
  1831. client_print(0, print_chat, "[%s] %s stoped Survival Mode", rnr_tag, szName);
  1832. }
  1833. return PLUGIN_HANDLED
  1834. }
  1835.  
  1836. public StartSM()
  1837. {
  1838. PrepareMode(e_gMix);
  1839. flSidesTime[0] = 0.0
  1840. flSidesTime[1] = 0.0
  1841. iCurrentSW = 1;
  1842. GameStarted = true;
  1843. server_cmd("sv_restart 1")
  1844. set_task(2.0, "LiveMessage");
  1845.  
  1846. }
  1847.  
  1848. public cmdStop(id)
  1849. {
  1850. if(get_user_flags(id) & rnr_ACESS)
  1851. {
  1852. switch(g_CurrentMode)
  1853. {
  1854. case e_gPaused:
  1855. {
  1856. client_print_color(0, id, "[^4%s^1] ^3%s ^1stopped ^4Mix^1!", rnr_tag, GetName(id))
  1857. }
  1858. case e_gKnife:
  1859. {
  1860. client_print_color(0, id, "[^4%s^1] ^3%s ^1stopped ^4Knife Round^1!", rnr_tag, GetName(id))
  1861. }
  1862. case e_gMix:
  1863. {
  1864. client_print_color(0, id, "[^4%s^1] ^3%s ^1stopped ^4Mix^1!", rnr_tag, GetName(id))
  1865. }
  1866. case e_gPub:
  1867. {
  1868. client_print_color(0, id, "[^4%s^1] ^3%s ^1stopped ^4Public mode^1!", rnr_tag, GetName(id))
  1869. }
  1870. }
  1871.  
  1872. server_cmd("amxx unpause uq_jumpstats.amxx")
  1873. StopSMCmd(id);
  1874. if(g_CurrentMode)
  1875. {
  1876. PrepareMode(e_gTraining);
  1877. }
  1878. }
  1879. }
  1880. public cmdKnifeRound(id)
  1881. {
  1882. if(get_user_flags(id) & rnr_ACESS)
  1883. {
  1884. if(g_CurrentMode > e_gKnife)
  1885. {
  1886. client_print_color(id, id, "[^4%s^1] Please ^4disable ^1other mode before start knife", rnr_tag);
  1887. }
  1888. else
  1889. {
  1890. pf_KnifeRound(id)
  1891. remove_hook(id)
  1892. }
  1893. }
  1894. }
  1895.  
  1896. public pf_Scrim(id)
  1897. {
  1898. set_task(4.5, "PrepareMode", e_gMix);
  1899. set_task(5.0, "RestartRound");
  1900. Task_Hud(0, 0.0, 1, 65, 105, 225, 3.0, "GOING LIVE IN 5 SECONDS")
  1901. Task_Hud(0, 7.0, 1, 255, 153, 0, 5.0, "LIVE LIVE LIVE^nGood Luck & Have Fun")
  1902.  
  1903. client_print_color(0, id, "[^4%s^1] ^3%s ^1started ^4Mix!", rnr_tag, GetName(id));
  1904. }
  1905.  
  1906. public pf_KnifeRound(id)
  1907. {
  1908. new szMapName[64]
  1909. get_mapname(szMapName, 63);
  1910. PrepareMode(e_gKnife);
  1911. RingWidth = 2300.0;
  1912. if(get_pcvar_num(ring_cvar))
  1913. set_task(0.1, "RingTask", RINGTASK, .flags = "b");
  1914. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "Knife Round Started!");
  1915. client_print_color(0, id, "[^4%s^1] ^3%s ^1started ^4Knife Round!", rnr_tag, GetName(id));
  1916.  
  1917. return PLUGIN_HANDLED
  1918. }
  1919.  
  1920. public Score(id)
  1921. {
  1922. if(current_mode == mode_timebased)
  1923. {
  1924. ShowTimers(id)
  1925. return PLUGIN_CONTINUE
  1926. }
  1927. new teamname[2][32]
  1928. get_pcvar_string(cvarTeam[0], teamname[0], 31)
  1929. get_pcvar_string(cvarTeam[1], teamname[1], 31)
  1930. //teamname[0] = "CT";
  1931. //teamname[1] = "TT";
  1932. if(!g_iSecondHalf)
  1933. client_print_color(id, print_team_blue,"^1[^4%s^1] Score: ^4%s ^3%d^1:^3%d ^4%s ^1(^3MR%d^1)", rnr_tag, teamname[0], g_iScore[0], g_iScore[1], teamname[1], get_pcvar_num(cvarMaxRounds))
  1934. else
  1935. client_print_color(id, print_team_blue,"^1[^4%s^1] Score: ^4%s ^3%d^1:^3%d ^4%s ^1(^3MR%d^1)", rnr_tag, teamname[1], g_iScore[1], g_iScore[0], teamname[0], get_pcvar_num(cvarMaxRounds))
  1936.  
  1937. return PLUGIN_CONTINUE
  1938. }
  1939.  
  1940. public eCurWeapon(id)
  1941. {
  1942. if(g_CurrentMode == e_gKnife)
  1943. {
  1944. engclient_cmd(id, "weapon_knife")
  1945. }
  1946.  
  1947. if(!g_bFreezePeriod)
  1948. return
  1949.  
  1950. if (cs_get_user_team(id) == CS_TEAM_T)
  1951. cs_reset_user_maxspeed(id)
  1952. }
  1953.  
  1954. public cs_reset_user_maxspeed(id) {
  1955. engfunc(EngFunc_SetClientMaxspeed, id, 250.0);
  1956. set_pev(id, pev_maxspeed, 250.0)
  1957. return PLUGIN_HANDLED
  1958. }
  1959.  
  1960. #define TASK_ROUNDTIME 8888
  1961.  
  1962. public ePreFT() {
  1963. if(task_exists(ROUNDENDTASK))
  1964. remove_task(ROUNDENDTASK);
  1965. if(task_exists(TASK_ROUNDTIME))
  1966. remove_task(TASK_ROUNDTIME);
  1967.  
  1968.  
  1969. if(GameStarted)
  1970. {
  1971. ShowTimers(0);
  1972. }
  1973.  
  1974. g_flRoundTime = 0.0;
  1975. RingWidth = 2300.0;
  1976. EnableHamForward( Player_Killed_Pre );
  1977. g_bLastFlash = false;
  1978. g_bFreezePeriod = true;
  1979.  
  1980. set_task(0.1, "TaskDestroyBreakables");
  1981. }
  1982. public ePostFT() {
  1983. StartRoundTime = get_gametime();
  1984. g_bFreezePeriod = false;
  1985.  
  1986. if(current_mode == mode_timebased)
  1987. {
  1988. if(GameStarted)
  1989. Survival = true
  1990.  
  1991. set_task(0.25, "RoundEnd", TASK_ROUNDTIME,. flags = "b");
  1992. }
  1993. }
  1994.  
  1995.  
  1996. public RoundEnd()
  1997. {
  1998. g_flRoundTime+= 0.25;
  1999. if(Survival)
  2000. {
  2001. flSidesTime[iCurrentSW]+=0.25;
  2002. if(flSidesTime[iCurrentSW] >= get_pcvar_float(g_Captime)*60.0)
  2003. {
  2004. SoundFx = false;
  2005. GameStarted = false;
  2006. Survival = false;
  2007. new szTeam[64]
  2008. new Float:TimeDiff
  2009. get_pcvar_string(cvarTeam[iCurrentSW], szTeam, 63)
  2010. if(iCurrentSW)
  2011. TimeDiff = flSidesTime[iCurrentSW]-flSidesTime[0]
  2012. else
  2013. TimeDiff = flSidesTime[iCurrentSW]-flSidesTime[1]
  2014.  
  2015. new sTime[24];
  2016. fnConvertTime( TimeDiff, sTime, 23 );
  2017. PrepareMode(e_gTraining);
  2018. client_print_color(0,print_team_red,"^1[^4%s^1] ^3%s won the match! (%s difference)",rnr_tag, szTeam, sTime)
  2019.  
  2020. server_cmd("sv_restart 1")
  2021. }
  2022. else if(flSidesTime[iCurrentSW] >= get_pcvar_float(g_Captime)*60.0-1.5 && !SoundFx)
  2023. {
  2024. EndSoundFx(1);
  2025. SoundFx = true;
  2026. }
  2027. }
  2028. if((g_flRoundTime/60.0) >= get_pcvar_float( g_pRoundTime ))
  2029. {
  2030. if(GameStarted)
  2031. Survival = false;
  2032. //RoundTerminating(0.5)
  2033.  
  2034. remove_task(TASK_ROUNDTIME)
  2035. }
  2036. }
  2037.  
  2038.  
  2039. public EndSoundFx( toggle )
  2040. {
  2041. if(toggle)
  2042. client_cmd ( 0 , "spk ambience/endgame.wav" )
  2043. else
  2044. for( new i = 1; i <= g_iMaxPlayers; i++ )
  2045. {
  2046. if(is_user_connected(i))
  2047. client_cmd(i, "stopsound");
  2048. }
  2049.  
  2050. }
  2051.  
  2052. public TTWin()
  2053. {
  2054. new winner = 2;
  2055. if(g_CurrentMode == e_gMix)
  2056. {
  2057. if(!g_iSecondHalf)
  2058. {
  2059. if(winner == 1)
  2060. {
  2061. g_iScore[0]++
  2062. }
  2063. if(winner == 2)
  2064. {
  2065. g_iScore[1]++
  2066. }
  2067. }
  2068. else
  2069. {
  2070. if(winner == 1)
  2071. {
  2072. g_iScore[1]++
  2073. }
  2074. if(winner == 2)
  2075. {
  2076. g_iScore[0]++
  2077. }
  2078. }
  2079. }
  2080. server_cmd("sv_restart 1");
  2081. }
  2082.  
  2083. //public eEndRound( RoundControlWin:teamWins, numWins, RoundEvent:eventRound/*, bool:bHasExpired*/ )
  2084.  
  2085. public eEndRound()
  2086. {
  2087. if(task_exists(ROUNDENDTASK))
  2088. remove_task(ROUNDENDTASK);
  2089.  
  2090. new msg[32], winner;
  2091. read_data(2,msg,32)
  2092.  
  2093. if(task_exists(RINGTASK))
  2094. remove_task(RINGTASK)
  2095.  
  2096. if(containi(msg,"ct") != -1)
  2097. {
  2098. winner = 1
  2099. }
  2100.  
  2101. else if(contain(msg,"ter") != -1)
  2102. {
  2103. winner = 2;
  2104.  
  2105. }
  2106.  
  2107. if(g_CurrentMode == e_gPub || (g_CurrentMode == e_gMix && current_mode == mode_timebased))
  2108. {
  2109. Survival = false;
  2110. if(winner == 1)
  2111. {
  2112. iCurrentSW = !iCurrentSW;
  2113. SwitchTeams();
  2114. }
  2115. }
  2116. else if(g_CurrentMode == e_gMix && current_mode == mode_mr)
  2117. {
  2118. if(!g_iSecondHalf)
  2119. {
  2120. if(winner == 1)
  2121. {
  2122. g_iScore[0]++
  2123. }
  2124. if(winner == 2)
  2125. {
  2126. g_iScore[1]++
  2127. }
  2128. }
  2129. else
  2130. {
  2131. if(winner == 1)
  2132. {
  2133. g_iScore[1]++
  2134. }
  2135. if(winner == 2)
  2136. {
  2137. g_iScore[0]++
  2138. }
  2139. }
  2140. CheckScore()
  2141. }
  2142. else if(g_CurrentMode == e_gMix && current_mode == mode_winter)
  2143. {
  2144.  
  2145. if(winner == 2)
  2146. {
  2147. if(!g_iSecondHalf)
  2148. g_iScore[1]++
  2149. else
  2150. g_iScore[0]++
  2151. }
  2152. else
  2153. {
  2154. g_iSecondHalf = !g_iSecondHalf;
  2155. SwitchTeams();
  2156. }
  2157.  
  2158. CheckScore2()
  2159. }
  2160. else if(g_CurrentMode == e_gKnife)
  2161. {
  2162. if(winner == 1)
  2163. {
  2164. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "KNIFE ROUND WIN COUNTER-TERRORISTS");
  2165. }
  2166. if(winner == 2)
  2167. {
  2168. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "KNIFE ROUND WIN TERRORISTS");
  2169. }
  2170.  
  2171. if(CaptainWinner == 3)
  2172. {
  2173. if(winner == 1)
  2174. CaptainSide = Captain1;
  2175. else
  2176. CaptainSide = Captain2;
  2177. set_task(1.5, "captain_menu", CaptainSide);
  2178. //set_task(0.2, "PlayersList", TASK_PLAYERSLIST, _, _, "b");
  2179. CaptainWinner = 0;
  2180. CaptainSort = true
  2181. PrepareMode(e_gCaptain);
  2182. }
  2183. else
  2184. PrepareMode(e_gTraining);
  2185.  
  2186. SavePlayers();
  2187. }
  2188. }
  2189.  
  2190. public CheckScore2()
  2191. {
  2192. new Rounds = get_pcvar_num(cvarMaxRounds)
  2193.  
  2194. Score(0);
  2195.  
  2196. new teamname[32]
  2197. if(g_iScore[0] >= Rounds)
  2198. {
  2199. get_pcvar_string(cvarTeam[0], teamname, 31)
  2200. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
  2201. Enable_SlowMo();
  2202. set_task(4.0, "Disable_SlowMo");
  2203. return 1;
  2204. }
  2205. else if(g_iScore[1] >= Rounds)
  2206. {
  2207. get_pcvar_string(cvarTeam[1], teamname, 31)
  2208. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
  2209. Enable_SlowMo();
  2210. set_task(4.0, "Disable_SlowMo");
  2211. return 1;
  2212. }
  2213. else if((g_iScore[0]+g_iScore[1]) == (Rounds*2))
  2214. {
  2215. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nDRAW DRAW DRAW");
  2216. Enable_SlowMo();
  2217. set_task(4.0, "Disable_SlowMo");
  2218. return 1;
  2219. }
  2220.  
  2221.  
  2222.  
  2223. return 0;
  2224. }
  2225. public CheckScore()
  2226. {
  2227. new Rounds = get_pcvar_num(cvarMaxRounds)
  2228.  
  2229. Score(0);
  2230.  
  2231. if(!g_iSecondHalf)
  2232. {
  2233. if(g_iScore[0]+g_iScore[1] == Rounds)
  2234. {
  2235. g_iSecondHalf = true;
  2236. SwitchTeams();
  2237. Task_Hud(0, 2.0, 1, 65, 105, 225, 6.0, "1ST HALF %d:%d^nSWITCHING SIDES...^n2ND HALF IN 5 SECONDS", g_iScore[0], g_iScore[1])
  2238. Task_Hud(0, 9.0, 1, 255, 153, 0, 5.0, "LIVE LIVE LIVE");
  2239. set_task(7.0, "RestartRound");
  2240.  
  2241. }
  2242. }
  2243. else
  2244. {
  2245. new teamname[32]
  2246. if(g_iScore[0] > Rounds)
  2247. {
  2248. get_pcvar_string(cvarTeam[0], teamname, 31)
  2249. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
  2250. Enable_SlowMo();
  2251. set_task(15.0, "Disable_SlowMo");
  2252. return 1;
  2253. }
  2254. else if(g_iScore[1] > Rounds)
  2255. {
  2256. get_pcvar_string(cvarTeam[1], teamname, 31)
  2257. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nWINNER: %s",teamname);
  2258. Enable_SlowMo();
  2259. set_task(15.0, "Disable_SlowMo");
  2260. return 1;
  2261. }
  2262. else if((g_iScore[0]+g_iScore[1]) == (Rounds*2))
  2263. {
  2264. Task_Hud(0, 2.0, 1, 65, 105, 225, 3.0, "MATCH FINISHED^nDRAW DRAW DRAW");
  2265. Enable_SlowMo();
  2266. set_task(15.0, "Disable_SlowMo");
  2267. return 1;
  2268. }
  2269.  
  2270. }
  2271.  
  2272. return 0;
  2273. }
  2274.  
  2275. public SwitchTeams()
  2276. {
  2277. for( new i = 1; i <= g_iMaxPlayers; i++ ) {
  2278. if( is_user_connected( i ) )
  2279. {
  2280. switch( cs_get_user_team( i ) )
  2281. {
  2282. case CS_TEAM_T: cs_set_user_team( i, CS_TEAM_CT )
  2283. case CS_TEAM_CT: cs_set_user_team( i, CS_TEAM_T )
  2284. }
  2285. }
  2286. }
  2287. }
  2288.  
  2289. public CBasePlayer_Spawn_Post(id) {
  2290.  
  2291. if (!is_user_alive(id))
  2292. return;
  2293.  
  2294. set_pdata_bool(id, m_bJustConnected, false);
  2295.  
  2296. if ( g_CurrentMode <= e_gPaused )
  2297. set_user_godmode(id, 1)
  2298.  
  2299. SetRole(id)
  2300. }
  2301.  
  2302.  
  2303. public SetRole(id) {
  2304. new CsTeams:team = cs_get_user_team(id)
  2305. strip_user_weapons(id)
  2306. set_user_freeze(id, 0);
  2307. if(g_CurrentMode > e_gKnife )
  2308. {
  2309. switch (team)
  2310. {
  2311. case CS_TEAM_T:
  2312. {
  2313. set_user_footsteps(id, 1);
  2314. give_item(id, "weapon_knife")
  2315. if( get_pcvar_num( cvarFlashNum ) >= 1 )
  2316. {
  2317. give_item( id, "weapon_flashbang" );
  2318. cs_set_user_bpammo( id, CSW_FLASHBANG, get_pcvar_num( cvarFlashNum ) );
  2319. }
  2320. if( get_pcvar_num( cvarSmokeNum ) >= 1 )
  2321. {
  2322. give_item( id, "weapon_smokegrenade" );
  2323. cs_set_user_bpammo( id, CSW_SMOKEGRENADE, get_pcvar_num( cvarSmokeNum ) );
  2324. }
  2325. }
  2326. case CS_TEAM_CT:
  2327. {
  2328. set_user_footsteps(id, 0);
  2329. give_item(id, "weapon_knife")
  2330. }
  2331. }
  2332. }
  2333. else
  2334. {
  2335. give_item(id, "weapon_knife")
  2336. }
  2337. }
  2338.  
  2339. public GetName(id)
  2340. {
  2341. new szName[128]
  2342. get_user_name(id, szName, charsmax(szName))
  2343. return szName
  2344. }
  2345.  
  2346. /*public CheckCvars(mode)
  2347. {
  2348. switch(mode)
  2349. {
  2350. case 0:
  2351. {
  2352.  
  2353. }
  2354. case 3:
  2355. {
  2356. server_cmd( "rnr_hns 1" )
  2357. server_cmd( "rnr_footsteps 1" )
  2358. server_cmd( "mp_forcechasecam 2")
  2359. server_cmd( "mp_forcecamera 2")
  2360. server_cmd( "hns_alltalk 0" )
  2361. server_cmd( "mp_timelimit 0" )
  2362. }
  2363. }
  2364. }*/
  2365.  
  2366. public PrepareMode(mode)
  2367. {
  2368.  
  2369. switch(mode)
  2370. {
  2371. case e_gTraining:
  2372. {
  2373. if(task_exists(RINGTASK))
  2374. remove_task(RINGTASK);
  2375.  
  2376. server_cmd( "mp_timelimit 0" )
  2377. server_cmd( "mp_roundtime 9" )
  2378. server_cmd( "mp_freezetime 0" )
  2379. //server_cmd( "hns_alltalk 1" )
  2380. server_cmd( "sv_alltalk 1" )
  2381. g_CurrentMode = e_gTraining;
  2382. }
  2383. case e_gKnife:
  2384. {
  2385. server_cmd("amxx pause uq_jumpstats.amxx")
  2386. server_cmd("mp_freezetime 0")
  2387. /*if(g_CurrentMode == e_gCaptain && CaptainSort == true )
  2388. server_cmd("hns_alltalk 1")
  2389. else*/
  2390. //server_cmd("hns_alltalk 0")
  2391. server_cmd("mp_timelimit 0")
  2392. server_cmd("mp_forcechasecam 2")
  2393. server_cmd("mp_forcecamera 2")
  2394. g_CurrentMode = e_gKnife;
  2395. }
  2396. case e_gMix:
  2397. {
  2398. if(task_exists(RINGTASK))
  2399. remove_task(RINGTASK);
  2400.  
  2401. LoadMapCFG();
  2402. g_iScore[0] = 0;
  2403. g_iScore[1] = 0;
  2404. g_iSecondHalf = false;
  2405. server_cmd("amxx pause uq_jumpstats.amxx")
  2406. if(current_mode == mode_winter)
  2407. {
  2408. server_cmd("rnr_hns 1" )
  2409. server_cmd("rnr_flash 2")
  2410. server_cmd( "rnr_footsteps 1" )
  2411. server_cmd("mp_forcechasecam 2")
  2412. server_cmd("mp_forcecamera 2")
  2413. server_cmd( "mp_roundtime 2.33" )
  2414. server_cmd( "mp_freezetime 10" )
  2415. //server_cmd( "hns_alltalk 0" )
  2416. }
  2417. else
  2418. {
  2419. server_cmd("rnr_hns 1" )
  2420. server_cmd("rnr_flash 3")
  2421. server_cmd( "rnr_footsteps 1" )
  2422. server_cmd("mp_forcechasecam 2")
  2423. server_cmd("mp_forcecamera 2")
  2424. server_cmd( "mp_freezetime 15" )
  2425. //server_cmd( "hns_alltalk 0" )
  2426. }
  2427. server_cmd( "mp_timelimit 0" )
  2428. g_CurrentMode = e_gMix;
  2429. }
  2430. case e_gPub:
  2431. {
  2432. g_CurrentMode = e_gPub;
  2433.  
  2434. server_cmd("mp_forcechasecam 0")
  2435. server_cmd("mp_forcecamera 0")
  2436. server_cmd("rnr_switch 1")
  2437. server_cmd("rnr_footsteps 1")
  2438. server_cmd("mp_autoteambalance 1")
  2439. server_cmd("mp_roundtime 2.5")
  2440. server_cmd("mp_freezetime 3")
  2441. server_cmd("rnr_flash 1")
  2442. server_cmd("rnr_block_change 0")
  2443. server_cmd("rnr_training 0")
  2444. server_cmd("rnr_checkpoints 1")
  2445. server_cmd("rnr_hook 1")
  2446.  
  2447. }
  2448. case e_gCaptain:
  2449. {
  2450. g_CurrentMode = e_gCaptain;
  2451. }
  2452. }
  2453.  
  2454. RestartRound();
  2455. }
  2456. public RestartRound()
  2457. {
  2458. Survival = false;
  2459. flSidesTime[iCurrentSW] -= g_flRoundTime;
  2460. server_cmd("sv_restart 1");
  2461. }
  2462.  
  2463.  
  2464. public FwdKnifePrim( const iPlayer )
  2465. {
  2466. if( g_CurrentMode )
  2467. {
  2468. ExecuteHamB( Ham_Weapon_SecondaryAttack, iPlayer );
  2469. return HAM_SUPERCEDE;
  2470. }
  2471. return HAM_IGNORED;
  2472. }
  2473.  
  2474.  
  2475. public FwdDeployKnife( const iEntity )
  2476. {
  2477. new iClient = get_pdata_cbase( iEntity, m_pPlayer, EXTRAOFFSET_WEAPONS );
  2478.  
  2479. if(gOnOff[iClient] )
  2480. {
  2481. set_pev(iClient, pev_viewmodel, 0)
  2482. }
  2483. else
  2484. {
  2485. set_pev(iClient, pev_viewmodel, alloc_KnifeModel)
  2486. }
  2487.  
  2488. if(get_user_team(iClient) == 1 && g_CurrentMode != e_gKnife)
  2489. {
  2490. set_pdata_float( iEntity, m_flNextPrimaryAttack, 9999.0, EXTRAOFFSET_WEAPONS );
  2491. set_pdata_float( iEntity, m_flNextSecondaryAttack, 9999.0, EXTRAOFFSET_WEAPONS );
  2492. }
  2493. return HAM_IGNORED;
  2494. }
  2495.  
  2496. public Task_Hud(id, Float:Time ,Dhud, Red, Green, Blue, Float:HoldTime, const Text[], any: ... )
  2497. {
  2498. new message[128]; vformat( message, charsmax( message ), Text, 9 );
  2499. new Args[7];
  2500. Args[0] = id;
  2501. Args[1] = EncodeText(message);
  2502. Args[2] = Red
  2503. Args[3] = Green
  2504. Args[4] = Blue
  2505. Args[5] = Dhud
  2506. Args[6] = _:HoldTime
  2507. if(Time > 0.0)
  2508. set_task(Time, "Hud_Message", 89000, Args, 7)
  2509. else
  2510. Hud_Message(Args)
  2511. }
  2512.  
  2513. public Hud_Message(Params[])
  2514. {
  2515. new id, Text[128], RRR, GGG, BBB, dhud, Float:HoldTime
  2516. id = Params[0]
  2517. DecodeText(Params[1], Text, charsmax(Text))
  2518. RRR = Params[2]
  2519. GGG = Params[3]
  2520. BBB = Params[4]
  2521. dhud = Params[5]
  2522. HoldTime = Float:Params[6]
  2523.  
  2524. if(!id || is_user_connected(id))
  2525. {
  2526. if(dhud)
  2527. {
  2528. set_dhudmessage(RRR, GGG, BBB, -1.0, 0.60, 0, 0.0, HoldTime, 0.1, 0.1)
  2529.  
  2530. show_dhudmessage(id, Text)
  2531. }
  2532. else
  2533. {
  2534. set_hudmessage(RRR, GGG, BBB, -1.0, 0.60, 0, 0.0, HoldTime, 0.1, 0.1, -1);
  2535. show_hudmessage(id, Text)
  2536. }
  2537. }
  2538. }
  2539.  
  2540. // Functions
  2541. stock fnRegisterSayCmd(const szCmd[], const szShort[], const szFunc[], flags = -1, szInfo[] = "")
  2542. {
  2543. new szTemp[65], szInfoLang[65];
  2544. format(szInfoLang, 64, "%L", LANG_SERVER, szInfo);
  2545.  
  2546. format(szTemp, 64, "say /%s", szCmd);
  2547. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2548.  
  2549. format(szTemp, 64, "%s", szCmd);
  2550. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2551.  
  2552. format(szTemp, 64, "/%s", szCmd);
  2553. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2554.  
  2555.  
  2556. format(szTemp, 64, "say /%s", szShort);
  2557. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2558.  
  2559. format(szTemp, 64, "%s", szShort);
  2560. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2561.  
  2562. format(szTemp, 64, "/%s", szShort);
  2563. register_clcmd(szTemp, szFunc, flags, szInfoLang);
  2564.  
  2565. return 1;
  2566. }
  2567.  
  2568. stock EncodeText( const text[] )
  2569. {
  2570. return engfunc( EngFunc_AllocString, text )
  2571. }
  2572.  
  2573. stock DecodeText( const text, string[], const length )
  2574. {
  2575. global_get( glb_pStringBase, text, string, length )
  2576. }
  2577.  
  2578. new bool:plrSolid[MAX_PLAYERS+1]
  2579. new bool:plrRestore[MAX_PLAYERS+1]
  2580. new plrTeam[MAX_PLAYERS+1]
  2581.  
  2582. public addToFullPack(es, e, ent, host, hostflags, player, pSet)
  2583. {
  2584. if(get_pcvar_num(cvarSemiclip))
  2585. return FMRES_IGNORED;
  2586.  
  2587. if(player)
  2588. {
  2589. if(plrSolid[host] && plrSolid[ent] && plrTeam[host] == plrTeam[ent] && get_user_team(host) != 3)
  2590. {
  2591. set_es(es, ES_Solid, SOLID_NOT)
  2592. }
  2593. }
  2594.  
  2595. return FMRES_IGNORED;
  2596. }
  2597.  
  2598. FirstThink()
  2599. {
  2600. for(new i = 1; i <= g_iMaxPlayers; i++)
  2601. {
  2602. if(!is_user_alive(i))
  2603. {
  2604. plrSolid[i] = false
  2605. continue
  2606. }
  2607.  
  2608. plrTeam[i] = get_user_team(i)
  2609.  
  2610. plrSolid[i] = pev(i, pev_solid) == SOLID_SLIDEBOX ? true : false
  2611. }
  2612. }
  2613.  
  2614. public preThink(id)
  2615. {
  2616. if(get_pcvar_num(cvarSemiclip))
  2617. return FMRES_IGNORED;
  2618.  
  2619. static i, LastThink
  2620.  
  2621. if(LastThink > id)
  2622. {
  2623. FirstThink()
  2624. }
  2625. LastThink = id
  2626.  
  2627.  
  2628. if(!plrSolid[id]) return FMRES_IGNORED
  2629.  
  2630. for(i = 1; i <= g_iMaxPlayers; i++)
  2631. {
  2632. if(!plrSolid[i] || id == i) continue
  2633.  
  2634. if(plrTeam[i] == plrTeam[id])
  2635. {
  2636. set_pev(i, pev_solid, SOLID_NOT)
  2637. plrRestore[i] = true
  2638. }
  2639. }
  2640.  
  2641. return FMRES_IGNORED;
  2642. }
  2643.  
  2644. public postThink(id)
  2645. {
  2646. if(get_pcvar_num(cvarSemiclip))
  2647. return FMRES_IGNORED;
  2648.  
  2649. static i
  2650.  
  2651. for(i = 1; i <= g_iMaxPlayers; i++)
  2652. {
  2653. if(plrRestore[i])
  2654. {
  2655. set_pev(i, pev_solid, SOLID_SLIDEBOX)
  2656. plrRestore[i] = false
  2657. }
  2658. }
  2659. return FMRES_IGNORED;
  2660. }
  2661.  
  2662. public CaptainCmd(id,level,cid) {
  2663. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  2664.  
  2665. if(g_CurrentMode != e_gTraining)
  2666. return PLUGIN_HANDLED
  2667.  
  2668. g_CurrentMode = e_gCaptain;
  2669.  
  2670. new rnr_name[32]
  2671. get_user_name(id, rnr_name, charsmax(rnr_name))
  2672. new iPlayers[32], iNum;
  2673. get_players(iPlayers, iNum);
  2674.  
  2675. Captain1 = Captain2 = 0;
  2676.  
  2677. for(new i; i < iNum; i++)
  2678. {
  2679. user_silentkill(iPlayers[i]);
  2680. cs_set_user_team(iPlayers[i], 3);
  2681. }
  2682.  
  2683. //PrepareMode(e_gKnife);
  2684.  
  2685. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1choosing ^4captains^1...", rnr_tag, rnr_name);
  2686.  
  2687. CaptainMenu(id);
  2688.  
  2689. return PLUGIN_HANDLED;
  2690. }
  2691.  
  2692. public StopCaptainCmd(id,level,cid) {
  2693. if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED
  2694.  
  2695. if(g_CurrentMode == e_gMix || g_CurrentMode == e_gPaused)
  2696. return PLUGIN_HANDLED
  2697.  
  2698. new rnr_name[32]
  2699. get_user_name(id, rnr_name, charsmax(rnr_name))
  2700.  
  2701. CaptainWinner = CaptainSide = 0;
  2702. Captain1 = Captain2 = 0;
  2703. CaptainSort = false;
  2704. if(task_exists(TASK_MENUCLOSE))
  2705. remove_task(TASK_MENUCLOSE)
  2706.  
  2707. if(task_exists(TASK_PLAYERSLIST))
  2708. remove_task(TASK_PLAYERSLIST)
  2709.  
  2710. PrepareMode(e_gTraining);
  2711.  
  2712. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1stoped ^4captain mode^1...", rnr_tag, rnr_name);
  2713.  
  2714. return PLUGIN_HANDLED;
  2715. }
  2716.  
  2717. public CaptainMenu( id )
  2718. {
  2719. //Create a variable to hold the menu
  2720. new menu = menu_create( "\rLook at this Player Menu!:", "menu_handler" );
  2721.  
  2722. //We will need to create some variables so we can loop through all the players
  2723. new players[32], pnum, tempid;
  2724.  
  2725. //Some variables to hold information about the players
  2726. new szName[32], szUserId[32];
  2727.  
  2728. new callback = menu_makecallback("playermenu_callback");
  2729.  
  2730. //Fill players with available players
  2731. get_players(players, pnum);
  2732. //Start looping through all players
  2733. new items = 1;
  2734. for ( new i; i<pnum; i++ )
  2735. {
  2736. //Save a tempid so we do not re-index
  2737. tempid = players[i];
  2738.  
  2739. //Get the players name and userid as strings
  2740. get_user_name( tempid, szName, charsmax( szName ) );
  2741. //We will use the data parameter to send the userid, so we can identify which player was selected in the handler
  2742. formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid( tempid ) );
  2743. if(items && items%7 == 0)
  2744. {
  2745. items++
  2746. menu_additem( menu, "Refresh", "*", 0 );
  2747. }
  2748. if(plr_noplay[tempid] || tempid == Captain1)
  2749. {
  2750. if(plr_noplay[tempid])
  2751. add(szName, charsmax(szName), " [noplay]");
  2752. menu_additem( menu, szName, szUserId, 0, callback );
  2753. }
  2754. else menu_additem( menu, szName, szUserId, 0);
  2755.  
  2756. items++
  2757. }
  2758. items = menu_items(menu)+1;
  2759. if(items%7 != 0)
  2760. {
  2761. while(items%7 != 0)
  2762. {
  2763. items++;
  2764. menu_addblank(menu);
  2765. }
  2766. }
  2767.  
  2768. menu_additem( menu, "Refresh", "*", 0 );
  2769. //We now have all players in the menu, lets display the menu
  2770. menu_display( id, menu, 0 );
  2771. }
  2772.  
  2773.  
  2774. public playermenu_callback( id, menu, item )
  2775. {
  2776. return ITEM_DISABLED;
  2777. }
  2778.  
  2779. public menu_handler( id, menu, item )
  2780. {
  2781. //Do a check to see if they exited because menu_item_getinfo ( see below ) will give an error if the item is MENU_EXIT
  2782. if ( item == MENU_EXIT )
  2783. {
  2784. menu_destroy( menu );
  2785. return PLUGIN_HANDLED;
  2786. }
  2787.  
  2788. //now lets create some variables that will give us information about the menu and the item that was pressed/chosen
  2789. new szData[6], szName[64];
  2790. new _access, item_callback;
  2791. //heres the function that will give us that information ( since it doesnt magicaly appear )
  2792. menu_item_getinfo( menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback );
  2793. if(szData[0] == '*')
  2794. {
  2795. CaptainMenu(id);
  2796. return PLUGIN_HANDLED;
  2797. }
  2798. //Get the userid of the player that was selected
  2799. new userid = str_to_num( szData );
  2800.  
  2801. //Try to retrieve player index from its userid
  2802. new player = find_player( "k", userid ); // flag "k" : find player from userid
  2803.  
  2804. //If player == 0, this means that the player's userid cannot be found
  2805. //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 )
  2806. if ( player )
  2807. {
  2808. new szName[64];
  2809. get_user_name( player, szName, charsmax( szName ) );
  2810.  
  2811. if(!Captain1)
  2812. {
  2813. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1chosed as ^4First Captain.", rnr_tag, szName);
  2814. Captain1 = player;
  2815.  
  2816. CaptainMenu(id);
  2817. }
  2818. else
  2819. {
  2820. client_print_color(0, id, "^1[^4%s^1] ^3%s ^1chosed as ^4Second Captain^1, starting knife.", rnr_tag, szName);
  2821. Captain2 = player;
  2822.  
  2823. cs_set_user_team(Captain1, CS_TEAM_CT);
  2824. cs_set_user_team(Captain2, CS_TEAM_T);
  2825. CaptainWinner = 3;
  2826. server_cmd("sv_restart 1")
  2827. set_task(1.5, "pf_KnifeRound", id);
  2828. }
  2829. }
  2830.  
  2831. menu_destroy( menu );
  2832. return PLUGIN_HANDLED;
  2833. }
  2834.  
  2835. public captain_menu(id)
  2836. {
  2837. if(id != Captain1 && id != Captain2)
  2838. return PLUGIN_HANDLED;
  2839.  
  2840. if(id != CaptainSide)
  2841. return PLUGIN_HANDLED
  2842.  
  2843. new menu = menu_create("Select a Player:", "captainmenu_handler")
  2844. new callback = menu_makecallback("playermenu_callback");
  2845. //set_task(11.5, "menu_task", id + TASK_MENUCLOSE);
  2846.  
  2847. new players[32], pnum, tempid;
  2848. new szName[32], szTempid[10];
  2849.  
  2850. get_players(players, pnum);
  2851.  
  2852. if(pnum == 0)
  2853. {
  2854. remove_task(id+TASK_MENUCLOSE)
  2855. if(task_exists(TASK_PLAYERSLIST))
  2856. remove_task(TASK_PLAYERSLIST);
  2857. CaptainSort = false
  2858.  
  2859. client_print(0, print_chat, "%s Closing Captain Sort. Missing players.", rnr_tag);
  2860. return PLUGIN_HANDLED;
  2861. }
  2862. new totalnum = 0;
  2863. new items = 1;
  2864. for(new i; i<pnum; i++)
  2865. {
  2866. tempid = players[i];
  2867.  
  2868. if(cs_get_user_team(tempid) != CS_TEAM_SPECTATOR)
  2869. {
  2870. totalnum++;
  2871. continue;
  2872. }
  2873.  
  2874. get_user_name(tempid, szName, charsmax(szName));
  2875. num_to_str(tempid, szTempid, charsmax(szTempid));
  2876.  
  2877.  
  2878. if(items && items%7 == 0)
  2879. {
  2880. items++
  2881. menu_additem( menu, "Refresh", "*", 0 );
  2882. }
  2883. items++
  2884.  
  2885. if(plr_noplay[tempid])
  2886. {
  2887. add(szName, charsmax(szName), " [noplay]");
  2888. menu_additem( menu, szName, szTempid, 0, callback );
  2889. }
  2890. else
  2891. menu_additem( menu, szName, szTempid, 0 );
  2892. }
  2893. items = menu_items(menu)+1;
  2894. if(items%7 != 0)
  2895. {
  2896. while(items%7 != 0)
  2897. {
  2898. items++;
  2899. menu_addblank(menu);
  2900. }
  2901. }
  2902. menu_additem( menu, "Refresh", "*", 0 );
  2903. menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
  2904.  
  2905.  
  2906.  
  2907. menu_display(id, menu, 0);
  2908. return PLUGIN_HANDLED;
  2909. }
  2910.  
  2911. public captainmenu_handler(id,menu,item)
  2912. {
  2913. if(id != Captain1 && id != Captain2)
  2914. return PLUGIN_HANDLED
  2915.  
  2916. if(id != CaptainSide)
  2917. return PLUGIN_HANDLED
  2918.  
  2919. if(item == MENU_EXIT)
  2920. {
  2921. menu_display(id,menu,0)
  2922. return PLUGIN_HANDLED;
  2923. }
  2924. new data[6], szName[64];
  2925. new access, callback;
  2926. menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback);
  2927.  
  2928. if(data[0] == '*')
  2929. {
  2930. captain_menu(id)
  2931. return PLUGIN_HANDLED
  2932. }
  2933. new tempid = str_to_num(data)
  2934.  
  2935. new name[35], namec[35];
  2936. get_user_name(tempid, name, charsmax(name));
  2937. get_user_name(id, namec, charsmax(namec));
  2938.  
  2939. cs_set_user_team(tempid, cs_get_user_team(id));
  2940. client_print(0, print_chat, "%s %s choose the player %s", rnr_tag, namec, name);
  2941.  
  2942. set_cvar_num("sv_restart",1)
  2943.  
  2944. remove_task(id+TASK_MENUCLOSE)
  2945.  
  2946. new iPlayers[32],pnum
  2947. get_players(iPlayers,pnum,"h")
  2948. new bool:has_spec
  2949. new totalplayers;
  2950. for(new i; i < pnum; i++)
  2951. {
  2952. if(cs_get_user_team(iPlayers[i]) == CS_TEAM_SPECTATOR)
  2953. {
  2954. has_spec = true
  2955. }
  2956. else
  2957. {
  2958. totalplayers++;
  2959. }
  2960. }
  2961. if(!has_spec || totalplayers == 10)
  2962. {
  2963. if(task_exists(TASK_PLAYERSLIST))
  2964. remove_task(TASK_PLAYERSLIST);
  2965. CaptainSort = false;
  2966. CaptainWinner = CaptainSide = 0;
  2967. Captain1 = Captain2 = 0;
  2968.  
  2969. PrepareMode(e_gTraining);
  2970. return PLUGIN_HANDLED;
  2971. }
  2972. if(is_user_connected(Captain1) && is_user_connected(Captain2))
  2973. {
  2974. if(id == Captain1)
  2975. CaptainSide = Captain2
  2976. else
  2977. CaptainSide = Captain1
  2978. set_task(1.5,"captain_menu", CaptainSide)
  2979. }
  2980. else
  2981. {
  2982. set_task(5.0,"CheckCaptainJoin",id == Captain1 ? Captain1 : Captain2)
  2983. }
  2984. menu_destroy(menu)
  2985. return PLUGIN_HANDLED
  2986. }
  2987.  
  2988. public menu_task(id)
  2989. {
  2990. id -= TASK_MENUCLOSE
  2991.  
  2992. new players[32], pnum;
  2993. get_players(players, pnum, "h");
  2994.  
  2995. new randomnum = random(pnum)
  2996. new bool:has_spec
  2997. new totalplayers;
  2998. for(new i; i < pnum; i++)
  2999. {
  3000. if(cs_get_user_team(players[i]) == CS_TEAM_SPECTATOR)
  3001. {
  3002. has_spec = true
  3003. }
  3004. else
  3005. {
  3006. totalplayers++;
  3007. }
  3008. }
  3009. if(!has_spec || totalplayers == 10)
  3010. {
  3011. if(task_exists(TASK_PLAYERSLIST))
  3012. remove_task(TASK_PLAYERSLIST);
  3013.  
  3014. PrepareMode(e_gTraining);
  3015. CaptainSort = false;
  3016. return;
  3017. }
  3018. while(cs_get_user_team(players[randomnum]) != CS_TEAM_SPECTATOR)
  3019. {
  3020. randomnum = random(pnum)
  3021. }
  3022. if(is_user_connected(id))
  3023. {
  3024. set_cvar_num("sv_restart",1)
  3025. cs_set_user_team(players[randomnum],cs_get_user_team(id))
  3026.  
  3027. set_task(1.5, "captain_menu", id == Captain1 ? Captain2 : Captain1);
  3028. }
  3029. else
  3030. {
  3031. set_task(5.0, "CheckCaptainJoin", id == Captain1 ? Captain2 : Captain1);
  3032.  
  3033. client_print(0, print_chat, "%s Awaiting the arrival of a new Captain.", rnr_tag);
  3034. }
  3035. show_menu(id, 0, "^n", 1);
  3036. }
  3037.  
  3038. public CheckCaptainJoin(NextCaptainMenu)
  3039. {
  3040. if(is_user_connected(Captain1) && is_user_connected(Captain2))
  3041. {
  3042. set_task(1.5, "captain_menu", NextCaptainMenu)
  3043. }
  3044. else
  3045. {
  3046. set_task(5.0, "CheckCaptainJoin", NextCaptainMenu)
  3047. }
  3048. }
  3049.  
  3050. public PlayersList()
  3051. {
  3052. new iPlayers[32], iNum;
  3053. get_players(iPlayers, iNum, "h");
  3054.  
  3055. new posTR, posCT, posSPEC;
  3056. new HudTextTR[512], HudTextCT[512], HudTextSPEC[512];
  3057. new szName[38], name[38];
  3058.  
  3059. for(new i; i < iNum; i++)
  3060. {
  3061. get_user_name(iPlayers[i], szName, charsmax(szName));
  3062.  
  3063. if(iPlayers[i] == Captain1 || iPlayers[i] == Captain2)
  3064. {
  3065. formatex(name, charsmax(name), "%s [CAP]", szName);
  3066. }
  3067. else
  3068. {
  3069. name = szName;
  3070. }
  3071. if(cs_get_user_team(iPlayers[i]) == CS_TEAM_T)
  3072. {
  3073. posTR += formatex(HudTextTR[posTR], 511-posTR,"%s^n", name);
  3074. }
  3075. else if(cs_get_user_team(iPlayers[i]) == CS_TEAM_CT)
  3076. {
  3077. posCT += formatex(HudTextCT[posCT], 511-posCT, "%s^n", name);
  3078. }
  3079. else
  3080. {
  3081. posSPEC += formatex(HudTextSPEC[posSPEC], 511-posSPEC, "%s^n", name);
  3082. }
  3083. }
  3084. for(new i; i < iNum; i++)
  3085. {
  3086.  
  3087. set_hudmessage( 180, 40, 40, 0.70, 0.16, 0, 0.0, 0.2, 0.2, 0.2, -1);
  3088. ShowSyncHudMsg(iPlayers[i], SyncHud[0], "Terrorists:^n%s", HudTextTR);
  3089.  
  3090. set_hudmessage(40, 80, 150, 0.70, 0.51, 0, 0.0, 0.2, 0.2, 0.2, -1);
  3091. ShowSyncHudMsg(iPlayers[i], SyncHud[1], "Counter-Terrorist:^n%s", HudTextCT);
  3092. }
  3093. }
  3094.  
  3095. public LoadMapCFG()
  3096. {
  3097. new szMap[64]
  3098. get_mapname(szMap, 63);
  3099. new szPath[128]
  3100. get_configsdir(szPath, 127);
  3101. format(szPath, 127, "%s/rnr", szPath);
  3102. if(!dir_exists(szPath))
  3103. mkdir(szPath);
  3104. format(szPath, 127, "%s/mapcfg", szPath);
  3105. if(!dir_exists(szPath))
  3106. mkdir(szPath);
  3107.  
  3108. format(szPath, 127, "%s/%s.cfg", szPath, szMap);
  3109. if(file_exists(szPath))
  3110. {
  3111. server_cmd("exec %s", szPath);
  3112. }
  3113. else
  3114. {
  3115. server_cmd("mp_roundtime 3");
  3116. }
  3117. }
  3118.  
  3119. public bool:CheckPlayer(id)
  3120. {
  3121. new szSteam[64];
  3122. get_user_authid(id, szSteam, 63);
  3123. new szMap[64]
  3124. get_mapname(szMap, 63);
  3125. if(containi(szMap, "valkyrie") != -1)
  3126. {
  3127. return false;
  3128. }
  3129. new string[128];
  3130. new side;
  3131. new exploded[2][64]
  3132.  
  3133. new PlayersFile = fopen("addons/amxmodx/data/playerslist.ini", "r");
  3134.  
  3135. if(PlayersFile)
  3136. {
  3137. while(!feof(PlayersFile))
  3138. {
  3139. fgets(PlayersFile, string, 127)
  3140. if(containi(string, szSteam) != -1)
  3141. {
  3142. ExplodeString(exploded,2,63,string, ' ' );
  3143. side = str_to_num(exploded[1]);
  3144. break;
  3145. }
  3146. }
  3147.  
  3148. fclose(PlayersFile);
  3149. }
  3150.  
  3151. if(side == 1)
  3152. {
  3153. cs_set_user_team(id, CS_TEAM_T);
  3154. }
  3155. else if(side == 2)
  3156. {
  3157. cs_set_user_team(id, CS_TEAM_CT);
  3158. }
  3159. else
  3160. {
  3161. cs_set_user_team(id, CS_TEAM_SPECTATOR);
  3162. return false;
  3163. }
  3164.  
  3165. return true;
  3166. }
  3167.  
  3168. public SavePlayers()
  3169. {
  3170. if(file_exists("addons/amxmodx/data/playerslist.ini"))
  3171. delete_file("addons/amxmodx/data/playerslist.ini");
  3172.  
  3173. new PlayersFile = fopen("addons/amxmodx/data/playerslist.ini", "w");
  3174. new players[MAX_PLAYERS], num;
  3175. get_players(players, num, "ae", "TERRORIST");
  3176.  
  3177. for(new i = 1; i <= g_iMaxPlayers; i++)
  3178. {
  3179. if(!is_user_connected(i))
  3180. continue;
  3181.  
  3182. new szString[128];
  3183. new Steam[64]
  3184. get_user_authid(i, Steam, 63);
  3185. if(!num)
  3186. {
  3187. if(get_user_team(i) == 1)
  3188. format(szString, 127, "%s %d^r^n", Steam, 2)
  3189. else if(get_user_team(i) == 2)
  3190. format(szString, 127, "%s %d^r^n", Steam, 1)
  3191. else
  3192. format(szString, 127, "%s %d^r^n", Steam, get_user_team(i))
  3193. }
  3194. else
  3195. format(szString, 127, "%s %d^r^n", Steam, get_user_team(i))
  3196.  
  3197. fputs(PlayersFile, szString);
  3198. }
  3199.  
  3200. fclose(PlayersFile);
  3201. }
  3202.  
  3203.  
  3204. public TaskDestroyBreakables( )
  3205. {
  3206. new iEntity = -1;
  3207. while ((iEntity = find_ent_by_class(iEntity, "func_breakable" )))
  3208. {
  3209. if(entity_get_float(iEntity , EV_FL_takedamage))
  3210. {
  3211. entity_set_vector(iEntity, EV_VEC_origin, Float:{10000.0, 10000.0, 10000.0})
  3212. }
  3213. }
  3214. }
  3215.  
  3216. public Forward_SetClientListening(iReceiver, iSender, bool:bListen)
  3217. {
  3218. if(g_CurrentMode <= e_gPaused || g_CurrentMode == e_gCaptain || g_CurrentMode == e_gPub)
  3219. {
  3220. engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
  3221. forward_return(FMV_CELL, true)
  3222. return FMRES_SUPERCEDE
  3223. }
  3224.  
  3225. if(is_user_connected(iReceiver) && is_user_connected(iSender))
  3226. {
  3227. if(get_user_team(iReceiver) == get_user_team(iSender))
  3228. {
  3229. engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
  3230. forward_return(FMV_CELL, true)
  3231. return FMRES_SUPERCEDE
  3232. }
  3233. else if(get_user_team(iReceiver) != 1 && get_user_team(iReceiver) != 2 )
  3234. {
  3235. engfunc(EngFunc_SetClientListening, iReceiver, iSender, true)
  3236. forward_return(FMV_CELL, true)
  3237. return FMRES_SUPERCEDE
  3238. }
  3239. }
  3240.  
  3241. engfunc(EngFunc_SetClientListening, iReceiver, iSender, false)
  3242. forward_return(FMV_CELL, false)
  3243. return FMRES_SUPERCEDE
  3244. }
  3245.  
  3246. #define SAFETRANSFERTASK 7832
  3247.  
  3248. public safe_transfer( CsTeams:iTeam)
  3249. {
  3250. new Float:flTime
  3251. new iPlayers[ 32 ], iPlayersNum
  3252. get_players( iPlayers, iPlayersNum, "h");
  3253. for(new i = 0; i < iPlayersNum; i++)
  3254. {
  3255. new id = iPlayers[i];
  3256. if(is_user_connected(id))
  3257. {
  3258. switch(id)
  3259. {
  3260. case 1..8: flTime = 0.1;
  3261. case 9..16: flTime = 0.2;
  3262. case 17..24: flTime = 0.3;
  3263. case 25..32: flTime = 0.4;
  3264. }
  3265.  
  3266. new task_params[2];
  3267. task_params[0] = id;
  3268. task_params[1] = _:iTeam;
  3269.  
  3270. if(task_exists(SAFETRANSFERTASK+id))
  3271. remove_task(SAFETRANSFERTASK+id)
  3272.  
  3273. set_task(flTime, "task_to_team", SAFETRANSFERTASK+id, task_params, sizeof task_params);
  3274. }
  3275. }
  3276. }
  3277.  
  3278. public task_to_team( Params[] )
  3279. {
  3280. new id = Params[0];
  3281. new team = Params[1];
  3282. if(is_user_connected(id))
  3283. {
  3284. if(is_user_alive(id))
  3285. user_kill(id, 0)
  3286. if(get_user_team(id) != team)
  3287. {
  3288. cs_set_user_team(id, team);
  3289. }
  3290. }
  3291. }
  3292.  
  3293.  
  3294. public SaveState(id)
  3295. {
  3296. new temp_array[SaveData];
  3297. temp_array[save_team] = get_user_team(id);
  3298. get_user_authid(id, temp_array[SteamID], 31);
  3299. pev(id, pev_origin, temp_array[Origin]);
  3300. pev(id, pev_velocity, temp_array[Velocity]);
  3301. pev(id, pev_v_angle, temp_array[Angles]);
  3302. temp_array[Flags] = pev(id, pev_flags);
  3303. if(is_user_alive(id))
  3304. temp_array[health] = get_user_health(id);
  3305. else
  3306. temp_array[health] = 0;
  3307.  
  3308. new clip,ammo
  3309. get_user_ammo(id,CSW_FLASHBANG,clip,ammo);
  3310. temp_array[flashnum] = ammo;
  3311. get_user_ammo(id,CSW_SMOKEGRENADE,clip,ammo);
  3312. temp_array[smokenum] = ammo;
  3313. ArrayPushArray(SavedState, temp_array);
  3314. }
  3315.  
  3316. public LoadState(id, temp_array[SaveData])
  3317. {
  3318. strip_user_weapons(id)
  3319. Timer(id, SavedTime);
  3320. set_user_footsteps(id, 1);
  3321.  
  3322. set_pev(id, pev_origin, temp_array[Origin]);
  3323. set_pev(id, pev_velocity, temp_array[Velocity]);
  3324. set_pev(id, pev_angles, temp_array[Angles]);
  3325. set_pev(id, pev_fixangle, 1);
  3326. set_pev(id, pev_flags, temp_array[Flags]);
  3327. if(temp_array[health])
  3328. set_user_health(id, temp_array[health]);
  3329. else if(is_user_alive(id))
  3330. {
  3331. user_silentkill(id);
  3332. }
  3333.  
  3334. give_item(id, "weapon_knife")
  3335. if(temp_array[smokenum])
  3336. {
  3337. give_item( id, "weapon_flashbang" );
  3338. cs_set_user_bpammo( id, CSW_FLASHBANG, temp_array[flashnum] );
  3339. }
  3340. if(temp_array[smokenum])
  3341. {
  3342. give_item( id, "weapon_smokegrenade" );
  3343. cs_set_user_bpammo( id, CSW_SMOKEGRENADE, temp_array[smokenum] );
  3344. }
  3345. ArrayPushArray(SavedState, temp_array);
  3346. }
  3347.  
  3348. public cmdsavegame(id)
  3349. {
  3350. if(!(get_user_flags(id) & rnr_ACESS))
  3351. return PLUGIN_HANDLED;
  3352.  
  3353. if(g_CurrentMode != e_gMix)
  3354. {
  3355. client_print_color(id, id, "^1[^4%s^1] Game state can be ^4saved ^1only on live match.", rnr_tag);
  3356. return PLUGIN_HANDLED;
  3357. }
  3358.  
  3359. new bool:exists = true;
  3360. static temp_array[SaveData];
  3361. while(exists)
  3362. {
  3363. exists = false;
  3364. new isize = ArraySize(SavedState)
  3365. for(new i = 0; i < isize; i++)
  3366. {
  3367. ArrayGetArray(SavedState, i, temp_array);
  3368. if(find_player("c", temp_array[SteamID]))
  3369. {
  3370. exists = true;
  3371. ArrayDeleteItem(SavedState, i);
  3372. break;
  3373. }
  3374. }
  3375. }
  3376. GameSaved = true;
  3377.  
  3378. new players[MAX_PLAYERS], pnum;
  3379. get_players(players, pnum);
  3380.  
  3381. SavedTime = (get_cvar_num("mp_roundtime")*60)-floatround(get_gametime()-StartRoundTime);
  3382.  
  3383. for(new i = 0 ; i < pnum; i++ )
  3384. {
  3385. new plr = players[i];
  3386. if(get_user_team(plr) == 1 || get_user_team(plr) == 2)
  3387. SaveState(plr);
  3388. else
  3389. continue;
  3390. }
  3391. new szName[128]
  3392. get_user_name(id, szName, charsmax(szName))
  3393. client_print_color(0, id, "^1[^4%s^1] ^3%s ^4saved gamestate!", rnr_tag, szName);
  3394.  
  3395. return PLUGIN_HANDLED;
  3396. }
  3397.  
  3398. public cmdloadgame(id)
  3399. {
  3400. if(!(get_user_flags(id) & rnr_ACESS))
  3401. return PLUGIN_HANDLED;
  3402.  
  3403. if(!GameSaved)
  3404. {
  3405. client_print_color(id, id, "^1[^4%s^1] Nothing to load... (^4Game was not saved^1)", rnr_tag);
  3406. return PLUGIN_HANDLED;
  3407. }
  3408.  
  3409. if(task_exists(71234))
  3410. remove_task(71234);
  3411.  
  3412. SavedFreezeTime = get_cvar_num("mp_freezetime");
  3413. server_cmd("sv_restart 1");
  3414. server_cmd("mp_freezetime 0");
  3415. set_task(2.0, "loadgame", 71234);
  3416. new szName[128]
  3417. get_user_name(id, szName, charsmax(szName))
  3418. client_print_color(0, id, "^1[^4%s^1] ^3%s ^4loaded ^1saved game!", rnr_tag, szName);
  3419.  
  3420. return PLUGIN_HANDLED;
  3421. }
  3422. public loadgame()
  3423. {
  3424. new players[MAX_PLAYERS], pnum;
  3425. get_players(players, pnum);
  3426. server_cmd("mp_freezetime %d", SavedFreezeTime);
  3427. loadgamefunc(1);
  3428.  
  3429. for(new i = 0 ; i < pnum; i++ )
  3430. {
  3431. new id = players[i];
  3432. if(get_user_team(id) == 1 || get_user_team(id) == 2)
  3433. {
  3434. Timer(id, 10);
  3435. set_user_freeze(id, 1);
  3436. }
  3437. }
  3438.  
  3439. set_task(10.0, "loadgamefunc", 0);
  3440.  
  3441.  
  3442.  
  3443. return PLUGIN_HANDLED;
  3444. }
  3445.  
  3446. public loadgamefunc(preload)
  3447. {
  3448. if(task_exists(ROUNDENDTASK))
  3449. remove_task(ROUNDENDTASK);
  3450.  
  3451. if(!preload)
  3452. set_task(float(SavedTime), "TTWin", ROUNDENDTASK);
  3453. new players[MAX_PLAYERS], pnum, anum;
  3454. get_players(players, anum, "a");
  3455. get_players(players, pnum);
  3456. new bool:found[MAX_PLAYERS+1], foundnum;
  3457. static sz_steam[32]
  3458. static temp_array[SaveData];
  3459. new isize = ArraySize(SavedState)
  3460. for(new i = 0 ; i < pnum; i++ )
  3461. {
  3462. new id = players[i];
  3463. if(get_user_team(id) != 1 && get_user_team(id) != 2)
  3464. continue;
  3465.  
  3466. set_user_freeze(id, 0);
  3467. get_user_authid(id, sz_steam, 31);
  3468. for(new i = 0; i < isize; i++)
  3469. {
  3470. ArrayGetArray(SavedState, i, temp_array);
  3471. if(equal(temp_array[SteamID], sz_steam))
  3472. {
  3473. LoadState(id, temp_array);
  3474. found[id] = true;
  3475. foundnum++;
  3476. break;
  3477. }
  3478. }
  3479. /*client_print(0, print_chat, "%d", index);
  3480. if(index != -1)
  3481. {
  3482. ArrayGetArray(SavedState, index, temp_array);
  3483. LoadState(id, temp_array);
  3484. found[id] = true;
  3485. foundnum++;
  3486. }*/
  3487. }
  3488. if(foundnum < anum)
  3489. {
  3490. for(new i = 0; i < isize; i++)
  3491. {
  3492. if(foundnum >= anum)
  3493. break;
  3494.  
  3495. ArrayGetArray(SavedState, i, temp_array);
  3496. if(find_player("c", temp_array[SteamID]))
  3497. continue
  3498. else
  3499. {
  3500. for(new i = 0 ; i < pnum; i++ )
  3501. {
  3502. new id = players[i];
  3503. if(found[id])
  3504. break;
  3505. else if(temp_array[save_team] == get_user_team(id))
  3506. {
  3507. found[id] = true;
  3508. LoadState(id, temp_array);
  3509. foundnum++;
  3510. }
  3511. }
  3512. }
  3513. }
  3514. }
  3515. }
  3516.  
  3517.  
  3518. stock set_user_freeze(client,freeze){
  3519. new iFlag = pev(client,pev_flags);
  3520. set_pev(client,pev_flags,freeze ? iFlag | FL_FROZEN:iFlag & ~FL_FROZEN);
  3521. }
  3522.  
  3523.  
  3524. public Timer(id, Time)
  3525. {
  3526. message_begin(MSG_ONE, g_msg_showtimer, _, id)
  3527. message_end()
  3528.  
  3529. message_begin(MSG_ONE, g_msg_roundtime, _, id)
  3530. write_short(Time+1)
  3531. message_end()
  3532. }
  3533.  
  3534.  
  3535.  
  3536. public RingTask()
  3537. {
  3538. static Ent1, Ent2;
  3539.  
  3540. if(!Ent1)
  3541. {
  3542. Ent1 = fm_create_entity("info_target");
  3543. fm_entity_set_model(Ent1, "sprites/laserbeam.spr");
  3544. fm_set_rendering(Ent1, .render = kRenderTransAlpha, .amount = 0);
  3545.  
  3546. }
  3547.  
  3548. if(!Ent2)
  3549. {
  3550. Ent2 = fm_create_entity("info_target");
  3551. fm_entity_set_model(Ent2, "sprites/laserbeam.spr");
  3552. fm_set_rendering(Ent2, .render = kRenderTransAlpha, .amount = 0);
  3553. }
  3554.  
  3555. new Float:NewOrigin[3];
  3556. NewOrigin[1] = 0.0;
  3557. NewOrigin[2] = 50.0;
  3558. NewOrigin[0] = RingWidth;
  3559. set_pev(Ent1, pev_origin, NewOrigin);
  3560. NewOrigin[0] = -RingWidth;
  3561. set_pev(Ent2, pev_origin, NewOrigin);
  3562. if(RingWidth > 150.0)
  3563. {
  3564. RingWidth -= 5.0;
  3565. make_tracer(Ent1, Ent2, 1);
  3566. }
  3567. else
  3568. {
  3569. make_tracer(Ent1, Ent2, 1);
  3570. }
  3571.  
  3572. new Float:tempmax[3];
  3573. new Float:tempmin[3];
  3574. tempmin[0] = tempmin[1] = -RingWidth;
  3575. tempmin[2] = -1000.0;
  3576. tempmax[0] = tempmax[1] = RingWidth;
  3577. tempmax[2] = 1000.0;
  3578. new players[MAX_PLAYERS], pnum;
  3579. get_players(players, pnum, "a");
  3580. for(new i = 0; i < pnum; i++)
  3581. {
  3582. new id = players[i];
  3583. new Float:origin[3];
  3584. if(is_user_alive(id))
  3585. {
  3586. pev(id, pev_origin, origin);
  3587. if(get_distance_f(Float:{0.0, 0.0, 0.0}, origin) > RingWidth)
  3588. {
  3589. ExecuteHam(Ham_TakeDamage, id, 0, 0, 2.0, DMG_GENERIC);
  3590. }
  3591. }
  3592. }
  3593.  
  3594. return PLUGIN_HANDLED
  3595.  
  3596. }
  3597.  
  3598. public make_tracer(first, sec, life)
  3599. {
  3600. new red, green, blue;
  3601. dynamicColor(-2300, 0, -RingWidth, red, green, blue);
  3602. message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  3603. write_byte(TE_BEAMRING)
  3604. write_short(first) // start
  3605. write_short( sec) // end
  3606. write_short(m_spriteTexture) // sprite
  3607. write_byte(0) // starting frame
  3608. write_byte(0) // rate
  3609. write_byte(life) // life
  3610. write_byte(100) // widght
  3611. write_byte(0) // noise
  3612. write_byte(red) // red
  3613. write_byte(green); // green
  3614. write_byte(blue) // blue
  3615. write_byte(255) // bright
  3616. write_byte(5) //
  3617. message_end();
  3618. }
  3619.  
  3620.  
  3621. stock dynamicColor(min,max,Float:value,&red,&green,&blue)
  3622. { //Don`t launch with max ~= min
  3623. #define MaxC 255
  3624. #define MinC 0
  3625. #define DtC 50
  3626.  
  3627. if (value>=max)
  3628. {
  3629. red=MaxC;
  3630. green=MinC;
  3631. blue=MinC;
  3632. return;
  3633. }
  3634. else if (value<=min)
  3635. {
  3636. red=MinC;
  3637. green=MinC;
  3638. blue=MaxC;
  3639. return;
  3640. }
  3641.  
  3642. new Float:step = (max-min)/4.0;
  3643. new Float:dt = value-min;
  3644.  
  3645. if (dt <= step)
  3646. {
  3647. red = MinC;
  3648. green = floatround(dt*(DtC/step));
  3649. blue = MaxC;
  3650. }
  3651. else if (dt-=step, dt <= step)
  3652. {
  3653. red = MinC;
  3654. green = MaxC;
  3655. blue = floatround((step-dt)*(DtC/step));
  3656. }
  3657. else if (dt-=step, dt <= step)
  3658. {
  3659. red = floatround(dt*(DtC/step));
  3660. green = MaxC;
  3661. blue = MinC;
  3662. }
  3663. else
  3664. {
  3665. dt-=step;
  3666. red = MaxC;
  3667. green = floatround((step-dt)*(DtC/step));
  3668. blue = MinC;
  3669. }
  3670. return;
  3671. }
  3672. // Avererage 25
  3673. // 1000 / 1300
  3674. // +32.5 / +17.5
  3675. // -17.5 / -32.5
  3676. // 16.25 / 8.75
  3677. #define DEF_RATIO 25.0
  3678.  
  3679.  
  3680. public plugin_end() {
  3681. if(iFwd_MixFinished)
  3682. DestroyForward(iFwd_MixFinished);
  3683. }
  3684.  
  3685.  
  3686. public ach_add_progress(id, ach)
  3687. {
  3688.  
  3689. }
  3690.  
  3691. /*
  3692. public Announce ( Type )
  3693. {
  3694. new players[MAX_PLAYERS], pnum;
  3695. get_players(players, pnum);
  3696. static CTPlayers[512]
  3697. static TTPlayers[512]
  3698. new iLenTT, iLenCT
  3699. for(new i = 0; i < pnum; i++)
  3700. {
  3701. new id = players[i];
  3702. if(get_user_team(id) != 1 && get_user_team(id) != 2)
  3703. continue
  3704.  
  3705. new sz_name[64]
  3706. get_user_name(id, sz_name, 63);
  3707. if(get_user_team(id) == 1)
  3708. {
  3709. iLenTT += format(TTPlayers[iLenTT], charsmax(TTPlayers)-iLenTT, "%s [%d] ", sz_name, iPts[id]);
  3710. }
  3711. else
  3712. {
  3713. iLenCT += format(CTPlayers[iLenCT], charsmax(CTPlayers)-iLenCT, "%s [%d] ", sz_name, iPts[id]);
  3714. }
  3715. }
  3716. static Message[1024];
  3717. new sz_mapname[64]
  3718. get_mapname(sz_mapname, 63);
  3719. switch( Type )
  3720. {
  3721. case 1:
  3722. {
  3723. format(Message, charsmax(Message), "Микс начался! Карта: %s^n Seekers :%s ^n vs ^n Hiders: %s", sz_mapname, CTPlayers, TTPlayers);
  3724. send_message(Message, strlen(Message));
  3725. }
  3726. case 2:
  3727. {
  3728. format(Message, charsmax(Message), "Микс закончился со счетом %d %d ! Карта: %s", g_iScore[0], g_iScore[1], sz_mapname);
  3729. send_message(Message, strlen(Message));
  3730. }
  3731. case 3:
  3732. {
  3733. format(Message, charsmax(Message), "Серверу нужны игроки! Карта: %s (%d Игроков на сервере) ^n steam://connect/37.230.210.230:27015", sz_mapname, pnum);
  3734. send_message(Message, strlen(Message));
  3735. }
  3736. }
  3737.  
  3738.  
  3739. }*/
  3740.  
  3741. public fnConvertTime( Float:time, convert_time[], len )
  3742. {
  3743. new sTemp[24];
  3744. new Float:fSeconds = time, iMinutes;
  3745.  
  3746. iMinutes = floatround( fSeconds / 60.0, floatround_floor );
  3747. fSeconds -= iMinutes * 60.0;
  3748. new intpart = floatround( fSeconds, floatround_floor );
  3749. new Float:decpart = (fSeconds - intpart) * 100.0;
  3750. intpart = floatround( decpart );
  3751.  
  3752. formatex( sTemp, charsmax( sTemp ), "%02i:%02.0f.%d", iMinutes, fSeconds, intpart );
  3753.  
  3754.  
  3755. formatex( convert_time, len, sTemp );
  3756.  
  3757. return(PLUGIN_HANDLED);
  3758. }
  3759.  
  3760. const INT_BYTES = 4
  3761. const BYTE_BITS = 8
  3762.  
  3763. set_pdata_char(ent, charbased_offset, value, intbase_linuxdiff = 5)
  3764. {
  3765. value &= 0xFF;
  3766. new int_offset_value = get_pdata_int(ent, charbased_offset / INT_BYTES, intbase_linuxdiff);
  3767. new bit_decal = (charbased_offset % INT_BYTES) * BYTE_BITS;
  3768. int_offset_value &= ~(0xFF<<bit_decal); // clear byte
  3769. int_offset_value |= value<<bit_decal;
  3770. set_pdata_int(ent, charbased_offset / INT_BYTES, int_offset_value, intbase_linuxdiff);
  3771. return 1;
  3772. }
  3773.  
  3774. stock ExplodeString( p_szOutput[][], p_nMax, p_nSize, p_szInput[], p_szDelimiter )
  3775. {
  3776. new nIdx = 0, l = strlen( p_szInput );
  3777. new nLen = (1 + copyc( p_szOutput[nIdx], p_nSize, p_szInput, p_szDelimiter ) );
  3778. while ( (nLen < l) && (++nIdx < p_nMax) )
  3779. nLen += (1 + copyc( p_szOutput[nIdx], p_nSize, p_szInput[nLen], p_szDelimiter ) );
  3780. return(nIdx);
  3781. }
  3782.  
  3783.  
  3784. public Enable_SlowMo()
  3785. {
  3786. g_iScore[0] = 0;
  3787. g_iScore[1] = 0;
  3788. g_iSecondHalf = false;
  3789. SlowMo = true;
  3790. }
  3791.  
  3792. public Disable_SlowMo()
  3793. {
  3794. //RemoveBlockControl(RC_CheckWinConditions,g_pCheckWinHook);
  3795. PrepareMode(e_gTraining);
  3796. SlowMo = false;
  3797. }
  3798. stock client_pirnt_color(const id, const input[], any:...)
  3799. {
  3800. new count = 1, players[32]
  3801. static msg[191]
  3802. vformat(msg, 190, input, 3)
  3803.  
  3804. replace_all(msg, 190, "!g", "^4")
  3805. replace_all(msg, 190, "!y", "^1")
  3806. replace_all(msg, 190, "!team", "^3")
  3807.  
  3808. if (id) players[0] = id; else get_players(players, count, "ch")
  3809. {
  3810. for (new i = 0; i < count; i++)
  3811. {
  3812. if (is_user_connected(players[i]))
  3813. {
  3814. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  3815. write_byte(players[i]);
  3816. write_string(msg);
  3817. message_end();
  3818. }
  3819. }
  3820. }
  3821. }
  3822. /*
  3823. public OnPM_move(move,server)
  3824. {
  3825. if(SlowMo)
  3826. {
  3827. new OrpheuStruct:cmd = OrpheuStruct:OrpheuGetParamStructMember( 1 , "cmd" );
  3828. set_uc(_:cmd, UC_Msec, 2); //working (like plugin slow-mo)
  3829. }
  3830. }
  3831. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement