From aa84cb62bebb9c8a4e586bcc1ec28eb7a16a8860 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 26 一月 2026 18:10:34 +0800
Subject: [PATCH] 422 子 【内政】命格系统 / 【内政】命格系统-客户端
---
Main/System/Hero/HeroManager.cs | 233 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 189 insertions(+), 44 deletions(-)
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index d54640f..7692d1b 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -1,81 +1,161 @@
using System.Collections.Generic;
using UnityEngine;
using System;
+using System.Linq;
public class HeroManager : GameSystemManager<HeroManager>
{
+ //姝﹀皢鍜屽浘閴寸殑鍏崇郴
+ //鍚屼竴涓灏嗗浘閴达紝鍙兘鏈夊涓灏嗭紙鐗╁搧锛夋暟鎹紝鎴栬�呮病鏈夋灏嗭紝浣嗘槸鏈夊浘閴翠俊鎭�
+ //鍒濆鍒涘缓锛�0725锛夛紝鍚庣画璺熼殢鑳屽寘浜嬩欢澧炲姞鍒犻櫎 key = guid
protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
- public Action<HeroInfo> onNewHeroEvent;
-
public Action<HeroInfo> onHeroChangeEvent;
+
+ public Action<int> onHeroDeleteEvent;
public override void Init()
{
base.Init();
- // 娉ㄥ唽涓�鐐逛簨浠�
- PackManager.Instance.refrechPackEvent += refrechPackEvent;
+ PackManager.Instance.ChangeItemEvent += ChangeHero;
+ PackManager.Instance.DeleteItemEvent += DeleteHero;
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize;
}
public override void Release()
{
base.Release();
- PackManager.Instance.refrechPackEvent -= refrechPackEvent;
+ PackManager.Instance.ChangeItemEvent -= ChangeHero;
+ PackManager.Instance.DeleteItemEvent -= DeleteHero;
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitialize;
}
- public override void RequestNessaryData()
+ void OnBeforePlayerDataInitialize()
{
- base.RequestNessaryData();
-
+ heroInfoDict.Clear();
}
- public void refrechPackEvent(PackType packType)
+
+ // isCreate bool锛歵rue浠h〃鍒涘缓 false 鍒锋柊瑙﹀彂
+ void ChangeHero(PackType packType, string guid, bool isCreate)
{
if (packType == PackType.Hero)
{
- // bool change = false;
- bool isNew = false;
- // 濡傛灉鏈夊垎鎵规鍒濆鍖栧彲鑳借繕瑕侀夯鐑︿竴鐐�?鍏堢湅鐪�
- bool isInit = heroInfoDict.Count >= 0;
-
- SinglePack heroPack = PackManager.Instance.GetSinglePack(packType);
-
- Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
-
- foreach (ItemModel hero in heroes.Values)
+ HeroInfo heroInfo = null;
+ if (!heroInfoDict.TryGetValue(guid, out heroInfo))
{
- HeroInfo heroInfo = null;
- if (!heroInfoDict.TryGetValue(hero.guid, out heroInfo))
- {
- heroInfo = new HeroInfo(hero);
- heroInfoDict.Add(hero.guid, heroInfo);
- if (!isInit)
- {
- isNew = true;
- onNewHeroEvent?.Invoke(heroInfo);
- }
- }
- else
- {
- heroInfo.UpdateHero(hero);
- // 涔熸湁鍙兘涓嶆槸change
- // change = true;
- // onHeroChangeEvent?.Invoke(heroInfo);
- }
+ heroInfo = new HeroInfo(PackManager.Instance.GetItemByGuid(guid));
+ heroInfoDict.Add(guid, heroInfo);
}
+ else
+ {
+ heroInfo.UpdateHero(PackManager.Instance.GetItemByGuid(guid));
+ }
+
+ onHeroChangeEvent?.Invoke(heroInfo);
}
+ }
+
+ void DeleteHero(PackType packType, string guid, int itemID, int index, int clearType)
+ {
+ if (packType == PackType.Hero)
+ {
+ HeroInfo heroInfo = null;
+ heroInfoDict.TryGetValue(guid, out heroInfo);
+
+ heroInfoDict.Remove(guid);
+
+ onHeroDeleteEvent?.Invoke(itemID);
+ }
+ }
+
+ public HeroInfo GetHero(string guid)
+ {
+ if (heroInfoDict == null || guid == null)
+ {
+ Debug.LogError("HeroManager GetHero guid is null");
+ return null;
+ }
+ if (!heroInfoDict.ContainsKey(guid))
+ return null;
+ return heroInfoDict[guid];
+ }
+
+ public List<HeroInfo> GetHeroList()
+ {
+ return heroInfoDict.Values.ToList();
+ }
+
+ public List<string> GetHeroGuidList()
+ {
+ return heroInfoDict.Keys.ToList();
+ }
+
+ /// 鍙傛暟锛� 鑱屼笟锛屽浗瀹讹紝浼ゅ绫诲瀷锛�6澶ф垬鏂楀睘鎬э紝鐗规畩灞炴��
+ public List<string> GetHeroGuidList(List<int> selectList = null)
+ {
+ if (selectList.IsNullOrEmpty())
+ return heroInfoDict.Keys.ToList();
+
+ int job = selectList[0];
+ int country = selectList[1];
+ int hurtType = selectList[2];
+ int fightAttrType = selectList[3];
+ int specialAttrType = selectList[4];
+
+ List<string> retGuidList = new List<string>();
+ foreach (string guid in heroInfoDict.Keys)
+ {
+ HeroInfo heroInfo = heroInfoDict[guid];
+
+ //0浠h〃鍏ㄩ儴, 鍚岀骇鍒槸鍙閫夛紝涓嶅悓绾у埆涓轰笖鐨勫叧绯�
+ bool isMatch = true;
+ if (job != 0)
+ {
+ isMatch = isMatch && (job & (1 << heroInfo.heroConfig.Class)) > 0;
+ }
+ if (country != 0)
+ {
+ isMatch = isMatch && (country & (1 << heroInfo.heroConfig.Country)) > 0;
+ }
+ if (hurtType != 0)
+ {
+ isMatch = isMatch && (hurtType & (1 << heroInfo.heroConfig.HurtType)) > 0;
+ }
+ if (fightAttrType != 0)
+ {
+ isMatch = isMatch && (fightAttrType & (1 << heroInfo.heroConfig.Specialty)) > 0;
+ }
+ if (specialAttrType != 0)
+ {
+ bool isMatch2 = false;
+ for (int i = 0; i < heroInfo.heroConfig.Specialty2.Length; i++)
+ {
+ isMatch2 = (specialAttrType & (1 << heroInfo.heroConfig.Specialty2[i])) > 0;
+ if (isMatch2)
+ break;
+ }
+ isMatch = isMatch && isMatch2;
+ }
+ if (isMatch)
+ {
+ retGuidList.Add(guid);
+ }
+
+ }
+ return retGuidList;
}
public List<HeroInfo> GetPowerfulHeroList()
{
List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values);
- heroList.Sort((a, b) =>
+ heroList.Sort((a, b) =>
{
- int power1 = a.CalculatePower();
- int power2 = b.CalculatePower();
+ long power1 = a.CalculateFightPower(false);
+ long power2 = b.CalculateFightPower(false);
if (power1 == power2)
{
@@ -95,9 +175,74 @@
return retList;
}
- // public override bool IsNessaryDataReady()
- // {
- // return true;
- // }
+
+ public int GetHeroCount()
+ {
+ return heroInfoDict.Count;
+ }
+
+ public bool HasHero(int heroID)
+ {
+ return PackManager.Instance.GetSinglePack(PackType.Hero).HasItem(heroID);
+ }
+
+ public int GetHeroCountByID(int heroID)
+ {
+ return (int)PackManager.Instance.GetSinglePack(PackType.Hero).GetCountById(heroID);
+ }
+
+ //鑾峰緱鐢熸晥鐨勬灏嗘暟閲�
+ public int GetAttrActiveHeroCount()
+ {
+ int count = 0;
+ foreach (HeroInfo heroInfo in heroInfoDict.Values)
+ {
+ if (heroInfo.isAttrActive)
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ //鑾峰緱鏈敓鏁堢殑姝﹀皢鏁伴噺
+ public int GetNotActiveHeroCount()
+ {
+ int count = 0;
+ foreach (HeroInfo heroInfo in heroInfoDict.Values)
+ {
+ if (!heroInfo.isAttrActive)
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ //鑾峰緱鎸囧畾ID涓斿睘鎬х敓鏁堢殑姝﹀皢
+ public HeroInfo GetHeroByID(int heroID)
+ {
+ foreach (HeroInfo heroInfo in heroInfoDict.Values)
+ {
+ if (heroInfo.heroId == heroID && heroInfo.isAttrActive)
+ {
+ return heroInfo;
+ }
+ }
+ return null;
+ }
+
+ public List<HeroInfo> GetHeroListByID(int heroID)
+ {
+ List<HeroInfo> heroList = new List<HeroInfo>();
+ foreach (HeroInfo heroInfo in heroInfoDict.Values)
+ {
+ if (heroInfo.heroId == heroID)
+ {
+ heroList.Add(heroInfo);
+ }
+ }
+ return heroList;
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0