瀏覽代碼

Merge branch 'master' of http://192.168.123.2:3000/ck/XiuXianGame

# Conflicts:
#	Assets/StreamingAssets/assetConfig.txt   resolved by origin/master(远端) version
李桃 1 周之前
父節點
當前提交
40bcaf37c9
共有 65 個文件被更改,包括 2019 次插入373 次删除
  1. 0 12
      .run/Attach to Unity Editor.run.xml
  2. 5 0
      Assets/Res/Config/BigMap.json
  3. 0 13
      Assets/Res/Config/DialogueConfig.json
  4. 0 7
      Assets/Res/Config/DialogueConfig.json.meta
  5. 0 14
      Assets/Res/Config/DialogueOptionConfig.json
  6. 2 2
      Assets/Res/Config/DivineSenseConfig.json
  7. 334 12
      Assets/Res/Config/EventConditionConfig.json
  8. 42 15
      Assets/Res/Config/EventConfig.json
  9. 168 0
      Assets/Res/Config/LanguageChineseConfig.json
  10. 8 0
      Assets/Res/UI/DialoguePanel.meta
  11. 237 0
      Assets/Res/UI/DialoguePanel/DialogueOptionWidget.prefab
  12. 2 2
      Assets/Res/UI/DialoguePanel/DialogueOptionWidget.prefab.meta
  13. 94 1
      Assets/Res/UI/DialoguePanel/DialoguePanel.prefab
  14. 0 0
      Assets/Res/UI/DialoguePanel/DialoguePanel.prefab.meta
  15. 8 0
      Assets/Res/UI/RewardsPanel.meta
  16. 0 0
      Assets/Res/UI/RewardsPanel/RewardsPanel.prefab
  17. 0 0
      Assets/Res/UI/RewardsPanel/RewardsPanel.prefab.meta
  18. 0 53
      Assets/Res/UI/WidgetItem.prefab
  19. 1 0
      Assets/Scripts/Core/Event/Event/CustomEventType.cs
  20. 12 0
      Assets/Scripts/Core/Event/Event/DispatchEvent.cs
  21. 3 0
      Assets/Scripts/Core/Event/Event/DispatchEvent.cs.meta
  22. 0 50
      Assets/Scripts/GameData/ExcelConfig/DialogueConfig.cs
  23. 0 38
      Assets/Scripts/GameData/ExcelConfig/DialogueOptionConfig.cs
  24. 1 1
      Assets/Scripts/GameData/ExcelConfig/DropConfig.cs
  25. 50 2
      Assets/Scripts/GameData/ExcelConfig/EventConditionConfig.cs
  26. 3 15
      Assets/Scripts/GameData/ExcelConfig/EventConfig.cs
  27. 1 1
      Assets/Scripts/GameLogic/Combat/CombatState/CombatUpdateState.cs
  28. 3 2
      Assets/Scripts/GameLogic/Combat/Hero/State/MagicWeaponChuChangState.cs
  29. 126 0
      Assets/Scripts/GameLogic/EventManager/DialogueManager.cs
  30. 0 0
      Assets/Scripts/GameLogic/EventManager/DialogueManager.cs.meta
  31. 13 0
      Assets/Scripts/GameLogic/EventManager/DialogueMono.cs
  32. 3 0
      Assets/Scripts/GameLogic/EventManager/DialogueMono.cs.meta
  33. 12 10
      Assets/Scripts/GameLogic/EventManager/EventManager.cs
  34. 2 0
      Assets/Scripts/GameLogic/Player/PlayerManager.cs
  35. 0 3
      Assets/Scripts/GameUI/DialogueManager.meta
  36. 0 94
      Assets/Scripts/GameUI/DialogueManager/DialogueManager.cs
  37. 25 0
      Assets/Scripts/GameUI/DialogueMono.cs
  38. 3 0
      Assets/Scripts/GameUI/DialogueMono.cs.meta
  39. 1 0
      Assets/Scripts/GameUI/GameApplction.cs
  40. 5 4
      Assets/Scripts/GameUI/UI/CombatPanel/CombatPanel.cs
  41. 6 1
      Assets/Scripts/GameUI/UI/CombatPanel/ShengShiEventWidget.cs
  42. 42 0
      Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidget.cs
  43. 1 1
      Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidget.cs.meta
  44. 40 0
      Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidgetData.cs
  45. 1 1
      Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidgetData.cs.meta
  46. 103 19
      Assets/Scripts/GameUI/UI/DialoguePanel/DialoguePanel.cs
  47. 11 0
      Assets/Scripts/GameUI/UI/DialoguePanel/DialoguePanelData.cs
  48. 8 0
      Assets/Scripts/GameUI/UI/RewardsPanel.meta
  49. 95 0
      Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanel.cs
  50. 11 0
      Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanel.cs.meta
  51. 73 0
      Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanelData.cs
  52. 11 0
      Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanelData.cs.meta
  53. 156 0
      Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItem.cs
  54. 11 0
      Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItem.cs.meta
  55. 174 0
      Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItemData.cs
  56. 11 0
      Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItemData.cs.meta
  57. 0 0
      Assets/StreamingAssets/assetConfig.txt
  58. 二進制
      Excel2Json/Excel/ChouKa.xlsx
  59. 二進制
      Excel2Json/Excel/DialogueConfig.xlsx
  60. 二進制
      Excel2Json/Excel/DivineSenseConfig.xlsx
  61. 二進制
      Excel2Json/Excel/EventConfig.xlsx
  62. 二進制
      Excel2Json/Excel/Language.xlsx
  63. 二進制
      Excel2Json/Excel/Maps.xlsx
  64. 97 0
      ProjectSettings/ProjectSettings.asset
  65. 4 0
      XiuXianGame.sln.DotSettings.user

+ 0 - 12
.run/Attach to Unity Editor.run.xml

@@ -1,12 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="Attach to Unity Editor" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="Unity Debug" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost" ignored-value-for-modified-check="106860">
-    <option name="allowRunningInParallel" value="false" />
-    <option name="listenPortForConnections" value="false" />
-    <option name="pid" value="106860" />
-    <option name="projectPathOnTarget" />
-    <option name="selectedOptions">
-      <list />
-    </option>
-    <method v="2" />
-  </configuration>
-</component>

+ 5 - 0
Assets/Res/Config/BigMap.json

@@ -14,6 +14,11 @@
         6,
         7
       ],
+      "DivineSenseGeneralEvent": [
+        1,
+        2,
+        3
+      ],
       "DivineSenseGeneralProbability": 50,
       "ulockFunction": [
         0

+ 0 - 13
Assets/Res/Config/DialogueConfig.json

@@ -1,13 +0,0 @@
-{
-  "configList": [
-    {
-      "ID": 1,
-      "GroupId": 1,
-      "DialogueOptionId": [
-        1,
-        2
-      ],
-      "isEnd": false
-    }
-  ]
-}

+ 0 - 7
Assets/Res/Config/DialogueConfig.json.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: B3gavCz/Un0JlgBzjCYeqsEHPrV+NxCgcgoNdDdP/aLxIuF/qvmt5DKsPd96
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 14
Assets/Res/Config/DialogueOptionConfig.json

@@ -1,14 +0,0 @@
-{
-  "configList": [
-    {
-      "ID": 1,
-      "LanguageId": 1,
-      "DialogueConfigID": 0
-    },
-    {
-      "ID": 2,
-      "LanguageId": 2,
-      "DialogueConfigID": 0
-    }
-  ]
-}

+ 2 - 2
Assets/Res/Config/DivineSenseConfig.json

@@ -4,7 +4,7 @@
       "ID": 1,
       "DetectEventCount": 3,
       "QualityBonusChance": [
-        10.0,
+        100.0,
         10.0,
         10.0,
         10.0,
@@ -21,7 +21,7 @@
       "ID": 2,
       "DetectEventCount": 3,
       "QualityBonusChance": [
-        10.0,
+        100.0,
         10.0,
         10.0,
         10.0,

+ 334 - 12
Assets/Res/Config/EventConditionConfig.json

@@ -1,28 +1,350 @@
 {
   "configList": [
     {
-      "ID": 1,
-      "operation": 1
+      "ID": 1001,
+      "LanID": [
+        177
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1002,
+        1003
+      ],
+      "optionPara2": [
+        198,
+        199
+      ],
+      "ResultOptions": null
     },
     {
-      "ID": 2,
-      "operation": 1
+      "ID": 1002,
+      "LanID": [
+        178
+      ],
+      "ConditionType": null,
+      "optionType": 2,
+      "optionPara1": [
+        702
+      ],
+      "ResultOptions": 1004
     },
     {
-      "ID": 11,
-      "operation": null
+      "ID": 1003,
+      "LanID": [
+        179
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1005
+      ],
+      "optionPara2": [
+        200
+      ],
+      "ResultOptions": null
     },
     {
-      "ID": 12,
-      "operation": null
+      "ID": 1004,
+      "LanID": [
+        180
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        100
+      ],
+      "ResultOptions": null
     },
     {
-      "ID": 101,
-      "operation": null
+      "ID": 1005,
+      "LanID": [
+        181
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1010
+      ],
+      "PrizeNums": [
+        50
+      ],
+      "ResultOptions": null
     },
     {
-      "ID": 102,
-      "operation": null
+      "ID": 1010,
+      "LanID": [
+        182
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1011,
+        1012
+      ],
+      "optionPara2": [
+        201,
+        202
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1011,
+      "LanID": [
+        183
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1014,
+        1015
+      ],
+      "optionPara2": [
+        203,
+        204
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1012,
+      "LanID": [
+        184,
+        187
+      ],
+      "ConditionType": 1,
+      "ConditionPara": [
+        1001,
+        1
+      ],
+      "optionType": 3,
+      "PrizeIDs": [
+        1016
+      ],
+      "PrizeNums": [
+        10
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1014,
+      "LanID": [
+        185
+      ],
+      "ConditionType": 2,
+      "ConditionPara": [
+        4,
+        150
+      ],
+      "optionType": 2,
+      "optionPara1": [
+        100005
+      ],
+      "ResultOptions": 1016
+    },
+    {
+      "ID": 1015,
+      "LanID": [
+        186,
+        189
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        1000
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1016,
+      "LanID": [
+        188
+      ],
+      "ConditionType": null,
+      "optionType": null,
+      "PrizeIDs": [
+        1016
+      ],
+      "PrizeNums": [
+        200
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1020,
+      "LanID": [
+        190
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1021,
+        1022
+      ],
+      "optionPara2": [
+        201,
+        202
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 1021,
+      "LanID": [
+        191
+      ],
+      "ConditionType": null,
+      "optionType": 2,
+      "optionPara1": [
+        100004
+      ],
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        10
+      ],
+      "ResultOptions": 1026
+    },
+    {
+      "ID": 1022,
+      "LanID": [
+        192
+      ],
+      "ConditionType": 1,
+      "ConditionPara": [
+        1001,
+        1
+      ],
+      "optionType": 3,
+      "PrizeIDs": [
+        1016
+      ],
+      "PrizeNums": [
+        10
+      ],
+      "ResultOptions": 1016
+    },
+    {
+      "ID": 1024,
+      "LanID": [
+        193,
+        196
+      ],
+      "ConditionType": 2,
+      "ConditionPara": [
+        4,
+        150
+      ],
+      "optionType": 2,
+      "optionPara1": [
+        100005
+      ],
+      "PrizeIDs": [
+        1016
+      ],
+      "PrizeNums": [
+        200
+      ],
+      "ResultOptions": 1016
+    },
+    {
+      "ID": 1025,
+      "LanID": [
+        194,
+        197
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        1000
+      ],
+      "ResultOptions": 1002
+    },
+    {
+      "ID": 1026,
+      "LanID": [
+        207
+      ],
+      "ConditionType": null,
+      "optionType": 1,
+      "optionPara1": [
+        1024,
+        1025
+      ],
+      "optionPara2": [
+        205,
+        206
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 10001,
+      "LanID": [
+        208
+      ],
+      "ConditionType": null,
+      "optionType": 2,
+      "optionPara1": [
+        100001
+      ],
+      "ResultOptions": 10002
+    },
+    {
+      "ID": 10002,
+      "LanID": [
+        209
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        10
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 10003,
+      "LanID": [
+        210,
+        211
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1002
+      ],
+      "PrizeNums": [
+        10
+      ],
+      "ResultOptions": null
+    },
+    {
+      "ID": 10004,
+      "LanID": [
+        212,
+        213,
+        214,
+        215
+      ],
+      "ConditionType": null,
+      "optionType": 3,
+      "PrizeIDs": [
+        1003
+      ],
+      "PrizeNums": [
+        1
+      ],
+      "ResultOptions": null
     }
   ]
 }

+ 42 - 15
Assets/Res/Config/EventConfig.json

@@ -2,36 +2,63 @@
   "configList": [
     {
       "ID": 1,
-      "EventType": 1,
+      "EventType": 1001,
       "EventTriggerType": 1,
       "EventQuality": 1,
-      "EventCompleteCount": null,
       "EventConditionId": [
-        2
+        0
       ],
       "EventVlaue": [
-        2
+        0
       ],
-      "Description": null,
-      "DialogueID": null
+      "Description": 174
     },
     {
       "ID": 2,
-      "EventType": 2,
+      "EventType": 1010,
       "EventTriggerType": 1,
       "EventQuality": 1,
-      "EventCompleteCount": null,
       "EventConditionId": [
-        1
+        0
       ],
       "EventVlaue": [
-        5
+        0
       ],
-      "Description": null,
-      "DialogueID": 1,
-      "associateVlaue": [
-        1
-      ]
+      "Description": 175
+    },
+    {
+      "ID": 3,
+      "EventType": 1020,
+      "EventTriggerType": 3,
+      "EventQuality": 1,
+      "EventConditionId": [
+        0
+      ],
+      "EventVlaue": [
+        0
+      ],
+      "Description": 176
+    },
+    {
+      "ID": 11,
+      "EventType": 10001,
+      "EventTriggerType": 2,
+      "EventQuality": null,
+      "Description": null
+    },
+    {
+      "ID": 12,
+      "EventType": 10003,
+      "EventTriggerType": 2,
+      "EventQuality": null,
+      "Description": null
+    },
+    {
+      "ID": 13,
+      "EventType": 10004,
+      "EventTriggerType": 2,
+      "EventQuality": null,
+      "Description": null
     }
   ]
 }

+ 168 - 0
Assets/Res/Config/LanguageChineseConfig.json

@@ -691,6 +691,174 @@
     {
       "ID": 173,
       "txt": "离线收益"
+    },
+    {
+      "ID": 174,
+      "txt": "受伤的狼"
+    },
+    {
+      "ID": 175,
+      "txt": "鹬蚌相争"
+    },
+    {
+      "ID": 176,
+      "txt": "鹬蚌相争2"
+    },
+    {
+      "ID": 177,
+      "txt": "你遇到一只奄奄一息的野狼,从周围四散的血迹来看,想必它刚才经历了一场恶战。"
+    },
+    {
+      "ID": 178,
+      "txt": "野狼用它最后一口气,朝你扑了过来!"
+    },
+    {
+      "ID": 179,
+      "txt": "你抽出匕首准备了结它的生命,却发现怀中还躺着一只刚出生的狼崽。"
+    },
+    {
+      "ID": 180,
+      "txt": "随着你的最后一击,野狼应声倒下,你罔顾它幽怨的眼神,从它怀中拿走了一些财物。"
+    },
+    {
+      "ID": 181,
+      "txt": "母狼似乎懂你要做什么,眼神归于平静。你终结了她,决定收养这只小狼仔。"
+    },
+    {
+      "ID": 182,
+      "txt": "从不远处传来刀剑声,听起来双方已经精疲力尽了。"
+    },
+    {
+      "ID": 183,
+      "txt": "你走进一看,原来是一伙山贼分赃不均内讧了起来。你看着旁边被砍的七零八落的轿子和这群山贼,选择怎么做呢:"
+    },
+    {
+      "ID": 184,
+      "txt": "法宝现身,效果立竿见影,刀剑声逐渐消失,这个世界安静了。"
+    },
+    {
+      "ID": 185,
+      "txt": "你怒斥贼寇的恶行,贼寇们被你激怒了,准备迎战!"
+    },
+    {
+      "ID": 186,
+      "txt": "你趁人不备顺走了轿内主人的包裹,任留轿内人痛苦的挣扎。"
+    },
+    {
+      "ID": 187,
+      "txt": "法宝也得到些许历练。"
+    },
+    {
+      "ID": 188,
+      "txt": "杀退贼寇,你上演了一出英雄救美的桥段。姑娘为了答谢你的救命之恩,将藏在贴身处的珍贵首饰赠与你作为定情信物。"
+    },
+    {
+      "ID": 189,
+      "txt": "你打开包裹,赫然出现一大堆财宝,这次你发了哈哈!"
+    },
+    {
+      "ID": 190,
+      "txt": "从不远处传来刀剑声,听起来双方已经精疲力尽了。"
+    },
+    {
+      "ID": 191,
+      "txt": "你走进一看,原来是一伙山贼抢了一名坐在官轿内的女子,因分赃不均内讧了起来。山贼二话不说就朝你冲了过来!"
+    },
+    {
+      "ID": 192,
+      "txt": "法宝现身,效果立竿见影,刀剑声逐渐消失,这个世界安静了。"
+    },
+    {
+      "ID": 193,
+      "txt": "你大声怒斥贼寇的恶行,贼首发现你了,准备迎战!"
+    },
+    {
+      "ID": 194,
+      "txt": "你趁人不备顺走了轿内主人的包裹,任留轿内人痛苦的挣扎。"
+    },
+    {
+      "ID": 195,
+      "txt": "法宝也得到些许历练。"
+    },
+    {
+      "ID": 196,
+      "txt": "杀退贼寇,你上演了一出英雄救美的桥段。姑娘为了答谢你的救命之恩,将藏在贴身处的珍贵首饰赠与你作为定情信物。"
+    },
+    {
+      "ID": 197,
+      "txt": "你打开包裹,赫然出现一大堆财宝,这次你发了哈哈!"
+    },
+    {
+      "ID": 198,
+      "txt": "趁它虚弱赶紧除掉它!"
+    },
+    {
+      "ID": 199,
+      "txt": "你不忍见它受苦,选择帮它减轻痛苦。"
+    },
+    {
+      "ID": 200,
+      "txt": "终结它"
+    },
+    {
+      "ID": 201,
+      "txt": "去看看"
+    },
+    {
+      "ID": 202,
+      "txt": "(需拥有法宝凝神珠)听起来都是鸡毛蒜皮的小摩擦,你选择祭出凝神珠化解他们的怨气。"
+    },
+    {
+      "ID": 203,
+      "txt": "你顿时杀心四起,决定杀了贼寇,救出轿中之人"
+    },
+    {
+      "ID": 204,
+      "txt": "盗贼们个个双眼杀的通红,你决定来个渔翁得利。"
+    },
+    {
+      "ID": 205,
+      "txt": "选择正面迎战山贼头领(困难)"
+    },
+    {
+      "ID": 206,
+      "txt": "你决定避开山贼头领的视线,来个渔翁得利。"
+    },
+    {
+      "ID": 207,
+      "txt": "你将山贼们打的落花流水,成功吸引了山贼头子的注意。"
+    },
+    {
+      "ID": 208,
+      "txt": "一头略有修为的熊精袭击了你,准备迎战"
+    },
+    {
+      "ID": 209,
+      "txt": "你击败了熊精,并从它身上吸取了一些修为"
+    },
+    {
+      "ID": 210,
+      "txt": "你偶遇一处仙气四溢无人生活的洞穴"
+    },
+    {
+      "ID": 211,
+      "txt": "你在洞中吐纳休养生息,获得了一些修为"
+    },
+    {
+      "ID": 212,
+      "txt": "你在飞行途中不慎滑倒"
+    },
+    {
+      "ID": 213,
+      "txt": "原来是脚下有一块圆润的石头"
+    },
+    {
+      "ID": 214,
+      "txt": "你拾起来一看,居然是难得的天材地宝"
+    },
+    {
+      "ID": 215,
+      "txt": "原本郁闷的心情,突然变的好了起来,哈哈~"
     }
   ]
 }

+ 8 - 0
Assets/Res/UI/DialoguePanel.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: XHIavX78VH5avHNu35T/qIRwaCIdAiFri6FJ10Zvigg4iPoZUriYmZxHIGkT
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 237 - 0
Assets/Res/UI/DialoguePanel/DialogueOptionWidget.prefab

@@ -0,0 +1,237 @@
+%YAML 1.1
+%TAG !u! tag:yousandi.cn,2023:
+--- !u!1 &250408078146684751
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 4229809311072735734}
+  - component: {fileID: 5086374945530126731}
+  - component: {fileID: 2934525852061817999}
+  m_Layer: 5
+  m_HasEditorInfo: 1
+  m_Name: Text_desc
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4229809311072735734
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 250408078146684751}
+  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: 8347964422981004825}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5086374945530126731
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 250408078146684751}
+  m_CullTransparentMesh: 1
+--- !u!114 &2934525852061817999
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 250408078146684751}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 28
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: New Text
+--- !u!1 &1586153670201676115
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 8347964422981004825}
+  - component: {fileID: 2619129949825441592}
+  - component: {fileID: 4525636567960331388}
+  - component: {fileID: 2912968521683004226}
+  - component: {fileID: 1772693467188324289}
+  m_Layer: 5
+  m_HasEditorInfo: 1
+  m_Name: DialogueOptionWidget
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8347964422981004825
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1586153670201676115}
+  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: 1
+  m_Children:
+  - {fileID: 4229809311072735734}
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 191.9208, y: 79.2737}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2619129949825441592
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1586153670201676115}
+  m_CullTransparentMesh: 1
+--- !u!114 &4525636567960331388
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1586153670201676115}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3c247620ca3a1fd4ab2a2f3a5b287e07, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, 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: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+  _icon_name: btn_l_Blue
+  isNotLoadDeftIcon: 0
+  CurrSpriteAtlas: {fileID: 100100200, guid: 7b02f32fa59cd4e3085208946b112537, type: 3}
+  packInfo:
+    packName: all
+    packgJsonPath: /Art/UIAssets/TextrueJson/all.txt
+    packgSpritePath: Assets/Res/UIAtlas/all.spriteatlasv2
+    lasetJsonGUID: c93feb71466e7c38c2ebc85e8f3a6296
+--- !u!114 &2912968521683004226
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1586153670201676115}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4810a0857c909354fa00c3aafdeac753, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  data:
+  - key: OptionWidget
+    gameObject: {fileID: 1772693467188324289}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  - key: Text_desc
+    gameObject: {fileID: 2934525852061817999}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  isAssetBundle: 1
+--- !u!114 &1772693467188324289
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1586153670201676115}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  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}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 4525636567960331388}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []

+ 2 - 2
Assets/Res/Config/DialogueOptionConfig.json.meta → Assets/Res/UI/DialoguePanel/DialogueOptionWidget.prefab.meta

@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: CiwY5nj4AH+56r0yiTBf0ROgm8K4Dd+UXRNplzGB0uUsydE5M9zSXv+lX9eT
-TextScriptImporter:
+guid: XX4d5C75UClh9rYWsUtGIxNH2su7qC7n4kd+d/k66dLwp3fmSNqAI2eIoR4v
+PrefabImporter:
   externalObjects: {}
   userData: 
   assetBundleName: 

+ 94 - 1
Assets/Res/UI/DialoguePanel.prefab → Assets/Res/UI/DialoguePanel/DialoguePanel.prefab

@@ -1,5 +1,92 @@
 %YAML 1.1
 %TAG !u! tag:yousandi.cn,2023:
+--- !u!1 &3255008631453123208
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 4979100652905664733}
+  - component: {fileID: 1752607932964163169}
+  - component: {fileID: 934892927558183822}
+  - component: {fileID: 7532172800293112844}
+  m_Layer: 5
+  m_HasEditorInfo: 1
+  m_Name: OptionRoot
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4979100652905664733
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3255008631453123208}
+  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: 3275273584098972649}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0.84393, y: 0}
+  m_SizeDelta: {x: 0, y: 59.4333}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!222 &1752607932964163169
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3255008631453123208}
+  m_CullTransparentMesh: 1
+--- !u!114 &934892927558183822
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3255008631453123208}
+  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!114 &7532172800293112844
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3255008631453123208}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 4
+  m_Spacing: 14.96
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 0
+  m_ChildControlHeight: 0
+  m_ChildScaleWidth: 0
+  m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
 --- !u!1 &4284872839404994711
 GameObject:
   m_ObjectHideFlags: 0
@@ -152,6 +239,11 @@ MonoBehaviour:
     isAssetBundle: 0
     isList: 0
     ListCollectorDatas: []
+  - key: OptionRoot
+    gameObject: {fileID: 4979100652905664733}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
   isAssetBundle: 1
 --- !u!1 &6013513864245940534
 GameObject:
@@ -576,11 +668,12 @@ RectTransform:
   - {fileID: 3450449309247689875}
   - {fileID: 2401587046251870679}
   - {fileID: 6614233195307115645}
+  - {fileID: 4979100652905664733}
   m_Father: {fileID: 1803833552231621266}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0}
   m_AnchorMax: {x: 0.5, y: 0}
-  m_AnchoredPosition: {x: -17.299988, y: 175.60999}
+  m_AnchoredPosition: {x: -17.299988, y: 232}
   m_SizeDelta: {x: 715.4, y: 351.23}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &9090904604107627365

+ 0 - 0
Assets/Res/UI/DialoguePanel.prefab.meta → Assets/Res/UI/DialoguePanel/DialoguePanel.prefab.meta


+ 8 - 0
Assets/Res/UI/RewardsPanel.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: By8esi34UXwtvto16eeC5UKHWPuP2p1++LnkyFe0UpZwpwvc/LMgqHz24eaR
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 0
Assets/Res/UI/RewardsPanel.prefab → Assets/Res/UI/RewardsPanel/RewardsPanel.prefab


+ 0 - 0
Assets/Res/UI/RewardsPanel.prefab.meta → Assets/Res/UI/RewardsPanel/RewardsPanel.prefab.meta


+ 0 - 53
Assets/Res/UI/WidgetItem.prefab

@@ -1430,7 +1430,6 @@ GameObject:
   - component: {fileID: 1515036893769208877}
   - component: {fileID: 5132790119407906693}
   - component: {fileID: 1991110530740727775}
-  - component: {fileID: 853300728457438981}
   m_Layer: 0
   m_HasEditorInfo: 1
   m_Name: WidgetItem
@@ -1597,58 +1596,6 @@ MonoBehaviour:
   m_OnClick:
     m_PersistentCalls:
       m_Calls: []
---- !u!114 &853300728457438981
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8408847998961895963}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 06d86505a6dfd2f4dad16b669a8b3eb5, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  bgColors:
-  - {r: 0.096999995, g: 0.096999995, b: 0.096999995, a: 1}
-  - {r: 0.11372549, g: 0.7529412, b: 0.3372549, a: 1}
-  - {r: 0.11372549, g: 0.7529412, b: 0.3372549, a: 1}
-  - {r: 0, g: 0.65882355, b: 1, a: 1}
-  - {r: 0.69803923, g: 0.3764706, b: 0.99215686, a: 1}
-  - {r: 1, g: 0.7882353, b: 0, a: 1}
-  - {r: 0.8745098, g: 0.18431373, b: 0.21960784, a: 1}
-  cornerColors:
-  - {r: 0, g: 0, b: 0, a: 0}
-  - {r: 0.20392157, g: 0.8509804, b: 0.20392157, a: 1}
-  - {r: 0.20392157, g: 0.8509804, b: 0.20392157, a: 1}
-  - {r: 0.17254902, g: 0.74509805, b: 1, a: 1}
-  - {r: 0.78431374, g: 0.5019608, b: 0.99607843, a: 1}
-  - {r: 1, g: 0.87058824, b: 0, a: 1}
-  - {r: 0.99215686, g: 0.2784314, b: 0.29411766, a: 1}
-  lightColors:
-  - {r: 0.046, g: 0.046, b: 0.046, a: 1}
-  - {r: 0.6509804, g: 0.9607843, b: 0.31764707, a: 1}
-  - {r: 0.6509804, g: 0.9607843, b: 0.31764707, a: 1}
-  - {r: 0.20784314, g: 0.9843137, b: 1, a: 1}
-  - {r: 1, g: 0.654902, b: 1, a: 1}
-  - {r: 0.99607843, g: 0.99215686, b: 0.30588236, a: 1}
-  - {r: 1, g: 0.5254902, b: 0.5803922, a: 1}
-  borderColors:
-  - {r: 0.046, g: 0.046, b: 0.046, a: 1}
-  - {r: 0.09411765, g: 0.09411765, b: 0.20392157, a: 1}
-  - {r: 0.09411765, g: 0.09411765, b: 0.20392157, a: 1}
-  - {r: 0.09411765, g: 0.09411765, b: 0.20392157, a: 1}
-  - {r: 0.09411765, g: 0.09411765, b: 0.20392157, a: 1}
-  - {r: 0.03529412, g: 0.14901961, b: 0.37254903, a: 1}
-  - {r: 0.03529412, g: 0.14901961, b: 0.37254903, a: 1}
-  glowColors:
-  - {r: 0, g: 0, b: 0, a: 1}
-  - {r: 0.7529412, g: 1, b: 0.31764707, a: 1}
-  - {r: 0.7529412, g: 1, b: 0.31764707, a: 1}
-  - {r: 0.03137255, g: 0.9372549, b: 1, a: 1}
-  - {r: 0.7254902, g: 0.5882353, b: 1, a: 1}
-  - {r: 0.9529412, g: 1, b: 0.19215687, a: 1}
-  - {r: 1, g: 0.6156863, b: 0.6431373, a: 1}
 --- !u!1 &8582175795744355875
 GameObject:
   m_ObjectHideFlags: 0

+ 1 - 0
Assets/Scripts/Core/Event/Event/CustomEventType.cs

@@ -75,6 +75,7 @@ namespace Fort23.Core
       /// 关闭英雄面板
       /// </summary>
       OnCloseHeroPanel,
+      DispatchEvent,
       
     }
 }

+ 12 - 0
Assets/Scripts/Core/Event/Event/DispatchEvent.cs

@@ -0,0 +1,12 @@
+using System;
+using Core.Utility.Event;
+using Fort23.Core;
+
+namespace Core.Event.Event
+{
+    public class DispatchEvent : EventDataBasic<DispatchEvent>
+    {
+        public int eventId;
+        public Action completed;
+    }
+}

+ 3 - 0
Assets/Scripts/Core/Event/Event/DispatchEvent.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 18a670be24ea4a539fbbb7cb0a4c32ff
+timeCreated: 1745334948

+ 0 - 50
Assets/Scripts/GameData/ExcelConfig/DialogueConfig.cs

@@ -1,50 +0,0 @@
-// Auto Generated Code By excel2json
-// Generate From Excel\DialogueConfig.xlsx. SheetName: DialogueConfig
-
-using System;
-using Fort23.GameData;
-
-namespace Excel2Json
-{
-	[Config(prefab = "DialogueConfig.json")]
-	public partial class DialogueConfigHolder : ConfigHolder<DialogueConfig>
	{
-	}
-
-
-	[Serializable]
-	public struct DialogueConfig : IConfig
	{
-		public int GetID() {return ID;} 
-		/// <summary>
-		///ID
-		/// </summary>
-public int ID;
-
-
-		/// <summary>
-		///对话组ID
-		/// </summary>
-public int GroupId;
-
-
-		/// <summary>
-		///内容ID
-		/// </summary>
-public int[] Content;
-
-
-		/// <summary>
-		///
-		/// </summary>
-public int[] DialogueOptionId;
-
-
-		/// <summary>
-		///是否结束对话 如果有选项需要填这个字段
-		/// </summary>
-public bool isEnd;
-
-
-	}
-
-}
-// End of Auto Generated Code

+ 0 - 38
Assets/Scripts/GameData/ExcelConfig/DialogueOptionConfig.cs

@@ -1,38 +0,0 @@
-// Auto Generated Code By excel2json
-// Generate From Excel\DialogueConfig.xlsx. SheetName: DialogueOptionConfig
-
-using System;
-using Fort23.GameData;
-
-namespace Excel2Json
-{
-	[Config(prefab = "DialogueOptionConfig.json")]
-	public partial class DialogueOptionConfigHolder : ConfigHolder<DialogueOptionConfig>
	{
-	}
-
-
-	[Serializable]
-	public struct DialogueOptionConfig : IConfig
	{
-		public int GetID() {return ID;} 
-		/// <summary>
-		///ID
-		/// </summary>
-public int ID;
-
-
-		/// <summary>
-		///选项文本
-		/// </summary>
-public int LanguageId;
-
-
-		/// <summary>
-		///下一节点ID 如果没有后续对话可以填0
-		/// </summary>
-public int DialogueConfigID;
-
-
-	}
-
-}
-// End of Auto Generated Code

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/DropConfig.cs

@@ -27,7 +27,7 @@ public int[] dropGroupID;
 
 
 		/// <summary>
-		///掉落方式 1.每个掉落组根据掉落概率掉落 2.所有掉落组根据掉落权重掉落
+		///掉落方式 1.每个掉落组根据掉落概率掉落 2.所有掉落组根据掉落权重掉落 3.直接掉落道具
 		/// </summary>
 public int dropType;
 

+ 50 - 2
Assets/Scripts/GameData/ExcelConfig/EventConditionConfig.cs

@@ -21,9 +21,57 @@ public int ID;
 
 
 		/// <summary>
-		///条件运算 1 =大于等于 2 =等于 3=小于等于
+		///文本语言表ID
 		/// </summary>
-public int operation;
+public int[] LanID;
+
+
+		/// <summary>
+		///条件判断类型
+		/// </summary>
+public int ConditionType;
+
+
+		/// <summary>
+		///条件判断数值
+		/// </summary>
+public int[] ConditionPara;
+
+
+		/// <summary>
+		///事件类型 1=提供选项 2=进入战斗 3=获得奖励
+		/// </summary>
+public int optionType;
+
+
+		/// <summary>
+		///事件常量1 1=事件IDs 2=战斗ID 3=
+		/// </summary>
+public int[] optionPara1;
+
+
+		/// <summary>
+		///事件常量2 1=事件文本 2= 3=
+		/// </summary>
+public int[] optionPara2;
+
+
+		/// <summary>
+		///事件结局奖励
+		/// </summary>
+public int[] PrizeIDs;
+
+
+		/// <summary>
+		///事件结局奖励数量
+		/// </summary>
+public int[] PrizeNums;
+
+
+		/// <summary>
+		///事件结局后提供的选项
+		/// </summary>
+public int ResultOptions;
 
 
 	}

+ 3 - 15
Assets/Scripts/GameData/ExcelConfig/EventConfig.cs

@@ -21,13 +21,13 @@ public int ID;
 
 
 		/// <summary>
-		///事件类型: 1.获得奖励 2.触发战斗
+		///事件的起始ID
 		/// </summary>
 public int EventType;
 
 
 		/// <summary>
-		///触发事件类型: 1.场景事件 2.随机事件 3.通用事件
+		///触发事件类型: 1.通用事件 2.挂机事件 3.地图专用事件
 		/// </summary>
 public int EventTriggerType;
 
@@ -38,12 +38,6 @@ public int EventTriggerType;
 public int EventQuality;
 
 
-		/// <summary>
-		///事件次数 -1无限
-		/// </summary>
-public int EventCompleteCount;
-
-
 		/// <summary>
 		///触发条件类型
 		/// </summary>
@@ -57,17 +51,11 @@ public int[] EventVlaue;
 
 
 		/// <summary>
-		///描述
+		///描述(题目)
 		/// </summary>
 public int Description;
 
 
-		/// <summary>
-		///对话ID
-		/// </summary>
-public int DialogueID;
-
-
 		/// <summary>
 		///特殊功能参数
 		/// </summary>

+ 1 - 1
Assets/Scripts/GameLogic/Combat/CombatState/CombatUpdateState.cs

@@ -116,7 +116,7 @@ namespace GameLogic.Combat.CombatState
 
                 float distance = Vector3.SqrMagnitude(hero.combatHeroGameObject.position -
                                                       playerHeroEntity.combatHeroGameObject.position);
-                if (distance < minDistance && distance < 225f)
+                if (distance < minDistance && distance < 400)
                 {
                     // if (!_combatHeroEntity.IsEnemy || distance < _combatHeroEntity.CurrCombatHeroInfo.maxDisTo + 100)
                     {

+ 3 - 2
Assets/Scripts/GameLogic/Combat/Hero/State/MagicWeaponChuChangState.cs

@@ -37,8 +37,9 @@ namespace GameLogic.Combat.Hero.State
             float y = myCombatMagicWeaponEntity.IsEnemy ? 5: 5;
             float x = myCombatMagicWeaponEntity.useIndex*1.5f;
 
-
-            endPos = startPos + new Vector3(x-3, y, 0);
+            endPos= myCombatMagicWeaponEntity.MagicWeaponControl.combatHeroEntity.GameObject.transform.TransformPoint(
+                new Vector3(x - 3, y, 0));
+            // endPos = startPos +  Vector3(x-3, y, 0);
             _addTime = 1.0f / (Vector3.Distance(startPos, endPos) / CustomTweenManager.AnimationCurveLibrary.fabaoMoveTopSpeed);
             _currTime = 0;
             isUpdate = true;

+ 126 - 0
Assets/Scripts/GameLogic/EventManager/DialogueManager.cs

@@ -0,0 +1,126 @@
+using System;
+using System.Collections.Generic;
+using Common.Utility.CombatEvent;
+using Core.Event.Event;
+using Excel2Json;
+using Fort23.Core;
+using Fort23.Mono;
+using Fort23.UTool;
+using GameLogic.Bag;
+using UnityEngine;
+using Utility;
+
+public class DialogueManager : Singleton<DialogueManager>
+{
+    private int currentDialogueID;
+
+    private Action onDialogueComplete;
+
+    IDialogueMono dialogue;
+
+    public void CustomInit(IDialogueMono dialogueMono)
+    {
+        dialogue = dialogueMono;
+    }
+
+    private void DispatchEvent(IEventData e)
+    {
+        DispatchEvent dispatchEvent = e as DispatchEvent;
+        StartDialogue(dispatchEvent.eventId, dispatchEvent.completed);
+    }
+
+
+    /// <summary>
+    /// 开始对话
+    /// </summary>
+    public void StartDialogue(int dialogueID, Action onComplete = null)
+    {
+        currentDialogueID = dialogueID;
+
+
+        PlayDialogue(dialogueID);
+    }
+
+    private void PlayDialogue(int dialogueID)
+    {
+        currentDialogueID = dialogueID;
+
+        // 找到当前对话组
+        var dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(dialogueID);
+        if (dialogueConfig.ID == 0)
+        {
+            EndDialogue();
+            return;
+        }
+
+        dialogue.OpenDialoguePanel(dialogueConfig.ID, null, ShowDialogueEventData.MessageShowType.Verbatim,
+            (selectedOptionID) =>
+            {
+                if (selectedOptionID.HasValue)
+                {
+                    // 玩家选择了选项,处理结果
+                    SelectOption(selectedOptionID.Value);
+                }
+                else
+                {
+                    // 无选
+                    EndDialogue1();
+                }
+            });
+    }
+
+    /// <summary>
+    /// 处理选项选择
+    /// </summary>
+    public void SelectOption(int optionID)
+    {
+        PlayDialogue(optionID);
+    }
+
+    /// <summary>
+    /// 结束对话 
+    /// </summary>
+    private async void EndDialogue1()
+    {
+        EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(currentDialogueID);
+        switch (dialogueConfig.optionType)
+        {
+            //选项在这里不处理 在ui层处理 所有这里不是走到1 直接return
+            case 1:
+                EndDialogue();
+                return;
+
+            //进入战斗
+            case 2:
+                LogTool.Log("对话结束,进入战斗");
+                break;
+            //获得奖励
+            case 3:
+                List<ItemInfo> itemInfos = new List<ItemInfo>();
+                for (var i = 0; i < dialogueConfig.PrizeIDs.Length; i++)
+                {
+                    ItemInfo itemInfo = new ItemInfo(dialogueConfig.PrizeIDs[i], dialogueConfig.PrizeNums[i]);
+                    itemInfos.Add(itemInfo);
+                }
+
+                await dialogue.OpenRewardsPanel(itemInfos);
+                LogTool.Log("对话结束,获得奖励");
+                break;
+        }
+
+        //如果有下一个对话id 走下一个id
+        if ( dialogueConfig.ResultOptions != 0)
+        {
+            PlayDialogue(dialogueConfig.ResultOptions);
+        }
+    }
+
+
+    /// <summary>
+    /// 结束对话
+    /// </summary>
+    private void EndDialogue()
+    {
+        onDialogueComplete?.Invoke();
+    }
+}

+ 0 - 0
Assets/Scripts/GameUI/DialogueManager/DialogueManager.cs.meta → Assets/Scripts/GameLogic/EventManager/DialogueManager.cs.meta


+ 13 - 0
Assets/Scripts/GameLogic/EventManager/DialogueMono.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using Common.Utility.CombatEvent;
+using Fort23.Core;
+using GameLogic.Bag;
+
+public interface IDialogueMono
+{
+    void OpenDialoguePanel(int id, string[] icon, ShowDialogueEventData.MessageShowType messageShowType,
+        Action<int?> finish);
+
+    CTask OpenRewardsPanel(List<ItemInfo> rewardsDic, Action onClose = null, int titleId = 0);
+}

+ 3 - 0
Assets/Scripts/GameLogic/EventManager/DialogueMono.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7ef054f45f63489bab509d96db22d0b7
+timeCreated: 1745335552

+ 12 - 10
Assets/Scripts/GameLogic/EventManager/EventManager.cs

@@ -2,7 +2,9 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
+using Core.Event.Event;
 using Excel2Json;
+using Fort23.Core;
 using Fort23.UTool;
 using GameLogic.Bag;
 using GameLogic.Player;
@@ -32,7 +34,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
 
 
         // 获取通用事件
-        List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 3 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
+        List<EventConfig> globalEvents = eventConfigs.Where(e => e.EventTriggerType == 1 && CanTriggerEvent(e.ID) && e.EventQuality == quality).ToList();
 
 
         //神识场景事件
@@ -46,7 +48,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
 
 
         var triggeredEvents = new List<EventConfig>();
-        for (int i = 0; i >= divineSenseConfig.DetectEventCount; i++)
+        for (int i = 0; i < divineSenseConfig.DetectEventCount; i++)
         {
             int randomValue1 = Random.Range(0, 101);
             //刷场景事件
@@ -57,7 +59,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
                 triggeredEvents.Add(candidateEvents[randomValue2]);
                 candidateEvents.RemoveAll(ew => ew.ID == candidateEvents[randomValue2].ID);
             }
-            else
+            else if (globalEvents.Count > 0)
             {
                 int randomValue2 = Random.Range(0, globalEvents.Count);
 
@@ -107,12 +109,13 @@ public class EventSystemManager : Singleton<EventSystemManager>
     public void TriggerEvent(EventConfig evt)
     {
         Debug.Log($"触发事件: {evt.Description} (ID: {evt.ID}, 品质: {evt.EventQuality})");
-        if (evt.DialogueID > 0)
+
+        DialogueManager.Instance.StartDialogue(evt.EventType, () =>
         {
-            // DialogueManager.Instance.StartDialogue(evt.DialogueID, evt.ID);
-        }
+            CompleteEvent(evt.ID);
+        });
 
-        CompleteEvent(evt.ID);
+       
     }
 
     /// <summary>
@@ -153,7 +156,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
         }
 
 
-        return false;
+        return true;
     }
 
     /// <summary>
@@ -163,7 +166,7 @@ public class EventSystemManager : Singleton<EventSystemManager>
     public void CompleteEvent(int eventID)
     {
         LogTool.Log($"完成任务{eventID}");
-        AccountFileInfo.EventData eventData =  AccountFileInfo.Instance.playerData.events.FirstOrDefault((e) => e.eventID == eventID);
+        AccountFileInfo.EventData eventData = AccountFileInfo.Instance.playerData.events.FirstOrDefault((e) => e.eventID == eventID);
         if (eventData == null)
         {
             eventData = new AccountFileInfo.EventData();
@@ -173,6 +176,5 @@ public class EventSystemManager : Singleton<EventSystemManager>
         eventData.completeCount++;
         AccountFileInfo.Instance.playerData.events.Add(eventData);
         AccountFileInfo.Instance.SavePlayerData();
-        
     }
 }

+ 2 - 0
Assets/Scripts/GameLogic/Player/PlayerManager.cs

@@ -30,6 +30,8 @@ public class PlayerManager : Singleton<PlayerManager>
         SetConfigs();
         AccountFileInfo.Instance.LoadPlayerData();
         InitGameData();
+        EventSystemManager.Instance.CustomInit();
+       
     }
 
     private void SetConfigs()

+ 0 - 3
Assets/Scripts/GameUI/DialogueManager.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: c0b51378f2614ea18c9558f232462776
-timeCreated: 1745307432

+ 0 - 94
Assets/Scripts/GameUI/DialogueManager/DialogueManager.cs

@@ -1,94 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using Common.Utility.CombatEvent;
-using Excel2Json;
-using Fort23.Mono;
-using Fort23.UTool;
-using UnityEngine;
-using Utility;
-
-
-public class DialogueManager : Singleton<DialogueManager>
-{
-    private readonly EventSystemManager eventManager;
-
-    private int currentDialogueID;
-    private int currentNodeID;
-    private int currentEventID;
-
-    private List<DialogueConfig> dialogueConfigs;
-    private List<DialogueOptionConfig> dialogueOptionConfigs;
-
-
-    public void CustomInit()
-    {
-        dialogueConfigs = ConfigComponent.Instance.GetAll<DialogueConfig>().ToList();
-        dialogueOptionConfigs = ConfigComponent.Instance.GetAll<DialogueOptionConfig>().ToList();
-    }
-
-    /// <summary>
-    /// 开始对话
-    /// </summary>
-    public void StartDialogue(int dialogueID, int eventID)
-    {
-        currentDialogueID = dialogueID;
-        currentNodeID = 1;
-        currentEventID = eventID;
-        ShowDialogue();
-    }
-
-    /// <summary>
-    /// 显示当前对话
-    /// </summary>
-    private void ShowDialogue()
-    {
-        //找到当前对话组
-        var dialogueConfig = dialogueConfigs.Find(n =>
-            n.ID == currentDialogueID && n.GroupId == currentNodeID);
-        if (dialogueConfig.ID == 0)
-        {
-            EndDialogue();
-            return;
-        }
-
-
-        //todo 加载对话ui
-        DialoguePanel.OpenDialoguePanel(dialogueConfig.Content, null, ShowDialogueEventData.MessageShowType.Default, () =>
-        {
-
-        });
-        currentNodeID++;
-    }
-
-    /// <summary>
-    /// 处理选项选择,跳转节点或触发逻辑。
-    /// </summary>
-    /// <param name="optionID">选项ID</param>
-    public void SelectOption(int optionID)
-    {
-        var option = dialogueOptionConfigs.Find(o => o.ID == optionID);
-        if (option.ID == 0)
-        {
-            EndDialogue();
-            return;
-        }
-
-        if (option.DialogueConfigID > 0)
-        {
-            currentNodeID = option.DialogueConfigID;
-            ShowDialogue();
-        }
-        else
-        {
-            EndDialogue();
-        }
-    }
-
-    /// <summary>
-    /// 结束对话
-    /// </summary>
-    private void EndDialogue()
-    {
-    }
-}

+ 25 - 0
Assets/Scripts/GameUI/DialogueMono.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using Common.Utility.CombatEvent;
+using Fort23.Core;
+using Fort23.Mono;
+using GameLogic.Bag;
+
+namespace GameUI
+{
+    public class DialogueMono : IDialogueMono
+    {
+        public void OpenDialoguePanel(int id, string[] icon, ShowDialogueEventData.MessageShowType messageShowType, Action<int?> finish)
+        {
+            DialoguePanel.OpenDialoguePanel(id, icon,messageShowType,finish);
+        }
+
+        public async CTask OpenRewardsPanel(List<ItemInfo> rewardsDic, Action onClose = null, int titleId = 0)
+        {
+            CTask cTask = CTask.Create();
+            RewardsPanel rewardsPanel = await RewardsPanel.OpenPanel(rewardsDic,onClose,titleId);
+            await rewardsPanel.UIClosed();
+            cTask.SetResult();
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/GameUI/DialogueMono.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0b2874b2722f474aac3fa3866064b2a6
+timeCreated: 1745378014

+ 1 - 0
Assets/Scripts/GameUI/GameApplction.cs

@@ -112,6 +112,7 @@ public class GameApplction : IGameStart
         //     LogTool.Error("登陆失败");
         //     return;
         // }
+        DialogueManager.Instance.CustomInit(new DialogueMono());
 
         PlayerManager.Instance.Init();
         // PlayerManager.Instance.InitTestHero();

+ 5 - 4
Assets/Scripts/GameUI/UI/CombatPanel/CombatPanel.cs

@@ -1,7 +1,9 @@
+using System;
 using System.Collections.Generic;
 using Common.Utility.CombatEvent;
 using Excel2Json;
 using Fort23.Core;
+using GameLogic.Bag;
 using GameLogic.Combat.CombatTool;
 using UnityEngine;
 
@@ -30,7 +32,7 @@ namespace Fort23.Mono
             CombatEventManager.Instance.AddEventListener(CombatEventType.GameStart, GameStart);
             CombatEventManager.Instance.AddEventListener(CombatEventType.AddMagicWeaponHeroEntity,
                 AddMagicWeaponHeroEntity);
-    
+
             StaticUpdater.Instance.AddLateUpdateCallBack(Update);
             CameraSelect.value = 0.7f;
         }
@@ -83,7 +85,6 @@ namespace Fort23.Mono
             CameraSelect.onValueChanged.AddListener(CameraSelect_onValueChanged);
             AutoUse.onValueChanged.AddListener((x) =>
             {
-              
                 CombatController.currActiveCombat.CombatHeroController.playerHeroEntity.MagicWeaponControl.isAutoUse =
                     x;
             });
@@ -95,8 +96,8 @@ namespace Fort23.Mono
             UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
             CombatController.currActiveCombat.CombatSenceController.StartPayShengShi(CombatController.currActiveCombat
                 .CombatHeroController.playerHeroEntity.GameObject.transform);
-            List<EventConfig> eventConfigs =  EventSystemManager.Instance.DetectEvents(1);
-            if(eventConfigs == null || eventConfigs.Count == 0)
+            List<EventConfig> eventConfigs = EventSystemManager.Instance.DetectEvents(1);
+            if (eventConfigs == null || eventConfigs.Count == 0)
                 return;
             for (var i = 0; i < eventConfigs.Count; i++)
             {

+ 6 - 1
Assets/Scripts/GameUI/UI/CombatPanel/ShengShiEventWidget.cs

@@ -1,5 +1,6 @@
 using Core.Language;
 using Excel2Json;
+using Fort23.Core;
 using Fort23.UTool;
 
 namespace Fort23.Mono
@@ -26,11 +27,15 @@ namespace Fort23.Mono
 
         private void Button_onClick()
         {
+            UIManager.Instance.DormancyAllGComponent<ShengShiEventWidget>();
+            EventSystemManager.Instance.TriggerEvent(randomEventConfig);
         }
 
+        private EventConfig randomEventConfig;
+
         public void InitShengShiEventWidget(int id)
         {
-            EventConfig randomEventConfig = ConfigComponent.Instance.Get<EventConfig>(id);
+            randomEventConfig = ConfigComponent.Instance.Get<EventConfig>(id);
             Massge.text = LanguageManager.Instance.Text(randomEventConfig.Description);
         }
     }

+ 42 - 0
Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidget.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Linq;
+using Core.Language;
+using Excel2Json;
+using Fort23.UTool;
+
+namespace Fort23.Mono
+{
+    [UIBinding(prefab = "DialogueOptionWidget")]
+    public partial class DialogueOptionWidget : UIComponent
+    {
+        public EventConditionConfig eventConditionConfig;
+        private Action<DialogueOptionWidget> callback;
+
+        private void Init()
+        {
+        }
+
+        public override void AddEvent()
+        {
+        }
+
+        public override void DelEvent()
+        {
+        }
+
+        public override void AddButtonEvent()
+        {
+            OptionWidget.onClick.AddListener(() => { callback?.Invoke(this); });
+        }
+
+
+        public void CustomInit(int id, int mainOpid, Action<DialogueOptionWidget> callback)
+        {
+            eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(id);
+            var mainEventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(mainOpid);
+            int index = mainEventConditionConfig.optionPara1.ToList().IndexOf(eventConditionConfig.ID);
+            Text_desc.text = LanguageManager.Instance.Text(mainEventConditionConfig.optionPara2[index]);
+            this.callback = callback;
+        }
+    }
+}

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/DialogueConfig.cs.meta → Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidget.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: WSkc5iivUSgdHHQXWpffKVXiJMayk2qmo0883Ued0a47pmyFjx9nfgKXYg1L
+guid: BilJ5H6qVn0kZ2aHvftoUz7YyhiCd/l9FOStPSpcbpysu4odjonAgd+fJJhF
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 40 - 0
Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidgetData.cs

@@ -0,0 +1,40 @@
+using Fort23.Core;
+using Fort23.UTool;
+using UnityEngine.UI;
+using UnityEngine;
+using System.Collections.Generic;
+namespace Fort23.Mono
+{
+	public partial class DialogueOptionWidget 
+	{
+	  #region 自定义数据 
+	  private Button _OptionWidget;
+	  public Button OptionWidget
+	   {
+	   get{
+	      if (_OptionWidget == null)
+	       {
+	         _OptionWidget  = GetUIUnit<Button>("OptionWidget"); 
+	       }
+	      return _OptionWidget;
+	     }
+	   }
+	  private Text _Text_desc;
+	  public Text Text_desc
+	   {
+	   get{
+	      if (_Text_desc == null)
+	       {
+	         _Text_desc  = GetUIUnit<Text>("Text_desc"); 
+	       }
+	      return _Text_desc;
+	     }
+	   }
+	  #endregion 自定义数据结束 
+	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
+	{
+	 await base.SetUIGameObject(gObjectPoolInterface);
+	 Init();
+	}
+	}
+}

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/DialogueOptionConfig.cs.meta → Assets/Scripts/GameUI/UI/DialoguePanel/DialogueOptionWidgetData.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: Cn9Ktnv8VX+YAbKlIVevrDIK05tDWrgRPlyD9dUG6uk+bFMXflGq6f6HOozb
+guid: CSwY5yn/VX6zktx5raWjeT0Cl3DZ4gO14kulyDw9TDJ2MBtgH5dWBOIsLWKU
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 103 - 19
Assets/Scripts/GameUI/UI/DialoguePanel/DialoguePanel.cs

@@ -1,7 +1,11 @@
 using System.Text;
 using Common.Utility.CombatEvent;
 using Core.Language;
+using Excel2Json;
+using Fort23.UTool;
 using UnityEngine;
+using System;
+using Fort23.Core;
 
 namespace Fort23.Mono
 {
@@ -10,31 +14,32 @@ namespace Fort23.Mono
     {
         private int[] dialogueMessaga;
         private ShowDialogueEventData.MessageShowType messageShowType;
-        private System.Action finish;
+        private Action<int?> finish;
         private int index;
-
         private char[] _currShowMessage;
-
         private float _showTime = 0.05f;
         private float _currShowTime = 0;
         protected StringBuilder _sb = new StringBuilder();
         private int _currShowIndex;
-
         private bool _isUpdate;
         private bool _isShowNextButton;
         private string[] showIconName;
+        private EventConditionConfig eventConditionConfig;
+        private bool _skipTyping;
+        private bool _isShowingOptions;
 
-        public static async void OpenDialoguePanel(int[] dialogueMessaga, string[] icon,
+        public static async void OpenDialoguePanel(int id, string[] icon,
             ShowDialogueEventData.MessageShowType messageShowType,
-            System.Action finish)
+            Action<int?> finish)
         {
             DialoguePanel dialoguePanel = await UIManager.Instance.LoadAndOpenPanel<DialoguePanel>(null, UILayer.Top);
-            // dialoguePanel.GObjectPoolInterface.SetActive(false);
-            dialoguePanel.ShowPanel(dialogueMessaga, icon, messageShowType, finish);
+            dialoguePanel.ShowPanel(id, icon, messageShowType, finish);
         }
 
         private void Init()
         {
+            _skipTyping = false;
+            _isShowingOptions = false;
         }
 
         protected override void AddEvent()
@@ -50,17 +55,56 @@ namespace Fort23.Mono
             nextButton.onClick.AddListener(NextShow);
         }
 
+        private void SkipTyping()
+        {
+            _skipTyping = true;
+            if (_isUpdate)
+            {
+                _sb.Clear();
+                _sb.Append(_currShowMessage);
+                message.text = _sb.ToString();
+                _currShowIndex = _currShowMessage.Length;
+                _isUpdate = false;
+                ShowNextIcon();
+                if (index >= dialogueMessaga.Length)
+                {
+                    // 所有句子显示完成,检查是否有选项
+                    if (eventConditionConfig.optionType == 1 && !_isShowingOptions)
+                    {
+                        ShowOptions();
+                    }
+                    // else
+                    // {
+                    //     // 无选项,关闭面板,返回 null
+                    //     UIManager.Instance.HideUIUIPanel(this);
+                    //     finish?.Invoke(null);
+                    // }
+                    // return;
+                }
+            }
+        }
+
         private void NextShow()
         {
-            StartShowMassge();
+            if (_isShowingOptions)
+                return;
+            if (_isUpdate)
+            {
+                SkipTyping();
+            }
+            else
+            {
+                StartShowMassge();
+            }
         }
 
-        public void ShowPanel(int[] dialogueMessaga, string[] icon,
+        public void ShowPanel(int id, string[] icon,
             ShowDialogueEventData.MessageShowType messageShowType,
-            System.Action finish)
+            Action<int?> finish)
         {
+            eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(id);
             showIconName = icon;
-            this.dialogueMessaga = dialogueMessaga;
+            this.dialogueMessaga = eventConditionConfig.LanID;
             this.messageShowType = messageShowType;
             this.finish = finish;
             index = 0;
@@ -72,8 +116,18 @@ namespace Fort23.Mono
         {
             if (index >= dialogueMessaga.Length)
             {
-                UIManager.Instance.HideUIUIPanel(this);
-                finish?.Invoke();
+                // 所有句子显示完成,检查是否有选项
+                if (eventConditionConfig.optionType == 1 && !_isShowingOptions)
+                {
+                    ShowOptions();
+                }
+                else
+                {
+                    // 无选项,关闭面板,返回 null
+                    UIManager.Instance.HideUIUIPanel(this);
+                    finish?.Invoke(null);
+                }
+
                 return;
             }
 
@@ -100,10 +154,34 @@ namespace Fort23.Mono
                     message.text = _sb.ToString();
                     _isUpdate = true;
                     _currShowIndex = 1;
+                    _skipTyping = false;
                     break;
             }
         }
 
+        private async void ShowOptions()
+        {
+            UIManager.Instance.DormancyAllGComponent<DialogueOptionWidget>();
+            _isShowingOptions = true;
+
+            foreach (var op in eventConditionConfig.optionPara1)
+            {
+                // EventConditionConfig eventConditionConfig = ConfigComponent.Instance.Get<EventConditionConfig>(op);
+
+                DialogueOptionWidget dialogueOptionWidget =
+                    await UIManager.Instance.CreateGComponent<DialogueOptionWidget>(null, OptionRoot);
+                dialogueOptionWidget.CustomInit(op, eventConditionConfig.ID, SelectOption);
+            }
+        }
+
+        private void SelectOption(DialogueOptionWidget obj)
+        {
+            int selectedOptionID = obj.eventConditionConfig.ID;
+
+            UIManager.Instance.HideUIUIPanel(this);
+            finish?.Invoke(selectedOptionID);
+        }
+
         private void ShowNextIcon()
         {
             nextIcon.SetActive(true);
@@ -118,17 +196,15 @@ namespace Fort23.Mono
 
         public void Update()
         {
-            if (!_isUpdate)
-            {
-                return;
-            }
+            if (!_isUpdate) return;
 
             if (messageShowType == ShowDialogueEventData.MessageShowType.Verbatim)
             {
                 if (_currShowIndex >= _currShowMessage.Length)
                 {
                     _isUpdate = false;
-                    ShowNextIcon();
+                    StartShowMassge();
+                    // ShowNextIcon();
                     return;
                 }
 
@@ -142,5 +218,13 @@ namespace Fort23.Mono
                 }
             }
         }
+
+        public override void Close()
+        {
+            UIManager.Instance.DormancyAllGComponent<DialogueOptionWidget>();
+            _isShowingOptions = false;
+            _skipTyping = false;
+            base.Close();
+        }
     }
 }

+ 11 - 0
Assets/Scripts/GameUI/UI/DialoguePanel/DialoguePanelData.cs

@@ -52,6 +52,17 @@ namespace Fort23.Mono
 	      return _icon;
 	     }
 	   }
+	  private RectTransform _OptionRoot;
+	  public RectTransform OptionRoot
+	   {
+	   get{
+	      if (_OptionRoot == null)
+	       {
+	         _OptionRoot  = GetUIUnit<RectTransform>("OptionRoot"); 
+	       }
+	      return _OptionRoot;
+	     }
+	   }
 	  #endregion 自定义数据结束 
 	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
 	{

+ 8 - 0
Assets/Scripts/GameUI/UI/RewardsPanel.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: WX8W5Cr/W33DQwUTU+q9ZZfgYZleOBQptR/RPqck4p0e80AtcYVezwDCR9RJ
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 95 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanel.cs

@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using Core.Audio;
+using Core.Language;
+using Fort23.Core;
+using GameLogic.Bag;
+using NetCore.Protocol.MemoryPack;
+
+namespace Fort23.Mono
+{
+    [UIBinding(prefab = "RewardsPanel")]
+    public partial class RewardsPanel : UIPanel
+    {
+        private void Init()
+        {
+        }
+
+        protected override void AddEvent()
+        {
+        }
+
+        protected override void DelEvent()
+        {
+        }
+
+        public override void AddButtonEvent()
+        {
+            btnDi.onClick.AddListener(OnclickClose);
+        }
+
+        private void OnclickClose()
+        {
+            onClose?.Invoke();
+            UIManager.Instance.HideUIUIPanel(this);
+            UIManager.Instance.DormancyAllGComponent<WidgetItem>(rewardPool);
+        }
+
+        private Action onClose;
+        private string rewardPool = "rewardPool";
+
+        public override CTask Show()
+        {
+            AudioManager.Instance.PlayAudio("jiangliui.wav");
+            return base.Show();
+        }
+
+        public async void InitRewardsPanel(List<ItemInfo> rewards, Action onClose = null)
+        {
+            this.onClose = onClose;
+            foreach (ItemInfo reward in rewards)
+            {
+                GenerateWidget(reward);
+            }
+        }
+
+
+        public void SetTitle(string title)
+        {
+            txtlName.text = title;
+        }
+
+        public async void InitRewardsPanel(Dictionary<string, ItemInfo> rewardsDic, Action onClose = null)
+        {
+            this.onClose = onClose;
+            foreach (KeyValuePair<string, ItemInfo> keyValuePair in rewardsDic)
+            {
+                GenerateWidget(keyValuePair.Value);
+            }
+        }
+
+        private async void GenerateWidget(ItemInfo itemInfo)
+        {
+            WidgetItem widgetItem = await UIManager.Instance.CreateGComponent<WidgetItem>(null,
+                poolName: rewardPool, root: itemRoot);
+            widgetItem.InitWidget(itemInfo);
+        }
+
+
+        public async static CTask<RewardsPanel> OpenPanel(Dictionary<string, ItemInfo> rewardsDic, Action onClose = null)
+        {
+            RewardsPanel rewardsPanel = await UIManager.Instance.LoadAndOpenPanel<RewardsPanel>(null, layer: UILayer.Top);
+            rewardsPanel.InitRewardsPanel(rewardsDic, onClose);
+            return rewardsPanel;
+        }
+
+        public async static CTask<RewardsPanel> OpenPanel(List<ItemInfo> rewardsDic, Action onClose = null, int titleId = 0)
+        {
+            RewardsPanel rewardsPanel = await UIManager.Instance.LoadAndOpenPanel<RewardsPanel>(null, layer: UILayer.Top);
+            rewardsPanel.InitRewardsPanel(rewardsDic, onClose);
+            if (titleId != 0)
+                rewardsPanel.SetTitle(LanguageManager.Instance.Text(titleId));
+            return rewardsPanel;
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanel.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: CX8Y5y+rW3opfagNz1zhRWMQ3hjg4Bcn7On6fIOqRVX0eFkKW7qkWoXG6kZE
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 73 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanelData.cs

@@ -0,0 +1,73 @@
+using Fort23.Core;
+using Fort23.UTool;
+using UnityEngine.UI;
+using UnityEngine;
+using System.Collections.Generic;
+namespace Fort23.Mono
+{
+	public partial class RewardsPanel 
+	{
+	  #region 自定义数据 
+	  private Text _txtlName;
+	  public Text txtlName
+	   {
+	   get{
+	      if (_txtlName == null)
+	       {
+	         _txtlName  = GetUIUnit<Text>("txtlName"); 
+	       }
+	      return _txtlName;
+	     }
+	   }
+	  private GameObject _diObj;
+	  public GameObject diObj
+	   {
+	   get{
+	      if (_diObj == null)
+	       {
+	         _diObj  = GetUIUnit<GameObject>("diObj"); 
+	       }
+	      return _diObj;
+	     }
+	   }
+	  private RectTransform _itemRoot;
+	  public RectTransform itemRoot
+	   {
+	   get{
+	      if (_itemRoot == null)
+	       {
+	         _itemRoot  = GetUIUnit<RectTransform>("itemRoot"); 
+	       }
+	      return _itemRoot;
+	     }
+	   }
+	  private Button _btnDi;
+	  public Button btnDi
+	   {
+	   get{
+	      if (_btnDi == null)
+	       {
+	         _btnDi  = GetUIUnit<Button>("btnDi"); 
+	       }
+	      return _btnDi;
+	     }
+	   }
+	  private GameObject _widget;
+	  public GameObject widget
+	   {
+	   get{
+	      if (_widget == null)
+	       {
+	         _widget  = GetUIUnit<GameObject>("widget"); 
+	       }
+	      return _widget;
+	     }
+	   }
+	  #endregion 自定义数据结束 
+	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
+	{
+	 await base.SetUIGameObject(gObjectPoolInterface);
+	 Init();
+	}
+	}
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/RewardsPanelData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: Di5J5CKpWy604YznpVYJKogMOcA/iOOw4QhE6PiWMK//zz2yT3Ot4U/WeUyh
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 156 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItem.cs

@@ -0,0 +1,156 @@
+using System;
+using Core.Language;
+using Fort23.UTool;
+using GameLogic.Bag;
+using GameLogic.Equipment;
+using UnityEngine;
+using Utility;
+
+namespace Fort23.Mono
+{
+    [UIBinding(prefab = "WidgetItem")]
+    public partial class WidgetItem : UIComponent
+    {
+        public ItemInfo itemInfo;
+
+
+        private void Init()
+        {
+        }
+
+        public override void AddEvent()
+        {
+        }
+
+        public override void DelEvent()
+        {
+        }
+
+        public override void AddButtonEvent()
+        {
+            btnClick.onClick.AddListener(OnclickItem);
+        }
+
+        private Action onClickItem;
+
+        private async void OnclickItem()
+        {
+            if (onClickItem != null)
+            {
+                onClickItem.Invoke();
+                return;
+            }
+
+            if (itemInfo == null)
+            {
+                return;
+            }
+
+
+            // ItemPanel itemPanel = await UIManager.Instance.LoadAndOpenPanel<ItemPanel>(null, layer: UILayer.Top);
+            // itemPanel.InitItemPanel(itemInfo);
+        }
+
+        public void InitWidget(ItemInfo itemInfo, Action onClickItem = null)
+        {
+            this.itemInfo = itemInfo;
+
+            this.onClickItem = onClickItem;
+
+
+            border.gameObject.SetActive(false);
+            light.gameObject.SetActive(false);
+
+            heroShards.SetActive(false);
+
+
+            alertRed.SetActive(false);
+            icon.gameObject.SetActive(true);
+
+            if (itemInfo.count.Value > 0)
+            {
+                numObj.SetActive(true);
+                num.text = itemInfo.count.Value.ToStringEx();
+            }
+            else
+            {
+                numObj.SetActive(false);
+            }
+
+
+            if (itemInfo.eqInfo != null)
+            {
+                // icon.icon_name = HeroUITools.GetEquipmentIconName(itemInfo);
+
+                lvObj.SetActive(true);
+
+                // txtLv.text = itemInfo.eqInfo.level + "级";
+                txtLv.text = LanguageManager.Instance.Text(161, itemInfo.eqInfo.level);
+            }
+            else if (itemInfo.config.itemTyp == 5)
+            {
+                heroShards.SetActive(true);
+                icon.gameObject.SetActive(false);
+                heroShardsIcon.icon_name = itemInfo.config.icon;
+                lvObj.SetActive(false);
+            }
+            else
+            {
+                icon.icon_name = itemInfo.config.icon;
+                lvObj.SetActive(false);
+            }
+        }
+
+        /// <summary>
+        /// 设置单个装备的小红点
+        /// </summary>
+        /// <param name="oldEq"></param>
+        public bool SetEqItemRedPoint(ItemInfo best, int bwIdx)
+        {
+            //有更好的装备,且装备类型相同
+            if (best != null && best.eqInfo.basicEquipConfig.Type == bwIdx)
+            {
+                alertRed.SetActive(true);
+                // if (itemInfo == null)
+                // {
+                //     alertRed.SetActive(true);
+                // }
+                // //有装备,且装备类型相同,且装备等级更高
+                // if (itemInfo != null && best.eqInfo.basicEquipConfig.Type == eqTypIdx)
+                // {
+                //     alertRed.SetActive(true);
+                // }
+
+                return true;
+            }
+            else
+            {
+                alertRed.SetActive(false);
+            }
+
+            return false;
+        }
+
+        public void SetEmpty(Action onClickItem = null)
+        {
+            itemInfo = null;
+            this.onClickItem = onClickItem;
+
+            border.gameObject.SetActive(false);
+            light.gameObject.SetActive(false);
+
+            numObj.SetActive(false);
+            icon.gameObject.SetActive(false);
+            corner.gameObject.SetActive(false);
+            glow.gameObject.SetActive(false);
+            lvObj.SetActive(false);
+            heroShards.SetActive(false);
+            alertRed.SetActive(false);
+        }
+
+        public override void DormancyObj()
+        {
+            base.DormancyObj();
+        }
+    }
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItem.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: Di8dvSyqUS8HHPwKdE4W56pnbnJ2A0LSBFMA2/wUJzP8wksLcgqz4OBZXuC3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 174 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItemData.cs

@@ -0,0 +1,174 @@
+using Fort23.Core;
+using Fort23.UTool;
+using UnityEngine.UI;
+using UnityEngine;
+using System.Collections.Generic;
+using TMPro;
+
+namespace Fort23.Mono
+{
+	public partial class WidgetItem 
+	{
+	  #region 自定义数据 
+	  private Button _btnClick;
+	  public Button btnClick
+	   {
+	   get{
+	      if (_btnClick == null)
+	       {
+	         _btnClick  = GetUIUnit<Button>("btnClick"); 
+	       }
+	      return _btnClick;
+	     }
+	   }
+	  private MyImage _bg;
+	  public MyImage bg
+	   {
+	   get{
+	      if (_bg == null)
+	       {
+	         _bg  = GetUIUnit<MyImage>("bg"); 
+	       }
+	      return _bg;
+	     }
+	   }
+	  private MyImage _icon;
+	  public MyImage icon
+	   {
+	   get{
+	      if (_icon == null)
+	       {
+	         _icon  = GetUIUnit<MyImage>("icon"); 
+	       }
+	      return _icon;
+	     }
+	   }
+	  private TextMeshProUGUI _num;
+	  public TextMeshProUGUI num
+	   {
+	   get{
+	      if (_num == null)
+	       {
+	         _num  = GetUIUnit<TextMeshProUGUI>("num"); 
+	       }
+	      return _num;
+	     }
+	   }
+	  private GameObject _numObj;
+	  public GameObject numObj
+	   {
+	   get{
+	      if (_numObj == null)
+	       {
+	         _numObj  = GetUIUnit<GameObject>("numObj"); 
+	       }
+	      return _numObj;
+	     }
+	   }
+	  private GameObject _alertRed;
+	  public GameObject alertRed
+	   {
+	   get{
+	      if (_alertRed == null)
+	       {
+	         _alertRed  = GetUIUnit<GameObject>("alertRed"); 
+	       }
+	      return _alertRed;
+	     }
+	   }
+	  private MyImage _corner;
+	  public MyImage corner
+	   {
+	   get{
+	      if (_corner == null)
+	       {
+	         _corner  = GetUIUnit<MyImage>("corner"); 
+	       }
+	      return _corner;
+	     }
+	   }
+	  private MyImage _glow;
+	  public MyImage glow
+	   {
+	   get{
+	      if (_glow == null)
+	       {
+	         _glow  = GetUIUnit<MyImage>("glow"); 
+	       }
+	      return _glow;
+	     }
+	   }
+	  private MyImage _light;
+	  public MyImage light
+	   {
+	   get{
+	      if (_light == null)
+	       {
+	         _light  = GetUIUnit<MyImage>("light"); 
+	       }
+	      return _light;
+	     }
+	   }
+	  private MyImage _border;
+	  public MyImage border
+	   {
+	   get{
+	      if (_border == null)
+	       {
+	         _border  = GetUIUnit<MyImage>("border"); 
+	       }
+	      return _border;
+	     }
+	   }
+	  private GameObject _lvObj;
+	  public GameObject lvObj
+	   {
+	   get{
+	      if (_lvObj == null)
+	       {
+	         _lvObj  = GetUIUnit<GameObject>("lvObj"); 
+	       }
+	      return _lvObj;
+	     }
+	   }
+	  private Text _txtLv;
+	  public Text txtLv
+	   {
+	   get{
+	      if (_txtLv == null)
+	       {
+	         _txtLv  = GetUIUnit<Text>("txtLv"); 
+	       }
+	      return _txtLv;
+	     }
+	   }
+	  private GameObject _heroShards;
+	  public GameObject heroShards
+	   {
+	   get{
+	      if (_heroShards == null)
+	       {
+	         _heroShards  = GetUIUnit<GameObject>("heroShards"); 
+	       }
+	      return _heroShards;
+	     }
+	   }
+	  private MyImage _heroShardsIcon;
+	  public MyImage heroShardsIcon
+	   {
+	   get{
+	      if (_heroShardsIcon == null)
+	       {
+	         _heroShardsIcon  = GetUIUnit<MyImage>("heroShardsIcon"); 
+	       }
+	      return _heroShardsIcon;
+	     }
+	   }
+	  #endregion 自定义数据结束 
+	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
+	{
+	 await base.SetUIGameObject(gObjectPoolInterface);
+	 Init();
+	}
+	}
+}

+ 11 - 0
Assets/Scripts/GameUI/UI/RewardsPanel/WidgetItemData.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: DHwWvCusAS0SEllGkSsSNmo+p7wCHEfPLQZonwQEx4Lp9/OvqAVLo/7VwJ/N
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

文件差異過大導致無法顯示
+ 0 - 0
Assets/StreamingAssets/assetConfig.txt


二進制
Excel2Json/Excel/ChouKa.xlsx


二進制
Excel2Json/Excel/DialogueConfig.xlsx


二進制
Excel2Json/Excel/DivineSenseConfig.xlsx


二進制
Excel2Json/Excel/EventConfig.xlsx


二進制
Excel2Json/Excel/Language.xlsx


二進制
Excel2Json/Excel/Maps.xlsx


+ 97 - 0
ProjectSettings/ProjectSettings.asset

@@ -415,6 +415,103 @@ PlayerSettings:
       m_Height: 81
       m_Kind: 2
       m_SubKind: 
+  - m_BuildTarget: iPhone
+    m_Icons:
+    - m_Textures: []
+      m_Width: 180
+      m_Height: 180
+      m_Kind: 0
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 120
+      m_Height: 120
+      m_Kind: 0
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 167
+      m_Height: 167
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 152
+      m_Height: 152
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 76
+      m_Height: 76
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 120
+      m_Height: 120
+      m_Kind: 3
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 80
+      m_Height: 80
+      m_Kind: 3
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 80
+      m_Height: 80
+      m_Kind: 3
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 3
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 87
+      m_Height: 87
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 58
+      m_Height: 58
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 29
+      m_Height: 29
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 58
+      m_Height: 58
+      m_Kind: 1
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 29
+      m_Height: 29
+      m_Kind: 1
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 60
+      m_Height: 60
+      m_Kind: 2
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 2
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 2
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 20
+      m_Height: 20
+      m_Kind: 2
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 1024
+      m_Height: 1024
+      m_Kind: 4
+      m_SubKind: App Store
   m_BuildTargetBatching:
   - m_BuildTarget: Standalone
     m_StaticBatching: 0

+ 4 - 0
XiuXianGame.sln.DotSettings.user

@@ -2,11 +2,15 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollectionExtensions_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fde80aed0bd3646409e8bfb15c101f005e2000_003Fb3_003F5c77f01e_003FCollectionExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollider_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2193ba18cb0546b2832917f7674384cf20000_003F3a_003Fa0da6a1e_003FCollider_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACompareFunction_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F84_003Ff4158f3a_003FCompareFunction_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEnumerable_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ff2b6204eed6b41348236173e8a2f539817a880_003F16_003Ff8f742c5_003FEnumerable_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003AC_0021_003FUsers_003Fadmin_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4df6db7850b4c40b72002ff5da8188846ac00_003Fd3_003F4533b7c3_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMath_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb18a8b3398e74bca86895881dd02956c573648_003F8b_003F8699ce4e_003FMath_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMesh_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003Fde_003Fb0e5d275_003FMesh_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMonoBehaviour_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F2d_003F1dd7205f_003FMonoBehaviour_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANullable_00601_002Ecs_002Fl_003AC_0021_003FUsers_003Fadmin_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9c2967a135e648bdb993c5397a44991b573620_003F50_003F76c2310d_003FNullable_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F78_003F5e834fc5_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AQuaternion_002Ecs_002Fl_003AC_0021_003FUsers_003Fck_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2008d2d6093f4149aaeafd5f414aa7a517c400_003Fe8_003F196a10dc_003FQuaternion_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARandom_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9c2967a135e648bdb993c5397a44991b573620_003F9f_003F293a2b71_003FRandom_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARandom_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb18a8b3398e74bca86895881dd02956c573648_003F4c_003Fb5eddf34_003FRandom_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASingle_002Ecs_002Fl_003AC_0021_003FUsers_003Fck_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb18a8b3398e74bca86895881dd02956c573648_003F16_003F2be7d3ed_003FSingle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Fck_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4df6db7850b4c40b72002ff5da8188846ac00_003F3b_003F1a234af4_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

部分文件因文件數量過多而無法顯示