Raised This Month: $ Target: $400
 0% 

Solved Weapons in plugins (due to custom fire sounds)


Post New Thread Reply   
 
Thread Tools Display Modes
DJBosma
Member
Join Date: Dec 2009
Old 04-16-2020 , 07:57   Re: Custom sounds on weapon models in .qc file
Reply With Quote #11

Instead of opening a new thread, I am updating this one.

So I have re-compiled all models and am willing to understand a thing or two about the amxx part.

1. Which functions of reapi could be applied on this code.

2. What purpose does WEAPON_SECRETCODE serve?

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>

#define PLUGIN "amxx weapons"
#define VERSION "1.0"
#define AUTHOR "edo"

#define V_MODEL "models/v_mdl.mdl"
#define P_MODEL "models/p_mdl.mdl"
#define W_MODEL "models/w_mdl.mdl"

#define CSW_BASEDON CSW_P228
#define weapon_basedon "weapon_p228"

#define DAMAGE 10.0
#define CLIP 30
#define BPAMMO 180
#define SPEED 1.0
#define RECOIL 1.0
#define RELOAD_TIME 1.0

#define SHOOT_ANIM 0
#define DRAW_ANIM 0
#define RELOAD_ANIM 0


#define WEAPON_SECRETCODE 156851
#define WEAPON_EVENT "events/p228.sc"
#define OLD_W_MODEL "models/w_p228.mdl"
#define FIRE_SOUND "weapons/mdl-1.wav"



new g_Had_Weapong_Old_Weapon[33], Float:g_Recoil[33][3], g_Clip[33]
new 
g_weapon_eventg_ShellIdg_SmokePuff_SprId
new g_HamBotg_Msg_CurWeapon

// 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))

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_event("CurWeapon""Event_CurWeapon""be""1=1")
    
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)    
    
register_forward(FM_PlaybackEvent"fw_PlaybackEvent")    
    
register_forward(FM_SetModel"fw_SetModel")    
    
    
RegisterHam(Ham_TraceAttack"worldspawn""fw_TraceAttack_World")
    
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack_Player")
    
RegisterHam(Ham_Weapon_PrimaryAttackweapon_basedon"fw_Weapon_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackweapon_basedon"fw_Weapon_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_AddToPlayerweapon_basedon"fw_Item_AddToPlayer_Post"1)
    
RegisterHam(Ham_Weapon_Reloadweapon_basedon"fw_Weapon_Reload")
    
RegisterHam(Ham_Weapon_Reloadweapon_basedon"fw_Weapon_Reload_Post"1)
    
RegisterHam(Ham_Item_PostFrameweapon_basedon"fw_Item_PostFrame")        
    
    
g_Msg_CurWeapon get_user_msgid("CurWeapon")
    
register_clcmd("give_wpn""Get_Weapon")
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelV_MODEL)
    
engfunc(EngFunc_PrecacheModelP_MODEL)
    
engfunc(EngFunc_PrecacheModelW_MODEL)
    
engfunc(EngFunc_PrecacheSoundFIRE_SOUND)
    
    
g_SmokePuff_SprId engfunc(EngFunc_PrecacheModel"sprites/wall_puff1.spr")
    
g_ShellId engfunc(EngFunc_PrecacheModel"models/rshell.mdl")    
    
    
register_forward(FM_PrecacheEvent"fw_PrecacheEvent_Post"1)
    

}

public 
fw_PrecacheEvent_Post(type, const name[])
{
    if(
equal(WEAPON_EVENTname))
        
g_weapon_event get_orig_retval()        
}

public 
client_putinserver(id)
{
    if(!
g_HamBot && is_user_bot(id))
    {
        
g_HamBot 1
        set_task
(0.1"Do_RegisterHam"id)
    }
}

public 
Do_RegisterHam(id)
{
    
RegisterHamFromEntity(Ham_TraceAttackid"fw_TraceAttack_Player")    
}


public 
Get_Weapon(id)
{
    if(!
is_user_alive(id))
        return
        
    
Set_BitVar(g_Had_Weaponid)
    
fm_give_item(idweapon_basedon)    
    
    
// Set Ammo
    
static EntEnt fm_get_user_weapon_entity(idCSW_BASEDON)
    if(
pev_valid(Ent)) cs_set_weapon_ammo(EntCLIP)
    
    
cs_set_user_bpammo(idCSW_BASEDON,BPAMMO)
    
    
engfunc(EngFunc_MessageBeginMSG_ONE_UNRELIABLEg_Msg_CurWeapon, {000}, id)
    
write_byte(1)
    
write_byte(CSW_BASEDON)
    
write_byte(CLIP)
    
message_end()    
}

public 
Remove_Weapon(id)
{
    
UnSet_BitVar(g_Had_Weaponid)
}

public 
Event_CurWeapon(id)
{
    if(!
is_user_alive(id))
        return
    
    static 
CSWIDCSWID read_data(2)
    
    if((
CSWID == CSW_BASEDON && g_Old_Weapon[id] != CSW_BASEDON) && Get_BitVar(g_Had_Weaponid))
    {
        
set_pev(idpev_viewmodel2V_MODEL)
        
set_pev(idpev_weaponmodel2"")
        
        
set_weapon_anim(idDRAW_ANIM)
        
Draw_NewWeapon(idCSWID)
    } else if((
CSWID == CSW_BASEDON && g_Old_Weapon[id] == CSW_BASEDON) && Get_BitVar(g_Had_Weaponid)) {
        static 
EntEnt fm_get_user_weapon_entity(idCSW_BASEDON)
        if(!
pev_valid(Ent))
        {
            
g_Old_Weapon[id] = get_user_weapon(id)
            return
        }
        
        
set_pdata_float(Ent46get_pdata_float(Ent464) * SPEED4)
    } else if(
CSWID != CSW_BASEDON && g_Old_Weapon[id] == CSW_BASEDONDraw_NewWeapon(idCSWID)
    
    
g_Old_Weapon[id] = get_user_weapon(id)
}

public 
Draw_NewWeapon(idCSW_ID)
{
    if(
CSW_ID == CSW_BASEDON)
    {
        static 
ent
        ent 
fm_get_user_weapon_entity(idCSW_BASEDON)
        
        if(
pev_valid(ent) && Get_BitVar(g_Had_Weaponid))
        {
            
set_pev(entpev_effectspev(entpev_effects) &~ EF_NODRAW
            
engfunc(EngFunc_SetModelentP_MODEL)    
            
        }
    } else {
        static 
ent
        ent 
fm_get_user_weapon_entity(idCSW_BASEDON)
        
        if(
pev_valid(ent)) set_pev(entpev_effectspev(entpev_effects) | EF_NODRAW)             
    }
    
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
    if(!
is_user_alive(id))
        return 
FMRES_IGNORED    
    
if(get_user_weapon(id) == CSW_BASEDON && Get_BitVar(g_Had_Weaponid))
        
set_cd(cd_handleCD_flNextAttackget_gametime() + 0.001
    
    return 
FMRES_HANDLED
}

public 
fw_PlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if (!
is_user_connected(invoker))
        return 
FMRES_IGNORED    
    
if(get_user_weapon(invoker) != CSW_BASEDON || !Get_BitVar(g_Had_Weaponinvoker))
        return 
FMRES_IGNORED
    
if(eventid != g_weapon_event)
        return 
FMRES_IGNORED
    
    engfunc
(EngFunc_PlaybackEventflags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    
    
set_weapon_anim(invokerSHOOT_ANIM)
    
emit_sound(invokerCHAN_WEAPONFIRE_SOUNDVOL_NORMATTN_NORM0PITCH_NORM)
    
    
Eject_Shell(invokerg_ShellId0.0)
        
    return 
FMRES_SUPERCEDE
}

public 
fw_SetModel(entitymodel[])
{
    if(!
pev_valid(entity))
        return 
FMRES_IGNORED
    
    
static Classname[32]
    
pev(entitypev_classnameClassnamesizeof(Classname))
    
    if(!
equal(Classname"weaponbox"))
        return 
FMRES_IGNORED
    
    
static iOwner
    iOwner 
pev(entitypev_owner)
    
    if(
equal(modelOLD_W_MODEL))
    {
        static 
weaponweapon fm_find_ent_by_owner(-1weapon_basedonentity)
        
        if(!
pev_valid(weapon))
            return 
FMRES_IGNORED;
        
        if(
Get_BitVar(g_Had_WeaponiOwner))
        {
            
Remove_Weapon(iOwner)
            
            
set_pev(weaponpev_impulseWEAPON_SECRETCODE)
            
engfunc(EngFunc_SetModelentityW_MODEL)
            
            return 
FMRES_SUPERCEDE
        
}
    }

    return 
FMRES_IGNORED;
}

public 
fw_TraceAttack_World(VictimAttackerFloat:DamageFloat:Direction[3], PtrDamageBits)
{
    if(!
is_user_connected(Attacker))
        return 
HAM_IGNORED    
    
if(get_user_weapon(Attacker) != CSW_BASEDON || !Get_BitVar(g_Had_WeaponAttacker))
        return 
HAM_IGNORED
        
    
static Float:flEnd[3], Float:vecPlane[3]
    
    
get_tr2(PtrTR_vecEndPosflEnd)
    
get_tr2(PtrTR_vecPlaneNormalvecPlane)        
        
    
Make_BulletHole(AttackerflEndDamage)
    
Make_BulletSmoke(AttackerPtr)

    
SetHamParamFloat(3DAMAGE)
    
    return 
HAM_IGNORED
}

public 
fw_TraceAttack_Player(VictimAttackerFloat:DamageFloat:Direction[3], PtrDamageBits)
{
    if(!
is_user_connected(Attacker))
        return 
HAM_IGNORED    
    
if(get_user_weapon(Attacker) != CSW_BASEDON || !Get_BitVar(g_Had_WeaponAttacker))
        return 
HAM_IGNORED
        
    SetHamParamFloat
(3DAMAGE)

    return 
HAM_IGNORED
}

public 
fw_Weapon_PrimaryAttack(Ent)
{
    static 
idid pev(Entpev_owner)
    
pev(idpev_punchangleg_Recoil[id])
    
    return 
HAM_IGNORED
}

public 
fw_Weapon_PrimaryAttack_Post(Ent)
{
    static 
idid pev(Entpev_owner)
    
    if(
Get_BitVar(g_Had_Weaponid))
    {
        static 
Float:Push[3]
        
pev(idpev_punchanglePush)
        
xs_vec_sub(Pushg_Recoil[id], Push)
        
        
xs_vec_mul_scalar(PushRECOILPush)
        
xs_vec_add(Pushg_Recoil[id], Push)
        
set_pev(idpev_punchanglePush)
    }
}

public 
fw_Item_AddToPlayer_Post(entid)
{
    if(!
pev_valid(ent))
        return 
HAM_IGNORED
        
    
if(pev(entpev_impulse) == WEAPON_SECRETCODE)
    {
        
Set_BitVar(g_Had_Weaponid)
        
set_pev(entpev_impulse0)
    }        

    return 
HAM_HANDLED    
}

public 
fw_Item_PostFrame(ent)
{
    if(!
pev_valid(ent))
        return 
HAM_IGNORED
    
    
static id
    id 
pev(entpev_owner)
    
    if(
is_user_alive(id) && Get_BitVar(g_Had_Weaponid))
    {    
        static 
Float:flNextAttackflNextAttack get_pdata_float(id835)
        static 
bpammobpammo cs_get_user_bpammo(idCSW_BASEDON)
        static 
iClipiClip get_pdata_int(ent514)
        static 
fInReloadfInReload get_pdata_int(ent544)
        
        if(
fInReload && flNextAttack <= 0.0)
        {
            static 
temp1temp1 min(CLIP iClipbpammo)

            
set_pdata_int(ent51iClip temp14)
            
cs_set_user_bpammo(idCSW_BASEDONbpammo temp1)        
            
            
set_pdata_int(ent5404)
            
            
fInReload 0
        
}        
    }
    
    return 
HAM_IGNORED    
}

public 
fw_Weapon_Reload(ent)
{
    static 
idid pev(entpev_owner)
    if(!
is_user_alive(id))
        return 
HAM_IGNORED
    
if(!Get_BitVar(g_Had_Weaponid))
        return 
HAM_IGNORED
    
    g_Clip
[id] = -1
    
    
static bpammobpammo cs_get_user_bpammo(idCSW_BASEDON)
    static 
iClipiClip get_pdata_int(ent514)
    
    if(
bpammo <= 0) return HAM_SUPERCEDE
    
    
if(iClip >= CLIP) return HAM_SUPERCEDE        
        
    g_Clip
[id] = iClip

    
return HAM_HANDLED
}

public 
fw_Weapon_Reload_Post(ent)
{
    static 
idid pev(entpev_owner)
    if(!
is_user_alive(id))
        return 
HAM_IGNORED
    
if(!Get_BitVar(g_Had_Weaponid))
        return 
HAM_IGNORED

    
if (g_Clip[id] == -1)
        return 
HAM_IGNORED
    
    set_pdata_int
(ent51g_Clip[id], 4)
    
set_pdata_int(ent5414)
    
    
set_weapon_anim(idRELOAD_ANIM)
    
set_pdata_float(id83RELOAD_TIME5)

    return 
HAM_HANDLED
}

stock Make_BulletHole(idFloat:Origin[3], Float:Damage)
{
    
// Find target
    
static DecalDecal random_num(4145)
    static 
LoopTime
    
    if(
Damage 100.0LoopTime 2
    
else LoopTime 1
    
    
for(new 0LoopTimei++)
    {
        
// Put decal on "world" (a wall)
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_WORLDDECAL)
        
engfunc(EngFunc_WriteCoordOrigin[0])
        
engfunc(EngFunc_WriteCoordOrigin[1])
        
engfunc(EngFunc_WriteCoordOrigin[2])
        
write_byte(Decal)
        
message_end()
        
        
// Show sparcles
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_GUNSHOTDECAL)
        
engfunc(EngFunc_WriteCoordOrigin[0])
        
engfunc(EngFunc_WriteCoordOrigin[1])
        
engfunc(EngFunc_WriteCoordOrigin[2])
        
write_short(id)
        
write_byte(Decal)
        
message_end()
    }
}

public 
Make_BulletSmoke(idTrResult)
{
    static 
Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
    
    get_weapon_attachment
(idvecSrc)
    
global_get(glb_v_forwardvecEnd)
    
    
xs_vec_mul_scalar(vecEnd8192.0vecEnd)
    
xs_vec_add(vecSrcvecEndvecEnd)

    
get_tr2(TrResultTR_vecEndPosvecSrc)
    
get_tr2(TrResultTR_vecPlaneNormalvecEnd)
    
    
xs_vec_mul_scalar(vecEnd2.5vecEnd)
    
xs_vec_add(vecSrcvecEndvecEnd)
    
    
TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
    TE_FLAG 
|= TE_EXPLFLAG_NOSOUND
    TE_FLAG 
|= TE_EXPLFLAG_NOPARTICLES
    
    engfunc
(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYvecEnd0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordvecEnd[0])
    
engfunc(EngFunc_WriteCoordvecEnd[1])
    
engfunc(EngFunc_WriteCoordvecEnd[2] - 10.0)
    
write_short(g_SmokePuff_SprId)
    
write_byte(2)
    
write_byte(50)
    
write_byte(TE_FLAG)
    
message_end()
}


stock hook_ent2(entFloat:VicOrigin[3], Float:speedFloat:multitype)
{
    static 
Float:fl_Velocity[3]
    static 
Float:EntOrigin[3]
    static 
Float:EntVelocity[3]
    
    
pev(entpev_velocityEntVelocity)
    
pev(entpev_originEntOrigin)
    static 
Float:distance_f
    distance_f 
get_distance_f(EntOriginVicOrigin)
    
    static 
Float:fl_Timefl_Time distance_f speed
    
static Float:fl_Time2fl_Time2 distance_f / (speed multi)
    
    if(
type == 1)
    {
        
fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time2) * 1.5
        fl_Velocity
[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time2) * 1.5
        fl_Velocity
[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time        
    
} else if(type == 2) {
        
fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time2) * 1.5
        fl_Velocity
[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time2) * 1.5
        fl_Velocity
[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
    
}

    
xs_vec_add(EntVelocityfl_Velocityfl_Velocity)
    
set_pev(entpev_velocityfl_Velocity)
}

stock get_weapon_attachment(idFloat:output[3], Float:fDis 40.0)

    static 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3)  
    
IVecFVec(viEndvfEnd
    
    static 
Float:fOrigin[3], Float:fAngle[3]
    
    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)
    
    
xs_vec_add(fOriginfAnglefOrigin
    
    static 
Float:fAttack[3]
    
    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack
    
    static 
Float:fRate
    
    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)
    
    
xs_vec_add(fOriginfAttackoutput)
}

stock Eject_Shell(idShell_ModelIndexFloat:Time// By Dias
{
    static 
EntEnt get_pdata_cbase(id3735)
    if(!
pev_valid(Ent))
        return

        
set_pdata_int(Ent57Shell_ModelIndex4)
        
set_pdata_float(id111get_gametime() + Time)
}

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

DJBosma is offline
DJBosma
Member
Join Date: Dec 2009
Old 04-16-2020 , 11:50   Re: Weapons in plugins (due to custom fire sounds)
Reply With Quote #12

PS: Solved again.
DJBosma 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 05:26.


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