using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { [XLua.LuaCallCSharp] [XLua.Hotfix] public class AllianceBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { List m_BossIds = new List(); Dictionary> m_Items = new Dictionary>(); Dictionary m_AllianceBossLines = new Dictionary(); public const int DATAMAPID = 31260; public bool isActivityOver { get; private set; } public int participateLimit { get; private set; } public List inspireRewards { get; private set; } public event Action allianceBossStateRefresh; public event Action allianceBossLineRefresh; public override void Init() { ParseConfig(); } public void OnBeforePlayerDataInitialize() { isActivityOver = false; m_AllianceBossLines.Clear(); } public void OnPlayerLoginOk() { } public override void UnInit() { } public int GetBossNpcId(int index) { return index < m_BossIds.Count ? m_BossIds[index] : 0; } public bool TryGetItems(int index, out List items) { return m_Items.TryGetValue(index, out items); } public bool TryGetBossLine(int index, out AllianceBossLine bossLine) { return m_AllianceBossLines.TryGetValue(index, out bossLine); } void ParseConfig() { var config = FuncConfigConfig.Get("LeagueBOSSNumber1"); participateLimit = int.Parse(config.Numerical1); inspireRewards = new List(); config = FuncConfigConfig.Get("LeagueBOSSReward1"); var itemArray = LitJson.JsonMapper.ToObject(config.Numerical1); for (int i = 0; i < itemArray.Length; i++) { var item = itemArray[i]; inspireRewards.Add(new Item() { id = item[0], count = item[1], }); } config = FuncConfigConfig.Get("AllianceBoss"); m_BossIds.AddRange(ConfigParse.GetMultipleStr(config.Numerical1)); m_Items.Add(0, new List()); var itemsArray = ConfigParse.GetMultipleStr(config.Numerical2); for (int i = 0; i < itemsArray.Length; i++) { m_Items[0].Add(new Item() { id = itemsArray[i], count = 1, }); } m_Items.Add(1, new List()); itemsArray = ConfigParse.GetMultipleStr(config.Numerical3); for (int i = 0; i < itemsArray.Length; i++) { m_Items[1].Add(new Item() { id = itemsArray[i], count = 1, }); } } public void ReceivePackage(HA40C_tagGCAllFamilyBossInfo package) { isActivityOver = package.IsEnd == 1; if (allianceBossStateRefresh != null) { allianceBossStateRefresh(); } } public void ReceivePackage(HA007_tagGCFBLinePlayerCnt package) { if (package.MapID != DATAMAPID) { return; } m_AllianceBossLines.Clear(); for (int i = 0; i < package.Count; i++) { var data = package.FBLineInfoList[i]; m_AllianceBossLines[data.FBLineID] = new AllianceBossLine() { playerCount = data.PlayerCnt, hp = int.Parse(data.ExtraStr) }; } if (allianceBossLineRefresh != null) { allianceBossLineRefresh(); } } public struct AllianceBossLine { public int playerCount; public int hp; } } }