using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using vnxbqy.UI;
|
using System;
|
using System.Text.RegularExpressions;
|
|
public class ExchangeActiveTokenModel : Model, IPlayerLoginOk
|
{
|
private PackModel m_PackModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
private EquipStarModel m_EquipStarModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
|
private EquipModel m_EquipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
private Dictionary<int, bool> m_RealmEquIsAllMaxStarDic = new Dictionary<int, bool>();
|
private int? m_MaxEquLv = null;
|
|
public HashSet<ItemModel> ChoseEquips { get; private set; }
|
public int NewActivePoint { get; private set; }
|
|
//指定物品ID兑换
|
private Dictionary<int, int> m_ItemExcahngeActiveCountDic = new Dictionary<int, int>();
|
//装备品质兑换
|
Dictionary<int, int[]> FamilyDonateDict = new Dictionary<int, int[]>();
|
|
public event Action RefreshActiveCanGetEvent;
|
public event Action ExchangetSuccessEvent;
|
|
|
|
public override void Init()
|
{
|
ChoseEquips = new HashSet<ItemModel>();
|
//ParseConfig();
|
//m_PackModel.refreshItemCountEvent += RefreshRealmEquIsAllMaxStarDicAndRedPoint;
|
}
|
|
|
public override void UnInit()
|
{
|
//m_PackModel.refreshItemCountEvent -= RefreshRealmEquIsAllMaxStarDicAndRedPoint;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
//UpdateExchangeBtnRedPoint();
|
}
|
|
#region 交换活跃度按钮红点
|
public const int ExchangeBtnRedPointID = 1070119;
|
public Redpoint ExchangeBtnRedPoint = new Redpoint(10701, ExchangeBtnRedPointID);
|
|
public void UpdateExchangeBtnRedPoint()
|
{
|
GetShowEquips(false);
|
if (ChoseEquips.Count > 0)
|
{
|
ExchangeBtnRedPoint.state = RedPointState.Simple;
|
}
|
else
|
{
|
ExchangeBtnRedPoint.state = RedPointState.None;
|
}
|
}
|
|
#endregion
|
|
public void RefreshRealmEquIsAllMaxStarDicAndRedPoint(PackType type, int index, int itemId)
|
{
|
if (type != PackType.Equip && type != PackType.Item)
|
{
|
return;
|
}
|
int lv = ItemConfig.Get(itemId).LV;
|
SetRealmEquIsAllMaxStar(lv);
|
//foreach (var value in m_RealmEquIsAllMaxStarDic.Values)
|
//{
|
// if (value)
|
// {
|
// UpdateExchangeBtnRedPoint();
|
// break;
|
// }
|
//}
|
}
|
//某个境界的装备是否满级
|
public void SetRealmEquIsAllMaxStar(int Lv)
|
{
|
Int2 equPos = new Int2(Lv, 1);
|
bool bIsAllEquMaxStar = true;
|
bIsAllEquMaxStar = true;
|
for (int j = 1; j < 9; j++)
|
{
|
equPos.y = j;
|
int posStarLevel = m_EquipStarModel.GetStarLevel(equPos);
|
int equMaxStarLevel = m_EquipStarModel.GetEquipPositionMaxStarLevel(equPos);
|
if (equMaxStarLevel > posStarLevel || equMaxStarLevel == 0)
|
{
|
bIsAllEquMaxStar = false;
|
break;
|
}
|
}
|
m_RealmEquIsAllMaxStarDic[Lv] = bIsAllEquMaxStar;
|
}
|
|
public void ReciveExchangeResult(HA502_tagMCFamilyActivityExchangeResult info)
|
{
|
NewActivePoint = (int)info.Point;
|
WindowCenter.Instance.Open<ExchangeActiveSuccessWin>();
|
if (ExchangetSuccessEvent != null)
|
{
|
ExchangetSuccessEvent();
|
}
|
}
|
|
private bool IsBetterThanBodyEquip(ItemModel item)
|
{
|
if (item.config.EquipPlace == 0)
|
{
|
return false;
|
}
|
if (item.config.JobLimit != PlayerDatas.Instance.baseData.Job)
|
{
|
return false;
|
}
|
int score = 0;
|
var pos = new Int2(item.config.LV, item.config.EquipPlace);
|
var index = EquipSet.ClientPlaceToServerPlace(pos);
|
var itemModel = m_PackModel.GetItemByIndex(PackType.Equip, index);
|
if (itemModel == null)
|
{
|
score = 0;
|
}
|
else
|
{
|
score = itemModel.score;
|
}
|
|
if (score < item.score)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
public void EquipCellClick(ItemModel item, Action CellAct)
|
{
|
if (ChoseEquips.Contains(item))
|
{
|
ChoseEquips.Remove(item);
|
}
|
else
|
{
|
ChoseEquips.Add(item);
|
|
}
|
CellAct();
|
if (RefreshActiveCanGetEvent != null)
|
{
|
RefreshActiveCanGetEvent();
|
}
|
|
}
|
|
public int GetTotalActiveCount()
|
{
|
int totalCount = 0;
|
foreach (var equip in ChoseEquips)
|
{
|
//指定物品ID兑换数量
|
if (m_ItemExcahngeActiveCountDic.ContainsKey(equip.itemId))
|
{
|
totalCount += m_ItemExcahngeActiveCountDic[equip.itemId] * equip.count;
|
continue;
|
}
|
|
//根据装备品质兑换
|
if (!FamilyDonateDict.ContainsKey(equip.config.ItemColor))
|
{
|
continue;
|
}
|
if (equip.config.SuiteiD == 0)
|
{
|
totalCount += FamilyDonateDict[equip.config.ItemColor][0];
|
}
|
else
|
{
|
totalCount += FamilyDonateDict[equip.config.ItemColor][1];
|
}
|
}
|
return totalCount;
|
}
|
|
public void ParseConfig()
|
{
|
|
FamilyDonateDict = new Dictionary<int, int[]>();
|
var cfg = FuncConfigConfig.Get("FamilyDonate");
|
var _json = LitJson.JsonMapper.ToObject(cfg.Numerical1);
|
foreach (var _key in _json.Keys)
|
{
|
var color = int.Parse(_key);
|
FamilyDonateDict.Add(color, LitJson.JsonMapper.ToObject<int[]>(_json[_key].ToJson()));
|
}
|
|
if (cfg.Numerical2 != string.Empty)
|
{
|
var res2 = cfg.Numerical2.Split('|');
|
for (int i = 0; i < res2.Length; i++)
|
{
|
var info = res2[i].Split('_');
|
m_ItemExcahngeActiveCountDic[int.Parse(info[0])] = int.Parse(info[1]);
|
}
|
}
|
}
|
|
public void SendExchangeRequest()
|
{
|
if (ChoseEquips.Count == 0)
|
{
|
return;
|
}
|
Action SendInfo = () =>
|
{
|
var info = new CA606_tagCMFamilyActivityExchange();
|
info.Count = (byte)ChoseEquips.Count;
|
info.IndexList = new ushort[info.Count];
|
info.ItemIDList = new uint[info.Count];
|
int i = 0;
|
foreach (var equip in ChoseEquips)
|
{
|
info.IndexList[i] = (ushort)equip.gridIndex;
|
info.ItemIDList[i] = (uint)equip.itemId;
|
i++;
|
}
|
GameNetSystem.Instance.SendInfo(info);
|
};
|
bool bIsHasBetterEquip = false;
|
foreach (var equip in ChoseEquips)
|
{
|
if (IsBetterThanBodyEquip(equip))
|
{
|
bIsHasBetterEquip = true;
|
break;
|
}
|
}
|
if (bIsHasBetterEquip)
|
{
|
ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
|
Language.Get("ExchangeActiveTokenWin_Tip_4"),
|
(bIsExchange) =>
|
{
|
if (bIsExchange)
|
{
|
SendInfo();
|
}
|
});
|
}
|
else
|
{
|
SendInfo();
|
}
|
|
}
|
|
|
|
public List<ItemModel> GetShowEquips(bool bIsNeedSort = true)
|
{
|
ChoseEquips.Clear();
|
SinglePack.FilterParams par = new SinglePack.FilterParams();
|
par.qualitys = new List<int>();
|
foreach (var color in FamilyDonateDict.Keys)
|
{
|
par.qualitys.Add(color);
|
}
|
par.itemTypes = new List<int>() { 101, 102, 103, 104, 105, 106, 107, 108 };
|
var suitEquips = m_PackModel.GetItems(PackType.Item, par);
|
//SetRealmEquIsAllMaxStarDic();
|
var playerJob = PlayerDatas.Instance.baseData.Job;
|
//物品排序
|
for (int i = 0; i < suitEquips.Count; i++)
|
{
|
var iEqu = suitEquips[i];
|
|
if (!ItemLogicUtility.Instance.IsJobCompatibleItem(iEqu.itemId) && !iEqu.isAuction)
|
{
|
ChoseEquips.Add(iEqu);
|
}
|
|
if (!m_RealmEquIsAllMaxStarDic.ContainsKey(iEqu.config.LV))
|
{
|
SetRealmEquIsAllMaxStar(iEqu.config.LV);
|
}
|
if (m_RealmEquIsAllMaxStarDic[iEqu.config.LV])
|
{
|
if (!IsBetterThanBodyEquip(iEqu))
|
{
|
ChoseEquips.Add(iEqu);
|
}
|
}
|
if (!bIsNeedSort)
|
{
|
continue;
|
}
|
for (int j = i - 1; j >= 0; j--)
|
{
|
var jEqu = suitEquips[j];
|
bool bHasIEqu = ChoseEquips.Contains(iEqu);
|
bool bHasJEqu = ChoseEquips.Contains(jEqu);
|
if (!bHasIEqu && bHasJEqu)
|
{
|
break;
|
}
|
if (bHasIEqu && !bHasJEqu)
|
{
|
goto Swap;
|
}
|
if (iEqu.config.LV > jEqu.config.LV)
|
{
|
break;
|
}
|
if (iEqu.config.LV < jEqu.config.LV)
|
{
|
goto Swap;
|
}
|
if (iEqu.config.JobLimit > jEqu.config.JobLimit)
|
{
|
break;
|
}
|
if (iEqu.config.JobLimit < jEqu.config.JobLimit)
|
{
|
goto Swap;
|
}
|
if (iEqu.config.Type > jEqu.config.Type)
|
{
|
break;
|
}
|
if (iEqu.config.Type < jEqu.config.Type)
|
{
|
goto Swap;
|
}
|
if (iEqu.score >= jEqu.score)
|
{
|
break;
|
}
|
Swap:
|
suitEquips[j + 1] = jEqu;
|
suitEquips[j] = iEqu;
|
}
|
}
|
//添加物品额外物体
|
foreach (var itemId in m_ItemExcahngeActiveCountDic.Keys)
|
{
|
suitEquips.AddRange(m_PackModel.GetItemsById(PackType.Item, itemId));
|
}
|
|
|
|
return suitEquips;
|
}
|
|
|
}
|