|
Member
|

11-22-2010
, 08:25
strip_user_weapons
|
#1
|
Code:
/*
Death Run fix round by P.Of.Pw
ver. 2.0
News in v2.0:
[ro]
- fixare cateva greseli
- optimizaref
- mai multa redabilitate
[en]
- fixed some mistake
- optimization
- more readability
[ro] De asemenea 'decomentati' linia 163 din DeathrunManager.sma [ set_task( 15.0, "CheckTerrorists", _, _, _, "b" ); ]
Cum sa decomentati ?
R: deschideti DeathrunManager.sma si modificati set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
in
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
* Optional
[en]
Also uncomment this line from DeathrunManager.sma
set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
How to uncomment ?
R: open the DeathrunManager.sma and change this line set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
to:
//set_task( 15.0, "CheckTerrorists", _, _, _, "b" );
*** Optional ***
*/
/*
-- Optional:
-- Decomentati aceste lini ; Uncomment these lines
*/
// bonus: in fraguri ; frags bonus ( pentru Ts nou; for new Terroris )
//#define BONUS_FRAGS
// bonus: nu face dmg la prima cazatura; no first fall dmg pentru Ts nou; for new Terroris )
#define BONUS_NO_FIRST_FALLDMG
// creaza un jurnal ; create a logs file (addons\amxmodx\logs\dr_last_t_disc.txt)
//#define LOGS
// cate fraguri primeste ; how many frags receives ( pentru Ts nou; for new Terroris )
#define FRAGS_NUM 10
// pentru unstuck ; for unstuck
#define START_DISTANCE 32
#define MAX_ATTEMPTS 128
#include < amxmodx >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < engine >
#pragma tabsize 0
/*================================================================================
[Start...]
=================================================================================*/
enum Coord_e { Float:x, Float:y, Float:z }
enum CsTeams
{
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
}
#define TASK_TEAM 59813
#define ID_TEAM (taskid - TASK_TEAM)
new const CS_TEAM_NAMES[ ][ ] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
const OFFSET_EXTRALNX = 5
const OFFSET_CSTEAMS = 114
#define DMG_FALL (1<<5)
#define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
#define FIRST_ID 1
#define IsValidConnected(%1) ( FIRST_ID <= %1 <= g_iMaxPlayers && g_iIsConnected[ %1 ] )
#define MarkUserAlive(%1) g_bAlive |= 1<<(%1 & 31)
#define ClearUserAlive(%1) g_bAlive &= ~( 1<<(%1 & 31) )
#define IsAlive(%1) g_bAlive & 1<<(%1 & 31)
new g_bAlive
new Float:g_fTeamsUpdates
new g_iMaxPlayers
new g_iMsgTeamInfo
new g_iHamCZbots
#if defined BONUS_NO_FIRST_FALLDMG
new g_iIsNewTs[ 33 ]
#endif
new g_iIsConnected[ 33 ]
#if defined BONUS_FRAGS
new g_iMsgScoreInfo
#endif
new g_pBotQuota
new Float:g_iOrigin[ 33 ][ 3 ]
/*================================================================================
[Init]
=================================================================================*/
public plugin_init( )
{
RegisterHam( Ham_Spawn, "weaponbox", "FwdSpawnWeaponbox", 1 );
register_plugin( "[DR] FIX Round", "2.0", "abc" )
register_cvar( "dr_fixround", "2.0/abc", FCVAR_SERVER | FCVAR_SPONLY )
RegisterHam( Ham_Spawn, "player", "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHam( Ham_TakeDamage, "player", "Ham_CBasePlayer_TakeDamage" )
#endif
register_forward( FM_ClientDisconnect, "fw_ClientDisconnect" )
g_iMaxPlayers = get_maxplayers( )
g_iMsgTeamInfo = get_user_msgid( "TeamInfo" )
#if defined BONUS_FRAGS
g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
#endif
g_pBotQuota = get_cvar_pointer( "bot_quota" )
}
/*================================================================================
[Client put in server]
=================================================================================*/
public client_putinserver( id )
{
g_iIsConnected[ id ] = true
ClearUserAlive( id )
if( is_user_bot( id ) )
{
if( !g_iHamCZbots && g_pBotQuota )
{
set_task( 0.1, "register_ham_czbots", id )
}
}
}
public FwdSpawnWeaponbox( iEntity ) {
set_pev( iEntity, pev_flags, FL_KILLME );
dllfunc( DLLFunc_Think, iEntity );
return HAM_IGNORED;
}
/*================================================================================
[Register Ham forwards for CZ bots]
=================================================================================*/
public register_ham_czbots( id )
{
if( g_iHamCZbots || !is_user_connected( id ) || !get_pcvar_num( g_pBotQuota ) )
return;
RegisterHamFromEntity( Ham_Spawn, id, "Ham_CBasePlayer_Spawn_Post", 1 )
RegisterHamFromEntity( Ham_Killed, id, "Ham_CBasePlayer_Killed_Post", 1 )
#if defined BONUS_NO_FIRST_FALLDMG
RegisterHamFromEntity( Ham_TakeDamage, id, "Ham_CBasePlayer_TakeDamage" )
#endif
g_iHamCZbots = true
if( is_user_alive( id ) ) Ham_CBasePlayer_Spawn_Post( id )
}
/*================================================================================
[Ham player spawn post forward]
=================================================================================*/
public Ham_CBasePlayer_Spawn_Post( id )
{
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
remove_task( id+TASK_TEAM )
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player killed forward]
=================================================================================*/
public Ham_CBasePlayer_Killed_Post( id )
{
if( is_user_alive( id ) )
{
MarkUserAlive( id)
}
else
{
ClearUserAlive( id )
}
}
/*================================================================================
[Ham player damage forward]
=================================================================================*/
#if defined BONUS_NO_FIRST_FALLDMG
public Ham_CBasePlayer_TakeDamage( id, inflictor, attacker, Float:damage, damage_type )
{
if( g_iIsNewTs[ id ] && damage_type & DMG_FALL )
{
g_iIsNewTs[ id ] = false
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
#endif
/*================================================================================
[Eng get user origin] ; not very good method ;(
=================================================================================*/
public client_PreThink( id )
{
if( IsValidConnected( id ) && IsAlive( id ) )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
}
/*================================================================================
[Fm client disconnecting]
=================================================================================*/
public fw_ClientDisconnect( id )
{
check_round( id )
remove_task( id+TASK_TEAM )
g_iIsConnected[ id ] = false
ClearUserAlive( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = false
#endif
}
/*================================================================================
[Set new Ts]
=================================================================================*/
public check_round( leaving_player )
{
static iPlayersnum, id
iPlayersnum = fnGetPlaying( )
if( iPlayersnum < 2 )
return;
static iTnum
iTnum = fnGetTeamCount( CS_TEAM_T )
if( !iTnum || iTnum < 1 )
{
static iCTnum
iCTnum = fnGetTeamCount( CS_TEAM_CT )
if( !iCTnum || iCTnum == 1 )
return;
id = fnGetRandomPlayer( )
while( ( id == leaving_player ) ) { }
if( !is_user_alive( id ) )
ExecuteHamB( Ham_CS_RoundRespawn, id )
set_terrorist_team( id )
#if defined BONUS_NO_FIRST_FALLDMG
g_iIsNewTs[ id ] = true
#endif
DispatchSpawn( id )
//g_iOrigin[ leaving_player ][ 2 ] += 20
entity_set_vector( id, EV_VEC_origin, g_iOrigin[ leaving_player ] )
entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } )
new name[ 32 ]
get_user_name( id, name, 31 )
entity_get_vector( id, EV_VEC_origin, g_iOrigin[ id ] )
if( IsUserStuck( id, g_iOrigin[ id ], entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
set_task( 3.0, "check_user_stuck", id )
client_print(id,print_chat,"You have been moved to the Terrorist team, because the last Terrorist has left the game.")
strip_user_weapons(id)
give_item(id,"weapon_knife")
#if defined BONUS_FRAGS
set_user_frags( id, get_user_frags( id ) + FRAGS_NUM )
set_user_frags_update( id )
#endif
#if defined LOGS
static buffer[ 150 ]
new name_leav[ 32 ]
get_user_name( leaving_player, name_leav, 31 )
formatex( buffer, charsmax( buffer ), "%s a fost mutat la Ts, deoarece %s s-a deconectat!", name, name_leav )
log_to_file( "dr_last_t_disc.txt", buffer )
#endif
}
}
public check_user_stuck( id )
{
new Float:newOrigin[ 3 ]
entity_get_vector( id, EV_VEC_origin, newOrigin )
if( IsUserStuck( id, newOrigin, entity_get_int( id, EV_INT_flags ) ) )
{
UTIL_UnstickPlayer( id, START_DISTANCE, MAX_ATTEMPTS )
}
}
/*================================================================================
[Fn stocks]
=================================================================================*/
fnGetPlaying( )
{
static iPlaying, id, CsTeams:team
iPlaying = 0
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( IsValidConnected( id ) )
{
team = fm_cs_get_user_team( id )
if( team != CS_TEAM_UNASSIGNED && team != CS_TEAM_SPECTATOR )
iPlaying++
}
}
return iPlaying;
}
fnGetRandomPlayer( const flags[ ] = "", const teamORname[ ] = "" )
{
new players[ 32 ], pnum
get_players( players, pnum, flags, teamORname )
return ( pnum > 0 ) ? players[ random( pnum ) ] : 0
}
fnGetTeamCount( CsTeams:iTeam )
{
new iPlayers[ 32 ], iPlayerCount
new iTeamPlayers[ CsTeams ]
get_players( iPlayers, iPlayerCount )
for ( new i = 0; i < iPlayerCount; i++ )
iTeamPlayers[ fm_cs_get_user_team( iPlayers[ i ] ) ]++
return iTeamPlayers[ iTeam ]
}
/*================================================================================
[......]
=================================================================================*/
set_terrorist_team( id )
{
if( fm_cs_get_user_team( id ) != CS_TEAM_T )
{
remove_task( id+TASK_TEAM )
fm_cs_set_user_team( id, CS_TEAM_T )
user_team_update( id )
}
}
/*================================================================================
[Stocks]
=================================================================================*/
stock CsTeams:fm_cs_get_user_team( id )
{
return CsTeams:get_pdata_int( id, OFFSET_CSTEAMS, OFFSET_EXTRALNX )
}
stock fm_cs_set_user_team( id, { CsTeams, _ }:team )
{
set_pdata_int( id, OFFSET_CSTEAMS, _:team, OFFSET_EXTRALNX )
}
stock user_team_update( id )
{
static Float:current_time
current_time = get_gametime( )
if( current_time - g_fTeamsUpdates >= 0.1 )
{
set_task( 0.1, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = current_time + 0.1
}
else
{
set_task( ( g_fTeamsUpdates + 0.1 ) - current_time, "set_user_team_msg", id+TASK_TEAM )
g_fTeamsUpdates = g_fTeamsUpdates + 0.1
}
}
public set_user_team_msg( taskid )
{
emessage_begin( MSG_ALL, g_iMsgTeamInfo )
ewrite_byte( ID_TEAM )
ewrite_string( CS_TEAM_NAMES[ _:fm_cs_get_user_team( ID_TEAM ) ] )
emessage_end( )
}
#if defined BONUS_FRAGS
set_user_frags_update( id )
{
message_begin( MSG_ALL, g_iMsgScoreInfo )
write_byte( id )
write_short( get_user_frags( id ) )
write_short( get_user_deaths( id ) )
write_short( 0 )
write_short( get_user_team( id ) )
message_end( )
}
#endif
// by Arkshine
bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags )
return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 )
UTIL_UnstickPlayer( const id, const i_StartDistance, const i_MaxAttempts )
{
if( !is_user_alive( id ) ) return -1;
static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ]
static i_Attempts, i_Distance
pev( id, pev_origin, vf_OriginalOrigin )
i_Distance = i_StartDistance
while( i_Distance < 1000 )
{
i_Attempts = i_MaxAttempts
while( i_Attempts-- )
{
vf_NewOrigin[ x ] = random_float( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance )
vf_NewOrigin[ y ] = random_float( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance )
vf_NewOrigin[ z ] = random_float( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance )
engfunc( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize( id ), id, 0 )
if( get_tr2( 0, TR_InOpen ) && !get_tr2( 0, TR_AllSolid ) && !get_tr2( 0, TR_StartSolid ) )
{
engfunc( EngFunc_SetOrigin, id, vf_NewOrigin )
return 1;
}
}
i_Distance += i_StartDistance
}
return 0;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3081\\ f0\\ fs16 \n\\ par }
*/
I have this plugin, look for 'strip_user_weapons', that doesen't remove player weapons.
So, this is a replacer of the last Terrorist disconnected, for deathrun, and it's a bit bugged. If the terror leaves, and if the new terror is dead before spawning, he gets USP, how can I remove that?
|
|