|
前言:
給隊友拿有掃射模式的武器都得擔心他們啥時就往你背上或其他路人身上掃一排子彈,如果是自己被流彈打中受傷可能摸摸鼻子算了,但要是打到路人或原本友善的NPC變成大混戰的情況就難看了。
當然合理做法是從一開始就別給他們可以掃射的武器,不過有時手上可以給隊友裝備的較好武器偏偏就是有掃射模式的,要嘛就是用舊裝備拖下去等到有適合的新玩意兒,要嘛就是賭運氣。
sfall從1.49a版開始加上了set_critter_burst_disable函式,可以阻止角色使用掃射攻擊(除非武器模式就只有掃射),最直覺的作法是在各隊友腳本內start程序插一行set_critter_burst_disable(self_obj, 1);再重新編譯,但這樣得動十多個腳本太麻煩,所以又是global script出場的時候了。
事前準備:
腳本源碼:
第一份是很簡單的把全部可以裝備掃射武器的隊友檢查一遍,如果在隊伍中就禁止他使用掃射攻擊:
- // gl_npcnoburst.ssl
- procedure start;
- #include ".\HEADERS\DEFINE.H"
- procedure start begin
- if (game_loaded) then begin
- set_global_script_repeat(60);
- end else begin
- if (party_size > 1) then begin
- if (Sulik_In_Party) then begin
- set_critter_burst_disable(Sulik_Ptr, 1);
- end
- if (Vic_In_Party) then begin
- set_critter_burst_disable(Vic_Ptr, 1);
- end
- if (Miria_In_Party) then begin
- set_critter_burst_disable(Miria_Ptr, 1);
- end
- if (Davin_In_Party) then begin
- set_critter_burst_disable(Davin_Ptr, 1);
- end
- if (MacRae_In_Party) then begin
- set_critter_burst_disable(MacRae_Ptr, 1);
- end
- if (Lenny_In_Party) then begin
- set_critter_burst_disable(Lenny_Ptr, 1);
- end
- if (Marcus_In_Party) then begin
- set_critter_burst_disable(Marcus_Ptr, 1);
- end
- if (Myron_In_Party) then begin
- set_critter_burst_disable(Myron_Ptr, 1);
- end
- if (Robobrain_In_Party) then begin
- set_critter_burst_disable(Robobrain_Ptr, 1);
- end
- if (Robobrain_Human_In_Party) then begin
- set_critter_burst_disable(Robobrain_Human_Ptr, 1);
- end
- // RP 2.x new NPCs
- if (Kitsune_In_Party) then begin
- set_critter_burst_disable(Kitsune_Ptr, 1);
- end
- if (Cat_Jules_In_Party) then begin
- set_critter_burst_disable(Cat_Jules_Ptr, 1);
- end
- if (Dex_In_Party) then begin
- set_critter_burst_disable(Dex_Ptr, 1);
- end
- end
- end
- end
复制代码
sfall 3.6版時增加了party_member_list函式,會把在隊伍中全部人員指標以一個數組(array)回傳,所以上面用列舉的源碼可以換個方式簡化成:
- // gl_npcnoburst.ssl
- procedure start;
- #include ".\HEADERS\DEFINE.H"
- procedure start begin
- if (game_loaded) then begin
- set_global_script_repeat(60);
- end else begin
- if (party_size > 1) then begin
- variable who;
- foreach who in party_member_list(0) begin
- if (who != dude_obj) then begin
- set_critter_burst_disable(who, 1);
- end
- end
- end
- end
- end
复制代码
兩者實際邏輯是有些差異(一個是挑特定隊友才禁止,一個是只要不是玩家角色就禁止),但作用一樣。
這樣就算給隊友衝鋒槍、突擊步槍、自動霰彈槍之類武器,然後戰鬥設定叫他們總是使用掃射,實際戰鬥時他們還是乖乖用單發射擊。
用列舉的好處是兼容較舊版的sfall,另外可以很容易加上讀取外部INI檔的部份,弄個可以在INI檔自由設定哪些隊友能否用掃射的花俏功能。
用數組的好處當然就是源碼精簡化,不過只能配sfall 3.6以後版本使用。
|
|