少年修仙传客户端代码仓库
client_linchunjie
2018-08-18 f4f07847775c12b338d8bccedbbabc067dc1ae2c
System/Treasure/TreasureData.cs
@@ -17,13 +17,6 @@
    {
        public int id { get; private set; }
        int m_Level;
        public int level
        {
            get { return m_Level; }
            set { m_Level = value; }
        }
        int m_Stage;
        public int stage
        {
@@ -52,7 +45,6 @@
            set { m_State = value; }
        }
        #region 旧数据
        int m_Progress = 0;
        public int progress
        {
@@ -86,11 +78,6 @@
            }
        }
        public int unLockFunc
        {
            get; private set;
        }
        public int unLockPrivilege
        {
            get; private set;
@@ -115,8 +102,6 @@
        public List<int> achievements = new List<int>();
        public Dictionary<int, AchievementGroup> achievementGroups = new Dictionary<int, AchievementGroup>();
        public Item[] needItems { get; private set; }
        public Redpoint skillLevelUpRedpoint { get; private set; }
        public Redpoint achievementRedpoint { get; private set; }
@@ -188,29 +173,6 @@
                        tempPotentials.Add(new TreasurePotential(skillId, 0));
                    }
                }
            }
            if (!string.IsNullOrEmpty(config.NeedItem))
            {
                try
                {
                    var stringSet = config.NeedItem.Split('|');
                    needItems = new Item[stringSet.Length];
                    for (int i = 0; i < needItems.Length; i++)
                    {
                        var itemStrings = stringSet[i].Split('_');
                        needItems[i] = new Item(int.Parse(itemStrings[0]), int.Parse(itemStrings[1]));
                    }
                }
                catch (Exception ex)
                {
                    Debug.Log(ex.StackTrace);
                }
            }
            else
            {
                needItems = null;
            }
        }
@@ -269,40 +231,11 @@
            return configA.ReOrder < configB.ReOrder ? -1 : 1;
        }
        #endregion
        public TreasureSpecialData specialData { get; private set; }
        public List<TreasureStage> treasureStages = new List<TreasureStage>();
        public void UpdateTreasureStage(TreasureUpConfig _cfg)
        {
            TreasureStage _stage;
            if (_cfg.UnLockFuncID != 0)
            {
                _stage = new TreasureStage(_cfg.UnLockFuncID);
                unLockFunc = _stage.func;
            }
            else if (_cfg.Privilege != 0)
            {
                _stage = new TreasureStage(_cfg.Privilege, TreasureStageUnlock.Privilege);
                specialData = _stage.specialData;
                unLockPrivilege = _stage.privilege;
            }
            else if (_cfg.UnLockSkill != null && _cfg.UnLockSkill.Length > 1)
            {
                _stage = new TreasureStage(_cfg.UnLockSkill);
            }
            else if (!_cfg.AddAttr.Equals(string.Empty))
            {
                _stage = new TreasureStage(_cfg.AddAttr);
            }
            else
            {
                _stage = new TreasureStage();
            }
            _stage.exp = _cfg.NeedExp;
            _stage.stage = _cfg.LV;
            _stage.limitLevel = _cfg.LVLimit;
            TreasureStage _stage = new TreasureStage(_cfg);
            treasureStages.Add(_stage);
        }
@@ -311,18 +244,21 @@
            stage = _lv;
            exp = _exp;
            hasClickChallenge = _hasClickChallenge;
            if ((this is HumanTreasure) && IsMaxStage())
            if ((this is HumanTreasure))
            {
                (this as HumanTreasure).humanState = HumanTreasureState.Potential;
                (this as HumanTreasure).UpdateTreasureState();
            }
        }
        public bool IsMaxStage()
        public bool IsHighestStage
        {
            return treasureStages.FindIndex((x) =>
            get
            {
                return x.stage >= stage + 1;
            }) == -1;
                return treasureStages.FindIndex((x) =>
                {
                    return x.stage >= stage + 1;
                }) == -1;
            }
        }
        public bool IsUnlockStage(TreasureStageUnlock _type)
@@ -362,24 +298,11 @@
            {
                return m_State;
            }
            set
            private set
            {
                m_State = value;
                if (value == HumanTreasureState.CastSoul)
                {
                    if (IsMaxStage())
                    {
                        m_State = HumanTreasureState.Potential;
                    }
                }
                ModelCenter.Instance.GetModel<TreasureModel>().HumanTreasureStateChange(base.id);
            }
        }
        public HumanTreasure(int _id)
            : base(_id)
        {
        }
        public HumanTreasure(int _id, int[] _potentialIds, Redpoint _skillLevelUpRedpoint, Redpoint _achievementPoint
@@ -387,6 +310,28 @@
            : base(_id, _potentialIds, _skillLevelUpRedpoint, _achievementPoint)
        {
            castSoulRedpoint = _castSoulPoint;
        }
        public void UpdateTreasureState()
        {
            if (state == TreasureState.Locked)
            {
                humanState = HumanTreasureState.Locked;
                return;
            }
            if (state == TreasureState.Collecting)
            {
                humanState = HumanTreasureState.Challenge;
                return;
            }
            if (IsHighestStage && FuncOpen.Instance.IsFuncOpen(82))
            {
                humanState = HumanTreasureState.Potential;
            }
            else
            {
                humanState = HumanTreasureState.CastSoul;
            }
        }
        public Redpoint castSoulRedpoint { get; private set; }
@@ -600,63 +545,71 @@
        public Dictionary<int, int> propertyDict { get; private set; }
        public Dictionary<int, int> skillDict { get; private set; }
        public int func { get; private set; }
        public int privilege { get; private set; }
        public Item item { get; private set; }
        public int treasure { get; private set; }
        public int exp { get; set; }
        public TreasureSpecialData specialData { get; private set; }
        public int stateSfxId { get; private set; }
        public const int selectedSfxId = 5144;
        public string sfxGotState { get; private set; }
        public string sfxUnGotState { get; private set; }
        public int limitLevel { get; set; }
        public TreasureStage()
        public TreasureStage(TreasureUpConfig _config)
        {
            unlockType = TreasureStageUnlock.None;
        }
        public TreasureStage(int _value, TreasureStageUnlock _type = TreasureStageUnlock.Func)
        {
            unlockType = _type;
            func = _type == TreasureStageUnlock.Func ? _value : 0;
            privilege = _type == TreasureStageUnlock.Privilege ? _value : 0;
            stateSfxId = 5141;
            sfxGotState = "Effect_FaBao_Icon_JiNeng_01";
            sfxUnGotState = "Effect_FaBao_Icon_JiNeng_02";
            //stateSfxId = _type == TreasureStageUnlock.Func ? 5140 : 5143;
            //sfxGotState = _type == TreasureStageUnlock.Func ? "Effect_FaBao_Icon_GongNeng_01" : "Effect_FaBao_Icon_TeQuan_02";
            //sfxUnGotState = _type == TreasureStageUnlock.Func ? "Effect_FaBao_Icon_GongNeng" : "Effect_FaBao_Icon_TeQuan";
            if (_type == TreasureStageUnlock.Privilege)
            if (_config.UnLockFuncID != 0)
            {
                SetSpecial();
                unlockType = TreasureStageUnlock.Func;
                func = _config.UnLockFuncID;
            }
        }
        public TreasureStage(string _property)
        {
            unlockType = TreasureStageUnlock.Property;
            propertyDict = ConfigParse.GetDic<int, int>(_property);
            stateSfxId = propertyDict.ContainsKey(6) ? 5142 : 5139;
            sfxGotState = propertyDict.ContainsKey(6) ? "Effect_FaBao_Icon_ShengMing" : "Effect_FaBao_Icon_GongJi";
            sfxUnGotState = propertyDict.ContainsKey(6) ? "Effect_FaBao_Icon_ShengMing" : "Effect_FaBao_Icon_GongJi";
        }
        public TreasureStage(int[] _skills)
        {
            unlockType = TreasureStageUnlock.Skill;
            stateSfxId = 5141;
            sfxGotState = "Effect_FaBao_Icon_JiNeng_01";
            sfxUnGotState = "Effect_FaBao_Icon_JiNeng_02";
            skillDict = new Dictionary<int, int>();
            for (int i = 0; i < _skills.Length; i++)
            else if (_config.UnLockSkill != null && _config.UnLockSkill.Length > 1)
            {
                skillDict.Add(i + 1, _skills[i]);
                unlockType = TreasureStageUnlock.Skill;
                skillDict = new Dictionary<int, int>();
                for (int i = 0; i < _config.UnLockSkill.Length; i++)
                {
                    skillDict.Add(i + 1, _config.UnLockSkill[i]);
                }
            }
        }
            else if (!string.IsNullOrEmpty(_config.AddAttr))
            {
                unlockType = TreasureStageUnlock.Property;
                propertyDict = ConfigParse.GetDic<int, int>(_config.AddAttr);
            }
            else if (_config.ActiveMWID != 0)
            {
                unlockType = TreasureStageUnlock.Treasure;
                treasure = _config.ActiveMWID;
            }
            else if (!string.IsNullOrEmpty(_config.ItemAward))
            {
                unlockType = TreasureStageUnlock.Item;
                var itemArray = LitJson.JsonMapper.ToObject<int[]>(_config.ItemAward);
                if (itemArray != null && itemArray.Length > 0)
                {
                    item = new Item()
                    {
                        id = itemArray[0],
                        count = itemArray.Length > 1 ? itemArray[1] : 1,
                        bind = itemArray.Length > 2 ? (itemArray[2] == 1) : false,
                    };
                }
            }
        public void SetSpecial()
        {
            var _priviligeCfg = ConfigManager.Instance.GetTemplate<TreasurePrivilegeConfig>(privilege);
            specialData = new TreasureSpecialData((TreasurePrivilege)_priviligeCfg.PrivilegeID);
            exp = _config.NeedExp;
            stage = _config.LV;
            switch (unlockType)
            {
                case TreasureStageUnlock.Property:
                    stateSfxId = propertyDict.ContainsKey(6) ? 5142 : 5139;
                    sfxGotState = propertyDict.ContainsKey(6) ? "Effect_FaBao_Icon_ShengMing" : "Effect_FaBao_Icon_GongJi";
                    sfxUnGotState = propertyDict.ContainsKey(6) ? "Effect_FaBao_Icon_ShengMing" : "Effect_FaBao_Icon_GongJi";
                    break;
                default:
                    stateSfxId = 5141;
                    sfxGotState = "Effect_FaBao_Icon_JiNeng_01";
                    sfxUnGotState = "Effect_FaBao_Icon_JiNeng_02";
                    break;
            }
        }
        public int GetSkill(int _job)
@@ -682,8 +635,6 @@
                        return _skillCfg.FightPower;
                    }
                    break;
                case TreasureStageUnlock.Privilege:
                    return specialData.GetFightPower();
            }
            return 0;
        }
@@ -695,297 +646,8 @@
        Property,
        Skill,
        Func,
        Privilege,
    }
    public enum TreasurePrivilege
    {
        Property = 1,
        DemonJarAtk = 2,
        StrengthenAdd = 3,
        RuneBreakExpAdd = 4,
        MountAtk = 5,
        PetHp = 6,
        Boss = 7,
        Wing = 8,
        Suit = 9,
        Wash = 10,
        Sign = 11,
    }
    public enum TreasurePrivilegeState
    {
        Doing = 0,
        Reward = 1,
        Complete = 2
    }
    public class TreasureSpecialData
    {
        public TreasurePrivilege type { get; private set; }
        public int progress { get; private set; }
        public int totalProgress { get; private set; }
        public int effectValue { get; private set; }
        public List<AwardItem> items { get; private set; }
        public Dictionary<int, int> propertyDict { get; private set; }
        public Redpoint privilegeRedpoint { get; private set; }
        private TreasurePrivilegeState m_State = TreasurePrivilegeState.Doing;
        public TreasurePrivilegeState state
        {
            get { return m_State; }
            set { m_State = value; }
        }
        public int presentFinishCount { get; set; }
        public int presentGetCount { get; set; }
        public bool itemGet { get; set; }
        public TreasureSpecialData(TreasurePrivilege _type)
        {
            type = _type;
            var config = ConfigManager.Instance.GetTemplate<TreasurePrivilegeConfig>((int)_type);
            progress = Mathf.Max(1, config.singleValue);
            totalProgress = config.maxValue;
            var _effectValue = 0;
            int.TryParse(config.EffectValue, out _effectValue);
            effectValue = _effectValue;
            if (!string.IsNullOrEmpty(config.attr))
            {
                var propertyJson = LitJson.JsonMapper.ToObject(config.attr);
                propertyDict = new Dictionary<int, int>();
                foreach (var _key in propertyJson.Keys)
                {
                    var _property = int.Parse(_key);
                    var _value = int.Parse(propertyJson[_key].ToJson());
                    propertyDict.Add(_property, _value);
                }
            }
            if (!string.IsNullOrEmpty(config.itemAward))
            {
                var itemArray = LitJson.JsonMapper.ToObject<int[][]>(config.itemAward);
                if (itemArray != null && itemArray.Length > 0)
                {
                    items = new List<AwardItem>();
                    for (int i = 0; i < itemArray.Length; i++)
                    {
                        var _array = itemArray[i];
                        items.Add(new AwardItem()
                        {
                            isBind = _array[2],
                            item = new Item()
                            {
                                id = _array[0],
                                count = _array[1],
                            },
                        });
                    }
                }
            }
            if (type == TreasurePrivilege.PetHp)
            {
                var petCount = ConfigManager.Instance.GetAllValues<PetInfoConfig>().Count;
                totalProgress = petCount;
            }
            else if (type == TreasurePrivilege.MountAtk)
            {
                var mountConfigs = ConfigManager.Instance.GetAllValues<HorseConfig>();
                var maxlv = 0;
                for (int i = 0; i < mountConfigs.Count; i++)
                {
                    maxlv += mountConfigs[i].MaxLV;
                }
                totalProgress = maxlv;
            }
            else if (type == TreasurePrivilege.StrengthenAdd)
            {
                var configs = ConfigManager.Instance.GetAllValues<ItemPlusSumAttrConfig>();
                totalProgress = configs[configs.Count - 1].countNeed;
            }
            switch (_type)
            {
                case TreasurePrivilege.DemonJarAtk:
                case TreasurePrivilege.StrengthenAdd:
                case TreasurePrivilege.MountAtk:
                case TreasurePrivilege.PetHp:
                case TreasurePrivilege.Boss:
                case TreasurePrivilege.Wash:
                    privilegeRedpoint = new Redpoint(TreasureModel.TREASURE_SOUL_ID, TreasureModel.TREASURE_SOUL_ID * 100 + (int)type);
                    break;
            }
        }
        public int GetPrivilegeValue(int _index = 0)
        {
            switch (type)
            {
                case TreasurePrivilege.RuneBreakExpAdd:
                    return effectValue;
                case TreasurePrivilege.DemonJarAtk:
                case TreasurePrivilege.Suit:
                    return effectValue;
                case TreasurePrivilege.Wing:
                case TreasurePrivilege.StrengthenAdd:
                    return effectValue;
            }
            return 0;
        }
        public void UpdateState()
        {
            switch (type)
            {
                case TreasurePrivilege.Property:
                case TreasurePrivilege.RuneBreakExpAdd:
                case TreasurePrivilege.Wing:
                case TreasurePrivilege.Suit:
                    state = TreasurePrivilegeState.Complete;
                    break;
                case TreasurePrivilege.Boss:
                case TreasurePrivilege.DemonJarAtk:
                case TreasurePrivilege.PetHp:
                case TreasurePrivilege.MountAtk:
                    privilegeRedpoint.state = RedPointState.None;
                    if (presentFinishCount >= totalProgress && (presentGetCount / progress) >= (totalProgress / progress))
                    {
                        state = TreasurePrivilegeState.Complete;
                    }
                    else if (presentGetCount > 0 && presentFinishCount / progress < presentGetCount / progress)
                    {
                        state = TreasurePrivilegeState.Reward;
                        privilegeRedpoint.state = RedPointState.Simple;
                    }
                    else
                    {
                        state = TreasurePrivilegeState.Doing;
                    }
                    break;
                case TreasurePrivilege.Wash:
                    privilegeRedpoint.state = itemGet ? RedPointState.None : RedPointState.Simple;
                    state = itemGet ? TreasurePrivilegeState.Doing : TreasurePrivilegeState.Reward;
                    break;
                case TreasurePrivilege.StrengthenAdd:
                    privilegeRedpoint.state = RedPointState.None;
                    var strengthen = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>();
                    var playerpack = ModelCenter.Instance.GetModel<PlayerPackModel>();
                    presentGetCount = 0;
                    foreach (var value in strengthen._EqInfo.Values)
                    {
                        ItemModel itemModel = playerpack.GetItemModelByIndex(PackType.rptEquip, value.EquipIndex);
                        if (itemModel != null)
                        {
                            presentGetCount += value.EquipPartStarLV;
                        }
                    }
                    var configs = ConfigManager.Instance.GetAllValues<ItemPlusSumAttrConfig>();
                    bool contains = configs.FindIndex((x) =>
                    {
                        return x.countNeed > presentFinishCount && presentGetCount >= x.countNeed;
                    }) != -1;
                    if (presentFinishCount >= totalProgress && presentGetCount >= totalProgress)
                    {
                        state = TreasurePrivilegeState.Complete;
                    }
                    else if (contains)
                    {
                        state = TreasurePrivilegeState.Reward;
                        privilegeRedpoint.state = RedPointState.Simple;
                    }
                    else
                    {
                        state = TreasurePrivilegeState.Doing;
                    }
                    break;
            }
        }
        public string ProgressDisplay()
        {
            switch (type)
            {
                case TreasurePrivilege.DemonJarAtk:
                case TreasurePrivilege.PetHp:
                case TreasurePrivilege.MountAtk:
                case TreasurePrivilege.Boss:
                    if (state == TreasurePrivilegeState.Complete) { return UIHelper.GetTextColorByItemColor(TextColType.Green, totalProgress.ToString(), true); }
                    else if (state == TreasurePrivilegeState.Doing)
                    {
                        return StringUtility.Contact(UIHelper.GetTextColorByItemColor(TextColType.Red, presentGetCount.ToString(), true), "/", (presentFinishCount / progress + 1) * progress);
                    }
                    else if (state == TreasurePrivilegeState.Reward)
                    {
                        var _completeCount = (presentFinishCount / progress + 1) * progress;
                        return StringUtility.Contact(UIHelper.GetTextColorByItemColor(TextColType.Green, presentGetCount.ToString(), true), "/", _completeCount);
                    }
                    break;
                case TreasurePrivilege.StrengthenAdd:
                    var configs = ConfigManager.Instance.GetAllValues<ItemPlusSumAttrConfig>();
                    var next = configs.Count - 1;
                    for (int i = 0; i < configs.Count; i++)
                    {
                        if (configs[i].countNeed > presentFinishCount)
                        {
                            next = i;
                            break;
                        }
                    }
                    if (state == TreasurePrivilegeState.Complete) { return totalProgress.ToString(); }
                    else if (state == TreasurePrivilegeState.Doing
                        || state == TreasurePrivilegeState.Reward)
                    {
                        var colortype = presentGetCount >= configs[next].countNeed ? TextColType.Green : TextColType.Red;
                        return StringUtility.Contact(UIHelper.GetTextColorByItemColor(colortype, presentGetCount.ToString(), true), "/", configs[next].countNeed);
                    }
                    break;
            }
            return string.Empty;
        }
        public void GetReward()
        {
            switch (type)
            {
                case TreasurePrivilege.MountAtk:
                case TreasurePrivilege.DemonJarAtk:
                case TreasurePrivilege.PetHp:
                case TreasurePrivilege.Boss:
                case TreasurePrivilege.Wash:
                    var _pak = new CA504_tagCMPlayerGetReward();
                    _pak.RewardType = (int)GotServerRewardType.Def_RewardType_TreasureSoul;
                    _pak.DataEx = (uint)type;
                    _pak.DataExStrLen = 0;
                    _pak.DataExStr = string.Empty;
                    GameNetSystem.Instance.SendInfo(_pak);
                    break;
                case TreasurePrivilege.StrengthenAdd:
                    var configs = ConfigManager.Instance.GetAllValues<ItemPlusSumAttrConfig>();
                    var present = 0;
                    for (int i = 0; i < configs.Count; i++)
                    {
                        if (presentGetCount >= configs[i].countNeed)
                        {
                            present = i;
                        }
                    }
                    CA503_tagCMActiveAllEquipAttr pak = new CA503_tagCMActiveAllEquipAttr();
                    pak.Type = 0;
                    pak.Cnt = (uint)configs[present].countNeed;
                    GameNetSystem.Instance.SendInfo(pak);
                    break;
            }
        }
        public int GetFightPower()
        {
            var _fightPower = 0;
            if (propertyDict != null)
            {
                _fightPower += UIHelper.GetFightPower(propertyDict);
            }
            return _fightPower;
        }
        Item,
        Treasure,
    }
}