Fix wallet destroy fund loss, Tumbler progress timing, settle idempotence, bounds guards (from external review)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d0054443ec
commit
4501807cd2
5 files changed
+38
-10
No files matched your search
@@ -26,8 +26,8 @@ namespace Decentralized
|
||||
if (t.TryStart(day, Unlock.MixerUnlocked)) Log.Info($"Tumbler 剧情开始:第 {t.StartDay} 天第一次上门");
|
||||
int due = t.Due(day);
|
||||
if (due == 0) return;
|
||||
t.Visited(day);
|
||||
if (due == 4 && t.Choice == Tumbler.Report) { Log.Info("Tumbler 已被举报,不再上门"); Session.Save(); return; }
|
||||
// 举报之后第 4 次不上门;其余的上门要等对话真正走完才算数(当天没聊完、被清场或读档重来,明天照样来)
|
||||
if (due == 4 && t.Choice == Tumbler.Report) { t.Visited(day); Log.Info("Tumbler 已被举报,不再上门"); Session.Save(); return; }
|
||||
var c = Visit(due, t.Choice);
|
||||
manager.AddNextClient(c);
|
||||
Log.Info($"Tumbler 第 {due} 次上门(选择 {t.Choice})");
|
||||
@@ -71,8 +71,8 @@ namespace Decentralized
|
||||
var d = Session.Data;
|
||||
switch (n)
|
||||
{
|
||||
case 1: Lines(c, c.mainDialogue, "tumbler.v1.", 4).SetEndAction(Leave); break;
|
||||
case 2: Lines(c, c.mainDialogue, "tumbler.v2.", 3).SetEndAction(Leave); break;
|
||||
case 1: Lines(c, c.mainDialogue, "tumbler.v1.", 4).SetEndAction(() => Finish(1)); break;
|
||||
case 2: Lines(c, c.mainDialogue, "tumbler.v2.", 3).SetEndAction(() => Finish(2)); break;
|
||||
case 3:
|
||||
{
|
||||
var ask = new Dialogue();
|
||||
@@ -91,11 +91,11 @@ namespace Decentralized
|
||||
if (choice == Tumbler.Hide)
|
||||
{
|
||||
bool has = EmporiumEntry.Instance != null && EmporiumEntry.Instance.GetAllOwnedItems().Any(i => i != null && i.identifier == Items.KeyDrive);
|
||||
if (has) Lines(c, c.mainDialogue, "tumbler.v4.back.", 3).SetEndAction(() => { Returned(); Leave(); });
|
||||
else Lines(c, c.mainDialogue, "tumbler.v4.lost.", 3).SetEndAction(Leave);
|
||||
if (has) Lines(c, c.mainDialogue, "tumbler.v4.back.", 3).SetEndAction(() => { Returned(); Finish(4); });
|
||||
else Lines(c, c.mainDialogue, "tumbler.v4.lost.", 3).SetEndAction(() => Finish(4));
|
||||
}
|
||||
else if (choice == Tumbler.Sell) Lines(c, c.mainDialogue, "tumbler.v4.sold.", 3).SetEndAction(Leave);
|
||||
else Lines(c, c.mainDialogue, "tumbler.v4.none.", 1).SetEndAction(Leave); // 第 3 次没做选择(被遣散)
|
||||
else if (choice == Tumbler.Sell) Lines(c, c.mainDialogue, "tumbler.v4.sold.", 3).SetEndAction(() => Finish(4));
|
||||
else Lines(c, c.mainDialogue, "tumbler.v4.none.", 1).SetEndAction(() => Finish(4));
|
||||
break;
|
||||
}
|
||||
c.AddBasicDialog();
|
||||
@@ -105,6 +105,19 @@ namespace Decentralized
|
||||
|
||||
private static void Leave() => DialogUIManager.Instance.CurrentClientLeave();
|
||||
|
||||
/// <summary>第 n 次上门的对话走完:进度推进一步(只在这一次还没记过时),存档,顾客离开。</summary>
|
||||
private static void Finish(int n)
|
||||
{
|
||||
Log.Guard("Tumbler 上门结束", () =>
|
||||
{
|
||||
var t = Session.Data.Story.Tumbler;
|
||||
if (t.Stage == n - 1) t.Visited(StoreStation.GetDayCounter());
|
||||
Log.Info($"Tumbler 第 {n} 次上门结束,进度 {t.Stage}");
|
||||
Session.Save();
|
||||
});
|
||||
Leave();
|
||||
}
|
||||
|
||||
/// <summary>第 3 次上门做出的选择。</summary>
|
||||
private static void Choose(int choice)
|
||||
{
|
||||
@@ -112,6 +125,7 @@ namespace Decentralized
|
||||
{
|
||||
var d = Session.Data;
|
||||
d.Story.Tumbler.Choice = choice;
|
||||
if (d.Story.Tumbler.Stage == 2) d.Story.Tumbler.Visited(StoreStation.GetDayCounter());
|
||||
int day = StoreStation.GetDayCounter();
|
||||
switch (choice)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user