Advertisement
Guest User

DR5

a guest
Jan 30th, 2015
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.69 KB | None | 0 0
  1. /* ----------------------------------------
  2. Deathrun Manager V5.0 !
  3.  
  4. (c) CsOutStanding.Com
  5. Plugin Creator: CSO Team (Sprit3x vs Cristi.C vs xPaw vs Gabriel963)
  6. Creat pentru server-ul : DR.CsOutStanding.Com
  7. *Optimizare code.
  8. *Plugin-uri: Block jointeam , team join inclus , amx_showip , resetscore , stuck , name replacer, no wall damage
  9. --------------------------------------- */
  10.  
  11. #include < amxmodx >
  12. #include < engine >
  13. #include < cstrike >
  14. #include < fun >
  15. #include < fakemeta >
  16. #include < hamsandwich >
  17. #include < ip >
  18. #include < dhudmessage >
  19.  
  20. //#pragma semicolon 1
  21.  
  22. // Comment this line if you do not want to have fake player !
  23. // #define FAKE_PLAYER
  24.  
  25. // Bot name
  26. #if defined FAKE_PLAYER
  27. new const g_szBotName[ ] = "DeathRun v5.0";
  28. #endif
  29.  
  30. // Messages prefix
  31. new const g_szPrefix[ ] = "[DeathRun v5.0]";
  32.  
  33. // Global Variables
  34. new bool:g_bHauntedHouse, bool:g_bGamerFun, bool:g_bRandromized, bool:g_bStarting, bool:g_bFirstRound;
  35. new bool:g_bEnabled, bool:g_bRestart, bool:g_bConnected[ 33 ];
  36.  
  37. new g_pRemoveBuyZone, g_pHideHuds, g_pBlockMoney, g_pLifeSystem, g_pSvRestart, g_pAutoBalance, g_pLimitTeams;
  38. new g_pNoFallDmg, g_pGameName, g_pToggle, g_pBlockSpray, g_pBlockRadio, g_pSemiclip, g_pGiveUsp, g_pBlockKill;
  39.  
  40. new g_iMsgHideWeapon, g_iMsgCrosshair, g_iMsgMoney, g_iMsgTeamInfo, g_iMsgSayText;
  41. new g_iMaxplayers, g_iHudSync, g_iHudSync2, g_iLastTerr, g_iThinker;
  42. new g_iSemiClip[ 33 ], g_Lifes[ 33 ];
  43.  
  44. // UnStuck
  45. new stuck[33]
  46.  
  47. new cvar[3]
  48.  
  49. new const Float:size[][3] = {
  50. {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
  51. {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
  52. {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
  53. {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
  54. {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
  55. }
  56.  
  57. // Name Replacer
  58. new const g_names[][] =
  59. {
  60. "RCPlayer",
  61. "www.",
  62. ".com",
  63. ".ro",
  64. ".net",
  65. "ecila",
  66. ".org",
  67. ".info",
  68. ".ru",
  69. ".ee",
  70. ":27",
  71. "<warrior",
  72. "warrior player",
  73. "watf",
  74. "~",
  75. "pgl",
  76. "[antimat]",
  77. "no swear",
  78. "jucator de",
  79. "leagane",
  80. ".ua",
  81. "blackdevil",
  82. "reddevil",
  83. "indungi",
  84. "(1)",
  85. "(2)",
  86. "(3)",
  87. "[.]com",
  88. "[.]ro",
  89. "kgb player",
  90. "empty",
  91. "unnamed",
  92. "heker",
  93. "DR~",
  94. "anzo",
  95. "svx-player",
  96. "89."
  97. }
  98. new g_sizeof_names = sizeof g_names
  99.  
  100. new const g_names_new[][] =
  101. {
  102. "Name1",
  103. "Name2",
  104. "Name3"
  105. }
  106. new g_sizeof_names_new = sizeof g_names_new - 1
  107.  
  108. new g_filter_chars[32]
  109. //new g_sizeof_filter = sizeof g_filter_chars
  110.  
  111. new g_names_changed = 1
  112.  
  113. // No Wall Damage
  114. new toggle_plugin, toggle_fade;
  115. new g_msgscreenfade;
  116.  
  117.  
  118.  
  119. #if defined FAKE_PLAYER
  120. new g_iFakeplayer;
  121. #endif
  122.  
  123. // Macros
  124. #if cellbits == 32
  125. #define OFFSET_BZ 235
  126. #else
  127. #define OFFSET_BZ 268
  128. #endif
  129.  
  130. // Colorchat
  131. enum Color {
  132. NORMAL = 1,
  133. GREEN,
  134. RED,
  135. BLUE
  136. };
  137.  
  138. new TeamName[ ][ ] = {
  139. "",
  140. "TERRORIST",
  141. "CT",
  142. "SPECTATOR"
  143. };
  144.  
  145. enum
  146. {
  147. TEAM_NONE = 0,
  148. TEAM_T,
  149. TEAM_CT,
  150. TEAM_SPEC,
  151.  
  152. MAX_TEAMS
  153. };
  154. new const g_cTeamChars[MAX_TEAMS] =
  155. {
  156. 'U',
  157. 'T',
  158. 'C',
  159. 'S'
  160. };
  161. new const g_sTeamNums[MAX_TEAMS][] =
  162. {
  163. "0",
  164. "1",
  165. "2",
  166. "3"
  167. };
  168. new const g_sClassNums[MAX_TEAMS][] =
  169. {
  170. "1",
  171. "2",
  172. "3",
  173. "4"
  174. };
  175.  
  176. // Old Style Menus
  177. stock const FIRST_JOIN_MSG[] = "#Team_Select";
  178. stock const FIRST_JOIN_MSG_SPEC[] = "#Team_Select_Spect";
  179. stock const INGAME_JOIN_MSG[] = "#IG_Team_Select";
  180. stock const INGAME_JOIN_MSG_SPEC[] = "#IG_Team_Select_Spect";
  181. const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC);
  182.  
  183. // New VGUI Menus
  184. stock const VGUI_JOIN_TEAM_NUM = 2;
  185.  
  186. stock print_chatColorDeathrun(const id,const input[], any:...)
  187. {
  188. new msg[191], players[32], count = 1;
  189. vformat(msg,190,input,3);
  190. replace_all(msg,190,"\g","^4");// green
  191. replace_all(msg,190,"\n","^1");// normal
  192. replace_all(msg,190,"\t","^3");// team
  193.  
  194. if (id) players[0] = id; else get_players(players,count,"ch");
  195. for (new i=0;i<count;i++)
  196. if (is_user_connected(players[i]))
  197. {
  198. message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
  199. write_byte(players[i]);
  200. write_string(msg);
  201. message_end();
  202. }
  203. }
  204.  
  205. new g_iTeam[33];
  206. new g_iPlayers[MAX_TEAMS];
  207.  
  208. new tjm_join_team;
  209. new tjm_switch_team;
  210. new tjm_class[MAX_TEAMS];
  211. new tjm_block_change;
  212.  
  213. // =======================================================================================
  214.  
  215. public plugin_init( ) {
  216. new const VERSION[ ] = "v4.2";
  217.  
  218. register_plugin( "Deathrun Manager", VERSION, "xPaw vs CSO" );
  219.  
  220. g_pToggle = register_cvar( "deathrun_toggle", "1" );
  221. g_pBlockSpray = register_cvar( "deathrun_spray", "1" );
  222. g_pBlockRadio = register_cvar( "deathrun_radio", "1" );
  223. g_pBlockKill = register_cvar( "deathrun_blockkill", "1" );
  224. g_pBlockMoney = register_cvar( "deathrun_blockmoney", "1" );
  225. g_pSemiclip = register_cvar( "deathrun_semiclip", "1" );
  226. g_pGiveUsp = register_cvar( "deathrun_giveusp", "1" );
  227. g_pHideHuds = register_cvar( "deathrun_hidehud", "1" );
  228. g_pLifeSystem = register_cvar( "deathrun_lifesystem", "0" );
  229. g_pGameName = register_cvar( "deathrun_gamename", "1" );
  230. g_pNoFallDmg = register_cvar( "deathrun_terrnfd", "1" );
  231. g_pRemoveBuyZone = register_cvar( "deathrun_removebz", "1" );
  232. Licence ();
  233.  
  234. //Bloock jointeam
  235. register_concmd( "jointeam", "cmdBlock", _, _ );
  236.  
  237. // =======================================================================================
  238.  
  239. register_clcmd("amx_showip", "cmdShowIp", -1);
  240.  
  241. // =======================================================================================
  242.  
  243. // Team Auto Join
  244.  
  245. register_event("TeamInfo", "event_TeamInfo", "a");
  246. register_message(get_user_msgid("ShowMenu"), "message_ShowMenu");
  247. register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu");
  248. tjm_join_team = register_cvar("tjm_join_team", "2");
  249. tjm_switch_team = register_cvar("tjm_switch_team", "0");
  250. tjm_class[TEAM_T] = register_cvar("tjm_class_t", "4");
  251. tjm_class[TEAM_CT] = register_cvar("tjm_class_ct", "2");
  252. tjm_block_change = register_cvar("tjm_block_change", "1");
  253.  
  254. // Team Auto Join
  255.  
  256. // Lets get map name...
  257. new szMapName[ 64 ];
  258. get_mapname( szMapName, 63 );
  259.  
  260. if( contain( szMapName, "deathrun_" ) != -1 ) {
  261. set_pcvar_num( g_pToggle, 1 );
  262.  
  263. if( contain( szMapName, "hauntedhouse" ) != -1 )
  264. g_bHauntedHouse = true;
  265. else {
  266. g_bHauntedHouse = false;
  267.  
  268. if( equal( szMapName, "deathrun_gamerfun" ) )
  269. g_bGamerFun = true;
  270. else
  271. g_bGamerFun = false;
  272. }
  273. } else
  274. set_pcvar_num( g_pToggle, 0 );
  275.  
  276. g_pSvRestart = get_cvar_pointer( "sv_restart" );
  277. g_pAutoBalance = get_cvar_pointer( "mp_autoteambalance" );
  278. g_pLimitTeams = get_cvar_pointer( "mp_limitteams" );
  279.  
  280. register_cvar( "deathrun_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
  281. set_cvar_string( "deathrun_version", VERSION );
  282.  
  283. // Registering Language file
  284. register_dictionary( "deathrun.txt" );
  285.  
  286. // Logging Events
  287. register_logevent( "EventRoundStart", 2, "1=Round_Start" );
  288. register_logevent( "EventRandromize", 2, "1=Round_End" );
  289. register_event( "SendAudio", "EventTerrsWin", "a", "2&%!MRAD_terwin" );
  290. register_event( "TextMsg", "EventRandromize", "a", "2&#Game_w" );
  291. register_event( "DeathMsg", "EventDeath", "a");
  292. register_event( "Money", "EventMoney", "b" );
  293. register_event( "ResetHUD", "EventResetHud", "be" );
  294.  
  295. g_bFirstRound = true;
  296. g_iMaxplayers = get_maxplayers( );
  297. g_iMsgHideWeapon = get_user_msgid( "HideWeapon" );
  298. g_iMsgCrosshair = get_user_msgid( "Crosshair" );
  299. g_iMsgMoney = get_user_msgid( "Money" );
  300. g_iMsgSayText = get_user_msgid( "SayText" );
  301. g_iMsgTeamInfo = get_user_msgid( "TeamInfo" );
  302.  
  303. g_iHudSync = CreateHudSyncObj( );
  304. g_iHudSync2 = CreateHudSyncObj( );
  305.  
  306. if( get_pcvar_num( g_pToggle ) ) {
  307. RegisterHam( Ham_TakeDamage, "player", "FwdHamPlayerDamage" );
  308. RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn", 1 );
  309. register_forward( FM_ClientKill, "FwdClientKill" );
  310. register_impulse( 201, "FwdImpulse_201" );
  311.  
  312. if( get_pcvar_num( g_pGameName ) )
  313. register_forward( FM_GetGameDescription, "FwdGameDesc" );
  314.  
  315. register_clcmd( "say /lifes", "CmdShowlifes" );
  316. register_clcmd( "say /lives", "CmdShowlifes" );
  317.  
  318. register_clcmd( "radio1", "CmdRadio" );
  319. register_clcmd( "radio2", "CmdRadio" );
  320. register_clcmd( "radio3", "CmdRadio" );
  321.  
  322. // Resetscore
  323. register_clcmd("say /resetscore", "cmdReset");
  324. register_clcmd("amx_resetscore", "cmdReset");
  325. register_clcmd("amx_rs", "cmdReset");
  326. register_clcmd("say /rs", "cmdReset");
  327. register_clcmd("say_team /resetscore", "cmdReset");
  328. register_clcmd("say_team /rs", "cmdReset");
  329.  
  330. // UnStuck
  331. cvar[0] = register_cvar("amx_autounstuck","1")
  332. cvar[1] = register_cvar("amx_autounstuckeffects","1")
  333. cvar[2] = register_cvar("amx_autounstuckwait","7")
  334. set_task(0.1,"checkstuck",0,"",0,"b")
  335.  
  336. //Name Replacer
  337. formatex(g_filter_chars, 31, " ~`@#$%&*()-_=+\|[{]};',<>/?") //^".
  338.  
  339. // No Wall Damage
  340. RegisterHam( Ham_TakeDamage, "player", "fw_takedamage" );
  341.  
  342. toggle_plugin = register_cvar( "nowalldamage", "1" );
  343. toggle_fade = register_cvar( "nowalldamage_fade", "3" );
  344.  
  345. g_msgscreenfade = get_user_msgid( "ScreenFade" );
  346.  
  347. // Terrorist Check
  348. g_iThinker= create_entity( "info_target" );
  349.  
  350. if( is_valid_ent( g_iThinker ) ) {
  351. entity_set_string( g_iThinker, EV_SZ_classname, "DeathrunThinker" );
  352. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 20.0 );
  353.  
  354. g_bRestart = true;
  355.  
  356. // First think will happen in 20.0, Restart will be done there.
  357.  
  358. register_think( "DeathrunThinker", "FwdThinker" );
  359. } else {
  360. //set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
  361.  
  362. // Lets make restart after 20 seconds from map start.
  363. set_task( 20.0, "RestartRound" );
  364. }
  365.  
  366. if( get_pcvar_num( g_pRemoveBuyZone ) ) {
  367. register_message( get_user_msgid( "StatusIcon" ), "MsgStatusIcon" ); // BuyZone Icon
  368.  
  369. // Remove buyzone on map
  370. remove_entity_name( "info_map_parameters" );
  371. remove_entity_name( "func_buyzone" );
  372.  
  373. // Create own entity to block buying
  374. new iEntity = create_entity( "info_map_parameters" );
  375.  
  376. DispatchKeyValue( iEntity, "buying", "3" );
  377. DispatchSpawn( iEntity );
  378. }
  379.  
  380. if( get_pcvar_num( g_pSemiclip ) ) {
  381. register_forward( FM_StartFrame, "FwdStartFrame", 0 );
  382. register_forward( FM_AddToFullPack, "FwdFullPack", 1 );
  383. }
  384.  
  385. g_bEnabled = true;
  386.  
  387. #if defined FAKE_PLAYER
  388. new iEntity, iCount;
  389.  
  390. while( ( iEntity = find_ent_by_class( iEntity, "info_player_deathmatch" ) ) > 0 )
  391. if( iCount++ > 1 )
  392. break;
  393.  
  394. if( iCount <= 1 )
  395. g_iFakeplayer = -1;
  396.  
  397. set_task( 5.0, "UpdateBot" );
  398.  
  399. register_message( get_user_msgid( "DeathMsg" ), "MsgDeathMsg" );
  400. #endif
  401. } else
  402. g_bEnabled = false;
  403. }
  404.  
  405. // FAKEPLAYER
  406. ///////////////////////////////////////////
  407. #if defined FAKE_PLAYER
  408. public UpdateBot( ) {
  409. if( g_iFakeplayer == -1 )
  410. return;
  411.  
  412. new id = find_player( "i" );
  413.  
  414. if( !id ) {
  415. id = engfunc( EngFunc_CreateFakeClient, g_szBotName );
  416. if( pev_valid( id ) ) {
  417. engfunc( EngFunc_FreeEntPrivateData, id );
  418. dllfunc( MetaFunc_CallGameEntity, "player", id );
  419. set_user_info( id, "rate", "3500" );
  420. set_user_info( id, "cl_updaterate", "25" );
  421. set_user_info( id, "cl_lw", "1" );
  422. set_user_info( id, "cl_lc", "1" );
  423. set_user_info( id, "cl_dlmax", "128" );
  424. set_user_info( id, "cl_righthand", "1" );
  425. set_user_info( id, "_vgui_menus", "0" );
  426. set_user_info( id, "_ah", "0" );
  427. set_user_info( id, "dm", "0" );
  428. set_user_info( id, "tracker", "0" );
  429. set_user_info( id, "friends", "0" );
  430. set_user_info( id, "*bot", "1" );
  431. set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FAKECLIENT );
  432. set_pev( id, pev_colormap, id );
  433.  
  434. new szMsg[ 128 ];
  435. dllfunc( DLLFunc_ClientConnect, id, g_szBotName, "127.0.0.1", szMsg );
  436. dllfunc( DLLFunc_ClientPutInServer, id );
  437.  
  438. cs_set_user_team( id, CS_TEAM_T );
  439. ExecuteHamB( Ham_CS_RoundRespawn, id );
  440.  
  441. set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
  442. set_pev( id, pev_solid, SOLID_NOT );
  443. dllfunc( DLLFunc_Think, id );
  444.  
  445. g_iFakeplayer = id;
  446. }
  447. }
  448. }
  449.  
  450. public MsgDeathMsg( const iMsgId, const iMsgDest, const id ) {
  451. if( get_msg_arg_int( 2 ) == g_iFakeplayer )
  452. return PLUGIN_HANDLED;
  453.  
  454. return PLUGIN_CONTINUE;
  455. }
  456. #endif
  457.  
  458. // NEW TERRORIST
  459. ///////////////////////////////////////////
  460. public EventRandromize( ) {
  461. if( !g_bEnabled || g_bFirstRound || g_bRandromized )
  462. return PLUGIN_CONTINUE;
  463.  
  464. g_bRandromized = true;
  465.  
  466. new i, iPlayers[ 32 ], iNum, iPlayer;
  467. get_players( iPlayers, iNum, "c" );
  468.  
  469. if( iNum <= 1 )
  470. return PLUGIN_CONTINUE;
  471.  
  472. for( i = 0; i < iNum; i++ ) {
  473. iPlayer = iPlayers[ i ];
  474.  
  475. if( cs_get_user_team( iPlayer ) == CS_TEAM_T )
  476. cs_set_user_team( iPlayer, CS_TEAM_CT );
  477. }
  478.  
  479. new iRandomPlayer, CsTeams:iTeam;
  480.  
  481. while( ( iRandomPlayer = iPlayers[ random_num( 0, iNum - 1 ) ] ) == g_iLastTerr ) { }
  482.  
  483. g_iLastTerr = iRandomPlayer;
  484.  
  485. iTeam = cs_get_user_team( iRandomPlayer );
  486.  
  487. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT ) {
  488. cs_set_user_team(iRandomPlayer, CS_TEAM_T);
  489.  
  490. new szName[ 32 ];
  491. get_user_name( iRandomPlayer, szName, 31 );
  492.  
  493. for( i = 0; i < iNum; i++ )
  494. ColorChat(iPlayers[ i ], RED, "%s^4 %L", g_szPrefix, iPlayers[ i ], "DR_NOW_TERR", szName);
  495.  
  496. if( !g_bRestart && is_valid_ent( g_iThinker ) )
  497. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 );
  498. } else {
  499. g_bRandromized = false;
  500. EventRandromize( );
  501. }
  502.  
  503. return PLUGIN_CONTINUE;
  504. }
  505.  
  506. // NEW ROUND
  507. ///////////////////////////////////////////
  508. public EventRoundStart( ) {
  509. if( !g_bEnabled )
  510. return PLUGIN_CONTINUE;
  511.  
  512. g_bRandromized = false;
  513. g_bStarting = false;
  514.  
  515. new i, iPlayers[ 32 ], iNum, iRealPlayers, CsTeams:iTeam;
  516. get_players( iPlayers, iNum, "c" );
  517.  
  518. if( iNum <= 1 )
  519. return PLUGIN_CONTINUE;
  520.  
  521. for( i = 0; i < iNum; i++ ) {
  522. iTeam = cs_get_user_team( iPlayers[ i ] );
  523.  
  524. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT )
  525. iRealPlayers++;
  526. }
  527.  
  528. if( iRealPlayers <= 1 ) {
  529. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  530.  
  531. for( i = 0; i < iNum; i++ )
  532. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" );
  533.  
  534. return PLUGIN_CONTINUE;
  535. }
  536.  
  537. set_pcvar_num( g_pAutoBalance, 0 );
  538. set_pcvar_num( g_pLimitTeams, 0 );
  539.  
  540. if( g_bFirstRound ) {
  541. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  542.  
  543. for( i = 0; i < iNum; i++ ) {
  544. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_STARTING" );
  545.  
  546. ColorChat( iPlayers[ i ], RED, "%s^1 %L", g_szPrefix, iPlayers[ i ], "DR_STARTING_CC" );
  547. }
  548.  
  549. if( is_valid_ent( g_iThinker ) ) {
  550. g_bRestart = true;
  551.  
  552. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 9.0 );
  553. } else
  554. set_task( 9.0, "RestartRound" );
  555.  
  556. g_bStarting = true;
  557. g_bFirstRound = false;
  558. }
  559.  
  560. return PLUGIN_CONTINUE;
  561. }
  562.  
  563. // CHECK TERRORIST
  564. ///////////////////////////////////////////
  565. public FwdThinker( iEntity ) {
  566. if( g_bRestart ) {
  567. g_bRestart = false;
  568.  
  569. RestartRound( );
  570. } else
  571. CheckTerrorists( );
  572.  
  573. entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 15.0 );
  574. }
  575.  
  576. public CheckTerrorists( ) {
  577. if( !g_bEnabled || g_bFirstRound || g_bStarting )
  578. return PLUGIN_CONTINUE;
  579.  
  580. new i, iPlayers[ 32 ], iTerrors, iNum, iRealPlayers, CsTeams:iTeam;
  581. get_players( iPlayers, iNum, "c" );
  582.  
  583. if( iNum <= 1 )
  584. return PLUGIN_CONTINUE;
  585.  
  586. for( i = 0; i < iNum; i++ ) {
  587. iTeam = cs_get_user_team( iPlayers[ i ] );
  588.  
  589. if( iTeam == CS_TEAM_T )
  590. iTerrors++;
  591.  
  592. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT )
  593. iRealPlayers++;
  594. }
  595.  
  596. if( iRealPlayers <= 1 ) {
  597. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  598.  
  599. for( i = 0; i < iNum; i++ )
  600. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" );
  601.  
  602. return PLUGIN_CONTINUE;
  603. }
  604.  
  605. if( iTerrors == 0 ) {
  606. for( i = 0; i < iNum; i++ ) {
  607. ColorChat(iPlayers[ i ], RED, "%s^1 %L", g_szPrefix, iPlayers[ i ], "DR_NO_DETECT");
  608.  
  609. if( is_user_alive( iPlayers[ i ] ) && cs_get_user_team( iPlayers[ i ] ) == CS_TEAM_CT )
  610. user_silentkill( iPlayers[ i ] );
  611. }
  612.  
  613. set_task( 0.5, "EventRandromize" );
  614. }
  615.  
  616. return PLUGIN_CONTINUE;
  617. }
  618.  
  619. // LIFE SYSTEM
  620. ///////////////////////////////////////////
  621. public EventTerrsWin( ) {
  622. if( !g_bEnabled || g_bFirstRound )
  623. return PLUGIN_CONTINUE;
  624.  
  625. new iPlayers[ 32 ], iNum, iPlayer;
  626. get_players( iPlayers, iNum, "c" );
  627.  
  628. if( iNum <= 1 )
  629. return PLUGIN_CONTINUE;
  630.  
  631. new iLifeCvar = get_pcvar_num( g_pLifeSystem );
  632.  
  633. for( new i = 0; i < iNum; i++ ) {
  634. iPlayer = iPlayers[ i ];
  635.  
  636. if( cs_get_user_team( iPlayer ) == CS_TEAM_T ) {
  637. set_user_frags( iPlayer, get_user_frags( iPlayer ) + 3 );
  638.  
  639. if( iLifeCvar == 2 )
  640. g_Lifes[ iPlayer ]++;
  641. }
  642. }
  643.  
  644. return PLUGIN_CONTINUE;
  645. }
  646.  
  647. public EventDeath( ) {
  648. if( !g_bEnabled )
  649. return PLUGIN_CONTINUE;
  650.  
  651. #if defined FAKE_PLAYER
  652. new iVictim = read_data( 2 );
  653. new iTeam = get_user_team( iVictim );
  654.  
  655. if( iTeam == 1 && is_user_alive( g_iFakeplayer ) )
  656. fakedamage( g_iFakeplayer, "worldspawn", 100.0, DMG_GENERIC );
  657.  
  658. if( !get_pcvar_num( g_pLifeSystem ) )
  659. return PLUGIN_CONTINUE;
  660. #else
  661. if( !get_pcvar_num( g_pLifeSystem ) )
  662. return PLUGIN_CONTINUE;
  663.  
  664. new iVictim = read_data( 2 );
  665. new iTeam = get_user_team( iVictim );
  666. #endif
  667.  
  668. new iKiller = read_data( 1 );
  669.  
  670. if( iKiller != iVictim && get_user_team(iKiller) != iTeam )
  671. g_Lifes[iKiller]++;
  672.  
  673. if( cs_get_user_team( iVictim ) == CS_TEAM_CT && g_Lifes[ iVictim ] > 0 ) {
  674. new iCTcount;
  675. for( new i = 1; i <= g_iMaxplayers; i++ ) {
  676. if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
  677. iCTcount++;
  678. }
  679.  
  680. if( iCTcount > 1 ) {
  681. set_task(3.2, "fnRevivePlayer", iVictim);
  682.  
  683. ColorChat( iVictim, RED, "%s^1 %L", g_szPrefix, iVictim, "DR_LIFE_RESPAWN" );
  684. }
  685. /*else
  686. ColorChat( iVictim, RED, "%s^1 %L", g_szPrefix, iVictim, "DR_LIFE_CANT" );*/
  687. }
  688.  
  689. return PLUGIN_CONTINUE;
  690. }
  691.  
  692. public fnRevivePlayer( id ) {
  693. if( g_bConnected[ id ] ) {
  694. if( cs_get_user_team( id ) == CS_TEAM_CT ) {
  695. new iCTcount;
  696. for( new i = 1; i <= g_iMaxplayers; i++ )
  697. if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
  698. iCTcount++;
  699.  
  700. if( iCTcount > 1 ) {
  701. ExecuteHamB( Ham_CS_RoundRespawn, id );
  702.  
  703. g_Lifes[ id ]--;
  704. }
  705. }
  706. }
  707. }
  708.  
  709. public CmdShowlifes( id ) {
  710. if( get_pcvar_num( g_pLifeSystem ) == 0 ) {
  711. ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_DISABLE" );
  712. return PLUGIN_HANDLED;
  713. }
  714.  
  715. if( g_Lifes[ id ] > 0 )
  716. ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_CC_COUNT", g_Lifes[ id ] );
  717. else
  718. ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_CC_NO" );
  719.  
  720. return PLUGIN_HANDLED;
  721. }
  722.  
  723. public Showlifes( id ) {
  724. set_hudmessage( 0, 128, 0, 0.04, 0.71, 0, 2.5, 2.5, 0.5, 0.5, 3 );
  725.  
  726. if( g_Lifes[ id ] > 0 )
  727. ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_COUNT", g_Lifes[ id ] );
  728. else
  729. ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_NO" );
  730. }
  731.  
  732. // EVENTS
  733. ///////////////////////////////////////////
  734. public EventResetHud( id ) {
  735. if( g_bEnabled && get_pcvar_num( g_pHideHuds ) && !is_user_bot( id ) ) {
  736. message_begin( MSG_ONE_UNRELIABLE, g_iMsgHideWeapon, _, id );
  737. write_byte( ( 1<<4 | 1<<5 ) );
  738. message_end( );
  739.  
  740. message_begin( MSG_ONE_UNRELIABLE, g_iMsgCrosshair, _, id );
  741. write_byte( 0 );
  742. message_end( );
  743. }
  744. }
  745.  
  746. public EventMoney( id ) {
  747. if( g_bEnabled && get_pcvar_num( g_pBlockMoney ) ) {
  748. set_pdata_int( id, 115, 0 );
  749.  
  750. message_begin( MSG_ONE_UNRELIABLE, g_iMsgMoney, _, id );
  751. write_long ( 0 );
  752. write_byte ( 1 );
  753. message_end( );
  754. }
  755. }
  756.  
  757. public client_putinserver( id )
  758. g_bConnected[ id ] = true;
  759.  
  760. public client_disconnect( id ) {
  761. remove_task(id);
  762. g_bConnected[ id ] = false;
  763. CheckTerrorists( );
  764.  
  765. if( !g_bRestart && is_valid_ent( g_iThinker ) )
  766. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 );
  767.  
  768. #if defined FAKE_PLAYER
  769. if( g_iFakeplayer == id ) {
  770. set_task( 1.5, "UpdateBot" );
  771.  
  772. g_iFakeplayer = 0;
  773. }
  774. #endif
  775. }
  776.  
  777. // SEMICLIP
  778. ///////////////////////////////////////////
  779. public FwdFullPack( es, e, ent, host, flags, player, pSet ) {
  780. if( !g_bEnabled )
  781. return FMRES_IGNORED;
  782.  
  783. if( player && g_iSemiClip[ ent ] && g_iSemiClip[ host ] ) {
  784. set_es( es, ES_Solid, SOLID_NOT );
  785. set_es( es, ES_RenderMode, kRenderTransAlpha );
  786. set_es( es, ES_RenderAmt, 85 );
  787. }
  788.  
  789. return FMRES_IGNORED;
  790. }
  791.  
  792. public FwdStartFrame( ) {
  793. if( !g_bEnabled )
  794. return FMRES_IGNORED;
  795.  
  796. static iPlayers[ 32 ], iNum, iPlayer, iPlayer2, i, j;
  797. get_players( iPlayers, iNum, "ache", "CT" );
  798.  
  799. arrayset( g_iSemiClip, 0, 32 );
  800.  
  801. if( iNum <= 1 )
  802. return FMRES_IGNORED;
  803.  
  804. for( i = 0; i < iNum; i++ ) {
  805. iPlayer = iPlayers[ i ];
  806.  
  807. for( j = 0; j < iNum; j++ ) {
  808. iPlayer2 = iPlayers[ j ];
  809.  
  810. if( iPlayer == iPlayer2 )
  811. continue;
  812.  
  813. if( g_iSemiClip[ iPlayer ] && g_iSemiClip[ iPlayer2 ] )
  814. continue;
  815.  
  816. if( entity_range( iPlayer, iPlayer2 ) < 128 ) {
  817. g_iSemiClip[ iPlayer ] = true;
  818. g_iSemiClip[ iPlayer2 ] = true;
  819. }
  820. }
  821. }
  822.  
  823. for( i = 0; i < iNum; i++ ) {
  824. iPlayer = iPlayers[ i ];
  825.  
  826. set_pev( iPlayer, pev_solid, g_iSemiClip[ iPlayer ] ? SOLID_NOT : SOLID_SLIDEBOX );
  827. }
  828.  
  829. return FMRES_IGNORED;
  830. }
  831.  
  832. // FORWARDS
  833. ///////////////////////////////////////////
  834. public FwdHamPlayerSpawn( id ) {
  835. if( !g_bEnabled || !is_user_alive( id ) )
  836. return HAM_IGNORED;
  837.  
  838. if( get_pcvar_num( g_pBlockRadio ) ) // thanks to ConnorMcLeod for this good way :)
  839. set_pdata_int( id, 192, 0 );
  840.  
  841. #if defined FAKE_PLAYER
  842. if( g_iFakeplayer == id ) {
  843. set_pev( id, pev_frags, -1000.0 );
  844. cs_set_user_deaths( id, -1000 );
  845.  
  846. set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
  847. set_pev( id, pev_solid, SOLID_NOT );
  848. entity_set_origin( id, Float:{ 999999.0, 999999.0, 999999.0 } );
  849. dllfunc( DLLFunc_Think, id );
  850. } else {
  851. #endif
  852. new CsTeams:iTeam = cs_get_user_team( id );
  853.  
  854. // An small delay for message
  855. if( get_pcvar_num( g_pLifeSystem ) != 0 && iTeam == CS_TEAM_CT )
  856. set_task( 0.8, "Showlifes", id );
  857.  
  858. strip_user_weapons( id );
  859. give_item( id, "weapon_knife" );
  860.  
  861. set_pdata_int( id, 116, 0 ); // Pickup fix by ConnorMcLeod
  862.  
  863. if( g_bGamerFun && iTeam == CS_TEAM_CT )
  864. give_item( id, "weapon_smokegrenade" );
  865.  
  866. if( get_pcvar_num( g_pGiveUsp ) && iTeam == CS_TEAM_CT && !g_bHauntedHouse )
  867. set_task( 1.0, "GiveUsp", id );
  868.  
  869. #if defined FAKE_PLAYER
  870. }
  871. #endif
  872.  
  873. return HAM_IGNORED;
  874. }
  875.  
  876. public GiveUsp( const id ) {
  877. if( is_user_alive( id ) ) {
  878. give_item( id, "weapon_usp" );
  879. cs_set_user_bpammo( id, CSW_USP, 100 );
  880. }
  881. }
  882.  
  883. public FwdGameDesc( ) {
  884. static const GameName[ ] = "-=[ DeathRun OutStanding ]=-";
  885.  
  886. forward_return( FMV_STRING, GameName );
  887.  
  888. return FMRES_SUPERCEDE;
  889. }
  890.  
  891. public FwdClientKill( const id ) {
  892. if( !g_bEnabled || !is_user_alive(id) )
  893. return FMRES_IGNORED;
  894.  
  895. if( get_pcvar_num( g_pBlockKill ) || cs_get_user_team( id ) == CS_TEAM_T ) {
  896. client_print( id, print_center, "%L", id, "DR_BLOCK_KILL" );
  897. client_print( id, print_console, "%L", id, "DR_BLOCK_KILL" );
  898.  
  899. return FMRES_SUPERCEDE;
  900. }
  901.  
  902. return FMRES_IGNORED;
  903. }
  904.  
  905. public FwdImpulse_201( const id ) {
  906. if( g_bEnabled && get_pcvar_num( g_pBlockSpray ) ) {
  907. if( is_user_alive( id ) )
  908. client_print( id, print_center, "%L", id, "DR_BLOCK_SPRAY" );
  909.  
  910. return PLUGIN_HANDLED_MAIN;
  911. }
  912.  
  913. return PLUGIN_CONTINUE;
  914. }
  915.  
  916. public FwdHamPlayerDamage( id, idInflictor, idAttacker, Float:flDamage, iDamageBits ) {
  917. if( get_pcvar_num( g_pNoFallDmg ) )
  918. if( iDamageBits & DMG_FALL )
  919. if( get_user_team( id ) == 1 )
  920. return HAM_SUPERCEDE;
  921.  
  922. return HAM_IGNORED;
  923. }
  924.  
  925. public MsgStatusIcon( msg_id, msg_dest, id ) {
  926. new szIcon[ 8 ];
  927. get_msg_arg_string( 2, szIcon, 7 );
  928.  
  929. static const BuyZone[ ] = "buyzone";
  930.  
  931. if( equal( szIcon, BuyZone ) ) {
  932. set_pdata_int( id, OFFSET_BZ, get_pdata_int( id, OFFSET_BZ, 5 ) & ~( 1 << 0 ), 5 );
  933.  
  934. return PLUGIN_HANDLED;
  935. }
  936.  
  937. return PLUGIN_CONTINUE;
  938. }
  939.  
  940. public CmdRadio( id ) {
  941. if( get_pcvar_num( g_pBlockRadio ) )
  942. return PLUGIN_HANDLED_MAIN;
  943.  
  944. return PLUGIN_CONTINUE;
  945. }
  946.  
  947. public RestartRound( )
  948. set_pcvar_num( g_pSvRestart, 1 );
  949.  
  950. // COLORCHAT
  951. /////////////////////////////////////////////
  952. ColorChat( id, Color:type, const szMessage[], {Float,Sql,Result,_}:... ) {
  953. if( !get_playersnum( ) ) return;
  954.  
  955. new message[ 256 ];
  956.  
  957. switch( type ) {
  958. case NORMAL: message[0] = 0x01;
  959. case GREEN: message[0] = 0x04;
  960. default: message[0] = 0x03;
  961. }
  962.  
  963. vformat( message[ 1 ], 251, szMessage, 4 );
  964.  
  965. message[ 192 ] = '^0';
  966.  
  967. replace_all( message, 191, "\YEL", "^1" );
  968. replace_all( message, 191, "\GRN", "^4" );
  969. replace_all( message, 191, "\TEM", "^3" );
  970.  
  971. new iTeam, ColorChange, index, MSG_Type;
  972.  
  973. if( id ) {
  974. MSG_Type = MSG_ONE_UNRELIABLE;
  975. index = id;
  976. } else {
  977. index = CC_FindPlayer();
  978. MSG_Type = MSG_BROADCAST;
  979. }
  980.  
  981. iTeam = get_user_team( index );
  982. ColorChange = CC_ColorSelection(index, MSG_Type, type);
  983.  
  984. CC_ShowColorMessage(index, MSG_Type, message);
  985.  
  986. if( ColorChange )
  987. CC_Team_Info(index, MSG_Type, TeamName[iTeam]);
  988. }
  989.  
  990. CC_ShowColorMessage( id, type, message[] ) {
  991. message_begin( type, g_iMsgSayText, _, id );
  992. write_byte( id );
  993. write_string( message );
  994. message_end( );
  995. }
  996.  
  997. CC_Team_Info( id, type, team[] ) {
  998. message_begin( type, g_iMsgTeamInfo, _, id );
  999. write_byte( id );
  1000. write_string( team );
  1001. message_end( );
  1002.  
  1003. return 1;
  1004. }
  1005.  
  1006. CC_ColorSelection( index, type, Color:Type ) {
  1007. switch( Type ) {
  1008. case RED: return CC_Team_Info( index, type, TeamName[ 1 ] );
  1009. case BLUE: return CC_Team_Info( index, type, TeamName[ 2 ] );
  1010. }
  1011.  
  1012. return 0;
  1013. }
  1014.  
  1015. CC_FindPlayer( ) {
  1016. for( new i = 1; i <= g_iMaxplayers; i++ )
  1017. if( g_bConnected[ i ] )
  1018. return i;
  1019.  
  1020. return -1;
  1021. }
  1022.  
  1023. public plugin_cfg()
  1024. {
  1025. set_cvar_num("mp_limitteams", 32);
  1026. set_cvar_num("sv_restart", 1);
  1027. }
  1028.  
  1029. public event_TeamInfo()
  1030. {
  1031. new id = read_data(1);
  1032. new sTeam[32], iTeam;
  1033. read_data(2, sTeam, sizeof(sTeam) - 1);
  1034. for(new i = 0; i < MAX_TEAMS; i++)
  1035. {
  1036. if(g_cTeamChars[i] == sTeam[0])
  1037. {
  1038. iTeam = i;
  1039. break;
  1040. }
  1041. }
  1042.  
  1043. if(g_iTeam[id] != iTeam)
  1044. {
  1045. g_iPlayers[g_iTeam[id]]--;
  1046. g_iTeam[id] = iTeam;
  1047. g_iPlayers[iTeam]++;
  1048. }
  1049. }
  1050.  
  1051. public message_ShowMenu(iMsgid, iDest, id)
  1052. {
  1053. static sMenuCode[iMaxLen];
  1054. get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1);
  1055. if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC))
  1056. {
  1057. if(should_autojoin(id))
  1058. {
  1059. set_autojoin_task(id, iMsgid);
  1060. return PLUGIN_HANDLED;
  1061. }
  1062. }
  1063. else if(equal(sMenuCode, INGAME_JOIN_MSG) || equal(sMenuCode, INGAME_JOIN_MSG_SPEC))
  1064. {
  1065. if(should_autoswitch(id))
  1066. {
  1067. set_autoswitch_task(id, iMsgid);
  1068. return PLUGIN_HANDLED;
  1069. }
  1070. else if(get_pcvar_num(tjm_block_change))
  1071. {
  1072. return PLUGIN_HANDLED;
  1073. }
  1074. }
  1075. return PLUGIN_CONTINUE;
  1076. }
  1077.  
  1078. public message_VGUIMenu(iMsgid, iDest, id)
  1079. {
  1080. if(get_msg_arg_int(1) != VGUI_JOIN_TEAM_NUM)
  1081. {
  1082. return PLUGIN_CONTINUE;
  1083. }
  1084.  
  1085. if(should_autojoin(id))
  1086. {
  1087. set_autojoin_task(id, iMsgid);
  1088. return PLUGIN_HANDLED;
  1089. }
  1090. else if(should_autoswitch(id))
  1091. {
  1092. set_autoswitch_task(id, iMsgid);
  1093. return PLUGIN_HANDLED;
  1094. }
  1095. else if((TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && get_pcvar_num(tjm_block_change))
  1096. {
  1097. return PLUGIN_HANDLED;
  1098. }
  1099. return PLUGIN_CONTINUE;
  1100. }
  1101.  
  1102. public task_Autojoin(iParam[], id)
  1103. {
  1104. new iTeam = get_new_team(get_pcvar_num(tjm_join_team));
  1105. if(iTeam != -1)
  1106. {
  1107. handle_join(id, iParam[0], iTeam);
  1108. }
  1109. }
  1110.  
  1111. public task_Autoswitch(iParam[], id)
  1112. {
  1113. new iTeam = get_switch_team(id);
  1114. if(iTeam != -1)
  1115. {
  1116. handle_join(id, iParam[0], iTeam);
  1117. }
  1118. }
  1119.  
  1120. stock handle_join(id, iMsgid, iTeam)
  1121. {
  1122. new iMsgBlock = get_msg_block(iMsgid);
  1123. set_msg_block(iMsgid, BLOCK_SET);
  1124.  
  1125. engclient_cmd(id, "jointeam", g_sTeamNums[iTeam]);
  1126.  
  1127. new iClass = get_team_class(iTeam);
  1128. if(1 <= iClass <= 4)
  1129. {
  1130. engclient_cmd(id, "joinclass", g_sClassNums[iClass - 1]);
  1131. }
  1132. set_msg_block(iMsgid, iMsgBlock);
  1133. }
  1134.  
  1135. stock get_new_team(iCvar)
  1136. {
  1137. switch(iCvar)
  1138. {
  1139. case 1:
  1140. {
  1141. return TEAM_T;
  1142. }
  1143. case 2:
  1144. {
  1145. return TEAM_CT;
  1146. }
  1147. case 3:
  1148. {
  1149. return TEAM_SPEC;
  1150. }
  1151. case 4:
  1152. {
  1153. new iTCount = g_iPlayers[TEAM_T];
  1154. new iCTCount = g_iPlayers[TEAM_CT];
  1155. if(iTCount < iCTCount)
  1156. {
  1157. return TEAM_T;
  1158. }
  1159. else if(iTCount > iCTCount)
  1160. {
  1161. return TEAM_CT;
  1162. }
  1163. else
  1164. {
  1165. return random_num(TEAM_T, TEAM_CT);
  1166. }
  1167. }
  1168. }
  1169. return -1;
  1170. }
  1171.  
  1172. stock get_switch_team(id)
  1173. {
  1174. new iTeam;
  1175.  
  1176. new iTCount = g_iPlayers[TEAM_T];
  1177. new iCTCount = g_iPlayers[TEAM_CT];
  1178. switch(g_iTeam[id])
  1179. {
  1180. case TEAM_T: iTCount--;
  1181. case TEAM_CT: iCTCount--;
  1182. }
  1183. if(iTCount < iCTCount)
  1184. {
  1185. iTeam = TEAM_T;
  1186. }
  1187. else if(iTCount > iCTCount)
  1188. {
  1189. iTeam = TEAM_CT;
  1190. }
  1191. else
  1192. {
  1193. iTeam = random_num(TEAM_T, TEAM_CT);
  1194. }
  1195.  
  1196. if(iTeam != g_iTeam[id])
  1197. {
  1198. return iTeam;
  1199. }
  1200.  
  1201. return -1;
  1202. }
  1203.  
  1204. stock get_team_class(iTeam)
  1205. {
  1206. new iClass;
  1207. if(TEAM_NONE < iTeam < TEAM_SPEC)
  1208. {
  1209. iClass = get_pcvar_num(tjm_class[iTeam]);
  1210. if(iClass < 1 || iClass > 4)
  1211. {
  1212. iClass = random_num(1, 4);
  1213. }
  1214. }
  1215. return iClass;
  1216. }
  1217.  
  1218. stock set_autojoin_task(id, iMsgid)
  1219. {
  1220. new iParam[2];
  1221. iParam[0] = iMsgid;
  1222. set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam));
  1223. }
  1224.  
  1225. stock set_autoswitch_task(id, iMsgid)
  1226. {
  1227. new iParam[2];
  1228. iParam[0] = iMsgid;
  1229. set_task(0.1, "task_Autoswitch", id, iParam, sizeof(iParam));
  1230. }
  1231.  
  1232. stock bool:should_autojoin(id)
  1233. {
  1234. return ((5 > get_pcvar_num(tjm_join_team) > 0) && is_user_connected(id) && !(TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
  1235. }
  1236.  
  1237. stock bool:should_autoswitch(id)
  1238. {
  1239. return (get_pcvar_num(tjm_switch_team) && is_user_connected(id) && (TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
  1240. }
  1241.  
  1242. public cmdBlock( id )
  1243. {
  1244. print_chatColorDeathrun(id, "^1[ ^4OutStanding ^1] ^3You don't have acces to this command.");
  1245. return PLUGIN_HANDLED;
  1246. }
  1247.  
  1248. public cmdShowIp(id)
  1249. {
  1250. console_print(id, "Nume - IP - SteamID");
  1251. console_print(id, "--------------------Ip-uri !--------------------");
  1252. console_print(id, "-----------------------------------------------");
  1253.  
  1254. new players[32], num, player;
  1255. get_players(players, num);
  1256.  
  1257. for(new i = 0 ; i < num ; i++)
  1258. {
  1259. player = players[i];
  1260. new name[32], ipeki[32], authid[32];
  1261.  
  1262. get_user_name(player, name, 31)
  1263. get_user_ip(player, ipeki, 31, 1);
  1264. get_user_authid(player, authid, 31);
  1265.  
  1266. console_print(id, "%s - %s - %s", name, ipeki, authid);
  1267. }
  1268. console_print(id, "-----------------------------------------------");
  1269. console_print(id, "--------------------Ip-uri !--------------------");
  1270.  
  1271. return 1;
  1272. }
  1273. public cmdReset(id)
  1274. {
  1275.  
  1276. new frags = get_user_frags(id);
  1277. new deaths = get_user_deaths(id);
  1278.  
  1279. if(frags == 0 && deaths == 0)
  1280. {
  1281. set_dhudmessage( 0, 255, 0, -1.0, 0.87, 0, 6.0, 1.0 );
  1282. show_dhudmessage(id, "Your score is already 0-0");
  1283. }
  1284. else
  1285. {
  1286. cs_set_user_deaths(id, 0);
  1287. set_user_frags(id, 0);
  1288.  
  1289. set_dhudmessage( 0, 255, 0, -1.0, 0.87, 0, 6.0, 1.0 );
  1290. show_dhudmessage(id, "You have just resetscore^nDeathrun v5.0");
  1291. }
  1292. return PLUGIN_HANDLED;
  1293. }
  1294. public checkstuck() {
  1295. if(get_pcvar_num(cvar[0]) >= 1) {
  1296. static players[32], pnum, player
  1297. get_players(players, pnum)
  1298. static Float:origin[3]
  1299. static Float:mins[3], hull
  1300. static Float:vec[3]
  1301. static o,i
  1302. for(i=0; i<pnum; i++){
  1303. player = players[i]
  1304. if (is_user_connected(player) && is_user_alive(player)) {
  1305. pev(player, pev_origin, origin)
  1306. hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
  1307. if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
  1308. ++stuck[player]
  1309. if(stuck[player] >= get_pcvar_num(cvar[2])) {
  1310. pev(player, pev_mins, mins)
  1311. vec[2] = origin[2]
  1312. for (o=0; o < sizeof size; ++o) {
  1313. vec[0] = origin[0] - mins[0] * size[o][0]
  1314. vec[1] = origin[1] - mins[1] * size[o][1]
  1315. vec[2] = origin[2] - mins[2] * size[o][2]
  1316. if (is_hull_vacant(vec, hull,player)) {
  1317. engfunc(EngFunc_SetOrigin, player, vec)
  1318. effects(player)
  1319. set_pev(player,pev_velocity,{0.0,0.0,0.0})
  1320. o = sizeof size
  1321. }
  1322. }
  1323. }
  1324. }
  1325. else
  1326. {
  1327. stuck[player] = 0
  1328. }
  1329. }
  1330. }
  1331. }
  1332. }
  1333.  
  1334. stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
  1335. static tr
  1336. engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
  1337. if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
  1338. return true
  1339.  
  1340. return false
  1341. }
  1342.  
  1343. public effects(id) {
  1344. if(get_pcvar_num(cvar[1])) {
  1345. set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE
  1346. show_hudmessage(id,"You should be unstucked now!") // HUDMESSAGE
  1347. message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )
  1348. write_short(1<<10) // fade lasts this long duration
  1349. write_short(1<<10) // fade lasts this long hold time
  1350. write_short(1<<1) // fade type (in / out)
  1351. write_byte(20) // fade red
  1352. write_byte(255) // fade green
  1353. write_byte(255) // fade blue
  1354. write_byte(255) // fade alpha
  1355. message_end()
  1356. client_cmd(id,"spk fvox/blip.wav")
  1357. }
  1358. }
  1359.  
  1360. public client_connect(id)
  1361. verify_name(id)
  1362.  
  1363. public client_infochanged(id)
  1364. {
  1365. if (!is_user_connected(id))
  1366. return;
  1367.  
  1368. verify_name(id)
  1369. }
  1370.  
  1371. verify_name(id)
  1372. {
  1373. static name[32]
  1374. get_user_info(id, "name", name, 31)
  1375.  
  1376. if (!name[1])
  1377. {
  1378. change_name(id)
  1379.  
  1380. return;
  1381. }
  1382.  
  1383. static i, ignore
  1384. ignore = false
  1385.  
  1386. for (i = 0; i <= g_sizeof_names_new; i++)
  1387. if (containi(name, g_names_new[i]) != -1)
  1388. {
  1389. ignore = true
  1390. break;
  1391. }
  1392.  
  1393. if (ignore)
  1394. return;
  1395.  
  1396. for (i = 0; i < 32; i++)
  1397. if (g_filter_chars[i])
  1398. replace_all(name, 31, g_filter_chars[i], "")
  1399.  
  1400. for (i = 0; i < g_sizeof_names; i++)
  1401. if (containi(name, g_names[i]) != -1)
  1402. {
  1403. change_name(id)
  1404. break;
  1405. }
  1406. }
  1407.  
  1408. change_name(id)
  1409. {
  1410. static name[32]
  1411. formatex(name, 31, "%s [%d]", g_names_new[random_num(0, g_sizeof_names_new)], g_names_changed)
  1412.  
  1413. set_user_info(id, "name", name)
  1414. client_cmd(id, "name ^"%s^"", name)
  1415. g_names_changed++
  1416. }
  1417.  
  1418. public fw_takedamage( victim, inflictor, attacker, Float:damage, damagebits )
  1419. {
  1420. if( ! ( damagebits & DMG_BULLET ) )
  1421. return HAM_IGNORED;
  1422. if( !get_pcvar_num( toggle_plugin ) )
  1423. return HAM_IGNORED;
  1424.  
  1425. if( ExecuteHam( Ham_FVisible, attacker, victim ) )
  1426. return HAM_IGNORED
  1427.  
  1428. switch( get_pcvar_num( toggle_fade ) )
  1429. {
  1430. case 1:
  1431. Fade( attacker, (1<<10), (1<<10), (1<<12), 0, 170, 0, 75 );
  1432. case 2:
  1433. Fade( victim, (1<<10), (1<<10), (1<<12), 255, 85, 85, 75 );
  1434. case 3:
  1435. {
  1436. Fade( attacker, (1<<10), (1<<10), (1<<12), 0, 170, 0, 75 );
  1437. Fade( victim, (1<<10), (1<<10), (1<<12), 255, 85, 85, 75 );
  1438. }
  1439. }
  1440. return HAM_SUPERCEDE;
  1441. }
  1442.  
  1443. Fade( index, duration, holdtime, flags, red, green ,blue, alpha )
  1444. {
  1445. message_begin( MSG_ONE_UNRELIABLE, g_msgscreenfade, { 0, 0, 0 }, index );
  1446. write_short( duration );
  1447. write_short( holdtime );
  1448. write_short( flags );
  1449. write_byte( red );
  1450. write_byte( green );
  1451. write_byte( blue) ;
  1452. write_byte( alpha );
  1453. message_end();
  1454. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement