| | |
| | | [XLua.LuaCallCSharp]
|
| | | public class TreasureFindHostModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk
|
| | | {
|
| | | private Dictionary<int, List<FindTreasureInfo>> findTreasureDict = new Dictionary<int, List<FindTreasureInfo>>();
|
| | | PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
| | | TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
| | | |
| | | Dictionary<int, List<FindTreasureInfo>> findTreasures = new Dictionary<int, List<FindTreasureInfo>>();
|
| | |
|
| | | public List<int> treasureIdlist { get; set; }
|
| | | public event Action TreasureFindHostCompleteAct;
|
| | | public int[] specEquipIds { get; private set;}
|
| | |
|
| | | PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
| | | TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
| | | EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
| | |
|
| | | public override void Init()
|
| | | {
|
| | | findTreasureDict.Clear();
|
| | | List<TreasureFindHostConfig> findlist = TreasureFindHostConfig.GetValues();
|
| | | for(int i = 0; i < findlist.Count; i++)
|
| | | var configs = TreasureFindHostConfig.GetValues();
|
| | | foreach (var config in configs)
|
| | | {
|
| | | int treasureId = findlist[i].MagicWeaponID;
|
| | | if(!findTreasureDict.ContainsKey(treasureId))
|
| | | int treasureId = config.MagicWeaponID;
|
| | | List<FindTreasureInfo> list;
|
| | | if (!findTreasures.TryGetValue(treasureId, out list))
|
| | | {
|
| | | List<FindTreasureInfo> infolist = new List<FindTreasureInfo>();
|
| | | FindTreasureInfo treasureInfo = new FindTreasureInfo(findlist[i].ID);
|
| | | infolist.Add(treasureInfo);
|
| | | findTreasureDict.Add(treasureId,infolist);
|
| | | list = new List<FindTreasureInfo>();
|
| | | findTreasures.Add(treasureId, list);
|
| | | }
|
| | | else
|
| | | {
|
| | | FindTreasureInfo treasureInfo = new FindTreasureInfo(findlist[i].ID);
|
| | | findTreasureDict[treasureId].Add(treasureInfo);
|
| | | }
|
| | | var treasureInfo = new FindTreasureInfo(config.ID);
|
| | | list.Add(treasureInfo);
|
| | | }
|
| | |
|
| | | treasureIdlist = findTreasureDict.Keys.ToList();
|
| | | treasureIdlist = findTreasures.Keys.ToList();
|
| | | SetTreasureCellRedKey();
|
| | | PlayerDatas.Instance.playerDataRefreshEvent += RefreshPlayerData;
|
| | | playerPack.refreshItemCountEvent += RefreshEquipInfo;
|
| | | packModel.refreshItemCountEvent += RefreshEquipInfo;
|
| | | treasureModel.treasureStateChangeEvent += RefreshTreasureState;
|
| | | FuncConfigConfig SamboSpecialUnlock = FuncConfigConfig.Get("SamboSpecialUnlock");
|
| | | specEquipIds = ConfigParse.GetMultipleStr<int>(SamboSpecialUnlock.Numerical1);
|
| | | }
|
| | |
|
| | | public void OnBeforePlayerDataInitialize()
|
| | | {
|
| | | jumpTreasureId = 0;
|
| | | foreach (var list in findTreasureDict.Values)
|
| | | foreach (var list in findTreasures.Values)
|
| | | {
|
| | | for (int i = 0; i < list.Count; i++)
|
| | | {
|
| | |
| | | public override void UnInit()
|
| | | {
|
| | | PlayerDatas.Instance.playerDataRefreshEvent -= RefreshPlayerData;
|
| | | playerPack.refreshItemCountEvent -= RefreshEquipInfo;
|
| | | packModel.refreshItemCountEvent -= RefreshEquipInfo;
|
| | | treasureModel.treasureStateChangeEvent -= RefreshTreasureState;
|
| | | }
|
| | |
|
| | | public Dictionary<int, List<FindTreasureInfo>> GetFindTreasureInfoDict()
|
| | | {
|
| | | return findTreasureDict;
|
| | | return findTreasures;
|
| | | }
|
| | |
|
| | | public bool IsReachCondition(FindTreasureInfo treasureInfo,out int progress)
|
| | | public bool IsReachCondition(FindTreasureInfo treasureInfo)
|
| | | {
|
| | | progress = 0;
|
| | | if (treasureInfo == null) return false;
|
| | | if (treasureInfo == null)
|
| | | {
|
| | | return false;
|
| | | }
|
| | |
|
| | | switch(treasureInfo.type)
|
| | | {
|
| | | case 1:
|
| | | return CheckType1IsReachCondition(treasureInfo, out progress);
|
| | | case 2:
|
| | | return CheckType2IsReachCondition(treasureInfo, out progress);
|
| | | case 3:
|
| | | return CheckType3IsReachCondition(treasureInfo, out progress);
|
| | | case 4:
|
| | | return CheckType4IsReachCondition(treasureInfo,out progress);
|
| | | return CheckType1IsReachCondition(treasureInfo);
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | private bool CheckType1IsReachCondition(FindTreasureInfo treasureInfo, out int progress)
|
| | | private bool CheckType1IsReachCondition(FindTreasureInfo treasureInfo)
|
| | | {
|
| | | progress = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.CDBPlayerRefresh_FuncDef);
|
| | | if(progress < treasureInfo.targetNum)
|
| | | foreach (var findHostEquip in treasureInfo.findHostEquips)
|
| | | {
|
| | | return false;
|
| | | }
|
| | | else
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | |
|
| | | private bool CheckType2IsReachCondition(FindTreasureInfo treasureInfo, out int progress)
|
| | | {
|
| | | progress = 0;
|
| | | SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
|
| | | if (singlePack == null) return false;
|
| | |
|
| | |
|
| | | foreach (var condi in treasureInfo.needConditionsDict.Values)
|
| | | {
|
| | | progress = 0;
|
| | | ItemModel itemModel = playerPack.GetItemByIndex(PackType.Equip,condi[3]);
|
| | | if(itemModel != null)
|
| | | var equipGuid = equipModel.GetEquip(new Int2(findHostEquip.level, findHostEquip.place));
|
| | | if (!string.IsNullOrEmpty(equipGuid))
|
| | | {
|
| | | if(specEquipIds != null && specEquipIds.Contains(itemModel.itemId))
|
| | | var itemModel = packModel.GetItemByGuid(equipGuid);
|
| | | if (itemModel != null)
|
| | | {
|
| | | progress += 1;
|
| | | return true;
|
| | | }
|
| | | if(itemModel.config.LV >= condi[0]
|
| | | && itemModel.config.ItemColor >= condi[1]
|
| | | && itemModel.config.StarLevel >= condi[2])
|
| | | {
|
| | | progress += 1;
|
| | | return true;
|
| | | if (itemModel.config.ItemColor >= findHostEquip.itemColor)
|
| | | {
|
| | | if (findHostEquip.isSuit)
|
| | | {
|
| | | if (ItemLogicUtility.Instance.IsSuitEquip(itemModel.itemId))
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | private bool CheckType3IsReachCondition(FindTreasureInfo treasureInfo, out int progress)
|
| | | {
|
| | | progress = 0;
|
| | | SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
|
| | | if (singlePack == null) return false;
|
| | |
|
| | | Dictionary<int, ItemModel> equipDict = singlePack.GetAllItems();
|
| | | foreach(var model in equipDict.Values)
|
| | | {
|
| | | progress += model.config.StarLevel;
|
| | | }
|
| | | if(progress >= treasureInfo.targetNum)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | private bool CheckType4IsReachCondition(FindTreasureInfo treasureInfo,out int progress)
|
| | | {
|
| | | progress = 0;
|
| | | SinglePack singlePack = playerPack.GetSinglePack(PackType.Equip);
|
| | | if (singlePack == null) return false;
|
| | |
|
| | | Dictionary<int, ItemModel> equipDict = singlePack.GetAllItems();
|
| | | foreach(var condi in treasureInfo.needConditionsDict.Values)
|
| | | {
|
| | | progress = 0;
|
| | | if(progress >= treasureInfo.targetNum)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | |
| | | return false;
|
| | | }
|
| | |
|
| | |
| | | if (hostConfig != null)
|
| | | {
|
| | | List<FindTreasureInfo> infolist = null;
|
| | | findTreasureDict.TryGetValue(hostConfig.MagicWeaponID,out infolist);
|
| | | findTreasures.TryGetValue(hostConfig.MagicWeaponID,out infolist);
|
| | | if(infolist != null)
|
| | | {
|
| | | for (int i = 0; i < infolist.Count; i++)
|
| | |
| | | {
|
| | | progress = 0;
|
| | | List<FindTreasureInfo> infolist = null;
|
| | | findTreasureDict.TryGetValue(treasureId,out infolist);
|
| | | if (infolist == null) return false;
|
| | | findTreasures.TryGetValue(treasureId,out infolist);
|
| | | if (infolist == null)
|
| | | {
|
| | | return false;
|
| | | }
|
| | |
|
| | | for(int i = 0; i < infolist.Count; i++)
|
| | | {
|
| | |
| | |
|
| | | private void RefreshTreasureState(int id)
|
| | | {
|
| | | if (!findTreasureDict.ContainsKey(id)) return;
|
| | | if (!findTreasures.ContainsKey(id)) return;
|
| | |
|
| | | Treasure treasure = null;
|
| | | treasureModel.TryGetTreasure(id, out treasure);
|
| | |
| | | public bool CheckTreasureFindHostFinish()
|
| | | {
|
| | | bool isfinish = true;
|
| | | foreach (var id in findTreasureDict.Keys)
|
| | | foreach (var id in findTreasures.Keys)
|
| | | {
|
| | | Treasure treasure = null;
|
| | | treasureModel.TryGetTreasure(id, out treasure);
|
| | |
| | | {
|
| | | treasureCellRedDict.Clear();
|
| | | int i = 0;
|
| | | foreach(var id in findTreasureDict.Keys)
|
| | | foreach(var id in findTreasures.Keys)
|
| | | {
|
| | | int redKey = TreasureFindHost_RedKey * 100 + i;
|
| | | Redpoint redpoint = new Redpoint(TreasureFindHost_RedKey,redKey);
|
| | |
| | |
|
| | | private void RefreshEquipInfo(PackType type, int index, int itemId)
|
| | | {
|
| | | if (type != PackType.Equip) return;
|
| | | if (type != PackType.Equip)
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | for (int i = 0; i < treasureIdlist.Count; i++)
|
| | | {
|
| | |
| | | }
|
| | | if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.TreasureFindHost)) return;
|
| | |
|
| | | List<FindTreasureInfo> list = findTreasureDict[treasureId];
|
| | | int progress = 0;
|
| | | List<FindTreasureInfo> list = findTreasures[treasureId];
|
| | | for (int i = 0; i < list.Count; i++)
|
| | | {
|
| | | bool isReach = IsReachCondition(list[i],out progress);
|
| | | bool isReach = IsReachCondition(list[i]);
|
| | | if(!list[i].IsCompleted && isReach)
|
| | | {
|
| | | treasureCellRedDict[treasureId].state = RedPointState.Simple;
|
| | |
| | | Treasure treasure = null;
|
| | | treasureModel.TryGetTreasure(treasureId, out treasure);
|
| | |
|
| | | var progress = 0;
|
| | | if (IsReachUnlock(treasureId,out progress)
|
| | | && treasure != null && treasure.state != TreasureState.Collected)
|
| | | {
|
| | |
| | |
|
| | | public class FindTreasureInfo
|
| | | {
|
| | | public int id;
|
| | | public int treasureId;
|
| | | public int type;
|
| | | public int targetNum;
|
| | | public int jumpId;
|
| | | public Dictionary<int, List<int>> needConditionsDict = new Dictionary<int, List<int>>();
|
| | | public Dictionary<int, List<int>> awardItemDict = new Dictionary<int, List<int>>();
|
| | | public Dictionary<int, List<int>> awardMoneyDict = new Dictionary<int, List<int>>();
|
| | | public Dictionary<int, List<int>> adviceItemIdDict = new Dictionary<int, List<int>>();
|
| | | public readonly int id;
|
| | | public readonly int treasureId;
|
| | | public readonly int type;
|
| | | public readonly int targetNum;
|
| | | public readonly int jumpId;
|
| | |
|
| | | public List<FindHostEquip> findHostEquips { get; private set; }
|
| | | public List<Item> findHostItems = new List<Item>();
|
| | | public List<FindHostMoney> findHostMoneys = new List<FindHostMoney>();
|
| | | public Dictionary<int, List<int>> findRecommandItems = new Dictionary<int, List<int>>();
|
| | |
|
| | | public bool IsCompleted;
|
| | |
|
| | | public FindTreasureInfo(int id)
|
| | | {
|
| | | needConditionsDict.Clear();
|
| | | awardItemDict.Clear();
|
| | | awardMoneyDict.Clear();
|
| | | adviceItemIdDict.Clear();
|
| | | var config = TreasureFindHostConfig.Get(id);
|
| | |
|
| | | this.id = id;
|
| | | this.type = config.Type;
|
| | | this.targetNum = config.NeedCnt;
|
| | | this.jumpId = config.JumpID;
|
| | | this.treasureId = config.MagicWeaponID;
|
| | |
|
| | | IsCompleted = false;
|
| | | TreasureFindHostConfig hostConfig = TreasureFindHostConfig.Get(id);
|
| | | this.type = hostConfig.Type;
|
| | | this.targetNum = hostConfig.NeedCnt;
|
| | | this.jumpId = hostConfig.JumpID;
|
| | | this.treasureId = hostConfig.MagicWeaponID;
|
| | | JsonData needCondiData = JsonMapper.ToObject(hostConfig.Condition);
|
| | | if(needCondiData.IsArray)
|
| | |
|
| | | switch (type)
|
| | | {
|
| | | for(int i = 0; i < needCondiData.Count; i++)
|
| | | {
|
| | | List<int> condlist = new List<int>();
|
| | | needConditionsDict.Add(i,condlist);
|
| | | if (needCondiData[i].IsArray)
|
| | | case 1:
|
| | | var equipArray = JsonMapper.ToObject<int[][]>(config.Condition);
|
| | | findHostEquips = new List<FindHostEquip>();
|
| | | for (int i = 0; i < equipArray.Length; i++)
|
| | | {
|
| | | for(int j = 0; j < needCondiData[i].Count;j++)
|
| | | findHostEquips.Add(new FindHostEquip()
|
| | | {
|
| | | condlist.Add(int.Parse(needCondiData[i][j].ToString()));
|
| | | }
|
| | | level = equipArray[i][0],
|
| | | itemColor = equipArray[i][1],
|
| | | isSuit = equipArray[i][2] == 1,
|
| | | place = equipArray[i][3],
|
| | | });
|
| | | }
|
| | | else
|
| | | {
|
| | | condlist.Add(int.Parse(needCondiData[i].ToString()));
|
| | | }
|
| | | }
|
| | | break;
|
| | | }
|
| | |
|
| | | JsonData awardItemData = JsonMapper.ToObject(hostConfig.AwardItemList);
|
| | | if(awardItemData.IsArray)
|
| | | var itemArray = JsonMapper.ToObject<int[][]>(config.AwardItemList);
|
| | | for (int i = 0; i < itemArray.Length; i++)
|
| | | {
|
| | | for(int i= 0; i < awardItemData.Count;i++)
|
| | | findHostItems.Add(new Item()
|
| | | {
|
| | | List<int> awardlist = new List<int>();
|
| | | awardItemDict.Add(i, awardlist);
|
| | | if (awardItemData[i].IsArray)
|
| | | {
|
| | | for(int j = 0; j < awardItemData[i].Count; j++)
|
| | | {
|
| | | awardlist.Add(int.Parse(awardItemData[i][j].ToString()));
|
| | | }
|
| | | }
|
| | | }
|
| | | id = itemArray[i][0],
|
| | | count = itemArray[i][1],
|
| | | });
|
| | | }
|
| | |
|
| | | JsonData awardMoneyData = JsonMapper.ToObject(hostConfig.Money);
|
| | | if (awardMoneyData.IsArray)
|
| | | var moneyArray = JsonMapper.ToObject<int[][]>(config.Money);
|
| | | for (int i = 0; i < moneyArray.Length; i++)
|
| | | {
|
| | | for (int i = 0; i < awardMoneyData.Count; i++)
|
| | | findHostMoneys.Add(new FindHostMoney()
|
| | | {
|
| | | List<int> awardlist = new List<int>();
|
| | | awardMoneyDict.Add(i, awardlist);
|
| | | if (awardMoneyData[i].IsArray)
|
| | | {
|
| | | for (int j = 0; j < awardMoneyData[i].Count; j++)
|
| | | {
|
| | | awardlist.Add(int.Parse(awardMoneyData[i][j].ToString()));
|
| | | }
|
| | | }
|
| | | }
|
| | | moneyType = moneyArray[i][0],
|
| | | count = moneyArray[i][1],
|
| | | });
|
| | | }
|
| | |
|
| | | JsonData adviceData = JsonMapper.ToObject(hostConfig.AdviceIds);
|
| | | foreach(var job in adviceData.Keys)
|
| | | var recommandJson = JsonMapper.ToObject(config.AdviceIds);
|
| | | foreach (var jobKey in recommandJson.Keys)
|
| | | {
|
| | | List<int> idlist = new List<int>();
|
| | | adviceItemIdDict.Add(int.Parse(job),idlist);
|
| | | if(adviceData[job].IsArray)
|
| | | var items = new List<int>();
|
| | | findRecommandItems.Add(int.Parse(jobKey), items);
|
| | | var array = LitJson.JsonMapper.ToObject<int[]>(recommandJson[jobKey].ToJson());
|
| | | for (int i = 0; i < array.Length; i++)
|
| | | {
|
| | | for(int i = 0; i < adviceData[job].Count; i++)
|
| | | {
|
| | | idlist.Add(int.Parse(adviceData[job][i].ToString()));
|
| | | }
|
| | | items.Add(array[i]);
|
| | | }
|
| | | }
|
| | | |
| | | }
|
| | | }
|
| | |
|
| | | public struct FindHostEquip
|
| | | {
|
| | | public int level;
|
| | | public int place;
|
| | | public int itemColor;
|
| | | public bool isSuit;
|
| | | }
|
| | |
|
| | | public struct FindHostMoney
|
| | | {
|
| | | public int moneyType;
|
| | | public int count;
|
| | | }
|
| | | }
|