13号避难所

 找回密码
 立即注册
搜索
查看: 5780|回复: 21
打印 上一主题 下一主题

[辐射2 MOD] 用sfall hook script修改攻擊消耗彈數

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-14 21:23:55 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
前言與廢話:
絕大多數武器的“單發”攻擊只會花費一發彈藥,超級趕畜棒與超級動力拳套這兩個是例外,它們攻擊一次消耗兩發電池的設定是特別寫死在遊戲引擎內的,所以你用物品編輯器也找不到可以調整這部份的設定。我想讓其他武器也可以有這種特性,最好還可以擴充它的功能,sfall提供的函式正好有可以取得與設定彈藥數量的set/get_weapon_ammo_count,不過一開始我還想不到怎麼應用它們,NMA上的Ardent給我了個方向,因為減少彈藥是在攻擊之後,而hook script內只有hs_afterhitroll是不論命中或造成傷害與否都會執行,自然就從它來下手了。

以下是測試用的腳本源碼,修改對象是XL70E3 :
  1. procedure start;
  2. #include "sfall.h"
  3. #include "DEFINE.H"
  4. procedure start begin
  5.   variable hit, attacker, ammo;
  6.   if not init_hook then begin
  7.     hit:=get_sfall_arg;
  8.     attacker:=get_sfall_arg;
  9.     if (obj_pid(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND)) == PID_INDEPENDENT) then begin
  10.       ammo:=get_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND));
  11.       if (get_attack_type == ATKTYPE_RWEP1) then begin
  12.         set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND), ammo-1);
  13.       end else if (get_attack_type == ATKTYPE_RWEP2) then begin
  14.         set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_RIGHT_HAND), ammo-5);
  15.       end
  16.     end else if (obj_pid(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND)) == PID_INDEPENDENT) then begin
  17.       ammo:=get_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND));
  18.       if (get_attack_type == ATKTYPE_LWEP1) then begin
  19.         set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND), ammo-1);
  20.       end else if (get_attack_type == ATKTYPE_LWEP2) then begin
  21.         set_weapon_ammo_count(critter_inven_obj(attacker, INVEN_TYPE_LEFT_HAND), ammo-5);
  22.       end
  23.     end
  24.   end
  25. 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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|13号避难所

GMT+8, 2024-5-5 04:48 , Processed in 0.069574 second(s), 15 queries .

快速评论 返回顶部 返回列表