Raised This Month: $32 Target: $400
 8% 

Set damage to NPC with custom weapon


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Point
Junior Member
Join Date: Oct 2014
Old 01-06-2019 , 13:15   Set damage to NPC with custom weapon
Reply With Quote #1

Hi! I could use some help finding a good way to do this and i think this is the best place.
So, as the title says. how can i set the npc to take damage from a custom weapon which per example shoot fireballs or something similar.
Lets say this one
PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <xs>

#define PLUGIN "[ZBHeroEx] Primary: Cannon"
#define VERSION "1.0"
#define AUTHOR "Dias"

#define V_MODEL "models/v_cannon.mdl"
#define P_MODEL "models/p_cannon.mdl"
#define W_MODEL "models/w_cannon.mdl"

#define DAMAGE 600
#define RADIUS 400

#define CANNON_ROUND 20

#define TIME_DRAW 0.75
#define TIME_RELOAD 3.0

#define CSW_CANNON CSW_MP5NAVY
#define weapon_cannon "weapon_mp5navy"

#define WEAPON_EVENT "events/mp5n.sc"
#define WEAPON_W_MODEL "models/w_mp5.mdl"
#define WEAPON_ANIMEXT "carbine"
#define WEAPON_SECRET_CODE 5786

#define CANNONFIRE_CLASSNAME "cannon"

// Fire Start
#define WEAPON_ATTACH_F 30.0
#define WEAPON_ATTACH_R 10.0
#define WEAPON_ATTACH_U -5.0

new const WeaponSounds[2][] =
{
    
"weapons/cannon-1.wav",
    
"weapons/cannon_draw.wav"
}

new const 
WeaponResources[4][] = 
{
    
"sprites/fire_cannon.spr",
    
"sprites/weapon_cannon.txt",
    
"sprites/640hud69_2.spr",
    
"sprites/640hud2_2.spr"
}

enum
{
    
CANNON_ANIM_IDLE 0,
    
CANNON_ANIM_SHOOT1,
    
CANNON_ANIM_SHOOT2,
    
CANNON_ANIM_DRAW
}

// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))

new g_Cannon
new g_Had_Cannong_InTempingAttack
new g_OldWeapon[33], g_CannonRound[33], Float:g_LastAttack[33], Float:g_NextTime[33]
new 
g_SmokePuff_SprIdg_MsgCurWeapong_MsgAmmoXg_MsgWeaponList

public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_event("CurWeapon""Event_CurWeapon""be""1=1")

    
register_think(CANNONFIRE_CLASSNAME"fw_Cannon_Think")
    
register_touch(CANNONFIRE_CLASSNAME"*""fw_Cannon_Touch")    
    
register_clcmd("say givecannon""Get_Cannon");
    
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)
    
register_forward(FM_CmdStart"fw_CmdStart")
    
register_forward(FM_SetModel"fw_SetModel")    
    
register_forward(FM_EmitSound"fw_EmitSound")
    
register_forward(FM_TraceLine"fw_TraceLine")
    
register_forward(FM_TraceHull"fw_TraceHull")        
    
    
RegisterHam(Ham_Item_AddToPlayerweapon_cannon"fw_Item_AddToPlayer_Post"1)
    
    
g_MsgCurWeapon get_user_msgid("CurWeapon")
    
g_MsgAmmoX get_user_msgid("AmmoX")
    
g_MsgWeaponList get_user_msgid("WeaponList")
    
    
register_clcmd("weapon_cannon""HookWeapon")
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelV_MODEL)
    
engfunc(EngFunc_PrecacheModelP_MODEL)
    
engfunc(EngFunc_PrecacheModelW_MODEL)
    
    new 
i
    
for(0sizeof(WeaponSounds); i++)
        
engfunc(EngFunc_PrecacheSoundWeaponSounds[i])
    for(
0sizeof(WeaponResources); i++)
    {
        if(
== 1engfunc(EngFunc_PrecacheGenericWeaponResources[i])
        else 
engfunc(EngFunc_PrecacheModelWeaponResources[i])
    }
    
    
g_SmokePuff_SprId engfunc(EngFunc_PrecacheModel"sprites/smokepuff.spr")
}

public 
Get_Cannon(id)
{
    if(!
is_user_alive(id))
        return
        
    
Set_BitVar(g_Had_Cannonid)
    
UnSet_BitVar(g_InTempingAttackid)
    
g_CannonRound[id] = CANNON_ROUND
    
    fm_give_item
(idweapon_cannon)
    
update_ammo(id, -1CANNON_ROUND)
    
    
g_NextTime[id] = 0.0
}

public 
Remove_Cannon(id)
{
    
UnSet_BitVar(g_Had_Cannonid)
    
UnSet_BitVar(g_InTempingAttackid)
    
g_CannonRound[id] = 0
}

public 
HookWeapon(id)
{
    
engclient_cmd(idweapon_cannon)
    return 
PLUGIN_HANDLED
}

public 
Event_CurWeapon(id)
{
    if(!
is_user_alive(id))
        return
        
    static 
CSWIDCSWID read_data(2)
    if((
CSWID == CSW_CANNON && g_OldWeapon[id] != CSW_CANNON) && Get_BitVar(g_Had_Cannonid))
    {
        
set_pev(idpev_viewmodel2V_MODEL)
        
set_pev(idpev_weaponmodel2P_MODEL)
        
        
set_weapon_anim(idCANNON_ANIM_DRAW)
        
set_pdata_float(id83TIME_DRAW5)
        
        
set_pdata_string(id, (492) * 4WEAPON_ANIMEXT, -20)
        
update_ammo(id, -1g_CannonRound[id])
    } else if((
CSWID == CSW_CANNON && g_OldWeapon[id] == CSW_CANNON) && Get_BitVar(g_Had_Cannonid)) {
        
update_ammo(id, -1g_CannonRound[id])
    }
    
    
g_OldWeapon[id] = CSWID
}


public 
fw_Cannon_Think(iEnt)
{
    if(!
pev_valid(iEnt)) 
        return
    
    static 
Float:fFrameFloat:fNextThinkFloat:fScale
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)
    
    
// effect exp
    
static iMoveTypeiMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.0015
        fFrame 
+= random_float(0.250.75)
        
fScale += 0.01
        
        
if(fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    } else {
        
fNextThink 0.045
        
        fFrame 
+= random_float(0.51.0)
        
fScale += 0.01
        
        fFrame 
floatmin(21.0fFrame)
        
fScale floatmin(2.0fFrame)
    }
    
    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkhalflife_time() + fNextThink)
    
    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if(
get_gametime() >= fTimeRemove)
    {
        static 
Float:Amountpev(iEntpev_renderamtAmount)
        if(
Amount <= 5.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        } else {
            
Amount -= 10.0
            set_pev
(iEntpev_renderamtAmount)
        }
    }
}

public 
fw_Cannon_Touch(entid)
{
    if(!
pev_valid(ent))
        return
        
    if(
pev_valid(id))
    {
        static 
Classname[32]
        
pev(idpev_classnameClassnamesizeof(Classname))
        
        if(
equal(ClassnameCANNONFIRE_CLASSNAME)) return
    }
        
    
set_pev(entpev_movetypeMOVETYPE_NONE)
    
set_pev(entpev_solidSOLID_NOT)
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED
    
if(get_user_weapon(id) != CSW_CANNON || !Get_BitVar(g_Had_Cannonid))
        return 
FMRES_IGNORED
    
    set_cd
(cd_handleCD_flNextAttackget_gametime() + 0.001
    
    return 
FMRES_HANDLED
}

public 
fw_CmdStart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !is_user_connected(id))
        return 
FMRES_IGNORED
    
if(get_user_weapon(id) != CSW_CANNON || !Get_BitVar(g_Had_Cannonid))
        return 
FMRES_IGNORED
    
    
static CurButton
    CurButton 
get_uc(uc_handleUC_Buttons)
    
    if(
CurButton IN_ATTACK)
    {
        
CurButton &= ~IN_ATTACK
        set_uc
(uc_handleUC_ButtonsCurButton)
        
        
HandleShoot_Cannon(id)
    }
    
    
Check_CannonTime(id)
    
    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(modelWEAPON_W_MODEL))
    {
        static 
weapon
        weapon 
fm_find_ent_by_owner(-1weapon_cannonentity)
        
        if(!
pev_valid(weapon))
            return 
FMRES_IGNORED
        
        
if(Get_BitVar(g_Had_Cannonid))
        {
            
set_pev(weaponpev_impulseWEAPON_SECRET_CODE)
            
set_pev(weaponpev_iuser1g_CannonRound[id])
            
            
engfunc(EngFunc_SetModelentityW_MODEL)
            
Remove_Cannon(id)
            
            return 
FMRES_SUPERCEDE
        
}
    }

    return 
FMRES_IGNORED
}

public 
fw_EmitSound(idchannel, const sample[], Float:volumeFloat:attnflagspitch)
{
    if(!
is_user_connected(id))
        return 
FMRES_IGNORED
    
if(!Get_BitVar(g_InTempingAttackid))
        return 
FMRES_IGNORED
        
    
if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {
        if(
sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
            return 
FMRES_SUPERCEDE
        
if (sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't')
        {
            if (
sample[17] == 'w')  return FMRES_SUPERCEDE
            
else  return FMRES_SUPERCEDE
        
}
        if (
sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
            return 
FMRES_SUPERCEDE;
    }
    
    return 
FMRES_IGNORED
}

public 
fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monsteridhandle)
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED    
    
if(!Get_BitVar(g_InTempingAttackid))
        return 
FMRES_IGNORED
    
    
static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    
    
pev(idpev_originfOrigin)
    
pev(idpev_view_ofsview_ofs)
    
xs_vec_add(fOriginview_ofsvecStart)
    
pev(idpev_v_anglev_angle)
    
    
engfunc(EngFunc_MakeVectorsv_angle)
    
get_global_vector(GL_v_forwardv_forward)

    
xs_vec_mul_scalar(v_forward0.0v_forward)
    
xs_vec_add(vecStartv_forwardvecEnd)
    
    
engfunc(EngFunc_TraceLinevecStartvecEndignored_monsteridhandle)
    
    return 
FMRES_SUPERCEDE
}

public 
fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monsterhullidhandle)
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED    
    
if(!Get_BitVar(g_InTempingAttackid))
        return 
FMRES_IGNORED
    
    
static Float:vecStart[3], Float:vecEnd[3], Float:v_angle[3], Float:v_forward[3], Float:view_ofs[3], Float:fOrigin[3]
    
    
pev(idpev_originfOrigin)
    
pev(idpev_view_ofsview_ofs)
    
xs_vec_add(fOriginview_ofsvecStart)
    
pev(idpev_v_anglev_angle)
    
    
engfunc(EngFunc_MakeVectorsv_angle)
    
get_global_vector(GL_v_forwardv_forward)
    
    
xs_vec_mul_scalar(v_forward0.0v_forward)
    
xs_vec_add(vecStartv_forwardvecEnd)
    
    
engfunc(EngFunc_TraceHullvecStartvecEndignored_monsterhullidhandle)
    
    return 
FMRES_SUPERCEDE
}

public 
fw_Item_AddToPlayer_Post(entid)
{
    if(!
pev_valid(ent))
        return 
HAM_IGNORED
        
    
if(pev(entpev_impulse) == WEAPON_SECRET_CODE)
    {
        
Remove_Cannon(id)
        
        
Set_BitVar(g_Had_Cannonid)
        
g_CannonRound[id] = pev(idpev_iuser1)
    }
    
    
message_begin(MSG_ONE_UNRELIABLEg_MsgWeaponList_id)
    
write_string(Get_BitVar(g_Had_Cannonid) ? "weapon_cannon" "weapon_mp5navy")
    
write_byte(10)
    
write_byte(20)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(0)
    
write_byte(7)
    
write_byte(Get_BitVar(g_Had_Cannonid) ? CSW_CANNON CSW_MP5NAVY)
    
write_byte(0)
    
message_end()            
    
    return 
HAM_HANDLED    
}

public 
HandleShoot_Cannon(id)
{
    if(
get_pdata_float(id835) > 0.0)
        return
    if(
g_CannonRound[id] <= 0)
        return
    if(
get_gametime() - TIME_RELOAD <= g_LastAttack[id])
    {
        
set_player_nextattack(idg_LastAttack[id] - get_gametime())
        return
    }
        
    static 
EntEnt fm_get_user_weapon_entity(idCSW_CANNON)
    if(!
pev_valid(Ent)) return        
    
    
g_CannonRound[id]--
    
update_ammo(id, -1g_CannonRound[id])

    
Create_FakeAttack(id)
    
    
set_weapon_anim(idrandom_num(CANNON_ANIM_SHOOT1CANNON_ANIM_SHOOT2))
    
emit_sound(idCHAN_WEAPONWeaponSounds[0], 1.0ATTN_NORM0PITCH_NORM)
    
    
Create_CannonFire(id)
    
Make_Push(id)

    
set_player_nextattack(idTIME_RELOAD)
    
set_weapons_timeidle(idCSW_CANNONTIME_RELOAD)
    
    
g_LastAttack[id] = get_gametime()
    
g_NextTime[id] = get_gametime()
}

public 
Check_CannonTime(id)
{
    if(
g_NextTime[id] == 0.0)
        return
    
    if(
get_gametime() - 0.1 g_NextTime[id])
    {
        
emit_sound(idCHAN_WEAPONWeaponSounds[0], 1.0ATTN_NORM0PITCH_NORM)
        
        
Make_FireSmoke(id)
        
Create_CannonFire(id)
        
Check_RadiusDamage(id)
        
        
// Stop
        
g_NextTime[id] = 0.0
    
}
}

public 
Create_CannonFire(id)
{
    const 
MAX_FIRE 12
    
static Float:StartOrigin[3], Float:TargetOrigin[MAX_FIRE][3], Float:Speed[MAX_FIRE]

    
// Get Target
    
    // -- Left
    
get_position(id100.0random_float(-10.0, -40.0), WEAPON_ATTACH_UTargetOrigin[0]); Speed[0] = 150.0
    get_position
(id100.0random_float(-10.0, -40.0), WEAPON_ATTACH_UTargetOrigin[1]); Speed[1] = 180.0
    get_position
(id100.0,    random_float(-10.0, -40.0), WEAPON_ATTACH_UTargetOrigin[2]); Speed[2] = 210.0
    get_position
(id100.0random_float(-10.0, -40.0), WEAPON_ATTACH_UTargetOrigin[3]); Speed[3] = 240.0
    get_position
(id100.0random_float(-10.0, -40.0), WEAPON_ATTACH_UTargetOrigin[4]); Speed[4] = 300.0

    
// -- Center
    
get_position(id100.00.0WEAPON_ATTACH_UTargetOrigin[5]); Speed[5] = 150.0
    get_position
(id100.00.0WEAPON_ATTACH_UTargetOrigin[6]); Speed[6] = 300.0
    
    
// -- Right
    
get_position(id100.0random_float(10.040.0), WEAPON_ATTACH_UTargetOrigin[7]); Speed[7] = 150.0
    get_position
(id100.0random_float(10.040.0), WEAPON_ATTACH_UTargetOrigin[8]); Speed[8] = 180.0
    get_position
(id100.0,    random_float(10.040.0), WEAPON_ATTACH_UTargetOrigin[9]); Speed[9] = 210.0
    get_position
(id100.0random_float(10.040.0), WEAPON_ATTACH_UTargetOrigin[10]); Speed[10] = 240.0
    get_position
(id100.0random_float(10.040.0), WEAPON_ATTACH_UTargetOrigin[11]); Speed[11] = 300.0

    
for(new 0MAX_FIREi++)
    {
        
// Get Start
        
get_position(idrandom_float(30.040.0), 0.0WEAPON_ATTACH_UStartOrigin)
        
Create_Fire(idStartOriginTargetOrigin[i], Speed[i])
    }
}

public 
Create_Fire(idFloat:Origin[3], Float:TargetOrigin[3], Float:Speed)
{
    static 
EntEnt engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"env_sprite"))
    if(!
pev_valid(Ent)) return
    
    static 
Float:Velocity[3]

    
// Set info for ent
    
set_pev(Entpev_movetypeMOVETYPE_FLY)
    
set_pev(Entpev_rendermodekRenderTransAdd)
    
set_pev(Entpev_renderamt250.0)
    
set_pev(Entpev_fuser1get_gametime() + 0.75)    // time remove
    
set_pev(Entpev_scale0.5)
    
set_pev(Entpev_nextthinkhalflife_time() + 0.05)
    
    
entity_set_string(EntEV_SZ_classnameCANNONFIRE_CLASSNAME)
    
engfunc(EngFunc_SetModelEntWeaponResources[0])
    
set_pev(Entpev_minsFloat:{-1.0, -1.0, -1.0})
    
set_pev(Entpev_maxsFloat:{1.01.01.0})
    
set_pev(Entpev_originOrigin)
    
set_pev(Entpev_gravity0.01)
    
set_pev(Entpev_solidSOLID_TRIGGER)
    
set_pev(Entpev_frame0.0)
    
    
get_speed_vector(OriginTargetOriginSpeedVelocity)
    
set_pev(Entpev_velocityVelocity)
}

public 
Make_FireSmoke(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_SprId)
    
write_byte(10)
    
write_byte(15)
    
write_byte(14)
    
message_end()
}

public 
Check_RadiusDamage(id)
{
    static 
Float:Origin[3]
    for(new 
0get_maxplayers(); i++)
    {
        if(!
is_user_alive(i))
            continue
        if(
id == i)
            continue
        
pev(ipev_originOrigin)
        if(!
is_in_viewcone(idOrigin1))
            continue
        if(
entity_range(idi) > float(RADIUS))
            continue
            
        
do_attack(idi0float(DAMAGE))
    }
}

public 
Create_FakeAttack(id)
{
    static 
EntEnt fm_get_user_weapon_entity(idCSW_KNIFE)
    if(!
pev_valid(Ent)) return
    
    
Set_BitVar(g_InTempingAttackid)
    
ExecuteHamB(Ham_Weapon_PrimaryAttackEnt)

    
// Set Real Attack Anim
    
static iAnimDesired,  szAnimation[64]

    
formatex(szAnimationcharsmax(szAnimation), (pev(idpev_flags) & FL_DUCKING) ? "crouch_shoot_%s" "ref_shoot_%s"WEAPON_ANIMEXT)
    if((
iAnimDesired lookup_sequence(idszAnimation)) == -1)
        
iAnimDesired 0
    
    set_pev
(idpev_sequenceiAnimDesired)
    
UnSet_BitVar(g_InTempingAttackid)
}

public 
Make_Push(id)
{
    static 
Float:VirtualVec[3]
    
VirtualVec[0] = random_float(-3.5, -7.0)
    
VirtualVec[1] = random_float(3.0, -3.0)
    
VirtualVec[2] = 0.0    
    
    set_pev
(idpev_punchangleVirtualVec)        
}

public 
update_ammo(idAmmoBpAmmo)
{
    
message_begin(MSG_ONE_UNRELIABLEg_MsgCurWeapon_id)
    
write_byte(1)
    
write_byte(CSW_CANNON)
    
write_byte(Ammo)
    
message_end()
    
    
message_begin(MSG_ONE_UNRELIABLEg_MsgAmmoX_id)
    
write_byte(10)
    
write_byte(BpAmmo)
    
message_end()
    
    
cs_set_user_bpammo(idCSW_CANNONBpAmmo)
}

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

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

    
// get target & body at aiming
    
static 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
        
static 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
        
static iAngleToVictimiAngleToVictim get_angle_to_target(iAttackerfVicOrigin)
        
iAngleToVictim abs(iAngleToVictim)
        static 
Float:fDisfDis 2.0 get_distance_f(fStartfAimInVictim) * floatsinfloat(iAngleToVictim) * 0.5degrees )
        static 
Float:fVicSize[3]
        
pev(iVictimpev_size fVicSize)
        if ( 
fDis <= fVicSize[0] * 0.5 )
        {
            
// TraceLine from fStart to aimOrigin in iVictim
            
static ptr2ptr2 create_tr2() 
            
engfunc(EngFunc_TraceLinefStartfAimInVictimDONT_IGNORE_MONSTERSiAttackerptr2)
            static 
pHit2pHit2 get_tr2(ptr2TR_pHit)
            static 
iHitgroup2iHitgroup2 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
            
            
static ptr3ptr3 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)

    
// ExecuteHam
    
fake_trake_attack(iAttackeriVictimfDamagefDirectionptr)
    
    
// free ptr
    
free_tr2(ptr)
}

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

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

stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize 0.0)
{
    static 
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)
    
    static 
Float:fV2[3]
    
xs_vec_sub(fTargetfOriginfV2)
    
    static 
iResultiResult get_angle_between_vectors(fV1fV2)
    
    if (
TargetSize 0.0)
    {
        static 
Float:fTanfTan TargetSize get_distance_f(fOriginfTarget)
        static 
fAngleToTargetSizefAngleToTargetSize floatroundfloatatan(fTandegrees) )
        
iResult -= (iResult 0) ? fAngleToTargetSize : -fAngleToTargetSize
    
}
    
    return 
iResult
}

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

stock PlaySound(id, const sound[])
{
    if(
equal(sound[strlen(sound)-4], ".mp3")) client_cmd(id"mp3 play ^"sound/%s^""sound)
    else 
client_cmd(id"spk ^"%s^""sound)
}

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]
    static 
Float:numnum 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;
}

stock set_weapons_timeidle(idWeaponId ,Float:TimeIdle)
{
    static 
entwpnentwpn fm_get_user_weapon_entity(idWeaponId)
    if(!
pev_valid(entwpn)) 
        return
        
    
set_pdata_float(entwpn46TimeIdle4)
    
set_pdata_float(entwpn47TimeIdle4)
    
set_pdata_float(entwpn48TimeIdle 0.54)
}

stock set_player_nextattack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

stock set_weapon_anim(idanim)
{
    
set_pev(idpev_weaponanimanim)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, {000}, id)
    
write_byte(anim)
    
write_byte(pev(idpev_body))
    
message_end()
}

stock get_position(id,Float:forwFloat:rightFloat:upFloat:vStart[])
{
    static 
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

PHP Code:
public Entity_TakeDamage(const pEntity, const pInflictor, const pAttacker)
{
    static 
szClassName[sizeof NPC_CLASSNAME];
    
entity_get_string(pEntityEV_SZ_classnameszClassNamecharsmax(szClassName));
    if(!
equal(szClassNameNPC_CLASSNAME)) return;

    
entity_set_edict(pEntityEV_ENT_dmg_inflictorpAttacker);

I just can't think of a way. tried with native but failed. Any examples would be much appreciated.

Thanks in advance

Last edited by Point; 01-06-2019 at 19:24.
Point is offline
Reply



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 23:50.


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