Raised This Month: $ Target: $400
 0% 

salamander.amxx 2013


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
albjb
Junior Member
Join Date: Jul 2013
Old 08-11-2013 , 13:05   salamander.amxx 2013
Reply With Quote #1

Sorry I'm Spanish,
I'm updating this plugin flamethrower
I have corrected some errors like:
now release the flamethrower to buy the shield.
the skin is reset each round and catch the ground ...

But do not fire him being on the water.
Since the event I have to detect if the player is in the water "water_zone (id)" and bool "inwater [id]"

Someone helps me not shoot the flamethrower underwater??

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <xs>
#include <fun>
// #include <zombieplague>

#define PLUGIN "Salamander"
#define VERSION "4.3"
#define AUTHOR "ALBJB"

#define DAMAGE 38
#define RECOIL 0.1
#define FIRE_SPEED 500.0

#define BURN_DAMAGE 15
#define BURN_LOOP 1.0
#define BURN_TIME 5.0
#define FIREBURN_CLASSNAME "fire_burn"

#define CSW_SALAMANDER CSW_M249
#define weapon_salamander "weapon_m249"

#define DEFAULT_W_MODEL "models/w_m249.mdl"
#define WEAPON_SECRET_CODE 1962+400
#define FIRE_CLASSNAME "fire"

// Fire Start
#define WEAPON_ATTACH_F 40.0
#define WEAPON_ATTACH_R 5.0
#define WEAPON_ATTACH_U -15.0

#define TASK_RESET_AMMO 5434

const pev_ammo pev_iuser4

new const WeaponModel[3][] =
{
    
"models/v_flamethrower.mdl",
    
"models/p_flamethrower.mdl",
    
"models/w_flamethrower.mdl"
}

new const 
WeaponSound[6][] =
{
    
"weapons/flamegun-1.wav",
    
"weapons/flamegun-2.wav",
    
"weapons/flamegun_draw.wav",
    
"weapons/flamegun_clipin1.wav",
    
"weapons/flamegun_clipout1.wav",
    
"weapons/flamegun_clipout2.wav"
}

new const 
WeaponResource[7][] = 
{
    
"sprites/flame_puff01.spr",
    
"sprites/flame_burn01.spr",
    
"sprites/weapon_flamethrower.txt",
    
"sprites/640hud7_2.spr",
    
"sprites/640hud59_2.spr",
    
"sprites/640hud60_2.spr",
    
"sprites/smokepuff.spr"
}

enum
{
    
MODEL_V 0,
    
MODEL_P,
    
MODEL_W
}

enum
{
    
SALAMANDER_ANIM_IDLE 0,
    
SALAMANDER_ANIM_SHOOT_BEGIN,
    
SALAMANDER_ANIM_SHOOT_END,
    
SALAMANDER_ANIM_RELOAD,
    
SALAMANDER_ANIM_DRAW
}
//g_had_salamander[33] = 0-1 Para saber si lo tienes o no puesto
new g_salamander
new g_had_salamander[33], g_old_weapon[33], Float:g_PunchAngles[33][3]
new 
g_smokepuff_idg_weapon_eventg_register
new bool:tener[33]
new 
bool:inwater[33]

public 
plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
/*
    permisos:
    a - global, para todos los jugadores sin usar id
    b - para cada jugador con id
    c - para repetir a cada jugador ??
    d - para los jugadores muertos ??
    e - para los jugadores vivos
    */
    
    
register_event("ResetHUD""reset_salamander""be"
    
register_event("DeathMsg""muerte""be")
    
register_event("HLTV""Event_NewRound""a""1=0""2=0")
    
register_event("CurWeapon""event_CurWeapon""be""1=1"

    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)
    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fw_PlaybackEvent")
    
register_forward(FM_CmdStart"fw_CmdStart")

    
register_think(FIRE_CLASSNAME"fw_Fire_Think")
    
register_think(FIREBURN_CLASSNAME"fw_FireBurn_Think")
    
register_touch(FIRE_CLASSNAME"*""fw_Fire_Touch")
    
    
RegisterHam(Ham_Spawn"player""fw_Spawn_Post"1)
    
RegisterHam(Ham_Item_AddToPlayerweapon_salamander"fw_AddToPlayer_Post"1)
    
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack")
    
RegisterHam(Ham_TraceAttack"worldspawn""fw_TraceAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackweapon_salamander"fw_Weapon_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackweapon_salamander"fw_Weapon_PrimaryAttack_Post"1)
    
    
register_clcmd("say /lanzallamas""get_salamander")
    
register_clcmd("say_team /lanzallamas""get_salamander")
    
register_clcmd("lanzallamas""hook_weapon")
    
    
register_forward(FM_PrecacheEvent"fw_PrecacheEvent_Post"1)
    
register_forward(FM_PlayerPreThink"water_zone")//para saber si el jugador esta en el agua
    
    
register_cvar("salamander_cost""8000"
    
    
}

public 
plugin_precache()
{
    
    new 
i
    
for(0sizeof(WeaponModel); i++)
        
engfunc(EngFunc_PrecacheModelWeaponModel[i])
    for(
0sizeof(WeaponSound); i++)
        
engfunc(EngFunc_PrecacheSoundWeaponSound[i])
    
    
engfunc(EngFunc_PrecacheModelWeaponResource[0])
    
engfunc(EngFunc_PrecacheModelWeaponResource[1])
    
//engfunc(EngFunc_PrecacheGeneric, WeaponResource[2])
    
engfunc(EngFunc_PrecacheModelWeaponResource[3])
    
engfunc(EngFunc_PrecacheModelWeaponResource[4])
    
engfunc(EngFunc_PrecacheModelWeaponResource[5])
    
g_smokepuff_id engfunc(EngFunc_PrecacheModelWeaponResource[6])
    
/*
    //WeaponModel[3]
    precache_model("models/v_flamethrower.mdl")
    precache_model("models/p_flamethrower.mdl")
    precache_model("models/w_flamethrower.mdl")
    
    //WeaponSound[6]
    precache_sound("weapons/flamegun-1.wav")
    precache_sound("weapons/flamegun-2.wav")
    precache_sound("weapons/flamegun_draw.wav")
    precache_sound("weapons/flamegun_clipin1.wav")
    precache_sound("weapons/flamegun_clipout1.wav")
    precache_sound("weapons/flamegun_clipout2.wav")
    
    //WeaponResource[7]
    precache_model("sprites/flame_puff01.spr")
    precache_model("sprites/flame_burn01.spr")
    precache_generic("sprites/weapon_flamethrower.txt")
    precache_model("sprites/640hud7_2.spr")
    precache_model("sprites/640hud59_2.spr")
    precache_model("sprites/640hud60_2.spr")
    precache_model("sprites/smokepuff.spr")
    */
}
public 
water_zone(id){
    new 
waterlevel pev(idpev_waterlevel)
    
    if (
waterlevel && is_user_alive(id) && is_user_connected(id)){//Si el jugador esta en el agua
        
inwater[id] = true
    
}
    else{
        
inwater[id] = false
    
}
    
    
/*
    if(inwater[id] == true){
        client_print ( id , print_chat , "Agua -> %d",  inwater[id])
        return
    }
    */
}
public 
fw_PrecacheEvent_Post(type, const name[])
{
    if(
equal("events/m249.sc"name))
        
g_weapon_event get_orig_retval()
}

public 
client_putinserver(id)
{
    if(
is_user_bot(id) && !g_register)
    {
        
g_register 1
        set_task
(0.1"do_register"id)
    }
}

public 
do_register(id)
{
    
RegisterHamFromEntity(Ham_TraceAttackid"fw_TraceAttack")            
}

public 
zp_extra_item_selected(iditemid)
{
    if(
itemid == g_salamanderget_salamander(id)
}

public 
get_salamander(id)    //Cuando se escribe say: /salamander
{
    new 
coste get_cvar_num("salamander_cost")
    if(!
is_user_alive(id)){    //Si estas muerto
        
client_print(idprint_chat"Intentalo cuando estes vivo...")  
        return
    }
    
    if ( 
cs_get_user_money(id) < coste ) {    //Si NO tienes dinero
        
client_print(idprint_chat"Necesitas %d$ para comprar el Lanzallamas."get_cvar_num"salamander_cost" ) )
        return
    }
    
    if ( 
g_had_salamander[id] == && tener[id] == true ) {    //Si YA la tienes puesta
        
client_print(idprint_chat"Ya la tienes puesta!" )
        return
    }
    else{
        
cs_set_user_moneyidcs_get_user_money(id) - coste )

        
drop_weapons(id1)    //para soltar el arma antigua al comprar la nueva
                
        
g_had_salamander[id] = 1
        tener
[id] = true    //declara que si la tienes
        
fm_give_item(idweapon_salamander)
            
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("CurWeapon"), _id)
        
write_byte(1)
        
write_byte(CSW_SALAMANDER)
        
write_byte(100)
        
message_end()
        
        
give_item(id"item_kevlar")
        
cs_set_user_bpammo(idCSW_SALAMANDER200)//pone las balas
    
}
}

public 
remove_salamnader(id)    //Cuando reinicia la ronda, cuando cojes y cuando sueltas el arma
{
    if(!
is_user_connected(id))
        return
    
    
g_had_salamander[id] = 0
}

public 
hook_weapon(idengclient_cmd(idweapon_salamander)

public 
Event_NewRound()
{
    
remove_entity_name(FIRE_CLASSNAME)
    
remove_entity_name(FIREBURN_CLASSNAME)
}

public 
event_CurWeapon(id)    //cuando sostener/ver/mantener arma
{
    if(!
is_user_alive(id))
        return
        
    if(
get_user_weapon(id) == CSW_SALAMANDER && g_had_salamander[id]) //establece el model
    
{
        
set_pev(idpev_viewmodel2WeaponModel[MODEL_V])
        
set_pev(idpev_weaponmodel2WeaponModel[MODEL_P])
        
tener[id] = true
        
if(g_old_weapon[id] != CSW_SALAMANDER)
        {
            
set_weapon_anim(idSALAMANDER_ANIM_DRAW)
            
set_pdata_float(id831.05)
        }
    }
    
g_old_weapon[id] = get_user_weapon(id)
}    

public 
reset_salamander(id) {  
    
    if ( 
tener[id] == true) {    //Si YA la tienes puesta
        
        
g_had_salamander[id] = 1
        
//event_CurWeapon(id)
        
set_task(0.1"event_CurWeapon"id)
        return
    }
}
public 
muerte(id) {  
    
g_had_salamander[id] = 0
    tener
[id] = false
    inwater
[id] = false

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
    if(!
is_user_connected(id) || !is_user_alive(id))
        return 
FMRES_IGNORED
    
if(get_user_weapon(id) != CSW_SALAMANDER || !g_had_salamander[id])
        return 
FMRES_IGNORED
    
    set_cd
(cd_handleCD_flNextAttackget_gametime() + 0.001
    
    return 
FMRES_HANDLED
}

public 
fw_SetModel(entitymodel[])
{
    if(!
pev_valid(entity))
        return 
FMRES_IGNORED
    
    
static szClassName[33]
    
pev(entitypev_classnameszClassNamecharsmax(szClassName))
    
    if(!
equal(szClassName"weaponbox"))
        return 
FMRES_IGNORED
    
    
static id
    id 
pev(entitypev_owner)
    
    if(
equal(modelDEFAULT_W_MODEL))
    {
        static 
weapon
        weapon 
fm_find_ent_by_owner(-1weapon_salamanderentity)
        
        if(!
pev_valid(weapon))
            return 
FMRES_IGNORED
        
        
if(g_had_salamander[id])
        {
            
set_pev(weaponpev_impulseWEAPON_SECRET_CODE)
            
engfunc(EngFunc_SetModelentityWeaponModel[MODEL_W])
            
            
remove_salamnader(id)    //cuando la sueltas
            
tener[id] = false
            
            
return FMRES_SUPERCEDE
        
}
    }

    return 
FMRES_IGNORED
}

public 
fw_PlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if(!
is_user_connected(invoker) || !is_user_alive(invoker))
        return 
FMRES_IGNORED
    
if(get_user_weapon(invoker) != CSW_SALAMANDER || !g_had_salamander[invoker])
        return 
FMRES_IGNORED
    
if(eventid == g_weapon_event)
    {
        
playback_event(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)    

        
set_weapon_anim(invokerSALAMANDER_ANIM_SHOOT_BEGIN)
            
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_HANDLED
}

public 
fw_CmdStart(iduc_handleseed)
{
    if(!
is_user_connected(id) || !is_user_alive(id))
        return 
FMRES_IGNORED
    
if(get_user_weapon(id) != CSW_SALAMANDER || !g_had_salamander[id])
        return 
FMRES_IGNORED
        
    
static PressedButton
    PressedButton 
get_uc(uc_handleUC_Buttons)
    
    if(!(
PressedButton IN_ATTACK))
    {
        if((
pev(idpev_oldbuttons) & IN_ATTACK) && pev(idpev_weaponanim) == SALAMANDER_ANIM_SHOOT_BEGIN)
        {
            static 
weaponweapon fm_get_user_weapon_entity(idCSW_SALAMANDER)
            if(
pev_valid(weapon)) set_pdata_float(weapon482.04)
            
set_weapon_anim(idSALAMANDER_ANIM_SHOOT_END)
            
make_fire_smoke(id)
        }
    }
        
    return 
FMRES_HANDLED
}

public 
fw_Spawn_Post(id)
{
    if(
tener[id] == true){
        
remove_salamnader(id)    //cuando se reinicia la ronda
    
}
}

public 
fw_AddToPlayer_Post(entid)
{
    if(!
pev_valid(ent))
        return 
HAM_IGNORED
        
    
if(pev(entpev_impulse) == WEAPON_SECRET_CODE)
    {
        
remove_salamnader(id)
        
g_had_salamander[id] = 1
        tener
[id] = true
    
}
    
    
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("WeaponList"), _id)
    
write_string(g_had_salamander[id] == "weapon_flamethrower" "weapon_m249")
    
write_byte(3)
    
write_byte(200)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(0)
    
write_byte(4)
    
write_byte(CSW_SALAMANDER)
    
write_byte(0)
    
message_end()            
    
    return 
HAM_HANDLED    
}

public 
fw_TraceAttack(EntAttackerFloat:DamageFloat:Dir[3], ptrDamageType)
{
    if(!
is_user_alive(Attacker))
        return 
HAM_IGNORED
    
if(get_user_weapon(Attacker) != CSW_SALAMANDER || !g_had_salamander[Attacker])
        return 
HAM_IGNORED
        
    
static Float:Origin[3], Float:TargetOrigin[3]
    
    
get_position(AttackerWEAPON_ATTACH_FWEAPON_ATTACH_RWEAPON_ATTACH_U 10.0Origin)
    
get_position(AttackerWEAPON_ATTACH_F 100.0WEAPON_ATTACH_RWEAPON_ATTACH_U 10.0TargetOrigin)
    
    
create_fire(AttackerOriginTargetOriginFIRE_SPEED)
        
    return 
HAM_SUPERCEDE
}

public 
fw_Weapon_PrimaryAttack(ent)
{
    static 
idid pev(entpev_owner)
    
pev(idpev_punchangleg_PunchAngles[id])

    return 
HAM_IGNORED    
}

public 
fw_Weapon_PrimaryAttack_Post(ent)
{
    static 
idid pev(ent,pev_owner)
    if(
get_user_weapon(id) == CSW_SALAMANDER && g_had_salamander[id])
    {
        static 
Float:push[3]
        
pev(idpev_punchanglepush)
        
xs_vec_sub(pushg_PunchAngles[id], push)
        
        
xs_vec_mul_scalar(pushRECOILpush)
        
xs_vec_add(pushg_PunchAngles[id], push)
        
set_pev(idpev_punchanglepush)
    }
    
    return 
HAM_IGNORED    
}

public 
create_fake_attack(id)
{
    static 
weapon
    weapon 
fm_find_ent_by_owner(-1"weapon_knife"id)
    
    if(
pev_valid(weapon)) ExecuteHamB(Ham_Weapon_PrimaryAttackweapon)
}

public 
create_fire(idFloat:Origin[3], Float:TargetOrigin[3], Float:Speed)
{
    new 
iEnt create_entity("env_sprite")
    static 
Float:vfAngle[3], Float:MyOrigin[3], Float:Velocity[3]
    
    
pev(idpev_anglesvfAngle)
    
pev(idpev_originMyOrigin)
    
    
vfAngle[2] = float(random(18) * 20)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt250.0)
    
set_pev(iEntpev_fuser1get_gametime() + 1.0)    // time remove
    
set_pev(iEntpev_scale0.5)
    
set_pev(iEntpev_nextthinkget_gametime() + 0.05)
    
    
entity_set_string(iEntEV_SZ_classnameFIRE_CLASSNAME)
    
engfunc(EngFunc_SetModeliEntWeaponResource[0])
    
set_pev(iEntpev_minsFloat:{-1.0, -1.0, -1.0})
    
set_pev(iEntpev_maxsFloat:{1.01.01.0})
    
set_pev(iEntpev_originOrigin)
    
set_pev(iEntpev_gravity0.01)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_solidSOLID_TRIGGER)
    
set_pev(iEntpev_ownerid)    
    
set_pev(iEntpev_frame0.0)
    
set_pev(iEntpev_iuser2get_user_team(id))

    
get_speed_vector(OriginTargetOriginSpeedVelocity)
    
set_pev(iEntpev_velocityVelocity)
    
    
emit_sound(iEntCHAN_BODYWeaponSound[random_num(01)], 1.0ATTN_NORM0PITCH_NORM)    
}

public 
fw_Fire_Think(iEnt)
{
    if(!
pev_valid(iEnt)) 
        return
    
    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.75)
        
        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }
    
    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)
    
    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_Fire_Touch(entid)
{
    if(!
pev_valid(ent))
        return
        
    if(
pev_valid(id))
    {
        static 
Classname[32]
        
pev(idpev_classnameClassnamesizeof(Classname))
        
        if(
equal(ClassnameFIRE_CLASSNAME)) return
        else if(
is_user_alive(id)) 
        {
            static 
EntTeamEntTeam pev(entpev_iuser2)
            if(
get_user_team(id) != EntTeam)
            {
                
do_attack(pev(entpev_owner), id0float(DAMAGE))
                
Make_FireBurn(id)
            }
        }
    }
        
    
set_pev(entpev_movetypeMOVETYPE_NONE)
    
set_pev(entpev_solidSOLID_NOT)
}

public 
make_fire_smoke(id)
{
    static 
Float:Origin[3]
    
get_position(idWEAPON_ATTACH_FWEAPON_ATTACH_RWEAPON_ATTACH_UOrigin)
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY
    
write_byte(TE_EXPLOSION
    
engfunc(EngFunc_WriteCoordOrigin[0])
    
engfunc(EngFunc_WriteCoordOrigin[1])
    
engfunc(EngFunc_WriteCoordOrigin[2])
    
write_short(g_smokepuff_id
    
write_byte(5)
    
write_byte(30)
    
write_byte(14)
    
message_end()
}

public 
Make_FireBurn(id)
{
    static 
EntEnt fm_find_ent_by_owner(-1FIREBURN_CLASSNAMEid)
    if(!
pev_valid(Ent))
    {
        new 
iEnt create_entity("env_sprite")
        static 
Float:MyOrigin[3]
        
        
pev(idpev_originMyOrigin)
        
        
// set info for ent
        
set_pev(iEntpev_movetypeMOVETYPE_FLY)
        
set_pev(iEntpev_rendermodekRenderTransAdd)
        
set_pev(iEntpev_renderamt250.0)
        
set_pev(iEntpev_fuser1get_gametime() + 5.0)    // time remove
        
set_pev(iEntpev_scale1.0)
        
set_pev(iEntpev_nextthinkget_gametime() + 0.5)
        
        
entity_set_string(iEntEV_SZ_classnameFIREBURN_CLASSNAME)
        
engfunc(EngFunc_SetModeliEntWeaponResource[1])
        
set_pev(iEntpev_originMyOrigin)
        
set_pev(iEntpev_ownerid)
        
set_pev(iEntpev_aimentid)
        
set_pev(iEntpev_frame0.0)
    }
}

public 
fw_FireBurn_Think(iEnt)
{
    if(!
pev_valid(iEnt)) 
        return
    
    static 
Float:fFrame
    pev
(iEntpev_framefFrame)

    
// effect exp
    
fFrame += 1.0
    
if(fFrame 15.0fFrame 0.0

    set_pev
(iEntpev_framefFrame)
    
set_pev(iEntpev_nextthinkget_gametime() + 0.05)
    
    static 
id
    id 
pev(iEntpev_owner)
    
    if(
get_gametime() - BURN_LOOP pev(iEntpev_fuser2))
    {
        
ExecuteHam(Ham_TakeDamageid0id0.0DMG_BURN)
        if((
get_user_health(id) - BURN_DAMAGE) > 0)
            
set_user_health(idget_user_health(id) - BURN_DAMAGE)
        else
            
user_kill(id)
        
set_pev(iEntpev_fuser2get_gametime())
    }
    
    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

do_attack(AttackerVictimInflictorFloat:fDamage)
{
    
fake_player_trace_attack(AttackerVictimfDamage)
    
fake_take_damage(AttackerVictimfDamageInflictor)
}

public 
fake_player_trace_attack(iAttackeriVictim, &Float:fDamage)
{
    
// get fDirection
    
new Float:fAngles[3], Float:fDirection[3]
    
pev(iAttackerpev_anglesfAngles)
    
angle_vector(fAnglesANGLEVECTOR_FORWARDfDirection)
    
    
// get fStart
    
new Float:fStart[3], Float:fViewOfs[3]
    
pev(iAttackerpev_originfStart)
    
pev(iAttackerpev_view_ofsfViewOfs)
    
xs_vec_add(fViewOfsfStartfStart)
    
    
// get aimOrigin
    
new iAimOrigin[3], Float:fAimOrigin[3]
    
get_user_origin(iAttackeriAimOrigin3)
    
IVecFVec(iAimOriginfAimOrigin)
    
    
// TraceLine from fStart to AimOrigin
    
new ptr create_tr2() 
    
engfunc(EngFunc_TraceLinefStartfAimOriginDONT_IGNORE_MONSTERSiAttackerptr)
    new 
pHit get_tr2(ptrTR_pHit)
    new 
iHitgroup get_tr2(ptrTR_iHitgroup)
    new 
Float:fEndPos[3]
    
get_tr2(ptrTR_vecEndPosfEndPos)

    
// get target & body at aiming
    
new iTargetiBody
    get_user_aiming
(iAttackeriTargetiBody)
    
    
// if aiming find target is iVictim then update iHitgroup
    
if (iTarget == iVictim)
    {
        
iHitgroup iBody
    
}
    
    
// if ptr find target not is iVictim
    
else if (pHit != iVictim)
    {
        
// get AimOrigin in iVictim
        
new Float:fVicOrigin[3], Float:fVicViewOfs[3], Float:fAimInVictim[3]
        
pev(iVictimpev_originfVicOrigin)
        
pev(iVictimpev_view_ofsfVicViewOfs
        
xs_vec_add(fVicViewOfsfVicOriginfAimInVictim)
        
fAimInVictim[2] = fStart[2]
        
fAimInVictim[2] += get_distance_f(fStartfAimInVictim) * floattanfAngles[0] * 2.0degrees )
        
        
// check aim in size of iVictim
        
new iAngleToVictim get_angle_to_target(iAttackerfVicOrigin)
        
iAngleToVictim abs(iAngleToVictim)
        new 
Float:fDis 2.0 get_distance_f(fStartfAimInVictim) * floatsinfloat(iAngleToVictim) * 0.5degrees )
        new 
Float:fVicSize[3]
        
pev(iVictimpev_size fVicSize)
        if ( 
fDis <= fVicSize[0] * 0.5 )
        {
            
// TraceLine from fStart to aimOrigin in iVictim
            
new ptr2 create_tr2() 
            
engfunc(EngFunc_TraceLinefStartfAimInVictimDONT_IGNORE_MONSTERSiAttackerptr2)
            new 
pHit2 get_tr2(ptr2TR_pHit)
            new 
iHitgroup2 get_tr2(ptr2TR_iHitgroup)
            
            
// if ptr2 find target is iVictim
            
if ( pHit2 == iVictim && (iHitgroup2 != HIT_HEAD || fDis <= fVicSize[0] * 0.25) )
            {
                
pHit iVictim
                iHitgroup 
iHitgroup2
                get_tr2
(ptr2TR_vecEndPosfEndPos)
            }
            
            
free_tr2(ptr2)
        }
        
        
// if pHit still not is iVictim then set default HitGroup
        
if (pHit != iVictim)
        {
            
// set default iHitgroup
            
iHitgroup HIT_GENERIC
            
            
new ptr3 create_tr2() 
            
engfunc(EngFunc_TraceLinefStartfVicOriginDONT_IGNORE_MONSTERSiAttackerptr3)
            
get_tr2(ptr3TR_vecEndPosfEndPos)
            
            
// free ptr3
            
free_tr2(ptr3)
        }
    }
    
    
// set new Hit & Hitgroup & EndPos
    
set_tr2(ptrTR_pHitiVictim)
    
set_tr2(ptrTR_iHitgroupiHitgroup)
    
set_tr2(ptrTR_vecEndPosfEndPos)
    
    
// hitgroup multi fDamage
    
new Float:fMultifDamage 
    
switch(iHitgroup)
    {
        case 
HIT_HEADfMultifDamage  4.0
        
case HIT_STOMACHfMultifDamage  1.25
        
case HIT_LEFTLEGfMultifDamage  0.75
        
case HIT_RIGHTLEGfMultifDamage  0.75
        
default: fMultifDamage  1.0
    
}
    
    
fDamage *= fMultifDamage
    
    
// ExecuteHam
    
fake_trake_attack(iAttackeriVictimfDamagefDirectionptr)
    
    
// free ptr
    
free_tr2(ptr)
}

stock fake_trake_attack(iAttackeriVictimFloat:fDamageFloat:fDirection[3], iTraceHandleiDamageBit = (DMG_NEVERGIB DMG_BULLET))
{
    
ExecuteHam(Ham_TraceAttackiVictimiAttackerfDamagefDirectioniTraceHandleiDamageBit)
}

stock fake_take_damage(iAttackeriVictimFloat:fDamageiInflictoriDamageBit = (DMG_NEVERGIB DMG_BULLET))
{
    
ExecuteHam(Ham_TakeDamageiVictimiInflictoriAttackerfDamageiDamageBit)
}

stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize 0.0)
{
    new 
Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
    
pev(idpev_originfOrigin)
    
get_user_origin(idiAimOrigin3// end position from eyes
    
IVecFVec(iAimOriginfAimOrigin)
    
xs_vec_sub(fAimOriginfOriginfV1)
    
    new 
Float:fV2[3]
    
xs_vec_sub(fTargetfOriginfV2)
    
    new 
iResult get_angle_between_vectors(fV1fV2)
    
    if (
TargetSize 0.0)
    {
        new 
Float:fTan TargetSize get_distance_f(fOriginfTarget)
        new 
fAngleToTargetSize floatroundfloatatan(fTandegrees) )
        
iResult -= (iResult 0) ? fAngleToTargetSize : -fAngleToTargetSize
    
}
    
    return 
iResult
}

stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
{
    new 
Float:fA1[3], Float:fA2[3]
    
engfunc(EngFunc_VecToAnglesfV1fA1)
    
engfunc(EngFunc_VecToAnglesfV2fA2)
    
    new 
iResult floatround(fA1[1] - fA2[1])
    
iResult iResult 360
    iResult 
= (iResult 180) ? (iResult 360) : iResult
    
    
return iResult
}

stock set_weapon_anim(idanim)
{
    if(!
is_user_alive(id) || pev(idpev_weaponanim) == anim)
        return
        
    
set_pev(idpev_weaponanimanim)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, {000}, id)
    
write_byte(anim)
    
write_byte(pev(idpev_body))
    
message_end()
}

stock drop_weapons(iddropwhat//para soltar el arma antigua al comprar la nueva
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)
    
    const 
PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_MAC10)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
    
    for (
0numi++)
    {
        
weaponid weapons[i]
        
        if (
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }
    if( 
cs_get_user_shield(id) > )//Para saber si tiene el escudo y soltarlo
        
engclient_cmd(id"drop""weapon_shield")
}

stock set_player_nextattack(playerweapon_idFloat:NextTime)
{
    const 
m_flNextPrimaryAttack 46
    
const m_flNextSecondaryAttack 47
    
const m_flTimeWeaponIdle 48
    
const m_flNextAttack 83
    
    
static weapon
    weapon 
fm_get_user_weapon_entity(playerweapon_id)
    
    
set_pdata_float(playerm_flNextAttackNextTime5)
    if(
pev_valid(weapon))
    {
        
set_pdata_float(weaponm_flNextPrimaryAttack NextTime4)
        
set_pdata_float(weaponm_flNextSecondaryAttackNextTime4)
        
set_pdata_float(weaponm_flTimeWeaponIdleNextTime4)
    }
}

stock get_position(id,Float:forwFloat:rightFloat:upFloat:vStart[])
{
    new 
Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
    
    
pev(idpev_originvOrigin)
    
pev(idpev_view_ofs,vUp//for player
    
xs_vec_add(vOrigin,vUp,vOrigin)
    
pev(idpev_v_anglevAngle// if normal entity ,use pev_angles
    
    
angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward//or use EngFunc_AngleVectors
    
angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
    
angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
    
    
vStart[0] = vOrigin[0] + vForward[0] * forw vRight[0] * right vUp[0] * up
    vStart
[1] = vOrigin[1] + vForward[1] * forw vRight[1] * right vUp[1] * up
    vStart
[2] = vOrigin[2] + vForward[2] * forw vRight[2] * right vUp[2] * up
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speedFloat:new_velocity[3])
{
    
new_velocity[0] = origin2[0] - origin1[0]
    
new_velocity[1] = origin2[1] - origin1[1]
    
new_velocity[2] = origin2[2] - origin1[2]
    new 
Float:num floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    
new_velocity[0] *= num
    new_velocity
[1] *= num
    new_velocity
[2] *= num
    
    
return 1;

albjb 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 15:49.


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