13号避难所

 找回密码
 立即注册
搜索
查看: 2480|回复: 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: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: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


地板
 楼主| 发表于 2019-7-20 01:54:59 | 显示全部楼层
哦卧槽,我知道怎么回事了  
if not(has_trait(TRAIT_PERK, dude_obj, TRAIT_gifted)) then begin

不是perk,应该是trait
5#
 楼主| 发表于 2019-7-20 02:26:53 | 显示全部楼层
novarain 发表于 2019-7-20 02:12
我不清楚你到底想達成什麼效果,如果是我上面說的那樣,這是我寫的版本:

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

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

能够设置一个可以被游戏存档记录的变量吗?在得到lifegiver的时候马上侦查玩家等级,然后记录在变量里面,再依照这个变量值增加hp?
7#
 楼主| 发表于 2019-7-20 23:26:47 | 显示全部楼层
啊...这个就可以啊...谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 15:53 , Processed in 0.055543 second(s), 13 queries .

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