Advertisement
Guest User

Untitled

a guest
Dec 1st, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.65 KB | None | 0 0
  1. /***
  2. * Link to the plugin
  3. *
  4. * http://forums.alliedmods.net/showthread.php?t=78197
  5. */
  6.  
  7. #include < amxmodx >
  8. #include < engine >
  9. #include < cstrike >
  10. #include < fun >
  11. #include < fakemeta >
  12. #include < hamsandwich >
  13. #include < dhudmessage >
  14.  
  15. #pragma semicolon 1
  16.  
  17. // Comment this line if you do not want to have fake player !
  18. #define FAKE_PLAYER
  19.  
  20. // Bot name
  21. #if defined FAKE_PLAYER
  22. new const g_szBotName[ ] = "BetterPlay.eu";
  23. #endif
  24.  
  25. // Messages prefix
  26. new const g_szPrefix[ ] = "DeathRun";
  27.  
  28. // Global Variables
  29. new bool:g_bHauntedHouse, bool:g_bGamerFun, bool:g_bRandromized, bool:g_bStarting, bool:g_bFirstRound;
  30. new bool:g_bEnabled, bool:g_bRestart, bool:g_bConnected[ 33 ];
  31.  
  32. new g_pRemoveBuyZone, g_pHideHuds, g_pBlockMoney, g_pLifeSystem, g_pSvRestart, g_pAutoBalance, g_pLimitTeams;
  33. new g_pNoFallDmg, g_pGameName, g_pToggle, g_pBlockSpray, g_pBlockRadio, g_pSemiclip, g_pGiveUsp, g_pBlockKill, gFzNade;
  34.  
  35. new g_iMsgHideWeapon, g_iMsgCrosshair, g_iMsgMoney, g_iMsgTeamInfo, g_iMsgSayText;
  36. new g_iMaxplayers, g_iHudSync, g_iHudSync2, g_iLastTerr, g_iThinker;
  37. new g_iSemiClip[ 33 ], g_Lifes[ 33 ];
  38.  
  39. #if defined FAKE_PLAYER
  40. new g_iFakeplayer;
  41. #endif
  42.  
  43. // Macros
  44. #if cellbits == 32
  45. #define OFFSET_BZ 235
  46. #else
  47. #define OFFSET_BZ 268
  48. #endif
  49.  
  50. // Colorchat
  51. enum Color {
  52. NORMAL = 1,
  53. GREEN,
  54. RED,
  55. BLUE
  56. };
  57.  
  58. new TeamName[ ][ ] = {
  59. "",
  60. "TERRORIST",
  61. "CT",
  62. "SPECTATOR"
  63. };
  64.  
  65. // =======================================================================================
  66.  
  67. public plugin_init( ) {
  68. new const VERSION[ ] = "3.0.3";
  69.  
  70. register_plugin( "Deathrun Manager", VERSION, "xPaw" );
  71.  
  72. g_pToggle = register_cvar( "deathrun_toggle", "1" );
  73. g_pBlockSpray = register_cvar( "deathrun_spray", "1" );
  74. g_pBlockRadio = register_cvar( "deathrun_radio", "1" );
  75. g_pBlockKill = register_cvar( "deathrun_blockkill", "1" );
  76. g_pBlockMoney = register_cvar( "deathrun_blockmoney", "1" );
  77. g_pSemiclip = register_cvar( "deathrun_semiclip", "1" );
  78. g_pGiveUsp = register_cvar( "deathrun_giveusp", "1" );
  79. gFzNade = register_cvar("deathrun_fznade", "1" );
  80. g_pHideHuds = register_cvar( "deathrun_hidehud", "1" );
  81. g_pLifeSystem = register_cvar( "deathrun_lifesystem", "0" );
  82. g_pGameName = register_cvar( "deathrun_gamename", "1" );
  83. g_pNoFallDmg = register_cvar( "deathrun_terrnfd", "1" );
  84. g_pRemoveBuyZone = register_cvar( "deathrun_removebz", "1" );
  85.  
  86. // Lets get map name...
  87. new szMapName[ 64 ];
  88. get_mapname( szMapName, 63 );
  89.  
  90. if( contain( szMapName, "deathrun_" ) != -1 ) {
  91. set_pcvar_num( g_pToggle, 1 );
  92.  
  93. if( contain( szMapName, "hauntedhouse" ) != -1 )
  94. g_bHauntedHouse = true;
  95. else {
  96. g_bHauntedHouse = false;
  97.  
  98. if( equal( szMapName, "deathrun_gamerfun" ) )
  99. g_bGamerFun = true;
  100. else
  101. g_bGamerFun = false;
  102. }
  103. } else
  104. set_pcvar_num( g_pToggle, 0 );
  105.  
  106. g_pSvRestart = get_cvar_pointer( "sv_restart" );
  107. g_pAutoBalance = get_cvar_pointer( "mp_autoteambalance" );
  108. g_pLimitTeams = get_cvar_pointer( "mp_limitteams" );
  109.  
  110. register_cvar( "deathrun_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
  111. set_cvar_string( "deathrun_version", VERSION );
  112.  
  113. // Registering Language file
  114. register_dictionary( "deathrun.txt" );
  115.  
  116. // Logging Events
  117. register_logevent( "EventRoundStart", 2, "1=Round_Start" );
  118. register_logevent( "EventRandromize", 2, "1=Round_End" );
  119. register_event( "SendAudio", "EventTerrsWin", "a", "2&%!MRAD_terwin" );
  120. register_event( "TextMsg", "EventRandromize", "a", "2&#Game_w" );
  121. register_event( "DeathMsg", "EventDeath", "a");
  122. register_event( "Money", "EventMoney", "b" );
  123. register_event( "ResetHUD", "EventResetHud", "be" );
  124.  
  125. g_bFirstRound = true;
  126. g_iMaxplayers = get_maxplayers( );
  127. g_iMsgHideWeapon = get_user_msgid( "HideWeapon" );
  128. g_iMsgCrosshair = get_user_msgid( "Crosshair" );
  129. g_iMsgMoney = get_user_msgid( "Money" );
  130. g_iMsgSayText = get_user_msgid( "SayText" );
  131. g_iMsgTeamInfo = get_user_msgid( "TeamInfo" );
  132.  
  133. g_iHudSync = CreateHudSyncObj( );
  134. g_iHudSync2 = CreateHudSyncObj( );
  135.  
  136. if( get_pcvar_num( g_pToggle ) ) {
  137. RegisterHam( Ham_TakeDamage, "player", "FwdHamPlayerDamage" );
  138. RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn", 1 );
  139. register_forward( FM_ClientKill, "FwdClientKill" );
  140. register_impulse( 201, "FwdImpulse_201" );
  141.  
  142. if( get_pcvar_num( g_pGameName ) )
  143. register_forward( FM_GetGameDescription, "FwdGameDesc" );
  144.  
  145. register_clcmd( "say /lifes", "CmdShowlifes" );
  146. register_clcmd( "say /lives", "CmdShowlifes" );
  147.  
  148. register_clcmd( "radio1", "CmdRadio" );
  149. register_clcmd( "radio2", "CmdRadio" );
  150. register_clcmd( "radio3", "CmdRadio" );
  151.  
  152. // Terrorist Check
  153. g_iThinker= create_entity( "info_target" );
  154.  
  155. if( is_valid_ent( g_iThinker ) ) {
  156. entity_set_string( g_iThinker, EV_SZ_classname, "DeathrunThinker" );
  157. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 20.0 );
  158.  
  159. g_bRestart = true;
  160.  
  161. // First think will happen in 20.0, Restart will be done there.
  162.  
  163. register_think( "DeathrunThinker", "FwdThinker" );
  164. } else {
  165. set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
  166.  
  167. // Lets make restart after 20 seconds from map start.
  168. set_task( 20.0, "RestartRound" );
  169. }
  170.  
  171. if( get_pcvar_num( g_pRemoveBuyZone ) ) {
  172. register_message( get_user_msgid( "StatusIcon" ), "MsgStatusIcon" ); // BuyZone Icon
  173.  
  174. // Remove buyzone on map
  175. remove_entity_name( "info_map_parameters" );
  176. remove_entity_name( "func_buyzone" );
  177.  
  178. // Create own entity to block buying
  179. new iEntity = create_entity( "info_map_parameters" );
  180.  
  181. DispatchKeyValue( iEntity, "buying", "3" );
  182. DispatchSpawn( iEntity );
  183. }
  184.  
  185. if( get_pcvar_num( g_pSemiclip ) ) {
  186. register_forward( FM_StartFrame, "FwdStartFrame", 0 );
  187. register_forward( FM_AddToFullPack, "FwdFullPack", 1 );
  188. }
  189.  
  190. g_bEnabled = true;
  191.  
  192. #if defined FAKE_PLAYER
  193. new iEntity, iCount;
  194.  
  195. while( ( iEntity = find_ent_by_class( iEntity, "info_player_deathmatch" ) ) > 0 )
  196. if( iCount++ > 1 )
  197. break;
  198.  
  199. if( iCount <= 1 )
  200. g_iFakeplayer = -1;
  201.  
  202. set_task( 5.0, "UpdateBot" );
  203.  
  204. register_message( get_user_msgid( "DeathMsg" ), "MsgDeathMsg" );
  205. #endif
  206. } else
  207. g_bEnabled = false;
  208. }
  209.  
  210. // FAKEPLAYER
  211. ///////////////////////////////////////////
  212. #if defined FAKE_PLAYER
  213. public UpdateBot( ) {
  214. if( g_iFakeplayer == -1 )
  215. return;
  216.  
  217. new id = find_player( "i" );
  218.  
  219. if( !id ) {
  220. id = engfunc( EngFunc_CreateFakeClient, g_szBotName );
  221. if( pev_valid( id ) ) {
  222. engfunc( EngFunc_FreeEntPrivateData, id );
  223. dllfunc( MetaFunc_CallGameEntity, "player", id );
  224. set_user_info( id, "rate", "3500" );
  225. set_user_info( id, "cl_updaterate", "25" );
  226. set_user_info( id, "cl_lw", "1" );
  227. set_user_info( id, "cl_lc", "1" );
  228. set_user_info( id, "cl_dlmax", "128" );
  229. set_user_info( id, "cl_righthand", "1" );
  230. set_user_info( id, "_vgui_menus", "0" );
  231. set_user_info( id, "_ah", "0" );
  232. set_user_info( id, "dm", "0" );
  233. set_user_info( id, "tracker", "0" );
  234. set_user_info( id, "friends", "0" );
  235. set_user_info( id, "*bot", "1" );
  236. set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FAKECLIENT );
  237. set_pev( id, pev_colormap, id );
  238.  
  239. new szMsg[ 128 ];
  240. dllfunc( DLLFunc_ClientConnect, id, g_szBotName, "127.0.0.1", szMsg );
  241. dllfunc( DLLFunc_ClientPutInServer, id );
  242.  
  243. cs_set_user_team( id, CS_TEAM_T );
  244. ExecuteHamB( Ham_CS_RoundRespawn, id );
  245.  
  246. set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
  247. set_pev( id, pev_solid, SOLID_NOT );
  248. dllfunc( DLLFunc_Think, id );
  249.  
  250. g_iFakeplayer = id;
  251. }
  252. }
  253. }
  254.  
  255. public MsgDeathMsg( const iMsgId, const iMsgDest, const id ) {
  256. if( get_msg_arg_int( 2 ) == g_iFakeplayer )
  257. return PLUGIN_HANDLED;
  258.  
  259. return PLUGIN_CONTINUE;
  260. }
  261. #endif
  262.  
  263. // NEW TERRORIST
  264. ///////////////////////////////////////////
  265. public EventRandromize( ) {
  266. if( !g_bEnabled || g_bFirstRound || g_bRandromized )
  267. return PLUGIN_CONTINUE;
  268.  
  269. g_bRandromized = true;
  270.  
  271. new i, iPlayers[ 32 ], iNum, iPlayer;
  272. get_players( iPlayers, iNum, "c" );
  273.  
  274. if( iNum <= 1 )
  275. return PLUGIN_CONTINUE;
  276.  
  277. for( i = 0; i < iNum; i++ ) {
  278. iPlayer = iPlayers[ i ];
  279.  
  280. if( cs_get_user_team( iPlayer ) == CS_TEAM_T )
  281. cs_set_user_team( iPlayer, CS_TEAM_CT );
  282. }
  283.  
  284. new iRandomPlayer, CsTeams:iTeam;
  285.  
  286. while( ( iRandomPlayer = iPlayers[ random_num( 0, iNum - 1 ) ] ) == g_iLastTerr ) { }
  287.  
  288. g_iLastTerr = iRandomPlayer;
  289.  
  290. iTeam = cs_get_user_team( iRandomPlayer );
  291.  
  292. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT ) {
  293. cs_set_user_team(iRandomPlayer, CS_TEAM_T);
  294.  
  295. new szName[ 32 ];
  296. get_user_name( iRandomPlayer, szName, 31 );
  297.  
  298. for( i = 0; i < iNum; i++ )
  299. ColorChat(iPlayers[ i ], RED, "^1[^4%s^1] ^3%L", g_szPrefix, iPlayers[ i ], "DR_NOW_TERR", szName);
  300.  
  301. if( !g_bRestart && is_valid_ent( g_iThinker ) )
  302. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 );
  303. } else {
  304. g_bRandromized = false;
  305. EventRandromize( );
  306. }
  307.  
  308. return PLUGIN_CONTINUE;
  309. }
  310.  
  311. // NEW ROUND
  312. ///////////////////////////////////////////
  313. public EventRoundStart( ) {
  314. if( !g_bEnabled )
  315. return PLUGIN_CONTINUE;
  316.  
  317. g_bRandromized = false;
  318. g_bStarting = false;
  319.  
  320. new i, iPlayers[ 32 ], iNum, iRealPlayers, CsTeams:iTeam;
  321. get_players( iPlayers, iNum, "c" );
  322.  
  323. if( iNum <= 1 )
  324. return PLUGIN_CONTINUE;
  325.  
  326. for( i = 0; i < iNum; i++ ) {
  327. iTeam = cs_get_user_team( iPlayers[ i ] );
  328.  
  329. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT )
  330. iRealPlayers++;
  331. }
  332.  
  333. if( iRealPlayers <= 1 ) {
  334. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  335.  
  336. for( i = 0; i < iNum; i++ )
  337. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" );
  338.  
  339. return PLUGIN_CONTINUE;
  340. }
  341.  
  342. set_pcvar_num( g_pAutoBalance, 0 );
  343. set_pcvar_num( g_pLimitTeams, 0 );
  344.  
  345. if( g_bFirstRound ) {
  346. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  347.  
  348. for( i = 0; i < iNum; i++ ) {
  349. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_STARTING" );
  350.  
  351. ColorChat( iPlayers[ i ], RED, "^1[^4%s^1] ^3%L", g_szPrefix, iPlayers[ i ], "DR_STARTING_CC" );
  352. }
  353.  
  354. if( is_valid_ent( g_iThinker ) ) {
  355. g_bRestart = true;
  356.  
  357. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 9.0 );
  358. } else
  359. set_task( 9.0, "RestartRound" );
  360.  
  361. g_bStarting = true;
  362. g_bFirstRound = false;
  363. }
  364.  
  365. return PLUGIN_CONTINUE;
  366. }
  367.  
  368. // CHECK TERRORIST
  369. ///////////////////////////////////////////
  370. public FwdThinker( iEntity ) {
  371. if( g_bRestart ) {
  372. g_bRestart = false;
  373.  
  374. RestartRound( );
  375. } else
  376. CheckTerrorists( );
  377.  
  378. entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 15.0 );
  379. }
  380.  
  381. public CheckTerrorists( ) {
  382. if( !g_bEnabled || g_bFirstRound || g_bStarting )
  383. return PLUGIN_CONTINUE;
  384.  
  385. new i, iPlayers[ 32 ], iTerrors, iNum, iRealPlayers, CsTeams:iTeam;
  386. get_players( iPlayers, iNum, "c" );
  387.  
  388. if( iNum <= 1 )
  389. return PLUGIN_CONTINUE;
  390.  
  391. for( i = 0; i < iNum; i++ ) {
  392. iTeam = cs_get_user_team( iPlayers[ i ] );
  393.  
  394. if( iTeam == CS_TEAM_T )
  395. iTerrors++;
  396.  
  397. if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT )
  398. iRealPlayers++;
  399. }
  400.  
  401. if( iRealPlayers <= 1 ) {
  402. set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 );
  403.  
  404. for( i = 0; i < iNum; i++ )
  405. ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" );
  406.  
  407. return PLUGIN_CONTINUE;
  408. }
  409.  
  410. if( iTerrors == 0 ) {
  411. for( i = 0; i < iNum; i++ ) {
  412. ColorChat(iPlayers[ i ], RED, "^1[^4%s^1] %L", g_szPrefix, iPlayers[ i ], "DR_NO_DETECT");
  413.  
  414. if( is_user_alive( iPlayers[ i ] ) && cs_get_user_team( iPlayers[ i ] ) == CS_TEAM_CT )
  415. user_silentkill( iPlayers[ i ] );
  416. }
  417.  
  418. set_task( 0.5, "EventRandromize" );
  419. }
  420.  
  421. return PLUGIN_CONTINUE;
  422. }
  423.  
  424. // LIFE SYSTEM
  425. ///////////////////////////////////////////
  426. public EventTerrsWin( ) {
  427. if( !g_bEnabled || g_bFirstRound )
  428. return PLUGIN_CONTINUE;
  429.  
  430. new iPlayers[ 32 ], iNum, iPlayer;
  431. get_players( iPlayers, iNum, "c" );
  432.  
  433. if( iNum <= 1 )
  434. return PLUGIN_CONTINUE;
  435.  
  436. new iLifeCvar = get_pcvar_num( g_pLifeSystem );
  437.  
  438. for( new i = 0; i < iNum; i++ ) {
  439. iPlayer = iPlayers[ i ];
  440.  
  441. if( cs_get_user_team( iPlayer ) == CS_TEAM_T ) {
  442. set_user_frags( iPlayer, get_user_frags( iPlayer ) + 3 );
  443.  
  444. if( iLifeCvar == 2 )
  445. g_Lifes[ iPlayer ]++;
  446. }
  447. }
  448.  
  449. return PLUGIN_CONTINUE;
  450. }
  451.  
  452. public EventDeath( ) {
  453. if( !g_bEnabled )
  454. return PLUGIN_CONTINUE;
  455.  
  456. #if defined FAKE_PLAYER
  457. new iVictim = read_data( 2 );
  458. new iTeam = get_user_team( iVictim );
  459.  
  460. if( iTeam == 1 && is_user_alive( g_iFakeplayer ) )
  461. fakedamage( g_iFakeplayer, "worldspawn", 100.0, DMG_GENERIC );
  462.  
  463. if( !get_pcvar_num( g_pLifeSystem ) )
  464. return PLUGIN_CONTINUE;
  465. #else
  466. if( !get_pcvar_num( g_pLifeSystem ) )
  467. return PLUGIN_CONTINUE;
  468.  
  469. new iVictim = read_data( 2 );
  470. new iTeam = get_user_team( iVictim );
  471. #endif
  472.  
  473. new iKiller = read_data( 1 );
  474.  
  475. if( iKiller != iVictim && get_user_team(iKiller) != iTeam )
  476. g_Lifes[iKiller]++;
  477.  
  478. if( cs_get_user_team( iVictim ) == CS_TEAM_CT && g_Lifes[ iVictim ] > 0 ) {
  479. new iCTcount;
  480. for( new i = 1; i <= g_iMaxplayers; i++ ) {
  481. if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
  482. iCTcount++;
  483. }
  484.  
  485. if( iCTcount > 1 ) {
  486. set_task(3.2, "fnRevivePlayer", iVictim);
  487.  
  488. ColorChat( iVictim, RED, "^1[^4%s^1] %L", g_szPrefix, iVictim, "DR_LIFE_RESPAWN" );
  489. }
  490. /*else
  491. ColorChat( iVictim, RED, "^1[^4%s^1] %L", g_szPrefix, iVictim, "DR_LIFE_CANT" );*/
  492. }
  493.  
  494. return PLUGIN_CONTINUE;
  495. }
  496.  
  497. public fnRevivePlayer( id ) {
  498. if( g_bConnected[ id ] ) {
  499. if( cs_get_user_team( id ) == CS_TEAM_CT ) {
  500. new iCTcount;
  501. for( new i = 1; i <= g_iMaxplayers; i++ )
  502. if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
  503. iCTcount++;
  504.  
  505. if( iCTcount > 1 ) {
  506. ExecuteHamB( Ham_CS_RoundRespawn, id );
  507.  
  508. g_Lifes[ id ]--;
  509. }
  510. }
  511. }
  512. }
  513.  
  514. public CmdShowlifes( id ) {
  515. if( get_pcvar_num( g_pLifeSystem ) == 0 ) {
  516. ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_DISABLE" );
  517. return PLUGIN_HANDLED;
  518. }
  519.  
  520. if( g_Lifes[ id ] > 0 )
  521. ColorChat( id, RED, "^1[^4%s^1] ^3%L", g_szPrefix, id, "DR_LIFE_CC_COUNT", g_Lifes[ id ] );
  522. else
  523. ColorChat( id, RED, "^1[^4%s^1] ^3%L", g_szPrefix, id, "DR_LIFE_CC_NO" );
  524.  
  525. return PLUGIN_HANDLED;
  526. }
  527.  
  528. public Showlifes( id ) {
  529. set_hudmessage( 0, 128, 0, 0.04, 0.71, 0, 2.5, 2.5, 0.5, 0.5, 3 );
  530.  
  531. if( g_Lifes[ id ] > 0 )
  532. ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_COUNT", g_Lifes[ id ] );
  533. else
  534. ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_NO" );
  535. }
  536.  
  537. // EVENTS
  538. ///////////////////////////////////////////
  539. public EventResetHud( id ) {
  540. if( g_bEnabled && get_pcvar_num( g_pHideHuds ) && !is_user_bot( id ) ) {
  541. message_begin( MSG_ONE_UNRELIABLE, g_iMsgHideWeapon, _, id );
  542. write_byte( ( 1<<4 | 1<<5 ) );
  543. message_end( );
  544.  
  545. message_begin( MSG_ONE_UNRELIABLE, g_iMsgCrosshair, _, id );
  546. write_byte( 0 );
  547. message_end( );
  548. }
  549. }
  550.  
  551. public EventMoney( id ) {
  552. if( g_bEnabled && get_pcvar_num( g_pBlockMoney ) ) {
  553. set_pdata_int( id, 115, 0 );
  554.  
  555. message_begin( MSG_ONE_UNRELIABLE, g_iMsgMoney, _, id );
  556. write_long ( 0 );
  557. write_byte ( 1 );
  558. message_end( );
  559. }
  560. }
  561.  
  562. public client_putinserver( id )
  563. g_bConnected[ id ] = true;
  564.  
  565. public client_disconnect( id ) {
  566. g_bConnected[ id ] = false;
  567. CheckTerrorists( );
  568.  
  569. if( !g_bRestart && is_valid_ent( g_iThinker ) )
  570. entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 );
  571.  
  572. #if defined FAKE_PLAYER
  573. if( g_iFakeplayer == id ) {
  574. set_task( 1.5, "UpdateBot" );
  575.  
  576. g_iFakeplayer = 0;
  577. }
  578. #endif
  579. }
  580.  
  581. // SEMICLIP
  582. ///////////////////////////////////////////
  583. public FwdFullPack( es, e, ent, host, flags, player, pSet ) {
  584. if( !g_bEnabled )
  585. return FMRES_IGNORED;
  586.  
  587. if( player && g_iSemiClip[ ent ] && g_iSemiClip[ host ] ) {
  588. set_es( es, ES_Solid, SOLID_NOT );
  589. set_es( es, ES_RenderMode, kRenderTransAlpha );
  590. set_es( es, ES_RenderAmt, 85 );
  591. }
  592.  
  593. return FMRES_IGNORED;
  594. }
  595.  
  596. public FwdStartFrame( ) {
  597. if( !g_bEnabled )
  598. return FMRES_IGNORED;
  599.  
  600. static iPlayers[ 32 ], iNum, iPlayer, iPlayer2, i, j;
  601. get_players( iPlayers, iNum, "ache", "CT" );
  602.  
  603. arrayset( g_iSemiClip, 0, 32 );
  604.  
  605. if( iNum <= 1 )
  606. return FMRES_IGNORED;
  607.  
  608. for( i = 0; i < iNum; i++ ) {
  609. iPlayer = iPlayers[ i ];
  610.  
  611. for( j = 0; j < iNum; j++ ) {
  612. iPlayer2 = iPlayers[ j ];
  613.  
  614. if( iPlayer == iPlayer2 )
  615. continue;
  616.  
  617. if( g_iSemiClip[ iPlayer ] && g_iSemiClip[ iPlayer2 ] )
  618. continue;
  619.  
  620. if( entity_range( iPlayer, iPlayer2 ) < 128 ) {
  621. g_iSemiClip[ iPlayer ] = true;
  622. g_iSemiClip[ iPlayer2 ] = true;
  623. }
  624. }
  625. }
  626.  
  627. for( i = 0; i < iNum; i++ ) {
  628. iPlayer = iPlayers[ i ];
  629.  
  630. set_pev( iPlayer, pev_solid, g_iSemiClip[ iPlayer ] ? SOLID_NOT : SOLID_SLIDEBOX );
  631. }
  632.  
  633. return FMRES_IGNORED;
  634. }
  635.  
  636. // FORWARDS
  637. ///////////////////////////////////////////
  638. public FwdHamPlayerSpawn( id ) {
  639. if( !g_bEnabled || !is_user_alive( id ) )
  640. return HAM_IGNORED;
  641.  
  642. if( get_pcvar_num( g_pBlockRadio ) ) // thanks to ConnorMcLeod for this good way :)
  643. set_pdata_int( id, 192, 0 );
  644.  
  645. #if defined FAKE_PLAYER
  646. if( g_iFakeplayer == id ) {
  647. set_pev( id, pev_frags, -1337.0 );
  648. cs_set_user_deaths( id, -1337 );
  649.  
  650. set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
  651. set_pev( id, pev_solid, SOLID_NOT );
  652. entity_set_origin( id, Float:{ 999999.0, 999999.0, 999999.0 } );
  653. dllfunc( DLLFunc_Think, id );
  654. } else {
  655. #endif
  656. new CsTeams:iTeam = cs_get_user_team( id );
  657.  
  658. // An small delay for message
  659. if( get_pcvar_num( g_pLifeSystem ) != 0 && iTeam == CS_TEAM_CT )
  660. set_task( 0.8, "Showlifes", id );
  661.  
  662. strip_user_weapons( id );
  663. give_item( id, "weapon_knife" );
  664.  
  665. set_pdata_int( id, 116, 0 ); // Pickup fix by ConnorMcLeod
  666.  
  667. if( g_bGamerFun && iTeam == CS_TEAM_CT )
  668. give_item( id, "weapon_smokegrenade" );
  669.  
  670. if(get_pcvar_num( gFzNade ) && iTeam == CS_TEAM_T )
  671. {
  672. set_task(1.0,"GiveNade", id);
  673. }
  674. if( get_pcvar_num( g_pGiveUsp ) && iTeam == CS_TEAM_CT && !g_bHauntedHouse )
  675. set_task( 1.0, "GiveUsp", id );
  676.  
  677. #if defined FAKE_PLAYER
  678. }
  679. #endif
  680.  
  681. return HAM_IGNORED;
  682. }
  683.  
  684. public GiveUsp( const id ) {
  685. if( is_user_alive( id ) ) {
  686. give_item( id, "weapon_usp" );
  687. cs_set_user_bpammo( id, CSW_USP, 12);
  688. }
  689. }
  690.  
  691. public GiveNade( const id ) {
  692. if( is_user_alive( id ) ) {
  693. give_item( id, "weapon_smokegrenade" );
  694. }
  695. }
  696.  
  697. public FwdGameDesc( ) {
  698. static const GameName[ ] = "BetterPlay.eu";
  699.  
  700. forward_return( FMV_STRING, GameName );
  701.  
  702. return FMRES_SUPERCEDE;
  703. }
  704.  
  705. public FwdClientKill( const id ) {
  706. if( !g_bEnabled || !is_user_alive(id) )
  707. return FMRES_IGNORED;
  708.  
  709. if( get_pcvar_num( g_pBlockKill ) || cs_get_user_team( id ) == CS_TEAM_T ) {
  710. client_print( id, print_center, "%L", id, "DR_BLOCK_KILL" );
  711. client_print( id, print_console, "%L", id, "DR_BLOCK_KILL" );
  712.  
  713. return FMRES_SUPERCEDE;
  714. }
  715.  
  716. return FMRES_IGNORED;
  717. }
  718.  
  719. public FwdImpulse_201( const id ) {
  720. if( g_bEnabled && get_pcvar_num( g_pBlockSpray ) ) {
  721. if( is_user_alive( id ) )
  722. client_print( id, print_center, "%L", id, "DR_BLOCK_SPRAY" );
  723.  
  724. return PLUGIN_HANDLED_MAIN;
  725. }
  726.  
  727. return PLUGIN_CONTINUE;
  728. }
  729.  
  730. public FwdHamPlayerDamage( id, idInflictor, idAttacker, Float:flDamage, iDamageBits ) {
  731. if( get_pcvar_num( g_pNoFallDmg ) )
  732. if( iDamageBits & DMG_FALL )
  733. if( get_user_team( id ) == 1 )
  734. return HAM_SUPERCEDE;
  735.  
  736. return HAM_IGNORED;
  737. }
  738.  
  739. public MsgStatusIcon( msg_id, msg_dest, id ) {
  740. new szIcon[ 8 ];
  741. get_msg_arg_string( 2, szIcon, 7 );
  742.  
  743. static const BuyZone[ ] = "buyzone";
  744.  
  745. if( equal( szIcon, BuyZone ) ) {
  746. set_pdata_int( id, OFFSET_BZ, get_pdata_int( id, OFFSET_BZ, 5 ) & ~( 1 << 0 ), 5 );
  747.  
  748. return PLUGIN_HANDLED;
  749. }
  750.  
  751. return PLUGIN_CONTINUE;
  752. }
  753.  
  754. public CmdRadio( id ) {
  755. if( get_pcvar_num( g_pBlockRadio ) )
  756. return PLUGIN_HANDLED_MAIN;
  757.  
  758. return PLUGIN_CONTINUE;
  759. }
  760.  
  761. public RestartRound( )
  762. set_pcvar_num( g_pSvRestart, 1 );
  763.  
  764. // COLORCHAT
  765. /////////////////////////////////////////////
  766. ColorChat( id, Color:type, const szMessage[], {Float,Sql,Result,_}:... ) {
  767. if( !get_playersnum( ) ) return;
  768.  
  769. new message[ 256 ];
  770.  
  771. switch( type ) {
  772. case NORMAL: message[0] = 0x01;
  773. case GREEN: message[0] = 0x04;
  774. default: message[0] = 0x03;
  775. }
  776.  
  777. vformat( message[ 1 ], 251, szMessage, 4 );
  778.  
  779. message[ 192 ] = '^0';
  780.  
  781. replace_all( message, 191, "\YEL", "^1" );
  782. replace_all( message, 191, "\GRN", "^4" );
  783. replace_all( message, 191, "\TEM", "^3" );
  784.  
  785. new iTeam, ColorChange, index, MSG_Type;
  786.  
  787. if( id ) {
  788. MSG_Type = MSG_ONE_UNRELIABLE;
  789. index = id;
  790. } else {
  791. index = CC_FindPlayer();
  792. MSG_Type = MSG_BROADCAST;
  793. }
  794.  
  795. iTeam = get_user_team( index );
  796. ColorChange = CC_ColorSelection(index, MSG_Type, type);
  797.  
  798. CC_ShowColorMessage(index, MSG_Type, message);
  799.  
  800. if( ColorChange )
  801. CC_Team_Info(index, MSG_Type, TeamName[iTeam]);
  802. }
  803.  
  804. CC_ShowColorMessage( id, type, message[] ) {
  805. message_begin( type, g_iMsgSayText, _, id );
  806. write_byte( id );
  807. write_string( message );
  808. message_end( );
  809. }
  810.  
  811. CC_Team_Info( id, type, team[] ) {
  812. message_begin( type, g_iMsgTeamInfo, _, id );
  813. write_byte( id );
  814. write_string( team );
  815. message_end( );
  816.  
  817. return 1;
  818. }
  819.  
  820. CC_ColorSelection( index, type, Color:Type ) {
  821. switch( Type ) {
  822. case RED: return CC_Team_Info( index, type, TeamName[ 1 ] );
  823. case BLUE: return CC_Team_Info( index, type, TeamName[ 2 ] );
  824. }
  825.  
  826. return 0;
  827. }
  828.  
  829. CC_FindPlayer( ) {
  830. for( new i = 1; i <= g_iMaxplayers; i++ )
  831. if( g_bConnected[ i ] )
  832. return i;
  833.  
  834. return -1;
  835. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement