using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
|
using Snxxz.UI;
|
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
public class PersonalBossModel : Model
|
{
|
public const int PERSONALBOSS_MAPID = 31240;
|
public const int PERSONAL_REDPOINTID = 76003;
|
|
public Redpoint personalRedpoint = new Redpoint(FindPreciousModel.FINDPRECIOUS_REDPOINTID, PERSONAL_REDPOINTID);
|
|
int m_SelectedBoss = 0;
|
public int selectedBoss {
|
get {
|
return this.m_SelectedBoss;
|
}
|
set {
|
if (this.m_SelectedBoss != value)
|
{
|
this.m_SelectedBoss = value;
|
if (bossSelectedEvent != null)
|
{
|
bossSelectedEvent(value);
|
}
|
}
|
}
|
}
|
|
public event Action<int> bossSelectedEvent;
|
List<int> sortedBossIds = new List<int>();
|
Dictionary<int, PersonalBossData> personalBosses = new Dictionary<int, PersonalBossData>();
|
int dungeonTicket = 0;
|
|
FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
public override void Init()
|
{
|
ParseConfig();
|
playerPack.refreshItemCountEvent += RefreshItemCount;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataChange;
|
dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange;
|
}
|
|
public override void UnInit()
|
{
|
playerPack.refreshItemCountEvent -= RefreshItemCount;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataChange;
|
dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordChange;
|
}
|
|
public void RequestSetDungeonAction()
|
{
|
var sendInfo = new CA508_tagCMDoFBAction();
|
sendInfo.ActionType = 0;
|
sendInfo.ActionInfo = (uint)selectedBoss;
|
GameNetSystem.Instance.SendInfo(sendInfo);
|
}
|
|
public bool TryGetBossData(int _bossId, out PersonalBossData _data)
|
{
|
return personalBosses.TryGetValue(_bossId, out _data);
|
}
|
|
public List<int> GetPersonalBosses()
|
{
|
var bosses = new List<int>();
|
var lockedCount = 0;
|
for (int i = 0; i < sortedBossIds.Count; i++)
|
{
|
var bossId = sortedBossIds[i];
|
if (findPreciousModel.IsBossUnlock(bossId))
|
{
|
bosses.Add(bossId);
|
}
|
else
|
{
|
if (lockedCount < 2)
|
{
|
bosses.Add(bossId);
|
lockedCount++;
|
}
|
}
|
}
|
|
return bosses;
|
}
|
|
public int GetRecommendBoss()
|
{
|
for (int i = sortedBossIds.Count - 1; i >= 0; i--)
|
{
|
var bossId = sortedBossIds[i];
|
if (findPreciousModel.IsBossUnlock(bossId))
|
{
|
return bossId;
|
}
|
}
|
|
return sortedBossIds[0];
|
}
|
|
public int GetBossNpcId(int lineId)
|
{
|
var configs = PersonalBossConfig.GetValues();
|
foreach (var config in configs)
|
{
|
if (config.lineId == lineId)
|
{
|
return config.NPCID;
|
}
|
}
|
|
return 0;
|
}
|
|
private void OnPlayerDataChange(PlayerDataType _type)
|
{
|
if (_type == PlayerDataType.VIPLv)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
private void RefreshItemCount(PackType type, int index, int id)
|
{
|
if (type == PackType.Item && id == dungeonTicket)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
private void OnDungeonRecordChange(int _id)
|
{
|
if (_id == PERSONALBOSS_MAPID)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
|
public void UpdateRedpoint()
|
{
|
if (!FuncOpen.Instance.IsFuncOpen(76))
|
{
|
return;
|
}
|
|
var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
var enterTimes = dungeonModel.GetEnterTimes(PERSONALBOSS_MAPID);
|
var totalTimes = dungeonModel.GetTotalTimes(PERSONALBOSS_MAPID);
|
|
if (enterTimes >= totalTimes)
|
{
|
personalRedpoint.count = 0;
|
personalRedpoint.state = RedPointState.None;
|
return;
|
}
|
|
var ticketItem = dungeonModel.GetTicketCost(PERSONALBOSS_MAPID);
|
var own = playerPack.GetItemCountByID(PackType.Item, ticketItem.id);
|
|
if (own < ticketItem.count)
|
{
|
personalRedpoint.count = 0;
|
personalRedpoint.state = RedPointState.None;
|
return;
|
}
|
|
personalRedpoint.count = Mathf.Clamp(own / ticketItem.count, 0, totalTimes - enterTimes);
|
personalRedpoint.state = RedPointState.Quantity;
|
}
|
|
private void ParseConfig()
|
{
|
var bossConfigs = PersonalBossConfig.GetValues();
|
for (int i = 0; i < bossConfigs.Count; i++)
|
{
|
var config = bossConfigs[i];
|
var bossData = personalBosses[config.NPCID] = new PersonalBossData(config.NPCID);
|
var dungeonId = dungeonModel.GetDungeonId(PERSONALBOSS_MAPID, config.lineId);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
if (dungeonConfig != null)
|
{
|
bossData.challengableLevel = dungeonConfig.LVLimitMin;
|
}
|
}
|
|
sortedBossIds.AddRange(personalBosses.Keys);
|
sortedBossIds.Sort((int a, int b) =>
|
{
|
var data1 = personalBosses[a];
|
var data2 = personalBosses[b];
|
return PersonalBossData.ChallengableLevelCompare(data1, data2);
|
});
|
|
{
|
var dungeonId = dungeonModel.GetDungeonId(PERSONALBOSS_MAPID, 0);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
dungeonTicket = dungeonConfig == null ? 0 : dungeonConfig.TicketID;
|
}
|
}
|
|
public void RequestGotoDungeon(int _bossId)
|
{
|
var config = PersonalBossConfig.Get(_bossId);
|
ClientDungeonStageUtility.GotoNormalClientDungeon(PERSONALBOSS_MAPID, PERSONALBOSS_MAPID, config.lineId);
|
}
|
}
|
|
public class PersonalBossData
|
{
|
public int id { get; private set; }
|
public int challengableLevel { get; set; }
|
|
public PersonalBossData(int _id)
|
{
|
this.id = _id;
|
}
|
|
public static int ChallengableLevelCompare(PersonalBossData _lhs, PersonalBossData _rhs)
|
{
|
return _lhs.challengableLevel < _rhs.challengableLevel ? -1 : 1;
|
}
|
|
}
|
|
}
|