using vnxbqy.UI; using System; using System.Collections.Generic; using System.Linq; //秘境寻宝(仙匣秘境) public class SecretPlaceXBModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { public OperationXianXiaMJLottery operationAct = null; public OperationCrossActXianXiaMJ operationCrossAct = null; public static Operation operaType = Operation.default36; public static Operation operaTypeCross = Operation.default37; public static int rankType = 38; //本服个人排行 public static int crossRankType = 162; //跨服个人排行 public static List rankList = new List() { rankType, crossRankType }; int regesitType = (int)NewDayActivityID.SecretPlaceXB; int regesitCrossType = (int)NewDayActivityID.SecretPlaceXBCross; public event Action onStateUpdate; public event Action OnXBResult; public int lotteryScore; //当前抽奖积分 public bool IsOpen { get { //return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType); return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType) && OperationTimeHepler.Instance.SatisfyOpenCondition(operaTypeCross, ILTimeUtility.ServerCrossNow); } } //是否参与活动时间,由跨服封包决定,以跨服时间为准 public bool IsJoin { get { return OperationTimeHepler.Instance.SatisfyJoinCondition(operaTypeCross, ILTimeUtility.ServerCrossNow); } } public bool IsPrepareTime { get { if (!IsOpen) return false; return OperationTimeHepler.Instance.IsPrepareTime(operaTypeCross, ILTimeUtility.ServerCrossNow); } } //是否展示结果时间, 以跨服时间为准(前提为以判断是活动中) public bool IsResultShowTime { get { if (operationCrossAct == null) return false; return operationCrossAct.IsShowResultTime(); } } public bool IsAdvance { get { return false; } } public bool priorityOpen { get { return false; } } public ILOpenServerActivityProxy activity; Redpoint parentRedpoint = new Redpoint(MainRedDot.MjxbRedpoint); public Redpoint redpoint = new Redpoint(MainRedDot.MjxbRedpoint, MainRedDot.MjxbRedpoint * 10); //抽中物品位置:显示时间 public Dictionary showResultPos = new Dictionary(); public int moneyType = 0; // 活动消耗的货币类型 public PlayerDataType moneyPlayerDataType = 0; //对应0418 public int subItemID = 0; public bool onceRedpointTip = false; public event Action onSelectUpdate; int m_SelectIndex = 0; //选择大奖物品索引 public int selectIndex { get { return m_SelectIndex; } set { if (m_SelectIndex != value) { m_SelectIndex = value; if (onSelectUpdate != null) { onSelectUpdate(); } } } } //排行榜名次信息 private int m_SelectRank = 0; public int SelectRank { get { return m_SelectRank; } set { m_SelectRank = value; } } //排行榜奖励信息 private int m_SelectAwardRank = 0; public int SelectAwardRank { get { return m_SelectAwardRank; } set { m_SelectAwardRank = value; } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OpenServerActivityCenter.Instance.Register(regesitType, this, (int)OpenServerActivityCenter.ActivityType.AT_Activity2); OpenServerActivityCenter.Instance.Register(regesitCrossType, this, (int)OpenServerActivityCenter.ActivityType.AT_Activity2); ILOperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent; packModel.refreshItemCountEvent += RefreshItemCountEvent; //PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent; RedpointCenter.Instance.redpointValueChangeEvent += OnRedpointChange; } public override void UnInit() { OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; ILOperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent; packModel.refreshItemCountEvent -= RefreshItemCountEvent; //PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent; RedpointCenter.Instance.redpointValueChangeEvent -= OnRedpointChange; } private void OperationEndEvent(Operation operationType, int state) { if (operationType == operaType && state == 0) { if (onStateUpdate != null) { onStateUpdate(regesitType); } WindowCenter.Instance.Close(); } } private void OperationStartEvent(Operation operationType, int state) { if (operationType == operaType && state == 0) { if (onStateUpdate != null) { onStateUpdate(regesitType); } } } void OnRedpointChange(int id) { if (id == MainRedDot.RankActRepoint) { parentRedpoint.state = RedpointCenter.Instance.GetRedpointState(MainRedDot.RankActRepoint); } } private void RefreshItemCountEvent(PackType packType, int index, int itemId) { if (itemId != subItemID) return; if (!IsOpen) return; UpdateRedpoint(); } public void OnBeforePlayerDataInitialize() { moneyType = 0; // 活动消耗的货币类型 moneyPlayerDataType = 0; //对应0418 selectIndex = 0; operationCrossAct = null; operationAct = null; onceRedpointTip = false; } public void OnPlayerLoginOk() { onceRedpointTip = true; UpdateRedpoint(); } //void OnPlayerDataRefreshEvent(PlayerDataType dataType) //{ // if (dataType != moneyPlayerDataType) // { // return; // } // UpdateRedpoint(); //} private void operationTimeUpdateEvent(Operation type) { if (type == operaType) { OperationBase operationBase; if (!OperationTimeHepler.Instance.TryGetOperationTime(operaType, out operationBase)) { return; } operationAct = operationBase as OperationXianXiaMJLottery; moneyType = operationAct.moneyType; moneyPlayerDataType = HeroControler.Instance.GetMoneyPlayerDataType(moneyType); subItemID = operationAct.useItemID; if (operationAct.selectBigAward != null) { selectIndex = operationAct.selectItemIDSort.IndexOf((int)operationAct.selectBigAward.ItemID); } UpdateRedpoint(); } else if (type == operaTypeCross) { OperationBase operationBase; if (!OperationTimeHepler.Instance.TryGetOperationTime(operaTypeCross, out operationBase)) { return; } operationCrossAct = operationBase as OperationCrossActXianXiaMJ; UpdateRedpoint(); } } public void UpdateRedpoint() { redpoint.state = RedPointState.None; if (operationCrossAct == null) return; if (!IsJoin) return; if (onceRedpointTip || packModel.GetItemCountByID(PackType.Item, subItemID) > 0) { redpoint.state = RedPointState.Simple; } } public void SendSelectBigAward(uint itemID) { if (operationAct == null) return; var pak = new IL_CAA16_tagCMActXianXiaMJSuperItem(); pak.ActNum = (byte)operationAct.ActNum; pak.SuperItemCount = 1; pak.SuperItemIDList = new uint[] { itemID }; GameNetSystem.Instance.SendInfo(pak); } public void SendSelectCard(int posNum) { if (operationAct == null) return; var pak = new IL_CAA17_tagCMActXianXiaMJLottery(); pak.ActNum = (byte)operationAct.ActNum; pak.PosNum = (byte)posNum; GameNetSystem.Instance.SendInfo(pak); } public void SendPoolRefresh() { if (operationAct == null) return; var pak = new IL_CAA18_tagCMActXianXiaMJAwardPoolRefresh(); pak.ActNum = (byte)operationAct.ActNum; GameNetSystem.Instance.SendInfo(pak); } public void UpdateXianXiaMJAwardItemResult(HAA59_tagMCActXianXiaMJAwardItemResult package) { if (operationAct == null) return; if (package.ActNum != operationAct.ActNum) return; lotteryScore = (int)package.LotteryScore; OnXBResult?.Invoke(package.PosNum); } public void UpdateXianXiaMJLayerInfo(HAA79_tagMCActXianXiaMJLayerInfo package) { if (operationAct == null) return; if (package.ActNum != operationAct.ActNum) return; lotteryScore = (int)package.LotteryScore; } public void PopNextLevel() { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("XianXiaMJInfo2"), (bool _ok) => { if (_ok) { SendPoolRefresh(); } } ); } //当前盘是否有翻牌 public bool HasTurnCard() { if (operationAct == null) return false; if (operationAct.awardItems.Count > 1) { return true; } if (operationAct.awardItems.Count == 1 && !operationAct.awardItems.ContainsKey(0)) { return true; } return false; } public int GetRankDataIndex(int rank, Dictionary rankInfo) { rank += 1; var keys = rankInfo.Keys.ToList(); keys.Sort(); for (int i = 0; i < keys.Count; i++) { if (rank <= keys[i]) { return keys[i]; } } return -1; } public int GetPlayerId(RankData rankData) { // 检查输入数据是否为空 if (rankData == null) return 0; // 根据 SelectRank 的值选择对应的 ID switch (SelectRank) { case 0: case 1: return (int)rankData.id; case 2: return (int)rankData.id2; default: return 0; } } }