Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TerrariaPyramidJudge

TerrariaPyramidJudge 是一个独立的 Terraria 金字塔种子判断/查找工具。

根据一份上千世界样本集的实测,该程序找塔成功率约为 95%,每个种子平均耗时约 50 ms。

功能

判断一系列 seed 的金字塔状态

直接把 Terraria 世界 seed 写在命令后面即可:

dotnet run -- 540278984 1092653535

默认文本输出示例:

540278984    Complete    金字塔数量=1    物品=沙暴    塔=1:mask=1(沙暴)@(2534,314)    durationMs=677

字段含义:

  • 第一列:输入的世界 seed。
  • Complete:模拟完成。否则即表示运行出错。
  • 金字塔数量:模拟中保留下来的有效金字塔数量。
  • 物品:本 seed 中所有金字塔出现过的目标物品汇总。
  • :逐塔摘要,格式是 序号:mask=物品mask(中文物品)@(箱子X,箱子Y)
  • durationMs:本 seed 的模拟耗时。

也可以从标准输入读取 seed:

Get-Content .\seeds.txt | dotnet run -- --stdin

JSON 会包含每座塔的坐标、itemMask、中文物品摘要和完整 loot summary。

批量查找含有指定条件金字塔的世界

查找模式用于“从任意随机数种子开始,生成 Terraria 可见 seed 序列,然后筛出前 K 个满足条件的世界 seed”。

dotnet run -- search <rngSeed> <K> N=<N> <mask1> [mask2 ...]

mask:

1 = 沙暴瓶
2 = 飞毯
4 = 法老套
3 = 沙暴瓶或飞毯
5 = 沙暴瓶或法老套
6 = 飞毯或法老套
7 = 沙暴瓶或飞毯或法老套

例子:

dotnet run -- search 12345 10 N=3 7 7 7

含义:

  • 12345 是随机数发生器种子,不是 Terraria 世界 seed。
  • 10 表示找前 10 个命中的世界 seed。
  • N=3 表示至少 3 个金字塔。
  • 7 7 7 表示需要 3 座不同的塔分别命中 mask 7,也就是每座塔含任意目标物品即可。

例如:

dotnet run -- search 12345 5 N=2 1 2

这表示至少 2 个金字塔,并且需要一座沙暴塔和一座飞毯塔。

常用查找参数:

--rng-seed <number>          随机数发生器种子。
-k, --take <number>          找几个命中结果。
-n, --min-pyramids <number>  至少几个金字塔。
--masks <m1,m2,...>          每座塔的物品 mask 条件。
--max-check <number>         最多检查多少个生成出来的世界 seed。
--json                       输出 JSON。

如果 N 大于 mask 数量,缺少的 mask 会自动补成 7。例如 N=3 1 等价于要求 1 7 7

原理

核心入口在:

WorldGeneration/PyramidSeedPreScreen.cs
WorldGeneration/Simulation/

使用复刻的 UnifiedRandom 和世界生成 pass,执行到官方 Pyramids pass。

局限性

  • 目前只支持小世界、猩红、无特殊/秘密种子。
  • 腐化世界适配尚未完成,--evil corruption 目前会返回 UnsupportedScope
  • 中世界和大世界已有参数入口,但模拟范围尚未准备好。

计划

  • 马上完成腐化世界适配。
  • 准备中世界和大世界的生成模拟范围。

自定义查找

本程序提供的查找选项是有限的。但是更复杂的筛选可以轻松通过 AI 或脚本围绕这个核心来定制。

你可以很轻松地做这些改造:

  • 限制世界 seed 本身的范围或格式。
  • 限制某座塔的 X/Y 坐标。
  • 限制 seed 对应的第一随机数、第二随机数或某段 RNG 序列。
  • 只接受双塔都在某个区域内的 seed。
  • 把搜索拆成多进程/多机器跑。
  • 把 JSON 输出接到 PowerShell、Python、C# 或数据库里继续过滤。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages