tiantian1632472 发表于 2008-8-12 15:20:22

baili1258 发表于 2008-8-12 16:05:04

回复: 如何获取手雷,闪光弹,烟雾弹爆炸时的位置坐标

最好参照僵尸插件!
它有修改闪光弹和手雷,还有烟雾弹的效果...

tiantian1632472 发表于 2008-8-13 10:12:35

tiantian1632472 发表于 2008-8-16 01:21:02

jim_yang 发表于 2008-8-17 19:08:39

回复: 如何获取手雷,闪光弹,烟雾弹爆炸时的位置坐标

只会传统方式

void C_EmitSound(edict_t *e, int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch)
{
if(FNullEnt(e) || ENTINDEX(e) <= gpGlobals->maxClients)
RETURN_META(MRES_IGNORED);
if((g_grenade & NADE_FB) && sample == 'w' && sample == 'f' && sample == 'l') //flashbang exploded
{

hook FM_EmitSound, 然后判断是否是相关雷爆炸时的声音文件
然后e->v.origin就行了
fakemeta用pev(e, pev_origin, origin)

7848838 发表于 2011-10-7 20:18:56

最好参照僵尸插件!
它有修改闪光弹和手雷,还有烟雾弹的效果...

小猫咪 发表于 2011-12-15 20:42:50

不懂不懂、、

nopain 发表于 2012-3-9 00:09:59


//以捕捉闪光爆炸时位置为例

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

....
//闪光爆炸时所使用的声音文件名
new const FLASHSOUND[]=
{
        "weapons/flashbang-1.wav",
        "weapons/flashbang-2.wav"
}


public plugin_init()
{
....
        //HOOK闪光、烟雾...爆炸时产生的声音事件
        register_forward(FM_EmitSound, "fw_FM_EmitSound")
....
}

public fw_FM_EmitSound(entity, channel, const sample[], Float:volume, Float:attenuation, fFlags, pitch)
{
        // 如果不是闪光声音事件则直接返回
        if(!equali(sample, FLASHSOUND) && !equali(sample, FLASHSOUND))
                return FMRES_IGNORED
        // 如果是闪光爆炸的声音,说明此时有闪光爆炸了,而entity就是爆炸的那个闪光弹
        dowith(entity)
        .....
}

public dowith(entity)
{
        static Float:fVelocity
       
        //取它的坐标
        pev(entity, pev_origin, fVelocity)
       
        client_print(0,print_chat, "闪光弹的坐标是:%fx %fy %fz", fVelocity,fVelocity,fVelocity)
        ........
}jim_yang大大已经说得很清楚了,我用代码说明一下:
页: [1]
查看完整版本: 如何获取手雷,闪光弹,烟雾弹爆炸时的位置坐标