//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, January 20, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System;
|
|
|
namespace vnxbqy.UI
|
{
|
|
public class BetterEquipGetModel : Model, IBeforePlayerDataInitialize, ISwitchAccount
|
{
|
PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public string currentEquipGuid { get; private set; }
|
|
Dictionary<string, ItemModel> betterEquipModels = new Dictionary<string, ItemModel>();
|
|
public event Action showEquipRefreshEvent;
|
|
public override void Init()
|
{
|
ItemLogicUtility.Instance.GetBetterEquipEvent += OnGetBetterEquip;
|
playerPack.refrechPackEvent += OnPackageRefresh;
|
playerPack.refreshItemCountEvent += OnPackageItemRefresh;
|
KnapsackTimeCDMgr.Instance.RefresCoolTimeAct += UpdateCoolTime;
|
ParseConfig();
|
}
|
|
public override void UnInit()
|
{
|
ItemLogicUtility.Instance.GetBetterEquipEvent -= OnGetBetterEquip;
|
playerPack.refrechPackEvent -= OnPackageRefresh;
|
playerPack.refreshItemCountEvent -= OnPackageItemRefresh;
|
KnapsackTimeCDMgr.Instance.RefresCoolTimeAct -= UpdateCoolTime;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
}
|
|
public void OnSwitchAccount()
|
{
|
currentEquipGuid = string.Empty;
|
}
|
|
#region 解析本地表
|
public int autoEquipLvLimit { get; private set; }
|
public int autoEquipCoolTime { get; private set; }
|
|
public void ParseConfig()
|
{
|
FuncConfigConfig equipAutoEquip = FuncConfigConfig.Get("EquipAutoEquip");
|
autoEquipLvLimit = int.Parse(equipAutoEquip.Numerical1);
|
autoEquipCoolTime = int.Parse(equipAutoEquip.Numerical2);
|
|
}
|
#endregion
|
|
private void UpdateCoolTime(string guid)
|
{
|
ItemModel _equip = null;
|
if (TryGetBetterEquip(guid, out _equip))
|
{
|
var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(guid);
|
bool isCoolEnd = coolData == null || coolData.GetRemainTime() <= 0 ? true : false;
|
if (isCoolEnd)
|
{
|
DebugEx.Log("UpdateCoolTime:" + _equip.itemId);
|
ItemOperateUtility.Instance.PutOnItem(guid);
|
ReportConfirmBetterEquip(guid);
|
}
|
}
|
}
|
|
public bool TryGetBetterEquip(string _guid, out ItemModel _equip)
|
{
|
return betterEquipModels.TryGetValue(_guid, out _equip);
|
}
|
|
public void ReportConfirmBetterEquip(string _guid)
|
{
|
betterEquipModels.Remove(_guid);
|
|
var tempGuid = GetOneEquip();
|
if (tempGuid != currentEquipGuid)
|
{
|
currentEquipGuid = tempGuid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
}
|
}
|
|
public int GetShowItemQuality()
|
{
|
if (string.IsNullOrEmpty(currentEquipGuid))
|
{
|
return 0;
|
}
|
else
|
{
|
ItemModel item;
|
if (TryGetBetterEquip(currentEquipGuid, out item))
|
{
|
return item.config.ItemColor;
|
}
|
else
|
{
|
return 0;
|
}
|
}
|
}
|
|
public int GetShowEquipPlace()
|
{
|
if (string.IsNullOrEmpty(currentEquipGuid))
|
{
|
return 0;
|
}
|
else
|
{
|
ItemModel item;
|
if (TryGetBetterEquip(currentEquipGuid, out item))
|
{
|
return item.config.EquipPlace;
|
}
|
else
|
{
|
return 0;
|
}
|
}
|
}
|
|
private void OnGetBetterEquip(string guid)
|
{
|
var betterModel = playerPack.GetItemByGuid(guid);
|
ItemModel oldBetterEquip = null;
|
if (TryGetEquipByPlace(betterModel.config.EquipPlace, out oldBetterEquip))
|
{
|
var oldGrade = oldBetterEquip != null ? oldBetterEquip.score : 0;
|
if (betterModel.score >= oldGrade)
|
{
|
RemoveItemByEquipPlace(betterModel.config.EquipPlace);
|
}
|
}
|
|
betterEquipModels[guid] = betterModel;
|
if (guid != currentEquipGuid)
|
{
|
if (!string.IsNullOrEmpty(guid))
|
{
|
var sourcelist = betterModel.GetUseData((int)ItemUseDataKey.source);
|
if (sourcelist != null && sourcelist[0] == 4)
|
{
|
SnxxzGame.Instance.StartCoroutine(Co_DelayRefreshBetterEquip(guid));
|
}
|
else
|
{
|
currentEquipGuid = guid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
}
|
}
|
else
|
{
|
currentEquipGuid = guid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
}
|
}
|
}
|
|
public bool CheckIsAutoEquip(ItemModel itemModel)
|
{
|
if (itemModel == null
|
|| itemModel.config.EquipPlace > 12
|
|| itemModel.config.EquipPlace == (int)RoleEquipType.Wing
|
|| itemModel.config.EquipPlace == (int)RoleEquipType.Guard) return false;
|
|
int playerLv = PlayerDatas.Instance.baseData.LV;
|
if (playerLv > autoEquipLvLimit) return false;
|
|
if (itemModel.config.ItemColor < 3)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
IEnumerator Co_DelayRefreshBetterEquip(string _guid)
|
{
|
yield return WaitingForSecondConst.WaitMS2000;
|
currentEquipGuid = _guid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
var betterModel = playerPack.GetItemByGuid(_guid);
|
}
|
|
private void OnPackageRefresh(PackType _packType)
|
{
|
var keys = new List<string>(betterEquipModels.Keys);
|
for (int i = keys.Count - 1; i >= 0; i--)
|
{
|
var guid = keys[i];
|
var itemModel = playerPack.GetItemByGuid(guid);
|
if (itemModel == null
|
|| (itemModel.packType != PackType.Item))
|
{
|
betterEquipModels.Remove(guid);
|
}
|
}
|
|
var tempGuid = GetOneEquip();
|
if (tempGuid != currentEquipGuid)
|
{
|
if (!string.IsNullOrEmpty(tempGuid))
|
{
|
var itemModel = playerPack.GetItemByGuid(tempGuid);
|
var sourcelist = itemModel.GetUseData((int)ItemUseDataKey.source);
|
if (sourcelist != null && sourcelist[0] == 4)
|
{
|
SnxxzGame.Instance.StartCoroutine(Co_DelayRefreshBetterEquip(tempGuid));
|
}
|
else
|
{
|
currentEquipGuid = tempGuid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
}
|
}
|
else
|
{
|
currentEquipGuid = tempGuid;
|
if (showEquipRefreshEvent != null)
|
{
|
showEquipRefreshEvent();
|
}
|
}
|
}
|
}
|
|
private void OnPackageItemRefresh(PackType _packType, int _index, int _itemId)
|
{
|
switch (_packType)
|
{
|
case PackType.Equip:
|
var item = playerPack.GetItemByIndex(_packType, _index);
|
if (item != null)
|
{
|
RemoveLowGradeItemByEquipPlace(item.config.EquipPlace, item.score);
|
}
|
break;
|
default:
|
var itemConfig = ItemConfig.Get(_itemId);
|
var packType = GeneralDefine.GetPackTypeByItemType(itemConfig.Type);
|
var itemModel = playerPack.GetItemByIndex(packType, _index);
|
if (itemModel == null)
|
{
|
OnPackageRefresh(_packType);
|
}
|
break;
|
}
|
}
|
|
private string GetOneEquip()
|
{
|
var guid = string.Empty;
|
foreach (var key in betterEquipModels.Keys)
|
{
|
guid = key;
|
break;
|
}
|
|
return guid;
|
}
|
|
private void RemoveItemByEquipPlace(int place)
|
{
|
var keys = new List<string>(betterEquipModels.Keys);
|
for (int i = keys.Count - 1; i >= 0; i--)
|
{
|
var item = betterEquipModels[keys[i]];
|
if (item != null && item.config.EquipPlace == place)
|
{
|
betterEquipModels.Remove(keys[i]);
|
}
|
}
|
}
|
|
private void RemoveLowGradeItemByEquipPlace(int _place, int _score)
|
{
|
var keys = new List<string>(betterEquipModels.Keys);
|
for (int i = keys.Count - 1; i >= 0; i--)
|
{
|
var item = betterEquipModels[keys[i]];
|
if (item != null && item.config.EquipPlace == _place && item.score <= _score)
|
{
|
betterEquipModels.Remove(keys[i]);
|
}
|
}
|
}
|
|
private bool TryGetEquipByPlace(int place, out ItemModel _itemModel)
|
{
|
var keys = new List<string>(betterEquipModels.Keys);
|
for (int i = keys.Count - 1; i >= 0; i--)
|
{
|
var item = betterEquipModels[keys[i]];
|
if (item != null && item.config.EquipPlace == place)
|
{
|
_itemModel = item;
|
return true;
|
}
|
}
|
|
_itemModel = null;
|
return false;
|
}
|
|
public bool ShowBetterEquipAble()
|
{
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var lineId = PlayerDatas.Instance.baseData.dungeonLineId;
|
var dungeonId = dungeonModel.GetDungeonId(dungeonModel.GetDataMapIdByMapId(mapId), lineId);
|
if (dungeonId == 0)
|
{
|
return true;
|
}
|
else
|
{
|
var config = DungeonConfig.Get(dungeonId);
|
return config.ShowNewItemTip == 1;
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|