引用 | 編輯
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樓
▲ |