feat(dev-save): 用通用跳转工具替换佩佩存档跳转
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,291 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using AibisDream.SaveSystem;
|
||||
using AibisDream.Utility;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AibisDream.EditorTools
|
||||
{
|
||||
/// <summary>
|
||||
/// 将本机 testsavs 归档提升到 StreamingAssets/TestSaveFiles,便于提交与跨机器复用。
|
||||
/// </summary>
|
||||
public sealed class DevSavePromoteWindow : EditorWindow
|
||||
{
|
||||
private string sectionId = "Huoshan1";
|
||||
private string yarnProjectFilter = "FP_Huoshan1";
|
||||
private string sceneFilter = "Scene/HuoShanFixScene";
|
||||
private bool matchYarn = true;
|
||||
private bool matchScene = true;
|
||||
private bool keepLatestPerNode = true;
|
||||
private bool clearSectionFirst;
|
||||
private Vector2 scroll;
|
||||
private string status = "";
|
||||
private List<Candidate> preview = new();
|
||||
|
||||
[MenuItem("Tools/Aibis/Dev Save Promote")]
|
||||
public static void Open()
|
||||
{
|
||||
var window = GetWindow<DevSavePromoteWindow>("Dev Save Promote");
|
||||
window.minSize = new Vector2(520, 420);
|
||||
window.Show();
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EditorGUILayout.LabelField("Promote testsavs → StreamingAssets/TestSaveFiles", EditorStyles.boldLabel);
|
||||
EditorGUILayout.HelpBox(
|
||||
"从本机 TestAutoSaveArchive(testsavs)筛选存档,复制到可提交目录。\n" +
|
||||
$"目标: {ConstRef.TestSaveFilePath}",
|
||||
MessageType.Info);
|
||||
|
||||
sectionId = EditorGUILayout.TextField("Section Id", sectionId);
|
||||
matchYarn = EditorGUILayout.Toggle("Filter by YarnProject", matchYarn);
|
||||
using (new EditorGUI.DisabledScope(!matchYarn))
|
||||
yarnProjectFilter = EditorGUILayout.TextField("YarnProject Id", yarnProjectFilter);
|
||||
matchScene = EditorGUILayout.Toggle("Filter by Scene", matchScene);
|
||||
using (new EditorGUI.DisabledScope(!matchScene))
|
||||
sceneFilter = EditorGUILayout.TextField("Scene Name", sceneFilter);
|
||||
keepLatestPerNode = EditorGUILayout.Toggle("Keep latest per nodeName", keepLatestPerNode);
|
||||
clearSectionFirst = EditorGUILayout.Toggle("Clear section folder first", clearSectionFirst);
|
||||
|
||||
EditorGUILayout.Space(8);
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
if (GUILayout.Button("Refresh Preview", GUILayout.Height(28)))
|
||||
RefreshPreview();
|
||||
if (GUILayout.Button("Promote Selected Filters", GUILayout.Height(28)))
|
||||
Promote();
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(status))
|
||||
EditorGUILayout.HelpBox(status, MessageType.None);
|
||||
|
||||
EditorGUILayout.Space(4);
|
||||
EditorGUILayout.LabelField($"Matches: {preview.Count}", EditorStyles.miniBoldLabel);
|
||||
scroll = EditorGUILayout.BeginScrollView(scroll);
|
||||
foreach (var item in preview)
|
||||
{
|
||||
EditorGUILayout.LabelField(
|
||||
$"{item.FolderName} | node={item.NodeName} | yarn={item.YarnProjectId} | scene={item.SceneName}");
|
||||
}
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
private void RefreshPreview()
|
||||
{
|
||||
preview = CollectCandidates();
|
||||
status = $"Preview {preview.Count} entries from {ConstRef.TestAutoSaveArchivePath}";
|
||||
}
|
||||
|
||||
private void Promote()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(sectionId))
|
||||
{
|
||||
status = "Section Id 不能为空。";
|
||||
return;
|
||||
}
|
||||
|
||||
var candidates = CollectCandidates();
|
||||
if (candidates.Count == 0)
|
||||
{
|
||||
status = "没有匹配的 testsavs 条目。先在 Editor 里打通流程(测试存档模式会写入 testsavs)。";
|
||||
preview = candidates;
|
||||
return;
|
||||
}
|
||||
|
||||
var sectionDir = Path.Combine(ConstRef.TestSaveFilePath, sectionId.Trim());
|
||||
if (clearSectionFirst && Directory.Exists(sectionDir))
|
||||
Directory.Delete(sectionDir, recursive: true);
|
||||
|
||||
Directory.CreateDirectory(sectionDir);
|
||||
EnsureCatalogSection(sectionId.Trim());
|
||||
|
||||
int copied = 0;
|
||||
int index = 1;
|
||||
foreach (var item in candidates.OrderBy(c => c.SavedAt, StringComparer.Ordinal)
|
||||
.ThenBy(c => c.NodeName, StringComparer.Ordinal))
|
||||
{
|
||||
var safeNode = SanitizeFolderName(string.IsNullOrEmpty(item.NodeName) ? "no_node" : item.NodeName);
|
||||
var folderName = $"{index:00}_{safeNode}";
|
||||
var destDir = Path.Combine(sectionDir, folderName);
|
||||
Directory.CreateDirectory(destDir);
|
||||
|
||||
CopyIfExists(item.SnapshotPath, Path.Combine(destDir, $"{ConstRef.SaveSnapshotFileName}.json"));
|
||||
CopyIfExists(item.MetaPath, Path.Combine(destDir, $"{ConstRef.SaveMetaFileName}.json"));
|
||||
copied++;
|
||||
index++;
|
||||
}
|
||||
|
||||
preview = candidates;
|
||||
AssetDatabase.Refresh();
|
||||
status = $"已复制 {copied} 份到 TestSaveFiles/{sectionId.Trim()}";
|
||||
}
|
||||
|
||||
private List<Candidate> CollectCandidates()
|
||||
{
|
||||
var list = new List<Candidate>();
|
||||
if (!Directory.Exists(ConstRef.TestAutoSaveArchivePath))
|
||||
return list;
|
||||
|
||||
foreach (var dir in Directory.GetDirectories(ConstRef.TestAutoSaveArchivePath))
|
||||
{
|
||||
var snapshotPath = Path.Combine(dir, $"{ConstRef.SaveSnapshotFileName}.json");
|
||||
if (!File.Exists(snapshotPath))
|
||||
continue;
|
||||
|
||||
var metaPath = Path.Combine(dir, $"{ConstRef.SaveMetaFileName}.json");
|
||||
SlotMeta meta = null;
|
||||
if (File.Exists(metaPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
meta = JsonConvert.DeserializeObject<SlotMeta>(File.ReadAllText(metaPath, Encoding.UTF8));
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore broken meta
|
||||
}
|
||||
}
|
||||
|
||||
var yarn = meta?.yarnProjectId ?? string.Empty;
|
||||
var scene = meta?.sceneName ?? string.Empty;
|
||||
var node = meta?.nodeName ?? string.Empty;
|
||||
var savedAt = meta?.savedAt ?? string.Empty;
|
||||
|
||||
bool yarnOk = !matchYarn || string.Equals(yarn, yarnProjectFilter, StringComparison.OrdinalIgnoreCase);
|
||||
bool sceneOk = !matchScene || string.Equals(scene, sceneFilter, StringComparison.OrdinalIgnoreCase);
|
||||
if (!yarnOk || !sceneOk)
|
||||
continue;
|
||||
|
||||
list.Add(new Candidate(
|
||||
Path.GetFileName(dir),
|
||||
dir,
|
||||
snapshotPath,
|
||||
File.Exists(metaPath) ? metaPath : null,
|
||||
node,
|
||||
yarn,
|
||||
scene,
|
||||
savedAt));
|
||||
}
|
||||
|
||||
if (!keepLatestPerNode)
|
||||
return list.OrderBy(c => c.SavedAt, StringComparer.Ordinal).ToList();
|
||||
|
||||
return list
|
||||
.GroupBy(c => string.IsNullOrEmpty(c.NodeName) ? c.FolderName : c.NodeName, StringComparer.Ordinal)
|
||||
.Select(g => g.OrderByDescending(c => c.SavedAt, StringComparer.Ordinal).First())
|
||||
.OrderBy(c => c.SavedAt, StringComparer.Ordinal)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private static void EnsureCatalogSection(string sectionId)
|
||||
{
|
||||
var root = ConstRef.TestSaveFilePath;
|
||||
Directory.CreateDirectory(root);
|
||||
var catalogPath = Path.Combine(root, "catalog.json");
|
||||
|
||||
CatalogDto catalog;
|
||||
if (File.Exists(catalogPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
catalog = JsonConvert.DeserializeObject<CatalogDto>(File.ReadAllText(catalogPath, Encoding.UTF8))
|
||||
?? new CatalogDto();
|
||||
}
|
||||
catch
|
||||
{
|
||||
catalog = new CatalogDto();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
catalog = new CatalogDto();
|
||||
}
|
||||
|
||||
catalog.sections ??= new List<CatalogSectionDto>();
|
||||
if (catalog.sections.All(s => !string.Equals(s.id, sectionId, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
catalog.sections.Add(new CatalogSectionDto
|
||||
{
|
||||
id = sectionId,
|
||||
title = sectionId
|
||||
});
|
||||
File.WriteAllText(
|
||||
catalogPath,
|
||||
JsonConvert.SerializeObject(catalog, Formatting.Indented),
|
||||
new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
|
||||
}
|
||||
}
|
||||
|
||||
private static void CopyIfExists(string src, string dest)
|
||||
{
|
||||
if (string.IsNullOrEmpty(src) || !File.Exists(src))
|
||||
return;
|
||||
|
||||
File.Copy(src, dest, overwrite: true);
|
||||
}
|
||||
|
||||
private static string SanitizeFolderName(string name)
|
||||
{
|
||||
foreach (var c in Path.GetInvalidFileNameChars())
|
||||
name = name.Replace(c, '_');
|
||||
name = name.Replace(' ', '_');
|
||||
if (name.Length > 48)
|
||||
name = name.Substring(0, 48);
|
||||
return string.IsNullOrWhiteSpace(name) ? "no_node" : name;
|
||||
}
|
||||
|
||||
private sealed class Candidate
|
||||
{
|
||||
public readonly string FolderName;
|
||||
public readonly string DirectoryPath;
|
||||
public readonly string SnapshotPath;
|
||||
public readonly string MetaPath;
|
||||
public readonly string NodeName;
|
||||
public readonly string YarnProjectId;
|
||||
public readonly string SceneName;
|
||||
public readonly string SavedAt;
|
||||
|
||||
public Candidate(
|
||||
string folderName,
|
||||
string directoryPath,
|
||||
string snapshotPath,
|
||||
string metaPath,
|
||||
string nodeName,
|
||||
string yarnProjectId,
|
||||
string sceneName,
|
||||
string savedAt)
|
||||
{
|
||||
FolderName = folderName;
|
||||
DirectoryPath = directoryPath;
|
||||
SnapshotPath = snapshotPath;
|
||||
MetaPath = metaPath;
|
||||
NodeName = nodeName;
|
||||
YarnProjectId = yarnProjectId;
|
||||
SceneName = sceneName;
|
||||
SavedAt = savedAt;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class CatalogDto
|
||||
{
|
||||
public List<CatalogSectionDto> sections = new();
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class CatalogSectionDto
|
||||
{
|
||||
public string id;
|
||||
public string title;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b8d5e422f3d4df1a53d34d6ca2aa8ad
|
||||
guid: b564a87c642e53646baa39708c8f72ac
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
@@ -19,7 +19,9 @@ namespace AibisDream.Utility
|
||||
|
||||
public const string WishlistURL = "https://store.steampowered.com/app/3473430/_All_Our_Broken_Parts?utm_source=playtest";
|
||||
|
||||
public static readonly string TestSaveFilePath = Application.streamingAssetsPath + "/TestSaveFiles";
|
||||
/// <summary>可提交的开发跳转存档根目录(DevSaveJumpTool)。</summary>
|
||||
public static readonly string TestSaveFilePath =
|
||||
Path.Combine(Application.streamingAssetsPath, "TestSaveFiles");
|
||||
|
||||
public static readonly string SaveFilePath = Path.Combine(Application.persistentDataPath, "AllOurBrokenParts", "saves");
|
||||
|
||||
|
||||
@@ -0,0 +1,467 @@
|
||||
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using AibisDream.SaveSystem;
|
||||
using AibisDream.Utility;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AibisDream
|
||||
{
|
||||
/// <summary>
|
||||
/// 开发用通用跳转工具:从 <see cref="ConstRef.TestSaveFilePath"/>(可提交)读档。
|
||||
/// 目录约定:StreamingAssets/TestSaveFiles/{SectionId}/{EntryFolder}/snapshot.json
|
||||
/// </summary>
|
||||
public class DevSaveJumpTool : MonoBehaviour
|
||||
{
|
||||
private const float UiMargin = 16f;
|
||||
private const float DevButtonWidth = 96f;
|
||||
private const float DevButtonHeight = 34f;
|
||||
private const float MenuWidth = 320f;
|
||||
private const float MaxMenuHeight = 560f;
|
||||
private const float RowHeight = 30f;
|
||||
private const float HeaderHeight = 24f;
|
||||
private const float StatusWidth = 360f;
|
||||
private const float StatusHeight = 28f;
|
||||
private static DevSaveJumpTool instance;
|
||||
|
||||
private bool isJumping;
|
||||
private bool menuOpen;
|
||||
private string status = "";
|
||||
private float statusVisibleUntil;
|
||||
private Vector2 menuScroll;
|
||||
private GUIStyle buttonStyle;
|
||||
private GUIStyle headerStyle;
|
||||
private GUIStyle menuBoxStyle;
|
||||
private GUIStyle statusStyle;
|
||||
private List<DevSaveSection> sections = new();
|
||||
private float cachedContentHeight;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
private static void Bootstrap()
|
||||
{
|
||||
if (instance != null)
|
||||
return;
|
||||
|
||||
var existing = FindObjectOfType<DevSaveJumpTool>();
|
||||
if (existing != null)
|
||||
{
|
||||
instance = existing;
|
||||
DontDestroyOnLoad(existing.gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
var toolObject = new GameObject("[Dev] Save Jump Tool");
|
||||
DontDestroyOnLoad(toolObject);
|
||||
instance = toolObject.AddComponent<DevSaveJumpTool>();
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
ReloadCatalog();
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EnsureStyles();
|
||||
|
||||
float buttonX = Screen.width - UiMargin - DevButtonWidth;
|
||||
float buttonY = Screen.height - UiMargin - DevButtonHeight;
|
||||
var devButtonRect = new Rect(buttonX, buttonY, DevButtonWidth, DevButtonHeight);
|
||||
|
||||
if (menuOpen)
|
||||
DrawCommandMenu(devButtonRect);
|
||||
|
||||
string label = isJumping ? "Busy..." : "Dev";
|
||||
if (GUI.Button(devButtonRect, label, buttonStyle))
|
||||
{
|
||||
if (!menuOpen)
|
||||
ReloadCatalog();
|
||||
menuOpen = !menuOpen;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(status) && Time.unscaledTime < statusVisibleUntil)
|
||||
{
|
||||
float menuHeight = GetMenuHeight();
|
||||
float statusY = menuOpen
|
||||
? buttonY - menuHeight - StatusHeight - UiMargin
|
||||
: buttonY - StatusHeight - 8f;
|
||||
var statusRect = new Rect(
|
||||
Screen.width - UiMargin - StatusWidth,
|
||||
Mathf.Max(UiMargin, statusY),
|
||||
StatusWidth,
|
||||
StatusHeight);
|
||||
GUI.Label(statusRect, status, statusStyle);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawCommandMenu(Rect devButtonRect)
|
||||
{
|
||||
float menuHeight = GetMenuHeight();
|
||||
float menuX = Screen.width - UiMargin - MenuWidth;
|
||||
float menuY = Mathf.Max(UiMargin, devButtonRect.y - menuHeight - 8f);
|
||||
var menuRect = new Rect(menuX, menuY, MenuWidth, menuHeight);
|
||||
|
||||
GUI.Box(menuRect, GUIContent.none, menuBoxStyle);
|
||||
|
||||
var viewRect = new Rect(0f, 0f, MenuWidth - 28f, GetContentHeight());
|
||||
var scrollRect = new Rect(
|
||||
menuRect.x + 6f,
|
||||
menuRect.y + 6f,
|
||||
menuRect.width - 12f,
|
||||
menuRect.height - 12f);
|
||||
|
||||
menuScroll = GUI.BeginScrollView(scrollRect, menuScroll, viewRect);
|
||||
|
||||
float y = 0f;
|
||||
if (sections.Count == 0)
|
||||
{
|
||||
GUI.Label(new Rect(0f, y, MenuWidth - 32f, RowHeight), "No TestSaveFiles found", headerStyle);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < sections.Count; i++)
|
||||
{
|
||||
var section = sections[i];
|
||||
DrawHeader(ref y, section.Title);
|
||||
if (section.Entries.Count == 0)
|
||||
{
|
||||
GUI.Label(
|
||||
new Rect(0f, y, MenuWidth - 32f, RowHeight),
|
||||
"(empty — promote saves first)",
|
||||
statusStyle);
|
||||
y += RowHeight;
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawSaveEntries(ref y, section.Entries);
|
||||
}
|
||||
|
||||
if (i < sections.Count - 1)
|
||||
y += 6f;
|
||||
}
|
||||
}
|
||||
|
||||
GUI.EndScrollView();
|
||||
}
|
||||
|
||||
private void DrawHeader(ref float y, string label)
|
||||
{
|
||||
GUI.Label(new Rect(0f, y, MenuWidth - 32f, HeaderHeight), label, headerStyle);
|
||||
y += HeaderHeight;
|
||||
}
|
||||
|
||||
private void DrawSaveEntries(ref float y, List<DevSaveEntry> entries)
|
||||
{
|
||||
foreach (var entry in entries)
|
||||
{
|
||||
var rect = new Rect(0f, y, MenuWidth - 32f, RowHeight);
|
||||
var captured = entry;
|
||||
DrawCommandButton(rect, captured.Label, !isJumping, () => StartCoroutine(LoadDevSave(captured)));
|
||||
y += RowHeight;
|
||||
}
|
||||
}
|
||||
|
||||
private float GetMenuHeight()
|
||||
{
|
||||
return Mathf.Min(MaxMenuHeight, GetContentHeight() + 12f);
|
||||
}
|
||||
|
||||
private float GetContentHeight()
|
||||
{
|
||||
if (cachedContentHeight > 0f)
|
||||
return cachedContentHeight;
|
||||
|
||||
float height = 0f;
|
||||
if (sections.Count == 0)
|
||||
{
|
||||
height = RowHeight;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < sections.Count; i++)
|
||||
{
|
||||
height += HeaderHeight;
|
||||
int rows = Math.Max(1, sections[i].Entries.Count);
|
||||
height += rows * RowHeight;
|
||||
if (i < sections.Count - 1)
|
||||
height += 6f;
|
||||
}
|
||||
}
|
||||
|
||||
cachedContentHeight = height;
|
||||
return height;
|
||||
}
|
||||
|
||||
private void DrawCommandButton(Rect rect, string label, bool enabled, Action action)
|
||||
{
|
||||
GUI.enabled = enabled;
|
||||
if (GUI.Button(rect, label, buttonStyle))
|
||||
{
|
||||
menuOpen = false;
|
||||
action?.Invoke();
|
||||
}
|
||||
|
||||
GUI.enabled = true;
|
||||
}
|
||||
|
||||
private IEnumerator LoadDevSave(DevSaveEntry entry)
|
||||
{
|
||||
if (isJumping)
|
||||
yield break;
|
||||
|
||||
string savePath = entry.SnapshotPathWithoutExtension;
|
||||
if (string.IsNullOrEmpty(savePath) || !File.Exists(savePath + ".json"))
|
||||
{
|
||||
SetStatus($"Save missing: {entry.Label}", 5f);
|
||||
yield break;
|
||||
}
|
||||
|
||||
isJumping = true;
|
||||
|
||||
if (NeedsResetToMainMenu())
|
||||
{
|
||||
SetStatus($"Resetting: {entry.Label}");
|
||||
GameManager.Instance.QuitGame();
|
||||
yield return WaitForMainMenuReady();
|
||||
}
|
||||
|
||||
SetStatus($"Loading: {entry.Label}");
|
||||
yield return SaveRestoreOrchestrator.RestoreFromFile(savePath);
|
||||
SetStatus($"Loaded: {entry.Label}", 3f);
|
||||
isJumping = false;
|
||||
}
|
||||
|
||||
private static bool NeedsResetToMainMenu()
|
||||
{
|
||||
var gameManager = GameManager.Instance;
|
||||
if (gameManager == null)
|
||||
return false;
|
||||
|
||||
if (gameManager.state.isInGame)
|
||||
return true;
|
||||
|
||||
var sceneLoader = SceneLoader.Instance;
|
||||
return sceneLoader != null && !string.IsNullOrEmpty(sceneLoader.CurrentSceneName);
|
||||
}
|
||||
|
||||
private static IEnumerator WaitForMainMenuReady()
|
||||
{
|
||||
const float timeoutSeconds = 15f;
|
||||
float elapsed = 0f;
|
||||
|
||||
while (elapsed < timeoutSeconds)
|
||||
{
|
||||
var gameManager = GameManager.Instance;
|
||||
var sceneLoader = SceneLoader.Instance;
|
||||
bool sceneCleared = sceneLoader == null || string.IsNullOrEmpty(sceneLoader.CurrentSceneName);
|
||||
bool notInGame = gameManager == null || !gameManager.state.isInGame;
|
||||
|
||||
if (sceneCleared && notInGame)
|
||||
yield break;
|
||||
|
||||
elapsed += Time.unscaledDeltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
Debug.LogWarning("[DevSaveJumpTool] 等待主界面超时,继续读档。");
|
||||
}
|
||||
|
||||
private void ReloadCatalog()
|
||||
{
|
||||
sections = DevSaveCatalog.Load(ConstRef.TestSaveFilePath);
|
||||
cachedContentHeight = 0f;
|
||||
}
|
||||
|
||||
private void SetStatus(string message, float visibleSeconds = 30f)
|
||||
{
|
||||
status = message;
|
||||
statusVisibleUntil = Time.unscaledTime + visibleSeconds;
|
||||
Debug.Log($"[DevSaveJumpTool] {message}");
|
||||
}
|
||||
|
||||
private void EnsureStyles()
|
||||
{
|
||||
if (buttonStyle != null && statusStyle != null)
|
||||
return;
|
||||
|
||||
buttonStyle = new GUIStyle(GUI.skin.button)
|
||||
{
|
||||
fontSize = 14,
|
||||
alignment = TextAnchor.MiddleCenter
|
||||
};
|
||||
|
||||
headerStyle = new GUIStyle(GUI.skin.label)
|
||||
{
|
||||
fontSize = 13,
|
||||
fontStyle = FontStyle.Bold,
|
||||
alignment = TextAnchor.MiddleLeft,
|
||||
padding = new RectOffset(6, 0, 3, 0)
|
||||
};
|
||||
|
||||
menuBoxStyle = new GUIStyle(GUI.skin.box)
|
||||
{
|
||||
padding = new RectOffset(6, 6, 6, 6)
|
||||
};
|
||||
|
||||
statusStyle = new GUIStyle(GUI.skin.box)
|
||||
{
|
||||
fontSize = 13,
|
||||
alignment = TextAnchor.MiddleLeft,
|
||||
padding = new RectOffset(8, 8, 4, 4)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
internal static class DevSaveCatalog
|
||||
{
|
||||
private const string CatalogFileName = "catalog.json";
|
||||
|
||||
public static List<DevSaveSection> Load(string root)
|
||||
{
|
||||
var result = new List<DevSaveSection>();
|
||||
if (string.IsNullOrEmpty(root) || !Directory.Exists(root))
|
||||
return result;
|
||||
|
||||
var catalogPath = Path.Combine(root, CatalogFileName);
|
||||
if (File.Exists(catalogPath))
|
||||
{
|
||||
try
|
||||
{
|
||||
var catalog = JsonConvert.DeserializeObject<CatalogDto>(File.ReadAllText(catalogPath));
|
||||
if (catalog?.sections != null)
|
||||
{
|
||||
foreach (var sectionDto in catalog.sections)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(sectionDto.id))
|
||||
continue;
|
||||
|
||||
var sectionDir = Path.Combine(root, sectionDto.id);
|
||||
var title = string.IsNullOrWhiteSpace(sectionDto.title) ? sectionDto.id : sectionDto.title;
|
||||
result.Add(BuildSection(sectionDto.id, title, sectionDir, sectionDto.entries));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogWarning($"[DevSaveJumpTool] 读取 catalog.json 失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var dir in Directory.GetDirectories(root).OrderBy(d => d, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
var id = Path.GetFileName(dir);
|
||||
result.Add(BuildSection(id, id, dir, null));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static DevSaveSection BuildSection(
|
||||
string id,
|
||||
string title,
|
||||
string sectionDir,
|
||||
List<CatalogEntryDto> explicitEntries)
|
||||
{
|
||||
var entries = new List<DevSaveEntry>();
|
||||
var root = Directory.GetParent(sectionDir)?.FullName;
|
||||
|
||||
if (explicitEntries != null && explicitEntries.Count > 0 && root != null)
|
||||
{
|
||||
foreach (var entryDto in explicitEntries)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(entryDto.path))
|
||||
continue;
|
||||
|
||||
var relative = entryDto.path.Replace('/', Path.DirectorySeparatorChar);
|
||||
var entryDir = Path.IsPathRooted(relative)
|
||||
? relative
|
||||
: Path.Combine(root, relative);
|
||||
var snapshot = Path.Combine(entryDir, ConstRef.SaveSnapshotFileName);
|
||||
if (!File.Exists(snapshot + ".json"))
|
||||
continue;
|
||||
|
||||
var label = string.IsNullOrWhiteSpace(entryDto.label)
|
||||
? FormatFolderLabel(Path.GetFileName(entryDir))
|
||||
: entryDto.label;
|
||||
entries.Add(new DevSaveEntry(label, snapshot));
|
||||
}
|
||||
}
|
||||
else if (Directory.Exists(sectionDir))
|
||||
{
|
||||
foreach (var entryDir in Directory.GetDirectories(sectionDir)
|
||||
.OrderBy(d => d, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
var snapshot = Path.Combine(entryDir, ConstRef.SaveSnapshotFileName);
|
||||
if (!File.Exists(snapshot + ".json"))
|
||||
continue;
|
||||
|
||||
entries.Add(new DevSaveEntry(FormatFolderLabel(Path.GetFileName(entryDir)), snapshot));
|
||||
}
|
||||
}
|
||||
|
||||
return new DevSaveSection(id, title, entries);
|
||||
}
|
||||
|
||||
private static string FormatFolderLabel(string folderName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(folderName))
|
||||
return folderName;
|
||||
|
||||
return folderName.Replace('_', ' ');
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class CatalogDto
|
||||
{
|
||||
public List<CatalogSectionDto> sections;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class CatalogSectionDto
|
||||
{
|
||||
public string id;
|
||||
public string title;
|
||||
public List<CatalogEntryDto> entries;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class CatalogEntryDto
|
||||
{
|
||||
public string label;
|
||||
public string path;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class DevSaveSection
|
||||
{
|
||||
public readonly string Id;
|
||||
public readonly string Title;
|
||||
public readonly List<DevSaveEntry> Entries;
|
||||
|
||||
public DevSaveSection(string id, string title, List<DevSaveEntry> entries)
|
||||
{
|
||||
Id = id;
|
||||
Title = title;
|
||||
Entries = entries ?? new List<DevSaveEntry>();
|
||||
}
|
||||
}
|
||||
|
||||
internal readonly struct DevSaveEntry
|
||||
{
|
||||
public readonly string Label;
|
||||
public readonly string SnapshotPathWithoutExtension;
|
||||
|
||||
public DevSaveEntry(string label, string snapshotPathWithoutExtension)
|
||||
{
|
||||
Label = label;
|
||||
SnapshotPathWithoutExtension = snapshotPathWithoutExtension;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bb148bf10c3ed12439c0cc4d8ef20b99
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,328 +0,0 @@
|
||||
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using AibisDream.SaveSystem;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AibisDream
|
||||
{
|
||||
public class PeipeiMemoryJumpTool : MonoBehaviour
|
||||
{
|
||||
private const float UiMargin = 16f;
|
||||
private const float DevButtonWidth = 96f;
|
||||
private const float DevButtonHeight = 34f;
|
||||
private const float MenuWidth = 300f;
|
||||
private const float MaxMenuHeight = 560f;
|
||||
private const float RowHeight = 30f;
|
||||
private const float HeaderHeight = 24f;
|
||||
private const float StatusWidth = 360f;
|
||||
private const float StatusHeight = 28f;
|
||||
private const string SaveRootFolder = "AllOurBrokenParts";
|
||||
private const string TestSaveFolder = "testsavs";
|
||||
private const string SnapshotFileName = "snapshot";
|
||||
|
||||
private static readonly DevSaveEntry[] Peipei1Saves =
|
||||
{
|
||||
new("PP1 01 Intro", "20260629_191732_683_"),
|
||||
new("PP1 02 Enter Room", "20260629_191737_198_"),
|
||||
new("PP1 03 Body UF", "20260629_191745_604_"),
|
||||
new("PP1 04 UF Deep", "20260629_191747_751_"),
|
||||
new("PP1 05 Body Vision", "20260629_191751_564_"),
|
||||
new("PP1 06 Memory Start", "20260629_191806_710_"),
|
||||
new("PP1 07 Memory Check", "20260629_191807_884_"),
|
||||
new("PP1 08 Analysis", "20260629_191947_383_"),
|
||||
new("PP1 09 Pre Talk", "20260629_191953_429_"),
|
||||
new("PP1 10 Surgery", "20260629_191957_937_"),
|
||||
new("PP1 11 CutLine", "20260629_192000_426_"),
|
||||
new("PP1 12 Recheck", "20260629_192000_744_"),
|
||||
new("PP1 13 Recheck Vision", "20260629_192002_368_"),
|
||||
new("PP1 14 Ending Talk", "20260629_192010_965_")
|
||||
};
|
||||
|
||||
private static readonly DevSaveEntry[] Peipei2Saves =
|
||||
{
|
||||
new("PP2 01 Start", "20260630_142906_700_"),
|
||||
new("PP2 02 Intro", "20260630_142906_849_"),
|
||||
new("PP2 03 First Heat", "20260630_142915_334_"),
|
||||
new("PP2 04 Heat System", "20260630_142918_072_"),
|
||||
new("PP2 05 Body Check", "20260630_142921_707_"),
|
||||
new("PP2 06 UF Locked", "20260630_142923_878_"),
|
||||
new("PP2 07 UF Shell", "20260630_142928_045_"),
|
||||
new("PP2 08 UF Check", "20260630_142931_587_"),
|
||||
new("PP2 09 Eye View", "20260630_142938_533_"),
|
||||
new("PP2 10 Analysis", "20260630_142956_453_"),
|
||||
new("PP2 11 Pre Talk", "20260630_143007_149_"),
|
||||
new("PP2 12 Stop Image", "20260630_143014_716_"),
|
||||
new("PP2 13 Stop Check", "20260630_143020_779_"),
|
||||
new("PP2 14 Cool Fail Talk", "20260630_143042_615_"),
|
||||
new("PP2 15 Remove UF", "20260630_143043_024_"),
|
||||
new("PP2 16 Pre Talk 2", "20260630_143044_410_"),
|
||||
new("PP2 17 Surgery", "20260630_143058_329_"),
|
||||
new("PP2 18 Memory Plugin", "20260630_143100_380_"),
|
||||
new("PP2 19 Ending Talk", "20260630_143118_278_")
|
||||
};
|
||||
|
||||
private static PeipeiMemoryJumpTool instance;
|
||||
|
||||
private bool isJumping;
|
||||
private bool menuOpen;
|
||||
private string status = "";
|
||||
private float statusVisibleUntil;
|
||||
private Vector2 menuScroll;
|
||||
private GUIStyle buttonStyle;
|
||||
private GUIStyle headerStyle;
|
||||
private GUIStyle menuBoxStyle;
|
||||
private GUIStyle statusStyle;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
private static void Bootstrap()
|
||||
{
|
||||
if (instance != null)
|
||||
return;
|
||||
|
||||
var existing = FindObjectOfType<PeipeiMemoryJumpTool>();
|
||||
if (existing != null)
|
||||
{
|
||||
instance = existing;
|
||||
DontDestroyOnLoad(existing.gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
var toolObject = new GameObject("[Dev] Peipei Jump Tool");
|
||||
DontDestroyOnLoad(toolObject);
|
||||
instance = toolObject.AddComponent<PeipeiMemoryJumpTool>();
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
EnsureStyles();
|
||||
|
||||
float buttonX = Screen.width - UiMargin - DevButtonWidth;
|
||||
float buttonY = Screen.height - UiMargin - DevButtonHeight;
|
||||
var devButtonRect = new Rect(buttonX, buttonY, DevButtonWidth, DevButtonHeight);
|
||||
|
||||
if (menuOpen)
|
||||
DrawCommandMenu(devButtonRect);
|
||||
|
||||
string label = isJumping ? "Busy..." : "Dev";
|
||||
if (GUI.Button(devButtonRect, label, buttonStyle))
|
||||
menuOpen = !menuOpen;
|
||||
|
||||
if (!string.IsNullOrEmpty(status) && Time.unscaledTime < statusVisibleUntil)
|
||||
{
|
||||
float menuHeight = GetMenuHeight();
|
||||
float statusY = menuOpen
|
||||
? buttonY - menuHeight - StatusHeight - UiMargin
|
||||
: buttonY - StatusHeight - 8f;
|
||||
var statusRect = new Rect(
|
||||
Screen.width - UiMargin - StatusWidth,
|
||||
Mathf.Max(UiMargin, statusY),
|
||||
StatusWidth,
|
||||
StatusHeight);
|
||||
GUI.Label(statusRect, status, statusStyle);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawCommandMenu(Rect devButtonRect)
|
||||
{
|
||||
float menuHeight = GetMenuHeight();
|
||||
float menuX = Screen.width - UiMargin - MenuWidth;
|
||||
float menuY = Mathf.Max(UiMargin, devButtonRect.y - menuHeight - 8f);
|
||||
var menuRect = new Rect(menuX, menuY, MenuWidth, menuHeight);
|
||||
|
||||
GUI.Box(menuRect, GUIContent.none, menuBoxStyle);
|
||||
|
||||
var viewRect = new Rect(0f, 0f, MenuWidth - 28f, GetContentHeight());
|
||||
var scrollRect = new Rect(
|
||||
menuRect.x + 6f,
|
||||
menuRect.y + 6f,
|
||||
menuRect.width - 12f,
|
||||
menuRect.height - 12f);
|
||||
|
||||
menuScroll = GUI.BeginScrollView(scrollRect, menuScroll, viewRect);
|
||||
|
||||
float y = 0f;
|
||||
DrawHeader(ref y, "Peipei 1");
|
||||
DrawSaveEntries(ref y, Peipei1Saves);
|
||||
y += 6f;
|
||||
DrawHeader(ref y, "Peipei 2");
|
||||
DrawSaveEntries(ref y, Peipei2Saves);
|
||||
|
||||
GUI.EndScrollView();
|
||||
}
|
||||
|
||||
private void DrawHeader(ref float y, string label)
|
||||
{
|
||||
GUI.Label(new Rect(0f, y, MenuWidth - 32f, HeaderHeight), label, headerStyle);
|
||||
y += HeaderHeight;
|
||||
}
|
||||
|
||||
private void DrawSaveEntries(ref float y, DevSaveEntry[] entries)
|
||||
{
|
||||
foreach (var entry in entries)
|
||||
{
|
||||
var rect = new Rect(0f, y, MenuWidth - 32f, RowHeight);
|
||||
DrawCommandButton(rect, entry.Label, !isJumping, () => StartCoroutine(LoadDevSave(entry)));
|
||||
y += RowHeight;
|
||||
}
|
||||
}
|
||||
|
||||
private static float GetMenuHeight()
|
||||
{
|
||||
return Mathf.Min(MaxMenuHeight, GetContentHeight() + 12f);
|
||||
}
|
||||
|
||||
private static float GetContentHeight()
|
||||
{
|
||||
return HeaderHeight * 2f
|
||||
+ RowHeight * (Peipei1Saves.Length + Peipei2Saves.Length)
|
||||
+ 6f;
|
||||
}
|
||||
|
||||
private void DrawCommandButton(Rect rect, string label, bool enabled, System.Action action)
|
||||
{
|
||||
GUI.enabled = enabled;
|
||||
if (GUI.Button(rect, label, buttonStyle))
|
||||
{
|
||||
menuOpen = false;
|
||||
action?.Invoke();
|
||||
}
|
||||
|
||||
GUI.enabled = true;
|
||||
}
|
||||
|
||||
private IEnumerator LoadDevSave(DevSaveEntry entry)
|
||||
{
|
||||
if (isJumping)
|
||||
yield break;
|
||||
|
||||
string savePath = ResolveSnapshotPath(entry);
|
||||
if (string.IsNullOrEmpty(savePath))
|
||||
{
|
||||
SetStatus($"Save missing: {entry.Label}", 5f);
|
||||
yield break;
|
||||
}
|
||||
|
||||
isJumping = true;
|
||||
|
||||
if (NeedsResetToMainMenu())
|
||||
{
|
||||
SetStatus($"Resetting: {entry.Label}");
|
||||
GameManager.Instance.QuitGame();
|
||||
yield return WaitForMainMenuReady();
|
||||
}
|
||||
|
||||
SetStatus($"Loading: {entry.Label}");
|
||||
yield return SaveRestoreOrchestrator.RestoreFromFile(savePath);
|
||||
SetStatus($"Loaded: {entry.Label}", 3f);
|
||||
isJumping = false;
|
||||
}
|
||||
|
||||
private static bool NeedsResetToMainMenu()
|
||||
{
|
||||
var gameManager = GameManager.Instance;
|
||||
if (gameManager == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (gameManager.state.isInGame)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var sceneLoader = SceneLoader.Instance;
|
||||
return sceneLoader != null && !string.IsNullOrEmpty(sceneLoader.CurrentSceneName);
|
||||
}
|
||||
|
||||
private static IEnumerator WaitForMainMenuReady()
|
||||
{
|
||||
const float timeoutSeconds = 15f;
|
||||
float elapsed = 0f;
|
||||
|
||||
while (elapsed < timeoutSeconds)
|
||||
{
|
||||
var gameManager = GameManager.Instance;
|
||||
var sceneLoader = SceneLoader.Instance;
|
||||
bool sceneCleared = sceneLoader == null || string.IsNullOrEmpty(sceneLoader.CurrentSceneName);
|
||||
bool notInGame = gameManager == null || !gameManager.state.isInGame;
|
||||
|
||||
if (sceneCleared && notInGame)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
elapsed += Time.unscaledDeltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
Debug.LogWarning("[PeipeiMemoryJumpTool] 等待主界面超时,继续读档。");
|
||||
}
|
||||
|
||||
private static string ResolveSnapshotPath(DevSaveEntry entry)
|
||||
{
|
||||
string archiveRoot = Path.Combine(Application.persistentDataPath, SaveRootFolder, TestSaveFolder);
|
||||
if (!Directory.Exists(archiveRoot))
|
||||
return null;
|
||||
|
||||
var matches = Directory.GetDirectories(archiveRoot, entry.DirectoryPrefix + "*");
|
||||
if (matches.Length == 0)
|
||||
return null;
|
||||
|
||||
string path = Path.Combine(matches[0], SnapshotFileName);
|
||||
return File.Exists(path + ".json") ? path : null;
|
||||
}
|
||||
|
||||
private void SetStatus(string message, float visibleSeconds = 30f)
|
||||
{
|
||||
status = message;
|
||||
statusVisibleUntil = Time.unscaledTime + visibleSeconds;
|
||||
Debug.Log($"[PeipeiMemoryJumpTool] {message}");
|
||||
}
|
||||
|
||||
private void EnsureStyles()
|
||||
{
|
||||
if (buttonStyle != null && statusStyle != null)
|
||||
return;
|
||||
|
||||
buttonStyle = new GUIStyle(GUI.skin.button)
|
||||
{
|
||||
fontSize = 14,
|
||||
alignment = TextAnchor.MiddleCenter
|
||||
};
|
||||
|
||||
headerStyle = new GUIStyle(GUI.skin.label)
|
||||
{
|
||||
fontSize = 13,
|
||||
fontStyle = FontStyle.Bold,
|
||||
alignment = TextAnchor.MiddleLeft,
|
||||
padding = new RectOffset(6, 0, 3, 0)
|
||||
};
|
||||
|
||||
menuBoxStyle = new GUIStyle(GUI.skin.box)
|
||||
{
|
||||
padding = new RectOffset(6, 6, 6, 6)
|
||||
};
|
||||
|
||||
statusStyle = new GUIStyle(GUI.skin.box)
|
||||
{
|
||||
fontSize = 13,
|
||||
alignment = TextAnchor.MiddleLeft,
|
||||
padding = new RectOffset(8, 8, 4, 4)
|
||||
};
|
||||
}
|
||||
|
||||
private readonly struct DevSaveEntry
|
||||
{
|
||||
public readonly string Label;
|
||||
public readonly string DirectoryPrefix;
|
||||
|
||||
public DevSaveEntry(string label, string directoryPrefix)
|
||||
{
|
||||
Label = label;
|
||||
DirectoryPrefix = directoryPrefix;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4c04a3fa9effb841aae2e1d46190abb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 310ea530175ce224a842ffbba846d9eb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7cea00cc6cb3f864fb5a6b49d2da3ff0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:50:49",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "开头对话",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 915f4568d4f0cf645a8eb6040ced4016
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:50:49","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"开头对话"},"yarnVariables":{"floats":{},"strings":{},"bools":{}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Clinic"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"Clinic","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":true,"isTaskPanelVisible":false,"tasks":[]},"bodyModule":{"moduleState":"Body","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24b8925a44bfef34ebe7dcdf7f12e49d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b61d79fe2dda11d45a0dc159f8072a17
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:50:56",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "Stage2",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0d9b3ebf9bb5424db53e810149ed3a6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:50:56","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"Stage2"},"yarnVariables":{"floats":{"$gameStage":2.0},"strings":{},"bools":{}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":4.027531,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Clinic"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtEnd","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"Clinic","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":true,"isTaskPanelVisible":false,"tasks":[]},"bodyModule":{"moduleState":"Body","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: efc4faca09377c740a3bd07369047ce1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4eb42136a886f2e4981f8fe194f41666
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:10",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "EmoPlugIn",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb13beb1dd1e8a34db80e4a410905963
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:10","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"EmoPlugIn"},"yarnVariables":{"floats":{"$gameStage":2.0,"$TaskToDo":2.0,"$PlugCount":2.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":121.383659,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Emo","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":["Emo"],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce2a839c6bbbeec46bbcf8ec2b0c4c8f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 651ea75bbd2181d40b89c8e740488b16
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:10",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "检查情绪",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e0d21eba61777664da6edc3faa2837c7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:10","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"检查情绪"},"yarnVariables":{"floats":{"$gameStage":2.0,"$TaskToDo":2.0,"$PlugCount":2.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":121.383659,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Emo","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":["Emo"],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: df18a2f83debc5f4b886fedd0c4d209f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3def1c03545b3d44cb9d9c5e28313414
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:14",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "Stage3",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cd970b0b7fe1e2946b4264d1305630a5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:14","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"Stage3"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":150.60376,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Emo","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0828ab9640e70b46ac24c7702028a9f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aa272d15116ce624687deb2d60e16d16
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:14",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "结束Stage2",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e732a96520018514993a4ad77101f74c
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:14","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"结束Stage2"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":150.60376,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Emo","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3b7121286252cf24aac2f5486b1e0e8c
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 27b74cf2e0061824f89c22176ed655b2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:16",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "SalePlugIn",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aabb958bdc4ae9a4bb0b57640eb8873f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:16","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"SalePlugIn"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":169.545639,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Sale","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":["Sale"],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bee98c8ff63decf42baf3892c0b92bbf
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 637d863631e56f84d893861bf11dedae
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:16",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "检查销售模块",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4f1faf2f66287d45a16442723f24cfc
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:16","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"检查销售模块"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":169.545639,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"pluggedModuleName":"Sale","isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":["Sale"],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 992d2f64260418e449e60da010973edd
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 029259c952e22a641984aed628c22a47
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:19",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "步进查看模式",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 159e7dadd3ad92347b2bbf66dbd982e4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:19","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"步进查看模式"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":189.467789,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Body"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false}]},"fix":{"state":"BodyModule","args":"Head"},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":["Sale"],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36c4b354e843aca46a1126b9d9d2d3be
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f02bb779d546914f8e17860ff2dc5fa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:21",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "步进_情绪输入",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9cfb5d617a80be94db13d7f2ec254607
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:21","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"步进_情绪输入"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":208.18924,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fbabc7b740fdd254cb1147413ad3b8bc
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9dbcc9babf1db7840a582fce36d45cda
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:24",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "销售转动_语义合成",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 453695cc90218b844927ea9735cd3e57
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:24","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"销售转动_语义合成"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":1.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":230.664429,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e32e7f7d84feb7d4bbd38f267aeab0d3
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e7b6e1f7b5f5f2a4888bfecb4cc71335
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:27",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "销售转动_语言审查",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a3d6fa9facdf1d04599e42f2268332d8
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:27","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"销售转动_语言审查"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":2.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":252.615524,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1caab5c45bd30c4478942173e79dd3e6
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1561f08d4572bb4448cf9ec62ba36be1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:29",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "销售模块转动完成",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 063d441ef4ab05341b7b108445179264
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:29","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"销售模块转动完成"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":271.383148,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc4d2277186048442923cbc0575e2ba8
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a7147598b80388a4ab8b20860232872a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:29",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "销售转动_开始",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 600c8e80c31b34f4e81c12f4a18fecfd
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:29","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"销售转动_开始"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":267.265839,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b5794a7796037c49a167592ed25fc23
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b9c59779e06a5f44989281d1500eee47
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:29",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "销售转动_异常检测",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e1e158edf022c4e4697e73baf51cf6c4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:29","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"销售转动_异常检测"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":271.383148,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 97cf9a2ba61f4d347bf80d1918851434
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b60dc4f5cc5ef8458301d82f6dfde96
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:30",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "查看子模块",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 823d319a41a46bc4088e31d934617281
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:30","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"查看子模块"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":277.606049,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 627ed54c392bb5741b89e25b6b685f7c
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e8662b6fa24217c4c8bdc29c2569f46f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:30",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "查询异常进程",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: beeffe981d21f8249a7f3bf3bb2718f5
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:30","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"查询异常进程"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":281.7283,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0571446e0ef555447add12861f548997
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bb301e94c7773b94e98e6879cc04024e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:44",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "处理器单次调节失败",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c049b4e678480614cb0c018f66120de1
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1 @@
|
||||
{"schemaVersion":1,"gameVersion":"0.5.2.1-20260705-010933","savedAt":"2026-07-13 13:51:44","scene":{"sceneName":"Scene/HuoShanFixScene"},"anchor":{"sceneSoName":"Day2_FIRST_HS1","yarnProjectId":"FP_Huoshan1","nodeName":"处理器单次调节失败"},"yarnVariables":{"floats":{"$gameStage":3.0,"$TaskToDo":2.0,"$PlugCount":3.0,"$salesTurnIndex":3.0,"$knobFailCount":2.0},"strings":{},"bools":{"$global.IsPlugHighLight":true,"$speakerChecked":true,"$colorChecked":true,"$emoChecked":true}},"sections":{"env":{"curTime":"Day","curWeather":"Sunny","isInitialized":true},"actor":{"actors":[{"actorName":"火山","slotName":"clinic","actorType":"Anima","stateName":"捂头表情idle","stateNormalizedTime":388.123322,"alpha":1.0,"isTalking":false}]},"audio":{"musicPaths":{},"sfxPaths":{},"ambState":"Main"},"timeline":{"entries":[{"directorName":"进入维修间","isActive":true,"phase":"AtStart","hasEverAppliedPlayback":true},{"directorName":"引擎仓面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"插线面板","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"钳子","isActive":true,"phase":"AtStart","loadedAddressableKey":"摘走盖子","hasEverAppliedPlayback":true},{"directorName":"火山Glitch","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"火山表达模块","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"透镜","isActive":true,"phase":"Stopped","hasEverAppliedPlayback":false},{"directorName":"步进模式","isActive":true,"phase":"AtStart","loadedAddressableKey":"进入步进模式","hasEverAppliedPlayback":true}]},"fix":{"state":"Sales","args":""},"fixPanel":{"isSystemOn":true,"currentRepairSystemType":"BodyModuleSystem","isCableRetracted":false,"isTaskPanelVisible":true,"tasks":[{"lineId":"line:0c51688","text":"● 检查情绪模块"},{"lineId":"line:018dc78","text":"● 检查销售语言拓展模块处理链路"}]},"bodyModule":{"moduleState":"Head","isUFCoverRemoved":false,"isUFRemoved":false,"isColorRemoved":false,"isChipRemoved":false,"highlightedModules":[],"alarmedModules":[]},"screen":{"saturationWeight":0.0,"isFadeScreenCovered":false}}}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb60678d3606f8749b80581582083280
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 186e9229afa83a34e94ed524aa29c35b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"slotIndex": -1,
|
||||
"savedAt": "2026-07-13 13:51:44",
|
||||
"sceneName": "Scene/HuoShanFixScene",
|
||||
"sceneSoName": "Day2_FIRST_HS1",
|
||||
"yarnProjectId": "FP_Huoshan1",
|
||||
"nodeName": "旋钮调节",
|
||||
"schemaVersion": 1,
|
||||
"gameVersion": "0.5.2.1-20260705-010933",
|
||||
"thumbnailFile": "thumbnail.png"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user