Просмотр исходного кода

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

# Conflicts:
#	Excel2Json/Excel/ChouKa.xlsx   resolved by master version
#	Excel2Json/Excel/OpenBox.xlsx   resolved by master version
zg 2 дней назад
Родитель
Сommit
9b6cf64a23

+ 1 - 1
Assets/Art/VFX/Materials/UIMat/ui fb kuang glow3 mask uv.mat

@@ -139,7 +139,7 @@ Material:
     - _MainSpeedU: 0
     - _MainSpeedV: 0
     - _MainTexOffsetU: 0
-    - _MainTexOffsetV: -0.3
+    - _MainTexOffsetV: 0.06125945
     - _MainTilingU: 1
     - _MainTilingV: 0.78
     - _MaskSpeedU: 0.5

+ 18 - 0
Assets/Res/Config/DropConfig.json

@@ -1483,14 +1483,32 @@
     },
     {
       "ID": 999007,
+      "dropGroupID": [
+        8,
+        9,
+        10,
+        11,
+        12,
+        13
+      ],
       "dropType": 2
     },
     {
       "ID": 999008,
+      "dropGroupID": [
+        14,
+        15,
+        16,
+        17
+      ],
       "dropType": 2
     },
     {
       "ID": 999009,
+      "dropGroupID": [
+        18,
+        19
+      ],
       "dropType": 2
     }
   ]

+ 4 - 2
Assets/Res/Config/InitialPlayerConfig.json

@@ -7,14 +7,16 @@
         1002,
         1003,
         1004,
-        1005
+        1005,
+        1007
       ],
       "itemAmount": [
         10,
         10,
         10,
         10,
-        10
+        10,
+        100000
       ],
       "fabaoId": [
         10002

+ 216 - 96
Assets/Res/UI/BoxPanel/BoxPanel.prefab

@@ -1,5 +1,101 @@
 %YAML 1.1
 %TAG !u! tag:yousandi.cn,2023:
+--- !u!1 &322111420540150677
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 7837645566193001603}
+  - component: {fileID: 3355923342222034163}
+  - component: {fileID: 1860430562021314936}
+  - component: {fileID: 87060483414581317}
+  m_Layer: 5
+  m_HasEditorInfo: 1
+  m_Name: Text_OneFree
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7837645566193001603
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 322111420540150677}
+  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: 9075403788194047161}
+  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: -52.103638}
+  m_SizeDelta: {x: 0, y: -37.7928}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3355923342222034163
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 322111420540150677}
+  m_CullTransparentMesh: 1
+--- !u!114 &1860430562021314936
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 322111420540150677}
+  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: 12800000, guid: e588d93665211944387ec8c03c8726ae, type: 3}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 9
+    m_MaxSize: 43
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "1\u5C0F\u65F620\u5206\u949F"
+--- !u!114 &87060483414581317
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 322111420540150677}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_EffectColor: {r: 0, g: 0, b: 0, a: 1}
+  m_EffectDistance: {x: 1, y: -1}
+  m_UseGraphicAlpha: 1
 --- !u!1 &1240759691706307126
 GameObject:
   m_ObjectHideFlags: 0
@@ -11,7 +107,6 @@ GameObject:
   - component: {fileID: 7858018693182147813}
   - component: {fileID: 8965272612517638377}
   - component: {fileID: 8976664237382821618}
-  - component: {fileID: 6908911704055347136}
   m_Layer: 5
   m_HasEditorInfo: 1
   m_Name: BoxPanel
@@ -89,6 +184,26 @@ MonoBehaviour:
     isAssetBundle: 0
     isList: 0
     ListCollectorDatas: []
+  - key: icon_Oneitem
+    gameObject: {fileID: 448323682004864090}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  - key: Icon_TenItem
+    gameObject: {fileID: 6831614674596714349}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  - key: Text_TenFree
+    gameObject: {fileID: 7564254636685150276}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
+  - key: Text_OneFree
+    gameObject: {fileID: 1860430562021314936}
+    isAssetBundle: 0
+    isList: 0
+    ListCollectorDatas: []
   isAssetBundle: 1
 --- !u!225 &8976664237382821618
 CanvasGroup:
@@ -102,99 +217,6 @@ CanvasGroup:
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0
---- !u!114 &6908911704055347136
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1240759691706307126}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 6a23dadfaa104ddf929b8c98dd02623c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  maxDuration: 0
-  isUpdate: 0
-  currTime: 0.30024773
-  GrpupInfos:
-  - Foldout: 1
-    isActive: 1
-    animName: show
-    isLoop: 0
-    allTargets:
-    - {fileID: 3194501373201481477}
-    - {fileID: 3194501373201481477}
-    TweenAssetInfo: {fileID: 11400000, guid: 3b43306cabdd06a48a5e1cba65050d09, type: 2}
-    TargetFoldout: 1
-    maxDuration: 0
-    isUpdate: 1
-    currTime: 0
-  MinMaxGradient:
-    m_Mode: 0
-    m_GradientMin:
-      serializedVersion: 2
-      key0: {r: 1, g: 1, b: 1, a: 1}
-      key1: {r: 1, g: 1, b: 1, a: 1}
-      key2: {r: 0, g: 0, b: 0, a: 0}
-      key3: {r: 0, g: 0, b: 0, a: 0}
-      key4: {r: 0, g: 0, b: 0, a: 0}
-      key5: {r: 0, g: 0, b: 0, a: 0}
-      key6: {r: 0, g: 0, b: 0, a: 0}
-      key7: {r: 0, g: 0, b: 0, a: 0}
-      ctime0: 0
-      ctime1: 65535
-      ctime2: 0
-      ctime3: 0
-      ctime4: 0
-      ctime5: 0
-      ctime6: 0
-      ctime7: 0
-      atime0: 0
-      atime1: 65535
-      atime2: 0
-      atime3: 0
-      atime4: 0
-      atime5: 0
-      atime6: 0
-      atime7: 0
-      m_Mode: 0
-      m_ColorSpace: -1
-      m_NumColorKeys: 2
-      m_NumAlphaKeys: 2
-    m_GradientMax:
-      serializedVersion: 2
-      key0: {r: 1, g: 1, b: 1, a: 1}
-      key1: {r: 1, g: 1, b: 1, a: 1}
-      key2: {r: 0, g: 0, b: 0, a: 0}
-      key3: {r: 0, g: 0, b: 0, a: 0}
-      key4: {r: 0, g: 0, b: 0, a: 0}
-      key5: {r: 0, g: 0, b: 0, a: 0}
-      key6: {r: 0, g: 0, b: 0, a: 0}
-      key7: {r: 0, g: 0, b: 0, a: 0}
-      ctime0: 0
-      ctime1: 65535
-      ctime2: 0
-      ctime3: 0
-      ctime4: 0
-      ctime5: 0
-      ctime6: 0
-      ctime7: 0
-      atime0: 0
-      atime1: 65535
-      atime2: 0
-      atime3: 0
-      atime4: 0
-      atime5: 0
-      atime6: 0
-      atime7: 0
-      m_Mode: 0
-      m_ColorSpace: -1
-      m_NumColorKeys: 2
-      m_NumAlphaKeys: 2
-    m_ColorMin: {r: 0, g: 0, b: 0, a: 0}
-    m_ColorMax: {r: 0, g: 0, b: 0, a: 0}
-  isLoop: 0
 --- !u!1 &1283798833564440464
 GameObject:
   m_ObjectHideFlags: 0
@@ -703,7 +725,7 @@ GameObject:
   - component: {fileID: 6831614674596714349}
   m_Layer: 0
   m_HasEditorInfo: 1
-  m_Name: myImage
+  m_Name: Icon_TenItem
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -1142,6 +1164,102 @@ CanvasGroup:
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0
+--- !u!1 &4417562118974159078
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 7
+  m_Component:
+  - component: {fileID: 2188105687983302471}
+  - component: {fileID: 8676950035031905782}
+  - component: {fileID: 7564254636685150276}
+  - component: {fileID: 9205331277890641506}
+  m_Layer: 5
+  m_HasEditorInfo: 1
+  m_Name: Text_TenFree
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2188105687983302471
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4417562118974159078}
+  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: 3111674043955101840}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -2, y: -52.103638}
+  m_SizeDelta: {x: 0, y: -37.7928}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8676950035031905782
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4417562118974159078}
+  m_CullTransparentMesh: 1
+--- !u!114 &7564254636685150276
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4417562118974159078}
+  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: 12800000, guid: e588d93665211944387ec8c03c8726ae, type: 3}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 9
+    m_MaxSize: 43
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "1\u5C0F\u65F620\u5206\u949F"
+--- !u!114 &9205331277890641506
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4417562118974159078}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_EffectColor: {r: 0, g: 0, b: 0, a: 1}
+  m_EffectDistance: {x: 1, y: -1}
+  m_UseGraphicAlpha: 1
 --- !u!1 &4923044900321880700
 GameObject:
   m_ObjectHideFlags: 0
@@ -1793,6 +1911,7 @@ RectTransform:
   - {fileID: 2211120389198192458}
   - {fileID: 2934320302541883345}
   - {fileID: 2561986655586709565}
+  - {fileID: 7837645566193001603}
   m_Father: {fileID: 6698958863649085951}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -1930,6 +2049,7 @@ RectTransform:
   - {fileID: 5786166097279901156}
   - {fileID: 7985587118668684843}
   - {fileID: 6481753042138001888}
+  - {fileID: 2188105687983302471}
   m_Father: {fileID: 6698958863649085951}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
@@ -2121,7 +2241,7 @@ GameObject:
   - component: {fileID: 448323682004864090}
   m_Layer: 0
   m_HasEditorInfo: 1
-  m_Name: myImage
+  m_Name: icon_Oneitem
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0

+ 3 - 3
Assets/Res/UI/BoxPanel/GachaPanel.prefab

@@ -241,7 +241,7 @@ RectTransform:
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 189}
-  m_SizeDelta: {x: 750, y: 1624}
+  m_SizeDelta: {x: 547, y: 1257}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!225 &855192496587546533
 CanvasGroup:
@@ -1623,7 +1623,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &342747676854343371
 RectTransform:
   m_ObjectHideFlags: 0
@@ -3049,7 +3049,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &7592450372735246186
 RectTransform:
   m_ObjectHideFlags: 0

+ 15 - 6
Assets/Scripts/GameLogic/Player/AccountFileInfo.cs

@@ -418,26 +418,35 @@ public class AccountFileInfo : Singleton<AccountFileInfo>
         public bool isCompleted;
     }
 
+    [System.Serializable]
     public class SummonData
     {
         // 招募ID
         public int id;
 
         //免费招募次数
-        public int freeCount;
+        public int oneFreeCount;
 
         //下一次免费招募时间
-        public long nextFreeTime;
+        public long nextOneFreeTime;
+
+        //十连招募次数
+        public int tenFreeCount;
 
-        //付费招募次数
-        public int payCount;
+        //下一次十连招募时间
+        public long nextTenFreeTime;
 
-        //下一次付费招募时间
-        public long nextPayTime;
+        public int onePayCount;
+        public int tenPayCount;
 
         //保底次数
         public int baodiCount1;
         public int baodiCount2;
+        
+        // 存储最近几次十连抽的结果
+        public List<List<int>> drawHistory = new List<List<int>>();
+
+        public int score;
     }
 
 

+ 15 - 6
Assets/Scripts/GameLogic/Player/PlayerManager.cs

@@ -33,9 +33,8 @@ public class PlayerManager : Singleton<PlayerManager>
     public HeroInfo myHero;
 
     public HeroInfo yindaoHeroData;
-    
-    
-    
+
+
     public long serverTime => TimeHelper.ServerNow();
     private AccountFileInfo.SmallPlacesData currentPlaces;
 
@@ -282,9 +281,8 @@ public class PlayerManager : Singleton<PlayerManager>
         heroInfo.InitHero(AccountFileInfo.Instance.playerData.heroData);
         myHero = heroInfo;
         myHero.TaoismSkillId = 601011;
-        
-        
-        
+
+
         HeroInfo yindaoHeroData = new HeroInfo();
         yindaoHeroData.InitHero(AccountFileInfo.Instance.playerData.yindaoHeroData);
         yindaoHeroData = heroInfo;
@@ -361,6 +359,17 @@ public class PlayerManager : Singleton<PlayerManager>
                 TimeHelper.GetBaseRefreshTime(TimeHelper.ClientNow());
             AccountFileInfo.Instance.playerData.todayUseExpElixrPanelCount = 0;
             AccountFileInfo.Instance.playerData.todayDivineSensePoint = 0;
+
+            foreach (var playerDataSummonData in AccountFileInfo.Instance.playerData.SummonDatas)
+            {
+                playerDataSummonData.onePayCount = 0;
+                playerDataSummonData.tenPayCount = 0;
+                playerDataSummonData.oneFreeCount = 0;
+                playerDataSummonData.nextOneFreeTime = 0;
+                playerDataSummonData.tenFreeCount = 0;
+                playerDataSummonData.nextTenFreeTime = 0;
+            }
+
             AccountFileInfo.Instance.SavePlayerData();
         }
 

+ 121 - 6
Assets/Scripts/GameLogic/Player/SummonManager.cs

@@ -4,6 +4,7 @@ using Excel2Json;
 using Fort23.UTool;
 using GameLogic.Bag;
 using UnityEngine;
+using UnityEngine.UIElements;
 using Utility;
 
 namespace GameLogic.Player
@@ -12,6 +13,9 @@ namespace GameLogic.Player
     {
         public Map<int, AccountFileInfo.SummonData> summonDataMap = new Map<int, AccountFileInfo.SummonData>();
 
+        //积分规则
+        public Map<int, List<OpenBoxScoreRule>> openBoxScoreRuleMap = new Map<int, List<OpenBoxScoreRule>>();
+
         public void CustomInit()
         {
             OpenBoxConfig[] openBoxConfigs = ConfigComponent.Instance.GetAll<OpenBoxConfig>();
@@ -27,6 +31,21 @@ namespace GameLogic.Player
                 }
             }
 
+            OpenBoxScoreRule[] openBoxScoreRules = ConfigComponent.Instance.GetAll<OpenBoxScoreRule>();
+            foreach (var openBoxScoreRule in openBoxScoreRules)
+            {
+                List<OpenBoxScoreRule> openBoxScoreRuleList;
+                if (!openBoxScoreRuleMap.ContainsKey(openBoxScoreRule.openBoxID))
+                {
+                    openBoxScoreRuleList = new List<OpenBoxScoreRule>();
+                    openBoxScoreRuleMap[openBoxScoreRule.openBoxID] = openBoxScoreRuleList;
+                }
+
+                openBoxScoreRuleList = openBoxScoreRuleMap[openBoxScoreRule.openBoxID];
+                openBoxScoreRuleList.Add(openBoxScoreRule);
+            }
+
+
             foreach (var playerDataSummonData in AccountFileInfo.Instance.playerData.SummonDatas)
             {
                 if (!summonDataMap.ContainsKey(playerDataSummonData.id))
@@ -47,11 +66,13 @@ namespace GameLogic.Player
             if (count == 1)
             {
                 //有免费次数,并且让到时间了就免费抽
-                if (summonData.freeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime >= summonData.nextFreeTime)
+                if (summonData.oneFreeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime >= summonData.nextOneFreeTime)
                 {
                     allIitem = Summon(summonData, 1);
 
-                    summonData.nextFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeFreePara[0] * 1000;
+                    summonData.oneFreeCount++;
+                    summonData.onePayCount++;
+                    summonData.nextOneFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeFreePara[0] * 1000;
                 }
                 else
                 {
@@ -61,7 +82,8 @@ namespace GameLogic.Player
                         PlayerManager.Instance.BagController.DeductCoin(openBoxConfig.oneConsume);
                         allIitem = Summon(summonData, 1);
 
-                        summonData.nextFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeFreePara[0] * 1000;
+                        summonData.onePayCount++;
+                        summonData.nextOneFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeFreePara[0] * 1000;
                     }
                     else
                     {
@@ -73,11 +95,20 @@ namespace GameLogic.Player
             else if (count == 10)
             {
                 //有免费次数,并且让到时间了就免费抽
-                if (summonData.payCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime >= summonData.nextPayTime)
+                if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime >= summonData.nextTenFreeTime)
                 {
                     allIitem = Summon(summonData, 10);
+                    //记录抽卡道具 用于成就检测
+                    List<int> drawHistory = new List<int>();
+                    foreach (var itemInfo in allIitem)
+                    {
+                        drawHistory.Add(itemInfo.itemID);
+                    }
 
-                    summonData.nextPayTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeChargePara[0] * 1000;
+                    summonData.drawHistory.Add(drawHistory);
+                    summonData.tenFreeCount++;
+                    summonData.tenPayCount++;
+                    summonData.nextTenFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeChargePara[0] * 1000;
                 }
                 else
                 {
@@ -86,7 +117,18 @@ namespace GameLogic.Player
                     {
                         PlayerManager.Instance.BagController.DeductCoin(openBoxConfig.tenConsume);
                         allIitem = Summon(summonData, 10);
-                        summonData.nextPayTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeChargePara[0] * 1000;
+                        //记录抽卡道具 用于成就检测
+                        List<int> drawHistory = new List<int>();
+                        foreach (var itemInfo in allIitem)
+                        {
+                            drawHistory.Add(itemInfo.itemID);
+                        }
+
+                        summonData.drawHistory.Add(drawHistory);
+                        summonData.tenPayCount++;
+                        summonData.nextTenFreeTime = PlayerManager.Instance.serverTime + openBoxConfig.oneConsumeChargePara[0] * 1000;
+
+                        CheckAchievements(summonData);
                     }
                     else
                     {
@@ -95,6 +137,7 @@ namespace GameLogic.Player
                 }
             }
 
+            AccountFileInfo.Instance.SavePlayerData();
             return allIitem;
         }
 
@@ -182,5 +225,77 @@ namespace GameLogic.Player
             AccountFileInfo.Instance.SavePlayerData();
             return allIitem;
         }
+
+
+        // 检查成就匹配
+        private void CheckAchievements(AccountFileInfo.SummonData summonData)
+        {
+            List<OpenBoxScoreRule> openBoxScoreRuleList = openBoxScoreRuleMap[summonData.id];
+
+            List<OpenBoxScoreRule> daChengOpenBoxScoreRuleList = new List<OpenBoxScoreRule>();
+            foreach (var openBoxScoreRule in openBoxScoreRuleList)
+            {
+                // 检查连续 Para0 次十连
+                if (summonData.drawHistory.Count < openBoxScoreRule.para0) continue;
+
+                bool allDrawsSatisfy = true;
+                // 检查最近 Para0 次十连是否都满足条件
+                for (int i = summonData.drawHistory.Count - openBoxScoreRule.para0; i < summonData.drawHistory.Count; i++)
+                {
+                    if (!CheckSingleDraw(openBoxScoreRule, summonData.drawHistory[i]))
+                    {
+                        allDrawsSatisfy = false;
+                        break;
+                    }
+                }
+
+                if (allDrawsSatisfy)
+                {
+                    daChengOpenBoxScoreRuleList.Add(openBoxScoreRule);
+                }
+            }
+
+            if (daChengOpenBoxScoreRuleList.Count > 0)
+            {
+                int id = daChengOpenBoxScoreRuleList.Max(obsr => obsr.ID);
+                OpenBoxScoreRule openBoxScoreRule = ConfigComponent.Instance.Get<OpenBoxScoreRule>(id);
+                summonData.score += openBoxScoreRule.score;
+                LogTool.Log($"达成成就 ID: {openBoxScoreRule.ID}, 分数: {openBoxScoreRule.score}, 描述: 连续{openBoxScoreRule.para0}次十连获得{openBoxScoreRule.para1}个品质{openBoxScoreRule.para3}的道具");
+            }
+        }
+
+
+        // 检查单次十连是否满足成就条件
+        private bool CheckSingleDraw(OpenBoxScoreRule openBoxScoreRule, List<int> drawResult)
+        {
+            // 统计符合条件的道具数量
+            int validItemCount = 0;
+            foreach (var item in drawResult)
+            {
+                ItemConfig itemConfig = ConfigComponent.Instance.Get<ItemConfig>(item);
+                // 检查道具标签
+                if (!openBoxScoreRule.para4.Contains(itemConfig.itemTag)) continue;
+
+                // 检查品质是否符合
+                bool qualityMatch = false;
+                switch (openBoxScoreRule.para2)
+                {
+                    case 1: // 等于
+                        qualityMatch = itemConfig.quality == openBoxScoreRule.para3;
+                        break;
+                    case 2: // 大于等于
+                        qualityMatch = itemConfig.quality >= openBoxScoreRule.para3;
+                        break;
+                    case 3: // 小于等于
+                        qualityMatch = itemConfig.quality <= openBoxScoreRule.para3;
+                        break;
+                }
+
+                if (qualityMatch) validItemCount++;
+            }
+
+            // 根据 Para1 判断是否满足数量要求
+            return validItemCount >= openBoxScoreRule.para1;
+        }
     }
 }

+ 7 - 3
Assets/Scripts/GameUI/EventManager/EventSystemManager.cs

@@ -508,6 +508,9 @@ public class EventSystemManager : Singleton<EventSystemManager>
                 eventList.guid = IdGenerater.GenerateIdInt();
                 eventList.curStep = eventConfig.EventLinksId[0];
                 eventList.selectEventLinkIds.Add(eventConfig.EventLinksId[0]);
+                //记录英雄等级 神识刷出来的战斗等级不变
+                if( PlayerManager.Instance.myHero != null)
+                    eventList.heroLevel = PlayerManager.Instance.myHero.level.Value;
             }
         }
         else
@@ -518,12 +521,13 @@ public class EventSystemManager : Singleton<EventSystemManager>
             eventList.guid = IdGenerater.GenerateIdInt();
             eventList.curStep = eventConfig.EventLinksId[0];
             eventList.selectEventLinkIds.Add(eventConfig.EventLinksId[0]);
+            //记录英雄等级 神识刷出来的战斗等级不变
+            if( PlayerManager.Instance.myHero != null)
+                eventList.heroLevel = PlayerManager.Instance.myHero.level.Value;
         }
 
 
-        //记录英雄等级 神识刷出来的战斗等级不变
-        if( PlayerManager.Instance.myHero != null)
-            eventList.heroLevel = PlayerManager.Instance.myHero.level.Value;
+     
 
         //初始化神识链条,用于监听条件是否完成
         if (eventList != null && eventConfig.EventType != 2)

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

@@ -172,7 +172,7 @@ public class GameApplction : IGameStart
         if (startCombatInfo.CombatType != CombatType.TestCombat)
         {
             MainPanel mainPanel = await MainPanel.OpenPanel();
-            if (AccountFileInfo.Instance.playerData.isTiggerPlot)
+            if (!AccountFileInfo.Instance.playerData.isTiggerPlot)
             {
                 mainPanel.GObjectPoolInterface.SetActive(false);
             }

+ 98 - 11
Assets/Scripts/GameUI/UI/BoxPanel/BoxPanel.cs

@@ -18,7 +18,7 @@ namespace Fort23.Mono
             AccountFileInfo.SummonData summonData = PlayerManager.Instance.SummonManager.summonDataMap[configId];
             OpenBoxConfig openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(configId);
             //有免费次数,并且让到时间了就免费抽
-            if (summonData.payCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime >= summonData.nextPayTime)
+            if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime >= summonData.nextTenFreeTime)
             {
                 return PlayerManager.Instance.SummonManager.Summon(configId, 10);
             }
@@ -42,7 +42,7 @@ namespace Fort23.Mono
             AccountFileInfo.SummonData summonData = PlayerManager.Instance.SummonManager.summonDataMap[configId];
             OpenBoxConfig openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(configId);
             //有免费次数,并且让到时间了就免费抽
-            if (summonData.freeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime >= summonData.nextFreeTime)
+            if (summonData.oneFreeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime >= summonData.nextOneFreeTime)
             {
                 return PlayerManager.Instance.SummonManager.Summon(configId, 1);
             }
@@ -66,6 +66,7 @@ namespace Fort23.Mono
     public partial class BoxPanel : UIPanel
     {
         private OpenBoxConfig openBoxConfig;
+        private AccountFileInfo.SummonData summonData;
 
         public static async void OpenBoxPanel()
         {
@@ -145,6 +146,7 @@ namespace Fort23.Mono
             List<ItemInfo> allIitem = await BoxHelper.OneBox(openBoxConfig.ID);
             if (allIitem != null)
                 GachaPanel.OpenPanel(allIitem, 1, openBoxConfig.ID);
+            UpdateUi();
         }
 
         private async void TenButtonCallBack()
@@ -153,6 +155,8 @@ namespace Fort23.Mono
             List<ItemInfo> allIitem = await BoxHelper.TenBox(openBoxConfig.ID);
             if (allIitem != null)
                 GachaPanel.OpenPanel(allIitem, 2, openBoxConfig.ID);
+
+            UpdateUi();
         }
 
 
@@ -172,18 +176,101 @@ namespace Fort23.Mono
         public void OpenPanel()
         {
             CombatController.currActiveCombat.isUpdate = false;
-            openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(1);
+            openBoxConfig = ConfigComponent.Instance.Get<OpenBoxConfig>(2);
+            ItemConfig config = ConfigComponent.Instance.Get<ItemConfig>(openBoxConfig.CostItemID);
+            icon_Oneitem.icon_name = config.icon;
+            Icon_TenItem.icon_name = config.icon;
             onCion.text = "x" + openBoxConfig.oneConsume;
             tenCion.text = "x" + openBoxConfig.tenConsume;
+            UpdateUi();
+        }
+
+        [CustomMethod(CustomMethodType.Update)]
+        public void Update()
+        {
+            if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime < summonData.nextTenFreeTime)
+            {
+                int time = (int)(summonData.nextTenFreeTime - PlayerManager.Instance.serverTime);
+                Text_TenFree.text = PlayerManager.TimeToHSM(time/1000);
+            }
+            else
+            {
+                if (Text_TenFree.gameObject.activeSelf)
+                {
+                    Text_TenFree.gameObject.SetActive(false);
+                    if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1])
+                    {
+                        tenCion.text = "免费";
+                    }
+                    else
+                    {
+                        tenCion.text = "x" + openBoxConfig.tenConsume;
+                    }
+                  
+                }
+            }
+
+            if (summonData.oneFreeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime < summonData.nextOneFreeTime)
+            {
+                int time = (int)(summonData.nextOneFreeTime - PlayerManager.Instance.serverTime);
+                Text_OneFree.text = PlayerManager.TimeToHSM(time/1000);
+            }
+            else
+            {
+                if (Text_OneFree.gameObject.activeSelf)
+                {
+                    Text_OneFree.gameObject.SetActive(false);
+                    if (summonData.oneFreeCount < openBoxConfig.oneConsumeFreePara[1])
+                    {
+                        onCion.text = "免费";
+                    }
+                    else
+                    {
+                        onCion.text = "x" + openBoxConfig.oneConsume;
+                    }
+                   
+                }
+            }
+        }
 
-            // if (AccountFileInfo.Instance.playerData.boxFree)
-            // {
-            //     Btn_AdsFree.gameObject.SetActive(false);
-            // }
-            // else
-            // {
-            //     Btn_AdsFree.gameObject.SetActive(true);
-            // }
+        public void UpdateUi()
+        {
+            summonData = PlayerManager.Instance.SummonManager.summonDataMap[1];
+
+
+            if (summonData.tenFreeCount < openBoxConfig.oneConsumeFreePara_1[1] && PlayerManager.Instance.serverTime >= summonData.nextTenFreeTime)
+            {
+                Text_TenFree.gameObject.SetActive(false);
+                tenCion.text = "免费";
+            }
+            //今日次数已用完
+            else if (summonData.tenFreeCount >= openBoxConfig.oneConsumeFreePara_1[1])
+            {
+                Text_TenFree.gameObject.SetActive(false);
+
+                tenCion.text = "x" + openBoxConfig.tenConsume;
+            }
+            else
+            {
+                Text_TenFree.gameObject.SetActive(true);
+                tenCion.text = "x" + openBoxConfig.tenConsume;
+            }
+
+            if (summonData.oneFreeCount < openBoxConfig.oneConsumeFreePara[1] && PlayerManager.Instance.serverTime >= summonData.nextOneFreeTime)
+            {
+                Text_OneFree.gameObject.SetActive(false);
+                onCion.text = "免费";
+            }
+            else if (summonData.oneFreeCount >= openBoxConfig.oneConsumeFreePara[1])
+            {
+                onCion.text = "x" + openBoxConfig.oneConsume;
+                Text_OneFree.gameObject.SetActive(false);
+            }
+            else
+            {
+                onCion.text = "x" + openBoxConfig.oneConsume;
+                Text_OneFree.gameObject.SetActive(true);
+            }
         }
     }
 }

+ 44 - 0
Assets/Scripts/GameUI/UI/BoxPanel/BoxPanelData.cs

@@ -85,6 +85,50 @@ namespace Fort23.Mono
 	      return _Btn_AdsFree;
 	     }
 	   }
+	  private MyImage _icon_Oneitem;
+	  public MyImage icon_Oneitem
+	   {
+	   get{
+	      if (_icon_Oneitem == null)
+	       {
+	         _icon_Oneitem  = GetUIUnit<MyImage>("icon_Oneitem"); 
+	       }
+	      return _icon_Oneitem;
+	     }
+	   }
+	  private MyImage _Icon_TenItem;
+	  public MyImage Icon_TenItem
+	   {
+	   get{
+	      if (_Icon_TenItem == null)
+	       {
+	         _Icon_TenItem  = GetUIUnit<MyImage>("Icon_TenItem"); 
+	       }
+	      return _Icon_TenItem;
+	     }
+	   }
+	  private Text _Text_TenFree;
+	  public Text Text_TenFree
+	   {
+	   get{
+	      if (_Text_TenFree == null)
+	       {
+	         _Text_TenFree  = GetUIUnit<Text>("Text_TenFree"); 
+	       }
+	      return _Text_TenFree;
+	     }
+	   }
+	  private Text _Text_OneFree;
+	  public Text Text_OneFree
+	   {
+	   get{
+	      if (_Text_OneFree == null)
+	       {
+	         _Text_OneFree  = GetUIUnit<Text>("Text_OneFree"); 
+	       }
+	      return _Text_OneFree;
+	     }
+	   }
 	  #endregion 自定义数据结束 
 	 public override async CTask SetUIGameObject(GameObject gObjectPoolInterface)
 	{

BIN
Excel2Json/Excel/InitialPlayer.xlsx


+ 1 - 0
XiuXianGame.sln.DotSettings.user

@@ -28,6 +28,7 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIGrouping_00602_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5004a53079e04c2991f89460a5186cf010fc00_003Fb1_003F69de2d9e_003FIGrouping_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AINotifyCompletion_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9c2967a135e648bdb993c5397a44991b573620_003F64_003Fbb31faf9_003FINotifyCompletion_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInt32_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4df6db7850b4c40b72002ff5da8188846ac00_003F6f_003F6f797d5f_003FInt32_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInt64_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4df6db7850b4c40b72002ff5da8188846ac00_003Fc2_003Fd9090dcf_003FInt64_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIStyle_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F56d039fe633a4adf8fb266a0b1797e6c17a000_003F0f_003F32e1f086_003FIStyle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AJsonMapper_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc7c8498c81c94b1b853dfc7fe4d8d7fbec00_003F05_003F3709212d_003FJsonMapper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALayerMask_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F6c_003F2226b399_003FLayerMask_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>