设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 798|回复: 2

[求助] 【求助】这句代码改不了武器声音 [复制链接]

Rank: 3Rank: 3

帖子
127
精华
0
声望
453 点
金币
121 Mold
被赞许
3 次
注册时间
2009-3-22
发表于 2011-6-18 16:42:26 |显示全部楼层
/* 本插件由 AMXX-Studio 中文版自动生成*/
/* UTF-8 func by www.DT-Club.net */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <cstrike>

#define PLUGIN_NAME        "New Plug-In"
#define PLUGIN_VERSION        "1.0"
#define PLUGIN_AUTHOR        "Administrator"

new const old_sounds[][] = {"weapons/m249_boxin.wav","weapons/m249_boxout.wav","weapons/m249_chain.wav","weapons/m249_coverdown.wav","weapons/m249_coverup.wav","weapons/m249-1.wav","weapons/m249-2.wav"}
new const new_sounds[][] = {"YingHe/m249ex_clipin1.wav","YingHe/m249ex_clipout1.wav","YingHe/m249ex_clipin3.wav","YingHe/m249ex_clipin2.wav","YingHe/m249ex_clipout2.wav","YingHe/m249ex_shoot1.wav","YingHe/m249ex-1.wav"}

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

        register_forward(FM_EmitSound,"Sound_Hook")
}

public plugin_precache()
{
        static i
        for( i = 0; i < sizeof( new_sounds ); i++)
                precache_sound( new_sounds[i])
}

public Sound_Hook(id,channel,sample[])
{
        if(!is_user_alive(id))
        {
                return FMRES_IGNORED
        }
       
                static i
                for(i=0 ;i < sizeof( old_sounds );i++ )
                {

                        if(equali(sample,old_sounds[i]))
                        {        
                                        engfunc(EngFunc_EmitSound,id,CHAN_WEAPON,new_sounds[i],1.0,ATTN_NORM,0,PITCH_NORM)
                                        return FMRES_SUPERCEDE
                        }
                }
       
        return FMRES_IGNORED
}

这是从魔怪额文件摘抄下来引用的,不知道为什么总是没用

使用道具 举报

Rank: 1

帖子
2
精华
0
声望
8 点
金币
2 Mold
被赞许
0 次
注册时间
2011-6-18
发表于 2011-6-18 16:46:33 |显示全部楼层
等待答案!高手快来!

使用道具 举报

Rank: 3Rank: 3

帖子
96
精华
0
声望
446 点
金币
481 Mold
被赞许
6 次
注册时间
2010-7-4
发表于 2011-6-18 18:38:52 |显示全部楼层
本帖最后由 Robert 于 2011-6-19 14:16 编辑

除了开枪,其他声音是经过引擎播放模型动作后播放的声音。
也是没办法调用 Server 的 EmitSound.

下面是抹掉开枪声音的方法。
想抹掉所有声音,不频繁发送武器通道的空声音是不行了。(浪费,容易崩溃)
只能抹,不能替换。

开枪声音是没办法从 Server 部分抹掉的, 因为他是由 Client 等待你按键自动执行的.
根本不会调用 Server 的 EmitSound. 所以只能在 Client 执行后, 在发送相同通道的空声音即可.
不知道以下代码会不会有 BUG, 但确实抹掉了开枪声音.

To...
  1. // Player Offset (+5)
  2. const m_pActiveItem = 373

  3. // Player Vars
  4. new g_iPlayerAttacking[33]
  5. new g_iPlayerClearSound[33]

  6. public plugin_init()
  7. {
  8.         register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
  9.         register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)

  10.         RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "fw_Weapon_PrimaryAttack")
  11.         RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "fw_Weapon_PrimaryAttack_Post", 1)
  12. }

  13. // 下面这句用于修复延迟过高, 将开枪转化成服务器触发客户端执行.
  14. public fw_PlaybackEvent(iFlags, iPlayer, iEvent, iDelay, Float:vecOrigin[3], Float:vecAngle[3], Float:flParam1, Float:flParam2, iParam1, iParam2, bParam1, bParam2)
  15. {
  16.         if (!g_iPlayerAttacking[iPlayer])
  17.                 return FMRES_IGNORED
  18.        
  19.         g_iPlayerClearSound[iPlayer] = 2 // 2 就是等待两次 UpdateClientData 后清理声音.
  20.        
  21.         // (1<<2) 就是全局发送 Event
  22.         engfunc(EngFunc_PlaybackEvent, (1<<2), iPlayer, iEvent, iDelay, vecOrigin, vecAngle, flParam1, flParam2, iParam1, iParam2, bParam1, bParam2)
  23.         return FMRES_SUPERCEDE
  24. }

  25. public fw_UpdateClientData_Post(iPlayer, iSendWeapon, CD_Handle)
  26. {
  27.         if (get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO)
  28.                 return
  29.                
  30.         new iEntity = get_pdata_cbase(iPlayer, m_pActiveItem)
  31.        
  32.         if (iEntity <= 0)
  33.                 return
  34.                
  35.         if (不是想消音的武器)
  36.                 return
  37.                
  38.         if (g_iPlayerClearSound[iPlayer])
  39.         {
  40.                 if (g_iPlayerClearSound[iPlayer] == 1) // 这两句用于消音
  41.                         engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, "common/null.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  42.                        
  43.                 g_iPlayerClearSound[iPlayer]--
  44.         }
  45.                
  46.         // 用于屏蔽 Client 的等待按键执行开枪的 Event
  47.         set_cd(CD_Handle, CD_iUser3, 0)
  48. }

  49. public fw_Weapon_PrimaryAttack(iEntity)
  50. {
  51.         if (不是想消音的武器)
  52.                 return
  53.                
  54.         g_iPlayerAttacking[pev(iEntity, pev_owner)] = 1
  55. }

  56. public fw_Weapon_PrimaryAttack_Post(iEntity)
  57. {
  58.         new iPlayer = pev(iEntity, pev_owner)
  59.        
  60.         if (!g_iPlayerAttacking[iPlayer])
  61.                 return
  62.                
  63.         g_iPlayerAttacking[iPlayer] = 0
  64. }
复制代码
以上是前段时间给别人写的抹掉 AWP 开枪声音的“部分代码”。
请在开枪后用非 CHAN_WEAPON 通道播放声音即可。

以后不要问问题了,谢谢。
没有能速度结贴的能力就请您不要在发求助帖了。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部