少年修仙传客户端代码仓库
client_linchunjie
2018-09-25 78bfe524ea4776c47f6314e56e97f39970b00fce
System/Dogz/DogzModel.cs
@@ -14,6 +14,7 @@
        public override void Init()
        {
            ParseConfig();
            SetDogzAndEquipPlaceRedKey();
        }
        public void OnBeforePlayerDataInitialize()
@@ -37,6 +38,9 @@
            SetDogzEquipInfo();
            playerPack.RefreshItemCountAct -= RefreshDogzEquipInfo;
            playerPack.RefreshItemCountAct += RefreshDogzEquipInfo;
            UpdateDogzAssistRed();
            UpdateDogzEquipPlaceRed();
            UpdateAssistNumRed();
        }
        public override void UnInit()
@@ -104,15 +108,15 @@
            switch (_index)
            {
                case 0:
                    return "兽角";
                    return Language.Get("DogzEquip1");
                case 1:
                    return "魔眼";
                    return Language.Get("DogzEquip2");
                case 2:
                    return "獠牙";
                    return Language.Get("DogzEquip3");
                case 3:
                    return "兽爪";
                    return Language.Get("DogzEquip4");
                case 4:
                    return "鳞甲";
                    return Language.Get("DogzEquip5");
                default:
                    return string.Empty;
            }
@@ -124,15 +128,17 @@
            {
                case 0:
                case 1:
                    return "白色";
                    return Language.Get("DogzWhite");
                case 2:
                    return "蓝色";
                    return Language.Get("DogzBlue");
                case 3:
                    return "紫色";
                    return Language.Get("DogzPurple");
                case 4:
                    return "橙色";
                    return Language.Get("DogzOrange");
                case 5:
                    return "红色";
                    return Language.Get("DogzRed");
                case 6:
                    return Language.Get("DogzPink");
                default:
                    return string.Empty;
            }
@@ -155,13 +161,23 @@
            }
        }
        public event Action<int> OpenFuncEvent;
        public void OpenDogzFuncEvent(int functionOrder)
        public event Action<int,int> OpenFuncEvent;
        public void OpenDogzFuncEvent(int functionOrder,int equipIndex)
        {
            if(OpenFuncEvent != null)
            {
                OpenFuncEvent(functionOrder);
                OpenFuncEvent(functionOrder,equipIndex);
            }
        }
        public bool CheckIsAddAssistNum()
        {
            var _itemConfig = Config.Instance.Get<ItemConfig>(AddAssistItem);
            if(GetAssistItemCnt() <= playerPack.GetItemCountByID(PackType.rptItem, AddAssistItem))
            {
                return true;
            }
            return false;
        }
        #region 协议
@@ -175,6 +191,8 @@
            {
                UpdateAssistDogzEvent();
            }
            UpdateDogzAssistRed();
            UpdateDogzEquipPlaceRed();
        }
        public event Action UpdateAssistDogzEvent;
@@ -194,6 +212,9 @@
            {
                UpdateAssistDogzEvent();
            }
            UpdateDogzAssistRed();
            UpdateDogzEquipPlaceRed();
        }
        public int GetAssistDogzCount()
@@ -218,7 +239,7 @@
        public void SetDogzEquipInfo()
        {
            m_DogzEquipDict = new Dictionary<int, List<ItemModel>>();
            m_DogzEquipDict.Clear();
            SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptDogzEquip);
            if (singlePack == null) return;
@@ -244,63 +265,75 @@
        public Action<int> RefreshDogzEquipAct;
        private void RefreshDogzEquipInfo(PackType type, int index, int id)
        {
            if (type != PackType.rptDogzEquip) return;
            ItemModel itemModel = playerPack.GetItemModelByIndex(type, index);
            int dogzId = GetDogzIDByIndex(index);
            List<ItemModel> modellist = GetDogzEquips(dogzId);
            if(modellist != null)
            if(type == PackType.rptItem && id == AddAssistItem)
            {
                if (itemModel != null)
                UpdateAssistNumRed();
            }
            else if(type == PackType.rptDogzItem)
            {
                UpdateDogzAssistRed();
                UpdateDogzEquipPlaceRed();
            }
            else if(type == PackType.rptDogzEquip)
            {
                ItemModel itemModel = playerPack.GetItemModelByIndex(type, index);
                int dogzId = GetDogzIDByIndex(index);
                List<ItemModel> modellist = GetDogzEquips(dogzId);
                if (modellist != null)
                {
                    bool isAdd = true;
                    for (int i = 0; i < modellist.Count; i++)
                    if (itemModel != null)
                    {
                        if (modellist[i].itemInfo.ItemPlace == index)
                        bool isAdd = true;
                        for (int i = 0; i < modellist.Count; i++)
                        {
                            isAdd = false;
                            modellist[i] = itemModel;
                            break;
                            if (modellist[i].itemInfo.ItemPlace == index)
                            {
                                isAdd = false;
                                modellist[i] = itemModel;
                                break;
                            }
                        }
                        if (isAdd)
                        {
                            modellist.Add(itemModel);
                        }
                    }
                    if(isAdd)
                    else
                    {
                       modellist.Add(itemModel);
                        for (int i = 0; i < modellist.Count; i++)
                        {
                            if (modellist[i].itemInfo.ItemPlace == index)
                            {
                                modellist.RemoveAt(i);
                                break;
                            }
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < modellist.Count; i++)
                    if (itemModel != null)
                    {
                        if (modellist[i].itemInfo.ItemPlace == index)
                        {
                            modellist.RemoveAt(i);
                            break;
                        }
                        List<ItemModel> equipDatas = new List<ItemModel>();
                        equipDatas.Add(itemModel);
                        m_DogzEquipDict.Add(dogzId, equipDatas);
                    }
                }
            }
            else
            {
                if(itemModel != null)
                {
                    List<ItemModel> equipDatas = new List<ItemModel>();
                    equipDatas.Add(itemModel);
                    m_DogzEquipDict.Add(dogzId,equipDatas);
                }
            }
            if(RefreshDogzEquipAct != null)
            {
                RefreshDogzEquipAct(dogzId);
                if (RefreshDogzEquipAct != null)
                {
                    RefreshDogzEquipAct(dogzId);
                }
                UpdateDogzAssistRed();
                UpdateDogzEquipPlaceRed();
            }
        }
        /// <summary>
        /// 获得神兽穿戴的装备数据
        /// </summary>
        public Dictionary<int, List<ItemModel>> m_DogzEquipDict { get; private set; }
        private Dictionary<int, List<ItemModel>> m_DogzEquipDict = new Dictionary<int, List<ItemModel>>();
        public List<ItemModel> GetDogzEquips(int _dogzId)
        {
@@ -510,13 +543,13 @@
        }
        public List<ItemModel> selectEquipPlacelist { get; private set; }
        public List<ItemModel> GetDogzItemListByIndex(int index)
        public List<ItemModel> GetDogzItemListByIndex(int dogzId,int index)
        {
            SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptDogzItem);
            selectEquipPlacelist.Clear();
            if (singlePack == null) return selectEquipPlacelist;
            var _itemColor = GetDogzEquipLimitByIndex(presentSelectDogz, index);
            var _itemColor = GetDogzEquipLimitByIndex(dogzId, index);
            var _equipPlace = GetDogzEquipPlaceByIndex(index);
            Dictionary<int, ItemModel> pairs = singlePack.GetPackModelIndexDict();
            foreach (var value in pairs.Values)
@@ -547,41 +580,276 @@
        }
        #endregion
        #region 装备详细信息
        public DogzEquipData viewDetailData { get; private set; }
        public bool viewDetailCompare { get; private set; }
        public void ViewDetail(int _itemId, bool compare = false)
        {
            //viewDetailData = new DogzEquipData(_itemId);
            //viewDetailCompare = compare;
            //if (!WindowCenter.Instance.CheckOpen<DogzDetailsWin>())
            //{
            //    WindowCenter.Instance.Open<DogzDetailsWin>();
            //}
        }
        public int DogzEquipScore(DogzEquipData data)
        {
            return 0;
        }
        #endregion
        #region 默认选择逻辑处理
        public void SetDefaultSelectDogz()
        {
            var configs = Config.Instance.GetAllValues<DogzConfig>();
            presentSelectDogz = configs[0].ID;
            foreach (var key in dogzAssistStateDict.Keys)
            foreach (var key in m_DogzEquipLimit.Keys)
            {
                if(dogzAssistStateDict[key] == 1)
                Redpoint redpoint = GetSingleDogzRedpointById(key);
                if (redpoint.state == RedPointState.Simple)
                {
                    if(presentSelectDogz < key)
                    presentSelectDogz = key;
                    break;
                }
            }
        }
        #endregion
        #region 红点逻辑处理
        public const int MAINDOGZ_REDKEY = 112;
        public const int DOGZFUNC_REDKEY = 11201;
        public const int ADDASSISTDOGZ_REDKEY = 1120100002;
        public Redpoint mainDogzRedpoint = new Redpoint(MainRedDot.RedPoint_key, MAINDOGZ_REDKEY);
        public Redpoint dogzFuncRedpoint = new Redpoint(MAINDOGZ_REDKEY,DOGZFUNC_REDKEY);
        public Redpoint addAssistDogzRedpoint = new Redpoint(DOGZFUNC_REDKEY,ADDASSISTDOGZ_REDKEY);
        private Dictionary<int, Redpoint> singleDogzRedDict = new Dictionary<int, Redpoint>();
        private Dictionary<int, Redpoint> dogzAssistRedDict = new Dictionary<int, Redpoint>();
        private Dictionary<int, Dictionary<int, Redpoint>> dogzEquipPlaceRedDict = new Dictionary<int, Dictionary<int, Redpoint>>();
        public void SetDogzAndEquipPlaceRedKey()
        {
            singleDogzRedDict.Clear();
            dogzEquipPlaceRedDict.Clear();
            dogzAssistRedDict.Clear();
            int i = 0;
            foreach(var dogzId in m_DogzEquipLimit.Keys)
            {
                i += 1;
                int dogzRedKey = DOGZFUNC_REDKEY * 100 + i;
                Redpoint dogzRedPoint = new Redpoint(DOGZFUNC_REDKEY,dogzRedKey);
                singleDogzRedDict.Add(dogzId, dogzRedPoint);
                int dogzAssistRedKey = dogzRedKey * 100 + i;
                Redpoint dogzAssistRedPoint = new Redpoint(dogzRedKey, dogzAssistRedKey);
                dogzAssistRedDict.Add(dogzId,dogzAssistRedPoint);
                Dictionary<int, Redpoint> equipPlaceRedDict = new Dictionary<int, Redpoint>();
                dogzEquipPlaceRedDict.Add(dogzId,equipPlaceRedDict);
                int equipPlaceNum = m_DogzEquipLimit[dogzId].Count;
                for (int j = 0; j < equipPlaceNum; j++)
                {
                    int equipPlaceRedKey = dogzRedKey * 10 + j;
                    Redpoint equipPlaceRedpoint = new Redpoint(dogzRedKey,equipPlaceRedKey);
                    equipPlaceRedDict.Add(j, equipPlaceRedpoint);
                }
            }
        }
        public Redpoint GetSingleDogzRedpointById(int dogzId)
        {
            Redpoint redpoint = null;
            singleDogzRedDict.TryGetValue(dogzId, out redpoint);
            return redpoint;
        }
        public Redpoint GetDogzAssistRedpointById(int dogzId)
        {
            Redpoint redpoint = null;
            dogzAssistRedDict.TryGetValue(dogzId,out redpoint);
            return redpoint;
        }
        public Redpoint GetDogzEquipPlaceRedpointById(int dogzId,int index)
        {
            Redpoint redpoint = null;
            if(dogzEquipPlaceRedDict.ContainsKey(dogzId))
            {
                dogzEquipPlaceRedDict[dogzId].TryGetValue(index, out redpoint);
            }
            return redpoint;
        }
        public void UpdateDogzAssistRed()
        {
            foreach(var value in dogzAssistRedDict.Values)
            {
                value.state = RedPointState.None;
            }
            bool isMaxAssistNum = GetAssistDogzCount() >= DogzAssistDefaultCnt ? true : false;
            if(!isMaxAssistNum)
            {
                int maxDogzId = 0;
                foreach(var dogzId in m_DogzEquipLimit.Keys)
                {
                    var equips = GetDogzEquips(dogzId);
                    int equipNum = equips == null ? 0 : equips.Count;
                    if(equipNum >= 5 && maxDogzId < dogzId
                        && !TryGetAssistDogzState(dogzId))
                    {
                        presentSelectDogz = key;
                        maxDogzId = dogzId;
                    }
                }
                if(maxDogzId > 0)
                {
                    Redpoint assistRedpoint = GetDogzAssistRedpointById(maxDogzId);
                    if(assistRedpoint.state == RedPointState.None)
                    {
                        assistRedpoint.state = RedPointState.Simple;
                    }
                }
            }
            else
            {
                foreach (var dogzId in m_DogzEquipLimit.Keys)
                {
                    var equips = GetDogzEquips(dogzId);
                    int equipNum = equips == null ? 0 : equips.Count;
                    if(!TryGetAssistDogzState(dogzId) && equipNum == 5)
                    {
                        Redpoint assistRedpoint = GetDogzAssistRedpointById(dogzId);
                        if (assistRedpoint.state == RedPointState.None)
                        {
                            assistRedpoint.state = RedPointState.Simple;
                        }
                        break;
                    }
                }
            }
        }
        public void UpdateDogzEquipPlaceRed()
        {
            foreach(var value in dogzEquipPlaceRedDict.Values)
            {
                foreach(var value2 in value.Values)
                {
                    value2.state = RedPointState.None;
                }
            }
            foreach(var value in dogzAssistRedDict.Values)
            {
                if(value.state == RedPointState.Simple)
                {
                    return;
                }
            }
            bool isMaxAssistNum = GetAssistDogzCount() >= DogzAssistDefaultCnt ? true : false;
            if (!isMaxAssistNum)
            {
                int maxEquipNum = 0;
                int spaceDogzId = 0;
                foreach (var dogzId in m_DogzEquipLimit.Keys)
                {
                    var equips = GetDogzEquips(dogzId);
                    int equipNum = equips == null ? 0 : equips.Count;
                    if (equipNum < 5)
                    {
                        if (spaceDogzId == 0)
                        {
                            if (maxEquipNum <= equipNum)
                            {
                                maxEquipNum = equipNum;
                                spaceDogzId = dogzId;
                            }
                        }
                        else
                        {
                            if (maxEquipNum < equipNum)
                            {
                                maxEquipNum = equipNum;
                                spaceDogzId = dogzId;
                            }
                        }
                    }
                }
                if(spaceDogzId != 0)
                {
                    for(int i = 0; i < 5; i++)
                    {
                        ItemModel _data;
                        bool _equiped = TryGetDogzEquip(spaceDogzId, i + 101, out _data);
                        if(!_equiped)
                        {
                            GetDogzItemListByIndex(spaceDogzId,i);
                            if (selectEquipPlacelist.Count > 0)
                            {
                                Redpoint equipPlaceRedpoint = GetDogzEquipPlaceRedpointById(spaceDogzId,i);
                                if(equipPlaceRedpoint.state == RedPointState.None)
                                {
                                    equipPlaceRedpoint.state = RedPointState.Simple;
                                }
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                int minAlreadyAssistId = 0;
                foreach (var dogzId in m_DogzEquipLimit.Keys)
                {
                    if(TryGetAssistDogzState(dogzId)
                        && minAlreadyAssistId != 0
                        && minAlreadyAssistId < dogzId)
                    {
                        minAlreadyAssistId = dogzId;
                    }
                }
                foreach (var dogzId in m_DogzEquipLimit.Keys)
                {
                    var equips = GetDogzEquips(dogzId);
                    int equipNum = equips == null ? 0 : equips.Count;
                    bool isBetterDogz = true;
                    if(!TryGetAssistDogzState(dogzId) && dogzId > minAlreadyAssistId && equipNum < 5)
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            ItemModel _data;
                            bool _equiped = TryGetDogzEquip(dogzId, i + 101, out _data);
                            if (!_equiped)
                            {
                                GetDogzItemListByIndex(dogzId,i);
                                if (selectEquipPlacelist.Count < 1)
                                {
                                    isBetterDogz = false;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        isBetterDogz = false;
                    }
                    if(isBetterDogz)
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            ItemModel _data;
                            bool _equiped = TryGetDogzEquip(dogzId, i + 101, out _data);
                            if (!_equiped)
                            {
                                Redpoint equipPlaceRedpoint = GetDogzEquipPlaceRedpointById(dogzId, i);
                                if (equipPlaceRedpoint.state == RedPointState.None)
                                {
                                    equipPlaceRedpoint.state = RedPointState.Simple;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                }
            }
        }
        public void UpdateAssistNumRed()
        {
          if(CheckIsAddAssistNum())
           {
                if(addAssistDogzRedpoint.state == RedPointState.None)
                {
                    addAssistDogzRedpoint.state = RedPointState.Simple;
                }
            }
          else
            {
                addAssistDogzRedpoint.state = RedPointState.None;
            }
        }
        #endregion