
PalLootScaling - 掠夺成长而非阶梯式提升
掉落率随着玩家接近满级而逐渐提升——在最后五级中呈梯度上升,而不是在80级时一次性跳变。与PalLevelScaling配合使用,该功能将野生帕鲁的等级锁定在附近玩家的等级上,因此加成与实际上被击杀的怪物相匹配。仅服务器端生效——客户端无需安装任何内容。
查看大图[size=5][b]战利品随玩家等级提升而平滑增长——渐进式曲线,而非阶梯式跳变[/b][/size]
在游戏后期,击杀一只80级的帕鲁和击杀一只20级的帕鲁掉落相同。
这个模组会跟随玩家等级,并在其达到满级时提高掉落率。
增长过程是有意设计为渐进的。若采用“80级时掉落翻倍”的阶梯式设定,玩家在79级时毫无感觉,而到80级则突然获得一切;渐进式曲线则将增益平摊到最后五级之中。
[size=4][b]服务端模组。客户端无需安装任何文件。[/b][/size]
纯Lua编写,由专用服务器上的UE4SS加载。PC、Xbox和PlayStation
玩家无需修改任何文件即可获得相同的效果。
[b]已在原生Linux专用服务器上进行生产环境测试[/b],使用
[url=https://www.nexusmods.com/palworld/mods/5393]我们的GLIBC 2.28 UE4SS构建版本[/url] - 该页面
是让这一切在Linux上运行的关键组件,并已在此列为其依赖项。
在Windows专用服务器上,则使用官方UE4SS版本。
在Palworld [b]v1.0.2.101103[/b]版本,UE4SS 3.0.1,原生Linux
(BisectHosting)环境下进行测量。
[line]
[size=4][b]工作原理[/b][/size]
模组每30秒读取参考玩家的等级,并将对应的掉落率写入
PalOptionSubsystem.OptionWorldSettings.EnemyDropItemRate。
使用默认设置时:
[code]
玩家等级 倍率
74级及以下 1.0倍
75级 1.0倍
76级 1.2倍
77级 1.4倍
78级 1.6倍
79级 1.8倍
80级及以上 2.0倍[/code]
[b]为何依据玩家等级而非被击杀帕鲁的等级。[/b] 该模组并未在死亡事件上挂钩——它仅调整一个全局设置。这样做之所以有效,是因为
[url=https://github.com/prado1506/palworld-PalLevelScaling]PalLevelScaling[/url]
会将野生帕鲁的等级与附近玩家的等级绑定,因此加成效果能准确追踪实际被击杀的目标,且每次击杀的额外开销为零。
如果您[b]没有[/b]运行PalLevelScaling,行为则会改变:加成将适用于所有帕鲁,
包括起始区域附近的低等级帕鲁。
[size=4][b]安装方法[/b][/size]
[code]
ue4ss/Mods/PalLootScaling/
|- enabled.txt <- 空文件,但必需
|- Scripts/
|- main.lua
|- config.lua[/code]
在服务器停止时将其复制进去。启动后,请在UE4SS.log中确认:
[code]
Loaded; enabled=true, ramp=75-80, maxMultiplier=2.00, ...
Tick scheduled every 30s via ExecuteInGameThreadWithDelay[/code]
[b]第二行才是关键。[/b] 如果该行未出现,模组虽已加载但不会执行任何操作——请参阅下方的调度说明。
[size=4][b]配置说明[/b][/size]
所有配置均位于Scripts/config.lua文件中。
[code]
modEnabled true 启用模组
bonusStartLevel 75 增长起始等级(仍为1.0倍)
bonusFullLevel 80 达到满倍率的等级
lootMultiplier 2.0 增长顶点的倍率
referencePlayer "lowest" 决定使用哪个玩家的等级 - 见下文
scaleEnemyDrops true 影响击败帕鲁的掉落
scaleCollectionDrops false 影响资源采集
maximumRate 10.0 安全上限,绝不写入高于此值的倍率
checkIntervalSeconds 30 重新评估的间隔时间
logChanges true 记录每次倍率变更
logDiagnostics true 记录参考等级和增长曲线[/code]
[b]referencePlayer[/b] - 倍率是全局的,因此需有人来设定等级。
[list]
[][b]"lowest"[/b] - 使用在线玩家中的最低等级。直到全队都达到目标等级后,才会获得加成。为出厂默认设置[/]
[][b]"highest"[/b] - 使用最高等级。一名老玩家即可为所有人拉高加成[/]
[/list]
出厂默认设为"lowest",是因为这与
[url=https://github.com/prado1506/palworld-PalLevelScaling]PalLevelScaling[/url]
一致,后者也基于在线的最弱玩家来缩放刷新——两个设置相互吻合,
因此战利品加成能准确匹配实际刷新的帕鲁。如果您更希望由老玩家来主导节奏,
可将两者同时切换为"highest"。
[b]常用调整[/b]
[list]
[][b]更长的增长区间[/b] - 设置bonusStartLevel = 60[/]
[][b]更大的加成[/b] - 设置lootMultiplier = 3.0(maximumRate仍会限制上限)[/]
[][b]仅满级生效[/b] - 设置bonusStartLevel = 79, bonusFullLevel = 80[/]
[][b]包含挖矿和采集[/b] - 设置scaleCollectionDrops = true[/]
[/list]
[size=4][b]日志解读[/b][/size]
[code]
Baseline PalOptionSubsystem.OptionWorldSettings.EnemyDropItemRate=1.00
EnemyDropItemRate 1.00 -> 2.00
Bonus 2.00x; referenceLevel=80 (highest of 1 player(s)), ramp=75-80[/code]
第一行是服务器原始数值,仅在首次运行时记录。若缺少这些行,
则模组未生效,即使日志显示“Loaded”(已加载)。
[size=4][b]已知限制[/b][/size]
[b]倍率是全局性的,而非按玩家区分。[/b] 它是一个世界设置。若不对每次击杀
进行挂钩,则无法给某名玩家2.0倍而给另一名玩家1.0倍,那将付出高昂的代价。
[b]原数值需要通过重启服务器来恢复,而非由模组进行。[/b] 如果在倍率已提升的情况下
禁用模组,倍率将持续保持,直到服务器重启。
[b]不影响首领掉落或宝箱奖励。[/b] 仅影响EnemyDropItemRate,以及可选的采集掉落。
[size=4][b]如果您为Linux服务器编写模组,请阅读以下内容[/b][/size]
[b]本模组曾因此问题而完全无法运行[/b],因此值得记录在此。并非所有UE4SS
调度机制都能在Linux构建版本上触发:
[code]
RegisterHook 有效
ExecuteInGameThread 有效
ExecuteInGameThreadWithDelay 有效,且准时
ExecuteWithDelay 永远不触发
LoopAsync 永远不触发[/code]
先前版本首先尝试使用LoopAsync。它能加载成功,在日志中写出“Loaded;
enabled=true...”字样,然后[b]从未运行过任何一次循环[/b],在任何启动场景下皆如此。
帕鲁本身的掉落随机性范围太大,因此在游玩过程中几乎无法察觉。
当前版本首先尝试使用ExecuteInGameThreadWithDelay,并[b]在日志中说明采用
了哪种机制[/b]。如果该机制发生变化,日志会明确显示,而不会静默失败。
详细说明和解决方案请参阅
[url=https://www.nexusmods.com/palworld/mods/5393]UE4SS Linux构建版本页面[/url]。
[size=4][b]源代码[/b][/size]
完整源代码、技术文档和问题追踪器:
[url=https://github.com/prado1506/palworld-PalLootScaling]github.com/prado1506/palworld-PalLootScaling[/url]
这是已在原生Linux专用服务器上验证的系列服务端Palworld模组之一。
它们所依赖的加载器在[url=https://www.nexusmods.com/palworld/mods/5393]此处[/url]。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。