XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

DeathMod

【Terraria】DeathMod (now aka Soul Harvest)

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/DeathMod

重构阶段魂印发放机制,新增调试命令及文档

重写 Boss 击杀后魂印发放逻辑,统一为所有已解锁阶段各发放 1 点魂印,移除原有阶段判定。新增 `/reaperdebugitems` 调试命令,支持一键生成物品并发放魂印,仅限调试世界使用。补充并同步多语言文本、物品描述、README、玩法指南及调试命令文档,详细说明新机制和测试流程,提升开发与测试效率。

4b36f66
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

14 个文件 +193 -130
Modified Commands/ReaperDebugCommands.cs +41 -0
@@ -72,6 +72,47 @@ public sealed class ReaperDebugGiveCommand : ModCommand
72 72 }
73 73 }
74 74
75 public sealed class ReaperDebugItemsCommand : ModCommand
76 {
77 public override string Command => "reaperdebugitems";
78 public override CommandType Type => CommandType.World;
79 public override string Usage => "/reaperdebugitems";
80 public override string Description => Language.GetTextValue("Mods.SoulHarvest.Commands.ItemsDescription");
81
82 public override void Action(CommandCaller caller, string input, string[] args)
83 {
84 if (!ReaperDebugMode.TryGetPlayer(caller, out Player player))
85 return;
86
87 int spawnedItemTypes = 0;
88 foreach (ModItem modItem in Mod.GetContent<ModItem>())
89 {
90 // DeathDomain is an altar-only virtual entry. Soul Seal items mirror an
91 // authoritative character ledger and must be issued through its service.
92 if (modItem is DeathDomain or ReaperSoulSealItem)
93 continue;
94
95 player.QuickSpawnItem(
96 player.GetSource_Misc("SoulHarvest:DebugAllItems"),
97 modItem.Type);
98 spawnedItemTypes++;
99 }
100
101 int grantedSealPoints = 0;
102 for (ReaperStage stage = ReaperStage.StageI; stage <= ReaperStage.StageIII; stage++)
103 {
104 if (ReaperProgressionSoulSealService.TryGrant(player, stage))
105 grantedSealPoints++;
106 }
107
108 caller.Reply(Language.GetTextValue(
109 "Mods.SoulHarvest.Commands.ItemsSuccess",
110 spawnedItemTypes,
111 grantedSealPoints),
112 new Color(115, 225, 190));
113 }
114 }
115
75 116 public sealed class ReaperDebugResetCommand : ModCommand
76 117 {
77 118 public override string Command => "reaperdebugreset";
Modified Common/ReaperBossRewardSystem.cs +36 -100
@@ -273,9 +273,9 @@ internal sealed class ReaperBossParticipationSystem : ModSystem
273 273 }
274 274
275 275 /// <summary>
276 /// Awards exactly one progression seal per completed boss encounter to every online
277 /// player who dealt damage. Dead participants remain eligible because Player.active,
278 /// not Player.dead, is the eligibility condition.
276 /// Awards one progression seal for every world-unlocked stage per completed boss
277 /// encounter to each online player who dealt damage. Dead participants remain
278 /// eligible because Player.active, not Player.dead, is the eligibility condition.
279 279 /// </summary>
280 280 internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
281 281 {
@@ -336,13 +336,17 @@ internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
336 336 && ReaperBossParticipationSystem.IsCompositeMechanicalEncounter())
337 337 {
338 338 // Defer cross-family encounters until every mechanical component is
339 // gone. The shared ledger unions participation and produces only one
340 // entitlement per player for the entire encounter.
339 // gone. The shared ledger unions participation and produces one reward
340 // bundle per player for the entire encounter.
341 341 ReaperBossParticipationSystem.RegisterMechanicalCompletion(family, encounterParticipants);
342 342 return;
343 343 }
344 344
345 if (!TryGetMaximumRewardStage(npc, family, out ReaperStage maximumRewardStage))
345 ReaperStage maximumRewardStage = GetHighestUnlockedRewardStage(
346 npc.type,
347 family,
348 mechanicalEncounterCompletedTrio: false);
349 if (maximumRewardStage == ReaperStage.Locked)
346 350 return;
347 351
348 352 for (int playerIndex = 0; playerIndex < Main.maxPlayers; playerIndex++)
@@ -351,23 +355,18 @@ internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
351 355 if (!encounterParticipants[playerIndex] || !player.active)
352 356 continue;
353 357
354 ReaperProgressionState progression = player.GetModPlayer<MyPlayer>().ReaperProgression;
355 if (TrySelectMissingRewardStage(
356 progression,
357 maximumRewardStage,
358 npc.type,
359 family,
360 mechanicalEncounterCompletedTrio: false,
361 out ReaperStage rewardStage))
362 player.GetModPlayer<MyPlayer>().TryGrantSoulSeal(rewardStage);
358 GrantUnlockedStageRewards(player, maximumRewardStage);
363 359 }
364 360 }
365 361
366 362 internal static void AwardMechanicalEncounter(bool[] encounterParticipants, bool completedTrio)
367 363 {
368 ReaperStage maximumRewardStage = completedTrio || AllMechanicalBossesDefeated()
369 ? ReaperStage.StageIII
370 : ReaperStage.StageII;
364 ReaperStage maximumRewardStage = GetHighestUnlockedRewardStage(
365 NPCID.None,
366 ReaperBossFamily.None,
367 completedTrio);
368 if (maximumRewardStage == ReaperStage.Locked)
369 return;
371 370
372 371 for (int playerIndex = 0; playerIndex < Main.maxPlayers; playerIndex++)
373 372 {
@@ -375,17 +374,7 @@ internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
375 374 if (!encounterParticipants[playerIndex] || !player.active)
376 375 continue;
377 376
378 ReaperProgressionState progression = player.GetModPlayer<MyPlayer>().ReaperProgression;
379 if (TrySelectMissingRewardStage(
380 progression,
381 maximumRewardStage,
382 NPCID.None,
383 ReaperBossFamily.None,
384 completedTrio,
385 out ReaperStage rewardStage))
386 {
387 player.GetModPlayer<MyPlayer>().TryGrantSoulSeal(rewardStage);
388 }
377 GrantUnlockedStageRewards(player, maximumRewardStage);
389 378 }
390 379 }
391 380
@@ -420,69 +409,33 @@ internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
420 409 }
421 410 }
422 411
423 private static bool TrySelectMissingRewardStage(
424 ReaperProgressionState progression,
425 ReaperStage maximumStage,
426 int defeatedNpcType,
427 ReaperBossFamily defeatedFamily,
428 bool mechanicalEncounterCompletedTrio,
429 out ReaperStage stage)
412 private static void GrantUnlockedStageRewards(Player player, ReaperStage maximumStage)
430 413 {
431 for (stage = ReaperStage.StageI; stage <= maximumStage; stage++)
432 {
433 bool gateOpen = stage switch
434 {
435 ReaperStage.StageI => NPC.downedBoss3 || defeatedNpcType == NPCID.SkeletronHead,
436 ReaperStage.StageII => Main.hardMode || defeatedNpcType == NPCID.WallofFlesh,
437 ReaperStage.StageIII => maximumStage >= ReaperStage.StageIII
438 && (AllMechanicalBossesDefeated()
439 || mechanicalEncounterCompletedTrio
440 || IsMechanicalBoss(defeatedNpcType, defeatedFamily)
441 && WouldCompleteMechanicalTrio(
442 defeatedNpcType,
443 defeatedFamily)),
444 _ => false
445 };
446 if (gateOpen && progression.CanIssueSoulSeal(stage))
447 return true;
448 }
449
450 stage = ReaperStage.Locked;
451 return false;
414 MyPlayer modPlayer = player.GetModPlayer<MyPlayer>();
415 for (ReaperStage stage = ReaperStage.StageI; stage <= maximumStage; stage++)
416 modPlayer.TryGrantSoulSeal(stage);
452 417 }
453 418
454 private static bool TryGetMaximumRewardStage(NPC npc, ReaperBossFamily family, out ReaperStage stage)
419 private static ReaperStage GetHighestUnlockedRewardStage(
420 int defeatedNpcType,
421 ReaperBossFamily defeatedFamily,
422 bool mechanicalEncounterCompletedTrio)
455 423 {
456 stage = ReaperStage.Locked;
457
458 if (IsMechanicalBoss(npc.type, family))
459 {
460 stage = WouldCompleteMechanicalTrio(npc.type, family)
461 ? ReaperStage.StageIII
462 : ReaperStage.StageII;
463 return true;
464 }
465
466 if (npc.type == NPCID.WallofFlesh || npc.type == NPCID.QueenSlimeBoss)
424 if (AllMechanicalBossesDefeated()
425 || mechanicalEncounterCompletedTrio
426 || IsMechanicalBoss(defeatedNpcType, defeatedFamily)
427 && WouldCompleteMechanicalTrio(defeatedNpcType, defeatedFamily))
467 428 {
468 stage = ReaperStage.StageII;
469 return true;
429 return ReaperStage.StageIII;
470 430 }
471 431
472 if (IsDominionBoss(npc.type, family))
473 {
474 stage = ReaperStage.StageIII;
475 return true;
476 }
432 if (Main.hardMode || defeatedNpcType == NPCID.WallofFlesh)
433 return ReaperStage.StageII;
477 434
478 if (IsPreHardmodeBoss(npc.type, family)
479 && (NPC.downedBoss3 || npc.type == NPCID.SkeletronHead))
480 {
481 stage = ReaperStage.StageI;
482 return true;
483 }
435 if (NPC.downedBoss3 || defeatedNpcType == NPCID.SkeletronHead)
436 return ReaperStage.StageI;
484 437
485 return false;
438 return ReaperStage.Locked;
486 439 }
487 440
488 441 private static bool WouldCompleteMechanicalTrio(int npcType, ReaperBossFamily family)
@@ -504,23 +457,6 @@ internal sealed class ReaperBossRewardGlobalNPC : GlobalNPC
504 457 || npcType is NPCID.Retinazer or NPCID.Spazmatism or NPCID.TheDestroyer or NPCID.SkeletronPrime;
505 458 }
506 459
507 private static bool IsPreHardmodeBoss(int npcType, ReaperBossFamily family)
508 {
509 return family is ReaperBossFamily.Skeletron or ReaperBossFamily.EaterOfWorlds or ReaperBossFamily.BrainOfCthulhu
510 || npcType is NPCID.KingSlime
511 or NPCID.EyeofCthulhu
512 or NPCID.QueenBee
513 or NPCID.Deerclops;
514 }
515
516 private static bool IsDominionBoss(int npcType, ReaperBossFamily family)
517 {
518 return family is ReaperBossFamily.Plantera or ReaperBossFamily.Golem or ReaperBossFamily.MoonLord
519 || npcType is NPCID.DukeFishron
520 or NPCID.HallowBoss
521 or NPCID.CultistBoss
522 or NPCID.DD2Betsy;
523 }
524 460 }
525 461
526 462 /// <summary>
Modified Localization/en-US.hjson +5 -3
@@ -96,17 +96,17 @@ Mods: {
96 96
97 97 AwakeningSoulSeal: {
98 98 DisplayName: Awakening Soul Seal
99 Tooltip: A character-bound Stage I entitlement; combine it with 1 Soul Essence at a Death Altar to illuminate Stage I of one branch
99 Tooltip: A character-bound Stage I receipt; after Skeletron, participating in any boss kill grants one, including alongside later-stage rewards; combine it with 1 Soul Essence to illuminate Stage I of one branch
100 100 }
101 101
102 102 BoundarySoulSeal: {
103 103 DisplayName: Boundary Soul Seal
104 Tooltip: A character-bound Stage II entitlement; combine it with 2 Soul Essence at a Death Altar to illuminate Stage II of one branch
104 Tooltip: A character-bound Stage II receipt; in Hardmode, participating in any boss kill grants one together with an Awakening Seal; combine it with 2 Soul Essence to illuminate Stage II of one branch
105 105 }
106 106
107 107 DominionSoulSeal: {
108 108 DisplayName: Dominion Soul Seal
109 Tooltip: A character-bound Stage III entitlement; combine it with 3 Soul Essence at a Death Altar to illuminate Stage III of one branch
109 Tooltip: A character-bound Stage III receipt; after all three mechanical bosses, participating in any boss kill grants one seal for all three stages; combine it with 3 Soul Essence to illuminate Stage III of one branch
110 110 }
111 111 }
112 112
@@ -670,6 +670,8 @@ Mods: {
670 670 CharacterNotReady: Character data has not finished synchronizing with the server. Try again shortly.
671 671 GiveDescription: Grants 999 Soul Essence and all three tiers of Soul Seals in a -debug world.
672 672 GiveSuccess: Granted 999 Soul Essence; Awakening, Boundary, and Dominion Soul Seals are each stocked to the character cap of 6.
673 ItemsDescription: Spawns every player-holdable item from this mod and legally issues all three Soul Seal stages in a -debug world.
674 ItemsSuccess: Spawned {0} mod item types at the character and issued one point for each uncapped Soul Seal stage, {1} this time. The virtual Death Domain entry was not spawned.
673 675 ResetDescription: Rolls back every character-owned sickle progression node in a -debug world.
674 676 ResetSuccess: Rolled back all six branch stages, 18 form skills, and every common node; issued Soul Seals are available again.
675 677 }
Modified Localization/zh-Hans.hjson +5 -3
@@ -96,17 +96,17 @@ Mods: {
96 96
97 97 AwakeningSoulSeal: {
98 98 DisplayName: 初醒魂印
99 Tooltip: 人物绑定的阶段 I 资格凭证;在死神祭坛与 1 个灵魂精华一同点亮一个分支的阶段 I
99 Tooltip: 人物绑定的阶段 I 凭证;骷髅王后参与击杀任意 Boss 均会获得 1 点,后续阶段奖励也会一并包含;与 1 个灵魂精华点亮一个分支的阶段 I
100 100 }
101 101
102 102 BoundarySoulSeal: {
103 103 DisplayName: 破界魂印
104 Tooltip: 人物绑定的阶段 II 资格凭证;在死神祭坛与 2 个灵魂精华一同点亮一个分支的阶段 II
104 Tooltip: 人物绑定的阶段 II 凭证;困难模式后参与击杀任意 Boss 时与初醒魂印同时获得 1 点;与 2 个灵魂精华点亮一个分支的阶段 II
105 105 }
106 106
107 107 DominionSoulSeal: {
108 108 DisplayName: 统御魂印
109 Tooltip: 人物绑定的阶段 III 资格凭证;在死神祭坛与 3 个灵魂精华一同点亮一个分支的阶段 III
109 Tooltip: 人物绑定的阶段 III 凭证;击败全部新三王后参与击杀任意 Boss,三阶段魂印都会同时获得 1 点;与 3 个灵魂精华点亮一个分支的阶段 III
110 110 }
111 111 }
112 112
@@ -670,6 +670,8 @@ Mods: {
670 670 CharacterNotReady: 人物数据尚未完成服务端同步,请稍后重试。
671 671 GiveDescription: 在 -debug 世界中获得 999 灵魂精华与三个阶段的魂印。
672 672 GiveSuccess: 已获得 999 灵魂精华;初醒、破界、统御魂印均已补至人物上限 6 枚。
673 ItemsDescription: 在 -debug 世界中一键生成本模组全部可持有物品,并合法签发三阶段魂印。
674 ItemsSuccess: 已在角色位置生成 {0} 种本模组物品;为尚未满额的阶段各签发 1 点魂印,本次共 {1} 点。虚拟死亡领域条目未生成。
673 675 ResetDescription: 在 -debug 世界中回退人物的全部镰刀成长节点。
674 676 ResetSuccess: 已回退六分支阶段、18 项形态技能与全部通用节点;已签发魂印恢复为未消费状态。
675 677 }
Modified README.md +4 -2
@@ -55,7 +55,7 @@ All six branches can be trained in parallel. Illuminating a stage does not repla
55 55 | II · Metamorphosis | After Wall of Flesh / once the world is in Hardmode | 1 Boundary Soul Seal | 2 |
56 56 | III · Ultimate Release | After all three mechanical bosses | 1 Dominion Soul Seal | 3 |
57 57
58 Deal positive damage while participating in an eligible boss encounter to receive the matching character-bound seal. At most six seals are issued for each stage—exactly enough for all six branches. The inventory item is only a visible receipt for the authoritative character ledger: copying, dropping, or trading it cannot duplicate progression. If the inventory is full, its receipt is delivered when space becomes available.
58 After a world gate opens, deal positive damage while participating in any boss kill to gain one character-bound seal for the highest unlocked stage and every earlier stage at the same time: Awakening after Skeletron; Awakening plus Boundary in Hardmode; all three after the mechanical trio. At most six seals are issued for each stage—exactly enough for all six branches—and a capped stage does not block the others. The inventory item is only a visible receipt for the authoritative character ledger: copying, dropping, or trading it cannot duplicate progression. If the inventory is full, its receipt is delivered when space becomes available.
59 59
60 60 Each unique skill caps at Lv.3. Stage illumination grants Lv.1 for free; Lv.2 costs 50 character souls and Lv.3 costs 100 character souls.
61 61
@@ -97,7 +97,7 @@ The first 3.0 load scans the inventory, Piggy Bank, Safe, Defender's Forge, and
97 97 - A normal enemy must first receive Death Mark from the Harvest Sickle. Its reward scales with maximum life and caps at 50 souls.
98 98 - Every player who lands a valid sickle hit during a boss encounter receives the full soul reward, capped at 500; it is not divided among the party.
99 99 - The character-bound Death Domain exists from the start. Each Soul Refinement level increases harvested souls by 10%, up to +50%.
100 - Soul Seal participation only requires positive damage during the relevant boss encounter, not the final blow. A dead but still connected participant remains eligible.
100 - After the current world gate opens, Soul Seal participation only requires positive damage to any boss, not the final blow. A dead but still connected participant remains eligible for +1 to the highest unlocked stage and every earlier stage.
101 101 - Bosses do not ordinarily drop Soul Essence; condense it from character souls through the Soul Icon or use existing essence items.
102 102 - Wings of Death retain flight-time, horizontal-speed, acceleration, and vertical-power branches, with infinite flight after all four are complete.
103 103 - The Death Robe retains defense, life, regeneration, mobility, summon, utility, and individual debuff-immunity branches.
@@ -122,6 +122,8 @@ Close tModLoader or disable the loaded mod before packaging because the running
122 122 ## Documentation and links
123 123
124 124 - [English gameplay guide](docs/PLAY_GUIDE.md)
125 - [Debug command reference](docs/DEBUG_COMMANDS.md)
126 - [中文调试命令文档](docs/DEBUG_COMMANDS.zh-Hans.md)
125 127 - [简体中文 README](README.zh-Hans.md)
126 128 - [简体中文玩法指南](docs/PLAY_GUIDE.zh-Hans.md)
127 129 - [Repository](https://git.xfe.studio/XFEstudio/DeathMod)
Modified README.zh-Hans.md +4 -2
@@ -55,7 +55,7 @@ Soul Harvest(内部模组名 `SoulHarvest`)是一款围绕人物灵魂、收
55 55 | II · 能力蜕变 | 击败肉山、世界进入困难模式后 | 破界魂印 ×1 | 2 |
56 56 | III · 终极解放 | 新三王全部击败后 | 统御魂印 ×1 | 3 |
57 57
58 参与符合当前层级的 Boss 战并造成有效伤害,可以获得对应的人物绑定魂印。每个阶段最多签发 6 枚,刚好足够点亮六个分支;背包中的魂印物品只是人物账本的可见凭证,复制、丢弃或交易物品不能复制进度。背包已满时,凭证会在有空间后补发。
58 阶段门槛开放后,参与击杀任意 Boss 并造成有效伤害,会让当前最高阶段及之前所有阶段的魂印同时 `+1`:骷髅王后获得初醒;困难模式后同时获得初醒与破界;新三王全部击败后同时获得初醒、破界与统御。每个阶段最多签发 6 枚,刚好足够点亮六个分支;满额阶段不会阻止其他阶段继续增加。背包中的魂印物品只是人物账本的可见凭证,复制、丢弃或交易物品不能复制进度。背包已满时,凭证会在有空间后补发。
59 59
60 60 每个独特技能上限为 Lv.3:阶段解锁时免费获得 Lv.1,升级至 Lv.2 消耗 50 人物灵魂,升级至 Lv.3 消耗 100 人物灵魂。
61 61
@@ -97,7 +97,7 @@ Soul Harvest(内部模组名 `SoulHarvest`)是一款围绕人物灵魂、收
97 97 - 普通敌人必须先被收魂镰命中并获得死亡标记;奖励随最大生命增长,最多 50 灵魂。
98 98 - 每位在 Boss 战中用收魂镰留下有效命中的玩家都可获得完整的灵魂奖励,最多 500,不会在队伍间平分。
99 99 - 人物绑定的死亡领域初始即有;“灵魂提炼”每级使实际收割灵魂增加 10%,最高增加 50%。
100 - 阶段魂印的参与判定只要求在对应 Boss 战中造成有效伤害,不限定最后一击;死亡但仍在线的参与者依然可领取。
100 - 阶段魂印的参与判定只要求在当前世界阶段开放后对任意 Boss 造成有效伤害,不限定最后一击;死亡但仍在线的参与者依然可领取当前阶段及之前各 1 点。
101 101 - 灵魂精华不会作为 Boss 的普通掉落;它由人物灵魂通过右侧灵魂图标凝聚,或来自已有的精华物品。
102 102 - 死亡之翼可培养飞行时间、水平速度、加速度和垂直能力,四项圆满后解锁无限飞行。
103 103 - 死神长袍拥有防御、生命、回复、机动、召唤与多项功能/减益免疫分支。
@@ -106,6 +106,8 @@ Soul Harvest(内部模组名 `SoulHarvest`)是一款围绕人物灵魂、收
106 106 ## 文档与链接
107 107
108 108 - [完整中文玩法指南](docs/PLAY_GUIDE.zh-Hans.md)
109 - [中文调试命令文档](docs/DEBUG_COMMANDS.zh-Hans.md)
110 - [English debug command reference](docs/DEBUG_COMMANDS.md)
109 111 - [English gameplay guide](docs/PLAY_GUIDE.md)
110 112 - [项目仓库](https://git.xfe.studio/XFEstudio/DeathMod)
111 113 - [XFEstudio](https://www.xfe.studio/)
Modified description.txt +1 -1
@@ -7,7 +7,7 @@ QUICK START
7 7 2. Right-click the Soul Icon in the upper-right to spend 100 souls and extract 1 Soul Essence. Left-click it to absorb 1 Soul Essence back into 100 souls.
8 8 3. Craft a Harvest Sickle from 10 Wood and 5 Iron or Lead Bars at an anvil. Craft a Death Altar from 1 Soul Essence at a Work Bench.
9 9 4. Place and right-click the altar. Select the character-bound Harvest Sickle or Death Domain, or an eligible robe, wing, or necklace from the left list. Click a node, review it on the right, then press the confirmation button to purchase it.
10 5. Participate in eligible boss fights to earn character-bound Soul Seals: Stage I after Skeletron, Stage II after entering Hardmode, and Stage III after all three mechanical bosses.
10 5. After a stage opens, participate in any boss kill: after Skeletron gain +1 Awakening; in Hardmode gain +1 Awakening and Boundary; after all three mechanical bosses gain +1 to all three seals.
11 11
12 12 DEFAULT CONTROLS
13 13 - Mouse1: current form's primary combo
Modified description_workshop.txt +1 -1
@@ -37,7 +37,7 @@ All six form branches can be trained in parallel. Illuminating a stage never con
37 37 [*][b]Stage II · Metamorphosis:[/b] enter Hardmode, earn a Boundary Soul Seal, and spend 2 Soul Essence.
38 38 [*][b]Stage III · Ultimate Release:[/b] defeat all three mechanical bosses, earn a Dominion Soul Seal, and spend 3 Soul Essence.
39 39 [/list]
40 Deal positive damage during an eligible boss encounter to receive its character-bound seal. At most six seals are issued for each stage—exactly enough for all six branches. The inventory seal is only a visible receipt; the character ledger is authoritative.
40 After a stage gate opens, deal positive damage during any boss kill to gain one character-bound seal for the highest unlocked stage and every earlier stage at once: Awakening after Skeletron; Awakening plus Boundary in Hardmode; all three after the mechanical trio. Each stage caps at six, and a capped stage does not block the others. The inventory seal is only a visible receipt; the character ledger is authoritative.
41 41
42 42 [h2]Default controls[/h2]
43 43 [table]
Modified description_workshop_zh-Hans.txt +1 -1
@@ -37,7 +37,7 @@
37 37 [*][b]阶段 II · 能力蜕变:[/b]进入困难模式,获得破界魂印,消耗 2 灵魂精华。
38 38 [*][b]阶段 III · 终极解放:[/b]击败全部新三王,获得统御魂印,消耗 3 灵魂精华。
39 39 [/list]
40 参与对应 Boss 战并造成正伤害即可取得人物绑定魂印。每个阶段最多签发 6 枚,刚好点亮六个分支;背包中的魂印只是可见凭证,人物账本才是实际进度。
40 阶段开放后,参与击杀任意 Boss 并造成正伤害,当前最高阶段及之前所有阶段的魂印都会同时 +1:骷髅王后获得初醒;困难模式后获得初醒与破界;新三王后同时获得三种。每阶段最多签发 6 枚,满额阶段不会阻止其他阶段增加;背包中的魂印只是可见凭证,人物账本才是实际进度。
41 41
42 42 [h2]默认操作[/h2]
43 43 [table]
Modified description_zh-Hans.txt +1 -1
@@ -7,7 +7,7 @@
7 7 2. 右键右上角灵魂图标,消耗 100 灵魂提取 1 个灵魂精华;左键可将 1 个灵魂精华重新吸收为 100 灵魂。
8 8 3. 在铁砧或铅砧使用 10 木材与 5 铁锭/铅锭制作收魂镰;在工作台使用 1 个灵魂精华制作死神祭坛。
9 9 4. 放置并右键祭坛。从左侧选择人物绑定的收魂镰、死亡领域,或背包中的长袍、翅膀与项链。点击节点只会查看详情,必须再按右侧确认按钮才会购买升级。
10 5. 参与对应阶段的 Boss 战以获得人物绑定魂印:骷髅王后开放阶段 I,进入困难模式后开放阶段 II,击败全部新三王后开放阶段 III。
10 5. 阶段开放后参与击杀任意 Boss:骷髅王后初醒 +1;困难模式后初醒、破界各 +1;新三王后初醒、破界、统御各 +1。
11 11
12 12 默认操作
13 13 - Mouse1:当前形态左键连段
Added docs/DEBUG_COMMANDS.md +36 -0
@@ -0,0 +1,36 @@
1 # Soul Harvest Debug Commands
2
3 This document lists the development and regression-testing commands provided by Soul Harvest 3.0.
4
5 ## Requirements
6
7 - Commands are available only in worlds whose name contains `-debug`, for example `SoulHarvest-debug`.
8 - The caller must be an active in-world player whose character data has finished synchronizing with the server.
9 - In multiplayer, the server validates commands and owns all character-progression changes.
10 - Back up test characters first; debug commands do not create backups.
11
12 ## Command list
13
14 | Command | Effect |
15 | --- | --- |
16 | `/reaperdebugitems` | Spawns one of every player-holdable item from this mod at the player and legally issues one point for each uncapped Awakening, Boundary, and Dominion Seal stage. |
17 | `/reaperdebuggive` | Spawns 999 Soul Essence and fills the Awakening, Boundary, and Dominion Seal ledgers to the per-character cap of 6. |
18 | `/reaperdebugreset` | Rolls back all six branch stages, all 18 form skills, and every character-owned common sickle node, then clears temporary form-combat state. |
19
20 ## `/reaperdebugitems` details
21
22 - The command dynamically enumerates the current build's registered `ModItem` content, so future ordinary items are included automatically.
23 - Ordinary items, equipment, the current Harvest Sickle, and legacy save-compatibility items are spawned at the player's position for pickup.
24 - The Death Domain is not spawned. It is a virtual Death Altar entry representing character-owned domain progression, not a holdable item.
25 - Soul Seal receipts are not forged directly. One point for each stage is issued through the authoritative character ledger, which creates or queues the matching receipt.
26 - A stage already at its six-point issue cap does not increase; other uncapped stages still receive one point.
27 - Use `/reaperdebuggive` when all three Soul Seal stages should be filled to their caps at once.
28
29 ## Suggested test flow
30
31 1. Create a test world with `-debug` in its name.
32 2. Run `/reaperdebugitems` to spawn the full item set.
33 3. Run `/reaperdebuggive` to prepare Soul Essence and full Soul Seal resources.
34 4. Use the Death Altar to test stages, skills, Death Domain progression, and equipment upgrades.
35 5. Run `/reaperdebugreset` when the character progression route needs to be tested again.
36
Added docs/DEBUG_COMMANDS.zh-Hans.md +36 -0
@@ -0,0 +1,36 @@
1 # Soul Harvest 调试命令
2
3 本文列出 Soul Harvest 3.0 提供的开发与回归测试命令。
4
5 ## 使用条件
6
7 - 命令仅能在世界名称包含 `-debug` 时使用,例如 `SoulHarvest-debug`。
8 - 命令必须由已经进入世界、且人物数据完成服务端同步的玩家执行。
9 - 多人模式下由服务端校验和修改人物成长数据。
10 - 建议先备份测试人物;调试命令不会自动生成备份。
11
12 ## 命令列表
13
14 | 命令 | 作用 |
15 | --- | --- |
16 | `/reaperdebugitems` | 在玩家位置生成本模组全部可持有物品各 1 个,并为尚未满额的初醒、破界、统御阶段各合法签发 1 点魂印。 |
17 | `/reaperdebuggive` | 生成 999 个灵魂精华,并将初醒、破界、统御魂印账本分别补至人物上限 6 点。 |
18 | `/reaperdebugreset` | 回退六分支阶段、18 项形态技能和全部人物镰刀通用节点,并清空当前形态的临时战斗状态。 |
19
20 ## `/reaperdebugitems` 细节
21
22 - 命令会动态枚举当前版本已经注册的 `ModItem`,因此以后新增的普通物品会自动包含在内。
23 - 普通物品、装备、当前收魂镰以及为旧存档兼容而保留的旧物品都会在玩家位置生成;请从地面拾取。
24 - `死亡领域`不会生成。它是死神祭坛用于展示人物领域成长的虚拟条目,不是可以持有的物品。
25 - 三种魂印不会被直接伪造为无效物品,而是通过人物账本各签发 1 点,并生成或补发对应凭证。
26 - 单个阶段已经达到 6 点签发上限时不会继续增加;其他未满阶段仍会正常获得 1 点。
27 - 若需要一次将三阶段魂印全部补满,请使用 `/reaperdebuggive`。
28
29 ## 推荐测试流程
30
31 1. 建立名称包含 `-debug` 的测试世界。
32 2. 输入 `/reaperdebugitems` 获取全套物品。
33 3. 输入 `/reaperdebuggive` 准备灵魂精华和完整魂印资源。
34 4. 通过死神祭坛测试阶段、技能、死亡领域和装备升级。
35 5. 需要重新测试成长路线时输入 `/reaperdebugreset`。
36
Modified docs/PLAY_GUIDE.md +11 -8
Modified docs/PLAY_GUIDE.zh-Hans.md +11 -8