少年修仙传客户端代码仓库
Client_PangDeRong
2018-11-10 760d42b8cd10cb60ac7e6ad65002ac1b8ea6302f
3335 优化本地数据解析
6个文件已修改
6个文件已删除
1073 ■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3BE_tagMCMagicWeaponMsg.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/BlastFurnaceModel.cs 454 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/FurnaceFireChooseWin.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/LingDanTips.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/PrayForDurgModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineFailWin.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineFailWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineSuccessWin.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineSuccessWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineTips.cs 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/BlastFurnace/TreasureRefineTips.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/PlayerPackModels.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3BE_tagMCMagicWeaponMsg.cs
@@ -21,7 +21,6 @@
        base.Done(vNetPack);
        HA3BE_tagMCMagicWeaponMsg vNetData = vNetPack as HA3BE_tagMCMagicWeaponMsg;
        FurnaceModel.RefreshTreasureRefineModel(vNetData);
    }
}
System/BlastFurnace/BlastFurnaceModel.cs
@@ -44,15 +44,16 @@
    public override void Init()
    {
        ParseAlchemyConfig();
        ParseAlchemySpecConfig();
        GetRefineStoveConditions();
        _blastFurnaceExpDict = new Dictionary<int, int>();
        extraMats = null;
        alchemyModellist = null;
        _upTreasureRateModel = Config.Instance.Get<FuncConfigConfig>("TreasureUpRateItem");
        if (_upTreasureRateModel != null)
        {
            extraMats = ConfigParse.GetMultipleStr<int>(_upTreasureRateModel.Numerical2);
        }
        List<RefineStoveConfig> stovelist = Config.Instance.GetAllValues<RefineStoveConfig>();
        MaxStoveLv = 0;
        if (stovelist != null)
@@ -64,8 +65,7 @@
            MaxStoveLv = stovelist[stovelist.Count - 1].LV;
        }
        alchemyModellist = Config.Instance.GetAllValues<AlchemyConfig>();
        FuncConfigConfig alchemyRedPoint = Config.Instance.Get<FuncConfigConfig>("AlchemyRedPoint");
        int.TryParse(alchemyRedPoint.Numerical1, out makeDrugRedLv);
        SetDandrugRedPointlist();
@@ -86,7 +86,6 @@
        addExp = 0;
        preStoveLv = 1;
        jumpToPrescripe = 0;
        treasureRefineDict.Clear();
        FuncOpen.Instance.OnFuncStateChangeEvent -= RefreshFuncOpenState;
        playerPack.RefreshItemCountAct -= RefreshMat;
        playerPack.ItemCntReduceAct -= RefreshDanReduce;
@@ -102,6 +101,119 @@
    {
    }
    public void OnPlayerLoginOk()
    {
        CheckMakerDandrugCondition();
        CheckRecycleStoreRed();
        CheckMakeDrugRedPoint(true);
        playerPack.RefreshItemCountAct += RefreshMat;
        FuncOpen.Instance.OnFuncStateChangeEvent += RefreshFuncOpenState;
        playerPack.RefreshItemSumUseCntAct += RefreshItemUsce;
        WindowCenter.Instance.windowAfterCloseEvent += StoveUpgradAfterClose;
        playerPack.ItemCntReduceAct += RefreshDanReduce;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshRealm;
        PlayerPetDatas.Event_H0704Add += AddPetEvent;
        PlayerMountDatas.Event_MountHA301A += AddMountEvent;
    }
    #region 解析本地数据
    public Dictionary<int, AlchemyData> alchemyDataDict { get; private set; }
    private void ParseAlchemyConfig()
    {
        alchemyDataDict = new Dictionary<int, AlchemyData>();
        alchemyModellist = Config.Instance.GetAllValues<AlchemyConfig>();
        for(int i = 0; i < alchemyModellist.Count; i++)
        {
            var alchemyConfig = alchemyModellist[i];
            AlchemyData alchemyData = new AlchemyData();
            alchemyData.id = alchemyConfig.AlchemyID;
            alchemyData.alchemyConfig = alchemyConfig;
            alchemyData.normalMatDic = ConfigParse.GetDic<int, int>(alchemyConfig.MaterialAll);
            alchemyData.previewDict = GetPreviewDict(alchemyConfig.AlchemPreviewItem);
            if(!alchemyDataDict.ContainsKey(alchemyConfig.AlchemyID))
            {
                alchemyDataDict.Add(alchemyConfig.AlchemyID,alchemyData);
            }
        }
    }
    public Dictionary<int, AlchemySpecData> alchemySpecDataDict { get; private set; }
    private void ParseAlchemySpecConfig()
    {
        alchemySpecDataDict = new Dictionary<int, AlchemySpecData>();
        var speclist = Config.Instance.GetAllValues<AlchemySpecConfig>();
        for (int i = 0; i < speclist.Count; i++)
        {
            var specConfig = speclist[i];
            AlchemySpecData specData = new AlchemySpecData();
            specData.id = specConfig.ID;
            specData.specConfig = specConfig;
            specData.previewDict = GetPreviewDict(specConfig.AlchemPreviewItem);
            if (!alchemySpecDataDict.ContainsKey(specConfig.ID))
            {
                alchemySpecDataDict.Add(specConfig.ID, specData);
            }
        }
    }
    /// <summary>
    /// 得到预览合成丹药的列表
    /// </summary>
    private Dictionary<int, int> GetPreviewDict(string alchemyPreview)
    {
        Dictionary<int, int> keyValues = new Dictionary<int, int>();
        JsonData jsonData = JsonMapper.ToObject(alchemyPreview);
        if (jsonData.IsArray)
        {
            for (int i = 0; i < jsonData.Count; i++)
            {
                if (jsonData[i].IsArray)
                {
                    int itemId = int.Parse(jsonData[i][0].ToString());
                    if (jsonData[i].Count > 1)
                    {
                        int effectId = int.Parse(jsonData[i][1].ToString());
                        keyValues.Add(itemId, effectId);
                    }
                    else
                    {
                        keyValues.Add(itemId, 0);
                    }
                }
            }
        }
        return keyValues;
    }
    public AlchemyData GetAlchemyData(int id)
    {
        AlchemyData alchemyData = null;
        alchemyDataDict.TryGetValue(id,out alchemyData);
        return alchemyData;
    }
    public AlchemySpecData GetAlchemySpecData(int id)
    {
        AlchemySpecData specData = null;
        alchemySpecDataDict.TryGetValue(id, out specData);
        return specData;
    }
    public class AlchemyData
    {
        public int id;
        public AlchemyConfig alchemyConfig;
        public Dictionary<int, int> normalMatDic;
        public Dictionary<int, int> previewDict;
    }
    public class AlchemySpecData
    {
        public int id;
        public AlchemySpecConfig specConfig;
        public Dictionary<int, int> previewDict;
    }
    #endregion
    private void RefreshFuncOpenState(int funcId)
    {
@@ -119,23 +231,6 @@
    private void AddPetEvent()
    {
        CheckMakerDandrugCondition();
    }
    public void OnPlayerLoginOk()
    {
        CheckMakerDandrugCondition();
        CheckRecycleStoreRed();
        CheckMakeDrugRedPoint(true);
        playerPack.RefreshItemCountAct += RefreshMat;
        FuncOpen.Instance.OnFuncStateChangeEvent += RefreshFuncOpenState;
        playerPack.RefreshItemSumUseCntAct += RefreshItemUsce;
        WindowCenter.Instance.windowAfterCloseEvent += StoveUpgradAfterClose;
        playerPack.ItemCntReduceAct += RefreshDanReduce;
        PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshRealm;
        PlayerPetDatas.Event_H0704Add += AddPetEvent;
        PlayerMountDatas.Event_MountHA301A += AddMountEvent;
    }
    public void RefreshAddSpecMat(AlchemySpecConfig alchemySpecModel)
@@ -233,46 +328,8 @@
        return isReach;
    }
    public Dictionary<uint, byte> treasureRefineDict = new Dictionary<uint, byte>(); //key 法宝ID value 等级
    public event Action RefreshTreasureRefineEvent;
    public Treasure treasureData { get; private set; }
    public void RefreshTreasureRefineModel(HA3BE_tagMCMagicWeaponMsg data)
    {
    }
    public int GetAllTreasureRefineLv()
    {
        int sumLv = 0;
        foreach (var value in treasureRefineDict.Values)
        {
            sumLv += value;
        }
        return sumLv;
    }
    /// <summary>
    /// 判断法宝是否精炼到满级
    /// </summary>
    /// <param name="treasureId"></param>
    /// <param name="lv"></param>
    /// <returns></returns>
    public bool TreasureIsFullLv(int treasureId, int lv)
    {
        if (_tagTreasureRefineModeDict == null)
            return false;
        if (_tagTreasureRefineModeDict.ContainsKey(treasureId))
        {
            if (_tagTreasureRefineModeDict[treasureId][_tagTreasureRefineModeDict[treasureId].Count - 1].TreasureLV <= lv)
            {
                return true;
            }
        }
        return false;
    }
    /// <summary>
    /// 得到炼丹和铸炼的结果
    /// 得到炼丹
    /// </summary>
    public event Action<MakeType, int> RefreshMakeItemAnswerAct;
    public void GetMakerResult(H0721_tagMakeItemAnswer answer)
@@ -296,22 +353,6 @@
                    if (!WindowCenter.Instance.IsOpen<MakerDrugFailWin>())
                    {
                        WindowCenter.Instance.Open<MakerDrugFailWin>();
                    }
                }
                break;
            case MakeType.Def_mitMWUpLevel:
                if (answer.Result == 1)
                {
                    if (!WindowCenter.Instance.IsOpen<TreasureRefineSuccessWin>())
                    {
                        WindowCenter.Instance.Open<TreasureRefineSuccessWin>();
                    }
                }
                else
                {
                    if (!WindowCenter.Instance.IsOpen<TreasureRefineFailWin>())
                    {
                        WindowCenter.Instance.Open<TreasureRefineFailWin>();
                    }
                }
                break;
@@ -391,11 +432,11 @@
    {
        materialIds = null;
        materialNums = null;
        _tagAlchemyModel = Config.Instance.Get<AlchemyConfig>(alchemyId);
        if (_tagAlchemyModel == null)
        var alchemyData = GetAlchemyData(alchemyId);
        if (alchemyData == null)
            return;
        _alchemyMaterialDict = ConfigParse.GetDic<int, int>(_tagAlchemyModel.MaterialAll);
        _alchemyMaterialDict = alchemyData.normalMatDic;
        materialIds = _alchemyMaterialDict.Keys.ToArray();
        materialNums = _alchemyMaterialDict.Values.ToArray();
    }
@@ -423,62 +464,38 @@
    /// </summary>
    public Dictionary<int, int> GetPreviewMakeDruglist(AlchemyConfig alchemyModel)
    {
        JsonData jsonData = JsonMapper.ToObject(alchemyModel.AlchemPreviewItem);
        PreviewItemDict.Clear();
        if (jsonData.IsArray)
        {
            for (int i = 0; i < jsonData.Count; i++)
            {
                if (jsonData[i].IsArray)
                {
                    int itemId = int.Parse(jsonData[i][0].ToString());
                    if (jsonData[i].Count > 1)
                    {
                        int effectId = int.Parse(jsonData[i][1].ToString());
                        PreviewItemDict.Add(itemId, effectId);
                    }
                    else
                    {
                        PreviewItemDict.Add(itemId, 0);
                    }
                }
            }
        }
        return PreviewItemDict;
        if (alchemyModel == null) return null;
        var alchmeyData = GetAlchemyData(alchemyModel.AlchemyID);
        if (alchmeyData == null) return null;
        return alchmeyData.previewDict;
    }
    Dictionary<int, int> PreviewItemDict = new Dictionary<int, int>();
    public Dictionary<int, int> GetPreviewSpecMakeDruglist(AlchemySpecConfig alchemyModel)
    {
        JsonData jsonData = JsonMapper.ToObject(alchemyModel.AlchemPreviewItem);
        PreviewItemDict.Clear();
        if (jsonData.IsArray)
        {
            for (int i = 0; i < jsonData.Count; i++)
            {
                if (jsonData[i].IsArray)
                {
                    int itemId = int.Parse(jsonData[i][0].ToString());
                    if (jsonData[i].Count > 1)
                    {
                        int effectId = int.Parse(jsonData[i][1].ToString());
                        PreviewItemDict.Add(itemId, effectId);
                    }
                    else
                    {
                        PreviewItemDict.Add(itemId, 0);
                    }
                }
            }
        }
        return PreviewItemDict;
        if (alchemyModel == null) return null;
        var specData = GetAlchemySpecData(alchemyModel.ID);
        if (specData == null) return null;
        return specData.previewDict;
    }
    public int GetEffectIdByItemId(int itemId)
    public List<int> GetPreviewIdlist(AlchemyConfig alchemyConfig)
    {
        int effectId = 0;
        PreviewItemDict.TryGetValue(itemId, out effectId);
        return effectId;
        if (alchemyConfig == null) return null;
        var dict = GetPreviewMakeDruglist(alchemyConfig);
        if (dict == null) return null;
        return dict.Keys.ToList();
    }
    public List<int> GetSpecPreviewIdlist(AlchemySpecConfig specConfig)
    {
        if (specConfig == null) return null;
        var dict = GetPreviewSpecMakeDruglist(specConfig);
        if (dict == null) return null;
        return dict.Keys.ToList();
    }
    /// <summary>
@@ -508,157 +525,6 @@
    }
    #endregion
    #region 法宝的逻辑处理
    private List<int> collectedTreasurelist = new List<int>();
    private Dictionary<int, List<TreasureRefineConfig>> _tagTreasureRefineModeDict;
    public List<int> GetCollectedTreasureList()
    {
        collectedTreasurelist.Clear();
        _tagTreasureRefineModeDict = TreasureRefineConfig.GetTreasureRefineDict();
        foreach (var key in _tagTreasureRefineModeDict.Keys)
        {
            Treasure treasure = null;
            sTreasureModel.TryGetTreasure(key, out treasure);
            if (treasure != null)
            {
                if (treasure.state == TreasureState.Collected)
                {
                    collectedTreasurelist.Add(key);
                }
            }
        }
        return collectedTreasurelist;
    }
    /// <summary>
    /// 设置法宝铸炼的属性 材料
    /// </summary>
    public int[] attrIDs { get; private set; }
    public int[] attrValues { get; private set; }
    private Dictionary<int, int> _treasureAttrDict;
    public void SetTreasureRefineModel(TreasureRefineConfig model)
    {
        _treasureAttrDict = null;
        attrIDs = null;
        attrValues = null;
        if (model == null)
            return;
        _treasureAttrDict = ConfigParse.GetDic<int, int>(model.TreasureLVStatus);
        attrIDs = _treasureAttrDict.Keys.ToArray();
        attrValues = _treasureAttrDict.Values.ToArray();
    }
    public int[] nextAttrIDs { get; private set; }
    public int[] nextAttrValues { get; private set; }
    public int nextRefineMaterialID { get; private set; }
    public int nextRefineMaterialNum { get; private set; }
    private string[] arrays;
    private Dictionary<int, int> _nextTreasureAttrDict;
    public void SetNextTreasureRefineModel(TreasureRefineConfig model)
    {
        _nextTreasureAttrDict = null;
        nextAttrIDs = null;
        nextAttrValues = null;
        if (model == null)
            return;
        _nextTreasureAttrDict = ConfigParse.GetDic<int, int>(model.TreasureLVStatus);
        nextAttrIDs = _nextTreasureAttrDict.Keys.ToArray();
        nextAttrValues = _nextTreasureAttrDict.Values.ToArray();
        arrays = model.TreasureUpItems.Split('_');
        nextRefineMaterialID = int.Parse(arrays[0]);
        nextRefineMaterialNum = int.Parse(arrays[1]);
    }
    /// <summary>
    /// 得到当前法宝的所有技能
    /// </summary>
    public Dictionary<int, TreasureSkillData> treasureSkillDict = new Dictionary<int, TreasureSkillData>(); // key 技能ID
    private List<TreasureRefineConfig> _tagTreasureRefineModellist;
    public void SetTreasureSkillDict(int treasureId, int lv)
    {
        treasureSkillDict.Clear();
        _tagTreasureRefineModellist = TreasureRefineConfig.GetTreasureRefineList(treasureId);
        if (_tagTreasureRefineModellist == null)
            return;
        int i = 0;
        int length = _tagTreasureRefineModellist.Count;
        for (i = 0; i < length; i++)
        {
            if (_tagTreasureRefineModellist[i].OpenSkill != 0)
            {
                if (lv >= _tagTreasureRefineModellist[i].TreasureLV)
                {
                    TreasureSkillData skillData = new TreasureSkillData(_tagTreasureRefineModellist[i].TreasureLV, false);
                    AddTreasureSkillDict(_tagTreasureRefineModellist[i].OpenSkill, skillData);
                }
                else
                {
                    TreasureSkillData skillData = new TreasureSkillData(_tagTreasureRefineModellist[i].TreasureLV, true);
                    AddTreasureSkillDict(_tagTreasureRefineModellist[i].OpenSkill, skillData);
                }
            }
        }
    }
    private void AddTreasureSkillDict(int skillId, TreasureSkillData skillData)
    {
        if (treasureSkillDict.ContainsKey(skillId))
            treasureSkillDict[skillId] = skillData;
        else
            treasureSkillDict.Add(skillId, skillData);
    }
    /// <summary>
    /// 预览法宝属性值
    /// </summary>
    private PlayerPropertyConfig _playerProModel;
    public string GetTreasureAttrStr(int proID, int value, bool showName)
    {
        _playerProModel = Config.Instance.Get<PlayerPropertyConfig>(proID);
        if (_playerProModel == null)
            return "";
        string s = "";
        if (showName)
        {
            if (_playerProModel.Name.Contains("%s"))
                s = _playerProModel.Name.Replace("%s", GetProValueTypeStr(_playerProModel.ISPercentage, value));
            else
                s = _playerProModel.Name + ":" + GetProValueTypeStr(_playerProModel.ISPercentage, value);
        }
        else
        {
            s = GetProValueTypeStr(_playerProModel.ISPercentage, value);
        }
        return s;
    }
    public string GetFireSuccessRate(int proID, int value)
    {
        if (proID != 226)
            return "";
        string s = Language.Get("Supplement1006", Mathf.RoundToInt(value / 100));
        return s;
    }
    public int fireId { get; private set; }
    public event Action<float> RefreshSuccessRateEvent;
    public void SetCurUseFire(int fireId, float value)
    {
        this.fireId = fireId;
        if (RefreshSuccessRateEvent != null)
            RefreshSuccessRateEvent(value);
    }
    #endregion
    #region 选择炉火逻辑处理
    /// <summary>
@@ -678,9 +544,6 @@
        openBlastFurnaceLv = int.Parse(_tagfuncModel.Numerical2);
    }
    #endregion
    public string GetProValueTypeStr(int isPercentage, int value)
@@ -702,22 +565,12 @@
    }
    #region 发送请求
    public void SendRefineTreasureQuest(uint treasureId, uint materId)
    {
        CA577_tagCMMWRefine cMMWRefine = new CA577_tagCMMWRefine();
        cMMWRefine.MWID = treasureId;
        cMMWRefine.MaterialID = materId;
        GameNetSystem.Instance.SendInfo(cMMWRefine);
        fireId = 0;
    }
    public void SendMakerDrugQuest(ushort drugId, uint specConfigID)
    {
        CA576_tagCMPlayerRefine cMPlayerRefine = new CA576_tagCMPlayerRefine();
        cMPlayerRefine.RefineNum = drugId;
        cMPlayerRefine.UseRateItem = specConfigID;
        GameNetSystem.Instance.SendInfo(cMPlayerRefine);
        fireId = 0;
    }
    #endregion
@@ -993,7 +846,7 @@
            if (haveCnt >= specConfig.SpecialMateriaNUM)
            {
                isEnough = true;
                List<int> specIdlist = GetPreviewSpecMakeDruglist(specConfig).Keys.ToList();
                List<int> specIdlist = GetSpecPreviewIdlist(specConfig);
                specDurgDict.Add(specConfig.SpecialMaterialD, specIdlist);
            }
        }
@@ -1004,7 +857,7 @@
    {
        if (alchemyConfig == null) return false;
        bool isEnough = true;
        Dictionary<int, int> matDict = ConfigParse.GetDic<int, int>(alchemyConfig.MaterialAll);
        var matDict = GetAlchemyData(alchemyConfig.AlchemyID).normalMatDic;
        foreach (var id in matDict.Keys)
        {
            int haveCnt = playerPack.GetItemCountByID(PackType.rptItem, id);
@@ -1019,8 +872,9 @@
    public bool IsHaveReachFull(AlchemyConfig alchemyConfig)
    {
        if (alchemyConfig == null) return false;
        List<int> previewlist = GetPreviewMakeDruglist(alchemyConfig).Keys.ToList();
        var previewlist = GetPreviewIdlist(alchemyConfig);
        if (previewlist == null) return false;
        for (int i = 0; i < previewlist.Count; i++)
        {
            if (playerPack.CheckIsDrugById(previewlist[i]))
@@ -1037,9 +891,9 @@
    public bool CheckNormalAlchemyIsReachMaxUse(AlchemyConfig alchemyConfig)
    {
        if (alchemyConfig == null) return false;
        var previewlist = GetPreviewIdlist(alchemyConfig);
        if (previewlist == null) return false;
        List<int> previewlist = GetPreviewMakeDruglist(alchemyConfig).Keys.ToList();
        for (int i = 0; i < previewlist.Count; i++)
        {
            if (playerPack.CheckIsDrugById(previewlist[i]))
System/BlastFurnace/FurnaceFireChooseWin.cs
@@ -143,29 +143,6 @@
                    }
                    break;
                //case BlastFurnaceFuncTitle.TreasureRefine:
                //    chinItemModel = Config.Instance.Get<ItemConfig>(extraMatIds[cell.index]);
                //    if (chinItemModel != null)
                //    {
                //        RefreshCellUI(extraMatIds[cell.index], cell, FurnaceModel.GetFireSuccessRate(chinItemModel.Effect1, chinItemModel.EffectValueA1), fireChooseCell, chinItemModel);
                //        if(singlePack != null)
                //        {
                //            num = singlePack.GetItemCountByID(extraMatIds[cell.index]);
                //        }
                //        if (num >= 1)
                //        {
                //            fireChooseCell.addBtn.gameObject.SetActive(true);
                //            fireChooseCell.itemCell.countText.text = UIHelper.GetTextColorByItemColor(TextColType.Green, num.ToString(),true) + "/1";
                //        }
                //        else
                //        {
                //            fireChooseCell.addBtn.gameObject.SetActive(false);
                //            fireChooseCell.itemCell.countText.text = UIHelper.GetTextColorByItemColor(TextColType.Red, num.ToString()) + "/1";
                //        }
                //        fireChooseCell.addBtn.onClick.AddListener(() => { OnClickExtraAddBtn(cell, chinItemModel.EffectValueA1); });
                //    }
                //    break;
            }
        }
@@ -181,12 +158,6 @@
            {
                itemPathModel.SetChinItemModel(matId);
            });
        }
        private void OnClickExtraAddBtn(CellView cell,int value)
        {
            FurnaceModel.SetCurUseFire(extraMatIds[cell.index],value);
            CloseWin();
        }
        private void OnClickSpecAddBtn(AlchemySpecConfig specModel)
System/BlastFurnace/LingDanTips.cs
@@ -91,6 +91,8 @@
        private bool isEnoughSpecMat = true;
        AchievementGuideEffect guideEffect = null;
        public int isJumpToId = 0;
        private Dictionary<int, int> previewDict = null;
        private void Awake()
        {
            _danDrugCtrl.OnRefreshCell += RefreshDandrugCell;
@@ -440,10 +442,16 @@
        private void CreateRandomLineCell()
        {
            if(chooseSpecModel == null)
                previewDanlist = FurnaceModel.GetPreviewMakeDruglist(curAlchemyModel).Keys.ToList();
            if (chooseSpecModel == null)
            {
                previewDict = FurnaceModel.GetPreviewMakeDruglist(curAlchemyModel);
                previewDanlist = FurnaceModel.GetPreviewIdlist(curAlchemyModel);
            }
            else
                previewDanlist = FurnaceModel.GetPreviewSpecMakeDruglist(chooseSpecModel).Keys.ToList();
            {
                previewDict = FurnaceModel.GetPreviewMakeDruglist(curAlchemyModel);
                previewDanlist = FurnaceModel.GetSpecPreviewIdlist(chooseSpecModel);
            }
            _randomLineCtrl.Refresh();
            if (previewDanlist.Count > 0)
@@ -476,7 +484,7 @@
                if (previewIndex <= previewDanlist.Count - 1)
                {
                    int itemId = previewDanlist[previewIndex];
                    int effectId = FurnaceModel.GetEffectIdByItemId(itemId);
                    int effectId = previewDict[itemId];
                    if(effectId != 0)
                    {
                        effect.effect = effectId;
System/BlastFurnace/PrayForDurgModel.cs
@@ -241,7 +241,7 @@
                {
                    if (blastModel.StoveLV >= configs[i].BlastFurnaceLV)
                    {
                        List<int> idlist = blastModel.GetPreviewMakeDruglist(configs[i]).Keys.ToList();
                        List<int> idlist = blastModel.GetPreviewIdlist(configs[i]);
                        if(idlist.Contains(key))
                        {
                            AttrFruitConfig fruitConfig = Config.Instance.Get<AttrFruitConfig>(key);
System/BlastFurnace/TreasureRefineFailWin.cs
File was deleted
System/BlastFurnace/TreasureRefineFailWin.cs.meta
File was deleted
System/BlastFurnace/TreasureRefineSuccessWin.cs
File was deleted
System/BlastFurnace/TreasureRefineSuccessWin.cs.meta
File was deleted
System/BlastFurnace/TreasureRefineTips.cs
File was deleted
System/BlastFurnace/TreasureRefineTips.cs.meta
File was deleted
System/KnapSack/Logic/PlayerPackModels.cs
@@ -2016,7 +2016,7 @@
        List<AttrFruitConfig> limitlist = new List<AttrFruitConfig>();
        public float GetAlchemyProgress(AlchemyConfig alchemy)
        {
            var previewDanlist = FurnaceModel.GetPreviewMakeDruglist(alchemy).Keys.ToList();
            var previewDanlist = FurnaceModel.GetPreviewIdlist(alchemy);
            float progress = 0;
            limitlist.Clear();
            for (int i = 0; i < previewDanlist.Count; i++)