| | |
| | | using UnityEngine; |
| | | namespace Snxxz.UI
|
| | | {
|
| | | public class FairyGrabBossModel : Model
|
| | | public class FairyGrabBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
| | | {
|
| | | public List<int> bosses { get; private set; }
|
| | | Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>();
|
| | | Dictionary<int, Dictionary<int, FairyGrabBossInfo>> fairyGrabBossDict = new Dictionary<int, Dictionary<int, FairyGrabBossInfo>>();
|
| | |
|
| | | public bool IsOpen
|
| | | {
|
| | | get
|
| | | {
|
| | | return true;
|
| | | return dailyQuestModel.GetQuestState((int)DailyQuestType.FairyGrabBoss)
|
| | | == DailyQuestModel.DailyQuestState.Normal;
|
| | | }
|
| | | }
|
| | | int m_SelectBoss = 0;
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | public int surplusSeconds
|
| | | {
|
| | | get
|
| | | {
|
| | | DailyQuestOpenTime openTime;
|
| | | if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.FairyGrabBoss, out openTime))
|
| | | {
|
| | | if (openTime.InOpenTime() && openTime.IsValidServerOpenTime())
|
| | | {
|
| | | HourMinute hourMinute;
|
| | | if (openTime.TryGetTodayNearestOpenTime(out hourMinute))
|
| | | {
|
| | | DateTime end = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day,
|
| | | hourMinute.hourEnd, hourMinute.minuteEnd, 0);
|
| | | return (int)(end - TimeUtility.ServerNow).TotalSeconds;
|
| | | }
|
| | | }
|
| | | }
|
| | | return 0;
|
| | | }
|
| | | }
|
| | |
|
| | | private bool serverInited = false;
|
| | |
|
| | | public event Action stateUpdate;
|
| | | public event Action<int> bossSelectedEvent;
|
| | | public event Action<int, int> bossHurtUpdate;
|
| | |
|
| | | DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
| | |
|
| | | public override void Init()
|
| | | {
|
| | | ParseConfig();
|
| | | GlobalTimeEvent.Instance.secondEvent += SecondEvent;
|
| | | StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
|
| | | }
|
| | |
|
| | | public void OnBeforePlayerDataInitialize()
|
| | | {
|
| | | serverInited = false;
|
| | | }
|
| | |
|
| | | public void OnPlayerLoginOk()
|
| | | {
|
| | | serverInited = true;
|
| | | }
|
| | |
|
| | | public override void UnInit()
|
| | | {
|
| | | }
|
| | |
|
| | | private void OnStageLoadFinish()
|
| | | {
|
| | | if (!(StageManager.Instance.CurrentStage is DungeonStage))
|
| | | {
|
| | | fairyGrabBossDict.Clear();
|
| | | }
|
| | | }
|
| | |
|
| | | void ParseConfig()
|
| | |
| | | for (int i = 0; i < configs.Count; i++)
|
| | | {
|
| | | bosses.Add(configs[i].NPCID);
|
| | | var itemArray = LitJson.JsonMapper.ToObject<int[][]>(configs[i].dropItems);
|
| | | List<Item> list = new List<Item>();
|
| | | for (int k = 0; k < itemArray.Length; k++)
|
| | | {
|
| | | Item item = new Item()
|
| | | {
|
| | | id = itemArray[k][0],
|
| | | count = itemArray[k][1],
|
| | | bind = itemArray[k][2] == 1,
|
| | | };
|
| | | list.Add(item);
|
| | | }
|
| | | dropItemDict.Add(configs[i].NPCID, list);
|
| | | }
|
| | | }
|
| | |
|
| | | public bool TryGetDropItems(int bossId, out List<Item> dropItems)
|
| | | {
|
| | | return dropItemDict.TryGetValue(bossId, out dropItems);
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 查询Boss伤害信息
|
| | | /// </summary>
|
| | | /// <param name="bossId"></param>
|
| | | /// <param name="queryType">0-实时仙盟伤血 1-历史仙盟伤血 2-实时玩家伤血 3-历史玩家伤血</param>
|
| | | public void QueryGrabBossHurt(int bossId, int queryType)
|
| | | {
|
| | | CA228_tagCMQueryFamilyBossHurt pak = new CA228_tagCMQueryFamilyBossHurt();
|
| | | pak.NPCID = (uint)bossId;
|
| | | pak.QueryType = (byte)queryType;
|
| | | GameNetSystem.Instance.SendInfo(pak);
|
| | | }
|
| | |
|
| | | public void UpdateBossHurt(HA715_tagMCFamilyBossHurtList package)
|
| | | {
|
| | | Dictionary<int, FairyGrabBossInfo> dict = null;
|
| | | FairyGrabBossInfo fairyGrabBossInfo = null;
|
| | | if (!fairyGrabBossDict.TryGetValue((int)package.NPCID, out dict))
|
| | | {
|
| | | dict = new Dictionary<int, FairyGrabBossInfo>();
|
| | | fairyGrabBossDict.Add((int)package.NPCID, dict);
|
| | | }
|
| | | if (!dict.TryGetValue(package.HurtType, out fairyGrabBossInfo))
|
| | | {
|
| | | fairyGrabBossInfo = new FairyGrabBossInfo();
|
| | | dict.Add(package.HurtType, fairyGrabBossInfo);
|
| | | }
|
| | | fairyGrabBossInfo.SetData(package);
|
| | | if (bossHurtUpdate != null)
|
| | | {
|
| | | bossHurtUpdate((int)package.NPCID, package.HurtType);
|
| | | }
|
| | | }
|
| | |
|
| | | public void QueryGrabBossProgress()
|
| | | {
|
| | | CAC04_tagCGQueryAllFamilyBossHurt pak = new CAC04_tagCGQueryAllFamilyBossHurt();
|
| | | GameNetSystem.Instance.SendInfo(pak);
|
| | | }
|
| | |
|
| | | private void SecondEvent()
|
| | | {
|
| | | if (!serverInited)
|
| | | {
|
| | | return;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | public class FairyGrabBossInfo
|
| | | {
|
| | | public int npcId { get; private set; }
|
| | | public int objId { get; private set; }
|
| | | public int hurtType { get; private set; }
|
| | | public int IsSort { get; private set; }
|
| | |
|
| | | public List<BossHurtInfo> hurtInfos = new List<BossHurtInfo>();
|
| | |
|
| | | public void SetData(HA715_tagMCFamilyBossHurtList package)
|
| | | {
|
| | | npcId = (int)package.NPCID;
|
| | | objId = (int)package.ObjID;
|
| | | hurtType = package.HurtType;
|
| | | IsSort = package.IsSort;
|
| | | hurtInfos.Clear();
|
| | | for (int i = 0; i < package.HurtCount; i++)
|
| | | {
|
| | | var sHurt = package.HurtList[i];
|
| | | var hurtInfo = new BossHurtInfo()
|
| | | {
|
| | | FamilyID = (int)sHurt.FamilyID,
|
| | | HurtID = (int)sHurt.HurtID,
|
| | | HurtName = UIHelper.ServerStringTrim(sHurt.HurtName),
|
| | | HurtValue = (int)sHurt.HurtValue,
|
| | | HurtValueEx = (int)sHurt.HurtValueEx,
|
| | | InitTick = sHurt.InitTick,
|
| | | };
|
| | | hurtInfos.Add(hurtInfo);
|
| | | }
|
| | | if (IsSort != 1)
|
| | | {
|
| | | hurtInfos.Sort(Compare);
|
| | | }
|
| | | }
|
| | |
|
| | | int Compare(BossHurtInfo x, BossHurtInfo y)
|
| | | {
|
| | | if (x.totalHurt != y.totalHurt)
|
| | | {
|
| | | return -x.totalHurt.CompareTo(y.totalHurt);
|
| | | }
|
| | | return x.InitTick.CompareTo(y.InitTick);
|
| | | }
|
| | | }
|
| | |
|
| | | public struct BossHurtInfo
|
| | | {
|
| | | public int FamilyID;
|
| | | public int HurtID; // 伤血的ID, 根据伤血类型表示不同的ID, 如仙盟ID或玩家ID
|
| | | public string HurtName;
|
| | | public int HurtValue; // 累计伤血,求余1亿的值
|
| | | public int HurtValueEx; // 累计伤血,整除1亿的值
|
| | | public uint InitTick; // 伤血初始tick,用于排序,先按伤血倒序排,再按tick正序排
|
| | |
|
| | | public long totalHurt
|
| | | {
|
| | | get
|
| | | {
|
| | | return HurtValue + (long)HurtValueEx * Constants.ExpPointValue;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|