13号避难所

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

[辐射2 MOD] 用sfall腳本禁止隊友掃射攻擊

[复制链接]
跳转到指定楼层
楼主
发表于 2016-9-6 00:06:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言:
給隊友拿有掃射模式的武器都得擔心他們啥時就往你背上或其他路人身上掃一排子彈,如果是自己被流彈打中受傷可能摸摸鼻子算了,但要是打到路人或原本友善的NPC變成大混戰的情況就難看了。
當然合理做法是從一開始就別給他們可以掃射的武器,不過有時手上可以給隊友裝備的較好武器偏偏就是有掃射模式的,要嘛就是用舊裝備拖下去等到有適合的新玩意兒,要嘛就是賭運氣。
sfall從1.49a版開始加上了set_critter_burst_disable函式,可以阻止角色使用掃射攻擊(除非武器模式就只有掃射),最直覺的作法是在各隊友腳本內start程序插一行set_critter_burst_disable(self_obj, 1);再重新編譯,但這樣得動十多個腳本太麻煩,所以又是global script出場的時候了。

事前準備:

腳本源碼:
第一份是很簡單的把全部可以裝備掃射武器的隊友檢查一遍,如果在隊伍中就禁止他使用掃射攻擊:
  1. // gl_npcnoburst.ssl
  2. procedure start;
  3. #include ".\HEADERS\DEFINE.H"

  4. procedure start begin
  5.     if (game_loaded) then begin
  6.         set_global_script_repeat(60);
  7.     end else begin
  8.         if (party_size > 1) then begin
  9.             if (Sulik_In_Party) then begin
  10.                 set_critter_burst_disable(Sulik_Ptr, 1);
  11.             end
  12.             if (Vic_In_Party) then begin
  13.                 set_critter_burst_disable(Vic_Ptr, 1);
  14.             end
  15.             if (Miria_In_Party) then begin
  16.                 set_critter_burst_disable(Miria_Ptr, 1);
  17.             end
  18.             if (Davin_In_Party) then begin
  19.                 set_critter_burst_disable(Davin_Ptr, 1);
  20.             end
  21.             if (MacRae_In_Party) then begin
  22.                 set_critter_burst_disable(MacRae_Ptr, 1);
  23.             end
  24.             if (Lenny_In_Party) then begin
  25.                 set_critter_burst_disable(Lenny_Ptr, 1);
  26.             end
  27.             if (Marcus_In_Party) then begin
  28.                 set_critter_burst_disable(Marcus_Ptr, 1);
  29.             end
  30.             if (Myron_In_Party) then begin
  31.                 set_critter_burst_disable(Myron_Ptr, 1);
  32.             end
  33.             if (Robobrain_In_Party) then begin
  34.                 set_critter_burst_disable(Robobrain_Ptr, 1);
  35.             end
  36.             if (Robobrain_Human_In_Party) then begin
  37.                 set_critter_burst_disable(Robobrain_Human_Ptr, 1);
  38.             end
  39.         // RP 2.x new NPCs
  40.             if (Kitsune_In_Party) then begin
  41.                 set_critter_burst_disable(Kitsune_Ptr, 1);
  42.             end
  43.             if (Cat_Jules_In_Party) then begin
  44.                 set_critter_burst_disable(Cat_Jules_Ptr, 1);
  45.             end
  46.             if (Dex_In_Party) then begin
  47.                 set_critter_burst_disable(Dex_Ptr, 1);
  48.             end
  49.         end
  50.     end
  51. end
复制代码

sfall 3.6版時增加了party_member_list函式,會把在隊伍中全部人員指標以一個數組(array)回傳,所以上面用列舉的源碼可以換個方式簡化成:
  1. // gl_npcnoburst.ssl
  2. procedure start;
  3. #include ".\HEADERS\DEFINE.H"

  4. procedure start begin
  5.     if (game_loaded) then begin
  6.         set_global_script_repeat(60);
  7.     end else begin
  8.         if (party_size > 1) then begin
  9.             variable who;
  10.             foreach who in party_member_list(0) begin
  11.                 if (who != dude_obj) then begin
  12.                     set_critter_burst_disable(who, 1);
  13.                 end
  14.             end
  15.         end
  16.     end
  17. end
复制代码

兩者實際邏輯是有些差異(一個是挑特定隊友才禁止,一個是只要不是玩家角色就禁止),但作用一樣。
這樣就算給隊友衝鋒槍、突擊步槍、自動霰彈槍之類武器,然後戰鬥設定叫他們總是使用掃射,實際戰鬥時他們還是乖乖用單發射擊。

用列舉的好處是兼容較舊版的sfall,另外可以很容易加上讀取外部INI檔的部份,弄個可以在INI檔自由設定哪些隊友能否用掃射的花俏功能。
用數組的好處當然就是源碼精簡化,不過只能配sfall 3.6以後版本使用。
沙发
发表于 2016-9-6 08:59:25 | 只看该作者
记得之前对命中率的研究文章里写到,纯扫射武器只是看着伤害高,实际基本就是浪费子弹,因为总会有些子弹打中不该打的东西……
板凳
 楼主| 发表于 2016-9-6 09:28:41 | 只看该作者
畢竟如果真的讓掃射全往單一目標去就變成不管是玩家還是敵人幾乎是誰先出手就誰贏的情況,除非要把所有掃射彈數都大幅壓低(變成像WL2那樣),但這樣多管機槍就尷尬了....
單純用sfall拉高一點跑中間的比例(像從1/3提高到1/2)就可以感覺到差異了,我在3.7b之後特別在計算中間和主要目標子彈數的地方加上無條件進位,至少會多個一兩發子彈往主目標飛去。
地板
发表于 2016-9-6 14:20:51 | 只看该作者
反正我是不敢用扫射,队友打队友比打敌人还凶,都是碎尸

点评

啊这个我也是,史力克只敢用.223手枪要么伊克总是碎尸  发表于 2016-9-6 18:23
5#
发表于 2016-9-7 10:49:14 | 只看该作者
novarain 发表于 2016-9-6 09:28
畢竟如果真的讓掃射全往單一目標去就變成不管是玩家還是敵人幾乎是誰先出手就誰贏的情況,除非要把所有掃射 ...

直接控制队友作战就可以了,还能瞄准攻击了。
6#
 楼主| 发表于 2016-9-7 10:52:48 | 只看该作者
kkkone 发表于 2016-9-7 10:49
直接控制队友作战就可以了,还能瞄准攻击了。

我個人其實相當討厭那功能,它本來該在sfall改版到3.0那時和多人連線部份一起死的。
7#
发表于 2016-9-7 11:28:16 | 只看该作者
novarain 发表于 2016-9-7 10:52
我個人其實相當討厭那功能,它本來該在sfall改版到3.0那時和多人連線部份一起死的。

队友AI太危险,我从来不敢给他们用重武器。一般战斗都是我远远的狙人,队友聚在一边用.44打冲脸的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 09:02 , Processed in 0.067632 second(s), 14 queries .

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