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<int> rankList = new List<int>() { rankType, crossRankType };
|
|
int regesitType = (int)NewDayActivityID.SecretPlaceXB;
|
int regesitCrossType = (int)NewDayActivityID.SecretPlaceXBCross;
|
|
public event Action<int> onStateUpdate;
|
public event Action<int> 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<int, float> showResultPos = new Dictionary<int, float>();
|
|
|
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<PackModel>(); } }
|
|
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<BossTrialWin>();
|
}
|
}
|
|
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<int, ActBillboardAwards> 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;
|
}
|
}
|
}
|