装备系统完结,修复并加入很多

This commit is contained in:
FloatGaming
2026-04-03 19:15:02 +08:00
parent 538085b64f
commit d9376833b6
378 changed files with 62464 additions and 16756 deletions
+4 -1
View File
@@ -2603,6 +2603,7 @@ MonoBehaviour:
editorStoreItemPath: Assets/Resources/so/storeSO
runtimeStoreItemPath: so/storeSO
coinSprite: {fileID: 21300000, guid: 81c13879952e72d408a0cfa362ebfd02, type: 3}
materialSprite: {fileID: 21300000, guid: 27adfaee3f8bee14280e634021049f50, type: 3}
cannotBuySprite: {fileID: 21300000, guid: 31a50f150f27159408988fc7f06b2f9e, type: 3}
p_itemName: {fileID: 367982752364813130}
p_itemImage: {fileID: 8550183957802516248}
@@ -2613,6 +2614,8 @@ MonoBehaviour:
p_iAmount_input: {fileID: 8736896944012560947}
purchaseButton: {fileID: 3776779056132822371}
p_detailedDescriptionText: {fileID: 8225140069678777211}
ctasPrefab: {fileID: 3429255239314582862, guid: 4094c58a53fbfea47a443249662f8a7f, type: 3}
ctasParent: {fileID: 5921857076690932212}
--- !u!1 &3890694095796514525
GameObject:
m_ObjectHideFlags: 0
@@ -5925,7 +5928,7 @@ MonoBehaviour:
m_HandleRect: {fileID: 946030816342223727}
m_Direction: 0
m_Value: 0
m_Size: 0.99999994
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 0
expBottleName: "<color=#5F9B6B>\u51E1\u54C1\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: f1d975f2a96c80f45b92690b57431550, type: 3}
itemRarity: 1
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#5F9B6B>C\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528</color></b>\uFF0C\u63D0\u5347\u517110\u7ECF\u9A8C\u503C\u3002\u4E00\u822C\u9700\u8981500\u7ECF\u9A8C\u53471\u5230D\u7EA7\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 0
serviceLevel: 1
grantedExp: 10
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 1
expBottleName: "<color=#4A86B8>\u4E2D\u54C1\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: f9fd35dd32d5a334198a062117a81489, type: 3}
itemRarity: 2
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#4A86B8>B\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528</color></b>\uFF0C\u63D0\u5347\u517120\u7ECF\u9A8C\u503C\u3002\u4E00\u822C\u9700\u89811000\u7ECF\u9A8C\u53471\u5230A\u7EA7\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 0
serviceLevel: 2
grantedExp: 20
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 2
expBottleName: "<color=#8A6CB0>\u4E0A\u54C1\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: 00a08daafba61f64ea75c35fec0e2df7, type: 3}
itemRarity: 3
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#8A6CB0>A\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528</color></b>\uFF0C\u63D0\u5347\u517120\u7ECF\u9A8C\u503C\u3002\u4E00\u822C\u9700\u89812000\u7ECF\u9A8C\u53471\u5230S\u7EA7\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 0
serviceLevel: 3
grantedExp: 20
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 3
expBottleName: "<color=#B88645>\u6781\u54C1\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: 0e7ed0e47c2cf774d9c60ef2ed161c63, type: 3}
itemRarity: 4
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#B88645>\u51C6S\u9605\u5386\u8D44\u683C\u5076\u50CF\u6548\u7528</color></b>\uFF0C\u4F5C\u4E3A\u7A81\u7834\u8017\u6750\uFF0C\u4E0D\u63D0\u4F9B\u7ECF\u9A8C\u3002\u53EF\u753127\u4E2A\u4E0A\u54C1\u590D\u6F14\u5355\u5143\u5408\u6210\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 1
serviceLevel: 4
grantedExp: 0
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 4
expBottleName: "<color=#B84C4C>\u7EDD\u54C1\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: c671f69e3c0b99243bd1022db1bbfcd1, type: 3}
itemRarity: 5
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#B84C4C>\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528</color></b>\uFF0C\u7ACB\u523B\u83B7\u5F97\u8DDD\u79BB\u5F53\u524D\u4E0B\u4E00\u7EA7\u7A81\u7834\u6240\u9700\u7684\u5269\u4F59\u7ECF\u9A8C\u503C\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 1
serviceLevel: 0
grantedExp: 0
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 5
expBottleName: "<color=#D96C9E>\u4ED9\u54C1\u8D85\u80FD\u590D\u6F14\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: 107d71e23e2319d4e82f82983bac7122, type: 3}
itemRarity: 6
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "<b><color=#D96C9E>\u4EFB\u610F\u9605\u5386\u8D44\u683C\u5076\u50CF\u53EF\u7528</color></b>\uFF0C\u7ACB\u523B\u8BA9\u5076\u50CF\u8FBE\u5230\u51C6S\u7A81\u7834\u6C34\u5E73\uFF0C\u5E76\u8865\u9F50\u4E2D\u95F4\u7701\u7565\u7684\u7A81\u7834\u6750\u6599\u53EF\u6210\u529F\u7A81\u7834\u81F3S\u3002"
runtimeOwnedCount: 0
bottleType: 0
expApplyMode: 2
serviceLevel: 0
grantedExp: 0
rainAllTargetCount: 0
rainAllGrantedExpPerHero: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 6
expBottleName: "<color=#5F9B6B>\u5171\u4EAB\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: 119d6caf259b1564c95cf54f5ccf5d24, type: 3}
itemRarity: 3
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "\u4F7F\u7528\u540E\u7ED9\u968F\u673A3\u4E2A\u672A\u5230\u8FBE\u7A81\u7834\u9650\u5236\u7684\u5076\u50CF\u63D0\u4F9B10\u7ECF\u9A8C\u3002\u5982\u679C\u5269\u4F59\u5076\u50CF\u6570\u91CF\u4E0D\u6EE1\u8DB3\uFF0C\u80FD\u53D1\u591A\u5C11\u4EBA\u53D1\u591A\u5C11\uFF0C\u4E0D\u989D\u5916\u591A\u53D1\u3002"
runtimeOwnedCount: 0
bottleType: 1
expApplyMode: 0
serviceLevel: 0
grantedExp: 0
rainAllTargetCount: 3
rainAllGrantedExpPerHero: 10
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 7
expBottleName: "<color=#4A86B8>\u9AD8\u7EA7\u5171\u4EAB\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: e270aad0cf285c04dac5a6758b069e63, type: 3}
itemRarity: 4
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "\u4F7F\u7528\u540E\u7ED9\u968F\u673A4\u4E2A\u672A\u5230\u8FBE\u7A81\u7834\u9650\u5236\u7684\u5076\u50CF\u63D0\u4F9B20\u7ECF\u9A8C\u3002"
runtimeOwnedCount: 0
bottleType: 1
expApplyMode: 0
serviceLevel: 0
grantedExp: 0
rainAllTargetCount: 4
rainAllGrantedExpPerHero: 20
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,10 +15,15 @@ MonoBehaviour:
bottleKind: 8
expBottleName: "<color=#8A6CB0>\u8D85\u7EA7\u5171\u4EAB\u5355\u5143</color>"
expBottleSprite: {fileID: 21300000, guid: e74de04611dd13249901884ca82ba46c, type: 3}
itemRarity: 5
expBottleUsage: "\u89D2\u8272\u57F9\u517B"
expBottleDescription: "\u4F7F\u7528\u540E\u7ED9\u968F\u673A5\u4E2A\u672A\u5230\u8FBE\u7A81\u7834\u9650\u5236\u7684\u5076\u50CF\u63D0\u4F9B30\u7ECF\u9A8C\u3002"
runtimeOwnedCount: 0
bottleType: 1
expApplyMode: 0
serviceLevel: 0
grantedExp: 0
rainAllTargetCount: 5
rainAllGrantedExpPerHero: 30
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,7 +15,12 @@ MonoBehaviour:
materialKind: 0
growthMaterialName: "<color=#4A86B8>\u4E09\u7EA7\u5F52\u6863\u5408\u7EA6</color>"
growthMaterialSprite: {fileID: 21300000, guid: 26b4d8692c5e74d17bd9dc28bcbe961b, type: 3}
itemRarity: 2
growthMaterialUsage: "\u89D2\u8272\u7A81\u7834"
growthMaterialDescription: "\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"
runtimeOwnedCount: 0
materialType: 0
serviceLevel: 1
breakthroughTargetLevel: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,7 +15,12 @@ MonoBehaviour:
materialKind: 1
growthMaterialName: "<color=#8A6CB0>\u4E8C\u7EA7\u5F52\u6863\u5408\u7EA6</color>"
growthMaterialSprite: {fileID: 21300000, guid: b83080d92786f42589381bbe09110c3c, type: 3}
itemRarity: 3
growthMaterialUsage: "\u89D2\u8272\u7A81\u7834"
growthMaterialDescription: "\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"
runtimeOwnedCount: 0
materialType: 0
serviceLevel: 2
breakthroughTargetLevel: 1
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,7 +15,12 @@ MonoBehaviour:
materialKind: 2
growthMaterialName: "<color=#B88645>\u4E00\u7EA7\u5F52\u6863\u5408\u7EA6</color>"
growthMaterialSprite: {fileID: 21300000, guid: 6fc31519aded24a839c1af9e163b6c01, type: 3}
itemRarity: 4
growthMaterialUsage: "\u89D2\u8272\u7A81\u7834"
growthMaterialDescription: "\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"
runtimeOwnedCount: 0
materialType: 0
serviceLevel: 3
breakthroughTargetLevel: 2
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,7 +15,12 @@ MonoBehaviour:
materialKind: 3
growthMaterialName: "<color=#B84C4C>\u901A\u7528\u5F52\u6863\u5408\u7EA6</color>"
growthMaterialSprite: {fileID: 21300000, guid: b72023ef6c5c54ebb94ee8c520cfe2e9, type: 3}
itemRarity: 5
growthMaterialUsage: "\u89D2\u8272\u7A81\u7834"
growthMaterialDescription: "\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"
runtimeOwnedCount: 0
materialType: 1
serviceLevel: 0
breakthroughTargetLevel: 2
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,6 +15,10 @@ MonoBehaviour:
consumableKind: 0
consumableName: "<color=#6A4C9C>\u7F8E\u5473\u5C0F\u86CB\u7CD5</color>"
consumableSprite: {fileID: 21300000, guid: 2cc4c147b6b7649d6ac98a928018c544, type: 3}
itemRarity: 2
consumableUsage: "\u88C5\u5907\u5347\u9636"
consumableDescription: "\u4E00\u5757\u770B\u4E0A\u53BB\u5F88\u597D\u5403\u7684\u6155\u65AF\u5976\u6CB9\u86CB\u7CD5\uFF0C\u53EF\u4EE5\u5E2E\u52A9\u8BB0\u5FC6\u8FFD\u5FC6"
runtimeOwnedCount: 0
consumableType: 0
@@ -1,4 +1,4 @@
%YAML 1.1
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
@@ -15,6 +15,10 @@ MonoBehaviour:
consumableKind: 1
consumableName: "<color=#B84C4C>\u5927\u578B\u70ED\u91CF\u70B8\u5F39</color>"
consumableSprite: {fileID: 21300000, guid: 5e0181b769b64401bac538a3310aa847, type: 3}
itemRarity: 3
consumableUsage: "\u88C5\u5907\u5E7B\u5316"
consumableDescription: "\u4E00\u4E2A\u5DE8\u5927\u768414\u5BF8\u6C34\u679C\u6155\u65AF\u5976\u6CB9\u86CB\u7CD5\uFF0C\u5B83\u5C06\u4F60\u5E26\u56DE\u4E86\u4F60\u4E0E\u521D\u604B\u7EA6\u4F1A\u7684\u90A3\u4E2A\u751C\u871C\u590F\u5929\u3002\n\n\u4F60\u671B\u7740\u5979\u7684\u80CC\u5F71\uFF0C\u5FC3\u4E2D\u90A3\u53E5\u8BDD\u6700\u7EC8\u8FD8\u662F\u6CA1\u6709\u8BF4\u51FA\u53E3\u3002\u5915\u9633\u4E2D\u4F60\u62D9\u52A3\u5730\u62E8\u5F04\u7740\u5409\u4ED6\u7684\u7434\u5F26\uFF0C\u534A\u751F\u4E0D\u719F\u5730\u5F39\u7740\u901F\u6210\u7684\u7B80\u5355\u8C31\u5B50\u3002\u5979\u8010\u5FC3\u5730\u542C\u5B8C\u4E86\uFF0C\u9752\u6DA9\u7684\u8138\u5E9E\u6CDB\u8D77\u7F9E\u6DA9\u817C\u8146\u7684\u7EA2\u6655\u3002\u5FAE\u98CE\u4E2D\uFF0C\u5979\u7684\u957F\u53D1\u5212\u8FC7\u5634\u89D2\uFF0C\u9732\u51FA\u53EA\u6709\u4F60\u80FD\u8BFB\u61C2\u7684\u5F27\u5EA6\u3002\n\n\u2014\u2014\u591A\u5E74\u8FC7\u53BB\uFF0C\u4F60\u518D\u672A\u5F97\u5230\u5979\u7684\u4EFB\u4F55\u6D88\u606F\u3002\u90A3\u628A\u5409\u4ED6\u627F\u8F7D\u7740\u4F60\u7684\u56DE\u5FC6\uFF0C\u6162\u6162\u5728\u5899\u89D2\u72EC\u81EA\u53D1\u9709\u3002\u60C5\u4E0D\u81EA\u7981\u5728\u8111\u6D77\u4E2D\u56DE\u671B\uFF0C\u4F46\u90A3\u91CC\u5DF2\u7ECF\u6CA1\u6709\u5979\u7684\u8EAB\u5F71\u4E86\u3002\n\n\u6B64\u6D88\u8017\u54C1\u7528\u4E8E<color=#B84C4C>\u8BB0\u5FC6\u5DE1\u6F14</color>\uFF0C\u5C06\u4F60\u77ED\u6682\u5730\u5E26\u56DE\u4F60\u751F\u547D\u4E2D\u6700\u5E78\u798F\u7684\u65F6\u523B\u3002\u53EA\u662F\u7247\u523B\u4E4B\u95F4\u4E5F\u4F1A\u5F88\u5FEB\u5316\u4F5C\u6CE1\u5F71\u5427\u3002"
runtimeOwnedCount: 0
consumableType: 1
@@ -0,0 +1,24 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a1c4cf8e52e6474dbd7c44be4a6a7810, type: 3}
m_Name: 78121_equipment_transfer_material
m_EditorClassIdentifier:
consumableKind: 2
consumableName: "\u524D\u5C18\u4F59\u97F5\u6E90\u6676"
consumableSprite: {fileID: 21300000, guid: a470194d6b54e8848b0b338c688da9ed, type: 3}
itemRarity: 4
consumableUsage: "\u88C5\u5907\u6D17\u70BC"
consumableDescription: "\u7528\u4E8E\u88C5\u5907\u6D17\u70BC\uFF08\u5C5E\u6027\u8F6C\u79FB\uFF09\u7684\u6D88\u8017\u54C1\u3002"
runtimeOwnedCount: 0
consumableType: 2
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 11164239e74f4101ac94d6f7b80ac547
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,24 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a1c4cf8e52e6474dbd7c44be4a6a7810, type: 3}
m_Name: 78131_equipment_final_material
m_EditorClassIdentifier:
consumableKind: 3
consumableName: "\u60CA\u9E3F\u68A6\u9192\u4E4B\u529B"
consumableSprite: {fileID: 21300000, guid: b744ed0c702d8994982728691f19e3ed, type: 3}
itemRarity: 7
consumableUsage:
consumableDescription: "\u7528\u4E8E\u88C5\u5907\u767B\u9876\u5F3A\u5316\u7684\u6D88\u8017\u54C1\u3002"
runtimeOwnedCount: 0
consumableType: 3
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7b38bd4f8a8d45d8bd5bd6de3893b995
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -6,13 +6,17 @@ public class equipmentConsumableSO : ScriptableObject
public enum EquipmentConsumableType
{
UpgradeMaterial,
BreakthroughMaterial
BreakthroughMaterial,
TransferMaterial,
FinalDreamMaterial
}
[Header("Identity")]
public EquipmentConsumableKind consumableKind = EquipmentConsumableKind.Material78101;
public string consumableName;
public Sprite consumableSprite;
public ItemRarity itemRarity = ItemRarity.Uncommon;
public string consumableUsage;
[TextArea(3, 3)] public string consumableDescription;
[Header("Runtime Mirror")]
@@ -29,6 +29,8 @@ public class expBottlesSO : ScriptableObject
public ExpBottleKind bottleKind = ExpBottleKind.Common;
public string expBottleName;
public Sprite expBottleSprite;
public ItemRarity itemRarity = ItemRarity.Common;
public string expBottleUsage;
[TextArea(3, 3)] public string expBottleDescription;
[Header("Runtime Mirror")]
@@ -45,4 +47,4 @@ public class expBottlesSO : ScriptableObject
[Header("Rain All Gameplay")]
[Min(0)] public int rainAllTargetCount = 0;
[Min(0)] public int rainAllGrantedExpPerHero = 0;
}
}
@@ -29,6 +29,8 @@ public class growthMaterialSO : ScriptableObject
public DushMaterialKind materialKind = DushMaterialKind.Material78021;
public string growthMaterialName;
public Sprite growthMaterialSprite;
public ItemRarity itemRarity = ItemRarity.Uncommon;
public string growthMaterialUsage;
[TextArea(3, 3)] public string growthMaterialDescription;
[Header("Runtime Mirror")]
+4
View File
@@ -8,6 +8,7 @@ public class storeItemSO : ScriptableObject
[Header("Basic Info")]
public string itemName;
public Sprite itemIcon;
public ItemRarity itemRarity = ItemRarity.None;
public int itemID; // Unique identifier for the item
public int itemSinglePurchaseQty; // 物品单次购买数量
public int itemPurchaseQuota; // 物品限购配额,-1为不限购
@@ -29,6 +30,8 @@ public class storeItemSO : ScriptableObject
public expBottlesSO associatedExpBottle; // Only used by single-target exp bottles such as 78001-78006
public growthMaterialSO associatedGrowthMaterial; // Only used by breakthrough materials such as 78021-78024
public equipmentConsumableSO associatedEquipmentConsumable; // Only used by equipment upgrade/breakthrough consumables such as 78101/78111
public smeltStageRewardSO associatedSelectableEquipmentRewardSource; // Used by shop entries that grant equipment through ctas selection
public int associatedSelectableEquipmentRewardIndex = -1;
[Header("Purchase Cost")]
public List<CostRequirement> costRequirements = new List<CostRequirement>();
@@ -51,6 +54,7 @@ public class storeItemSO : ScriptableObject
public enum CurrencyType
{
coins,
material,
}
public enum StoryPassageGrantMode
+302 -8
View File
@@ -41,6 +41,7 @@ public class storeSystem : MonoBehaviour
[Header("sprites")]
public Sprite coinSprite;
public Sprite materialSprite;
public Sprite cannotBuySprite;
[Header("selecting item purchase")]
@@ -54,6 +55,10 @@ public class storeSystem : MonoBehaviour
public Button purchaseButton;
public Text p_detailedDescriptionText;
[Header("selectable equipment reward")]
public GameObject ctasPrefab;
public Transform ctasParent;
private const int MinPurchaseAmount = 1;
private const int MaxPurchaseAmount = 999999;
private static readonly Color InsufficientCostColor = new Color(0.45f, 0.08f, 0.08f, 1f);
@@ -67,6 +72,7 @@ public class storeSystem : MonoBehaviour
private int currentPurchaseAmount = MinPurchaseAmount;
private bool suppressAmountInputCallback;
private Color defaultSumCostColor = Color.white;
private GameObject activeCtasInstance;
private string LegacySaveFilePath
{
@@ -102,6 +108,7 @@ public class storeSystem : MonoBehaviour
private void OnDestroy()
{
CloseActiveCtas();
UnregisterHeaderControlCallbacks();
UnregisterToggleCallbacks();
UnregisterPurchasePanelCallbacks();
@@ -274,6 +281,7 @@ public class storeSystem : MonoBehaviour
private void OnCloseButtonClicked()
{
CloseActiveCtas();
gameObject.SetActive(false);
}
@@ -624,7 +632,7 @@ public class storeSystem : MonoBehaviour
&& itemSO.canbepurchased
&& !IsAssociatedContentUnlocked(itemSO)
&& !IsSoldOut(itemSO)
&& HasCoinRequirement(itemSO);
&& HasSupportedRequirement(itemSO);
}
private void SpawnItem(storeItemSO itemSO)
@@ -732,7 +740,7 @@ public class storeSystem : MonoBehaviour
: itemSO.itemDetailedDescription;
}
if (resetAmount)
if (resetAmount || IsSelectableEquipmentRewardItem(itemSO))
{
SetPurchaseAmount(MinPurchaseAmount, false);
}
@@ -742,6 +750,7 @@ public class storeSystem : MonoBehaviour
RefreshPurchaseSummary();
}
UpdatePurchaseAmountControlsState(itemSO);
RefreshPurchaseButtonState();
}
@@ -773,6 +782,7 @@ public class storeSystem : MonoBehaviour
currentPurchaseAmount = MinPurchaseAmount;
UpdatePurchaseAmountInput();
UpdatePurchaseAmountControlsState(null);
RefreshPurchaseButtonState();
}
@@ -839,6 +849,26 @@ public class storeSystem : MonoBehaviour
}
}
private void UpdatePurchaseAmountControlsState(storeItemSO itemSO)
{
bool forceSinglePurchase = IsSelectableEquipmentRewardItem(itemSO);
if (p_iAmount_plus != null)
{
p_iAmount_plus.interactable = !forceSinglePurchase;
}
if (p_iAmount_minus != null)
{
p_iAmount_minus.interactable = !forceSinglePurchase;
}
if (p_iAmount_input != null)
{
p_iAmount_input.interactable = !forceSinglePurchase;
}
}
private void SetPurchaseAmount(int amount, bool showWarnings)
{
int clampedAmount = amount;
@@ -927,10 +957,15 @@ public class storeSystem : MonoBehaviour
return coinSprite;
}
if (currencyType == storeItemSO.CurrencyType.material)
{
return materialSprite;
}
return null;
}
private bool HasCoinRequirement(storeItemSO itemSO)
private bool HasSupportedRequirement(storeItemSO itemSO)
{
if (itemSO == null || itemSO.costRequirements == null || itemSO.costRequirements.Count == 0)
{
@@ -1009,6 +1044,12 @@ public class storeSystem : MonoBehaviour
return;
}
if (IsSelectableEquipmentRewardItem(currentSelectedItem))
{
HandleSelectableEquipmentPurchaseClicked(currentSelectedItem);
return;
}
string failureMessage;
int grantedCount;
if (!StoreExpBottlePurchaseService.TryPurchase(playerData, currentSelectedItem, currentPurchaseAmount, out failureMessage, out grantedCount))
@@ -1026,6 +1067,125 @@ public class storeSystem : MonoBehaviour
RefreshCurrentView();
}
private void HandleSelectableEquipmentPurchaseClicked(storeItemSO itemSO)
{
if (itemSO == null)
{
return;
}
if (currentPurchaseAmount != 1)
{
SetPurchaseAmount(1, false);
gNotice.warning.display("该物品仅支持单份购买");
return;
}
if (!TryGetSelectableEquipmentRequirement(itemSO, out smeltStageRewardSO rewardSource, out smeltStageRewardSO.SmeltStageRewardRequirement requirement))
{
gNotice.warning.display("当前未配置发放逻辑");
return;
}
bool requireTypeSelection = RequiresTypeSelection(requirement);
bool requireSkillSelection = RequiresSkillSelection(requirement);
if (!requireTypeSelection && !requireSkillSelection)
{
TryCompleteSelectableEquipmentPurchase(itemSO, rewardSource, requirement, null, 0);
return;
}
if (ctasPrefab == null || ctasParent == null || rewardSource == null || rewardSource.rewardRandomConfig == null)
{
gNotice.warning.display("选择器未配置");
return;
}
CloseActiveCtas();
GameObject instance = Instantiate(ctasPrefab, ctasParent);
activeCtasInstance = instance;
global::ctasPrefab selector = instance.GetComponent<global::ctasPrefab>();
if (selector == null)
{
Destroy(instance);
activeCtasInstance = null;
gNotice.warning.display("选择器未配置");
return;
}
equipmentSO selectionTemplate = rewardSource.rewardTemplate != null
? Instantiate(rewardSource.rewardTemplate)
: ScriptableObject.CreateInstance<equipmentSO>();
selectionTemplate.hideFlags = HideFlags.DontSave;
selectionTemplate.sa_skillID = 0;
selectionTemplate.ia_skillID = 0;
selectionTemplate.skillType = requirement.chosenSkillType;
selector.Initialize(
selectionTemplate,
rewardSource.rewardRandomConfig,
requireTypeSelection,
requireSkillSelection,
(selectedType, selectedSkillGroupId) =>
{
activeCtasInstance = null;
TryCompleteSelectableEquipmentPurchase(itemSO, rewardSource, requirement, selectedType, selectedSkillGroupId);
},
() => { activeCtasInstance = null; });
}
private void TryCompleteSelectableEquipmentPurchase(
storeItemSO itemSO,
smeltStageRewardSO rewardSource,
smeltStageRewardSO.SmeltStageRewardRequirement requirement,
equipmentSO.EquipmentSkillType? selectedType,
int selectedSkillGroupId)
{
if (itemSO == null || rewardSource == null || requirement == null || itemSO.costRequirements == null || itemSO.costRequirements.Count == 0)
{
gNotice.warning.display("商品数据丢失");
return;
}
var primaryCost = itemSO.costRequirements[0];
int totalCost = Mathf.Max(0, primaryCost.amount);
string insufficientMessage = primaryCost.currencyType == storeItemSO.CurrencyType.material ? "记忆碎片不足" : "货币不足";
if (!HasEnoughCurrency(primaryCost.currencyType, totalCost))
{
gNotice.warning.display(insufficientMessage);
RefreshPurchaseSummary();
return;
}
if (!TrySpendCurrency(primaryCost.currencyType, totalCost))
{
gNotice.warning.display(insufficientMessage);
RefreshPurchaseSummary();
return;
}
equipmentSO generated = equipmentGenerator.GenerateFromSmeltReward(
rewardSource,
requirement,
selectedType,
selectedSkillGroupId);
if (generated == null)
{
RefundCurrency(primaryCost.currencyType, totalCost);
gNotice.warning.display("装备发放失败");
RefreshPurchaseSummary();
return;
}
RegisterPurchasedCount(itemSO.itemID, 1);
RefreshAllEquipBags();
}
private string GetAmountAndQuotaText(storeItemSO itemSO)
{
string prefix = itemSO.itemSinglePurchaseQty == 1 ? string.Empty : $"{itemSO.itemSinglePurchaseQty}个装/";
@@ -1064,7 +1224,7 @@ public class storeSystem : MonoBehaviour
private string GetPriceAmountText(storeItemSO itemSO)
{
if (itemSO == null || !itemSO.canbepurchased || IsAssociatedContentUnlocked(itemSO) || !HasCoinRequirement(itemSO))
if (itemSO == null || !itemSO.canbepurchased || IsAssociatedContentUnlocked(itemSO) || !HasSupportedRequirement(itemSO))
{
return "不可购买";
}
@@ -1074,22 +1234,156 @@ public class storeSystem : MonoBehaviour
private bool ShouldShowPriceIcon(storeItemSO itemSO)
{
return itemSO != null && itemSO.canbepurchased && !IsAssociatedContentUnlocked(itemSO) && HasCoinRequirement(itemSO);
return itemSO != null && itemSO.canbepurchased && !IsAssociatedContentUnlocked(itemSO) && HasSupportedRequirement(itemSO);
}
private bool CanPurchaseCurrentSelection(storeItemSO itemSO)
{
return IsCurrentlyPurchasable(itemSO);
return IsCurrentlyPurchasable(itemSO)
&& (!IsSelectableEquipmentRewardItem(itemSO) || currentPurchaseAmount == 1);
}
private bool CanAffordCurrentSelection(long totalCost)
{
if (totalCost <= 0)
if (currentSelectedItem == null || totalCost <= 0)
{
return true;
}
return PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(totalCost);
var cost = currentSelectedItem.costRequirements != null && currentSelectedItem.costRequirements.Count > 0
? currentSelectedItem.costRequirements[0]
: null;
if (cost == null)
{
return false;
}
switch (cost.currencyType)
{
case storeItemSO.CurrencyType.coins:
return PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(totalCost);
case storeItemSO.CurrencyType.material:
return PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(totalCost);
default:
return false;
}
}
private bool IsSelectableEquipmentRewardItem(storeItemSO itemSO)
{
return itemSO != null
&& itemSO.associatedSelectableEquipmentRewardSource != null
&& itemSO.associatedSelectableEquipmentRewardIndex >= 0;
}
private bool TryGetSelectableEquipmentRequirement(
storeItemSO itemSO,
out smeltStageRewardSO rewardSource,
out smeltStageRewardSO.SmeltStageRewardRequirement requirement)
{
rewardSource = null;
requirement = null;
if (!IsSelectableEquipmentRewardItem(itemSO))
{
return false;
}
rewardSource = itemSO.associatedSelectableEquipmentRewardSource;
if (rewardSource.rewardRequirements == null
|| itemSO.associatedSelectableEquipmentRewardIndex >= rewardSource.rewardRequirements.Length)
{
rewardSource = null;
return false;
}
requirement = rewardSource.rewardRequirements[itemSO.associatedSelectableEquipmentRewardIndex];
return requirement != null;
}
private bool RequiresTypeSelection(smeltStageRewardSO.SmeltStageRewardRequirement requirement)
{
if (requirement == null)
{
return false;
}
if (requirement.equipmentType == smeltStageRewardSO.equipType.selfChosenType)
{
return true;
}
return !string.IsNullOrEmpty(requirement.equipRewardName)
&& requirement.equipRewardName.Contains("自选");
}
private bool RequiresSkillSelection(smeltStageRewardSO.SmeltStageRewardRequirement requirement)
{
return requirement != null
&& requirement.skillRequirement == smeltStageRewardSO.skillOwned.selfChosen;
}
private bool HasEnoughCurrency(storeItemSO.CurrencyType currencyType, int amount)
{
switch (currencyType)
{
case storeItemSO.CurrencyType.coins:
return PlayerEconomyLedger.EnsureInstance().HasEnoughCoins(amount);
case storeItemSO.CurrencyType.material:
return PlayerEconomyLedger.EnsureInstance().HasEnoughMaterial(amount);
default:
return false;
}
}
private bool TrySpendCurrency(storeItemSO.CurrencyType currencyType, int amount)
{
switch (currencyType)
{
case storeItemSO.CurrencyType.coins:
return PlayerEconomyLedger.EnsureInstance().TrySpendCoins(amount);
case storeItemSO.CurrencyType.material:
return PlayerEconomyLedger.EnsureInstance().TrySpendMaterial(amount);
default:
return false;
}
}
private void RefundCurrency(storeItemSO.CurrencyType currencyType, int amount)
{
switch (currencyType)
{
case storeItemSO.CurrencyType.coins:
PlayerEconomyLedger.EnsureInstance().AddCoins(amount);
break;
case storeItemSO.CurrencyType.material:
PlayerEconomyLedger.EnsureInstance().AddMaterial(amount);
break;
}
}
private void CloseActiveCtas()
{
if (activeCtasInstance != null)
{
Destroy(activeCtasInstance);
activeCtasInstance = null;
}
}
private static void RefreshAllEquipBags()
{
equipBag[] bags = Resources.FindObjectsOfTypeAll<equipBag>();
for (int i = 0; i < bags.Length; i++)
{
equipBag bag = bags[i];
if (bag == null)
{
continue;
}
bag.Rebuild();
}
}
private void SetupAvailabilityState(storeItemPrefab itemView, storeItemSO itemSO)