From feeceecc1252fd472a7027fc2049cd95816ea162 Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期五, 19 四月 2019 17:32:31 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
---
System/Alchemy/AlchemyModel.cs | 201 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 192 insertions(+), 9 deletions(-)
diff --git a/System/Alchemy/AlchemyModel.cs b/System/Alchemy/AlchemyModel.cs
index d0939db..18c9077 100644
--- a/System/Alchemy/AlchemyModel.cs
+++ b/System/Alchemy/AlchemyModel.cs
@@ -10,6 +10,9 @@
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
@@ -56,6 +59,7 @@
public event Action selectQualityRefresh;
public event Action selectAlchemyRefresh;
public event Action alchemyStateRefresh;
+ public event Action alchemyDrugUseRefresh;
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
@@ -69,12 +73,20 @@
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()
@@ -139,6 +151,25 @@
}
}
}
+
+ {
+ 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)
@@ -165,6 +196,11 @@
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)
@@ -204,6 +240,44 @@
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;
}
@@ -264,14 +338,6 @@
if (package.ItemID != 0)
{
- if (package.ItemCnt > 0)//鐐间腹鎴愬姛
- {
-
- }
- else//鐐间腹澶辫触
- {
-
- }
if (isServerPrepare)
{
if (!NewBieCenter.Instance.inGuiding && WindowCenter.Instance.IsOpen<AlchemyBaseWin>())
@@ -292,8 +358,22 @@
}
}
- 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();
+ }
}
}
@@ -314,5 +394,108 @@
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;
+ }
+ }
}
--
Gitblit v1.8.0