|
前言與廢話:
絕大多數武器的“單發”攻擊只會花費一發彈藥,超級趕畜棒與超級動力拳套這兩個是例外,它們攻擊一次消耗兩發電池的設定是特別寫死在遊戲引擎內的,所以你用物品編輯器也找不到可以調整這部份的設定。我想讓其他武器也可以有這種特性,最好還可以擴充它的功能,sfall提供的函式正好有可以取得與設定彈藥數量的set/get_weapon_ammo_count,不過一開始我還想不到怎麼應用它們,NMA上的Ardent給我了個方向,因為減少彈藥是在攻擊之後,而hook script內只有hs_afterhitroll是不論命中或造成傷害與否都會執行,自然就從它來下手了。
以下是測試用的腳本源碼,修改對象是XL70E3 :- procedure start;
- #include "sfall.h"
- #include "DEFINE.H"
- procedure start begin
- variable hit, attacker, ammo;
- if not init_hook then begin
- hit:=get_sfall_arg;
- attacker:=get_sfall_arg;
- if (obj_pid(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND)) == PID_INDEPENDENT) then begin
- ammo:=get_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND));
- if (get_attack_type == ATKTYPE_RWEP1) then begin
- set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND), ammo-1);
- end else if (get_attack_type == ATKTYPE_RWEP2) then begin
- set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND), ammo-5);
- end
- end else if (obj_pid(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND)) == PID_INDEPENDENT) then begin
- ammo:=get_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND));
- if (get_attack_type == ATKTYPE_LWEP1) then begin
- set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND), ammo-1);
- end else if (get_attack_type == ATKTYPE_LWEP2) then begin
- set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND), ammo-5);
- end
- end
- end
- end
复制代码 然後再配上修改XL70E3的proto:
腳本與修改proto搭配起來之後,XL70E3的單發攻擊會消耗兩發彈藥、連發則是五發的攻擊數量但消耗十發彈藥。當然你可以自由調整一次攻擊要花幾發,或是限定這種一次消耗多發彈藥的效果在武器其中一種攻擊上,像是單次攻擊一次耗兩發,但連發時耗掉幾發子彈就是造成多少次攻擊之類的。
這腳本的缺點是當武器內剩餘彈數為1時還是可以進行正常的單發攻擊,Timeslip給了很壞心眼的建議,說加上個檢查讓武器剩餘彈數為1時的攻擊直接變成致命失誤(做得到而且很簡單,因為hs_afterhitroll原本就是可以控制攻擊擲骰之後的結果),最好還把武器彈藥容量設成不能整除,這樣更容易整到人
不過實際上這問題也會發生在超級動力拳套上,因為它彈藥容量為25不是偶數,於是你揮了12拳之後只剩一發電池但還是能正常攻擊。我想當初開發者在特別修改這部份時沒想到那麼多....
使用說明:
附件內的hs_afterhitroll.ssl是源碼(就上面那些),hs_afterhitroll.int是編譯過的腳本,00000353.pro是照上面附圖修改後的XL70E3,要試用的話把hs_afterhitroll.int放到Data\Scripts文件夾內,00000353.pro放到Data\Proto\Items文件夾,再確認它有設定“只讀”,不然會在遊戲啟動時被刪除。然後確定你FO2有裝上sfall 2.x版,如果sfall是2.7版之前的,請順便檢查ddraw.ini內的ScriptExtender是否為1。
如果你想自己修改與編譯附件內的ssl源碼,有兩點要提醒的:
[li]編譯器請用Timeslip改版過的sslc(compile.exe),沒有的話去下載sfall modders pack,裡面還有附個腳本編輯器,對不想敲指令列的人來說算很方便了。[/li][li]你還需要sfall.h,一樣在modders pack內有。另外是FO2腳本源碼(需要那些header),我自己是拿killap的非官方修正1.02.25版源碼來用。[/li] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|