using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.LuaCallCSharp] public class BossFirstBloodModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { ImpactRankModel impactRankModel { get { return ModelCenter.Instance.GetModel(); } } public int selectIndex = 0; public int selectNPCID = 0; public struct FirstKillTimeInfo { public string name; public string time; } Dictionary FirstKillStateInfo = new Dictionary(); // 击杀奖励状态 public Dictionary firstKillTimeInfo = new Dictionary(); // 首杀名和时间 public List npcIDConfig; public bool IsOpen { get { return impactRankModel.IsOpen; } } public bool priorityOpen { get { //var state = impactRankRedpoint.state; //return state == RedPointState.Simple || state == RedPointState.GetReward; return false; } } public bool IsAdvance { get { return false; } } public event Action onStateUpdate; public override void Init() { OpenServerActivityCenter.Instance.Register(100, this); InitNpcInfo(); DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo += OnGetUniversalGameInfo; } private void SendGameRec() { var pak = new CA001_tagViewUniversalGameRec(); pak.ViewType = 31; GameNetSystem.Instance.SendInfo(pak); } public event Action OnFirstKillInfo; private void OnGetUniversalGameInfo(HA003_tagUniversalGameRecInfo package) { if (package.Type == 31) { for (int i = 0; i < package.Count; i++) { int npcID = (int)package.UniversalGameRec[i].Value1; firstKillTimeInfo[(int)package.UniversalGameRec[i].Value1] = new FirstKillTimeInfo() { name = package.UniversalGameRec[i].StrValue3, time = package.UniversalGameRec[i].StrValue2, }; if (!WindowCenter.Instance.IsOpen() && OnFirstKillInfo != null) OnFirstKillInfo(npcID); } } } public void OnBeforePlayerDataInitialize() { FirstKillStateInfo.Clear(); firstKillTimeInfo.Clear(); } public void OnPlayerLoginOk() { SendGameRec(); } public void InitNpcInfo() { npcIDConfig = BOSSFirstKillConfig.GetKeys(); npcIDConfig.Sort((string x, string y) => { var infoX = BOSSFirstKillConfig.Get(x); var infoY = BOSSFirstKillConfig.Get(y); return infoX.Sort.CompareTo(infoY.Sort); }); } public override void UnInit() { } public event Action UpdatePersonnalKillEvent; public void BossFirstKillStateInfo(HAB01_tagMCBossFirstKillStateInfo package) { for (int i=0; i < package.BossCount; i++) { FirstKillStateInfo[(int)package.FirstKillStateList[i].NPCID] = (int)package.FirstKillStateList[i].FKState; if (UpdatePersonnalKillEvent != null) UpdatePersonnalKillEvent((int)package.FirstKillStateList[i].NPCID); } } public int GetPersonalKillAwardState(int npcID) { //0 未击杀 1 可领取 2 已领取 if (FirstKillStateInfo.ContainsKey(npcID)) { int state = FirstKillStateInfo[npcID]; if (state % 10 == 0) return 0; if (state % 10 > 0 && state/100 == 0) return 1; if (state % 10 > 0 && state / 100 == 1) return 2; } return 0; } public bool IsAlreadyFirstKill(int npcID) { if (firstKillTimeInfo.ContainsKey(npcID)) return true; return false; } } }