Code:
bool:transfer_user_current_weapon( const iOwner, const iTarget )
{
new iActiveItem = get_pdata_cbase( iOwner, m_pActiveItem, OFFSET_PLAYER );
new iClip = get_pdata_int( iActiveItem, m_iClip, OFFSET_WEAPON );
new szWeapon[ 32 ];
if( get_pdata_int( iOwner, m_iUserPrefs, OFFSET_PLAYER ) & ( 1<<OFFSET_SHIELD ) )
{
strip_user_weapon( iTarget, 1 );
set_pdata_int( iTarget, m_fHasPrimary, 0, OFFSET_PLAYER );
give_item( iTarget, "weapon_shield" );
deploy_next_best( iTarget );
set_pdata_int( iOwner, m_iUserPrefs, get_pdata_int( iOwner, m_iUserPrefs, OFFSET_PLAYER ) & ~( 1<<OFFSET_SHIELD ), OFFSET_PLAYER );
new iBest = deploy_next_best( iOwner );
pev( iBest, pev_classname, szWeapon, charsmax( szWeapon ) );
replace( szWeapon, charsmax( szWeapon ), "weapon_", "" );
format( szWeapon, charsmax( szWeapon ), "models/v_%s.mdl", szWeapon );
set_pev( iOwner, pev_viewmodel2, szWeapon );
return true;
}
pev( iActiveItem, pev_classname, szWeapon, charsmax( szWeapon ) );
new iWeapon = get_weaponid( szWeapon );
new iSlot;
if( contain( szWeapon, "flash" ) == -1 && contain( szWeapon, "nade" ) == -1 )
{
if( iWeapon == CSW_C4 )
{
if( user_has_weapon( iTarget, CSW_C4 ) )
return false;
give_item( iTarget, "weapon_c4" );
deploy_next_best( iTarget );
strip_user_weapon( iOwner, 5 );
deploy_next_best( iOwner );
return true;
}
if( iClip < 0 )
return false;
new iAmmo = cs_get_user_bpammo( iOwner, iWeapon );
for( new i = 1 ; i < MAX_WEAPON_SLOTS ; i ++ )
{
if( iActiveItem == get_pdata_cbase( iOwner, m_rgpPlayerItems[ i ], OFFSET_PLAYER ) )
{
iSlot = i;
break;
}
}
if( get_pdata_cbase( iTarget, m_rgpPlayerItems[ iSlot ], OFFSET_PLAYER ) > 0 )
strip_user_weapon( iTarget, iSlot );
get_weaponname( iWeapon, szWeapon, charsmax( szWeapon ) );
cs_set_weapon_ammo( give_item( iTarget, szWeapon ), iClip );
cs_set_user_bpammo( iTarget, iWeapon, iAmmo );
cs_set_user_bpammo( iOwner, iWeapon, 0 );
strip_user_weapon( iOwner, iSlot );
}
else
{
switch( iWeapon )
{
case CSW_SMOKEGRENADE, CSW_HEGRENADE:
if( user_has_weapon( iTarget, iWeapon ) )
return false;
case CSW_FLASHBANG:
if( cs_get_user_bpammo( iTarget, CSW_FLASHBANG ) == 2 )
return false;
}
cs_set_user_bpammo( iOwner, iWeapon, cs_get_user_bpammo( iOwner, iWeapon ) - 1 );
give_item( iTarget, szWeapon );
}
engclient_cmd( iTarget, szWeapon );
deploy_next_best( iOwner );
return true;
}
Code:
strip_user_weapon( const id, const iSlot )
{
new iEnt = get_pdata_cbase( id, m_rgpPlayerItems[ iSlot ], OFFSET_PLAYER );
if( pev_valid( iEnt ) )
{
new szWeapon[ 32 ];
pev( iEnt, pev_classname, szWeapon, charsmax( szWeapon ) );
set_pev( id, pev_weapons, pev( id, pev_weapons ) & ~( 1<<get_weaponid( szWeapon ) ) );
set_pdata_cbase( id, m_rgpPlayerItems[ iSlot ], -1, OFFSET_PLAYER );
}
}
Code:
deploy_next_best( const id )
{
new iEnt, szWeapon[ 32 ];
for( new i = 1 ; i < MAX_WEAPON_SLOTS ; i ++ )
{
iEnt = get_pdata_cbase( id, m_rgpPlayerItems[ i ], OFFSET_PLAYER );
if( iEnt > 0 )
{
pev( iEnt, pev_classname, szWeapon, charsmax( szWeapon ) );
engclient_cmd( id, szWeapon );
break;
}
}
return iEnt;
}