修了不少东西

This commit is contained in:
FloatGaming
2026-07-16 23:04:59 +08:00
parent 29972d0705
commit 73fe474cc6
134 changed files with 7673 additions and 741 deletions
View File
+24
View File
@@ -0,0 +1,24 @@
<linker>
<assembly fullname="Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
<type fullname="UnityEngine.AddressableAssets.Addressables" preserve="all" />
</assembly>
<assembly fullname="Unity.Localization, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Localization.Locale" preserve="all" />
<type fullname="UnityEngine.Localization.Tables.SharedTableData" preserve="all" />
<type fullname="UnityEngine.Localization.Tables.StringTable" preserve="all" />
<type fullname="UnityEngine.Localization.LocaleIdentifier" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Metadata.MetadataCollection" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.TableEntryData" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.DistributedUIDGenerator" preserve="nothing" serialized="true" />
<type fullname="UnityEngine.Localization.Tables.SharedTableData/SharedTableEntry" preserve="nothing" serialized="true" />
</assembly>
<assembly fullname="Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider" preserve="all" />
<type fullname="UnityEngine.ResourceManagement.ResourceProviders.SceneProvider" preserve="all" />
</assembly>
<assembly fullname="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<type fullname="UnityEngine.Object" preserve="all" />
</assembly>
</linker>
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2664c414003fece4d86a470c718331e1
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -23,7 +23,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579959
m_Localized: Currency amount has reached the upper limit
m_Localized: 算力数量已达到上限
m_Metadata:
m_Items: []
- m_Id: 684762727190529
@@ -341,7 +341,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579961
m_Localized: Failed to grant "Yalimengli Raw Ore"
m_Localized: Failed to grant "记忆碎片"
m_Metadata:
m_Items: []
- m_Id: 684762727190604
@@ -462,7 +462,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762727190694
m_Localized: Yalimengli Raw Ore
m_Localized: 记忆碎片
m_Metadata:
m_Items: []
- m_Id: 684762727190632
@@ -1420,7 +1420,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579991
m_Localized: Currency amount has reached the upper limit
m_Localized: 算力数量已达到上限
m_Metadata:
m_Items: []
- m_Id: 684762735579992
@@ -1472,13 +1472,12 @@ MonoBehaviour:
code(1): operation intercepted
Failed
to grant "Yalimengli Raw Ore"
to grant "记忆碎片"
The server has forbidden reward distribution
Currency
amount has reached the upper limit'
\u7B97\u529B\u6570\u91CF\u5DF2\u8FBE\u5230\u4E0A\u9650'
m_Metadata:
m_Items: []
- m_Id: 684762735580003
@@ -2169,7 +2168,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762727191008
m_Localized: "\u201C\u4E13\u5458\u7B49\u7EA7\u7279\u6280\u201D\n\n\u73A9\u5BB6\u6BCF\u5230\u8FBE\u4E00\u4E2A\u7B49\u7EA7\uFF0C\u53EF\u89E3\u9501\u4E00\u4E2A\u7279\u522B\u7684\u4E13\u5458\u7B49\u7EA7\u6280\u80FD\uFF0C\u8FD9\u4E9B\u6280\u80FD\u53EF\u4F5C\u7528\u4E8E\u5404\u79CD\u65B9\u9762\uFF0C\u60A8\u53EF\u4EE5\u968F\u610F\u5207\u6362\u5DF2\u89E3\u9501\u7684\u6280\u80FD\uFF0C\u83B7\u5F97\u610F\u60F3\u4E0D\u5230\u7684\u5947\u6548\u3002\n\n\u6BCF\u6B21\u5207\u6362\uFF0C\u9700\u8981\u82B1\u8D39<b>\u6700\u5927\u91D1\u5E01\u7684<color=red>1%</color></b>\n\uFF08<color=red>\u6700\u5C11\u82B1\u8D39200\u8D27\u5E01</color>\uFF09\u3002\u66F4\u6362\u4E00\u6B21\u4E13\u5458\u6280\u80FD\u540E\uFF0C\u987B\u7B49\u5F85<b>3</b>\u573A\u6BD4\u8D5B\u51B7\u5374\u540E\u65B9\u53EF\u518D\u6B21\u5207\u6362\u3002"
m_Localized: "\u201C\u4E13\u5458\u7B49\u7EA7\u7279\u6280\u201D\n\n\u73A9\u5BB6\u6BCF\u5230\u8FBE\u4E00\u4E2A\u7B49\u7EA7\uFF0C\u53EF\u89E3\u9501\u4E00\u4E2A\u7279\u522B\u7684\u4E13\u5458\u7B49\u7EA7\u6280\u80FD\uFF0C\u8FD9\u4E9B\u6280\u80FD\u53EF\u4F5C\u7528\u4E8E\u5404\u79CD\u65B9\u9762\uFF0C\u60A8\u53EF\u4EE5\u968F\u610F\u5207\u6362\u5DF2\u89E3\u9501\u7684\u6280\u80FD\uFF0C\u83B7\u5F97\u610F\u60F3\u4E0D\u5230\u7684\u5947\u6548\u3002\n\n\u6BCF\u6B21\u5207\u6362\uFF0C\u9700\u8981\u82B1\u8D39<b>\u6700\u5927\u7B97\u529B\u7684<color=red>1%</color></b>\n\uFF08<color=red>\u6700\u5C11\u82B1\u8D39200\u7B97\u529B</color>\uFF09\u3002\u66F4\u6362\u4E00\u6B21\u4E13\u5458\u6280\u80FD\u540E\uFF0C\u987B\u7B49\u5F85<b>3</b>\u573A\u6BD4\u8D5B\u51B7\u5374\u540E\u65B9\u53EF\u518D\u6B21\u5207\u6362\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762727191009
@@ -7281,7 +7280,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385361
m_Localized: "\u5141\u8BB8\u4F60\u4EE510\u91D1\u5E01\u8D2D\u4E701\u4E2A\u8BB0\u5FC6\u788E\u7247\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Localized: "\u5141\u8BB8\u4F60\u4EE510\u7B97\u529B\u8D2D\u4E701\u4E2A\u8BB0\u5FC6\u788E\u7247\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385362
@@ -7293,7 +7292,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385364
m_Localized: "\u5141\u8BB8\u4F60\u5C061\u4E2A\u8BB0\u5FC6\u788E\u7247\u4EE54\u91D1\u5E01\u552E\u51FA\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Localized: "\u5141\u8BB8\u4F60\u5C061\u4E2A\u8BB0\u5FC6\u788E\u7247\u4EE54\u7B97\u529B\u552E\u51FA\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385365
@@ -7357,7 +7356,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385380
m_Localized: "\u7ED3\u7B97\u65F6\uFF0C\u83B7\u5F97\u5076\u50CF\u5206\u65702\u2030\u7684\u91D1\u5E01\u3002"
m_Localized: "\u7ED3\u7B97\u65F6\uFF0C\u83B7\u5F97\u5076\u50CF\u5206\u65702\u2030\u7684\u7B97\u529B\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385381
@@ -8793,7 +8792,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579333
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579334
@@ -8801,27 +8800,27 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579335
m_Localized: "\u7D2F\u8BA1\u83B7\u5F971000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F971000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579336
m_Localized: "\u7D2F\u8BA1\u83B7\u5F975000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F975000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579337
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9710000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9710000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579338
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9750000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9750000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579339
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579340
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97500000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97500000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579341
@@ -10781,7 +10780,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579824
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579825
@@ -10793,7 +10792,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579827
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579828
@@ -10805,7 +10804,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579830
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579831
@@ -10817,7 +10816,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579833
m_Localized: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Localized: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579834
@@ -11158,7 +11157,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579918
m_Localized: "\u6D88\u8D39 2000 coins"
m_Localized: "\u6D88\u8D39 2000 \u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579919
@@ -1945,7 +1945,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762727191008
m_Localized: "\u201C\u4E13\u5458\u7B49\u7EA7\u7279\u6280\u201D\n\n\u73A9\u5BB6\u6BCF\u5230\u8FBE\u4E00\u4E2A\u7B49\u7EA7\uFF0C\u53EF\u89E3\u9501\u4E00\u4E2A\u7279\u522B\u7684\u4E13\u5458\u7B49\u7EA7\u6280\u80FD\uFF0C\u8FD9\u4E9B\u6280\u80FD\u53EF\u4F5C\u7528\u4E8E\u5404\u79CD\u65B9\u9762\uFF0C\u60A8\u53EF\u4EE5\u968F\u610F\u5207\u6362\u5DF2\u89E3\u9501\u7684\u6280\u80FD\uFF0C\u83B7\u5F97\u610F\u60F3\u4E0D\u5230\u7684\u5947\u6548\u3002\n\n\u6BCF\u6B21\u5207\u6362\uFF0C\u9700\u8981\u82B1\u8D39<b>\u6700\u5927\u91D1\u5E01\u7684<color=red>1%</color></b>\n\uFF08<color=red>\u6700\u5C11\u82B1\u8D39200\u8D27\u5E01</color>\uFF09\u3002\u66F4\u6362\u4E00\u6B21\u4E13\u5458\u6280\u80FD\u540E\uFF0C\u987B\u7B49\u5F85<b>3</b>\u573A\u6BD4\u8D5B\u51B7\u5374\u540E\u65B9\u53EF\u518D\u6B21\u5207\u6362\u3002"
m_Localized: "\u201C\u4E13\u5458\u7B49\u7EA7\u7279\u6280\u201D\n\n\u73A9\u5BB6\u6BCF\u5230\u8FBE\u4E00\u4E2A\u7B49\u7EA7\uFF0C\u53EF\u89E3\u9501\u4E00\u4E2A\u7279\u522B\u7684\u4E13\u5458\u7B49\u7EA7\u6280\u80FD\uFF0C\u8FD9\u4E9B\u6280\u80FD\u53EF\u4F5C\u7528\u4E8E\u5404\u79CD\u65B9\u9762\uFF0C\u60A8\u53EF\u4EE5\u968F\u610F\u5207\u6362\u5DF2\u89E3\u9501\u7684\u6280\u80FD\uFF0C\u83B7\u5F97\u610F\u60F3\u4E0D\u5230\u7684\u5947\u6548\u3002\n\n\u6BCF\u6B21\u5207\u6362\uFF0C\u9700\u8981\u82B1\u8D39<b>\u6700\u5927\u7B97\u529B\u7684<color=red>1%</color></b>\n\uFF08<color=red>\u6700\u5C11\u82B1\u8D39200\u7B97\u529B</color>\uFF09\u3002\u66F4\u6362\u4E00\u6B21\u4E13\u5458\u6280\u80FD\u540E\uFF0C\u987B\u7B49\u5F85<b>3</b>\u573A\u6BD4\u8D5B\u51B7\u5374\u540E\u65B9\u53EF\u518D\u6B21\u5207\u6362\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762727191009
@@ -7057,7 +7057,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385361
m_Localized: "\u5141\u8BB8\u4F60\u4EE510\u91D1\u5E01\u8D2D\u4E701\u4E2A\u8BB0\u5FC6\u788E\u7247\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Localized: "\u5141\u8BB8\u4F60\u4EE510\u7B97\u529B\u8D2D\u4E701\u4E2A\u8BB0\u5FC6\u788E\u7247\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385362
@@ -7069,7 +7069,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385364
m_Localized: "\u5141\u8BB8\u4F60\u5C061\u4E2A\u8BB0\u5FC6\u788E\u7247\u4EE54\u91D1\u5E01\u552E\u51FA\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Localized: "\u5141\u8BB8\u4F60\u5C061\u4E2A\u8BB0\u5FC6\u788E\u7247\u4EE54\u7B97\u529B\u552E\u51FA\u3002\u88C5\u5907\u6B64\u6280\u80FD\u65F6\u53EF\u4E8E\u5546\u5E97\u89E3\u9501\u4E00\u4E2A\u8D2D\u4E70\u9009\u9879\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385365
@@ -7133,7 +7133,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762731385380
m_Localized: "\u7ED3\u7B97\u65F6\uFF0C\u83B7\u5F97\u5076\u50CF\u5206\u65702\u2030\u7684\u91D1\u5E01\u3002"
m_Localized: "\u7ED3\u7B97\u65F6\uFF0C\u83B7\u5F97\u5076\u50CF\u5206\u65702\u2030\u7684\u7B97\u529B\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762731385381
@@ -8569,7 +8569,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579333
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579334
@@ -8577,27 +8577,27 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579335
m_Localized: "\u7D2F\u8BA1\u83B7\u5F971000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F971000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579336
m_Localized: "\u7D2F\u8BA1\u83B7\u5F975000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F975000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579337
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9710000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9710000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579338
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9750000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F9750000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579339
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97100000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579340
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97500000\u91D1\u5E01"
m_Localized: "\u7D2F\u8BA1\u83B7\u5F97500000\u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579341
@@ -10557,7 +10557,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579824
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579825
@@ -10569,7 +10569,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579827
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579828
@@ -10581,7 +10581,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579830
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Localized: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579831
@@ -10593,7 +10593,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579833
m_Localized: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Localized: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
m_Metadata:
m_Items: []
- m_Id: 684762735579834
@@ -10934,7 +10934,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684762735579918
m_Localized: "\u6D88\u8D39 2000 coins"
m_Localized: "\u6D88\u8D39 2000 \u7B97\u529B"
m_Metadata:
m_Items: []
- m_Id: 684762735579919
@@ -264,7 +264,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 684763935150139
m_Localized: Insufficient currency
m_Localized: 算力不足
m_Metadata:
m_Items: []
- m_Id: 684763935150140
@@ -27,4 +27,4 @@ MonoBehaviour:
dushMaterial78022: 0
dushMaterial78023: 0
dushMaterial78024: 0
firstLaunchDate:
firstLaunchDate: 2026-03-16
@@ -10,27 +10,27 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bdd198d96872f3b42bdfc7e262ff2eed, type: 3}
m_Name: 30204_lock
m_Name: 30204_limiaomiao
m_EditorClassIdentifier:
ally_heroName: "\u6D1B\u514B"
ally_heroDesignation: "\u96C5\u8389\u68A6\u7483\u4E4B\u624B"
ally_heroName: "\u9ECE\u5999\u5999"
ally_heroDesignation: "\u6700\u5999\u7684\u89D2\u8272"
ally_heroID: 30204
isUnlocked: 1
allyType: 0
obsessionTag: "\u8FC7\u6FC0\u884C\u4E3A"
sourceDlcId:
ally_heroImage: {fileID: 21300000, guid: 92d84aec8bc325549bc86e20ef310b9e, type: 3}
ally_heroProfile: {fileID: 21300000, guid: 92d84aec8bc325549bc86e20ef310b9e, type: 3}
ally_heroSelectIcon: {fileID: 21300000, guid: b10782ed7cd519a408bcb7b8b4dfc884, type: 3}
ally_heroImage: {fileID: 21300000, guid: 7df561841c29f7c4495809fa26c0fd87, type: 3}
ally_heroProfile: {fileID: 21300000, guid: 7df561841c29f7c4495809fa26c0fd87, type: 3}
ally_heroSelectIcon: {fileID: 21300000, guid: 32a17cd770649ef4ba742170d95271e0, type: 3}
ally_heroIcon: {fileID: 0}
ally_heroPoster: {fileID: 21300000, guid: 64d978f672317b14e9b21f7f6a555f0e, type: 3}
ally_hero_HD_image: {fileID: 21300000, guid: f27edc042c98f264492ea474acb525e8, type: 3}
ally_hero_squareProfile: {fileID: 21300000, guid: 47e3bed563854b248b684b071ccafe38, type: 3}
ally_hero_settleDisplay: {fileID: 21300000, guid: 971b271c3b69c25478ca3cd39adae7f4, type: 3}
ally_heroPoster: {fileID: 21300000, guid: 0037e2eca8c94144db3688d8d960a451, type: 3}
ally_hero_HD_image: {fileID: 21300000, guid: 3f085a9ca0d0c8b41a02c952e6a7bf02, type: 3}
ally_hero_squareProfile: {fileID: 21300000, guid: f14b64b175b40214b9e2b4ba8be24697, type: 3}
ally_hero_settleDisplay: {fileID: 21300000, guid: 4aa2a31f345485c42bd2f44b2488b7f8, type: 3}
ally_heroSpineData: {fileID: 0}
selectedSkinId:
ally_heroThemeColor: {r: 0.10980393, g: 0.10588236, b: 0.1254902, a: 1}
ally_heroDescription: "\u6D1B\u514B\uFF0C\u8FC7\u6FC0\u884C\u4E3A\u7C7B\u6267\u5FF5\u5076\u50CF\u3002\u4ED6\u7684\u6CD5\u529B\u503C\u4E0A\u9650\u76F8\u5F53\u4E4B\u9AD8\uFF0C\u53EF\u5176\u5145\u6EE1\u540E\u91CA\u653E\u7684\u6548\u679C\u76F8\u5F53\u53EF\u89C2\uFF0C\u56E0\u4E3A\u662F\u8FC7\u6FC0\u884C\u4E3A\u7C7B\u6267\u5FF5\uFF0C\u4ED6\u53EF\u4EE5\u5BF9\u540C\u4F34\u4E0B\u624B\uFF0C\u901A\u8FC7\u6D88\u8017\u4ED6\u4EEC\u7684\u751F\u547D\u503C\u4E0E\u6CD5\u529B\u503C\u6765\u63D0\u5347\u81EA\u8EAB\u7684\u5F97\u5206\u6548\u7387\u3002\n\n\u4E0D\u8FC7\uFF0C\u5BF9\u4E8E\u4ED6\u7684\u6545\u4E8B\u3002\u7D22\u5C3C\u5A05\uFF0C\u6211\u4EEC\u9700\u7EE7\u7EED\u6DF1\u5165\uFF0C\u5BFB\u627E\u5230\u66F4\u591A\u4EE5\u8BC1\u660E\u4ED6\u4EEC\u5B58\u5728\u8FC7\u7684\u201C\u8BB0\u5FC6\u788E\u7247\u201D\uFF0C\u624D\u53EF\u4E86\u89E3\u4ED6\u7684\u8EAB\u4E16\u5168\u8C8C......\n\n\u8BE5\u89D2\u8272\u7684\u6267\u5FF5\u6743\u91CD\uFF1A\n\u8FC7\u6FC0\u884C\u4E3A\uFF1A\u8F83\u4F4E\n\u8FF7\u832B\u6216\u51E1\u60F3\uFF1A\u7EDD\u5BF9\u56FA\u6267"
ally_heroDescription: "\u9ECE\u5999\u5999\uFF0C\u8FC7\u6FC0\u884C\u4E3A\u7C7B\u6267\u5FF5\u5076\u50CF\u3002\u5979\u7684\u6CD5\u529B\u503C\u4E0A\u9650\u76F8\u5F53\u4E4B\u9AD8\uFF0C\u53EF\u5176\u5145\u6EE1\u540E\u91CA\u653E\u7684\u6548\u679C\u76F8\u5F53\u53EF\u89C2\uFF0C\u56E0\u4E3A\u662F\u8FC7\u6FC0\u884C\u4E3A\u7C7B\u6267\u5FF5\uFF0C\u5979\u53EF\u4EE5\u5BF9\u540C\u4F34\u4E0B\u624B\uFF0C\u901A\u8FC7\u6D88\u8017\u4ED6\u4EEC\u7684\u751F\u547D\u503C\u4E0E\u6CD5\u529B\u503C\u6765\u63D0\u5347\u81EA\u8EAB\u7684\u5F97\u5206\u6548\u7387\u3002\n\n\u4E0D\u8FC7\uFF0C\u5BF9\u4E8E\u5979\u7684\u6545\u4E8B\u3002\u7D22\u5C3C\u5A05\uFF0C\u6211\u4EEC\u9700\u7EE7\u7EED\u6DF1\u5165\uFF0C\u5BFB\u627E\u5230\u66F4\u591A\u4EE5\u8BC1\u660E\u4ED6\u4EEC\u5B58\u5728\u8FC7\u7684\u201C\u8BB0\u5FC6\u788E\u7247\u201D\uFF0C\u624D\u53EF\u4E86\u89E3\u5979\u7684\u8EAB\u4E16\u5168\u8C8C......\n\n\u8BE5\u89D2\u8272\u7684\u6267\u5FF5\u6743\u91CD\uFF1A\n\u8FC7\u6FC0\u884C\u4E3A\uFF1A\u8F83\u4F4E\n\u8FF7\u832B\u6216\u51E1\u60F3\uFF1A\u7EDD\u5BF9\u56FA\u6267"
levelStats:
- levelName: C
levelID: 1
@@ -258,6 +258,6 @@ MonoBehaviour:
skillDescriptionsText: "\u3010\u534F\u5FC3\u5408\u4F5C\u3011\u76F8\u90BB\u5076\u50CF\u91CA\u653E\u6280\u80FD\u65F6\uFF0C\u81EA\u8EAB\u83B7\u53D6\u7B49\u540C\u4E8E\u6CD5\u529B\u503C\u4E0A\u96502%\u7684\u6CD5\u529B\u503C\uFF1B\u81EA\u8EAB\u83B7\u5F97\u201C\u4EA4\u7ED9\u4F60\uFF01\u201D\u3002\n\n\u201C\u4EA4\u7ED9\u4F60\uFF01\u201D\uFF1A\u5C06\u81EA\u8EAB\u4E0B\u4E00\u6B21\u53D7\u5230\u7684\u4F24\u5BB3\u6216\u83B7\u5F97\u7684\u589E\u76CA\u8F6C\u79FB\u7ED9\u76F8\u90BB\u5076\u50CF\u3002"
thisSkill_levelLimit: 4
isSpecialSkill: 0
equippedSkillGroupIDs: 31e8cc0138e8cc0136e8cc0137e8cc01
equippedSkillGroupIDs: 31e8cc0138e8cc0137e8cc0136e8cc01
equippedEquipment: {fileID: 0}
equippedEquipmentId:
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22201_coins_earned
m_EditorClassIdentifier:
achievementId: 22201
displayName: "\u7D2F\u8BA1\u83B7\u5F97100\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F97100\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 0
description: "\u7D2F\u8BA1\u83B7\u5F97100\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F97100\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 0
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22202_coins_earned
m_EditorClassIdentifier:
achievementId: 22202
displayName: "\u7D2F\u8BA1\u83B7\u5F971000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F971000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 1
description: "\u7D2F\u8BA1\u83B7\u5F971000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F971000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 1
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22203_coins_earned
m_EditorClassIdentifier:
achievementId: 22203
displayName: "\u7D2F\u8BA1\u83B7\u5F975000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F975000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 2
description: "\u7D2F\u8BA1\u83B7\u5F975000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F975000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 2
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22204_coins_earned
m_EditorClassIdentifier:
achievementId: 22204
displayName: "\u7D2F\u8BA1\u83B7\u5F9710000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F9710000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 3
description: "\u7D2F\u8BA1\u83B7\u5F9710000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F9710000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 3
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22205_coins_earned
m_EditorClassIdentifier:
achievementId: 22205
displayName: "\u7D2F\u8BA1\u83B7\u5F9750000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F9750000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 4
description: "\u7D2F\u8BA1\u83B7\u5F9750000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F9750000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 4
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22206_coins_earned
m_EditorClassIdentifier:
achievementId: 22206
displayName: "\u7D2F\u8BA1\u83B7\u5F97100000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F97100000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 5
description: "\u7D2F\u8BA1\u83B7\u5F97100000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F97100000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 5
hiddenUntilUnlocked: 1
@@ -13,10 +13,10 @@ MonoBehaviour:
m_Name: 22207_coins_earned
m_EditorClassIdentifier:
achievementId: 22207
displayName: "\u7D2F\u8BA1\u83B7\u5F97500000\u91D1\u5E01"
displayName: "\u7D2F\u8BA1\u83B7\u5F97500000\u7B97\u529B"
achievementSeriesKey: coins_earned
achievementLevel: 6
description: "\u7D2F\u8BA1\u83B7\u5F97500000\u91D1\u5E01"
description: "\u7D2F\u8BA1\u83B7\u5F97500000\u7B97\u529B"
icon: {fileID: 0}
sortOrder: 6
hiddenUntilUnlocked: 1
@@ -17,9 +17,10 @@ MonoBehaviour:
class_id: 501002
class_name: "\u6863\u6848\u4E13\u5458\u4E0E\u52A9\u7406Sonia"
class_image: {fileID: 0}
showInBag: 0
itemRarity: 3
usageTag: 0
class_description: "\u6211\u4FDD\u6301\u7740\u6124\u6012\u4F46\u4F60\u770B\u4E0D\u51FA\u6765\n\u56E0\u4E3A\u6211\u6709\u5FAE\u7B11\u5507"
class_description: "\u6863\u6848\u4E13\u5458\u4E0E\u52A9\u7406Sonia"
sonList:
- son_isUnlocked: 1
son_id: 0
@@ -17,9 +17,10 @@ MonoBehaviour:
class_id: 501003
class_name: "Bansonic\u516C\u53F8"
class_image: {fileID: 0}
showInBag: 0
itemRarity: 3
usageTag: 0
class_description: "\u6211\u4FDD\u6301\u7740\u6124\u6012\u4F46\u4F60\u770B\u4E0D\u51FA\u6765\n\u56E0\u4E3A\u6211\u6709\u5FAE\u7B11\u5507"
class_description: "\u5173\u4E8EBansonic\u516C\u53F8.......\u8BF4\u6765\u8BDD\u957F"
sonList:
- son_isUnlocked: 1
son_id: 0
@@ -17,9 +17,10 @@ MonoBehaviour:
class_id: 501003
class_name: "Filelink\u5076\u50CF\u6863\u6848\u9986"
class_image: {fileID: 0}
showInBag: 0
itemRarity: 3
usageTag: 0
class_description: "\u6211\u4FDD\u6301\u7740\u6124\u6012\u4F46\u4F60\u770B\u4E0D\u51FA\u6765\n\u56E0\u4E3A\u6211\u6709\u5FAE\u7B11\u5507"
class_description: "\u2014\u2014\u5750\u843D\u4E8E\u8FD9\u5EA7\u57CE\u5E02\u4E00\u4E2A\u76F8\u5F53\u4E0D\u8D77\u773C\u7684\u4F4D\u7F6E"
sonList:
- son_isUnlocked: 1
son_id: 0
@@ -18,7 +18,7 @@ MonoBehaviour:
itemID: 78021
itemSinglePurchaseQty: 1
itemPurchaseQuota: -1
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3B\u3002"
itemDetailedDescription: "\u53EF\u5E2E\u52A9<b>\u7ECF\u9A8C\u8FBE\u5230\u4E0A\u9650</b>\u7684<b>C</b>\u7EA7\u9605\u5386\u5076\u50CF\u7A81\u7834\u5230<b>B</b>\u7EA7\u9605\u5386\uFF08\u7ECF\u9A8C\u503C\u4E0D\u6EE1\u65E0\u6CD5\u4F7F\u7528\uFF09\uFF0C\u6709\u52A9\u4E8E\u8BA9\u5076\u50CF\u8DC3\u8FC1\u3002\n\n\u201C\u8BF7\u672C\u4EBA\u7B7E\u5B57\u201D"
itemUsageTag: 0
isOnShelf: 1
@@ -18,7 +18,7 @@ MonoBehaviour:
itemID: 78022
itemSinglePurchaseQty: 1
itemPurchaseQuota: -1
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684B\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3A\u3002"
itemDetailedDescription: "\u4E00\u9897\u542B\u6709\u5076\u50CF\u7075\u529B\u7684\u6D0B\u8471\uFF0C\u53EF\u5E2E\u52A9<b>\u7ECF\u9A8C\u8FBE\u5230\u4E0A\u9650</b>\u7684<b>B</b>\u7EA7\u9605\u5386\u5076\u50CF\u7A81\u7834\u5230<b>A</b>\u7EA7\u9605\u5386\uFF08\u7ECF\u9A8C\u503C\u4E0D\u6EE1\u65E0\u6CD5\u4F7F\u7528\uFF09\uFF0C\u6709\u52A9\u4E8E\u8BA9\u5076\u50CF\u8DC3\u8FC1\u3002\n\n\u201C\u6863\u6848\u5DF2\u7ECF\u5199\u4E86\u5F97\u67091\u4E2A\u2018W\u2019\u7684\u5B57\u6570\u4E86\u201D"
itemUsageTag: 0
isOnShelf: 1
@@ -18,7 +18,7 @@ MonoBehaviour:
itemID: 78023
itemSinglePurchaseQty: 1
itemPurchaseQuota: -1
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
itemDescription: "\u53EA\u6709\u6EE1\u7ECF\u9A8C\u7684A\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
itemDetailedDescription: "\u53EF\u5E2E\u52A9<b>\u7ECF\u9A8C\u8FBE\u5230\u4E0A\u9650</b>\u7684<b>A</b>\u7EA7\u9605\u5386\u5076\u50CF\u7A81\u7834\u5230<b>S</b>\u7EA7\u9605\u5386\uFF08\u7ECF\u9A8C\u503C\u4E0D\u6EE1\u65E0\u6CD5\u4F7F\u7528\uFF09\uFF0C\u6709\u52A9\u4E8E\u8BA9\u5076\u50CF\u8DC3\u8FC1\u3002\n\n\u201C\u653E\u8FDB\u6211\u7684\u6536\u85CF\u5939\u91CC\u5403\u7070\u5427\uFF01\u201D"
itemUsageTag: 0
isOnShelf: 1
@@ -18,7 +18,7 @@ MonoBehaviour:
itemID: 78024
itemSinglePurchaseQty: 1
itemPurchaseQuota: -1
itemDescription: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u91D1\u5E01\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
itemDescription: "\u6EE1\u7ECF\u9A8C\u7684\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528\u3002\u8DB3\u591F\u6570\u91CF\u7684\u5F52\u6863\u5408\u7EA6\u548C\u4E00\u5B9A\u7B97\u529B\u53EF\u4F7F\u5176\u7A81\u7834\u81F3S\u3002"
itemDetailedDescription: "\u53EF\u5E2E\u52A9<b>\u7ECF\u9A8C\u8FBE\u5230\u4E0A\u9650</b>\u7684<b>C</b>\u7EA7\u9605\u5386\u5076\u50CF\u7A81\u7834\u5230<b>S</b>\u7EA7\u9605\u5386\uFF08\u7ECF\u9A8C\u503C\u4E0D\u6EE1\u65E0\u6CD5\u4F7F\u7528\uFF09\uFF0C\u6709\u52A9\u4E8E\u8BA9\u5076\u50CF\u98DE\u901F\u6210\u957F\uFF0C<b><color=#B84C4C>\u4E0D\u53EF\u5408\u6210</color></b>\u3002\n\n\u201C\u4E00\u591C\u4E4B\u95F4\u5199\u5B8C\u6863\u6848\u5417\uFF1F\u6709\u70B9\u610F\u601D...\u8BA9\u6211\u60F3\u8D77\u4E86\u6211\u7684\u5B66\u751F\u65F6\u671F......\u201D"
itemUsageTag: 0
isOnShelf: 1
@@ -108,6 +108,6 @@ MonoBehaviour:
current_levelProgress: 0
_if_level_is_EASE: 0
max_comboRecord: 0
thisLevel_selectedDifficultyID: 0
thisLevel_selectedDifficultyID: 2
thisLevel_addDateString: 2026-01-01
thisLevel_overallDescription: "\u201C\u4E3A\u4E86\u62A5\u7B54\u4F60\u521A\u521A\u544A\u8BC9\u6211\u8FD9\u4E48\u4E00\u4E2A\u5C0F\u9053\u6D88\u606F\uFF0C\u6211\u53EF\u4EE5\u6EE1\u8DB3\u4F60\u4E00\u4E2A\u613F\u671B\u54E6......\u201D\n\u4ED6\u773C\u7741\u7741\u5730\u770B\u7740\u8FD9\u4E2A\u5973\u4EBA\u5468\u56F4\u7684\u73AF\u5883\u53D8\u5F97\u9EEF\u6DE1\u8D77\u6765\uFF0C\u56E0\u4E3A\u8FD9\u662F\u5728\u573A\u5730\u5185\uFF0C\u6240\u4EE5\u8FD9\u79CD\u73B0\u8C61\u4E0D\u8DB3\u4E3A\u5947\u3002\n\u201C\u771F\u7684\uFF1F\u4EC0\u4E48\u90FD\u53EF\u4EE5\u5417\uFF1F\u201D\n\u201C\u55EF\u54FC\uFF1F\u201D\n\u201C\u628A\u4F60\u5403\u4E86\u8FD9\u987F\u996D\u7684\u996D\u94B1\u4ED8\u4E86\uFF0C\u7136\u540E\u6536\u62FE\u5B8C\u4F60\u7684\u4E1C\u897F\u8D76\u7D27\u8D70\u4EBA\uFF01\u201D"
+4 -2
View File
@@ -3651,6 +3651,8 @@ MonoBehaviour:
globalVolume: {fileID: 387952724}
fadeOutImage: {fileID: 1901335930}
startButtonDelay: 2
blockUIUISceneJump: 0
blockUIUISceneJumpMessage: "\u670D\u52A1\u5668\u6682\u65F6\u4EC5\u9762\u5411\u5185\u6D4B\u7528\u6237\u5F00\u653E\uFF0C\u656C\u8BF7\u671F\u5F85\uFF01"
--- !u!4 &746865343
Transform:
m_ObjectHideFlags: 0
@@ -3766,13 +3768,13 @@ MonoBehaviour:
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 40
m_Alignment: 0
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: TEST_VERSION_ID_MTc3OTkwNDc1Mg==1779904752
m_Text: WINDOWS_STEAM_publicVer_bansonic_1.0.01
--- !u!1 &777304727
GameObject:
m_ObjectHideFlags: 0
+10 -10
View File
@@ -3042,7 +3042,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 272768447}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
@@ -7723,7 +7723,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4408435802669020468, guid: e149567326267f24e857701ac5f23521, type: 3}
propertyPath: m_AnchoredPosition.x
value: 125
value: 150
objectReference: {fileID: 0}
- target: {fileID: 6498247873733825824, guid: e149567326267f24e857701ac5f23521, type: 3}
propertyPath: m_Name
@@ -7751,7 +7751,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 7437470144974653189, guid: e149567326267f24e857701ac5f23521, type: 3}
propertyPath: m_AnchoredPosition.x
value: 375
value: 350
objectReference: {fileID: 0}
- target: {fileID: 8561304957759784465, guid: e149567326267f24e857701ac5f23521, type: 3}
propertyPath: m_Sprite
@@ -9632,8 +9632,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -0.0005493164, y: -0.00021362305}
m_SizeDelta: {x: 160, y: 40.877}
m_AnchoredPosition: {x: -203, y: -77.1}
m_SizeDelta: {x: 136.916, y: 34.98}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &787251157
MonoBehaviour:
@@ -9692,15 +9692,15 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.20784314, g: 0.20784314, b: 0.20784314, a: 1}
m_Color: {r: 0.6273585, g: 0.8201215, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 7f3b1220317607e44bbb8f0e1998044a, type: 3}
m_Type: 1
m_Sprite: {fileID: 21300000, guid: b2043505ccc72894cad39039862aa81f, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
@@ -15159,7 +15159,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 750978032619227304, guid: 2f8645fff0a5d034884405a8e5af53db, type: 3}
propertyPath: m_AnchoredPosition.x
value: 7.279999
value: 7.280014
objectReference: {fileID: 0}
- target: {fileID: 1108773978011324000, guid: 2f8645fff0a5d034884405a8e5af53db, type: 3}
propertyPath: m_Size
@@ -15295,7 +15295,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3980059708193611426, guid: 2f8645fff0a5d034884405a8e5af53db, type: 3}
propertyPath: m_PreferredWidth
value: 643.49994
value: 810
objectReference: {fileID: 0}
- target: {fileID: 4330958655264480670, guid: 2f8645fff0a5d034884405a8e5af53db, type: 3}
propertyPath: m_AnchorMax.y
+9 -9
View File
@@ -14422,8 +14422,8 @@ MonoBehaviour:
tooltipPadding: {x: 16, y: 16, z: 8, w: 8}
overrideSeriesStyle: 1
overrideSymbolStyle: 1
mainSymbolSize: 8
referenceSymbolSize: 7
mainSymbolSize: 3
referenceSymbolSize: 3
mainSymbolType: 2
referenceSymbolType: 2
mainStrokeColor: {r: 0.32156864, g: 0.49411765, b: 1, a: 1}
@@ -19803,7 +19803,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u6253\u5F00\u4E16\u754C\u804A\u5929"
m_Text: "\u201C\u4F17\u5BBE\u6B22\u4E5F\u201D"
--- !u!222 &750480013
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -26642,7 +26642,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &925857631
RectTransform:
m_ObjectHideFlags: 0
@@ -29522,7 +29522,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 71.7, y: -0.00000071526}
m_SizeDelta: {x: 30.893, y: 30.893}
m_SizeDelta: {x: 30, y: 24}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &980586653
MonoBehaviour:
@@ -45487,7 +45487,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ef4bffeda13d7a748973ff9204401c07, type: 3}
m_Name:
m_EditorClassIdentifier:
enableSteamVerification: 1
enableSteamVerification: 0
--- !u!4 &1558855962
Transform:
m_ObjectHideFlags: 0
@@ -48180,7 +48180,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1647287118
RectTransform:
m_ObjectHideFlags: 0
@@ -54791,7 +54791,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1886093564
RectTransform:
m_ObjectHideFlags: 0
@@ -63447,7 +63447,7 @@ MonoBehaviour:
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 2
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+26 -26
View File
@@ -62,7 +62,7 @@
"song.button.artist_info": "Artist: {0} | Illustrator: {1} | Charter: {2}",
"song.details.play_count": "PlayCount: {0}",
"press_start.idle": "Press Enter to continue.",
"store.error.insufficient_currency": "Insufficient currency",
"store.error.insufficient_currency": "算力不足",
"press_start.waiting_banflag": "Waiting for banflag...",
"daily.no_claimable_reward": "No claimable rewards",
"press_start.warning_content": "<color=orange>Test phase</color><color=red>Unauthorized build</color><color=orange> Version: </color><color=red>v1.0.0</color><color=orange>. Please proceed with caution.</color>",
@@ -102,7 +102,7 @@
},
"literals": {
"再次点击以确认此危险操作": "Click again to confirm this dangerous action",
"货币数量已达到上限": "Currency amount has reached the upper limit",
"货币数量已达到上限": "算力数量已达到上限",
"FINAL SCORE": "FINAL SCORE",
"一键启动/重启动": "One-click Start / Restart",
"排行榜": "Leaderboard",
@@ -181,7 +181,7 @@
"TIPS:用毒蛇的毒毒毒蛇": "TIPS:用毒蛇的毒毒毒蛇",
"浮动小游戏": "Floating Mini-Games",
"服务器故障": "Server Error",
"“雅莉梦璃原矿”发放失败": "Failed to grant \"Yalimengli Raw Ore\"",
"“雅莉梦璃原矿”发放失败": "“记忆碎片”发放失败",
"雅莉梦璃风情": "Yalimengli Vibes",
"无法获取玩家信息": "Unable to retrieve player information",
"今日暂无任务": "No tasks available today",
@@ -211,7 +211,7 @@
"Score:": "Score:",
"继续游戏": "Continue",
"敬请期待!": "Coming Soon!",
"雅莉梦璃原矿": "Yalimengli Raw Ore",
"雅莉梦璃原矿": "记忆碎片",
"Good": "Good",
"\\u2014\\u2014\\u2014\\u2014Main Keybinding List\\u2014\\u2014\\u2014\\u2014\\n<color=green>\\\"Space\\": "\\u2014\\u2014\\u2014\\u2014Main Keybinding List\\u2014\\u2014\\u2014\\u2014\\n<color=green>\\\"Space\\",
"官方文档 <color=red>(请仔细阅读!)</color>": "Official Documentation <color=red>(Please read carefully!)</color>",
@@ -401,7 +401,7 @@
"法力上限": "Mana Limit",
"升级": "Upgrade",
"Miss": "Miss",
"无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限": "无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限",
"无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限": "无法发放奖励\ncode(1):操作被拦截\n“记忆碎片”发放失败\n\n服务端已禁止发放奖励\n算力数量已达到上限",
"未知装备材料": "Unknown Equipment Material",
"WRITING STORIES": "WRITING STORIES",
"我是专员你是专员?": "I am the specialist, and you are too?",
@@ -448,7 +448,7 @@
"?????????????????": "Please wait for a future system update. Thank you!",
"??????????????????????????????????????????????????????": "If none of this had happened, you would have been an ordinary idol. I will set aside the rest of the character files and begin my research with you first, Ayano.",
"???? / ????": "Right Mouse Button / Cancel Selection",
"?????????": "Currency amount has reached the upper limit",
"?????????": "算力数量已达到上限",
"???????????????????????????????????????????????????????????????????": "Selecting one or more idols for replay work will increase the idol score earned from this session and improve the overall rewards. We recommend assigning all available idols to the replay lineup.",
"??????ID": "Still a five-character legend ID",
"????banflag???????": "Loaded banflag bridge file info:",
@@ -459,7 +459,7 @@
"??????? / ????????": "Left-click to equip or remove skills / Hover to view skill details",
"code(1):?????": "code(1): operation intercepted",
"??????????": "The server has forbidden reward distribution",
"??????\ncode(1):?????\n????????????\n\n??????????\n?????????": "Unable to grant reward\ncode(1): operation intercepted\nFailed to grant \"Yalimengli Raw Ore\"\n\nThe server has forbidden reward distribution\nCurrency amount has reached the upper limit",
"??????\ncode(1):?????\n????????????\n\n??????????\n?????????": "Unable to grant reward\ncode(1): operation intercepted\nFailed to grant \"记忆碎片\"\n\nThe server has forbidden reward distribution\n算力数量已达到上限",
"??????????????\n<b>???????????????????????????????/?????????????????????????????</b>": "\"Gameplay Statistics\" is coming soon.\n<b>This panel will show key statistics such as accuracy trend lines and average early/late offset charts to help analyze mistakes and weak points during gameplay.</b>",
"???????? <b>????</b>\n\ncode=-80,": "Unable to fetch <b>idol voice-over</b> from the server\n\ncode=-80,",
"???????? <b>????</b>\n\ncode=err_skin30206::00,": "Unable to fetch <b>character outfit</b> from the server\n\ncode=err_skin30206::00,",
@@ -629,7 +629,7 @@
"最多展示<b>100</b>条最近记录。这些数据<b>不会上传</b>,仅在本地供您查看。": "最多展示<b>100</b>条最近记录。这些数据<b>不会上传</b>,仅在本地供您查看。",
"查看最近100场战绩": "查看最近100场战绩",
"允许设置一个自定的百分比黑幕来遮住轨道。最少遮挡20%,最多遮挡90%。每遮挡1%,提供1.5%结算奖励加成。": "允许设置一个自定的百分比黑幕来遮住轨道。最少遮挡20%,最多遮挡90%。每遮挡1%,提供1.5%结算奖励加成。",
"“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。": "“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。",
"“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。": "“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大算力的<color=red>1%</color></b>\n<color=red>最少花费200算力</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。",
"信息/提示/警告/错误": "信息/提示/警告/错误",
"你已获得": "你已获得",
"\"调试已启用 模式<color=red>debug</color>\n——————————\n<color=red>disable</color>": "\"调试已启用 模式<color=red>debug</color>\n——————————\n<color=red>disable</color>",
@@ -1901,26 +1901,26 @@
"你已来到本索尼克世界。赛前准备时,你可以无限制地进入新手教程。": "你已来到本索尼克世界。赛前准备时,你可以无限制地进入新手教程。",
"卸下它时你已不再是新手": "卸下它时你已不再是新手",
"记忆购买计划": "记忆购买计划",
"允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。": "允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。",
"允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。": "允许你以10算力购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。",
"从老师那里新学了什么?": "从老师那里新学了什么?",
"记忆归还计划": "记忆归还计划",
"允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。": "允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。",
"允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。": "允许你将1个记忆碎片以4算力售出。装备此技能时可于商店解锁一个购买选项。",
"老师教给你的又还回去了吗?": "老师教给你的又还回去了吗?",
"挑战者模型": "挑战者模型",
"高风险高回报,好奇心害死猫。": "高风险高回报,好奇心害死猫。",
"赛后感悟": "赛后感悟",
"每进行10场比赛可获得一件随机类型随机属性的记忆。在更换技能时清零计数器。": "每进行10场比赛可获得一件随机类型随机属性的记忆。在更换技能时清零计数器。",
"我爱发明": "我爱发明",
"你的记忆融合和加速所需的货币减半。": "你的记忆融合和加速所需的货币减半。",
"你的记忆融合和加速所需的货币减半。": "你的记忆融合和加速所需的算力减半。",
"追梦之路": "追梦之路",
"结算时,获得偶像分数1‰的记忆碎片。": "结算时,获得偶像分数1‰的记忆碎片。",
"洞察": "洞察",
"你可以看到角色未解锁的技能及其介绍。": "你可以看到角色未解锁的技能及其介绍。",
"你的目光极具战略前瞻性。": "你的目光极具战略前瞻性。",
"95折": "95折",
"消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。": "消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。",
"消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。": "消费记忆碎片和算力时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。",
"利润提取器": "利润提取器",
"结算时,获得偶像分数2‰的金币。": "结算时,获得偶像分数2‰的金币。",
"结算时,获得偶像分数2‰的金币。": "结算时,获得偶像分数2‰的算力。",
"死与税": "死与税",
"顶峰相见": "顶峰相见",
"游戏中你的视角高度提高10%。": "游戏中你的视角高度提高10%。",
@@ -2277,14 +2277,14 @@
"拥有35首歌曲": "拥有35首歌曲",
"拥有50歌曲": "拥有50歌曲",
"拥有50首歌曲": "拥有50首歌曲",
"累计获得100金币": "累计获得100金币",
"累计获得100金币": "累计获得100算力",
"coins_earned": "coins_earned",
"累计获得1000金币": "累计获得1000金币",
"累计获得5000金币": "累计获得5000金币",
"累计获得10000金币": "累计获得10000金币",
"累计获得50000金币": "累计获得50000金币",
"累计获得100000金币": "累计获得100000金币",
"累计获得500000金币": "累计获得500000金币",
"累计获得1000金币": "累计获得1000算力",
"累计获得5000金币": "累计获得5000算力",
"累计获得10000金币": "累计获得10000算力",
"累计获得50000金币": "累计获得50000算力",
"累计获得100000金币": "累计获得100000算力",
"累计获得500000金币": "累计获得500000算力",
"总分累计2500000": "总分累计2500000",
"total_song_best_sum": "total_song_best_sum",
"总分之和达到250万": "总分之和达到250万",
@@ -2313,7 +2313,7 @@
"啥子": "啥子",
"全部歌曲": "全部歌曲",
"全套歌曲": "全套歌曲",
"大量货币": "大量货币",
"大量货币": "大量算力",
"雅莉梦璃币": "雅莉梦璃币",
"用户经验": "用户经验",
"满级用户": "满级用户",
@@ -2768,16 +2768,16 @@
"稀有的超级版”共享单元“,使用后给随机4个未到达突破限制的偶像提供400经验。": "稀有的超级版”共享单元“,使用后给随机4个未到达突破限制的偶像提供400经验。",
"给经验值最低的<b>4</b>个偶像提升<b>400</b>经验值(每个偶像最多获得400经验),有助于让多个偶像得到经验值。<b>非卖品</b>。\n\n“我觉得它还差那么一点。”": "给经验值最低的<b>4</b>个偶像提升<b>400</b>经验值(每个偶像最多获得400经验),有助于让多个偶像得到经验值。<b>非卖品</b>。\n\n“我觉得它还差那么一点。”",
"<color=#4A86B8>三级归档合约</color>": "<color=#4A86B8>三级归档合约</color>",
"只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。": "只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。",
"只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。": "只有满经验的C偶像可用。足够数量的归档合约和一定算力可使其突破至B。",
"可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>B</b>级阅历(经验值不满无法使用),有助于让偶像跃迁。\n\n“请本人签字”": "可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>B</b>级阅历(经验值不满无法使用),有助于让偶像跃迁。\n\n“请本人签字”",
"<color=#6A4C9C>二级归档合约</color>": "<color=#6A4C9C>二级归档合约</color>",
"只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。": "只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。",
"只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。": "只有满经验的B偶像可用。足够数量的归档合约和一定算力可使其突破至A。",
"一颗含有偶像灵力的洋葱,可帮助<b>经验达到上限</b>的<b>B</b>级阅历偶像突破到<b>A</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>5</b>个<b><color=#4A86B8>三级归档合约</color></b>合成。\n\n“档案已经写了得有1个‘W’的字数了”": "一颗含有偶像灵力的洋葱,可帮助<b>经验达到上限</b>的<b>B</b>级阅历偶像突破到<b>A</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>5</b>个<b><color=#4A86B8>三级归档合约</color></b>合成。\n\n“档案已经写了得有1个‘W’的字数了”",
"<color=#B88645>一级归档合约</color>": "<color=#B88645>一级归档合约</color>",
"只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。",
"只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "只有满经验的A偶像可用。足够数量的归档合约和一定算力可使其突破至S。",
"可帮助<b>经验达到上限</b>的<b>A</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>10</b>个<b><color=#6A4C9C>二级归档合约</color></b>合成。\n\n“放进我的收藏夹里吃灰吧!”": "可帮助<b>经验达到上限</b>的<b>A</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>10</b>个<b><color=#6A4C9C>二级归档合约</color></b>合成。\n\n“放进我的收藏夹里吃灰吧!”",
"<color=#B84C4C>终极归档合约</color>": "<color=#B84C4C>终极归档合约</color>",
"满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。",
"满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "满经验的任意阅历资格偶像可用。足够数量的归档合约和一定算力可使其突破至S。",
"可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像飞速成长,<b><color=#B84C4C>不可合成</color></b>。\n\n“一夜之间写完档案吗?有点意思...让我想起了我的学生时期......”": "可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像飞速成长,<b><color=#B84C4C>不可合成</color></b>。\n\n“一夜之间写完档案吗?有点意思...让我想起了我的学生时期......”",
"<color=#6A4C9C>美味小蛋糕</color>": "<color=#6A4C9C>美味小蛋糕</color>",
"一块神秘美味蛋糕。可帮助回忆美好事物。": "一块神秘美味蛋糕。可帮助回忆美好事物。",
@@ -2862,7 +2862,7 @@
"阅读剧情 1 次": "阅读剧情 1 次",
"使用任意经验提升或突破材料 1 次": "使用任意经验提升或突破材料 1 次",
"在线 15 分钟": "在线 15 分钟",
"消费 2000 coins": "消费 2000 coins",
"消费 2000 coins": "消费 2000 算力",
"游玩 3 首不同的歌曲": "游玩 3 首不同的歌曲",
"Lit 2D (URP)": "Lit 2D (URP)",
"Contains an orthographic camera and a Global Light 2D. Works with the 2D Renderer in Universal RP.": "Contains an orthographic camera and a Global Light 2D. Works with the 2D Renderer in Universal RP.",
+22 -22
View File
@@ -62,7 +62,7 @@
"press_start.banflag_found": "已找到 banflag",
"song.details.play_count": "PlayCount: {0}",
"press_start.idle": "按回车键继续。",
"store.error.insufficient_currency": "货币不足",
"store.error.insufficient_currency": "算力不足",
"press_start.waiting_banflag": "等待 banflag...",
"daily.no_claimable_reward": "暂无可领取奖励",
"press_start.warning_content": "<color=orange>当前处于测试阶段</color><color=red>未授权版本</color><color=orange>版本号:</color><color=red>v1.0.0</color><color=orange>,请注意风险。</color>",
@@ -268,7 +268,7 @@
"本难度最佳总分": "本难度最佳总分",
"此操作将重置存档": "此操作将重置存档",
"分享": "分享",
"雅莉梦璃原矿": "雅莉梦璃原矿",
"雅莉梦璃原矿": "记忆碎片",
"New Text": "New Text",
"服务器繁忙": "服务器繁忙",
"Press Enter to continue.": "按回车键继续。",
@@ -395,7 +395,7 @@
"法力上限": "法力上限",
"升级": "升级",
"Miss": "Miss",
"无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限": "无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限",
"无法发放奖励\ncode(1):操作被拦截\n“雅莉梦璃原矿”发放失败\n\n服务端已禁止发放奖励\n货币数量已达到上限": "无法发放奖励\ncode(1):操作被拦截\n“记忆碎片”发放失败\n\n服务端已禁止发放奖励\n算力数量已达到上限",
"好吧,无奈之举": "好吧,无奈之举",
"Button": "Button",
"我是专员你是专员?": "我是专员你是专员?",
@@ -582,7 +582,7 @@
"最多展示<b>100</b>条最近记录。这些数据<b>不会上传</b>,仅在本地供您查看。": "最多展示<b>100</b>条最近记录。这些数据<b>不会上传</b>,仅在本地供您查看。",
"查看最近100场战绩": "查看最近100场战绩",
"允许设置一个自定的百分比黑幕来遮住轨道。最少遮挡20%,最多遮挡90%。每遮挡1%,提供1.5%结算奖励加成。": "允许设置一个自定的百分比黑幕来遮住轨道。最少遮挡20%,最多遮挡90%。每遮挡1%,提供1.5%结算奖励加成。",
"“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。": "“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。",
"“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大金币的<color=red>1%</color></b>\n<color=red>最少花费200货币</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。": "“专员等级特技”\n\n玩家每到达一个等级,可解锁一个特别的专员等级技能,这些技能可作用于各种方面,您可以随意切换已解锁的技能,获得意想不到的奇效。\n\n每次切换,需要花费<b>最大算力的<color=red>1%</color></b>\n<color=red>最少花费200算力</color>)。更换一次专员技能后,须等待<b>3</b>场比赛冷却后方可再次切换。",
"信息/提示/警告/错误": "信息/提示/警告/错误",
"你已获得": "你已获得",
"\"调试已启用 模式<color=red>debug</color>\n——————————\n<color=red>disable</color>": "\"调试已启用 模式<color=red>debug</color>\n——————————\n<color=red>disable</color>",
@@ -1854,26 +1854,26 @@
"你已来到本索尼克世界。赛前准备时,你可以无限制地进入新手教程。": "你已来到本索尼克世界。赛前准备时,你可以无限制地进入新手教程。",
"卸下它时你已不再是新手": "卸下它时你已不再是新手",
"记忆购买计划": "记忆购买计划",
"允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。": "允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。",
"允许你以10金币购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。": "允许你以10算力购买1个记忆碎片。装备此技能时可于商店解锁一个购买选项。",
"从老师那里新学了什么?": "从老师那里新学了什么?",
"记忆归还计划": "记忆归还计划",
"允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。": "允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。",
"允许你将1个记忆碎片以4金币售出。装备此技能时可于商店解锁一个购买选项。": "允许你将1个记忆碎片以4算力售出。装备此技能时可于商店解锁一个购买选项。",
"老师教给你的又还回去了吗?": "老师教给你的又还回去了吗?",
"挑战者模型": "挑战者模型",
"高风险高回报,好奇心害死猫。": "高风险高回报,好奇心害死猫。",
"赛后感悟": "赛后感悟",
"每进行10场比赛可获得一件随机类型随机属性的记忆。在更换技能时清零计数器。": "每进行10场比赛可获得一件随机类型随机属性的记忆。在更换技能时清零计数器。",
"我爱发明": "我爱发明",
"你的记忆融合和加速所需的货币减半。": "你的记忆融合和加速所需的货币减半。",
"你的记忆融合和加速所需的货币减半。": "你的记忆融合和加速所需的算力减半。",
"追梦之路": "追梦之路",
"结算时,获得偶像分数1‰的记忆碎片。": "结算时,获得偶像分数1‰的记忆碎片。",
"洞察": "洞察",
"你可以看到角色未解锁的技能及其介绍。": "你可以看到角色未解锁的技能及其介绍。",
"你的目光极具战略前瞻性。": "你的目光极具战略前瞻性。",
"95折": "95折",
"消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。": "消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。",
"消费记忆碎片和coins时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。": "消费记忆碎片和算力时百分比返还。你每拥有一个偶像,增加消费返还的比例0.5%。最多合计返还5%。",
"利润提取器": "利润提取器",
"结算时,获得偶像分数2‰的金币。": "结算时,获得偶像分数2‰的金币。",
"结算时,获得偶像分数2‰的金币。": "结算时,获得偶像分数2‰的算力。",
"死与税": "死与税",
"顶峰相见": "顶峰相见",
"游戏中你的视角高度提高10%。": "游戏中你的视角高度提高10%。",
@@ -2230,14 +2230,14 @@
"拥有35首歌曲": "拥有35首歌曲",
"拥有50歌曲": "拥有50歌曲",
"拥有50首歌曲": "拥有50首歌曲",
"累计获得100金币": "累计获得100金币",
"累计获得100金币": "累计获得100算力",
"coins_earned": "coins_earned",
"累计获得1000金币": "累计获得1000金币",
"累计获得5000金币": "累计获得5000金币",
"累计获得10000金币": "累计获得10000金币",
"累计获得50000金币": "累计获得50000金币",
"累计获得100000金币": "累计获得100000金币",
"累计获得500000金币": "累计获得500000金币",
"累计获得1000金币": "累计获得1000算力",
"累计获得5000金币": "累计获得5000算力",
"累计获得10000金币": "累计获得10000算力",
"累计获得50000金币": "累计获得50000算力",
"累计获得100000金币": "累计获得100000算力",
"累计获得500000金币": "累计获得500000算力",
"总分累计2500000": "总分累计2500000",
"total_song_best_sum": "total_song_best_sum",
"总分之和达到250万": "总分之和达到250万",
@@ -2266,7 +2266,7 @@
"啥子": "啥子",
"全部歌曲": "全部歌曲",
"全套歌曲": "全套歌曲",
"大量货币": "大量货币",
"大量货币": "大量算力",
"雅莉梦璃币": "雅莉梦璃币",
"用户经验": "用户经验",
"满级用户": "满级用户",
@@ -2721,16 +2721,16 @@
"稀有的超级版”共享单元“,使用后给随机4个未到达突破限制的偶像提供400经验。": "稀有的超级版”共享单元“,使用后给随机4个未到达突破限制的偶像提供400经验。",
"给经验值最低的<b>4</b>个偶像提升<b>400</b>经验值(每个偶像最多获得400经验),有助于让多个偶像得到经验值。<b>非卖品</b>。\n\n“我觉得它还差那么一点。”": "给经验值最低的<b>4</b>个偶像提升<b>400</b>经验值(每个偶像最多获得400经验),有助于让多个偶像得到经验值。<b>非卖品</b>。\n\n“我觉得它还差那么一点。”",
"<color=#4A86B8>三级归档合约</color>": "<color=#4A86B8>三级归档合约</color>",
"只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。": "只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。",
"只有满经验的C偶像可用。足够数量的归档合约和一定金币可使其突破至B。": "只有满经验的C偶像可用。足够数量的归档合约和一定算力可使其突破至B。",
"可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>B</b>级阅历(经验值不满无法使用),有助于让偶像跃迁。\n\n“请本人签字”": "可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>B</b>级阅历(经验值不满无法使用),有助于让偶像跃迁。\n\n“请本人签字”",
"<color=#6A4C9C>二级归档合约</color>": "<color=#6A4C9C>二级归档合约</color>",
"只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。": "只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。",
"只有满经验的B偶像可用。足够数量的归档合约和一定金币可使其突破至A。": "只有满经验的B偶像可用。足够数量的归档合约和一定算力可使其突破至A。",
"一颗含有偶像灵力的洋葱,可帮助<b>经验达到上限</b>的<b>B</b>级阅历偶像突破到<b>A</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>5</b>个<b><color=#4A86B8>三级归档合约</color></b>合成。\n\n“档案已经写了得有1个‘W’的字数了”": "一颗含有偶像灵力的洋葱,可帮助<b>经验达到上限</b>的<b>B</b>级阅历偶像突破到<b>A</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>5</b>个<b><color=#4A86B8>三级归档合约</color></b>合成。\n\n“档案已经写了得有1个‘W’的字数了”",
"<color=#B88645>一级归档合约</color>": "<color=#B88645>一级归档合约</color>",
"只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。",
"只有满经验的A偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "只有满经验的A偶像可用。足够数量的归档合约和一定算力可使其突破至S。",
"可帮助<b>经验达到上限</b>的<b>A</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>10</b>个<b><color=#6A4C9C>二级归档合约</color></b>合成。\n\n“放进我的收藏夹里吃灰吧!”": "可帮助<b>经验达到上限</b>的<b>A</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像跃迁,可由<b>10</b>个<b><color=#6A4C9C>二级归档合约</color></b>合成。\n\n“放进我的收藏夹里吃灰吧!”",
"<color=#B84C4C>终极归档合约</color>": "<color=#B84C4C>终极归档合约</color>",
"满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。",
"满经验的任意阅历资格偶像可用。足够数量的归档合约和一定金币可使其突破至S。": "满经验的任意阅历资格偶像可用。足够数量的归档合约和一定算力可使其突破至S。",
"可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像飞速成长,<b><color=#B84C4C>不可合成</color></b>。\n\n“一夜之间写完档案吗?有点意思...让我想起了我的学生时期......”": "可帮助<b>经验达到上限</b>的<b>C</b>级阅历偶像突破到<b>S</b>级阅历(经验值不满无法使用),有助于让偶像飞速成长,<b><color=#B84C4C>不可合成</color></b>。\n\n“一夜之间写完档案吗?有点意思...让我想起了我的学生时期......”",
"<color=#6A4C9C>美味小蛋糕</color>": "<color=#6A4C9C>美味小蛋糕</color>",
"一块神秘美味蛋糕。可帮助回忆美好事物。": "一块神秘美味蛋糕。可帮助回忆美好事物。",
@@ -2815,7 +2815,7 @@
"阅读剧情 1 次": "阅读剧情 1 次",
"使用任意经验提升或突破材料 1 次": "使用任意经验提升或突破材料 1 次",
"在线 15 分钟": "在线 15 分钟",
"消费 2000 coins": "消费 2000 coins",
"消费 2000 coins": "消费 2000 算力",
"游玩 3 首不同的歌曲": "游玩 3 首不同的歌曲",
"Lit 2D (URP)": "Lit 2D (URP)",
"Contains an orthographic camera and a Global Light 2D. Works with the 2D Renderer in Universal RP.": "Contains an orthographic camera and a Global Light 2D. Works with the 2D Renderer in Universal RP.",
+2 -2
View File
@@ -34,8 +34,8 @@ MonoBehaviour:
m_DataZoomDataLineWidth: 0.5
m_VisualMapBorderWidth: 0
m_SerieLineWidth: 1.8
m_SerieLineSymbolSize: 5
m_SerieScatterSymbolSize: 20
m_SerieLineSymbolSize: 2
m_SerieScatterSymbolSize: 7
m_SerieSelectedRate: 1.3
m_SerieCandlestickBorderWidth: 1
m_EditorShowAllListData: 0
+2 -2
View File
@@ -186,8 +186,8 @@ MonoBehaviour:
m_TriangeLen: 20
m_Serie:
m_LineWidth: 1.8
m_LineSymbolSize: 5
m_ScatterSymbolSize: 20
m_LineSymbolSize: 2
m_ScatterSymbolSize: 7
m_CandlestickColor:
serializedVersion: 2
rgba: 4283846390
@@ -143,8 +143,8 @@ MonoBehaviour:
m_TriangeLen: 20
m_Serie:
m_LineWidth: 1.8
m_LineSymbolSize: 5
m_ScatterSymbolSize: 20
m_LineSymbolSize: 2
m_ScatterSymbolSize: 7
m_CandlestickColor:
serializedVersion: 2
rgba: 4283716843
@@ -47,8 +47,8 @@ namespace XCharts.Runtime
[SerializeField][Range(0, 20)] private float m_VisualMapBorderWidth = 0f;
[SerializeField][Range(0, 20)] private float m_SerieLineWidth = 1.8f;
[SerializeField][Range(0, 200)] private float m_SerieLineSymbolSize = 5f;
[SerializeField][Range(0, 200)] private float m_SerieScatterSymbolSize = 20f;
[SerializeField][Range(0, 200)] private float m_SerieLineSymbolSize = 2f;
[SerializeField][Range(0, 200)] private float m_SerieScatterSymbolSize = 7f;
[SerializeField][Range(0, 200)] private float m_SerieSelectedRate = 1.3f;
[SerializeField][Range(0, 10)] private float m_SerieCandlestickBorderWidth = 1f;
@@ -52,7 +52,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 5, y: 9, z: 7, w: 5}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -139,7 +139,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 9011aa2553d7d8c418c3a74a904410f6
internalID: 0
internalID: -192517948
vertices: []
indices:
edges: []
@@ -52,7 +52,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 5, y: 9, z: 7, w: 5}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -139,7 +139,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5f923e9ce00ef784bb535cf3d772d22b
internalID: 0
internalID: 1253264213
vertices: []
indices:
edges: []
Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+156
View File
@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: c219681c37e1b334c997f2eb1a81f405
TextureImporter:
internalIDToNameTable:
- first:
213: -8331064290051192931
second: "\u6307\u948801_0"
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 7
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: "\u6307\u948801_0"
rect:
serializedVersion: 2
x: 129
y: 42
width: 236
height: 359
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: d978e860b2d126c80800000000000000
internalID: -8331064290051192931
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
"\u6307\u948801_0": -8331064290051192931
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

+129
View File
@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 7c9b34c3b5c64e048bb0e4c7de0b0d11
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 64
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 7
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 1
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData: Cursor texture for Cursor.SetCursor. Drag this Texture2D asset directly instead of a Sprite slice.
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

+156
View File
@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 2789dc4fff91b044a885db9f61360702
TextureImporter:
internalIDToNameTable:
- first:
213: -5928434924538351522
second: "\u6307\u948801 (1)_0"
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 7
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: "\u6307\u948801 (1)_0"
rect:
serializedVersion: 2
x: 106
y: 0
width: 328
height: 492
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: e503fd8a8d7f9bda0800000000000000
internalID: -5928434924538351522
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
"\u6307\u948801 (1)_0": -5928434924538351522
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -121,8 +121,8 @@ TextureImporter:
width: 107
height: 109
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
border: {x: 4, y: 8, z: 6, w: 4}
customData:
outline: []
physicsShape: []
@@ -138,7 +138,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 03f839c2efbb4904b9bb3d90a2ef40f7
internalID: 0
vertices: []
indices:
@@ -147,7 +147,8 @@ TextureImporter:
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
nameFileIdTable:
ui_frame_setting__0: 8242753404081519931
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
@@ -46,13 +46,13 @@ TextureImporter:
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 9, y: 9, z: 294, w: 8}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -121,7 +121,7 @@ TextureImporter:
width: 383
height: 292
alignment: 0
pivot: {x: 0, y: 0}
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
@@ -138,8 +138,8 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
spriteID: 5e97eb03825dee720800000000000000
internalID: 1537655665
vertices: []
indices:
edges: []
@@ -147,7 +147,8 @@ TextureImporter:
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
nameFileIdTable:
ui_frame_chat_0: 4007589676381282746
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: f14b64b175b40214b9e2b4ba8be24697
TextureImporter:
internalIDToNameTable:
- first:
213: 1630286112366589552
second: LMM01_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: LMM01_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 200
height: 200
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 076fcd1e490ff9610800000000000000
internalID: 1630286112366589552
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
LMM01_0: 1630286112366589552
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 4aa2a31f345485c42bd2f44b2488b7f8
TextureImporter:
internalIDToNameTable:
- first:
213: 8574118028986653512
second: LMM02_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: LMM02_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 331
height: 91
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 84b95047be26df670800000000000000
internalID: 8574118028986653512
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
LMM02_0: 8574118028986653512
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 7df561841c29f7c4495809fa26c0fd87
TextureImporter:
internalIDToNameTable:
- first:
213: -5627988409318439881
second: LMM03_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: LMM03_0
rect:
serializedVersion: 2
x: 27
y: 0
width: 172
height: 96
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 7340f8e2c5e55e1b0800000000000000
internalID: -5627988409318439881
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
LMM03_0: -5627988409318439881
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

+156
View File
@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 3f085a9ca0d0c8b41a02c952e6a7bf02
TextureImporter:
internalIDToNameTable:
- first:
213: -6045562355919041804
second: "\u9ECE\u5999\u5999_0"
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: "\u9ECE\u5999\u5999_0"
rect:
serializedVersion: 2
x: 1006
y: 18
width: 988
height: 2964
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 4fac8fb6119d91ca0800000000000000
internalID: -6045562355919041804
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
"\u9ECE\u5999\u5999_0": -6045562355919041804
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 32a17cd770649ef4ba742170d95271e0
TextureImporter:
internalIDToNameTable:
- first:
213: 3116782900250355538
second: role_7_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: role_7_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 100
height: 136
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 2572f6bc889014b20800000000000000
internalID: 3116782900250355538
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
role_7_0: 3116782900250355538
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 0037e2eca8c94144db3688d8d960a451
TextureImporter:
internalIDToNameTable:
- first:
213: 8956787028819111974
second: rolecards_7_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: rolecards_7_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 166
height: 679
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 620f69df856ec4c70800000000000000
internalID: 8956787028819111974
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
rolecards_7_0: 8956787028819111974
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 56b39b38b521ce242b63d86cc4bd2812
TextureImporter:
internalIDToNameTable:
- first:
213: 5564047283278955633
second: ui_role_idol_limiaomiao_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: ui_role_idol_limiaomiao_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 105
height: 116
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 174c1594687773d40800000000000000
internalID: 5564047283278955633
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
ui_role_idol_limiaomiao_0: 5564047283278955633
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
+19 -2
View File
@@ -15,8 +15,11 @@ namespace Bansonic
private const string NextGeneratedIdPrefsKey = "bansonic_equipment_next_id_v1";
private const string RuntimeSaveCategory = "runtime_equipment";
private const string RuntimeSaveKey = "generated_list";
private const string RuntimeRecoverySlotKey = "runtime_generated_equipment_list";
private static readonly List<equipmentSO> RuntimeGeneratedEquipments = new List<equipmentSO>();
private static bool runtimeGeneratedLoaded;
private static bool runtimeGeneratedLoadedFromSave;
private static bool runtimeGeneratedHasRecoverableState;
private enum QualityRollMode { Default, High }
@@ -113,7 +116,10 @@ namespace Bansonic
{
RuntimeGeneratedEquipments.Clear();
runtimeGeneratedLoaded = true;
runtimeGeneratedLoadedFromSave = false;
runtimeGeneratedHasRecoverableState = false;
SecureSaveVault.Delete(RuntimeSaveCategory, RuntimeSaveKey);
LocalRecoveryMirror.DeleteSlot(RuntimeRecoverySlotKey);
}
public static List<equipmentSO> generateEquipment(
@@ -630,12 +636,16 @@ namespace Bansonic
}
runtimeGeneratedLoaded = true;
runtimeGeneratedLoadedFromSave = false;
runtimeGeneratedHasRecoverableState =
SecureSaveVault.HasAnyRecoverableState(RuntimeSaveCategory, RuntimeSaveKey)
|| LocalRecoveryMirror.HasSlotData(RuntimeRecoverySlotKey);
RuntimeGeneratedEquipments.Clear();
RuntimeGeneratedEquipmentListPayload payload;
if (!SecureSaveVault.TryLoadJson(RuntimeSaveCategory, RuntimeSaveKey, out payload) || payload == null || payload.items == null)
{
if (!LocalRecoveryMirror.TryLoadJson("runtime_generated_equipment_list", out payload) || payload == null || payload.items == null)
if (!LocalRecoveryMirror.TryLoadJson(RuntimeRecoverySlotKey, out payload) || payload == null || payload.items == null)
{
return;
}
@@ -643,6 +653,7 @@ namespace Bansonic
SecureSaveVault.SaveJson(RuntimeSaveCategory, RuntimeSaveKey, payload);
}
runtimeGeneratedLoadedFromSave = true;
for (int i = 0; i < payload.items.Count; i++)
{
RuntimeGeneratedEquipmentPayload itemPayload = payload.items[i];
@@ -656,6 +667,12 @@ namespace Bansonic
private static void SaveRuntimeGeneratedState()
{
if (!runtimeGeneratedLoadedFromSave && runtimeGeneratedHasRecoverableState)
{
Debug.LogWarning("[EquipmentGenerator] Recoverable runtime equipment state exists but could not be loaded; skip saving to avoid overwriting older equipment data.");
return;
}
RuntimeGeneratedEquipmentListPayload payload = new RuntimeGeneratedEquipmentListPayload();
for (int i = 0; i < RuntimeGeneratedEquipments.Count; i++)
{
@@ -669,7 +686,7 @@ namespace Bansonic
}
SecureSaveVault.SaveJson(RuntimeSaveCategory, RuntimeSaveKey, payload);
LocalRecoveryMirror.SaveJson("runtime_generated_equipment_list", payload);
LocalRecoveryMirror.SaveJson(RuntimeRecoverySlotKey, payload);
}
private static RuntimeGeneratedEquipmentPayload BuildPayload(equipmentSO equipment)
@@ -303,7 +303,7 @@ public class eFinalDream : MonoBehaviour
if (coinRequired > 0)
{
SpawnMaterialItem(coinSprite, "Coins", PlayerEconomyLedger.EnsureInstance().GetCoins(), coinRequired);
SpawnMaterialItem(coinSprite, "算力", PlayerEconomyLedger.EnsureInstance().GetCoins(), coinRequired);
}
if (memoryRequired > 0)
@@ -400,7 +400,7 @@ public class eFinalDream : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(coinRequired))
{
return "硬币不足";
return "算力不足";
}
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(memoryRequired))
@@ -315,7 +315,7 @@ public class equipIllusion : MonoBehaviour
{
SpawnMaterialItem(
coinSprite,
"Coins",
"算力",
PlayerEconomyLedger.EnsureInstance().GetCoins(),
coinRequired);
}
@@ -416,7 +416,7 @@ public class equipIllusion : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(coinRequired))
{
return "硬币不足";
return "算力不足";
}
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(memoryRequired))
@@ -902,7 +902,7 @@ public class equipSmelt : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(GetStartSmeltCost()))
{
reasonWhy.text = "硬币不足";
reasonWhy.text = "算力不足";
return;
}
}
@@ -364,7 +364,7 @@ public class equipTransfer : MonoBehaviour
if (coinRequired > 0)
{
SpawnMaterialItem(coins, "Coins", PlayerEconomyLedger.EnsureInstance().GetCoins(), coinRequired);
SpawnMaterialItem(coins, "算力", PlayerEconomyLedger.EnsureInstance().GetCoins(), coinRequired);
}
if (memoryRequired > 0)
@@ -446,7 +446,7 @@ public class equipTransfer : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(coinRequired))
{
return "硬币不足";
return "算力不足";
}
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(memoryRequired))
@@ -337,7 +337,7 @@ public class equipUpdate : MonoBehaviour
{
SpawnMaterialItem(
coinSprite,
"Coins",
"算力",
PlayerEconomyLedger.EnsureInstance().GetCoins(),
upgradeCoinsRequired);
}
@@ -440,7 +440,7 @@ public class equipUpdate : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(upgradeCoinsRequired))
{
return "硬币不足";
return "算力不足";
}
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(upgradeMemoryRequired))
+5 -5
View File
@@ -454,7 +454,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &146991998666734905
RectTransform:
m_ObjectHideFlags: 0
@@ -6625,7 +6625,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_AnchorMax.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_AnchorMin.x
@@ -6633,7 +6633,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_AnchorMin.y
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_SizeDelta.x
@@ -6673,11 +6673,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
value: 91.296265
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
value: 25
objectReference: {fileID: 0}
- target: {fileID: 5982215219932760098, guid: 2ee69a9124e04124d9e68754504b4c8c, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -6354,7 +6354,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u5E2E\u52A9\u4F60\u6821\u51C6\u8BBE\u5907\u5DEE\u5F02\u5F15\u8D77\u7684\u5EF6\u8FDF"
m_Text: "\u5E2E\u52A9\u4F60\u6821\u51C6\u8BBE\u5907\u5DEE\u5F02\u5F15\u8D77\u7684\u5EF6\u8FDF\uFF08\u6309\u8282\u62CD\u6572\u6253Space\uFF09"
--- !u!1 &8441318564003906992
GameObject:
m_ObjectHideFlags: 0
+29 -2
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Bansonic;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
@@ -11,6 +12,8 @@ using UnityEditor;
public class UI_Idols : MonoBehaviour
{
private const string MemorySystemComingSoonMessage = "\"记忆\"系统即将上线,敬请期待!";
[Header("quit")]
public Button quitButton;
@@ -265,13 +268,20 @@ public class UI_Idols : MonoBehaviour
if (isOn)
{
if (source == idolWeaponToggle)
{
ShowMemorySystemComingSoon();
ApplySectionSelection(GetFirstAvailableUnlockedToggle());
return;
}
ApplySectionSelection(source);
return;
}
if (!AnySectionToggleOn())
{
ApplySectionSelection(idolLevelsToggle != null ? idolLevelsToggle : GetFirstAvailableToggle());
ApplySectionSelection(GetFirstAvailableUnlockedToggle());
}
else
{
@@ -281,7 +291,9 @@ public class UI_Idols : MonoBehaviour
private void ApplySectionSelection(Toggle activeToggle)
{
Toggle resolved = activeToggle != null ? activeToggle : (idolLevelsToggle != null ? idolLevelsToggle : GetFirstAvailableToggle());
Toggle resolved = activeToggle != null && activeToggle != idolWeaponToggle
? activeToggle
: GetFirstAvailableUnlockedToggle();
suppressToggleCallbacks = true;
SetToggleState(idolLevelsToggle, resolved == idolLevelsToggle);
@@ -326,6 +338,21 @@ public class UI_Idols : MonoBehaviour
return null;
}
private Toggle GetFirstAvailableUnlockedToggle()
{
if (idolLevelsToggle != null) return idolLevelsToggle;
if (idolVoicesToggle != null) return idolVoicesToggle;
if (idolDetailPassageToggle != null) return idolDetailPassageToggle;
if (idolSkillsToggle != null) return idolSkillsToggle;
if (idolSkinsToggle != null) return idolSkinsToggle;
return null;
}
private static void ShowMemorySystemComingSoon()
{
gNotice.error.display(MemorySystemComingSoonMessage);
}
private static void SetToggleState(Toggle toggle, bool isOn)
{
if (toggle == null)
+21 -6
View File
@@ -1667,6 +1667,7 @@ GameObject:
- component: {fileID: 3829753781754538968}
- component: {fileID: 8946417172749083411}
- component: {fileID: 4552225134849151602}
- component: {fileID: 2952962603515858014}
m_Layer: 5
m_Name: description
m_TagString: Untagged
@@ -1690,9 +1691,9 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 145.415, y: -30}
m_SizeDelta: {x: 280.83, y: 54}
m_Pivot: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 140.76392, y: -3}
m_SizeDelta: {x: 271.5281, y: 54}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &8946417172749083411
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -1722,7 +1723,7 @@ MonoBehaviour:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: d254d20d93651ae448ff13d10dff30ab, type: 3}
m_Font: {fileID: 12800000, guid: bc54bd51ea8b84448ba1b65311872862, type: 3}
m_FontSize: 18
m_FontStyle: 0
m_BestFit: 0
@@ -1734,7 +1735,21 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u6280\u80FD\u4ECB\u7ECD\n1\n"
m_Text: "\u6280\u80FD\u4ECB\u7ECD\n\u5927\u5BB6\u597D\u8FD9\u91CC\u662F\u6280\u80FD\u4ECB\u7ECD\n\u4F60\u600E\u4E48\u770B\u5230\u8FD9\u53E5\u8BDD"
--- !u!114 &2952962603515858014
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5833502104821601462}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!1 &6549684703952493889
GameObject:
m_ObjectHideFlags: 0
@@ -1801,7 +1816,7 @@ MonoBehaviour:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3}
m_Font: {fileID: 12800000, guid: d254d20d93651ae448ff13d10dff30ab, type: 3}
m_FontSize: 16
m_FontStyle: 0
m_BestFit: 0
+3 -3
View File
@@ -255,7 +255,7 @@ public class idolUpgrade : MonoBehaviour
prefix += "<color=#FF4D4D>所选两项材料为一组,</color>";
}
SetInfoText(string.Format("{0}突破需消耗 {1} 金币", prefix, GetEffectiveBreakthroughCoinCost()));
SetInfoText(string.Format("{0}突破需消耗 {1} 算力", prefix, GetEffectiveBreakthroughCoinCost()));
SetConfirmInteractable(true);
SetConfirmButtonText("突破");
return;
@@ -997,7 +997,7 @@ public class idolUpgrade : MonoBehaviour
int requiredCoins = GetEffectiveBreakthroughCoinCost();
if (!PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(requiredCoins))
{
failureReason = "金币不足";
failureReason = "算力不足";
return false;
}
@@ -1017,7 +1017,7 @@ public class idolUpgrade : MonoBehaviour
if (!PlayerEconomyLedger.EnsureInstance().TrySpendCoins(requiredCoins))
{
failureReason = "金币不足";
failureReason = "算力不足";
return false;
}
+12 -12
View File
@@ -57642,7 +57642,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMin.x
@@ -57650,15 +57650,15 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMin.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_SizeDelta.x
value: 120
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_SizeDelta.y
value: 120
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_LocalPosition.x
@@ -57690,11 +57690,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchoredPosition.x
value: 190
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchoredPosition.y
value: -65
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -59696,7 +59696,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMin.x
@@ -59704,15 +59704,15 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchorMin.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_SizeDelta.x
value: 120
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_SizeDelta.y
value: 120
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_LocalPosition.x
@@ -59744,11 +59744,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchoredPosition.x
value: 65
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_AnchoredPosition.y
value: -65
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4791772059149409634, guid: 58f3bf476bf2f8a44a93e801cd45e726, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
+26 -5
View File
@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using Bansonic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
@@ -10,6 +11,8 @@ using UnityEditor;
public class uBag : MonoBehaviour
{
private const string MemorySystemComingSoonMessage = "\"记忆\"系统即将上线,敬请期待!";
private enum BagFilterMode
{
All,
@@ -366,12 +369,17 @@ public class uBag : MonoBehaviour
private void HandleEquipSystemChanged(bool isOn)
{
SetObjectActive(bagObj, !isOn);
SetObjectActive(equipObj, isOn);
if (isOn)
{
ShowMemorySystemComingSoon();
}
ForceBagViewMode();
}
private void ApplyCategory(BagCategory category)
{
ForceBagViewMode();
currentCategory = category;
currentFilterMode = (BagFilterMode)category;
if (bag_filterDropdown != null)
@@ -408,14 +416,27 @@ public class uBag : MonoBehaviour
{
equipSystemToggle.onValueChanged.RemoveListener(HandleEquipSystemChanged);
equipSystemToggle.onValueChanged.AddListener(HandleEquipSystemChanged);
HandleEquipSystemChanged(equipSystemToggle.isOn);
return;
}
ForceBagViewMode();
}
private void ForceBagViewMode()
{
if (equipSystemToggle != null)
{
equipSystemToggle.SetIsOnWithoutNotify(false);
}
SetObjectActive(bagObj, true);
SetObjectActive(equipObj, false);
}
private static void ShowMemorySystemComingSoon()
{
gNotice.error.display(MemorySystemComingSoonMessage);
}
private void HandleInventoryChanged(ExpBottleKind _, int __)
{
Rebuild();
@@ -674,7 +695,7 @@ public class uBag : MonoBehaviour
continue;
}
if (story.fatherType == notebook_faterType.notebook_fatherType.content && !story.showInBag)
if (!story.showInBag)
{
continue;
}
+6 -2
View File
@@ -11,7 +11,6 @@ public class UI_Player : MonoBehaviour
{
private const string FirstLaunchDatePrefKey = "player.first_launch_date";
private const string SongResourcesPath = "song_songIndex";
private const string VersionLabel = "\u5185\u90e8\u6d4b\u8bd5v207b35";
private const string ChannelLabel = "Steam";
private const float MaxDisplayedRksForSlider = 100f;
private static readonly Color SteamOnlineColor = new Color32(20, 120, 45, 255);
@@ -462,7 +461,12 @@ public class UI_Player : MonoBehaviour
SpawnInfoEntry("\u603b\u6e38\u620f\u6b21\u6570", snapshot.totalGameEnterCount.ToString());
SpawnInfoEntry("\u6e38\u73a9\u603b\u65f6\u957f", FormatPlayTime(snapshot.totalPlaySeconds));
SpawnInfoEntry("\u6e20\u9053", ChannelLabel, snapshot.isSteamOnline ? SteamOnlineColor : defaultInfoColor);
SpawnInfoEntry("\u7248\u672c", VersionLabel);
SpawnInfoEntry("\u7248\u672c", GetProjectVersionLabel());
}
private static string GetProjectVersionLabel()
{
return string.IsNullOrWhiteSpace(Application.version) ? "-" : Application.version;
}
private void ClearInfoEntries()
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

+156
View File
@@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: f3ae2a98219fbef4cb5da584e63ad366
TextureImporter:
internalIDToNameTable:
- first:
213: 2313463732811680064
second: 0000_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: 0000_0
rect:
serializedVersion: 2
x: 877
y: 145
width: 1448
height: 920
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 0494dfaf1031b1020800000000000000
internalID: 2313463732811680064
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
0000_0: 2313463732811680064
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
+332 -8
View File
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &16880500079743085
GameObject:
@@ -3815,6 +3815,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1078046161538248771}
- {fileID: 509130623911031789}
- {fileID: 3594788202837981552}
m_Father: {fileID: 5705310861349071005}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -4103,6 +4104,96 @@ MonoBehaviour:
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &2616329647580106399
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 509130623911031789}
- component: {fileID: 207483723832436397}
- component: {fileID: 8572724876067965171}
- component: {fileID: 6236928908591314277}
m_Layer: 5
m_Name: btmImg (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &509130623911031789
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2616329647580106399}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5729614146008524858}
m_Father: {fileID: 4329936282839610948}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -285.5608, y: 87.1}
m_SizeDelta: {x: 2210.137, y: 1155.5757}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &207483723832436397
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2616329647580106399}
m_CullTransparentMesh: 1
--- !u!114 &8572724876067965171
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2616329647580106399}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.8784314}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: f3ae2a98219fbef4cb5da584e63ad366, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &6236928908591314277
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2616329647580106399}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 1
--- !u!1 &2618562364703312358
GameObject:
m_ObjectHideFlags: 0
@@ -6078,6 +6169,81 @@ MonoBehaviour:
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: RadarChart
--- !u!1 &3855510164280628558
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5729614146008524858}
- component: {fileID: 4173859636876891631}
- component: {fileID: 1468075156879178202}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5729614146008524858
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3855510164280628558}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 509130623911031789}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 260.7, y: -150.063}
m_SizeDelta: {x: 1397.84, y: 655.2591}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4173859636876891631
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3855510164280628558}
m_CullTransparentMesh: 1
--- !u!114 &1468075156879178202
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3855510164280628558}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &3917494060144924217
GameObject:
m_ObjectHideFlags: 0
@@ -9849,7 +10015,7 @@ MonoBehaviour:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3}
m_Font: {fileID: 12800000, guid: d254d20d93651ae448ff13d10dff30ab, type: 3}
m_FontSize: 16
m_FontStyle: 0
m_BestFit: 0
@@ -9861,7 +10027,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u65E0\u6CD5\u67E5\u8BE2\u6392\u884C\nPlayerHonorRequestForbidden\n\n\u7BA1\u7406\u5458\u6682\u505C\u4E86\u6392\u884C\u699C\u5206\u53D1"
m_Text: "\u7BA1\u7406\u5458\u6682\u505C\u4E86\u603B\u699C\u5206\u53D1\n\u656C\u8BF7\u671F\u5F85\uFF01"
--- !u!1 &5969904176771562516
GameObject:
m_ObjectHideFlags: 0
@@ -12607,7 +12773,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &5985393952628140132
RectTransform:
m_ObjectHideFlags: 0
@@ -13203,8 +13369,8 @@ MonoBehaviour:
tooltipPadding: {x: 8, y: 8, z: 4, w: 4}
overrideSeriesStyle: 1
overrideSymbolStyle: 1
mainSymbolSize: 8
referenceSymbolSize: 7
mainSymbolSize: 3
referenceSymbolSize: 3
mainSymbolType: 2
referenceSymbolType: 2
mainStrokeColor: {r: 0.32156864, g: 0.49411765, b: 1, a: 1}
@@ -13222,7 +13388,7 @@ MonoBehaviour:
labelRootName: RadarLabels
radarChartHost: {fileID: 5919567714153934601}
radarChartHostName: RadarChartHost
radarChart: {fileID: 0}
radarChart: {fileID: 4822815812132583242}
--- !u!222 &9130254712381567808
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -14261,6 +14427,7 @@ GameObject:
m_Component:
- component: {fileID: 5919567714153934601}
- component: {fileID: 3900198720124514780}
- component: {fileID: 4822815812132583242}
m_Layer: 0
m_Name: RadarChartHost
m_TagString: Untagged
@@ -14280,7 +14447,6 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2821669720858302315}
- {fileID: 6824719267786177413}
- {fileID: 5985393952628140132}
- {fileID: 4289797210827084819}
@@ -14293,6 +14459,7 @@ RectTransform:
- {fileID: 6077637118204166483}
- {fileID: 5172637601979531406}
- {fileID: 8439076572779562101}
- {fileID: 2821669720858302315}
- {fileID: 5393099526794483384}
- {fileID: 5713933464712640053}
- {fileID: 2275204222710488928}
@@ -14314,6 +14481,163 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8518915104847791415}
m_CullTransparentMesh: 1
--- !u!114 &4822815812132583242
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8518915104847791415}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d2231a0d3e3a5b043b074f6739be4a86, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_EnableTextMeshPro: 0
m_ChildNodeNames:
- painter_b
- painter_0
- painter_1
- painter_2
- painter_3
- painter_4
- painter_5
- painter_6
- painter_7
- painter_8
- painter_9
- painter_u
- painter_t
- debug
m_ChartName:
m_UseUtc: 1
m_Theme:
m_Show: 1
m_SharedTheme: {fileID: 11400000, guid: e1dc23a10de1e4c5dbfbaf74c4dfd218, type: 2}
m_TransparentBackground: 0
m_EnableCustomTheme: 0
m_CustomFont: {fileID: 0}
m_CustomBackgroundColor:
serializedVersion: 2
rgba: 0
m_CustomColorPalette: []
m_Settings:
m_Show: 1
m_MaxPainter: 10
m_ReversePainter: 0
m_BasePainterMaterial: {fileID: 0}
m_SeriePainterMaterial: {fileID: 0}
m_UpperPainterMaterial: {fileID: 0}
m_TopPainterMaterial: {fileID: 0}
m_LineSmoothStyle: 2.5
m_LineSmoothness: 2
m_LineSegmentDistance: 3
m_CicleSmoothness: 2
m_LegendIconLineWidth: 2
m_LegendIconCornerRadius:
- 0.25
- 0.25
- 0.25
- 0.25
m_AxisMaxSplitNumber: 50
m_DebugInfo:
m_Show: 1
m_ShowDebugInfo: 0
m_ShowAllChartObject: 0
m_FoldSeries: 0
m_LabelStyle:
m_Show: 1
m_Position: 0
m_AutoOffset: 0
m_Offset: {x: 0, y: 0, z: 0}
m_Rotate: 0
m_AutoRotate: 0
m_Distance: 0
m_Formatter:
m_NumericFormatter:
m_Width: 0
m_Height: 0
m_FixedX: 0
m_FixedY: 0
m_Icon:
m_Show: 0
m_Layer: 0
m_Align: 1
m_Sprite: {fileID: 0}
m_Type: 0
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Width: 20
m_Height: 20
m_Offset: {x: 0, y: 0, z: 0}
m_AutoHideWhenLabelEmpty: 0
m_Background:
m_Show: 1
m_Sprite: {fileID: 0}
m_Type: 0
m_AutoColor: 0
m_Color: {r: 0.1254902, g: 0.1254902, b: 0.1254902, a: 0.6666667}
m_Width: 0
m_Height: 0
m_TextPadding:
m_Show: 1
m_Top: 0
m_Right: 2
m_Left: 2
m_Bottom: 0
m_TextStyle:
m_Show: 1
m_Font: {fileID: 0}
m_AutoWrap: 0
m_AutoAlign: 1
m_Rotate: 0
m_AutoColor: 0
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FontSize: 18
m_FontStyle: 0
m_LineSpacing: 1
m_Alignment: 4
m_ChartInited: 0
m_AngleAxes: []
m_Backgrounds: []
m_DataZooms: []
m_Grids: []
m_GridsLayout: []
m_Legends: []
m_MarkLines: []
m_MarkAreas: []
m_Polars: []
m_Radars: []
m_RadiusAxes: []
m_Titles: []
m_Tooltips: []
m_VisualMaps: []
m_XAxes: []
m_YAxes: []
m_SingleAxes: []
m_Parallels: []
m_ParallelAxes: []
m_Comments: []
m_SerieBars: []
m_SerieCandlesticks: []
m_SerieEffectScatters: []
m_SerieHeatmaps: []
m_SerieLines: []
m_SeriePies: []
m_SerieRadars: []
m_SerieRings: []
m_SerieScatters: []
m_SerieParallels: []
m_SerieSimplifiedLines: []
m_SerieSimplifiedBars: []
m_SerieSimplifiedCandlesticks: []
--- !u!1 &8528636467798866884
GameObject:
m_ObjectHideFlags: 0
@@ -67,8 +67,8 @@ public class URadarChartController : MonoBehaviour
[Header("Style")]
public bool overrideSeriesStyle = true;
public bool overrideSymbolStyle = true;
public float mainSymbolSize = 8f;
public float referenceSymbolSize = 7f;
public float mainSymbolSize = 3f;
public float referenceSymbolSize = 3f;
public SymbolType mainSymbolType = SymbolType.Circle;
public SymbolType referenceSymbolType = SymbolType.Circle;
public Color mainStrokeColor = new Color32(82, 126, 255, 255);
@@ -422,7 +422,7 @@ public class URadarChartController : MonoBehaviour
else
{
serie.symbol.type = SymbolType.Circle;
serie.symbol.size = isMainSerie ? 8f : 7f;
serie.symbol.size = 3f;
serie.symbol.color = Color.white;
}
+27 -7
View File
@@ -1140,17 +1140,37 @@ public class AllyCombatant : MonoBehaviour, ICombatant
private static AllyHero_SO.AllyLevelInfo GetEffectiveLevelForExp(AllyHero_SO so, int exp)
{
if (so == null || so.levelStats == null || so.levelStats.Count == 0) return null;
AllyHero_SO.AllyLevelInfo best = null;
foreach (var lvl in so.levelStats)
List<AllyHero_SO.AllyLevelInfo> sorted = new List<AllyHero_SO.AllyLevelInfo>();
foreach (var levelInfo in so.levelStats)
{
if (lvl == null) continue;
if (exp >= lvl.requiredEXP)
if (levelInfo != null)
{
if (best == null || lvl.requiredEXP >= best.requiredEXP)
best = lvl;
sorted.Add(levelInfo);
}
}
return best ?? so.levelStats[0];
if (sorted.Count == 0) return null;
sorted.Sort((left, right) => left.requiredEXP.CompareTo(right.requiredEXP));
int expQualifiedIndex = 0;
int safeExp = Mathf.Max(0, exp);
for (int i = 0; i < sorted.Count; i++)
{
if (safeExp >= Mathf.Max(0, sorted[i].requiredEXP))
{
expQualifiedIndex = i;
}
else
{
break;
}
}
int unlockedIndex = Mathf.Clamp(so.ally_growthUnlockedTierIndex, 0, sorted.Count - 1);
int effectiveIndex = Mathf.Min(expQualifiedIndex, unlockedIndex);
return sorted[Mathf.Clamp(effectiveIndex, 0, sorted.Count - 1)];
}
// Scoring API
+68 -4
View File
@@ -9,6 +9,9 @@ using UnityEditor;
[CreateAssetMenu(fileName = "NewAllyHero", menuName = "SO_Data/AllyHero")]
public class AllyHero_SO : ScriptableObject
{
private const string EquippedEquipmentSaveCategory = "ally_equipped_equipment";
private const string EquippedEquipmentRecoverySlotPrefix = "ally_equipped_equipment_";
public static readonly string[] BehaviourAxisNames =
{
"题海战术",
@@ -154,6 +157,13 @@ public class AllyHero_SO : ScriptableObject
public equipmentSO equippedEquipment;
public string equippedEquipmentId;
// 【性能】装备存档已从磁盘水合过一次的标记。水合后内存即权威来源:
// SetEquippedEquipment / ApplyEquippedEquipmentPayload / ClearEquippedEquipment 都会同步更新内存与磁盘,
// 因此无需反复解密读盘。idols 界面每次切换角色时 RebuildBag 会对"每件装备 × 每个英雄"调用
// LoadEquippedEquipmentFromLocal 做占用检查,若每次都真正解密 SecureSaveVault 会造成严重卡顿。
// 该标记确保每个英雄整个会话只读盘一次,之后走内存,行为完全不变。
[System.NonSerialized] private bool equippedEquipmentHydrated;
public SkillDefinition GetPrimarySkill()
{
if (availableSkills == null || primarySkillIndex < 0 || primarySkillIndex >= availableSkills.Length) return null;
@@ -506,12 +516,14 @@ public class AllyHero_SO : ScriptableObject
{
List<AllyLevelInfo> sorted = BuildSortedLevelStats();
int unlockedIndex = ResolveUnlockedLevelIndex(sorted);
if (unlockedIndex < 0 || unlockedIndex >= sorted.Count)
int expQualifiedIndex = ResolveExpQualifiedLevelIndex(sorted);
if (unlockedIndex < 0 || expQualifiedIndex < 0 || sorted == null || sorted.Count == 0)
{
return null;
}
return sorted[unlockedIndex];
int effectiveIndex = Mathf.Clamp(Mathf.Min(expQualifiedIndex, unlockedIndex), 0, sorted.Count - 1);
return sorted[effectiveIndex];
}
private List<AllyLevelInfo> BuildSortedLevelStats()
@@ -702,6 +714,16 @@ public class AllyHero_SO : ScriptableObject
return "ally_equippedEquipment_" + ally_heroID;
}
private string GetEquippedEquipmentSaveKey()
{
return ally_heroID.ToString();
}
private string GetEquippedEquipmentRecoverySlotKey()
{
return EquippedEquipmentRecoverySlotPrefix + ally_heroID;
}
private string GetSelectedSkinPrefsKey()
{
return "ally_selectedSkin_" + ally_heroID;
@@ -731,13 +753,39 @@ public class AllyHero_SO : ScriptableObject
equippedEquipmentId = equippedEquipment != null ? equippedEquipment.name : string.Empty;
var payload = new EquippedEquipmentPayload { equippedEquipmentId = equippedEquipmentId ?? string.Empty };
string json = JsonUtility.ToJson(payload);
SecureSaveVault.SaveJson(EquippedEquipmentSaveCategory, GetEquippedEquipmentSaveKey(), payload);
LocalRecoveryMirror.SaveJson(GetEquippedEquipmentRecoverySlotKey(), payload);
PlayerPrefs.SetString(GetEquippedEquipmentPrefsKey(), json);
PlayerPrefs.Save();
}
public void LoadEquippedEquipmentFromLocal()
public void LoadEquippedEquipmentFromLocal(bool forceReload = false)
{
// 已水合且非强制刷新时直接返回,避免重复解密读盘(见 equippedEquipmentHydrated 说明)。
if (equippedEquipmentHydrated && !forceReload)
{
return;
}
// 无论后续走哪条分支,本次调用都视为已完成水合:
// 命中存档→内存已填充;无存档→内存保持当前值,也不必反复重试读盘。
equippedEquipmentHydrated = true;
string key = GetEquippedEquipmentPrefsKey();
EquippedEquipmentPayload payload;
if (SecureSaveVault.TryLoadJson(EquippedEquipmentSaveCategory, GetEquippedEquipmentSaveKey(), out payload) && payload != null)
{
ApplyEquippedEquipmentPayload(payload);
return;
}
if (LocalRecoveryMirror.TryLoadJson(GetEquippedEquipmentRecoverySlotKey(), out payload) && payload != null)
{
ApplyEquippedEquipmentPayload(payload);
SecureSaveVault.SaveJson(EquippedEquipmentSaveCategory, GetEquippedEquipmentSaveKey(), payload);
return;
}
if (!PlayerPrefs.HasKey(key))
{
return;
@@ -749,7 +797,19 @@ public class AllyHero_SO : ScriptableObject
return;
}
EquippedEquipmentPayload payload = JsonUtility.FromJson<EquippedEquipmentPayload>(json);
payload = JsonUtility.FromJson<EquippedEquipmentPayload>(json);
if (payload == null)
{
return;
}
ApplyEquippedEquipmentPayload(payload);
SecureSaveVault.SaveJson(EquippedEquipmentSaveCategory, GetEquippedEquipmentSaveKey(), payload);
LocalRecoveryMirror.SaveJson(GetEquippedEquipmentRecoverySlotKey(), payload);
}
private void ApplyEquippedEquipmentPayload(EquippedEquipmentPayload payload)
{
if (payload == null)
{
return;
@@ -763,6 +823,7 @@ public class AllyHero_SO : ScriptableObject
{
equippedEquipment = equipment;
equippedEquipmentId = equipment != null ? equipment.name : string.Empty;
equippedEquipmentHydrated = true;
#if UNITY_EDITOR
if (!Application.isPlaying)
@@ -801,6 +862,9 @@ public class AllyHero_SO : ScriptableObject
{
equippedEquipment = null;
equippedEquipmentId = string.Empty;
equippedEquipmentHydrated = true;
SecureSaveVault.Delete(EquippedEquipmentSaveCategory, GetEquippedEquipmentSaveKey());
LocalRecoveryMirror.DeleteSlot(GetEquippedEquipmentRecoverySlotKey());
PlayerPrefs.DeleteKey(GetEquippedEquipmentPrefsKey());
PlayerPrefs.Save();
#if UNITY_EDITOR
+14
View File
@@ -50,6 +50,10 @@ public class pressStart : MonoBehaviour
public Image fadeOutImage;
public float startButtonDelay = 2f; // UI starts showing after 2 seconds; allow clicking then.
[Header("UI_UI Jump Blocker")]
public bool blockUIUISceneJump = false;
public string blockUIUISceneJumpMessage = "暂不可进入。";
// polling
private Coroutine pollCoroutine;
private float pollInterval = 3f;
@@ -253,6 +257,16 @@ public class pressStart : MonoBehaviour
Debug.Log("[pressStart] Start requested, initiating transition sequence.");
GameConfig.testMode = false;
if (blockUIUISceneJump)
{
string message = string.IsNullOrWhiteSpace(blockUIUISceneJumpMessage)
? "暂不可进入。"
: blockUIUISceneJumpMessage;
gNotice.error.display(message);
Debug.LogWarning("[pressStart] UI_UI scene jump blocked: " + message);
return;
}
if (warningText != null)
{
warningText.gameObject.SetActive(true);
@@ -0,0 +1,51 @@
using UnityEngine;
public static class TeamSelectionDefaults
{
public const int SlotCount = 5;
private static readonly int[] DefaultHeroIds = { 30201, 30202, 30203, 30204, 30205 };
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Bootstrap()
{
EnsureDefaultTeamIfMissing();
}
public static void EnsureDefaultTeamIfMissing()
{
for (int slot = 1; slot <= SlotCount; slot++)
{
if (PlayerPrefs.HasKey(GetHeroSlotKey(slot)))
{
return;
}
}
for (int slot = 1; slot <= SlotCount; slot++)
{
PlayerPrefs.SetInt(GetHeroSlotKey(slot), GetDefaultHeroId(slot));
}
PlayerPrefs.SetInt("SelectedMainHeroID", DefaultHeroIds[0]);
PlayerPrefs.Save();
}
public static int ReadHeroId(int slot)
{
EnsureDefaultTeamIfMissing();
return Mathf.Max(0, PlayerPrefs.GetInt(GetHeroSlotKey(slot), GetDefaultHeroId(slot)));
}
public static int GetDefaultHeroId(int slot)
{
int index = Mathf.Clamp(slot - 1, 0, DefaultHeroIds.Length - 1);
return DefaultHeroIds[index];
}
private static string GetHeroSlotKey(int slot)
{
int safeSlot = Mathf.Clamp(slot, 1, SlotCount);
return $"selected_heroSlot0{safeSlot}_heroID";
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7dfd23d5af82d6045b465356990ca8b9
@@ -147,21 +147,21 @@ public class TeamSelectorAnimController : MonoBehaviour
void CacheTeamSnapshot()
{
cachedTeam[0] = PlayerPrefs.GetInt("selected_heroSlot01_heroID", 0);
cachedTeam[1] = PlayerPrefs.GetInt("selected_heroSlot02_heroID", 0);
cachedTeam[2] = PlayerPrefs.GetInt("selected_heroSlot03_heroID", 0);
cachedTeam[3] = PlayerPrefs.GetInt("selected_heroSlot04_heroID", 0);
cachedTeam[4] = PlayerPrefs.GetInt("selected_heroSlot05_heroID", 0);
cachedTeam[0] = TeamSelectionDefaults.ReadHeroId(1);
cachedTeam[1] = TeamSelectionDefaults.ReadHeroId(2);
cachedTeam[2] = TeamSelectionDefaults.ReadHeroId(3);
cachedTeam[3] = TeamSelectionDefaults.ReadHeroId(4);
cachedTeam[4] = TeamSelectionDefaults.ReadHeroId(5);
}
bool HasTeamChanged()
{
if (teamChanged) return true;
if (cachedTeam[0] != PlayerPrefs.GetInt("selected_heroSlot01_heroID", 0)) return true;
if (cachedTeam[1] != PlayerPrefs.GetInt("selected_heroSlot02_heroID", 0)) return true;
if (cachedTeam[2] != PlayerPrefs.GetInt("selected_heroSlot03_heroID", 0)) return true;
if (cachedTeam[3] != PlayerPrefs.GetInt("selected_heroSlot04_heroID", 0)) return true;
if (cachedTeam[4] != PlayerPrefs.GetInt("selected_heroSlot05_heroID", 0)) return true;
if (cachedTeam[0] != TeamSelectionDefaults.ReadHeroId(1)) return true;
if (cachedTeam[1] != TeamSelectionDefaults.ReadHeroId(2)) return true;
if (cachedTeam[2] != TeamSelectionDefaults.ReadHeroId(3)) return true;
if (cachedTeam[3] != TeamSelectionDefaults.ReadHeroId(4)) return true;
if (cachedTeam[4] != TeamSelectionDefaults.ReadHeroId(5)) return true;
return false;
}
+6 -5
View File
@@ -289,12 +289,13 @@ public class newTeamSelector : MonoBehaviour
private int[] ReadSelectedHeroIdsFromPlayerPrefs()
{
TeamSelectionDefaults.EnsureDefaultTeamIfMissing();
int[] ids = new int[Mathf.Max(5, slotCount)];
if (ids.Length > 0) ids[0] = Mathf.Max(0, PlayerPrefs.GetInt("selected_heroSlot01_heroID", 0));
if (ids.Length > 1) ids[1] = Mathf.Max(0, PlayerPrefs.GetInt("selected_heroSlot02_heroID", 0));
if (ids.Length > 2) ids[2] = Mathf.Max(0, PlayerPrefs.GetInt("selected_heroSlot03_heroID", 0));
if (ids.Length > 3) ids[3] = Mathf.Max(0, PlayerPrefs.GetInt("selected_heroSlot04_heroID", 0));
if (ids.Length > 4) ids[4] = Mathf.Max(0, PlayerPrefs.GetInt("selected_heroSlot05_heroID", 0));
if (ids.Length > 0) ids[0] = TeamSelectionDefaults.ReadHeroId(1);
if (ids.Length > 1) ids[1] = TeamSelectionDefaults.ReadHeroId(2);
if (ids.Length > 2) ids[2] = TeamSelectionDefaults.ReadHeroId(3);
if (ids.Length > 3) ids[3] = TeamSelectionDefaults.ReadHeroId(4);
if (ids.Length > 4) ids[4] = TeamSelectionDefaults.ReadHeroId(5);
return ids;
}
+1 -1
View File
@@ -1679,7 +1679,7 @@ public static class MailRewardGrantService
resolved = CreateBasicResolved(ResolvedKind.PlayerExp, amount, rewardName, reward.reward_image != null ? reward.reward_image : _playerExpRewardIcon, reward.reward_description, reward, "\u73a9\u5bb6\u7ecf\u9a8c");
return true;
case mail_so.reward_type.money:
resolved = CreateBasicResolved(ResolvedKind.Coins, amount, rewardName, reward.reward_image != null ? reward.reward_image : _coinRewardIcon, reward.reward_description, reward, "\u91d1\u5e01");
resolved = CreateBasicResolved(ResolvedKind.Coins, amount, rewardName, reward.reward_image != null ? reward.reward_image : _coinRewardIcon, reward.reward_description, reward, "算力");
return true;
case mail_so.reward_type.metarial:
resolved = CreateBasicResolved(ResolvedKind.Material, amount, rewardName, reward.reward_image != null ? reward.reward_image : _materialRewardIcon, reward.reward_description, reward, "\u8bb0\u5fc6\u788e\u7247");
@@ -7268,6 +7268,7 @@ GameObject:
- component: {fileID: 1348388220439716234}
- component: {fileID: 6137481741208887361}
- component: {fileID: 1863233853179500241}
- component: {fileID: 1338150670383926109}
m_Layer: 5
m_Name: Text_PLAYER
m_TagString: Untagged
@@ -7291,9 +7292,9 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -80.7, y: -31.391098}
m_SizeDelta: {x: 273.4951, y: 26.8889}
m_Pivot: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 56.047485, y: -31.391068}
m_SizeDelta: {x: 0, y: 26.8889}
m_Pivot: {x: 1, y: 0.5}
--- !u!222 &6137481741208887361
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -7315,19 +7316,19 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.23921569, g: 0.21960784, b: 0.40392157, a: 1}
m_RaycastTarget: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 2dfc162c344875b4da01e6a15073dce5, type: 3}
m_FontSize: 26
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 20
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 2
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 26
m_Alignment: 5
m_AlignByGeometry: 0
@@ -7335,7 +7336,21 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: USERNAME
m_Text: "USERNAME\u8FD9\u662F\u7528\u6237\u7684\u795E\u79D8\u7528\u6237\u540D\u662F12123"
--- !u!114 &1338150670383926109
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5745207992015071035}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &5751219486557543197
GameObject:
m_ObjectHideFlags: 0
@@ -313,6 +313,12 @@ public sealed class AllyHeroDeployLedger : MonoBehaviour
return;
}
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[AllyHeroDeployLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older idol growth data.");
return;
}
SyncAllMirrorFlags();
SyncAllLegacySelectedSlotExpKeys();
AllyHeroDeployLedgerStorage.TrySave(BuildPayload());
@@ -128,11 +128,14 @@ public static class AllyHeroDeployLedgerStorage
byte[] encryptedBytes = Convert.FromBase64String(envelope.payload);
AllyHeroDeployLedgerPayload loadedPayload = null;
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
for (int i = 0; i < identifierVariants.Count; i++)
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count && loadedPayload == null; i++)
{
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
try
{
byte[] plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i]));
byte[] plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i], deviceBindingVariants[d]));
string payloadJson = Encoding.UTF8.GetString(plainBytes);
loadedPayload = JsonUtility.FromJson<AllyHeroDeployLedgerPayload>(payloadJson);
if (loadedPayload != null)
@@ -144,6 +147,7 @@ public static class AllyHeroDeployLedgerStorage
{
}
}
}
if (loadedPayload == null)
{
@@ -208,25 +212,19 @@ public static class AllyHeroDeployLedgerStorage
private static string ComputeSignature(string payloadBase64)
{
string signText = payloadBase64 + "|" + SaveIdentityUtility.GetPrimaryApplicationIdentifier() + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
using (SHA256 sha = SHA256.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(signText);
byte[] hash = sha.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
return ComputeSignature(payloadBase64, SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes()
{
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier());
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes(string applicationIdentifier)
private static byte[] BuildKeyBytes(string applicationIdentifier, string deviceBinding)
{
using (SHA256 sha = SHA256.Create())
{
string seed = applicationIdentifier + "|" + SystemInfo.deviceUniqueIdentifier + "|" + SecretSeed;
string seed = applicationIdentifier + "|" + deviceBinding + "|" + SecretSeed;
return sha.ComputeHash(Encoding.UTF8.GetBytes(seed));
}
}
@@ -234,21 +232,25 @@ public static class AllyHeroDeployLedgerStorage
private static bool TryValidateSignature(string payloadBase64, string signature)
{
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count; i++)
{
string expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i]);
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
string expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i], deviceBindingVariants[d]);
if (string.Equals(expectedSignature, signature, StringComparison.Ordinal))
{
return true;
}
}
}
return false;
}
private static string ComputeSignature(string payloadBase64, string applicationIdentifier)
private static string ComputeSignature(string payloadBase64, string applicationIdentifier, string deviceBinding)
{
string signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
string signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + deviceBinding;
using (SHA256 sha = SHA256.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(signText);
@@ -197,6 +197,12 @@ public sealed class DushMaterialLedger : MonoBehaviour
InitializeIfNeeded();
}
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[DushMaterialLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older material data.");
return;
}
SyncMirrorCounts();
DushMaterialLedgerStorage.TrySave(BuildPayload());
SyncToPlayerData();
@@ -138,11 +138,14 @@ public static class DushMaterialLedgerStorage
var encryptedBytes = Convert.FromBase64String(envelope.payload);
DushMaterialLedgerPayload loadedPayload = null;
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
for (int i = 0; i < identifierVariants.Count; i++)
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count && loadedPayload == null; i++)
{
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
try
{
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i]));
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i], deviceBindingVariants[d]));
var payloadJson = Encoding.UTF8.GetString(plainBytes);
loadedPayload = JsonUtility.FromJson<DushMaterialLedgerPayload>(payloadJson);
if (loadedPayload != null)
@@ -154,6 +157,7 @@ public static class DushMaterialLedgerStorage
{
}
}
}
if (loadedPayload == null)
{
@@ -218,25 +222,19 @@ public static class DushMaterialLedgerStorage
private static string ComputeSignature(string payloadBase64)
{
var signText = payloadBase64 + "|" + SaveIdentityUtility.GetPrimaryApplicationIdentifier() + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
var hash = sha.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
return ComputeSignature(payloadBase64, SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes()
{
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier());
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes(string applicationIdentifier)
private static byte[] BuildKeyBytes(string applicationIdentifier, string deviceBinding)
{
using (var sha = SHA256.Create())
{
var seed = applicationIdentifier + "|" + SystemInfo.deviceUniqueIdentifier + "|" + SecretSeed;
var seed = applicationIdentifier + "|" + deviceBinding + "|" + SecretSeed;
return sha.ComputeHash(Encoding.UTF8.GetBytes(seed));
}
}
@@ -244,21 +242,25 @@ public static class DushMaterialLedgerStorage
private static bool TryValidateSignature(string payloadBase64, string signature)
{
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count; i++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i]);
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i], deviceBindingVariants[d]);
if (string.Equals(expectedSignature, signature, StringComparison.Ordinal))
{
return true;
}
}
}
return false;
}
private static string ComputeSignature(string payloadBase64, string applicationIdentifier)
private static string ComputeSignature(string payloadBase64, string applicationIdentifier, string deviceBinding)
{
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + deviceBinding;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
@@ -10,6 +10,8 @@ public sealed class EquipmentConsumableLedger : MonoBehaviour
private readonly Dictionary<string, int> countsByKey = new Dictionary<string, int>(StringComparer.Ordinal);
private bool initialized;
private bool loadedFromSave;
private bool hasAnyRecoverableLocalState;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Bootstrap()
@@ -65,12 +67,19 @@ public sealed class EquipmentConsumableLedger : MonoBehaviour
}
EquipmentConsumableLedgerPayload payload;
EquipmentConsumableLedgerStorage.TryLoad(out payload);
loadedFromSave = EquipmentConsumableLedgerStorage.TryLoad(out payload);
hasAnyRecoverableLocalState = loadedFromSave || EquipmentConsumableLedgerStorage.HasAnyRecoverableState();
RebuildFromPayload(payload);
initialized = true;
SyncMirrorCounts();
// If an older save exists but cannot be read right now, do not overwrite it
// with an empty default payload during startup.
if (loadedFromSave || !hasAnyRecoverableLocalState)
{
SaveNow();
}
}
public int GetCount(EquipmentConsumableKind kind)
{
@@ -126,6 +135,12 @@ public sealed class EquipmentConsumableLedger : MonoBehaviour
InitializeIfNeeded();
}
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[EquipmentConsumableLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older material data.");
return;
}
SyncMirrorCounts();
EquipmentConsumableLedgerStorage.TrySave(BuildPayload());
}
@@ -52,6 +52,7 @@ public static class EquipmentConsumableLedgerStorage
{
return HasAnyVaultFile(MainFileName)
|| HasAnyVaultFile(BackupFileName)
|| PlayerProgressBackupService.HasEquipmentConsumableBackup()
|| LocalRecoveryMirror.HasSlotData(RecoverySlotKey);
}
@@ -136,11 +137,14 @@ public static class EquipmentConsumableLedgerStorage
var encryptedBytes = Convert.FromBase64String(envelope.payload);
EquipmentConsumableLedgerPayload loadedPayload = null;
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
for (int i = 0; i < identifierVariants.Count; i++)
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count && loadedPayload == null; i++)
{
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
try
{
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i]));
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i], deviceBindingVariants[d]));
var payloadJson = Encoding.UTF8.GetString(plainBytes);
loadedPayload = JsonUtility.FromJson<EquipmentConsumableLedgerPayload>(payloadJson);
if (loadedPayload != null)
@@ -152,6 +156,7 @@ public static class EquipmentConsumableLedgerStorage
{
}
}
}
if (loadedPayload == null)
{
@@ -202,25 +207,19 @@ public static class EquipmentConsumableLedgerStorage
private static string ComputeSignature(string payloadBase64)
{
var signText = payloadBase64 + "|" + SaveIdentityUtility.GetPrimaryApplicationIdentifier() + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
var hash = sha.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
return ComputeSignature(payloadBase64, SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes()
{
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier());
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes(string applicationIdentifier)
private static byte[] BuildKeyBytes(string applicationIdentifier, string deviceBinding)
{
using (var sha = SHA256.Create())
{
var seed = applicationIdentifier + "|" + SystemInfo.deviceUniqueIdentifier + "|" + SecretSeed;
var seed = applicationIdentifier + "|" + deviceBinding + "|" + SecretSeed;
return sha.ComputeHash(Encoding.UTF8.GetBytes(seed));
}
}
@@ -228,21 +227,25 @@ public static class EquipmentConsumableLedgerStorage
private static bool TryValidateSignature(string payloadBase64, string signature)
{
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count; i++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i]);
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i], deviceBindingVariants[d]);
if (string.Equals(expectedSignature, signature, StringComparison.Ordinal))
{
return true;
}
}
}
return false;
}
private static string ComputeSignature(string payloadBase64, string applicationIdentifier)
private static string ComputeSignature(string payloadBase64, string applicationIdentifier, string deviceBinding)
{
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + deviceBinding;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
@@ -295,6 +295,13 @@ public sealed class ExpBottleLedger : MonoBehaviour
public void SaveNow()
{
InitializeIfNeededForSave();
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[ExpBottleLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older material data.");
return;
}
SyncMirrorCounts();
ExpBottleLedgerStorage.TrySave(BuildPayload());
SyncToPlayerData();
@@ -138,11 +138,14 @@ public static class ExpBottleLedgerStorage
var encryptedBytes = Convert.FromBase64String(envelope.payload);
ExpBottleLedgerPayload loadedPayload = null;
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
for (int i = 0; i < identifierVariants.Count; i++)
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count && loadedPayload == null; i++)
{
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
try
{
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i]));
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i], deviceBindingVariants[d]));
var payloadJson = Encoding.UTF8.GetString(plainBytes);
loadedPayload = JsonUtility.FromJson<ExpBottleLedgerPayload>(payloadJson);
if (loadedPayload != null)
@@ -154,6 +157,7 @@ public static class ExpBottleLedgerStorage
{
}
}
}
if (loadedPayload == null)
{
@@ -218,25 +222,19 @@ public static class ExpBottleLedgerStorage
private static string ComputeSignature(string payloadBase64)
{
var signText = payloadBase64 + "|" + SaveIdentityUtility.GetPrimaryApplicationIdentifier() + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
var hash = sha.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
return ComputeSignature(payloadBase64, SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes()
{
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier());
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes(string applicationIdentifier)
private static byte[] BuildKeyBytes(string applicationIdentifier, string deviceBinding)
{
using (var sha = SHA256.Create())
{
var seed = applicationIdentifier + "|" + SystemInfo.deviceUniqueIdentifier + "|" + SecretSeed;
var seed = applicationIdentifier + "|" + deviceBinding + "|" + SecretSeed;
return sha.ComputeHash(Encoding.UTF8.GetBytes(seed));
}
}
@@ -244,21 +242,25 @@ public static class ExpBottleLedgerStorage
private static bool TryValidateSignature(string payloadBase64, string signature)
{
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count; i++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i]);
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i], deviceBindingVariants[d]);
if (string.Equals(expectedSignature, signature, StringComparison.Ordinal))
{
return true;
}
}
}
return false;
}
private static string ComputeSignature(string payloadBase64, string applicationIdentifier)
private static string ComputeSignature(string payloadBase64, string applicationIdentifier, string deviceBinding)
{
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + deviceBinding;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
@@ -48,11 +48,99 @@ public static class FirstRunFactoryResetService
return;
}
// 物理文件兜底探测(最后一道防线):
// HasAnyRecoverableLocalState() 依赖各 Storage 的解密/结构判断,若因根目录别名未覆盖、
// 或存档结构异常而误判为"无存档",仍可能走到出厂重置。这里直接扫描磁盘上是否存在
// 任何存档物理文件(不解密、只看存在),只要有就绝不重置,宁可等待其它恢复路径。
if (HasAnyPhysicalSaveFileOnDisk())
{
Debug.LogWarning("[FactoryReset] 磁盘上存在存档物理文件但未能读出," +
"为避免误删玩家数据,跳过出厂重置并补写初始化标记。");
EnsureInitializedMarker();
return;
}
Debug.LogWarning("[FactoryReset] 首次运行且无可恢复存档,应用出厂默认设置。");
ApplyFactoryReset();
EnsureInitializedMarker();
}
// 扫描所有可能的存档根目录(含新旧包名/公司名别名),只要磁盘上存在任意一个存档物理文件
// 就返回 true。只判存在、不解密——因此不受 deviceUniqueIdentifier 变化影响。
private static bool HasAnyPhysicalSaveFileOnDisk()
{
try
{
IReadOnlyList<string> roots = SaveIdentityUtility.GetPersistentRootVariants();
for (int i = 0; i < roots.Count; i++)
{
string root = roots[i];
if (string.IsNullOrWhiteSpace(root))
{
continue;
}
// 1) 加密存档目录 .cache_bridge:递归找任意 .dat / .bak
string vaultDir = Path.Combine(root, ".cache_bridge");
if (DirectoryHasFileWithAnyExtension(vaultDir, new[] { ".dat", ".bak" }))
{
return true;
}
// 2) 设备无关明文备份 player_progress.bbackup
if (File.Exists(Path.Combine(root, "player_progress.bbackup")))
{
return true;
}
// 3) 恢复镜像目录 .save_recovery:存在任意文件即视为有存档
string recoveryDir = Path.Combine(root, ".save_recovery");
if (DirectoryHasAnyFile(recoveryDir))
{
return true;
}
}
}
catch (Exception ex)
{
// 探测失败时采取保守策略:报告"存在存档",宁可跳过重置也不误删。
Debug.LogWarning("[FactoryReset] 物理存档探测异常,保守跳过出厂重置: " + ex.Message);
return true;
}
return false;
}
private static bool DirectoryHasFileWithAnyExtension(string directory, string[] extensions)
{
if (string.IsNullOrWhiteSpace(directory) || !Directory.Exists(directory))
{
return false;
}
for (int i = 0; i < extensions.Length; i++)
{
string[] matches = Directory.GetFiles(directory, "*" + extensions[i], SearchOption.AllDirectories);
if (matches != null && matches.Length > 0)
{
return true;
}
}
return false;
}
private static bool DirectoryHasAnyFile(string directory)
{
if (string.IsNullOrWhiteSpace(directory) || !Directory.Exists(directory))
{
return false;
}
string[] matches = Directory.GetFiles(directory, "*", SearchOption.AllDirectories);
return matches != null && matches.Length > 0;
}
private static bool HasInitializedMarker()
{
try
@@ -238,6 +238,13 @@ public sealed class PlayerEconomyLedger : MonoBehaviour
public void SaveNow()
{
InitializeIfNeededForSave();
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[PlayerEconomyLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older economy data.");
return;
}
PlayerEconomyStorage.TrySave(payload);
SyncToPlayerData();
GlobalAchievementService.EnsureInstance().ReportCurrentCoins(payload.coins);
@@ -138,12 +138,15 @@ public static class PlayerEconomyStorage
var encryptedBytes = Convert.FromBase64String(envelope.payload);
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
PlayerEconomyPayload loadedPayload = null;
for (int i = 0; i < identifierVariants.Count; i++)
for (int i = 0; i < identifierVariants.Count && loadedPayload == null; i++)
{
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
try
{
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i]));
var plainBytes = XorTransform(encryptedBytes, BuildKeyBytes(identifierVariants[i], deviceBindingVariants[d]));
var payloadJson = Encoding.UTF8.GetString(plainBytes);
loadedPayload = JsonUtility.FromJson<PlayerEconomyPayload>(payloadJson);
if (loadedPayload != null)
@@ -155,6 +158,7 @@ public static class PlayerEconomyStorage
{
}
}
}
if (loadedPayload == null)
{
@@ -219,25 +223,19 @@ public static class PlayerEconomyStorage
private static string ComputeSignature(string payloadBase64)
{
var signText = payloadBase64 + "|" + SaveIdentityUtility.GetPrimaryApplicationIdentifier() + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
var hash = sha.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
return ComputeSignature(payloadBase64, SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes()
{
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier());
return BuildKeyBytes(SaveIdentityUtility.GetPrimaryApplicationIdentifier(), SaveIdentityUtility.GetPrimaryDeviceBinding());
}
private static byte[] BuildKeyBytes(string applicationIdentifier)
private static byte[] BuildKeyBytes(string applicationIdentifier, string deviceBinding)
{
using (var sha = SHA256.Create())
{
var seed = applicationIdentifier + "|" + SystemInfo.deviceUniqueIdentifier + "|" + SecretSeed;
var seed = applicationIdentifier + "|" + deviceBinding + "|" + SecretSeed;
return sha.ComputeHash(Encoding.UTF8.GetBytes(seed));
}
}
@@ -245,21 +243,25 @@ public static class PlayerEconomyStorage
private static bool TryValidateSignature(string payloadBase64, string signature)
{
var identifierVariants = SaveIdentityUtility.GetApplicationIdentifierVariants();
var deviceBindingVariants = SaveIdentityUtility.GetDeviceBindingVariants();
for (int i = 0; i < identifierVariants.Count; i++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i]);
for (int d = 0; d < deviceBindingVariants.Count; d++)
{
var expectedSignature = ComputeSignature(payloadBase64, identifierVariants[i], deviceBindingVariants[d]);
if (string.Equals(expectedSignature, signature, StringComparison.Ordinal))
{
return true;
}
}
}
return false;
}
private static string ComputeSignature(string payloadBase64, string applicationIdentifier)
private static string ComputeSignature(string payloadBase64, string applicationIdentifier, string deviceBinding)
{
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + SystemInfo.deviceUniqueIdentifier;
var signText = payloadBase64 + "|" + applicationIdentifier + "|" + SecretSeed + "|" + deviceBinding;
using (var sha = SHA256.Create())
{
var bytes = Encoding.UTF8.GetBytes(signText);
@@ -191,6 +191,12 @@ public sealed class PlayerExperienceLedger : MonoBehaviour
payload = CreateDefaultPayload();
}
if (!loadedFromSave && hasAnyRecoverableLocalState)
{
Debug.LogWarning("[PlayerExperienceLedger] Recoverable save state exists but could not be loaded; skip saving to avoid overwriting older player experience data.");
return;
}
payload.lastUpdatedUtcTicks = DateTime.UtcNow.Ticks;
SecureSaveVault.SaveJson("player_experience", "runtime", payload, GetLegacySavePath());
PlayerProgressBackupService.SavePlayerExperience(payload.playerExp);
@@ -78,6 +78,12 @@ public static class PlayerProgressBackupService
return TryLoadBundle(out bundle) && bundle != null && bundle.dushMaterial != null;
}
public static bool HasEquipmentConsumableBackup()
{
PlayerProgressBackupBundle bundle;
return TryLoadBundle(out bundle) && bundle != null && bundle.equipmentConsumable != null;
}
public static bool HasStoreOwnershipBackup()
{
PlayerProgressBackupBundle bundle;
@@ -301,7 +301,7 @@ public sealed class PlayerSkillService : MonoBehaviour
if (grantedCoins > 0)
{
PlayerEconomyLedger.EnsureInstance().AddCoins(grantedCoins);
grantedEntries.Add(gItemGet.Create("\u91d1\u5e01", null, grantedCoins, new Color32(240, 196, 74, 255)));
grantedEntries.Add(gItemGet.Create("算力", null, grantedCoins, new Color32(240, 196, 74, 255)));
}
}
@@ -376,7 +376,7 @@ public sealed class PlayerSkillService : MonoBehaviour
int grantedCoins = purchaseAmount * 4;
PlayerEconomyLedger.EnsureInstance().AddCoins(grantedCoins);
rewardEntry = gItemGet.Create("\u91d1\u5e01", item.itemIcon, grantedCoins, new Color32(240, 196, 74, 255));
rewardEntry = gItemGet.Create("算力", item.itemIcon, grantedCoins, new Color32(240, 196, 74, 255));
return true;
}

Some files were not shown because too many files have changed in this diff Show More