AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   [ HELP ] Work with grenades? (https://forums.alliedmods.net/showthread.php?t=294154)

CrazY. 02-21-2017 07:07

[ HELP ] Work with grenades?
 
Hey flashkit, how long time!

Is there any simple code for demonstration of how do I work with the grenades? For example, the player type nade, and a grenade is launched automatically.

Thanks!

Craxor 02-21-2017 07:18

Re: [ HELP ] Wirk wuth grenades?
 
a grenade is launched automatcly?


Idk exactly how to create a grenade launcher but you can check if user has in hand right now a hegrenade and do
engclient_cmd ...

edon1337 02-21-2017 07:34

Re: [ HELP ] Wirk wuth grenades?
 
pev_dmgtime

CrazY. 02-21-2017 07:53

Re: [ HELP ] Work with grenades?
 
I will test it, after I tell the results.

edon1337 02-21-2017 08:08

Re: [ HELP ] Work with grenades?
 
If you're wanting to change the explode time then pev_dmgtime can do that, otherwise you need to explain.

CrazY. 02-21-2017 08:16

Re: [ HELP ] Work with grenades?
 
Well, I'm going to be more direct, you don't have to be exactly what I quoted above, how about, throw a grenade instead of bullets?

yas17sin 02-21-2017 08:47

Re: [ HELP ] Work with grenades?
 
try to take something from this if there is something can help this weapon throw gernades it's called milkor :
PHP Code:

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
 
#define ENG_NULLENT             -1
#define EV_INT_WEAPONKEY        EV_INT_impulse
#define m32_WEAPONKEY     91421

new const GRENADE_MODEL[] = "models/grenade.mdl"
new in_zoom[33]
new 
g_reload[33]
// Sprites
new const GRENADE_TRAIL[] = "sprites/laserbeam.spr"
new const GRENADE_EXPLOSION[] = "sprites/zerogxplode.spr"
new sTrailsExplo
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_P90)|(1<<CSW_SG550)|(1<<CSW_P90)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_P90)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_M3)|(1<<CSW_P90)|(1<<CSW_AK47)|(1<<CSW_P90)

new const 
Fire_Sounds[][] = { "weapons/m32-1.wav" }

new 
gmsgWeaponList
new m32_V_MODEL[64] = "models/v_m32.mdl"
new m32_P_MODEL[64] = "models/p_m32.mdl"
new m32_W_MODEL[64] = "models/w_m32.mdl"

new cvar_clip_m32cvar_m32_ammo,cvar_dmg
new g_has_m32[33]
new 
g_MaxPlayersg_orig_event_m32
public plugin_init()
{
    
register_plugin("M32""2.7""Milkor")
    
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
    
register_event("CurWeapon","CurrentWeapon","be","1=1")
    
RegisterHam(Ham_Item_AddToPlayer"weapon_m3""m32AddToPlayer")
    
register_forward(FM_CmdStart"fw_CmdStart")
    
RegisterHamHam_Weapon_PrimaryAttack"weapon_m3""fw_attack" )
    
RegisterHamHam_Weapon_PrimaryAttack"weapon_m3""fw_attackp")
    
RegisterHam(Ham_Item_Deploy,"weapon_m3""fw_Item_Deploy_Post"1)
    
RegisterHam(Ham_Weapon_Reload"weapon_m3""fw_r")
    
RegisterHam(Ham_Weapon_Reload"weapon_m3""fw_reload" )
    
register_forward(FM_SetModel"modelka")
    
register_forward(FM_UpdateClientData"client_data_post"1)
    
register_forward(FM_PlaybackEvent"PlaybackEvent")
    
    
cvar_clip_m32 register_cvar("m32_clip""6")
    
cvar_m32_ammo register_cvar("m32_ammo""18")
    
cvar_dmg register_cvar("m32_dmg","600.0")
    
    
//register_clcmd("buyammo1", "clcmd_buyammo")
    //register_clcmd("buyammo2", "clcmd_buyammo")
    
    
register_clcmd("get_milkor""give_m32")
    
register_clcmd("say /milkor""give_m32")
    
    
gmsgWeaponList get_user_msgid("WeaponList")
    
g_MaxPlayers get_maxplayers()
}
 
public 
plugin_precache()
{
    
precache_model(m32_V_MODEL)
    
precache_model(m32_P_MODEL)
    
precache_model(m32_W_MODEL)
    
precache_model(GRENADE_MODEL)
    
sTrail precache_model(GRENADE_TRAIL)
    
sExplo precache_model(GRENADE_EXPLOSION)
    
precache_sound("weapons/m32_after_reload.wav")
    
precache_sound("weapons/m32_insert.wav")
    
precache_sound("weapons/m32_start_reload.wav")
    
precache_sound(Fire_Sounds[0])    
    
precache_generic"sprites/weapon_m32.txt" )
    
precache_generic"sprites/zp_cso/640hud75.spr" )
    
precache_generic"sprites/zp_cso/640hud7x.spr" )
    
precache_generic"sprites/zp_cso/scope_grenade.spr" )

    
register_clcmd("weapon_m32""Hook_Select")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
}


public 
Hook_Select(id)
{
    
engclient_cmd(id"weapon_m3")
    return 
PLUGIN_HANDLED
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event_m32 get_orig_retval()
        return 
FMRES_HANDLED
    
}
    
    return 
FMRES_IGNORED
}


/*public clcmd_buyammo(id)
{
    // Not alive or infinite ammo setting enabled
    if (!is_user_alive(id) || !user_has_weapon(id,CSW_M3) || !g_has_m32[id])
        return PLUGIN_CONTINUE
    
    
    
    if (zp_get_user_ammo_packs(id) < 1)
    {
        client_print(id,print_chat,"You need 1 ammo")
        return PLUGIN_CONTINUE
    }
    
    // Get user weapons
    static  currentammo, refilled
    refilled = false
    if(cs_get_user_bpammo(id,CSW_M3)>=18)
    return PLUGIN_HANDLED
            
    // Give additional ammo
    ExecuteHamB(Ham_GiveAmmo, id, 6, "buckshot", 18)
    // Check whether we actually refilled the weapon's ammo
    if (cs_get_user_bpammo(id, CSW_M3) - currentammo > 0) refilled = true
    
    // Weapons already have full ammo
    if (!refilled) return PLUGIN_CONTINUE
    
    // Deduce ammo packs, play clip purchase sound, and notify player
    zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id)-1)
    emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    
    return PLUGIN_CONTINUE
}*/
 
public modelka(entitymodel[])
{
    if(!
is_valid_ent(entity))
        return 
FMRES_IGNORED;
    
    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))
    
    if(!
equal(szClassName"weaponbox"))
        return 
FMRES_IGNORED;
    
    static 
iOwner
    iOwner 
entity_get_edict(entityEV_ENT_owner)
    
    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredAugID
        iStoredAugID 
find_ent_by_owner(-1"weapon_m3"entity)
        
        if(!
is_valid_ent(iStoredAugID))
            return 
FMRES_IGNORED;
        
        if(
g_has_m32[iOwner])
        {
            
entity_set_int(iStoredAugIDEV_INT_impulse91421)
            
g_has_m32[iOwner] = false
            g_reload
[iOwner]=0
            
if(in_zoom[iOwner]){
            
set_zoom(iOwner,0)
            return 
PLUGIN_CONTINUE
        
}
            
entity_set_model(entitym32_W_MODEL)
            
            return 
FMRES_SUPERCEDE;
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
Sprite(id,type)
{
    
    
message_begin(MSG_ONEgmsgWeaponList, {0,0,0}, id)
    
write_string(type?"weapon_m32":"weapon_m3")
    
write_byte(5)
    
write_byte(32)
    
write_byte(-1)
    
write_byte(-1)
    
write_byte(0)
    
write_byte(5)
    
write_byte(21)
    
write_byte(0)
    
message_end()
}

public 
give_m32(id)
{
    
drop_weapons(id1)
    new 
iWep2 give_item(id,"weapon_m3")
    if( 
iWep2 )
    {
        
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip_m32))
        
cs_set_user_bpammo (idCSW_M3get_pcvar_num(cvar_m32_ammo))
    }

    if(
in_zoom[id])
    { 
        
cs_set_user_zoom(idCS_RESET_ZOOM1)
        
in_zoom[id] = 0
    
}
    
Sprite(id,1)
    
set_zoom(id,0)
    
g_reload[id]=0
    g_has_m32
[id] = true
}
 
public 
m32AddToPlayer(m32id)
{
    if(!
is_valid_ent(m32) || !is_user_connected(id)) return HAM_IGNORED
        
    
if(entity_get_int(m32EV_INT_WEAPONKEY) == m32_WEAPONKEY)
    {
        
g_has_m32[id] = true
        g_reload
[id]=0
        set_zoom
(id,0)
        
entity_set_int(m32EV_INT_WEAPONKEY0)
        
Sprite(id,1)
        return 
HAM_HANDLED
    
}
    if(
entity_get_int(m32EV_INT_WEAPONKEY) != m32_WEAPONKEYSprite(id,0)
    
    return 
HAM_IGNORED
}
 
public 
fw_Item_Deploy_Post(weapon_ent)
{
    new 
owner
    owner 
pev(weapon_ent,pev_owner)
    if(
is_user_alive(owner) && get_user_weapon(owner) == CSW_M3)
    {
        
set_zoom(owner,0)
    }
    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)
    if(
is_user_alive(owner))
    
replace_weapon_models(ownerweaponid)
}

public 
CurrentWeapon(id)
{
    if( 
read_data(2) != CSW_M3 ) {
        if( 
g_reload[id] ) {
            
g_reload[id] = false
            remove_task
id 1331 )
        }
    }
    
replace_weapon_models(idread_data(2))
    
remove_task(id)

 
replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_M3:
        {
            if(
g_has_m32[id] && is_user_alive(id))
            {

                
set_pev(idpev_viewmodel2m32_V_MODEL)
                
set_pev(idpev_weaponmodel2m32_P_MODEL)
            }
        }
    }
}
 
public 
client_data_post(PlayerSendWeaponsCD_Handle)
{
    if(!
is_user_alive(Player) || (get_user_weapon(Player) != CSW_M3) || !g_has_m32[Player]) return FMRES_IGNORED
        
    set_cd
(CD_HandleCD_flNextAttackhalflife_time () + 0.00001)
    return 
FMRES_HANDLED
}

public 
fw_CmdStart(iduc_handleseed
{
    new 
ammoclipweapon get_user_weapon(idclipammo)
    if (!
g_has_m32[id] || weapon != CSW_M3 || !is_user_alive(id))
        return

    if(( 
get_ucuc_handleUC_Buttons ) & IN_ATTACK2 ) && !( pevidpev_oldbuttons ) & IN_ATTACK2 )) {
        if(!
in_zoom[id] && !g_reload[id]) set_zoom(id,1)
        else 
set_zoom(id,0)
    }
}

public 
fw_attackwpn ) {
    if( 
g_has_m32pevwpnpev_owner ) ] ) return HAM_SUPERCEDE
    
return HAM_IGNORED
}

public 
fw_attackpwpn ) {
    new 
id pevwpnpev_owner ), clipbpammo
    get_user_weapon
idclipbpammo )
    if( 
g_has_m32id ] ) {
        if( 
clip ) {
            if( 
g_reload[id] ) {
                
UTIL_PlayWeaponAnimationid)
                
set_pdata_floatid831.0 )
                
remove_taskid 1331 )
                
g_reload[id] = false
                
return
            }

            
UTIL_PlayWeaponAnimation(id,random_num(1,2))
            
emit_soundidCHAN_WEAPONFire_Sounds[0], 1.0ATTN_NORM0PITCH_NORM )
            
FireGrenadeid )
            
MakeRecoilid )

            
set_pdata_floatid830.6 )
        }
    }
}

public 
MakeRecoil(id)
{
    if(!
is_user_alive(id))
        return;

    if(!
g_has_m32[id])
        return;

    static 
Float:punchAngle[3];
    
punchAngle[0] = float(random_num(-400400)) / 100.0;
    
punchAngle[1] = float(random_num(-700700)) / 100.0;
    
punchAngle[2] = 0.0;
    
set_pev(idpev_punchanglepunchAngle);
}

public 
FireGrenade(id)
{
    new 
ammoclip
    get_user_weapon
(idclipammo)
    static 
wep
    wep 
find_ent_by_owner(-1"weapon_m3"id)
    
cs_set_weapon_ammo(wep,clip-1)
    new 
Float:origin[3],Float:velocity[3],Float:angles[3]
    
engfunc(EngFunc_GetAttachmentid0origin,angles)
    
pev(id,pev_angles,angles)
    new 
ent create_entity"info_target" 
    
set_peventpev_classname"m32_grenade" )
    
set_peventpev_solidSOLID_BBOX )
    
set_peventpev_movetypeMOVETYPE_TOSS )
    
set_peventpev_mins, { -0.1, -0.1, -0.1 } )
    
set_peventpev_maxs, { 0.10.10.1 } )
    
entity_set_modelentGRENADE_MODEL )
    
set_peventpev_originorigin )
    
set_peventpev_anglesangles )
    
set_peventpev_ownerid )
    
velocity_by_aimidin_zoom[id]? 1400 1000 velocity )
    
set_peventpev_velocityvelocity )
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// Temporary entity ID
    
write_short(ent// Entity
    
write_short(sTrail// Sprite index
    
write_byte(10// Life
    
write_byte(3// Line width
    
write_byte(255// Red
    
write_byte(255// Green
    
write_byte(255// Blue
    
write_byte(50// Alpha
    
message_end() 
    return 
PLUGIN_CONTINUE
}    



// We hit something!!!
public pfn_touch(ptrptd)
{
    
// If ent is valid
    
if (pev_valid(ptr))
    {    
        
// Get classnames
        
static classname[32]
        
pev(ptrpev_classnameclassname31)
        
        
// Our ent
        
if(equal(classname"m32_grenade"))
        {
            
// Get it's origin
            
new Float:originF[3]
            
pev(ptrpev_originoriginF)
            
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYoriginF0)
            
write_byte(TE_WORLDDECAL)
            
engfunc(EngFunc_WriteCoordoriginF[0])
            
engfunc(EngFunc_WriteCoordoriginF[1])
            
engfunc(EngFunc_WriteCoordoriginF[2])
            
write_byte(engfunc(EngFunc_DecalIndex,"{scorch3"))
            
message_end()
            
// Draw explosion
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(TE_EXPLOSION// Temporary entity ID
            
engfunc(EngFunc_WriteCoordoriginF[0]) // engfunc because float
            
engfunc(EngFunc_WriteCoordoriginF[1])
            
engfunc(EngFunc_WriteCoordoriginF[2]+30.0)
            
write_short(sExplo// Sprite index
            
write_byte(25// Scale
            
write_byte(35// Framerate
            
write_byte(0// Flags
            
message_end()
            
            
// Get owner
            
new owner pev(ptrpev_owner)
            
// Alive...
            
new FM_NULLENT
            
// Get distance between victim and epicenter
            
while((find_ent_in_sphere(a,originF,300.0)) != 0) {
                if( 
a!=owner&& a!=ptr&&pev(a,pev_takedamage)!=DAMAGE_NOExecuteHamBHam_TakeDamage,owner ,owner,  get_pcvar_float(cvar_dmg), DMG_BULLET )
                
set_pev(ptrpev_flagsFL_KILLME)
            }
        }
    }
        
}    
 
public 
PlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event_m32)) return FMRES_IGNORED
    
if (!(<= invoker <= g_MaxPlayers)) return FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}


public 
message_DeathMsg(msg_idmsg_destid)
{
    static 
szTruncatedWeapon[33], iAttackeriVictim
        
    get_msg_arg_string
(4szTruncatedWeaponcharsmax(szTruncatedWeapon))
        
    
iAttacker get_msg_arg_int(1)
    
iVictim get_msg_arg_int(2)
        
    if(!
is_user_connected(iAttacker) || iAttacker == iVictim) return PLUGIN_CONTINUE
        
    
if(get_user_weapon(iAttacker) == CSW_M3)
    {
        if(
g_has_m32[iAttacker])
            
set_msg_arg_string(4"grenade")
    }
                
    return 
PLUGIN_CONTINUE
}
 
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
    
set_pev(Playerpev_weaponanimSequence)
        
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(2)
    
message_end()
}

 
public 
fw_rwpn ) {
    if( 
g_has_m32pevwpnpev_owner ) ] ) {
        
fw_reloadwpn )
        return 
HAM_SUPERCEDE
    
}
    return 
HAM_IGNORED
}

public 
fw_reload(weapon) {
    new 
id pevweaponpev_owner )
    new 
clipbpammo
    get_user_weapon
(idclipbpammo )
    if( 
g_has_m32id ] && clip && bpammo ) {
        if(!
task_existsid+1331 )) set_task0.1"reload"id+1331 )
        }
    if(
in_zoom[id])
    {
        
cs_set_user_zoom(idCS_RESET_ZOOM1)
        
in_zoom[id] = 0
    
}
    return 
HAM_IGNORED
}

public 
reloadid ) {
    
id -= 1331
    
new clipbpammoweapon find_ent_by_owner( -1"weapon_m3"id )
    
get_user_weapon(idclipbpammo )
    if(!
g_reload[id]) {
            
set_zoom(id,0)
            
UTIL_PlayWeaponAnimationid)
            
g_reloadid ] = 1
            set_pdata_float
id831.0)
            
set_task1.0"reload"id+1331 )
            return
    }

    if(
in_zoom[id])
    {
        
cs_set_user_zoom(idCS_RESET_ZOOM1)
        
in_zoom[id] = 0
    
}
    
    if( 
clip || bpammo ) {
        
UTIL_PlayWeaponAnimationid)
        
g_reloadid ] = 0
        set_pdata_float
id831.5)
        return
    }
    
cs_set_user_bpammoidCSW_M3bpammo )
    
cs_set_weapon_ammoweaponclip )
    
set_pdata_floatid831.0)
    
UTIL_PlayWeaponAnimationid)
    
set_task1.0"reload"id+1331 )
}
 
stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)
    
    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)
        }
    }
}

stock set_zoom(index,type){
    if(
type==0){
        if(
in_zoom[index]==1){
            
cs_set_user_zoom(indexCS_SET_AUGSG552_ZOOM1)

            
in_zoom[index]=0
            emit_sound
indexCHAN_ITEM"weapons/zoom.wav"0.202.400100 )
        }
    }
    if(
type==1){
        if(
in_zoom[index]==0){
            
cs_set_user_zoom(indexCS_RESET_ZOOM1)

            
in_zoom[index]=1
            emit_sound
indexCHAN_ITEM"weapons/zoom.wav"0.202.400100 )
        }
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/ 


HamletEagle 02-21-2017 11:49

Re: [ HELP ] Work with grenades?
 
https://forums.alliedmods.net/showpo...7&postcount=55
That's the best and proper way to do what you are asking. The key part is to call grenade launch function. What I did is to redo the game grenade throw code and apply it to a weapon.

CrazY. 02-21-2017 17:17

Re: [ HELP ] Work with grenades?
 
Hey HamletEagle, as always, wise and with great recommendations, thanks again, I will study your code and make necessary modifications, when I finish give the answer if I can or not.

Depresie 02-22-2017 18:27

Re: [ HELP ] Work with grenades?
 
You could also detect grenade launching using FM_SetModel, check there for w_grenade model then check the classname of the entity not to be a weaponbox

PHP Code:

register_forward(FM_SetModel"fw_SetModel")

public 
fw_SetModel(iEntity, const szModel[])
{
    if(!
pev_valid(iEntity))
        return 
FMRES_IGNORED

    
if(strlen(szModel) < 8)
        return 
FMRES_IGNORED

    
if(szModel[7] != 'w' || szModel[8] != '_')
        return 
FMRES_IGNORED

    
if(equal(szModel"models/w_weaponbox.mdl"))
        return 
FMRES_IGNORED

    
static szClass[32]

    
entity_get_string(iEntityEV_SZ_classnameszClasscharsmax(szClass))

    if(!
equal(szClass"weaponbox"))
        return 
FMRES_IGNORED
        
        
// Grenade launched ( you can check for model to get what type of grenade it is, ex w_flashbang, w_smokegrenade, w_hegrenade 



All times are GMT -4. The time now is 20:42.

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