#include <amxmodx>
#include <engine>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <dhudmessage>
#include <xs>
#pragma tabsize 0
// Trigger & entities fix DRM
#define MAX_ENTS 1024
#define MAX_ITEMS 384
#define MAX_BUTTONS 256
new Float:g_flEntMins[ MAX_ENTS ][ 3 ];
new Float:g_flEntMaxs[ MAX_ENTS ][ 3 ];
new g_eEnt[ MAX_ENTS ];
new g_eCount, g_dCount;
new Float:g_flItemMins[ MAX_ITEMS ][ 3 ];
new Float:g_flItemMaxs[ MAX_ITEMS ][ 3 ];
new g_iEnt[ MAX_ITEMS ], n_iEnt[ MAX_ITEMS ];
new g_iCount;
new Float:g_flButMins[ MAX_BUTTONS ][ 3 ];
new Float:g_flButMaxs[ MAX_BUTTONS ][ 3 ];
new g_bEnt[ MAX_BUTTONS ], n_bEnt[ MAX_BUTTONS ];
new g_bCount;
new register_hurt, register_push, register_teleport, register_gravity, register_multiple, register_once, register_counter;
new register_breakable, register_breakable_render, register_button, register_button_delay, register_item, register_item_delay, register_door, register_door_open;
new register_door_rotating, register_door_rotating_open, register_momentary_door, register_train, register_train_render, register_vehicle, register_tracktrain;
new register_rotating, register_rotating_render, register_pendulum, register_block;
new cvar_breakable, cvar_button, cvar_item, cvar_door, cvar_door_open, cvar_door_rotating, cvar_door_rotating_open, cvar_momentary_door;
new cvar_train, cvar_vehicle, cvar_tracktrain, cvar_rotating, cvar_pendulum, cvar_block;
// 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[ ] = "Dr.Crizatii.Ro - Deathrun v5.0";
#endif
// Messages prefix
new const g_szPrefix[ ] = "[Crizatii]";
// 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_pBlockMoney, g_pLifeSystem, g_pSvRestart, g_pAutoBalance, g_pLimitTeams;
new g_pNoFallDmg, g_pGameName, g_pToggle, g_pBlockSpray, g_pBlockRadio, g_pSemiclip, g_pGiveUsp, g_pBlockKill;
new g_iMsgHideWeapon, g_iMsgCrosshair, g_iMsgMoney, g_iMsgTeamInfo, g_iMsgSayText;
new g_iMaxplayers, g_iHudSync, g_iHudSync2, g_iLastTerr, g_iThinker;
new g_iSemiClip[ 33 ], g_Lifes[ 33 ];
// UnStuck
new stuck[33]
new cvar[3]
new const Float:size[][3] = {
{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},
{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},
{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},
{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},
{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}
}
// Name Replacer
new const g_names[][] =
{
"RCPlayer",
"www.",
".com",
".ro",
".net",
"ecila",
".org",
".info",
".ru",
".ee",
":27",
"<warrior",
"warrior player",
"watf",
"~",
"pgl",
"[antimat]",
"no swear",
"jucator de",
"leagane",
".ua",
"blackdevil",
"reddevil",
"faradungi",
"(1)",
"(2)",
"(3)",
"[.]com",
"[.]ro",
"kgb player",
"empty",
"unnamed",
"heker",
"DR~",
"anzo",
"svx-player",
"89."
}
new g_sizeof_names = sizeof g_names
new const g_names_new[][] =
{
"Dr.Crizatii.Ro",
"Dr.Crizatii.Ro",
"Dr.Crizatii.Ro"
}
new g_sizeof_names_new = sizeof g_names_new - 1
new g_filter_chars[32]
//new g_sizeof_filter = sizeof g_filter_chars
new g_names_changed = 1
#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"
};
enum
{
TEAM_NONE = 0,
TEAM_T,
TEAM_CT,
TEAM_SPEC,
MAX_TEAMS
};
new const g_cTeamChars[MAX_TEAMS] =
{
'U',
'T',
'C',
'S'
};
new const g_sTeamNums[MAX_TEAMS][] =
{
"0",
"1",
"2",
"3"
};
new const g_sClassNums[MAX_TEAMS][] =
{
"1",
"2",
"3",
"4"
};
// Old Style Menus
stock const FIRST_JOIN_MSG[] = "#Team_Select";
stock const FIRST_JOIN_MSG_SPEC[] = "#Team_Select_Spect";
stock const INGAME_JOIN_MSG[] = "#IG_Team_Select";
stock const INGAME_JOIN_MSG_SPEC[] = "#IG_Team_Select_Spect";
const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC);
// New VGUI Menus
stock const VGUI_JOIN_TEAM_NUM = 2;
stock print_chatColorDeathrun(const id,const input[], any:...)
{
new msg[191], players[32], count = 1;
vformat(msg,190,input,3);
replace_all(msg,190,"\g","^4");// green
replace_all(msg,190,"\n","^1");// normal
replace_all(msg,190,"\t","^3");// team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
new g_iTeam[33];
new g_iPlayers[MAX_TEAMS];
new tjm_join_team;
new tjm_switch_team;
new tjm_class[MAX_TEAMS];
new tjm_block_change;
// =======================================================================================
public plugin_init( ) {
new const VERSION[ ] = "1.0";
register_plugin( "Deathrun Manager", VERSION, "Bogdaaan" );
RegisterHam(Ham_Touch, "func_door", "Door_Touch")
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
g_pToggle = register_cvar( "deathrun_toggle", "1" );
g_pBlockSpray = register_cvar( "deathrun_spray", "1" );
g_pBlockRadio = register_cvar( "deathrun_radio", "1" );
g_pBlockKill = register_cvar( "deathrun_blockkill", "1" );
g_pBlockMoney = register_cvar( "deathrun_blockmoney", "1" );
g_pSemiclip = register_cvar( "deathrun_semiclip", "1" );
g_pGiveUsp = register_cvar( "deathrun_giveusp", "1" );
g_pHideHuds = register_cvar( "deathrun_hidehud", "1" );
g_pLifeSystem = register_cvar( "deathrun_lifesystem", "2" );
g_pGameName = register_cvar( "deathrun_gamename", "1" );
g_pNoFallDmg = register_cvar( "deathrun_terrnfd", "1" );
g_pRemoveBuyZone = register_cvar( "deathrun_removebz", "1" );
// Trigger & entities fix
register_cvar( "semiclip_fix_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
register_hurt = register_cvar( "semiclip_fix_hurt", "1" );
register_push = register_cvar( "semiclip_fix_push", "1" );
register_teleport = register_cvar( "semiclip_fix_teleport", "1" );
register_gravity = register_cvar( "semiclip_fix_gravity", "1" );
register_multiple = register_cvar( "semiclip_fix_multiple", "1" );
register_once = register_cvar( "semiclip_fix_once", "1" );
register_counter = register_cvar( "semiclip_fix_counter", "1" );
register_breakable = register_cvar( "semiclip_fix_breakable", "1" );
register_breakable_render = register_cvar( "semiclip_fix_breakable_render", "1" );
register_button = register_cvar( "semiclip_fix_button", "1" );
register_button_delay = register_cvar( "semiclip_fix_button_delay", "2.0" );
register_item = register_cvar( "semiclip_fix_item", "1" );
register_item_delay = register_cvar( "semiclip_fix_item_delay", "2.0" );
register_door = register_cvar( "semiclip_fix_door", "1" );
register_door_open = register_cvar( "semiclip_fix_door_open", "1" );
register_door_rotating = register_cvar( "semiclip_fix_door_rotating", "1" );
register_door_rotating_open = register_cvar( "semiclip_fix_door_rotating_open", "1" );
register_momentary_door = register_cvar( "semiclip_fix_momentary_door", "1" );
register_train = register_cvar( "semiclip_fix_train", "1" );
register_train_render = register_cvar( "semiclip_fix_train_render", "1" );
register_vehicle = register_cvar( "semiclip_fix_vehicle", "1" );
register_tracktrain = register_cvar( "semiclip_fix_tracktrain", "1" );
register_rotating = register_cvar( "semiclip_fix_rotating", "1" );
register_rotating_render = register_cvar( "semiclip_fix_rotating_render", "1" );
register_pendulum = register_cvar( "semiclip_fix_pendulum", "1" );
register_block = register_cvar( "semiclip_fix_block", "1" );
//Bloock jointeam
register_concmd( "jointeam", "cmdBlock", _, _ );
// =======================================================================================
register_clcmd("amx_showip", "cmdShowIp", -1);
// =======================================================================================
// Team Auto Join
register_event("TeamInfo", "event_TeamInfo", "a");
register_message(get_user_msgid("ShowMenu"), "message_ShowMenu");
register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu");
tjm_join_team = register_cvar("tjm_join_team", "2");
tjm_switch_team = register_cvar("tjm_switch_team", "0");
tjm_class[TEAM_T] = register_cvar("tjm_class_t", "4");
tjm_class[TEAM_CT] = register_cvar("tjm_class_ct", "2");
tjm_block_change = register_cvar("tjm_block_change", "1");
// Team Auto Join
// 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( "Money", "EventMoney", "b" );
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_iMsgMoney = get_user_msgid( "Money" );
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( "say /vieti", "CmdShowlifes" );
register_clcmd( "say /life", "CmdShowlifes" );
register_clcmd( "radio1", "CmdRadio" );
register_clcmd( "radio2", "CmdRadio" );
register_clcmd( "radio3", "CmdRadio" );
// Resetscore
register_clcmd("say /resetscore", "cmdReset");
register_clcmd("amx_resetscore", "cmdReset");
register_clcmd("amx_rs", "cmdReset");
register_clcmd("say /rs", "cmdReset");
register_clcmd("say_team /resetscore", "cmdReset");
register_clcmd("say_team /rs", "cmdReset");
// UnStuck
cvar[0] = register_cvar("amx_autounstuck","1")
cvar[1] = register_cvar("amx_autounstuckeffects","1")
cvar[2] = register_cvar("amx_autounstuckwait","7")
set_task(0.1,"checkstuck",0,"",0,"b")
//Name Replacer
formatex(g_filter_chars, 31, " ~`@#$%&*()-_=+\|[{]};',<>/?") //^".
// 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;
}
public event_new_round()
{
server_cmd("sv_gravity 800")
server_cmd("sv_unlag 1")
server_cmd("sv_airaccelerate 10000")
return PLUGIN_HANDLED
}
public Door_Touch(ent, other)
{
static szClass[8]
pev(other, pev_classname, szClass, charsmax(szClass))
if( !equal(szClass, "player") && pev(other, pev_groundentity) == ent )
{
engfunc(EngFunc_RemoveEntity, other)
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
// 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;
new iPlayers[ 32 ], iNum, iPlayer;
get_players( iPlayers, iNum, "c" );
if( iNum <= 1 )
return PLUGIN_CONTINUE;
new iLifeCvar = get_pcvar_num( g_pLifeSystem );
for( new i = 0; i < iNum; i++ ) {
iPlayer = iPlayers[ i ];
if( cs_get_user_team( iPlayer ) == CS_TEAM_T ) {
set_user_frags( iPlayer, get_user_frags( iPlayer ) + 3 );
if( iLifeCvar == 2 )
g_Lifes[ iPlayer ]++;
}
}
return PLUGIN_CONTINUE;
}
public EventDeath( ) {
if( !g_bEnabled )
return PLUGIN_CONTINUE;
#if defined FAKE_PLAYER
new iVictim = read_data( 2 );
new iTeam = get_user_team( iVictim );
if( iTeam == 1 && is_user_alive( g_iFakeplayer ) )
fakedamage( g_iFakeplayer, "worldspawn", 100.0, DMG_GENERIC );
if( !get_pcvar_num( g_pLifeSystem ) )
return PLUGIN_CONTINUE;
#else
if( !get_pcvar_num( g_pLifeSystem ) )
return PLUGIN_CONTINUE;
new iVictim = read_data( 2 );
new iTeam = get_user_team( iVictim );
#endif
new iKiller = read_data( 1 );
if( iKiller != iVictim && get_user_team(iKiller) != iTeam )
g_Lifes[iKiller]++;
if( cs_get_user_team( iVictim ) == CS_TEAM_CT && g_Lifes[ iVictim ] > 0 ) {
new iCTcount;
for( new i = 1; i <= g_iMaxplayers; i++ ) {
if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
iCTcount++;
}
if( iCTcount > 1 ) {
set_task(3.2, "fnRevivePlayer", iVictim);
ColorChat( iVictim, RED, "%s^1 %L", g_szPrefix, iVictim, "DR_LIFE_RESPAWN" );
}
/*else
ColorChat( iVictim, RED, "%s^1 %L", g_szPrefix, iVictim, "DR_LIFE_CANT" );*/
}
return PLUGIN_CONTINUE;
}
public fnRevivePlayer( id ) {
if( g_bConnected[ id ] ) {
if( cs_get_user_team( id ) == CS_TEAM_CT ) {
new iCTcount;
for( new i = 1; i <= g_iMaxplayers; i++ )
if( is_user_alive( i ) && cs_get_user_team( i ) == CS_TEAM_CT )
iCTcount++;
if( iCTcount > 1 ) {
ExecuteHamB( Ham_CS_RoundRespawn, id );
g_Lifes[ id ]--;
}
}
}
}
public CmdShowlifes( id ) {
if( get_pcvar_num( g_pLifeSystem ) == 0 ) {
ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_DISABLE" );
return PLUGIN_HANDLED;
}
if( g_Lifes[ id ] > 0 )
ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_CC_COUNT", g_Lifes[ id ] );
else
ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_LIFE_CC_NO" );
return PLUGIN_HANDLED;
}
public Showlifes( id ) {
set_hudmessage( 0, 128, 0, 0.04, 0.71, 0, 2.5, 2.5, 0.5, 0.5, 3 );
if( g_Lifes[ id ] > 0 )
ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_COUNT", g_Lifes[ id ] );
else
ShowSyncHudMsg( id, g_iHudSync2, "%L", id, "DR_LIFE_NO" );
}
// EVENTS
///////////////////////////////////////////
public EventResetHud( id ) {
if( g_bEnabled && get_pcvar_num( g_pHideHuds ) && !is_user_bot( id ) ) {
message_begin( MSG_ONE_UNRELIABLE, g_iMsgHideWeapon, _, id );
write_byte( ( 1<<4 | 1<<5 ) );
message_end( );
message_begin( MSG_ONE_UNRELIABLE, g_iMsgCrosshair, _, id );
write_byte( 0 );
message_end( );
}
}
public EventMoney( id ) {
if( g_bEnabled && get_pcvar_num( g_pBlockMoney ) ) {
set_pdata_int( id, 115, 0 );
message_begin( MSG_ONE_UNRELIABLE, g_iMsgMoney, _, id );
write_long ( 0 );
write_byte ( 1 );
message_end( );
}
}
public client_putinserver( id )
g_bConnected[ id ] = true;
public client_disconnect( id ) {
remove_task(id);
g_bConnected[ id ] = false;
CheckTerrorists( );
if( !g_bRestart && is_valid_ent( g_iThinker ) )
entity_set_float( g_iThinker, EV_FL_nextthink, get_gametime( ) + 15.0 );
#if defined FAKE_PLAYER
if( g_iFakeplayer == id ) {
set_task( 1.5, "UpdateBot" );
g_iFakeplayer = 0;
}
#endif
}
// SEMICLIP
///////////////////////////////////////////
public FwdFullPack( es, e, ent, host, flags, player, pSet ) {
if( !g_bEnabled )
return FMRES_IGNORED;
if( player && g_iSemiClip[ ent ] && g_iSemiClip[ host ] ) {
set_es( es, ES_Solid, SOLID_NOT );
set_es( es, ES_RenderMode, kRenderTransAlpha );
set_es( es, ES_RenderAmt, 85 );
}
return FMRES_IGNORED;
}
public FwdStartFrame( ) {
if( !g_bEnabled )
return FMRES_IGNORED;
static iPlayers[ 32 ], iNum, iPlayer, iPlayer2, i, j;
get_players( iPlayers, iNum, "ache", "CT" );
arrayset( g_iSemiClip, 0, 32 );
if( iNum <= 1 )
return FMRES_IGNORED;
for( i = 0; i < iNum; i++ ) {
iPlayer = iPlayers[ i ];
for( j = 0; j < iNum; j++ ) {
iPlayer2 = iPlayers[ j ];
if( iPlayer == iPlayer2 )
continue;
if( g_iSemiClip[ iPlayer ] && g_iSemiClip[ iPlayer2 ] )
continue;
if( entity_range( iPlayer, iPlayer2 ) < 128 ) {
g_iSemiClip[ iPlayer ] = true;
g_iSemiClip[ iPlayer2 ] = true;
}
}
}
for( i = 0; i < iNum; i++ ) {
iPlayer = iPlayers[ i ];
set_pev( iPlayer, pev_solid, g_iSemiClip[ iPlayer ] ? SOLID_NOT : SOLID_SLIDEBOX );
}
return FMRES_IGNORED;
}
// FORWARDS
///////////////////////////////////////////
public FwdHamPlayerSpawn( id ) {
if( !g_bEnabled || !is_user_alive( id ) )
return HAM_IGNORED;
if( get_pcvar_num( g_pBlockRadio ) ) // thanks to ConnorMcLeod for this good way
set_pdata_int( id, 192, 0 );
#if defined FAKE_PLAYER
if( g_iFakeplayer == id ) {
set_pev( id, pev_frags, -1000.0 );
cs_set_user_deaths( id, -1000 );
set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
set_pev( id, pev_solid, SOLID_NOT );
entity_set_origin( id, Float:{ 999999.0, 999999.0, 999999.0 } );
dllfunc( DLLFunc_Think, id );
} else {
#endif
new CsTeams:iTeam = cs_get_user_team( id );
// An small delay for message
if( get_pcvar_num( g_pLifeSystem ) != 0 && iTeam == CS_TEAM_CT )
set_task( 0.8, "Showlifes", id );
strip_user_weapons( id );
give_item( id, "weapon_knife" );
set_pdata_int( id, 116, 0 ); // Pickup fix by ConnorMcLeod
if( g_bGamerFun && iTeam == CS_TEAM_CT )
give_item( id, "weapon_smokegrenade" );
if( get_pcvar_num( g_pGiveUsp ) && iTeam == CS_TEAM_CT && !g_bHauntedHouse )
set_task( 1.0, "GiveUsp", id );
#if defined FAKE_PLAYER
}
#endif
return HAM_IGNORED;
}
public GiveUsp( const id ) {
if( is_user_alive( id ) ) {
give_item( id, "weapon_usp" );
cs_set_user_bpammo( id, CSW_USP, 100 );
}
}
public FwdGameDesc( ) {
static const GameName[ ] = "Deathrun v5.0";
forward_return( FMV_STRING, GameName );
return FMRES_SUPERCEDE;
}
public FwdClientKill( const id ) {
if( !g_bEnabled || !is_user_alive(id) )
return FMRES_IGNORED;
if( get_pcvar_num( g_pBlockKill ) || cs_get_user_team( id ) == CS_TEAM_T ) {
client_print( id, print_center, "%L", id, "DR_BLOCK_KILL" );
client_print( id, print_console, "%L", id, "DR_BLOCK_KILL" );
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public FwdImpulse_201( const id ) {
if( g_bEnabled && get_pcvar_num( g_pBlockSpray ) ) {
if( is_user_alive( id ) )
client_print( id, print_center, "%L", id, "DR_BLOCK_SPRAY" );
return PLUGIN_HANDLED_MAIN;
}
return PLUGIN_CONTINUE;
}
public FwdHamPlayerDamage( id, idInflictor, idAttacker, Float:flDamage, iDamageBits ) {
if( get_pcvar_num( g_pNoFallDmg ) )
if( iDamageBits & DMG_FALL )
if( get_user_team( id ) == 1 )
return HAM_SUPERCEDE;
return HAM_IGNORED;
}
public MsgStatusIcon( msg_id, msg_dest, id ) {
new szIcon[ 8 ];
get_msg_arg_string( 2, szIcon, 7 );
static const BuyZone[ ] = "buyzone";
if( equal( szIcon, BuyZone ) ) {
set_pdata_int( id, OFFSET_BZ, get_pdata_int( id, OFFSET_BZ, 5 ) & ~( 1 << 0 ), 5 );
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public CmdRadio( id ) {
if( get_pcvar_num( g_pBlockRadio ) )
return PLUGIN_HANDLED_MAIN;
return PLUGIN_CONTINUE;
}
public RestartRound( )
set_pcvar_num( g_pSvRestart, 1 );
// COLORCHAT
/////////////////////////////////////////////
ColorChat( id, Color:type, const szMessage[], {Float,Sql,Result,_}:... ) {
if( !get_playersnum( ) ) return;
new message[ 256 ];
switch( type ) {
case NORMAL: message[0] = 0x01;
case GREEN: message[0] = 0x04;
default: message[0] = 0x03;
}
vformat( message[ 1 ], 251, szMessage, 4 );
message[ 192 ] = '^0';
replace_all( message, 191, "\YEL", "^1" );
replace_all( message, 191, "\GRN", "^4" );
replace_all( message, 191, "\TEM", "^3" );
new iTeam, ColorChange, index, MSG_Type;
if( id ) {
MSG_Type = MSG_ONE_UNRELIABLE;
index = id;
} else {
index = CC_FindPlayer();
MSG_Type = MSG_BROADCAST;
}
iTeam = get_user_team( index );
ColorChange = CC_ColorSelection(index, MSG_Type, type);
CC_ShowColorMessage(index, MSG_Type, message);
if( ColorChange )
CC_Team_Info(index, MSG_Type, TeamName[iTeam]);
}
CC_ShowColorMessage( id, type, message[] ) {
message_begin( type, g_iMsgSayText, _, id );
write_byte( id );
write_string( message );
message_end( );
}
CC_Team_Info( id, type, team[] ) {
message_begin( type, g_iMsgTeamInfo, _, id );
write_byte( id );
write_string( team );
message_end( );
return 1;
}
CC_ColorSelection( index, type, Color:Type ) {
switch( Type ) {
case RED: return CC_Team_Info( index, type, TeamName[ 1 ] );
case BLUE: return CC_Team_Info( index, type, TeamName[ 2 ] );
}
return 0;
}
CC_FindPlayer( ) {
for( new i = 1; i <= g_iMaxplayers; i++ )
if( g_bConnected[ i ] )
return i;
return -1;
}
public plugin_cfg()
{
set_task(0.1,"check_plugins");
set_task(7.0,"delay_load");
set_cvar_num("mp_limitteams", 32);
set_cvar_num("sv_restart", 1);
}
// Trigger & Entities
public check_plugins() {
if(find_plugin_byfile("linux_func_rotating_fix_fakemeta.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_fakemeta.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_fakemeta.amxx");
}
if(find_plugin_byfile("linux_func_rotating_fix_engine.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_rotating_fix_engine.amxx plugin running! stopped.");
pause("acd","linux_func_rotating_fix_engine.amxx");
}
if(find_plugin_byfile("func_rotating_bugfix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: func_rotating_bugfix.amxx plugin running! stopped.");
pause("acd","func_rotating_bugfix.amxx");
}
if(find_plugin_byfile("DRM_trigger_hurt_fix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: DRM_trigger_hurt_fix.amxx plugin running! stopped.");
pause("acd","DRM_trigger_hurt_fix.amxx");
}
if(find_plugin_byfile("linux_func_train_fm.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: linux_func_train_fm.amxx plugin running! stopped.");
pause("acd","linux_func_train_fm.amxx");
}
if(find_plugin_byfile("BreakableFix.amxx") != INVALID_PLUGIN_ID) {
log_amx("WARNING: BreakableFix.amxx plugin running! stopped.");
pause("acd","BreakableFix.amxx");
}
}
public delay_load()
{
new cvar_hurt = get_pcvar_num(register_hurt);
new cvar_push = get_pcvar_num(register_push);
new cvar_teleport = get_pcvar_num(register_teleport);
new cvar_gravity = get_pcvar_num(register_gravity);
new cvar_multiple = get_pcvar_num(register_multiple);
new cvar_once = get_pcvar_num(register_once);
new cvar_counter = get_pcvar_num(register_counter);
cvar_breakable = get_pcvar_num(register_breakable);
new cvar_breakable_render = get_pcvar_num(register_breakable_render);
cvar_button = get_pcvar_num(register_button);
new Float:cvar_button_delay = get_pcvar_float(register_button_delay);
cvar_item = get_pcvar_num(register_item);
new Float:cvar_item_delay = get_pcvar_float(register_item_delay);
cvar_door = get_pcvar_num(register_door);
cvar_door_open = get_pcvar_num(register_door_open);
cvar_door_rotating = get_pcvar_num(register_door_rotating);
cvar_door_rotating_open = get_pcvar_num(register_door_rotating_open);
cvar_momentary_door = get_pcvar_num(register_momentary_door);
cvar_train = get_pcvar_num(register_train);
new cvar_train_render = get_pcvar_num(register_train_render);
cvar_vehicle = get_pcvar_num(register_vehicle);
cvar_tracktrain = get_pcvar_num(register_tracktrain);
cvar_rotating = get_pcvar_num(register_rotating);
new cvar_rotating_render = get_pcvar_num(register_rotating_render);
cvar_pendulum = get_pcvar_num(register_pendulum);
cvar_block = get_pcvar_num(register_block);
// Searching entities
new iEntity = -1;
new g_iPushCount, g_iBreakCount, g_iTrainCount, g_iRotatingCount, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31);
if (cvar_hurt&&equali(classname,"trigger_hurt")||cvar_push&&equali(classname,"trigger_push")
||cvar_teleport&&equali(classname,"trigger_teleport")||cvar_gravity&&equali(classname,"trigger_gravity")
||cvar_multiple&&equali(classname,"trigger_multiple")||cvar_once&&equali(classname,"trigger_once")
||cvar_counter&&equali(classname,"trigger_counter")||cvar_breakable&&equali(classname,"func_breakable")) {
pev( iEntity, pev_absmin, g_flEntMins[ g_eCount ] );
pev( iEntity, pev_absmax, g_flEntMaxs[ g_eCount ] );
g_eEnt[ g_eCount ] = iEntity;
g_eCount++;
if (equali(classname,"trigger_push")) g_iPushCount++;
}
if (cvar_breakable_render&&equali(classname,"func_breakable")) g_iBreakCount++;
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain"))
g_dCount++;
if (is_linux_server()&&cvar_train_render&&equali(classname,"func_train")) g_iTrainCount++;
if (is_linux_server()&&cvar_rotating_render&&equali(classname,"func_rotating")) g_iRotatingCount++;
if (cvar_item&&(containi(classname,"item_")!=-1||equali(classname,"armoury_entity"))) g_iCount++;
if (cvar_button&&equali(classname,"func_button")) g_bCount++;
}
}
if(g_eCount>0||g_iCount>0||g_bCount>0) {
register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
if (g_iPushCount > 0) RegisterHam(Ham_Touch, "trigger_push", "CTriggerPush_Touch");
}
if (g_dCount>0) set_task(0.1, "check_players", 0, "", 0, "b");
if (cvar_breakable_render&&g_iBreakCount > 0) RegisterHam( Ham_Think , "func_breakable" , "FwdThinkBreak" );
if (is_linux_server()&&cvar_train_render&&g_iTrainCount > 0) RegisterHam( Ham_Think , "func_train", "Think_FixAngles", 1 );
if (is_linux_server()&&cvar_rotating_render&&g_iRotatingCount > 0) RegisterHam( Ham_Think , "func_rotating", "Think_FixAngles", 1 );
if (cvar_item_delay>0.0) set_task(cvar_item_delay, (g_iCount > 0 ? "abs_update_items" : "abs_update_boxs"), 1, "", 0, "b");
else if (cvar_item_delay<=0.0&&g_iCount > 0) set_task(0.1, "abs_update_items",0);
if (cvar_button_delay>0.0&&g_bCount > 0) set_task(cvar_button_delay, "abs_update_buttons", 0, "", 0, "b");
else if (cvar_button_delay<=0.0&&g_bCount > 0) set_task(0.1, "abs_update_buttons");
}
public abs_update_items(weaponbox) {
g_iEnt = n_iEnt;
g_iCount = 0;
// Searching entities
new iEntity = -1, classname[32];
while( (iEntity = engfunc(EngFunc_FindEntityInSphere, iEntity, Float:{0.0,0.0,0.0}, 8192.0)) > 0 ) {
if (pev_valid(iEntity)) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (containi(classname,"item_")!=-1||equali(classname,"armoury_entity")||weaponbox&&equali(classname,"weaponbox")) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}
}
public abs_update_boxs() {
g_iEnt = n_iEnt;
g_iCount = 0;
// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "weaponbox")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flItemMins[ g_iCount ] );
pev( iEntity, pev_absmax, g_flItemMaxs[ g_iCount ] );
g_iEnt[ g_iCount ] = iEntity;
g_iCount++;
}
}
}
public abs_update_buttons() {
g_bEnt = n_bEnt;
g_bCount = 0;
// Searching entities
new iEntity = -1;
while( (iEntity = engfunc(EngFunc_FindEntityByString, iEntity, "classname", "func_button")) > 0 ) {
if (pev_valid(iEntity)) {
pev( iEntity, pev_absmin, g_flButMins[ g_bCount ] );
pev( iEntity, pev_absmax, g_flButMaxs[ g_bCount ] );
g_bEnt[ g_bCount ] = iEntity;
g_bCount++;
}
}
}
public FwdPlayerPreThink( id ) {
if( !is_user_alive( id ) || pev( id, pev_solid ) != SOLID_NOT )
return FMRES_IGNORED;
if (g_eCount>0||g_iCount>0||g_bCount>0) {
new Float:flMins[ 3 ], Float:flMaxs[ 3 ];
pev( id, pev_absmin, flMins );
pev( id, pev_absmax, flMaxs );
if (g_eCount>0) {
// Head and Legs fix oO
new Float:flMinsF[ 3 ], Float:flMaxsF[ 3 ];
flMinsF[0] = flMins[0]+1;
flMinsF[1] = flMins[1]+1;
flMinsF[2] = flMins[2]+3;
flMaxsF[0] = flMaxs[0]-1;
flMaxsF[1] = flMaxs[1]-1;
flMaxsF[2] = flMaxs[2]-17;
new classname[32];
for( new i = 0; i < g_eCount; i++ ) {
if (pev_valid(g_eEnt[i])) {
if (pev( g_eEnt[i], pev_solid ) != SOLID_NOT) {
classname[0] = '^0';
pev(g_eEnt[i],pev_classname,classname, 31);
if (cvar_breakable&&equali(classname,"func_breakable")) {
if( !( g_flEntMins[i][0] > flMaxs[0] || g_flEntMaxs[i][0] < flMins[0] )
&& !( g_flEntMins[i][1] > flMaxs[1] || g_flEntMaxs[i][1] < flMins[1] )
&& !( g_flEntMins[i][2] > flMaxs[2] || g_flEntMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
} else {
if( !( g_flEntMins[i][0] > flMaxsF[0] || g_flEntMaxs[i][0] < flMinsF[0] )
&& !( g_flEntMins[i][1] > flMaxsF[1] || g_flEntMaxs[i][1] < flMinsF[1] )
&& !( g_flEntMins[i][2] > flMaxsF[2] || g_flEntMaxs[i][2] < flMinsF[2] ) ) {
ExecuteHamB( Ham_Touch, g_eEnt[i], id );
}
}
}
}
}
}
if (g_iCount>0) {
for( new i = 0; i < g_iCount; i++ ) {
if (pev_valid(g_iEnt[i])) {
if (pev( g_iEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flItemMins[i][0] > flMaxs[0] || g_flItemMaxs[i][0] < flMins[0] )
&& !( g_flItemMins[i][1] > flMaxs[1] || g_flItemMaxs[i][1] < flMins[1] )
&& !( g_flItemMins[i][2] > flMaxs[2] || g_flItemMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_iEnt[i], id );
}
}
}
}
}
if (g_bCount>0) {
for( new i = 0; i < g_bCount; i++ ) {
if (pev_valid(g_bEnt[i])) {
if (pev( g_bEnt[i], pev_solid ) != SOLID_NOT) {
if( !( g_flButMins[i][0] > flMaxs[0] || g_flButMaxs[i][0] < flMins[0] )
&& !( g_flButMins[i][1] > flMaxs[1] || g_flButMaxs[i][1] < flMins[1] )
&& !( g_flButMins[i][2] > flMaxs[2] || g_flButMaxs[i][2] < flMins[2] ) ) {
ExecuteHamB( Ham_Touch, g_bEnt[i], id );
}
}
}
}
}
}
return FMRES_IGNORED;
}
public check_players() {
new players[32], num, id, iEntity;
get_players(players, num,"a")
new Float:origin[3], trace, ent, hull, classname[32], Float:dmg;
for(new i=0; i<num; i++) {
id = players[i];
if (!is_user_alive(id) || pev( id, pev_solid ) != SOLID_NOT) continue;
if (cvar_door||cvar_door_rotating||cvar_momentary_door||cvar_rotating||cvar_pendulum||cvar_train||cvar_vehicle||cvar_tracktrain) {
if (!fm_get_user_godmode(id) && !fm_get_user_noclip(id)) {
pev(id, pev_origin,origin)
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, hull, id, trace)
ent = get_tr2(trace, TR_pHit)
free_tr2(trace)
if (ent>0) {
classname[0] = '^0';
pev(ent,pev_classname,classname, 31)
if (cvar_door&&equali(classname,"func_door")||cvar_door_rotating&&equali(classname,"func_door_rotating")
||cvar_momentary_door&&equali(classname,"momentary_door")||cvar_rotating&&equali(classname,"func_rotating")
||cvar_pendulum&&equali(classname,"func_pendulum")||cvar_train&&equali(classname,"func_train")
||cvar_vehicle&&equali(classname,"func_vehicle")||cvar_tracktrain&&equali(classname,"func_tracktrain")) {
if (cvar_block) {
ExecuteHamB( Ham_Blocked, ent, id );
} else {
pev(ent,pev_dmg,dmg)
if (dmg>=0.0) fm_fakedamage(id, classname, dmg, DMG_GENERIC)
}
}
}
}
if (cvar_door_open||cvar_door_rotating_open) {
pev(id, pev_origin,origin);
engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS, HULL_LARGE, id, trace);
iEntity = get_tr2(trace, TR_pHit);
free_tr2(trace);
if (iEntity>0) {
classname[0] = '^0';
pev(iEntity,pev_classname,classname, 31)
if (cvar_door_open&&equali(classname,"func_door")||cvar_door_rotating_open&&equali(classname,"func_door_rotating"))
ExecuteHamB( Ham_Touch, iEntity, id );
}
}
}
}
}
// Thanks ConnorMcLeod
public CTriggerPush_Touch( iEnt , pevToucher )
{
static const fBadMoveTypeBit = (1<<MOVETYPE_NONE)|(1<<MOVETYPE_PUSH)|(1<<MOVETYPE_NOCLIP)|(1<<MOVETYPE_FOLLOW)
static const fBadSolidBit = (1<<SOLID_BSP) //(1<<SOLID_NOT)|
if( ( fBadMoveTypeBit & (1<<pev(pevToucher, pev_movetype)) )
|| ( fBadSolidBit & (1<<pev(pevToucher, pev_solid)) ) )
{
return HAM_SUPERCEDE
}
if( pev(iEnt, pev_spawnflags) & SF_TRIG_PUSH_ONCE )
{
// Instant trigger, just transfer velocity and remove
new Float:vecVelocity[3], Float:flSpeed, Float:vecMoveDir[3]
pev(pevToucher, pev_velocity, vecVelocity)
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecMoveDir)
xs_vec_mul_scalar(vecMoveDir, flSpeed, vecMoveDir)
xs_vec_add(vecVelocity, vecMoveDir, vecVelocity)
if( vecVelocity[2] > 0.0 )
{
set_pev(pevToucher, pev_flags, pev(pevToucher, pev_flags) & ~FL_ONGROUND)
}
set_pev(pevToucher, pev_velocity, vecVelocity)
set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
}
else
{ // Push field, transfer to base velocity
new Float:flSpeed, Float:vecPush[3]
pev(iEnt, pev_speed, flSpeed)
pev(iEnt, pev_movedir, vecPush)
xs_vec_mul_scalar(vecPush, flSpeed, vecPush)
new iFlags = pev(pevToucher, pev_flags)
if( iFlags & FL_BASEVELOCITY )
{
new Float:vecBaseVelocity[3]
pev(pevToucher, pev_basevelocity, vecBaseVelocity)
xs_vec_add(vecPush, vecBaseVelocity, vecPush)
}
else
{
set_pev(pevToucher, pev_flags, iFlags | FL_BASEVELOCITY)
}
set_pev(pevToucher, pev_basevelocity, vecPush)
}
return HAM_SUPERCEDE;
}
// func_rotating rendering fix (for linux) by ConnorMcLeod
public Think_FixAngles( iEnt )
{
new Float:vecAngles[3], bSet, i, Float:fAngle;
pev(iEnt, pev_angles, vecAngles);
bSet = false;
for(i=0; i<3; i++) {
fAngle = vecAngles[i];
if( fAngle < -360.0 || fAngle > 360.0 ) {
vecAngles[i] -= floatround(fAngle) / 360 * 360;
bSet = true;
}
}
if( bSet ) set_pev(iEnt, pev_angles, vecAngles);
}
// func_breakable rendering fix by xPaw (convert to fakemeta by AlexALX)
public FwdThinkBreak( iEntity ) {
if( pev( iEntity, pev_solid ) == SOLID_NOT ) {
new iEffects = pev( iEntity, pev_effects );
if( !( iEffects & EF_NODRAW ) )
set_pev( iEntity, pev_effects, iEffects | EF_NODRAW );
if( pev( iEntity, pev_deadflag ) != DEAD_DEAD )
set_pev( iEntity, pev_deadflag, DEAD_DEAD );
}
}
public event_TeamInfo()
{
new id = read_data(1);
new sTeam[32], iTeam;
read_data(2, sTeam, sizeof(sTeam) - 1);
for(new i = 0; i < MAX_TEAMS; i++)
{
if(g_cTeamChars[i] == sTeam[0])
{
iTeam = i;
break;
}
}
if(g_iTeam[id] != iTeam)
{
g_iPlayers[g_iTeam[id]]--;
g_iTeam[id] = iTeam;
g_iPlayers[iTeam]++;
}
}
public message_ShowMenu(iMsgid, iDest, id)
{
static sMenuCode[iMaxLen];
get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1);
if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC))
{
if(should_autojoin(id))
{
set_autojoin_task(id, iMsgid);
return PLUGIN_HANDLED;
}
}
else if(equal(sMenuCode, INGAME_JOIN_MSG) || equal(sMenuCode, INGAME_JOIN_MSG_SPEC))
{
if(should_autoswitch(id))
{
set_autoswitch_task(id, iMsgid);
return PLUGIN_HANDLED;
}
else if(get_pcvar_num(tjm_block_change))
{
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public message_VGUIMenu(iMsgid, iDest, id)
{
if(get_msg_arg_int(1) != VGUI_JOIN_TEAM_NUM)
{
return PLUGIN_CONTINUE;
}
if(should_autojoin(id))
{
set_autojoin_task(id, iMsgid);
return PLUGIN_HANDLED;
}
else if(should_autoswitch(id))
{
set_autoswitch_task(id, iMsgid);
return PLUGIN_HANDLED;
}
else if((TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && get_pcvar_num(tjm_block_change))
{
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public task_Autojoin(iParam[], id)
{
new iTeam = get_new_team(get_pcvar_num(tjm_join_team));
if(iTeam != -1)
{
handle_join(id, iParam[0], iTeam);
}
}
public task_Autoswitch(iParam[], id)
{
new iTeam = get_switch_team(id);
if(iTeam != -1)
{
handle_join(id, iParam[0], iTeam);
}
}
stock handle_join(id, iMsgid, iTeam)
{
new iMsgBlock = get_msg_block(iMsgid);
set_msg_block(iMsgid, BLOCK_SET);
engclient_cmd(id, "jointeam", g_sTeamNums[iTeam]);
new iClass = get_team_class(iTeam);
if(1 <= iClass <= 4)
{
engclient_cmd(id, "joinclass", g_sClassNums[iClass - 1]);
}
set_msg_block(iMsgid, iMsgBlock);
}
stock get_new_team(iCvar)
{
switch(iCvar)
{
case 1:
{
return TEAM_T;
}
case 2:
{
return TEAM_CT;
}
case 3:
{
return TEAM_SPEC;
}
case 4:
{
new iTCount = g_iPlayers[TEAM_T];
new iCTCount = g_iPlayers[TEAM_CT];
if(iTCount < iCTCount)
{
return TEAM_T;
}
else if(iTCount > iCTCount)
{
return TEAM_CT;
}
else
{
return random_num(TEAM_T, TEAM_CT);
}
}
}
return -1;
}
stock get_switch_team(id)
{
new iTeam;
new iTCount = g_iPlayers[TEAM_T];
new iCTCount = g_iPlayers[TEAM_CT];
switch(g_iTeam[id])
{
case TEAM_T: iTCount--;
case TEAM_CT: iCTCount--;
}
if(iTCount < iCTCount)
{
iTeam = TEAM_T;
}
else if(iTCount > iCTCount)
{
iTeam = TEAM_CT;
}
else
{
iTeam = random_num(TEAM_T, TEAM_CT);
}
if(iTeam != g_iTeam[id])
{
return iTeam;
}
return -1;
}
stock get_team_class(iTeam)
{
new iClass;
if(TEAM_NONE < iTeam < TEAM_SPEC)
{
iClass = get_pcvar_num(tjm_class[iTeam]);
if(iClass < 1 || iClass > 4)
{
iClass = random_num(1, 4);
}
}
return iClass;
}
stock set_autojoin_task(id, iMsgid)
{
new iParam[2];
iParam[0] = iMsgid;
set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam));
}
stock set_autoswitch_task(id, iMsgid)
{
new iParam[2];
iParam[0] = iMsgid;
set_task(0.1, "task_Autoswitch", id, iParam, sizeof(iParam));
}
stock bool:should_autojoin(id)
{
return ((5 > get_pcvar_num(tjm_join_team) > 0) && is_user_connected(id) && !(TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}
stock bool:should_autoswitch(id)
{
return (get_pcvar_num(tjm_switch_team) && is_user_connected(id) && (TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}
public cmdBlock( id )
{
ColorChat( id, RED, "%s^1 %L", g_szPrefix, id, "DR_NO_ACCESS" );
return PLUGIN_HANDLED;
}
public cmdShowIp(id)
{
console_print(id, "--------------- Dr.Crizatii.Ro ---------------");
console_print(id, "");
console_print(id, "Nume - IP - SteamID");
console_print(id, "");
new players[32], num, player;
get_players(players, num);
for(new i = 0 ; i < num ; i++)
{
player = players[i];
new name[32], ipeki[32], authid[32];
get_user_name(player, name, 31)
get_user_ip(player, ipeki, 31, 1);
get_user_authid(player, authid, 31);
console_print(id, "%s - %s - %s", name, ipeki, authid);
}
console_print(id, "");
console_print(id, "--------------- Dr.Crizatii.Ro ---------------");
return 1;
}
public cmdReset(id)
{
new frags = get_user_frags(id);
new deaths = get_user_deaths(id);
if(frags == 0 && deaths == 0)
{
set_dhudmessage( 0, 255, 0, -1.0, 0.87, 0, 6.0, 1.0 );
show_dhudmessage(id, "Scorul tau este deja 0-0 .");
}
else
{
cs_set_user_deaths(id, 0);
set_user_frags(id, 0);
set_dhudmessage( 0, 255, 0, -1.0, 0.87, 0, 6.0, 1.0 );
show_dhudmessage(id, "Tocmai ti-ai resetat scorul.");
}
return PLUGIN_HANDLED;
}
public checkstuck() {
if(get_pcvar_num(cvar[0]) >= 1) {
static players[32], pnum, player
get_players(players, pnum)
static Float:origin[3]
static Float:mins[3], hull
static Float:vec[3]
static o,i
for(i=0; i<pnum; i++){
player = players[i]
if (is_user_connected(player) && is_user_alive(player)) {
pev(player, pev_origin, origin)
hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
++stuck[player]
if(stuck[player] >= get_pcvar_num(cvar[2])) {
pev(player, pev_mins, mins)
vec[2] = origin[2]
for (o=0; o < sizeof size; ++o) {
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_hull_vacant(vec, hull,player)) {
engfunc(EngFunc_SetOrigin, player, vec)
effects(player)
set_pev(player,pev_velocity,{0.0,0.0,0.0})
o = sizeof size
}
}
}
}
else
{
stuck[player] = 0
}
}
}
}
}
stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
return true
return false
}
public effects(id) {
if(get_pcvar_num(cvar[1])) {
set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE
show_hudmessage(id,"Nu mai esti blocat acum!") // HUDMESSAGE
message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )
write_short(1<<10) // fade lasts this long duration
write_short(1<<10) // fade lasts this long hold time
write_short(1<<1) // fade type (in / out)
write_byte(20) // fade red
write_byte(255) // fade green
write_byte(255) // fade blue
write_byte(255) // fade alpha
message_end()
client_cmd(id,"spk fvox/blip.wav")
}
}
public client_connect(id)
verify_name(id)
public client_infochanged(id)
{
if (!is_user_connected(id))
return;
verify_name(id)
}
verify_name(id)
{
static name[32]
get_user_info(id, "name", name, 31)
if (!name[1])
{
change_name(id)
return;
}
static i, ignore
ignore = false
for (i = 0; i <= g_sizeof_names_new; i++)
if (containi(name, g_names_new[i]) != -1)
{
ignore = true
break;
}
if (ignore)
return;
for (i = 0; i < 32; i++)
if (g_filter_chars[i])
replace_all(name, 31, g_filter_chars[i], "")
for (i = 0; i < g_sizeof_names; i++)
if (containi(name, g_names[i]) != -1)
{
change_name(id)
break;
}
}
change_name(id)
{
static name[32]
formatex(name, 31, "%s [%d]", g_names_new[random_num(0, g_sizeof_names_new)], g_names_changed)
set_user_info(id, "name", name)
client_cmd(id, "name ^"%s^"", name)
g_names_changed++
}