13号避难所

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

版主...有天赋异禀的角色的体质属性值好奇怪啊...

[复制链接]
跳转到指定楼层
楼主
发表于 2019-7-19 23:55:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于单数体质升级无法增加生命值,所以我今天写了一个脚本...

=====
procedure start;


#include "F:\fallout\xiugai\modderspack_4.1.8\ScriptEditor\scripts_src\HEADERS\define.h"

variable get_level_hp;
variable get_en;

procedure start begin
   if (game_loaded) then begin
      set_global_script_repeat(60);
   end else begin
      get_level_hp := (get_pc_stat(PCSTAT_level) - 1) * 1;
      get_en := get_pc_base_stat(STAT_en);   

      if has_trait(TRAIT_PERK, dude_obj, TRAIT_gifted) then begin
         if ((get_en == 1) or (get_en == 3) or (get_en == 5) or (get_en == 7) or (get_en == 9)) then begin
         set_pc_extra_stat(STAT_max_hp, get_pc_extra_stat(STAT_max_hp) + get_level_hp);
         end
      end

      if not(has_trait(TRAIT_PERK, dude_obj, TRAIT_gifted)) then begin
         if ((get_en == 1) or (get_en == 3) or (get_en == 5) or (get_en == 7) or (get_en == 9)) then begin
         set_pc_extra_stat(STAT_max_hp, get_pc_extra_stat(STAT_max_hp) + get_level_hp);
         end
      end   

   end        
end
=====

由于我很早就注意到有天赋异禀的人物,在f2se中其基础体质值比游戏中显示的少1,而且奖励体质值为0,所以就觉得恐怕会有问题,于是将两种情况分开写,然而结果比我想的还诡异...
这个脚本对没有天赋异禀的人物是有效的(虽然hp不停疯涨)——单数体质长生命值,双数体质不长,得到体质perk也没问题,然而对于有天赋异禀的人物效果却非常诡异,我为了找到问题所在重建了两个体质分别为6和7的11级人物,又把条件分别换成了 if get_en == 5 then begin/ if get_en == 6 then begin/ if get_en == 7 then begin/ if get_en == 8 then begin 分别测试,结果竟然发现体质6的人物无论5678生命都会长,而体质7的人物无论5678都不长!
难道说有天赋异禀的人物,双数体质=任何值,而单数体质任何值都不等于???

再者为了应对疯长的hp,我把“set_pc_extra_stat(STAT_max_hp, get_pc_extra_stat(STAT_max_hp) + get_level_hp)”换成了“set_pc_extra_stat(STAT_max_hp, get_level_hp)”,结果11级人物的初始hp没问题了,但是在升级的时候居然只长了1点hp...游戏升级+hp的机制到底是啥样的呀?


最后,常规的gl脚本里面不能有小数是吗?我试了每级长0.5hp结果无效,有啥办法吗?

沙发
发表于 2019-7-20 00:08:02 | 只看该作者
Gifted的運作方式比較特別,它是在引擎內部需要取SPECIAL做相關計算時直接+1上去,角色資料內的原始SPECIAL基礎值不會因為選了它而增加。
本來沒選Gifted之前EN 7的角色選了變8,但角色資料內的數值還是7。它不像Gain XXX那些perk一樣選取當下把數值加到角色資料內。
板凳
 楼主| 发表于 2019-7-20 00:40:32 | 只看该作者
novarain 发表于 2019-7-20 00:08
Gifted的運作方式比較特別,它是在引擎內部需要取SPECIAL做相關計算時直接+1上去,角色資料內的原始SPECIAL ...

可即便如此也是定值啊,为什么无论我设定等于几,双数都符合要求而单数都不符合呢?if get_en == 5 then begin/ if get_en == 6 then begin/ if get_en == 7 then begin/ if get_en == 8 then begin这几个条件我是分别测试的,每次都只有一个条件。
地板
发表于 2019-7-20 01:05:15 | 只看该作者
你那腳本本身邏輯有問題,照你寫法不論有沒有Gifted都會執行同樣的操作,那你做trait檢查根本一點用都沒有。而且你用錯參數了,是TRAIT_TRAIT不是TRAIT_PERK。
如果你只是希望像是EN 5每次升級的HP應該要和EN 6一樣多,而不是只有EN 4的量的話,我已經寫了一個應該可用的腳本了。
5#
 楼主| 发表于 2019-7-20 01:53:55 | 只看该作者
novarain 发表于 2019-7-20 01:05
你那腳本本身邏輯有問題,照你寫法不論有沒有Gifted都會執行同樣的操作,那你做trait檢查根本一點用都沒有 ...

不是啊,有区别的呀。因为我摘取的体质值是基础值(get_en := get_pc_base_stat(STAT_en);有天赋异禀的情况下,基础值=游戏中数值-1

无天赋异禀的情况下,基础值=游戏中数值
所以虽然都是1 3 5 7 9
但有天赋异禀的人物,实际数值=2 4 6 8 10


6#
 楼主| 发表于 2019-7-20 01:54:59 | 只看该作者
哦卧槽,我知道怎么回事了  
if not(has_trait(TRAIT_PERK, dude_obj, TRAIT_gifted)) then begin

不是perk,应该是trait
7#
发表于 2019-7-20 02:12:29 | 只看该作者
我不清楚你到底想達成什麼效果,如果是我上面說的那樣,這是我寫的版本:
  1. #include ".\HEADERS\define.h"
  2. #include ".\HEADERS\command.h"

  3. procedure start;

  4. variable lvTmp;

  5. procedure start begin
  6.    if (game_loaded) then begin
  7.       set_global_script_repeat(60);
  8.       lvTmp := get_pc_stat(PCSTAT_level);
  9.    end else begin
  10.       variable
  11.          currLv := get_pc_stat(PCSTAT_level),
  12.          baseEN := get_pc_base_stat(STAT_en) + has_trait(TRAIT_TRAIT, dude_obj, TRAIT_gifted);

  13.       if (currLv > lvTmp and baseEN % 2) then begin
  14.          set_pc_extra_stat(STAT_max_hp, (currLv - 1) * ((baseEN + 1) / 2 + 2));
  15.          critter_heal(dude_obj, (baseEN + 1) / 2 + 2);
  16.          lvTmp := get_pc_stat(PCSTAT_level);
  17.       end
  18.    end
  19. end
复制代码

這樣EN 5的角色升級加的HP就會和EN 6一樣多。
8#
 楼主| 发表于 2019-7-20 02:26:53 | 只看该作者
novarain 发表于 2019-7-20 02:12
我不清楚你到底想達成什麼效果,如果是我上面說的那樣,這是我寫的版本:

這樣EN 5的角色升級加的HP就會 ...

...真麻烦你了,我明天再看看吧,谢谢了。
9#
 楼主| 发表于 2019-7-20 22:29:17 | 只看该作者
版主,我看了下,有一个问题,如果玩家选择了lifegiver这个perk怎么办?15级18级21级得到这个perk加的hp量是不一样的,这个怎么写啊?

能够设置一个可以被游戏存档记录的变量吗?在得到lifegiver的时候马上侦查玩家等级,然后记录在变量里面,再依照这个变量值增加hp?
10#
发表于 2019-7-20 22:42:05 | 只看该作者
你想要有能被存起來的額外全域變數就設個sfall global variable。
11#
 楼主| 发表于 2019-7-20 23:26:47 | 只看该作者
啊...这个就可以啊...谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-20 12:53 , Processed in 0.099553 second(s), 13 queries .

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