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