using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { [XLua.LuaCallCSharp] public class FairyFeastModel : Model, IBeforePlayerDataInitialize { DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel(); } } public List fairyFeastPlayers = new List(); public event Action fairyFeastPlayerUpdate; public float transmitCostSeconds { get; private set; } public float transmitExpSeconds { get; private set; } string expFormula { get; set; } public int riseLevel { get; private set; } public int expFlyStage { get; private set; } public int expFlyCount { get; private set; } public ulong totalExp { get; private set; } Dictionary normalQuestionTimes = new Dictionary(); public override void Init() { ParseConfig(); roleParticularModel.viewPlayerUpdate += ViewPlayerUpdate; } public override void UnInit() { roleParticularModel.viewPlayerUpdate -= ViewPlayerUpdate; } public void OnBeforePlayerDataInitialize() { fairyFeastPlayers.Clear(); transmitPlayer = 0; } void ParseConfig() { var config = FuncConfigConfig.Get("FairyFeastTransmit"); transmitCostSeconds = 8.5f; transmitExpSeconds = 7.7f; expFlyCount = 3; expFlyStage = 3; if (config != null) { transmitCostSeconds = float.Parse(config.Numerical2) / 1000; expFlyStage = int.Parse(config.Numerical3); expFlyCount = int.Parse(config.Numerical4); transmitExpSeconds = float.Parse(config.Numerical5) / 1000; } config = FuncConfigConfig.Get("FamilyPartySitAward"); expFormula = config.Numerical1; riseLevel = int.Parse(config.Numerical2); var list = DungeonStateTimeConfig.DungeonStateTimes(31230); for (int i = 0; i < list.Count; i++) { if (list[i].StateValue == 2) { var dayOfWeek = list[i].StartWeekday % 7; if (!normalQuestionTimes.ContainsKey(dayOfWeek)) { normalQuestionTimes.Add(dayOfWeek, new HourMinute() { hourBegin = list[i].StartHour, hourEnd = list[i].EndHour, minuteBegin = list[i].StartMinute, minuteEnd = list[i].EndMinute, }); } } } } public bool TryGetQuestionTime(out HourMinute time) { time = default(HourMinute); var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek; if (normalQuestionTimes.ContainsKey(dayOfWeek)) { time = normalQuestionTimes[dayOfWeek]; return true; } return false; } public void OnReceiveHelpMessage(string _mission) { var json = LitJson.JsonMapper.ToObject(_mission); if (json != null && json.Keys.Contains("familyPartyPlayer")) { fairyFeastPlayers.Clear(); var array = LitJson.JsonMapper.ToObject(json["familyPartyPlayer"].ToJson()); if (array != null) { fairyFeastPlayers.AddRange(array); } if (fairyFeastPlayerUpdate != null) { fairyFeastPlayerUpdate(); } } } public void ResetHelpMessage() { fairyFeastPlayers.Clear(); transmitPlayer = 0; } public void UpdateTransmitState(H0411_tagPlayerSit package) { var mapId = PlayerDatas.Instance.baseData.MapID; if (mapId != 31230 || package.PlayerID != PlayerDatas.Instance.baseData.PlayerID) { return; } if (package.Type == 0) { totalExp = 0; var level = PlayerDatas.Instance.baseData.LV; var worldLevel = PlayerDatas.Instance.worldLv; for (int i = 0; i < riseLevel; i++) { var config = PlayerLVConfig.Get(level + 1); totalExp += (ulong)config.EXP1 * Constants.ExpPointValue + (ulong)config.EXP2; } var levelConfig = PlayerLVConfig.Get(level + riseLevel); Equation.Instance.Clear(); Equation.Instance.AddKeyValue("worldlv", worldLevel); Equation.Instance.AddKeyValue("reLV", level + riseLevel); Equation.Instance.AddKeyValue("reExp", levelConfig.ReExp); totalExp += Equation.Instance.Eval(expFormula); FairyFeastTransmitShow.Instance.Open(); } } public void TransmitComplete() { CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction(); pak.ActionType = 1; pak.ActionInfo = 0; GameNetSystem.Instance.SendInfo(pak); } public List displayFairyMembers = new List(); public uint transmitPlayer = 0; public void Transmit(PlayerFairyData.FairyMember fairyMember) { if (fairyMember.PlayerID == PlayerDatas.Instance.baseData.PlayerID) { return; } if (fairyMember.Exattr2 != 0) { SysNotifyMgr.Instance.ShowTip("FairyFeastPlayerOffline"); return; } if (!fairyFeastPlayers.Contains(fairyMember.PlayerID)) { SysNotifyMgr.Instance.ShowTip("PartySitFail"); return; } transmitPlayer = fairyMember.PlayerID; roleParticularModel.ViewFairyFeastTransmit((int)fairyMember.PlayerID); CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction(); pak.ActionType = 0; pak.ActionInfo = transmitPlayer; GameNetSystem.Instance.SendInfo(pak); } private void ViewPlayerUpdate(int type, RoleParticularModel.ViewPlayerData data) { if (type == 3) { } } } }