引用 | 编辑
z2352671213
2016-08-04 21:17 |
楼主
▼ |
||
x0
是这样的。我想把黄金AK47开枪的声音改成M3霰弹枪开枪的声音。 于是我在插件里这么写道(只是sma的一部分): 复制程式 new const Fire_Sounds[][] = { "weapons/m3-1.wav" } public plugin_init() { RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_scar_PrimaryAttack_Post", 1) } public fw_scar_PrimaryAttack_Post(Weapon) { new id = get_pdata_cbase(Weapon, 41, 4) new szClip, szAmmo get_user_weapon(id, szClip, szAmmo) if(!is_user_alive(id)) return if(g_HasAk[id] == true) //如果玩家持有黄金AK,g_HasAk[玩家索引] 就是true。 { if (!g_clip_ammo[id]) return emit_sound(id, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } } public plugin_precache() { for(new i = 0; i < sizeof Fire_Sounds; i++) precache_sound(Fire_Sounds[i]) } 然而,我进入游戏,用黄金AK47开枪,发现声音还是AK47的声音,完全没有变成M3的声音,请问大大们,这是为什么呢?或者,请问大大们,如何才能用AMXX修改武器(如AK)开枪的声音呢? x0
|
引用 | 编辑
z2352671213
2016-08-05 14:21 |
2楼
▲ ▼ |
引用 | 编辑
弑血
2016-08-05 19:16 |
3楼
▲ ▼ |
下面是引用 z2352671213 于 2016-08-05 14:21 发表的 : 复制程式 static Float:aimOrigin[3]; //设法取得最终子弹座标..这边看你要用traceattack去弄 还是..什么方法取 engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, aimOrigin, 0) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord,aimOrigin[0]) engfunc(EngFunc_WriteCoord,aimOrigin[1]) engfunc(EngFunc_WriteCoord,aimOrigin[2]) write_byte(random_num(41, 45)) //HL弹孔特有的spr排列 41-45是弹孔 message_end() engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, aimOrigin, 0) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord,aimOrigin[0]) engfunc(EngFunc_WriteCoord,aimOrigin[1]) engfunc(EngFunc_WriteCoord,aimOrigin[2]) write_short(attacker) //使用者 write_byte(random_num(41, 45)) // HL弹孔特有的spr排列 41-45是弹孔 message_end() x0 |
引用 | 编辑
z2352671213
2016-08-05 22:59 |
4楼
▲ ▼ |
下面是引用 s8720419 于 2016-08-05 19:16 发表的 : 大大,那个能把声音和弹孔都阻绝的东西,没办法阻绝子弹伤害。虽然开枪没有弹孔,但是被准星瞄准的人还是会受到子弹伤害,有没有办法把子弹伤害也隔绝掉?(像dias写的plasma gun那种枪那样,就把子弹伤害隔绝了,但是我没看懂他是怎么做到的。我试过 RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage"),但是这东西有时候会不起作用……他用的也不是注册ham_takadamage的方法)。 x0 |
引用 | 编辑
弑血
2016-08-05 23:11 |
5楼
▲ ▼ |
[hide=5]
下面是引用 z2352671213 于 2016-08-05 22:59 发表的 : 复制程式 //这个虽然注册再控制台有效,不过也是对玩家有用BOT是不行的.. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") 要用这段:↓ // 开场游戏登入时UI开始选单,选人物UI前的设定 public client_putinserver(id) { static classname[32], bool:debug pev(id, pev_classname, classname, charsmax(classname)) if(!equal(classname,"player") && !debug) { //主要是让非player以外的id套用此task..因为bot不接受player字串? 不知道为啥... set_task(1.0,"_Debug", id) //这边主要是阻绝效果 不要让他set_task过多.. debug = true } } //非玩家的ID注册完毕后..就可以执行fw_TakeDamage这段.. public _Debug(id) RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage") x0 |
引用 | 编辑
z2352671213
2016-08-06 21:38 |
6楼
▲ ▼ |
下面是引用 s8720419 于 2016-08-05 23:11 发表的 : 问题并没有解决。 因为那行 debug = true 的存在,所以插件编译出现了错误。我把那行删掉后,插件就能编译了,但是fw_takadamage对于BOT还是完全没有反应。 最后我用了另一种方法,就成功隔绝对BOT的子弹伤害了,详见私人讯息。 我还有个问题。如果我想绘制一条laserbeam,起始点在我的origin位置,终止点在我枪口瞄准的origin位置,那是非常简单的。但如果我想绘制一条laserbeam,起始点在我的origin位置,方向与我枪口瞄准的方向相同,而laserbeam的长度由我自己定义(比如长度是500),我该如何做? 因为我正在写一个武器,能够自动探测并电击半径500以内的所有僵尸(这个我会写)。我想做成如果半径500以内没有任何僵尸,电流就沿着准星方向飞行500单位然后终止。却不知道(凭空飞行500单位的)该怎么写。 x0 |
引用 | 编辑
z2352671213
2016-08-07 00:03 |
8楼
▲ ▼ |
下面是引用 s8720419 于 2016-08-06 23:15 发表的 : 谢谢大大,成功了,一条完美的长度 = 500 的电弧 不过我在编译的时候遇到了一些小问题。 复制程式 new vec1[3], vec2[3],float:vec3[3] //我声明了三组变数 //vec1 就是origin //vec3 就是aim的方向和长度 //vec2 是vec3的整数形式,因为velocity_by_aim保存变数的形式是浮点数 if(count == 0) //如果探测到的僵尸数量为零 { get_user_origin(id, vec1, 1) velocity_by_aim(id, 500, vec3) //第691行 for (new i;i<3;i++) vec2[i] = vec1[i] + floatround (vec3[i],floatround_round ) //第693行 //以下的代码省略................ } 这样子写,插件运行起来完全没有任何问题,也没有报错。可是编译的时候,编译器却给出了2个warning,说691和693行tag mismatch,请问这是为什么呢,我有什么地方写错了吗? 还有,如果声明了一个bool变数,如 new bool:check,然后判断的时候写成if(check == true),也会tag mismatch,但是写成if(check)或者if(check == 1)就不会,这是为什么呢? x0 |
引用 | 编辑
z2352671213
2016-08-07 14:34 |
10楼
▲ ▼ |
引用 | 编辑
z2352671213
2016-08-10 12:32 |
11楼
▲ |