AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   strip_user_weapons (https://forums.alliedmods.net/showthread.php?t=143631)

Andala 11-22-2010 08:25

strip_user_weapons
 
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?


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

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