using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using Snxxz.UI;
|
using System;
|
using System.Text.RegularExpressions;
|
|
public class ExchangeActiveTokenModel : Model
|
{
|
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>(); } }
|
public HashSet<ItemModel> ChoseEquips { get; private set; }
|
public int NewActivePoint { get; private set; }
|
|
public int SuitEquipActiveCount { get; private set; }
|
public int NormalEquipActiveCount { get; private set; }
|
|
public event Action RefreshActiveCanGetEvent;
|
public event Action ExchangetSuccessEvent;
|
|
public override void Init()
|
{
|
ChoseEquips = new HashSet<ItemModel>();
|
ParseConfig();
|
}
|
|
public override void UnInit()
|
{
|
|
}
|
|
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.JobLimit != PlayerDatas.Instance.baseData.Job)
|
{
|
return false;
|
}
|
var equipGUID = m_EquipModel.GetEquip(new Int2(1, item.config.Type - 100));
|
var equip = m_PackModel.GetItemByGuid(equipGUID);
|
if(equip == null)
|
{
|
return true;
|
}
|
if(equip.config.LV < item.config.LV)
|
{
|
return true;
|
}
|
if(equip.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)
|
{
|
if(equip.config.SuiteiD == 0)
|
{
|
totalCount += NormalEquipActiveCount;
|
}
|
else
|
{
|
totalCount += SuitEquipActiveCount;
|
}
|
}
|
return totalCount;
|
}
|
|
public void ParseConfig()
|
{
|
Regex r = new Regex(@"\[(\d+),(\d+)\]");
|
var res = r.Match(FuncConfigConfig.Get("FamilyDonate").Numerical1);
|
NormalEquipActiveCount = int.Parse(res.Groups[1].Value);
|
SuitEquipActiveCount = int.Parse(res.Groups[2].Value);
|
}
|
|
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()
|
{
|
ChoseEquips.Clear();
|
SinglePack.FilterParams par = new SinglePack.FilterParams();
|
par.qualitys = new List<int>() { 4 };
|
par.itemTypes = new List<int>() { 101, 102, 103, 104, 105, 106, 107, 108 };
|
var suitEquips = m_PackModel.GetItems(PackType.Item, par);
|
Int2 equPos = new Int2(1, 1);
|
bool bIsAllEquMaxStar = true;
|
|
for (int i = 1; i < 9; ++i)
|
{
|
equPos.y = i;
|
int posStarLevel = m_EquipStarModel.GetStarLevel(equPos);
|
int equMaxStarLevel = m_EquipStarModel.GetEquipPositionMaxStarLevel(equPos);
|
if(equMaxStarLevel > posStarLevel || equMaxStarLevel == 0)
|
{
|
bIsAllEquMaxStar = false;
|
break;
|
}
|
|
}
|
|
var playerJob = PlayerDatas.Instance.baseData.Job;
|
//物品排序
|
for (int i = 0; i < suitEquips.Count; i++)
|
{
|
var iEqu = suitEquips[i];
|
|
if (bIsAllEquMaxStar)
|
{
|
if(!IsBetterThanBodyEquip(iEqu))
|
{
|
ChoseEquips.Add(iEqu);
|
}
|
}
|
|
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;
|
}
|
}
|
return suitEquips;
|
}
|
|
}
|