少年修仙传客户端代码仓库
client_linchunjie
2019-04-19 707228430841a6f44bf80b5f14b672129776e2b2
3335 炼丹功能
4个文件已添加
3个文件已修改
235 ■■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA317_tagCMAddFruitUseLimit.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA317_tagCMAddFruitUseLimit.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Alchemy/AlchemyDrugLimitWin.cs 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Alchemy/AlchemyDrugLimitWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Alchemy/AlchemyModel.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Alchemy/AlchemyUseDrugCell.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/Logic/ItemOperateUtility.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA317_tagCMAddFruitUseLimit.cs
New file
@@ -0,0 +1,18 @@
using UnityEngine;
using System.Collections;
// A3 17 增加果实使用上限 #tagCMAddFruitUseLimit
public class CA317_tagCMAddFruitUseLimit : GameNetPackBasic {
    public uint ItemID;    //果实物品ID
    public CA317_tagCMAddFruitUseLimit () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA317;
    }
    public override void WriteToBytes () {
        WriteBytes (ItemID, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA317_tagCMAddFruitUseLimit.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a52b2bce188fd5e4b85891457a7fc658
timeCreated: 1555661879
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Alchemy/AlchemyDrugLimitWin.cs
New file
@@ -0,0 +1,138 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, April 19, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class AlchemyDrugLimitWin : Window
    {
        [SerializeField] Transform m_ContainerRealm;
        [SerializeField] Transform m_ContainerItem;
        [SerializeField] Text m_Now;
        [SerializeField] Text m_Next;
        [SerializeField] ItemBehaviour m_Item;
        [SerializeField] Button m_Use;
        [SerializeField] Button m_Goto;
        [SerializeField] Button m_Close;
        public static int drugId = 0;
        AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Use.AddListener(OnUse);
            m_Goto.AddListener(Goto);
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            Dispaly();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void Dispaly()
        {
            AlchemyDrugUseLimit drugUseLimit;
            if (model.TryGetAlchemyUseLimit(drugId, out drugUseLimit))
            {
                m_ContainerRealm.gameObject.SetActive(drugUseLimit.addItem.id == 0);
                m_ContainerItem.gameObject.SetActive(drugUseLimit.addItem.id != 0);
                if (drugUseLimit.addItem.id != 0)
                {
                    DisplayItem();
                }
                else
                {
                    DisplayRealm();
                }
            }
        }
        void DisplayItem()
        {
            AlchemyDrugUseLimit drugUseLimit;
            if (model.TryGetAlchemyUseLimit(drugId, out drugUseLimit))
            {
                var itemConfig = ItemConfig.Get(drugUseLimit.addItem.id);
                m_Now.text = string.Format("当前只能服用{0}颗五品攻击丹,可服用{1}突破上限", drugUseLimit.GetUseLimit(),
                    itemConfig.ItemName);
                m_Next.text = string.Format("服用{0}个{1}上限增加{2}", drugUseLimit.addItem.count, itemConfig.ItemName,
                    drugUseLimit.addLimitPerTimes);
                m_Item.SetItem(drugUseLimit.addItem.id, drugUseLimit.addItem.count);
            }
        }
        void DisplayRealm()
        {
            AlchemyDrugUseLimit drugUseLimit;
            if (model.TryGetAlchemyUseLimit(drugId, out drugUseLimit))
            {
                m_Now.text = string.Format("当前只能服用{0}颗五品攻击丹,可提升境界突破上限", drugUseLimit.GetUseLimit());
                var realmLevel = drugUseLimit.GetNextUpgradeRealm();
                var realmConfig = RealmConfig.Get(realmLevel);
                var upgrade = drugUseLimit.GetRealmLimit(realmLevel) -
                    drugUseLimit.GetRealmLimit(PlayerDatas.Instance.baseData.realmLevel);
                m_Next.text = string.Format("提升至<Img img={0}/>上限增加{0}",
                    realmConfig.Img, upgrade);
            }
        }
        private void Goto()
        {
            CloseImmediately();
            WindowJumpMgr.Instance.ClearJumpData();
            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.RealmFunc1);
        }
        private void OnUse()
        {
            AlchemyDrugUseLimit drugUseLimit;
            if (model.TryGetAlchemyUseLimit(drugId, out drugUseLimit))
            {
                var count = ModelCenter.Instance.GetModel<PackModel>().GetItemCountByID(PackType.Item, drugUseLimit.addItem.id);
                if (count < drugUseLimit.addItem.count)
                {
                    ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(drugUseLimit.addItem.id);
                    return;
                }
            }
            var pak = new CA317_tagCMAddFruitUseLimit();
            pak.ItemID = (uint)drugId;
            GameNetSystem.Instance.SendInfo(pak);
            CloseImmediately();
        }
    }
}
System/Alchemy/AlchemyDrugLimitWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: ac9a64dc97d501b40b46b1649485dd65
timeCreated: 1555658532
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Alchemy/AlchemyModel.cs
@@ -272,6 +272,16 @@
            return int.MaxValue;
        }
        public int GetAlchemyDrugUseLimit(int id)
        {
            AlchemyDrugUseLimit drugUseLimit;
            if (TryGetAlchemyUseLimit(id, out drugUseLimit))
            {
                return drugUseLimit.GetUseLimit();
            }
            return 0;
        }
        public bool IsGraspRecipe(int alchemyId)
        {
            return m_AlchemyTimes.ContainsKey(alchemyId);
@@ -406,7 +416,7 @@
            {
                realmLimits.Add(realmLimit.x, realmLimit.y);
            }
            if (string.IsNullOrEmpty(config.AddItemMaxCnt))
            if (!string.IsNullOrEmpty(config.AddItemMaxCnt))
            {
                var array = LitJson.JsonMapper.ToObject<int[]>(config.AddItemMaxCnt);
                addItem = new Item()
@@ -421,7 +431,7 @@
        public void SetTimes(int eatTimes, int addTimes)
        {
            this.eatTimes = eatTimes;
            this.addTimes = addTimes;
            this.addTimes = addTimes / (addItem.count <= 0 ? 1 : addItem.count);
        }
        public int GetUseLimit()
@@ -435,10 +445,26 @@
                    times = realmLimits[level];
                }
            }
            times += addTimes * addLimitPerTimes;
            if (addItem.id != 0)
            {
                times += addTimes * addLimitPerTimes;
            }
            return times;
        }
        public int GetRealmLimit(int realmLevel)
        {
            var limit = 0;
            foreach (var level in realmLimits.Keys)
            {
                if (realmLevel >= level)
                {
                    limit = realmLimits[level];
                }
            }
            return limit;
        }
        public bool IsReachLimit()
        {
            var limit = GetUseLimit();
System/Alchemy/AlchemyUseDrugCell.cs
@@ -96,6 +96,8 @@
                    }
                    break;
                case 1:
                    AlchemyDrugLimitWin.drugId = itemId;
                    WindowCenter.Instance.Open<AlchemyDrugLimitWin>();
                    break;
            }
        }
System/KnapSack/Logic/ItemOperateUtility.cs
@@ -18,6 +18,7 @@
        BoxGetItemModel BoxModel { get { return ModelCenter.Instance.GetModel<BoxGetItemModel>(); } }
        DogzModel dogzModel { get { return ModelCenter.Instance.GetModel<DogzModel>(); } }
        EquipGemModel equipGemModel { get { return ModelCenter.Instance.GetModel<EquipGemModel>(); } }
        AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
        #region 装备
@@ -614,10 +615,22 @@
            var usedCountTotal = packModel.GetItemTotalUsedTimes(item.itemId);
            var fruitConfig = AttrFruitConfig.Get(item.itemId);
            if (fruitConfig != null && (usedCountTotal >= fruitConfig.basicUseLimit || useCnt > fruitConfig.basicUseLimit))
            {
                error = 1;
                return false;
            if (fruitConfig != null)
            {
                var limitTimes = 0;
                if (fruitConfig.FuncID == 2)
                {
                    limitTimes = alchemyModel.GetAlchemyDrugUseLimit(item.itemId);
                }
                else
                {
                    limitTimes = fruitConfig.basicUseLimit;
                }
                if (usedCountTotal >= limitTimes || useCnt > limitTimes)
                {
                    error = 1;
                    return false;
                }
            }
            error = 0;