#include < amxmodx > #include < engine > #include < cstrike > #include < fun > #include < fakemeta > #include < hamsandwich > #pragma semicolon 1 // Comment this line if you do not want to have fake player ! // #define FAKE_PLAYER // Bot name #if defined FAKE_PLAYER new const g_szBotName[ ] = "Cs-********.pl"; #endif // Messages prefix new const g_szPrefix[ ] = "[Cs-********.pl]"; // Global Variables new bool:g_bHauntedHouse, bool:g_bGamerFun, bool:g_bRandromized, bool:g_bStarting, bool:g_bFirstRound; new bool:g_bEnabled, bool:g_bRestart, bool:g_bConnected[ 33 ]; new g_pRemoveBuyZone, g_pHideHuds, g_pLifeSystem, g_pSvRestart, g_pAutoBalance, g_pLimitTeams; new g_pNoFallDmg, g_pGameName, g_pToggle, g_pBlockSpray, g_pBlockRadio, g_pSemiclip, g_pBlockKill; new g_iMsgHideWeapon, g_iMsgCrosshair, g_iMsgTeamInfo, g_iMsgSayText; new g_iMaxplayers, g_iHudSync, g_iHudSync2, g_iLastTerr, g_iThinker; new g_iSemiClip[ 33 ], g_Lifes[ 33 ]; #if defined FAKE_PLAYER new g_iFakeplayer; #endif // Macros #if cellbits == 32 #define OFFSET_BZ 235 #else #define OFFSET_BZ 268 #endif // Colorchat enum Color { NORMAL = 1, GREEN, RED, BLUE }; new TeamName[ ][ ] = { "", "TERRORIST", "CT", "SPECTATOR" }; // ======================================================================================= public plugin_init( ) { new const VERSION[ ] = "3.0.3"; register_plugin( "Deathrun Manager", VERSION, "xPaw" ); g_pToggle = register_cvar( "deathrun_toggle", "1" ); g_pBlockSpray = register_cvar( "deathrun_spray", "1" ); g_pBlockRadio = register_cvar( "deathrun_radio", "0" ); g_pBlockKill = register_cvar( "deathrun_blockkill", "1" ); g_pSemiclip = register_cvar( "deathrun_semiclip", "1" ); g_pLifeSystem = register_cvar( "deathrun_lifesystem", "0" ); g_pGameName = register_cvar( "deathrun_gamename", "1" ); g_pNoFallDmg = register_cvar( "deathrun_terrnfd", "1" ); g_pRemoveBuyZone = register_cvar( "deathrun_removebz", "0" ); // Lets get map name... new szMapName[ 64 ]; get_mapname( szMapName, 63 ); if( contain( szMapName, "deathrun_" ) != -1 ) { set_pcvar_num( g_pToggle, 1 ); if( contain( szMapName, "hauntedhouse" ) != -1 ) g_bHauntedHouse = true; else { g_bHauntedHouse = false; if( equal( szMapName, "deathrun_gamerfun" ) ) g_bGamerFun = true; else g_bGamerFun = false; } } else set_pcvar_num( g_pToggle, 0 ); g_pSvRestart = get_cvar_pointer( "sv_restart" ); g_pAutoBalance = get_cvar_pointer( "mp_autoteambalance" ); g_pLimitTeams = get_cvar_pointer( "mp_limitteams" ); register_cvar( "deathrun_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY ); set_cvar_string( "deathrun_version", VERSION ); // Registering Language file register_dictionary( "deathrun.txt" ); // Logging Events register_logevent( "EventRoundStart", 2, "1=Round_Start" ); register_logevent( "EventRandromize", 2, "1=Round_End" ); register_event( "SendAudio", "EventTerrsWin", "a", "2&%!MRAD_terwin" ); register_event( "TextMsg", "EventRandromize", "a", "2&#Game_w" ); register_event( "DeathMsg", "EventDeath", "a"); register_event( "ResetHUD", "EventResetHud", "be" ); g_bFirstRound = true; g_iMaxplayers = get_maxplayers( ); g_iMsgHideWeapon = get_user_msgid( "HideWeapon" ); g_iMsgCrosshair = get_user_msgid( "Crosshair" ); g_iMsgSayText = get_user_msgid( "SayText" ); g_iMsgTeamInfo = get_user_msgid( "TeamInfo" ); g_iHudSync = CreateHudSyncObj( ); g_iHudSync2 = CreateHudSyncObj( ); if( get_pcvar_num( g_pToggle ) ) { RegisterHam( Ham_TakeDamage, "player", "FwdHamPlayerDamage" ); RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn", 1 ); register_forward( FM_ClientKill, "FwdClientKill" ); register_impulse( 201, "FwdImpulse_201" ); if( get_pcvar_num( g_pGameName ) ) register_forward( FM_GetGameDescription, "FwdGameDesc" ); register_clcmd( "say /lifes", "CmdShowlifes" ); register_clcmd( "say /lives", "CmdShowlifes" ); register_clcmd( "radio1", "CmdRadio" ); register_clcmd( "radio2", "CmdRadio" ); register_clcmd( "radio3", "CmdRadio" ); // Terrorist Check g_iThinker= create_entity( "info_target" ); if( is_valid_ent( g_iThinker ) ) { entity_set_string( g_iThinker, EV_SZ_classname, "DeathrunThinker" ); entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 20.0 ); g_bRestart = true; // First think will happen in 20.0, Restart will be done there. register_think( "DeathrunThinker", "FwdThinker" ); } else { set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); // Lets make restart after 20 seconds from map start. set_task( 20.0, "RestartRound" ); } if( get_pcvar_num( g_pRemoveBuyZone ) ) { register_message( get_user_msgid( "StatusIcon" ), "MsgStatusIcon" ); // BuyZone Icon // Remove buyzone on map remove_entity_name( "info_map_parameters" ); remove_entity_name( "func_buyzone" ); // Create own entity to block buying new iEntity = create_entity( "info_map_parameters" ); DispatchKeyValue( iEntity, "buying", "3" ); DispatchSpawn( iEntity ); } if( get_pcvar_num( g_pSemiclip ) ) { register_forward( FM_StartFrame, "FwdStartFrame", 0 ); register_forward( FM_AddToFullPack, "FwdFullPack", 1 ); } g_bEnabled = true; #if defined FAKE_PLAYER new iEntity, iCount; while( ( iEntity = find_ent_by_class( iEntity, "info_player_deathmatch" ) ) > 0 ) if( iCount++ > 1 ) break; if( iCount <= 1 ) g_iFakeplayer = -1; set_task( 5.0, "UpdateBot" ); register_message( get_user_msgid( "DeathMsg" ), "MsgDeathMsg" ); #endif } else g_bEnabled = false; } // FAKEPLAYER /////////////////////////////////////////// #if defined FAKE_PLAYER public UpdateBot( ) { if( g_iFakeplayer == -1 ) return; new id = find_player( "i" ); if( !id ) { id = engfunc( EngFunc_CreateFakeClient, g_szBotName ); if( pev_valid( id ) ) { engfunc( EngFunc_FreeEntPrivateData, id ); dllfunc( MetaFunc_CallGameEntity, "player", id ); set_user_info( id, "rate", "3500" ); set_user_info( id, "cl_updaterate", "25" ); set_user_info( id, "cl_lw", "1" ); set_user_info( id, "cl_lc", "1" ); set_user_info( id, "cl_dlmax", "128" ); set_user_info( id, "cl_righthand", "1" ); set_user_info( id, "_vgui_menus", "0" ); set_user_info( id, "_ah", "0" ); set_user_info( id, "dm", "0" ); set_user_info( id, "tracker", "0" ); set_user_info( id, "friends", "0" ); set_user_info( id, "*bot", "1" ); set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FAKECLIENT ); set_pev( id, pev_colormap, id ); new szMsg[ 128 ]; dllfunc( DLLFunc_ClientConnect, id, g_szBotName, "127.0.0.1", szMsg ); dllfunc( DLLFunc_ClientPutInServer, id ); cs_set_user_team( id, CS_TEAM_T ); ExecuteHamB( Ham_CS_RoundRespawn, id ); set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW ); set_pev( id, pev_solid, SOLID_NOT ); dllfunc( DLLFunc_Think, id ); g_iFakeplayer = id; } } } public MsgDeathMsg( const iMsgId, const iMsgDest, const id ) { if( get_msg_arg_int( 2 ) == g_iFakeplayer ) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; } #endif // NEW TERRORIST /////////////////////////////////////////// public EventRandromize( ) { if( !g_bEnabled || g_bFirstRound || g_bRandromized ) return PLUGIN_CONTINUE; g_bRandromized = true; new i, iPlayers[ 32 ], iNum, iPlayer; get_players( iPlayers, iNum, "c" ); if( iNum <= 1 ) return PLUGIN_CONTINUE; for( i = 0; i < iNum; i++ ) { iPlayer = iPlayers[ i ]; if( cs_get_user_team( iPlayer ) == CS_TEAM_T ) cs_set_user_team( iPlayer, CS_TEAM_CT ); } new iRandomPlayer, CsTeams:iTeam; while( ( iRandomPlayer = iPlayers[ random_num( 0, iNum - 1 ) ] ) == g_iLastTerr ) { } g_iLastTerr = iRandomPlayer; iTeam = cs_get_user_team( iRandomPlayer ); if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT ) { cs_set_user_team(iRandomPlayer, CS_TEAM_T); new szName[ 32 ]; get_user_name( iRandomPlayer, szName, 31 ); for( i = 0; i < iNum; i++ ) ColorChat(iPlayers[ i ], RED, "%s^4 %L", g_szPrefix, iPlayers[ i ], "DR_NOW_TERR", szName); if( !g_bRestart && is_valid_ent( g_iThinker ) ) entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 ); } else { g_bRandromized = false; EventRandromize( ); } return PLUGIN_CONTINUE; } // NEW ROUND /////////////////////////////////////////// public EventRoundStart( ) { if( !g_bEnabled ) return PLUGIN_CONTINUE; g_bRandromized = false; g_bStarting = false; new i, iPlayers[ 32 ], iNum, iRealPlayers, CsTeams:iTeam; get_players( iPlayers, iNum, "c" ); if( iNum <= 1 ) return PLUGIN_CONTINUE; for( i = 0; i < iNum; i++ ) { iTeam = cs_get_user_team( iPlayers[ i ] ); if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT ) iRealPlayers++; } if( iRealPlayers <= 1 ) { set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 ); for( i = 0; i < iNum; i++ ) ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" ); return PLUGIN_CONTINUE; } set_pcvar_num( g_pAutoBalance, 0 ); set_pcvar_num( g_pLimitTeams, 0 ); if( g_bFirstRound ) { set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 ); for( i = 0; i < iNum; i++ ) { ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_STARTING" ); ColorChat( iPlayers[ i ], RED, "%s^1 %L", g_szPrefix, iPlayers[ i ], "DR_STARTING_CC" ); } if( is_valid_ent( g_iThinker ) ) { g_bRestart = true; entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 9.0 ); } else set_task( 9.0, "RestartRound" ); g_bStarting = true; g_bFirstRound = false; } return PLUGIN_CONTINUE; } // CHECK TERRORIST /////////////////////////////////////////// public FwdThinker( iEntity ) { if( g_bRestart ) { g_bRestart = false; RestartRound( ); } else CheckTerrorists( ); entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 15.0 ); } public CheckTerrorists( ) { if( !g_bEnabled || g_bFirstRound || g_bStarting ) return PLUGIN_CONTINUE; new i, iPlayers[ 32 ], iTerrors, iNum, iRealPlayers, CsTeams:iTeam; get_players( iPlayers, iNum, "c" ); if( iNum <= 1 ) return PLUGIN_CONTINUE; for( i = 0; i < iNum; i++ ) { iTeam = cs_get_user_team( iPlayers[ i ] ); if( iTeam == CS_TEAM_T ) iTerrors++; if( iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT ) iRealPlayers++; } if( iRealPlayers <= 1 ) { set_hudmessage( 0, 128, 0, -1.0, 0.1, 0, 4.0, 4.0, 0.5, 0.5, 4 ); for( i = 0; i < iNum; i++ ) ShowSyncHudMsg( iPlayers[ i ], g_iHudSync, "%L", iPlayers[ i ], "DR_NOT_ENOUGH" ); return PLUGIN_CONTINUE; } if( iTerrors == 0 ) { for( i = 0; i < iNum; i++ ) { ColorChat(iPlayers[ i ], RED, "%s^1 %L", g_szPrefix, iPlayers[ i ], "DR_NO_DETECT"); if( is_user_alive( iPlayers[ i ] ) && cs_get_user_team( iPlayers[ i ] ) == CS_TEAM_CT ) user_silentkill( iPlayers[ i ] ); } set_task( 0.5, "EventRandromize" ); } return PLUGIN_CONTINUE; } // LIFE SYSTEM /////////////////////////////////////////// public EventTerrsWin( ) { if( !g_bEnabled || g_bFirstRound ) return PLUGIN_CONTINUE;