| | |
| | | Dictionary<int, AlchemyCount> m_AlchemyCounts = new Dictionary<int, AlchemyCount>();
|
| | | Dictionary<int, int> m_AlchemyQualityLucks = new Dictionary<int, int>();
|
| | | Dictionary<int, List<Item>> m_AlchemyMaterials = new Dictionary<int, List<Item>>();
|
| | | Dictionary<int, AlchemyDrugUseLimit> m_AlchemyDrugUseLimits = new Dictionary<int, AlchemyDrugUseLimit>();
|
| | | List<int> m_AlchemyDrugs = new List<int>();
|
| | | List<int> m_AlchemyDrugQualitys = new List<int>();
|
| | |
|
| | | int m_SelectQuality = 0;
|
| | | public int selectQuality
|
| | |
| | | public event Action selectQualityRefresh;
|
| | | public event Action selectAlchemyRefresh;
|
| | | public event Action alchemyStateRefresh;
|
| | | public event Action alchemyDrugUseRefresh;
|
| | |
|
| | | PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
| | |
|
| | |
| | | m_AlchemyTimes.Clear();
|
| | | stoveLevel = 0;
|
| | | stoveExp = 0;
|
| | | foreach (var item in m_AlchemyDrugUseLimits.Values)
|
| | | {
|
| | | item.SetTimes(0, 0);
|
| | | }
|
| | | isServerPrepare = false;
|
| | | }
|
| | |
|
| | | public void OnPlayerLoginOk()
|
| | | {
|
| | | isServerPrepare = true;
|
| | | }
|
| | |
|
| | | public override void UnInit()
|
| | | {
|
| | | }
|
| | |
|
| | | void ParseConfig()
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | {
|
| | | var configs = AttrFruitConfig.GetValues();
|
| | | foreach (var config in configs)
|
| | | {
|
| | | if (config.FuncID == 2)
|
| | | {
|
| | | m_AlchemyDrugs.Add(config.ID);
|
| | | var itemConfig = ItemConfig.Get(config.ID);
|
| | | if (!m_AlchemyDrugQualitys.Contains(itemConfig.LV))
|
| | | {
|
| | | m_AlchemyDrugQualitys.Add(itemConfig.LV);
|
| | | }
|
| | | m_AlchemyDrugUseLimits.Add(config.ID, new AlchemyDrugUseLimit(config.ID));
|
| | | }
|
| | | }
|
| | |
|
| | | m_AlchemyDrugQualitys.Sort();
|
| | | }
|
| | | }
|
| | |
|
| | | public bool TryGetAlchemyStartTime(int alchemyId, out uint tick)
|
| | |
| | | public bool TryGetAlchemyMaterials(int alchemyId, out List<Item> items)
|
| | | {
|
| | | return m_AlchemyMaterials.TryGetValue(alchemyId, out items);
|
| | | }
|
| | |
|
| | | public bool TryGetAlchemyUseLimit(int id,out AlchemyDrugUseLimit drugUseLimit)
|
| | | {
|
| | | return m_AlchemyDrugUseLimits.TryGetValue(id, out drugUseLimit);
|
| | | }
|
| | |
|
| | | public float GetAlchemySuccRate(int alchemyId)
|
| | |
| | | var startTime = TimeUtility.GetTime(tick);
|
| | | var seconds = (int)(config.NeedTime - (float)(TimeUtility.ServerNow - startTime).TotalSeconds);
|
| | | return seconds > 0 ? 1 : 2;
|
| | | }
|
| | | return 0;
|
| | | }
|
| | |
|
| | | public ICollection<int> GetDrugQualitys()
|
| | | {
|
| | | return m_AlchemyDrugQualitys;
|
| | | }
|
| | |
|
| | | public ICollection<int> GetAlchemyDrugs()
|
| | | {
|
| | | return m_AlchemyDrugs;
|
| | | }
|
| | |
|
| | | public int GetAlchemyDrugState(int id)//0-可服用丹药 1-达到上限 2-没有丹药 3-没有提升空间
|
| | | {
|
| | | AlchemyDrugUseLimit drugUseLimit;
|
| | | if (TryGetAlchemyUseLimit(id, out drugUseLimit))
|
| | | {
|
| | | if (!drugUseLimit.IsReachLimit())
|
| | | {
|
| | | var count = packModel.GetItemCountByID(PackType.Item, id);
|
| | | return count > 0 ? 0 : 2;
|
| | | }
|
| | | else
|
| | | {
|
| | | return drugUseLimit.CanUpgradeLimit() ? 1 : 3;
|
| | | }
|
| | | }
|
| | | return int.MaxValue;
|
| | | }
|
| | |
|
| | | public int GetAlchemyDrugUseLimit(int id)
|
| | | {
|
| | | AlchemyDrugUseLimit drugUseLimit;
|
| | | if (TryGetAlchemyUseLimit(id, out drugUseLimit))
|
| | | {
|
| | | return drugUseLimit.GetUseLimit();
|
| | | }
|
| | | return 0;
|
| | | }
|
| | |
| | |
|
| | | if (package.ItemID != 0)
|
| | | {
|
| | | if (package.ItemCnt > 0)//炼丹成功
|
| | | {
|
| | | |
| | | }
|
| | | else//炼丹失败
|
| | | {
|
| | |
|
| | | }
|
| | | if (isServerPrepare)
|
| | | {
|
| | | if (!NewBieCenter.Instance.inGuiding && WindowCenter.Instance.IsOpen<AlchemyBaseWin>())
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | public override void UnInit()
|
| | | public void ReceivePackage(HA339_tagMCAttrFruitEatCntList vNetData)
|
| | | {
|
| | | for (int i = 0; i < vNetData.count; i++)
|
| | | {
|
| | | var data = vNetData.EatCntList[i];
|
| | | AlchemyDrugUseLimit drugUseLimit;
|
| | | if (TryGetAlchemyUseLimit((int)data.ItemID, out drugUseLimit))
|
| | | {
|
| | | drugUseLimit.SetTimes(data.EatCnt, (int)data.AddItemCnt);
|
| | | }
|
| | | }
|
| | |
|
| | | if (alchemyDrugUseRefresh != null)
|
| | | {
|
| | | alchemyDrugUseRefresh();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | max = 1,
|
| | | };
|
| | | }
|
| | |
|
| | | public class AlchemyDrugUseLimit
|
| | | {
|
| | | public readonly int id;
|
| | | public readonly Item addItem;
|
| | | public readonly int addLimitPerTimes;
|
| | | Dictionary<int, int> realmLimits = new Dictionary<int, int>();
|
| | |
|
| | | public int addTimes { get; private set; }
|
| | |
|
| | | public int eatTimes { get; private set; }
|
| | |
|
| | | PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
| | |
|
| | | public AlchemyDrugUseLimit(int id)
|
| | | {
|
| | | this.id = id;
|
| | | var config = AttrFruitConfig.Get(id);
|
| | | foreach (var realmLimit in config.MaxUseCnt)
|
| | | {
|
| | | realmLimits.Add(realmLimit.x, realmLimit.y);
|
| | | }
|
| | | if (!string.IsNullOrEmpty(config.AddItemMaxCnt))
|
| | | {
|
| | | var array = LitJson.JsonMapper.ToObject<int[]>(config.AddItemMaxCnt);
|
| | | addItem = new Item()
|
| | | {
|
| | | id = array[0],
|
| | | count = array[1],
|
| | | };
|
| | | addLimitPerTimes = array[2];
|
| | | }
|
| | | }
|
| | |
|
| | | public void SetTimes(int eatTimes, int addTimes)
|
| | | {
|
| | | this.eatTimes = eatTimes;
|
| | | this.addTimes = addTimes / (addItem.count <= 0 ? 1 : addItem.count);
|
| | | }
|
| | |
|
| | | public int GetUseLimit()
|
| | | {
|
| | | var times = 0;
|
| | | var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
|
| | | foreach (var level in realmLimits.Keys)
|
| | | {
|
| | | if (realmLevel >= level)
|
| | | {
|
| | | times = realmLimits[level];
|
| | | }
|
| | | }
|
| | | 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();
|
| | | return eatTimes >= limit;
|
| | | }
|
| | |
|
| | | public bool CanUpgradeLimit()
|
| | | {
|
| | | if (addItem.id != 0)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | if (GetNextUpgradeRealm() > 0)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | public int GetNextUpgradeRealm()
|
| | | {
|
| | | var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
|
| | | foreach (var level in realmLimits.Keys)
|
| | | {
|
| | | if (realmLevel < level)
|
| | | {
|
| | | return level;
|
| | | }
|
| | | }
|
| | | return 0;
|
| | | }
|
| | | }
|
| | | } |
| | | |