Raised This Month: $ Target: $400
 0% 

strip_user_weapons


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Andala
Member
Join Date: Sep 2010
Old 11-22-2010 , 08:25   strip_user_weapons
Reply With Quote #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?
Andala is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:16.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode