using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using LitJson; namespace vnxbqy.UI { public class RoleModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk { public int openUIMark = 0; //自定义openui带的数字含义,规律其一为功能ID*10000 + 数字 Dictionary customAwardsDict = new Dictionary(); public event Action OnCustomAwardsEvent; FriendsModel friendsModel { get { return ModelCenter.Instance.GetModel(); } } public string RecordPlayerNameKey; //评分 分享奖励 public int[][] shareItems; public int shareType; //对应越南 public static final int SHARE_URL = 101; //public static final int SHARE_IMG = 104; public int[][] zanItems; public int[][] reviewItems; public int popReviewLV; public float clickZanBtnTick = 0; public float clickReviewBtnTick = 0; public Dictionary playerRewardDict = new Dictionary(); public event Action OnPlayerRewardEvent; Redpoint shareRedpoint = new Redpoint(201, MainRedDot.RedPoint_Share); public override void Init() { FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataUpdate; PlayerDatas.Instance.baseData.CoinChangeEvent += CoinChangeEvent; var config = FuncConfigConfig.Get("ShareGameReward"); shareItems = JsonMapper.ToObject(config.Numerical1); shareType = int.Parse(config.Numerical4); config = FuncConfigConfig.Get("GoodGameReward"); zanItems = JsonMapper.ToObject(config.Numerical1); reviewItems = JsonMapper.ToObject(config.Numerical4); popReviewLV = int.Parse(config.Numerical5); } public void OnBeforePlayerDataInitialize() { customAwardsDict.Clear(); clickZanBtnTick = 0; clickReviewBtnTick = 0; playerRewardDict.Clear(); } public void OnAfterPlayerDataInitialize() { } public void OnPlayerLoginOk() { RecordPlayerNameKey = StringUtility.Contact("RecordPlayerName",PlayerDatas.Instance.baseData.PlayerID); SendRenameInfoToPlayer(); UpdateShareRedpoint(); } public override void UnInit() { FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataUpdate; PlayerDatas.Instance.baseData.CoinChangeEvent -= CoinChangeEvent; } public string playerRename { get; private set; } public void SetRename(string rename) { playerRename = rename; } #region 协议 public void ServerRenameResult(HA921_tagUpdatePlayerNameResult renameResult) { switch ((RoleRenameResult)renameResult.Result) { case RoleRenameResult.MoneyErr: SysNotifyMgr.Instance.ShowTip("GoldErr"); break; case RoleRenameResult.NameRuleErr: ServerTipDetails.DisplayNormalTip(Language.Get("L1007")); break; case RoleRenameResult.NameLengErr: break; case RoleRenameResult.NameRepeatErr: SysNotifyMgr.Instance.ShowTip("RepeatName"); break; case RoleRenameResult.RenameFailErr: break; case RoleRenameResult.RenameSuccess: LocalSave.SetString(RecordPlayerNameKey, UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName)); SysNotifyMgr.Instance.ShowTip("RenameSuccess01", playerRename); if(WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } GameNetSystem.Instance.Reconnect(); break; } } #endregion private void SendRenameInfoToPlayer() { if(PlayerPrefs.HasKey(RecordPlayerNameKey)) { string recordName = LocalSave.GetString(RecordPlayerNameKey); if(!string.IsNullOrEmpty(recordName)) { string info = Language.Get("RenameText_02",recordName, playerRename); friendsModel.SendChatInfoByGroup(GroupType.Friend, info); PlayerPrefs.DeleteKey(RecordPlayerNameKey); } } } public void OpenRolePanel() { var functionOrder = 0; var godWeaponModel = ModelCenter.Instance.GetModel(); var gatherSoulModel = ModelCenter.Instance.GetModel(); var reikiRootModel = ModelCenter.Instance.GetModel(); var fashionDressModel = ModelCenter.Instance.GetModel(); if (MainRedDot.Instance.roleTagRedpoint.state != RedPointState.None) { functionOrder = 0; } else if (reikiRootModel.redpoint.state == RedPointState.Simple) { functionOrder = 1; } else if (fashionDressModel.redpoint.state == RedPointState.Simple) { functionOrder = 2; } else if (godWeaponModel.magicianRedpoint.state != RedPointState.None) { functionOrder = 3; } WindowCenter.Instance.Open(false, functionOrder); } //功能:是否提醒过 1 在线特惠 public Dictionary funcInfo = new Dictionary(); private void OnFuncStateChangeEvent(int id) { //if (id == 193) //{ // //无限货币每日上线弹框一次 // if(OnlineRechargeModel.Instance.IsOpen()) // { // funcInfo[1] = 0; // } //} } public void SetCustomAwardsState(HA3CC_tagMCCustomAwardInfo pack) { for (int i = 0; i < pack.RecordStateList.Length; i++) { customAwardsDict[pack.RecordStateList[i].KeyNum] = new Int2((int)pack.RecordStateList[i].CanGetState, (int)pack.RecordStateList[i].GetState); } OnCustomAwardsEvent?.Invoke(); } //对应奖励表 // 0 未达成 1 可领取 2 已领取 public int GetCustomAwardState(int awardID) { int keyNum = awardID / 31; int bitNum = awardID % 31; if (!customAwardsDict.ContainsKey(keyNum)) return 0; if (((int)Math.Pow(2, bitNum) & customAwardsDict[keyNum].x) <= 0) return 0; if (((int)Math.Pow(2, bitNum) & customAwardsDict[keyNum].y) <= 0) return 1; return 2; } public void GetCustomAward(int awardID) { CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward(); pak.RewardType = 61; pak.DataEx = (uint)awardID; GameNetSystem.Instance.SendInfo(pak); } public void UpdatePlayerReward(HA30C_tagMCPlayerRewardGetRecord pack) { playerRewardDict[pack.RewardType] = (int)pack.RewardGetRecord; UpdateShareRedpoint(); OnPlayerRewardEvent?.Invoke(); } void UpdateShareRedpoint() { shareRedpoint.state = RedPointState.None; if (GetShareState() != 2 || GetZanState() != 2 || GetReviewState() != 2) shareRedpoint.state = RedPointState.GetReward; } //分享可每日领取 0 未分享 1 可领取 2 已领取 public int GetShareState() { if (TimeUtility.ServerNow.DayOfYear != LocalSave.GetInt("ShareToFBDay" + PlayerDatas.Instance.baseData.PlayerID)) return 0; if (!playerRewardDict.ContainsKey(34)) return 1; if (playerRewardDict[34] == 0) return 1; return 2; } //点赞仅可领1次 0 未点赞 1 可领取 2 已领取 public int GetZanState() { if (!playerRewardDict.ContainsKey(35) || playerRewardDict[35] == 0) { if (LocalSave.GetInt("ZanToFB" + PlayerDatas.Instance.baseData.PlayerID) == 0) return 0; if (Time.time - clickZanBtnTick < 5) return 0; return 1; } return 2; } //评分仅可领1次 0 未评分 1 可领取 2 已领取 public int GetReviewState() { if (!playerRewardDict.ContainsKey(67) || playerRewardDict[67] == 0) { if (LocalSave.GetInt("ReviewStore" + PlayerDatas.Instance.baseData.PlayerID) == 0) return 0; if (Time.time - clickReviewBtnTick < 5) return 0; return 1; } return 2; } public void GetCustomAwardByType(int type) { CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward(); pak.RewardType = (byte)type; GameNetSystem.Instance.SendInfo(pak); } public void PopReview() { if (PlayerDatas.Instance.baseData.LV != popReviewLV) return; var state = GetReviewState(); if (state == 0) { ynmbxxjUtil.Instance.GoToPingfen(); clickReviewBtnTick = Time.time; LocalSave.SetInt("ReviewStore" + PlayerDatas.Instance.baseData.PlayerID, 1); } } private void OnPlayerDataUpdate(PlayerDataType type) { if (type == PlayerDataType.LV) { PopReview(); ReportLV(); } else if (type == PlayerDataType.FightPower) { ReportFightPower(); } } void ReportLV() { int state = LocalSave.GetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.LV >= 40 && state == 0) { ynmbxxjUtil.Instance.TraceEvent("upgradeRole_40", "", false); LocalSave.SetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID, 1); } state = LocalSave.GetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.LV >= 60 && state <= 1) { ynmbxxjUtil.Instance.TraceEvent("upgradeRole_60", "", false); LocalSave.SetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID, 2); } state = LocalSave.GetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.LV >= 100 && state <= 2) { ynmbxxjUtil.Instance.TraceEvent("upgradeRole_100", "", false); LocalSave.SetInt("PlayerLVReport" + PlayerDatas.Instance.baseData.PlayerID, 3); } } //累计充值达99美金 pay99 上报一次 2435598 //累计充值达19.99美金 pay19.99 上报一次 491793 //累计充值达49.99美金 pay49.99 上报一次 1229853 //完成首充 firstpurchase 上报一次 void CoinChangeEvent(int beforeCoin, int afterCoin) { int state = LocalSave.GetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID); if (afterCoin > 0 && state == 0) { ynmbxxjUtil.Instance.TraceEvent("firstpurchase", "", false); LocalSave.SetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID, 1); } state = LocalSave.GetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID); if (afterCoin >= 491793 && state <= 1) { ynmbxxjUtil.Instance.TraceEvent("pay19.99", "", false); LocalSave.SetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID, 2); } state = LocalSave.GetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID); if (afterCoin >= 1229853 && state <= 2) { ynmbxxjUtil.Instance.TraceEvent("pay49.99", "", false); LocalSave.SetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID, 3); } state = LocalSave.GetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID); if (afterCoin >= 2435598 && state <= 3) { ynmbxxjUtil.Instance.TraceEvent("pay99", "", false); LocalSave.SetInt("PlayerCoinReport" + PlayerDatas.Instance.baseData.PlayerID, 4); } } //战力达到20万 power20 上报一次 //战力达到50万 power50 上报一次 //战力达到100万 power100 上报一次 //战力达到200万 power200 上报一次 void ReportFightPower() { int state = LocalSave.GetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.FightPoint >= 200000 && state <= 0) { ynmbxxjUtil.Instance.TraceEvent("power20", "", false); LocalSave.SetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID, 1); } state = LocalSave.GetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.FightPoint >= 500000 && state <= 1) { ynmbxxjUtil.Instance.TraceEvent("power50", "", false); LocalSave.SetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID, 2); } state = LocalSave.GetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.FightPoint >= 1000000 && state <= 2) { ynmbxxjUtil.Instance.TraceEvent("power100", "", false); LocalSave.SetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID, 3); } state = LocalSave.GetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID); if (PlayerDatas.Instance.baseData.FightPoint >= 2000000 && state <= 3) { ynmbxxjUtil.Instance.TraceEvent("power200", "", false); LocalSave.SetInt("PlayerPowerReport" + PlayerDatas.Instance.baseData.PlayerID, 4); } } } }