注册 登录
MOD中国同盟社 返回首页

编程爱好者 http://www.modchina.com/?25792 [收藏] [复制] [分享] [RSS] 空间主要记录一些AMXX代码

日志

真的没有办法block BOT射击时的枪声吗?

热度 5已有 1156 次阅读2011-2-3 19:56 |个人分类:AMXX日记

set_cd(cd_handel,CD_ID,0) 只能block 自己的射击声,别人还是会听到的…… register_forward(FM_UpdateClientData,"fwd_UpdateClientData",1) 
public fwd_UpdateClientData(id,sendweapons,cd_handle) 
{
 new ammo,clip,weapon=get_user_weapon(id,clip,ammo) 
if(weapon!=CSW_M3) return FMRES_IGNORED 
set_cd(cd_handel,CD_ID,0) return FMRES_HANDLED 
}
 //^^^^^^^^^^^^^^^^^^^^^^^^ 记录工作过程中查找过的代码 
…………………………………… 
const m_flNextPrimaryAttack = 46 
const m_flNextAttack = 83 
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m3", "FireGrenade", 1) 
public FireGrenade(ent) 
new pPlayer = get_pdata_cbase( ent, 41, 4 ) 
//set_pdata_float( ent, 46, 9999.0, 4 ) // 不清楚作用 
set_pdata_float( pPlayer, 83, 9999.0 ) // 只能射击一次 } 
…………………………………………
register_forward(FM_EmitSound, "fwd_BlockSound") //这样也不能获取BOT的开枪声音 
public fwd_BlockSound(ent, iChannel, const szSample[], Float:fVolume, Float:fAttenuation, iFlags, iPitch) 
client_print(0, print_chat, "ent %d chan %d sam %s flags %d pitch %d", ent, iChannel, szSample, iFlags, iPitch); 
 return FMRES_SUPERCEDE; 
}
 ………………………………………… 
register_forward(FM_PlaybackEvent, "fwd_PlaybackEvent"); // 看来这个forward能帮得上忙 
public fwd_PlaybackEvent(flags, invoker, eventindex, delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam1, bparam2) 
 client_print(0, print_chat, "Playback flags %d invoker %d index %d %f %f %d %d %d %d", flags, invoker, eventindex, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2); 
 return FMRES_SUPERCEDE; 
}
3

路过

鸡蛋
1

鲜花

握手

雷人

刚表态过的朋友 (4 人)

收藏 分享 转发到开心网 举报

发表评论 评论 (10 个评论)

回复 szfzafa 2011-2-5 11:14
https://forums.alliedmods.net/showthread.php?t=135878

const m_flNextPrimaryAttack = 46
const m_flNextAttack = 83
下次攻击的间隔时间 从HLSDK的代码中见过player有这样的变量 如此设置是屏蔽按住左键连射

前兩段結合使用的確有效。set_cd那個屏蔽了槍械的射擊聲,但也屏蔽了v模動畫;FM_EmitSound則屏蔽刀砍聲。zbot,YaPB都測試過。
回复 Robert 2011-4-28 17:37
枪声音来自 Client 你是屏蔽不掉的,屏蔽掉的话,武器动画和弹痕粒子还有血一块屏蔽消失。

set_cd(cd_handel,CD_ID,0) 不如 set_cd(x, CD_iuser3, 0)。
set_cd(cd_handel,CD_ID,0) 的刀子会变反, 即使你纠正了刀子也会出 BUG。
回复 p5248891 2011-4-28 17:55
Robert: 枪声音来自 Client 你是屏蔽不掉的,屏蔽掉的话,武器动画和弹痕粒子还有血一块屏蔽消失。

set_cd(cd_handel,CD_ID,0) 不如 set_cd(x, CD_iuser3, 0)。
set_cd( ...
register_forward(FM_PlaybackEvent, "fwd_PlaybackEvent"); // 看来这个forward能帮得上忙
public fwd_PlaybackEvent(flags, invoker, eventindex, delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2, bparam1, bparam2)
{
client_print(0, print_chat, "Playback flags %d invoker %d index %d %f %f %d %d %d %d", flags, invoker, eventindex, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2);
return FMRES_SUPERCEDE;
}
client_print把eventindex事件列出来,查找开枪声音的事件eventindex后就可以屏蔽啊~我当初是用这个方法的~后来项目文件居然丢了(心血),就再也没研究AMXX
回复 Robert 2011-4-28 18:10
那个也帮不上,早以试过。
触发 Client 武器开枪的我一直没找到,不知道是不是 GetWeaponData 事件。
反正 AMXX 没提供。只能试 Metamod 去写了,不过即使屏蔽掉了也没办法只屏蔽开枪声音。而且 PlayBackEvent 在 CS1.6 里开枪根本没发挥什么用,打断也是一样的。

开枪声音 Client 在 Client 无须缓存。MP 你把开枪的 PrecacheSound 打断掉也一样播放……
回复 Robert 2011-4-28 18:17
这渣网速,刚才白打了一大堆字。  
简单重复下刚才说的吧。 PlaybackEvent 在 CS1.6 的武器开枪里不启任何作用。
屏蔽掉也是一样。
回复 p5248891 2011-4-28 19:06
Robert: 这渣网速,刚才白打了一大堆字。   
简单重复下刚才说的吧。 PlaybackEvent 在 CS1.6 的武器开枪里不启任何作用。
屏蔽掉也是一样。 ...
set_cd屏蔽自己开枪声音,PlaybackEvent屏蔽别人,但我的确用PlaybackEvent屏蔽过bot的开枪声音呀、那时我记得bot放炸弹时的dddd...声都能屏蔽,可惜我没源文件。
PS.你那一大堆字,没白打。
回复 Robert 2011-4-28 19:39
哦,谢谢了,没注意到多人游戏的那个是管啥用的。
当时我也是单人测试的。总之自己开枪的声音肯定是屏蔽不掉的。
http://u.115.com/file/f087e44747 (Aliedmodder 的 ASK 反编译的部分代码.)
回复 Robert 2011-4-28 19:41
set_pdata_float( m_flNextAttack 不要乱修改 Offset,会影响游戏的。
这个 Offset 传给 Client 时经过 UpdateClientData, 直接 set_cd( 即可。
回复 p5248891 2011-4-28 21:19
Robert: set_pdata_float( m_flNextAttack 不要乱修改 Offset,会影响游戏的。
这个 Offset 传给 Client 时经过 UpdateClientData, 直接 set_cd( 即可。 ...
你意思是只屏蔽自己开枪声音是不能吧,嗳,这个是CS武器定义的实现、~或许我以后能用到,谢谢。
回复 Robert 2011-4-28 21:24
不能,武器代码是在 Client 和 MP 共享的,自己研究下 HLSDK 就知道了。
但哪个是共享使用判断怎么开枪的我倒不知道。反正怎么屏蔽都无法把 Client 的开枪声音单独屏蔽掉。

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

回顶部