using System; using FairyGUI; using UnityEngine; using DG.Tweening; using Spine.Unity; using System.Text; using System.Collections.Generic; using Random = UnityEngine.Random; using System.Text.RegularExpressions; using System.Linq; using AppsFlyerSDK; using System.Threading; using System.Globalization; using System.IO; using Newtonsoft.Json; namespace FlowerPower { public static class GameHelper { public static int gameType = 0; private static LoginModel loginModel; private static Dictionary numDic = new Dictionary(); public static string GetRandomNum(int count) { var resultStr = new StringBuilder(); for (int i = 0; i < count; i++) { resultStr.Append(Random.Range(0, 10)); } return resultStr.ToString(); } public static Vector3 FguiPotToUnityTrfLocalPot(Vector3 pot) { var v = Vector3.zero; v.x = pot.x; v.y = -pot.y; v.z = pot.z; return v; } public static string GetNumStr(float num, int floatLength = -1) { var numString = num.ToString(floatLength < 0 ? "" : $"f{floatLength}"); if (num > 1000) { return numString; } if (!numDic.ContainsKey(num)) numDic.Add(num, numString); return numDic[num]; } public static void ShowLoading(float min = 0.2f, float max = 1f, Action onCompleted = null) { ShowLoading(Random.Range(min, max), onCompleted); } public static void ShowLoading(float time, Action onCompleted = null) { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Open); TimerHelper.mEasy.AddTimer(time, () => { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Close); onCompleted?.Invoke(); }); } public static void ShowTips(string val, bool isLangue = false) { var valStr = val; if (isLangue) { } var tipsData = JoastData.GetTips(valStr); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.SCTipsUI_Open, tipsData); } public static void SetWatchCd(int type) { var watchAd = ConfigSystem.GetConfig().PropCD; PlayerPrefs.SetInt($"watch_ad_buy_prop_{type}", (int)GetNowTime() + watchAd); } public static int GetWatchCd(int type) { return PlayerPrefs.GetInt($"watch_ad_buy_prop_{type}", 0); } public static void ShowVideoAd(string adId, Action onCompleted) { MaxADKit.ShowVideo(adId, isSuccess => { if (isSuccess) { CtrlDispatcher.Instance.Dispatch(CtrlMsg.WatchVideoFinish); look_interad_numbers = 0; AdOverEvent(1); } else { ShowTips("Ads Not Ready", true); } onCompleted?.Invoke(isSuccess); }); } public static void ShowInterstitial(string key) { // if (!true) // { // return; // } // if (Time.time < CanShowInterstitialTime) // { // return; // } #if !UNITY_EDITOR //if(Random.Range(0, 100)>ConfigSystem.GetConfig().interstitialtype) return; MaxADKit.ShowInterstitial(key, isSuccess => { if (isSuccess) { CtrlDispatcher.Instance.Dispatch(CtrlMsg.WatchIntVideoFinish); if (key == "AfterReward") { NetworkKit.BuriedPoint(BuriedPointEvent.Apple_pay_event, BuriedPointEvent.afterRewardAdEnd, 1); } AdOverEvent(2); } }); #endif // CanShowInterstitialTime = (int)(Time.time + 30); } public static void ShowOpenAd() { MaxADKit.ShowOpenAdIfReady((issuccess) => { if (issuccess) { GameDispatcher.Instance.Dispatch(GameMsg.CloseMask); NetworkKit.BuriedPoint(BuriedPointEvent.open_ad, BuriedPointEvent.open_show, 1); NetworkKit.BuriedPoint(BuriedPointEvent.open_ad, BuriedPointEvent.open_show_people, 1); SaveData.GetSaveobject().TodayOpenNum[1]++; SaveData.saveDataFunc(); AdOverEvent(3); } }); } public static bool NeedShowOpenAd() { // return true; int open_ = PlayerPrefs.GetInt("OpenAD", 1); PlayerPrefs.SetInt("OpenAD", GetCommonModel().SplashSwitch); if (open_ == 0) return false; if (JsonConvert.SerializeObject(SaveData.GetSaveobject()) == null) return false; Debug.Log(JsonConvert.SerializeObject(ConfigSystem.GetConfig().dataList)); Debug.Log(ConfigSystem.GetConfig().dataList.Count); if (SaveData.GetSaveobject().first_login_time == 0) SaveData.GetSaveobject().first_login_time = GameHelper.GetNowTime(); DateTime startTime = DateTimeOffset.FromUnixTimeSeconds(SaveData.GetSaveobject().first_login_time).LocalDateTime; // DateTime startTime = DateTimeOffset.FromUnixTimeSeconds(1755591905).LocalDateTime; long timestamp = GameHelper.GetNowTime(); DateTime now = DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime; int daysPassed = (now.Date - startTime.Date).Days; int list_index = daysPassed; Debug.Log(list_index); if (PlayerPrefs.GetInt("first_openad", 0) == 0) { SplashAD data_ = ConfigSystem.GetConfig().dataList[0]; Debug.Log("NeedShowOpenAd---1-" + data_.upperlimit); PlayerPrefs.SetInt("first_openad", 1); if (data_.upperlimit > 0) { Debug.Log("NeedShowOpenAd---2-"+data_.Retention_Rate); if (Random.Range(0, 100) < data_.Retention_Rate) { return true; } } } else { Debug.Log("NeedShowOpenAd---3-" + daysPassed); list_index++; Debug.Log("NeedShowOpenAd---4-" + list_index); if (list_index >= ConfigSystem.GetConfig().dataList.Count) list_index = ConfigSystem.GetConfig().dataList.Count - 1; SplashAD data_ = ConfigSystem.GetConfig().dataList[list_index]; if (list_index < 0) list_index = 0; Debug.Log("NeedShowOpenAd---5-" + list_index + ", daysPassed: " + daysPassed + ", TodayOpenNum[0]=="+ SaveData.GetSaveobject().TodayOpenNum[0] + ", TodayOpenNum[1]=="+ SaveData.GetSaveobject().TodayOpenNum[1]); if (daysPassed != SaveData.GetSaveobject().TodayOpenNum[0]) { SaveData.GetSaveobject().TodayOpenNum[0] = daysPassed; SaveData.GetSaveobject().TodayOpenNum[1] = 0; } Debug.Log("NeedShowOpenAd---6-" + data_.upperlimit + ", TodayOpenNum[1]=="+ SaveData.GetSaveobject().TodayOpenNum[1]); if (SaveData.GetSaveobject().TodayOpenNum[1] < data_.upperlimit) { Debug.Log("NeedShowOpenAd---7-" + data_.Retention_Rate); if (Random.Range(0, 100) < data_.Retention_Rate) { SaveData.saveDataFunc(); return true; } } } Debug.Log("NeedShowOpenAd---false-"); return false; } public static Vector2 GetUICenterPosition(GObject gObject, bool isCenter = false) { Vector2 centerPot = Vector2.zero; if (!isCenter) { centerPot = gObject.size / 2; } return gObject.LocalToRoot(Vector2.zero, GRoot.inst) + centerPot; } public static void PlayFGUIFx(Transition transition, bool isReset = true, PlayCompleteCallback onCompleted = null) { if (isReset) { if (transition.playing) { transition.Stop(); } } if (!transition.playing) { transition.Play(); } transition.SetCompleteEvent(onCompleted); } #region 时间判断 public static int GetTomorrowCountTime() { var today = DateTime.Now; return 86400 - today.Hour * 3600 - today.Minute * 60 - today.Second; } public static long GetNowTime(bool isFix = false) { #if JarvisRelease return DateTimeManager.Instance.GetServerCurrTimestamp(isFix); #else return DateTimeManager.Instance.GetCurrTimestamp(); #endif } public static bool InToday(long time, int offset = 0, bool isInclude = false) { DateTime oldDate = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); oldDate = oldDate.AddSeconds(time); oldDate = new DateTime(oldDate.Year, oldDate.Month, oldDate.Day); var yesterday = DateTimeManager.Instance.GetCurrDateTime().AddDays(offset); yesterday = new DateTime(yesterday.Year, yesterday.Month, yesterday.Day); if (isInclude) { return oldDate >= yesterday; } return oldDate > yesterday; } #endregion public static void SetSelfAvatar(GLoader gLoader) { var avatarId = PreferencesMgr.Instance.PlayerAvatarId; TextureHelper.SetAvatarToLoader(avatarId, gLoader); } public static void SetSelfCountryFlag(GLoader gLoader) { SetCountryFlag(gLoader, GetLoginModel().country.ToLower()); } public static void SetCountryFlag(GLoader countryFlagLoader, string country) { var sprite = LoadKit.Instance.LoadSprite("Atlas.Flag", country.ToLower()); if (sprite == null) { sprite = LoadKit.Instance.LoadSprite("Atlas.Flag", "us"); } var countryTexture = new NTexture(sprite); countryFlagLoader.texture = countryTexture; } public static string LimitName(string name, int length, string suffix = "...") { if (!string.IsNullOrEmpty(name) && name.Length > length) { name = name.Substring(0, length) + suffix; } return name; } public static void SetName(GTextField gTextField, bool isLimit = false, int length = 6) { var name = PreferencesMgr.Instance.PlayerName; if (name == null || name.IsNullOrWhiteSpace()) { name = "GemCrush"; } if (isLimit) { name = LimitName(name, length); } gTextField.text = name; } public static string GetUserName() { string name = PreferencesMgr.Instance.PlayerName; if (name == null || name.IsNullOrWhiteSpace()) { name = GetPlayerInviteCode(); } name ??= "Flower Power"; return name; } public static string GetPlayerInviteCode() { return GetLoginModel().invite_code; } public static long GetUID() { return GetLoginModel().uid; } public static void OnRiseUI(int itemId, UILayerType layerType = UILayerType.Highest) { var gObject = GetItemUI(itemId); if (gObject != null) { SetUILayer(gObject, gObject.sortingOrder + 500, layerType); } } public static void OnRiseUIRecover(int itemId, UILayerType layerType = UILayerType.Top) { var gObject = GetItemUI(itemId); if (gObject == null) return; SetUILayer(gObject, gObject.sortingOrder - 500, layerType); UIManager.Instance.ResetGObjectUILayer(gObject); } public static GComponent GetItemUI(int itemId) { GComponent gObject = null; switch (itemId) { case 101: { // if (UIManager.Instance.GetDynamicUI(UIConst.CurrencyUI) is CurrencyUI topUI) // { // gObject = topUI.ui.btn_currency; // } } break; } return gObject; } public static void SetUILayer(GObject gObject, int sortingOrder, UILayerType layerType) { gObject.sortingOrder = sortingOrder; UIManager.Instance.SetGObjectUILayer(layerType, gObject); } public static LoginModel GetLoginModel() { if (loginModel != null) { return loginModel; } return loginModel = ModuleManager.Instance.GetModel(ModelConst.LoginModel) as LoginModel; } public static bool CheckNameValidly(string name) { if (string.IsNullOrEmpty(name)) { return false; } const string expression = @"^[a-zA-Z]*$"; return Regex.IsMatch(name, expression); } public static bool IsGiftSwitch() { //is debug test-------- // return false; // return true; return GetLoginModel().is_magic; } public static bool isRDExchangeMode() { // return false; int a = SaveData.GetSaveobject().ExchangeModeToggle; return SaveData.GetSaveobject().ExchangeModeToggle == 1; } public static bool isNewExchangeProcessMode() { // return false; int a = SaveData.GetSaveobject().ExchangeProcessMode; return SaveData.GetSaveobject().ExchangeProcessMode == 1; } public static bool isNewCHProcessMode() { // return true; int a = SaveData.GetSaveobject().CHProcessMode; return SaveData.GetSaveobject().CHProcessMode == 1; } /// /// 是否是广告兑换模式 /// /// true:广告兑换 -- false:三方支付 public static bool IsAdModelOfPay() { var isAd = GetLoginModel().enwp != 1; // return true; return isAd; } /// /// 获取加1购买模式:(0:付费,1:广告,2:金币+广告) /// /// public static int GetAddPayMode() { var isAd = GetCommonModel().AddSpaceMode; // return true; return isAd; } public static decimal Get101() { return PreferencesMgr.Instance.Currency101; } public static decimal Get102() { return PreferencesMgr.Instance.Currency102; } public static void InitGalleryView(GList glist, int numItems, float duration, ListItemRenderer OnRendererPersonItem, int itemWidth) { glist.itemRenderer = OnRendererPersonItem; glist.numItems = numItems; var moveW = itemWidth * glist.numItems - glist.viewWidth; DOVirtual.Float(0, moveW + 300, duration, prg => { if (prg > moveW) { return; } glist.scrollPane.SetPosX(prg, false); }).SetLoops(-1); } public static SkeletonAnimation ShowFinger(GGraph target, GTweenCallback onComplete = null) { Action closeCallBack = null; var handSpine = FXManager.Instance.SetFx(target, Fx_Type.fx_hand_pre, ref closeCallBack); handSpine.state.SetAnimation(0, "idle", true); var tweenBtn = CommonHelper.FadeIn(target); tweenBtn.OnComplete(onComplete); return handSpine; } public static void ShowGuide(int _step, Vector2 _targeSize, Vector2 _targePos, Action _onEnd = null, GObject _fingerGuideObj = null) { // var guideData = new GuideData() // { // targeSize = _targeSize, // targePos = _targePos, // step = _step, // onEnd = _onEnd, // fingerGuidePos = _targePos, // }; // // if (_fingerGuideObj != null) // { // guideData.fingerGuidePos = GameHelper.GetUICenterPosition(_fingerGuideObj); // } // // // guideData.needMaskCloseEvent = _step == 10; // // UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.GuideUI_Open, guideData); // // if (_step == 3) // { // } } public static CommonModel GetCommonModel() { return ConfigSystem.GetConfig(); } public static string Get102Str(decimal currency102 = -1) { if (currency102 == -1) { currency102 = PreferencesMgr.Instance.Currency102; } if (IsGiftSwitch()) { if (isRDExchangeMode()) { return $"{currency102:N}"; } else { if (IsGiftSwitch()) return $"${currency102:N}"; else return $"{currency102:N}"; } } else { currency102 = (int)currency102; return $"{currency102:N0}"; } } public static string Get101Str(decimal currency) { return $"{currency:N0}"; } public static string Get101WithSymbol(decimal currency) { return $"({currency:N0})"; // return $"({currency:N0})"; } public static string getChString(decimal ch) { if (GameHelper.isRDExchangeMode()) { string str = ""; return str + $" {ch:N0}"; } else { if (IsGiftSwitch()) return $"${ch:N}"; else return $"{ch:N}"; } } public static string getChNumber(decimal ch) { return $"{ch:N}"; } public static string getPrice(decimal ch) { return $"${ch:N}"; } public static string GetPriceInt(decimal ch) { return $"${ch:N0}"; } public static string GetValueWithSymbol(decimal ch) { if (isRDExchangeMode()) { if (IsGiftSwitch()) { return $"({ch:N})"; } else { return $"({ch:N})"; } } else { if (IsGiftSwitch()) return $"(${ch:N})"; else return $"({ch:N})"; } } public static string GetDeviceLanguage() { return "US"; } public static string GetPaymentPayer() { // return GetPaymentTypeVO().payer; return "PayPal"; } public static void OpenEmail() { var email = ""; var common = ConfigSystem.GetConfig(); if (common != null) { email = common.contactUs; } var subject = "Contact Us"; var body = $"My UID is [ {GetUID()} ]\n"; // var body = ""; var url = $"mailto:{email}?subject={subject}&body={body}"; var uri = new Uri(url); OpenBrowser.OpenURL(uri.AbsoluteUri); GameHelper.ShowTips("Trying to call send mail..."); } public static string GetCurrCountry() { var loginModel = ModuleManager.Instance.GetModel(ModelConst.LoginModel) as LoginModel; var country = loginModel.country; return country.ToUpper(); } public static bool CheckAccountValidly(string account) { return CheckEMailValidly(account); } public static bool CheckEMailValidly(string eMail) { if (eMail.IsNullOrWhiteSpace()) { return false; } const string expression = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; return Regex.IsMatch(eMail, expression); } public static bool IsContinuousSignIn() { if (PreferencesMgr.Instance.SignState.Count == 0) { return false; } if (PreferencesMgr.Instance.SignState.Count >= 7) { return false; } var tmp = PreferencesMgr.Instance.SignState[PreferencesMgr.Instance.SignState.Count - 1]; return InToday(tmp, -1, true); } public static float[] GetRewardValue(int type) { var currentRdLevel = 1; for (var i = 0; i < PreferencesMgr.Instance.MakeupTaskHistory.Count; i++) { var task = PreferencesMgr.Instance.MakeupTaskHistory[i]; if (task.status == MakeupTaskStatus.Inline) { currentRdLevel++; } } // Debug.Log($"GetRewardValue=====================currentRdLevel {currentRdLevel} \n type: {type}"); if (currentRdLevel > 3) { currentRdLevel = 3; } if (type == 0) { var currentIndex = GetSmallValueIndex(currentRdLevel); var vos = ConfigSystem.GetConfig().dataList; SmallrewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRdLevel); } else if (type == 1) { var currentIndex = GetLargeValueIndex(currentRdLevel); var vos = ConfigSystem.GetConfig().dataList; LargerewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRdLevel); } else if (type == 2) { var currentIndex = GetValueIndex(currentRdLevel); var vos = ConfigSystem.GetConfig().dataList; RewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRdLevel); } return new float[] { 0, 0 }; } public static int[] GetRewardBoost(int type) { var currentRdLevel = 1; for (var i = 0; i < PreferencesMgr.Instance.MakeupTaskHistory.Count; i++) { var task = PreferencesMgr.Instance.MakeupTaskHistory[i]; if (task.status == MakeupTaskStatus.Inline) { currentRdLevel++; } } // Debug.Log($"GetRewardValue=====================currentRdLevel {currentRdLevel} \n type: {type}"); if (currentRdLevel > 3) { currentRdLevel = 3; } if (type == 1) { var currentIndex = GetLargeValueIndex(currentRdLevel); var vos = ConfigSystem.GetConfig().dataList; LargerewardNum rewardNumVo = vos[currentIndex]; return GetBoost(rewardNumVo, currentRdLevel); } else if (type == 2) { var currentIndex = GetValueIndex(currentRdLevel); var vos = ConfigSystem.GetConfig().dataList; RewardNum rewardNumVo = vos[currentIndex]; return GetBoost(rewardNumVo, currentRdLevel); } return null; } private static int[] GetBoost(LargerewardNum rewardNumVo, int level) { int[] boost_array = null; switch (level) { case 1: boost_array = rewardNumVo.Boost_1; break; case 2: boost_array = rewardNumVo.Boost_2; break; case 3: boost_array = rewardNumVo.Boost_3; break; } return boost_array; } private static int[] GetBoost(RewardNum rewardNumVo, int level) { int[] boost_array = null; switch (level) { case 1: boost_array = rewardNumVo.Boost_1; break; case 2: boost_array = rewardNumVo.Boost_2; break; case 3: boost_array = rewardNumVo.Boost_3; break; } return boost_array; } private static int GetValueIndex(int index) { var ch = Get102(); var vos = ConfigSystem.GetConfig().dataList; var currentIndex = -1; if (ch < 0) { currentIndex = 0; } else { for (var i = 0; i < vos.Count; i++) { var rewardNumVo = vos[i]; var chArray = index switch { 1 => rewardNumVo.ch_1, 2 => rewardNumVo.ch_2, 3 => rewardNumVo.ch_3, _ => default }; if (i < vos.Count - 1) { if (ch >= (decimal)chArray[0] && ch < (decimal)chArray[1]) { currentIndex = i; break; } } else { if (ch >= (decimal)chArray[0]) { currentIndex = i; break; } } } } return currentIndex; } private static int GetSmallValueIndex(int index) { var ch = Get102(); var vos = ConfigSystem.GetConfig().dataList; var currentIndex = -1; if (ch < 0) { currentIndex = 0; } else { for (var i = 0; i < vos.Count; i++) { var rewardNumVo = vos[i]; var chArray = index switch { 1 => rewardNumVo.ch_1, 2 => rewardNumVo.ch_2, 3 => rewardNumVo.ch_3, _ => default }; if (i < vos.Count - 1) { if (ch >= (decimal)chArray[0] && ch < (decimal)chArray[1]) { currentIndex = i; break; } } else { if (ch >= (decimal)chArray[0]) { currentIndex = i; break; } } } } return currentIndex; } private static int GetLargeValueIndex(int index) { var ch = Get102(); var vos = ConfigSystem.GetConfig().dataList; var currentIndex = -1; if (ch < 0) { currentIndex = 0; } else { for (var i = 0; i < vos.Count; i++) { var rewardNumVo = vos[i]; var chArray = index switch { 1 => rewardNumVo.ch_1, 2 => rewardNumVo.ch_2, 3 => rewardNumVo.ch_3, _ => default }; if (i < vos.Count - 1) { if (ch >= (decimal)chArray[0] && ch < (decimal)chArray[1]) { currentIndex = i; break; } } else { if (ch >= (decimal)chArray[0]) { currentIndex = i; break; } } } } return currentIndex; } private static float[] GetValue(SmallrewardNum rewardNumVo, int level) { float[] normalArray = null; var videoRewardRate = 0f; switch (level) { case 1: normalArray = rewardNumVo.nor_1; videoRewardRate = rewardNumVo.rv_1; break; case 2: normalArray = rewardNumVo.nor_2; videoRewardRate = rewardNumVo.rv_2; break; case 3: normalArray = rewardNumVo.nor_3; videoRewardRate = rewardNumVo.rv_3; break; } float normalValue = Random.Range(normalArray[0], normalArray[1]); normalValue = (float)Math.Round(normalValue, 2); return new float[] { normalValue, videoRewardRate }; } private static float[] GetValue(LargerewardNum rewardNumVo, int level) { float[] normalArray = null; var videoRewardRate = 0f; int[] weight_array = null; int[] boost_array = null; switch (level) { case 1: normalArray = rewardNumVo.nor_1; videoRewardRate = rewardNumVo.rv_1; weight_array = rewardNumVo.weight_1; boost_array = rewardNumVo.Boost_1; break; case 2: normalArray = rewardNumVo.nor_2; videoRewardRate = rewardNumVo.rv_2; weight_array = rewardNumVo.weight_2; boost_array = rewardNumVo.Boost_2; break; case 3: normalArray = rewardNumVo.nor_3; videoRewardRate = rewardNumVo.rv_3; weight_array = rewardNumVo.weight_3; boost_array = rewardNumVo.Boost_3; break; } int rate_all = 0; for (int i = 0; i < weight_array.Length; i++) { rate_all += weight_array[i]; } int random_ = Random.Range(0, rate_all); int int_ = 0; for (int i = 0; i < weight_array.Length; i++) { int_ += weight_array[i]; if (random_ < int_) { videoRewardRate = boost_array[i]; break; } } float normalValue = Random.Range(normalArray[0], normalArray[1]); normalValue = (float)Math.Round(normalValue, 2); return new float[] { normalValue, videoRewardRate }; } private static float[] GetValue(RewardNum rewardNumVo, int level) { float[] normalArray = null; var videoRewardRate = 0f; int[] weight_array = null; int[] boost_array = null; switch (level) { case 1: normalArray = rewardNumVo.nor_1; videoRewardRate = rewardNumVo.rv_1; weight_array = rewardNumVo.weight_1; boost_array = rewardNumVo.Boost_1; break; case 2: normalArray = rewardNumVo.nor_2; videoRewardRate = rewardNumVo.rv_2; weight_array = rewardNumVo.weight_2; boost_array = rewardNumVo.Boost_2; break; case 3: normalArray = rewardNumVo.nor_3; videoRewardRate = rewardNumVo.rv_3; weight_array = rewardNumVo.weight_3; boost_array = rewardNumVo.Boost_3; break; } int rate_all = 0; for (int i = 0; i < weight_array.Length; i++) { rate_all += weight_array[i]; } int random_ = Random.Range(0, rate_all); int int_ = 0; for (int i = 0; i < weight_array.Length; i++) { int_ += weight_array[i]; if (random_ < int_) { videoRewardRate = boost_array[i]; break; } } float normalValue = Random.Range(normalArray[0], normalArray[1]); normalValue = (float)Math.Round(normalValue, 2); return new float[] { normalValue, videoRewardRate }; } public static decimal GetQuizRate() { return 0m; } public static decimal GetNormalRewardValue() { return 0m; } /// /// 传的是初始位置的GObject对象 /// public static void GetRewardOnly(decimal value, RewardOrigin origin, GObject startGObject = null, GObject endGObject = null, Action onCompleted = null, decimal rate = 1) { GetReward(value, origin, startGObject, endGObject, false, false, onCompleted, rate); } public static void GetReward(decimal value, RewardOrigin origin, GObject startGObject = null, GObject endGObject = null, bool isDialog = true, bool isNeedAd = true, Action onCompleted = null, decimal rate = 1, decimal ctRate = 50) { var rewardData = new RewardData(); var rewardSingleData = new RewardSingleData(101, value, origin) { multiRate = rate }; if (startGObject != null) { rewardSingleData.startPosition = GetUICenterPosition(startGObject); } if (endGObject != null) { rewardSingleData.endPosition = GetUICenterPosition(endGObject); } rewardData.AddReward(rewardSingleData); if (isDialog) { rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.Dialog | RewardDisplayType.ValueChange; rewardData.condition = isNeedAd ? RewardCondition.AD : RewardCondition.None; } else { rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.ValueChange; } rewardData.AddCompleted(onCompleted); rewardData.ctRate = ctRate; GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); } /// /// 传的是位置 /// public static void GetRewardOnly1(int id, decimal value, RewardOrigin origin, Vector2 startPos, Vector2 endPos, Action onCompleted = null, decimal rate = 1) { GetReward1(id, value, origin, startPos, endPos, false, false, onCompleted, rate); } public static void GetReward1(int id, decimal value, RewardOrigin origin, Vector2 startPos, Vector2 endPos, bool isDialog = true, bool isNeedAd = true, Action onCompleted = null, decimal rate = 1, decimal ctRate = 50) { var rewardData = new RewardData(); var rewardSingleData = new RewardSingleData(id, value, origin) { multiRate = rate }; if (startPos != null) { rewardSingleData.startPosition = startPos; } if (endPos != null) { rewardSingleData.endPosition = endPos; } rewardData.AddReward(rewardSingleData); if (isDialog) { rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.Dialog | RewardDisplayType.ValueChange; rewardData.condition = isNeedAd ? RewardCondition.AD : RewardCondition.None; } else { rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.ValueChange; } rewardData.AddCompleted(onCompleted); rewardData.ctRate = ctRate; GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); } public static void addInterAdnumber() { look_interad_numbers++; if (SaveData.GetSaveobject().is_get_removead && GameHelper.IsGiftSwitch()) { int cd = SaveData.GetSaveobject().remove_ad_time - Convert.ToInt32(GameHelper.GetNowTime()); if (cd < 0) { SaveData.GetSaveobject().is_get_removead = false; SaveData.GetSaveobject().remove_ad_time = 0; } } if (!SaveData.GetSaveobject().is_get_removead && look_interad_numbers >= ConfigSystem.GetConfig().playtimes) { look_interad_numbers = 0; if (Random.Range(0, 100) < ConfigSystem.GetConfig().interstitialtype) { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.AdcomingUI_Open); } } } public static decimal GetVideoRate() { return 0m; } public static int GetItemNumber(int type) { if (type == 0) { return PlayerPrefs.GetInt("_out", 0); } else if (type == 1) { return PlayerPrefs.GetInt("_back", 0); } else if (type == 2) { return PlayerPrefs.GetInt("_refresh", 0); } return 0; } public static void SetItemNumber(int type, int value) { if (type == 0) { PlayerPrefs.SetInt("_out", value); } else if (type == 1) { PlayerPrefs.SetInt("_back", value); } else if (type == 2) { PlayerPrefs.SetInt("_refresh", value); } } public static void AddItemNumber(int type, int change) { if (type == 0) { PlayerPrefs.SetInt("_out", PlayerPrefs.GetInt("_out", 0) + change); } else if (type == 1) { PlayerPrefs.SetInt("_back", PlayerPrefs.GetInt("_back", 0) + change); } else if (type == 2) { PlayerPrefs.SetInt("_refresh", PlayerPrefs.GetInt("_refresh", 0) + change); } } public static int GetLevel() { return PlayerPrefs.GetInt("_level", 1); } public static void SetLevel(int level) { PlayerPrefs.SetInt("_level", level); } public static int GetLevelstate() { return PlayerPrefs.GetInt("_lvstate", 3);//4种,数字3为可以用广告和金币复活,2为只能用广告,1为只能用金币。0为不能复活 } public static void SetLevelstate(int state) { PlayerPrefs.SetInt("_lvstate", state); } public static int GetGoldNumber() { // return PlayerPrefs.GetInt("_gold", 50); int goldNum = (int)Get101(); return goldNum; } public static void AddGoldNumber(int value) { AddGold(value); } public static bool CheckGoldNumber(int target) { return GetGoldNumber() >= target; } public static void AddGameTime() { int a = PlayerPrefs.GetInt("_time", 0) + 1; PlayerPrefs.SetInt("_time", a); } public static int GetGameTime() { return PlayerPrefs.GetInt("_time", 0); } public static void SetGameday() { PlayerPrefs.SetInt("_day", DateTime.Now.Day); } public static int GetGameday() { return PlayerPrefs.GetInt("_day", 0); } public static int GetGameExp() { return PlayerPrefs.GetInt("_exp", 0); } public static void AddGameExp(int change) { PlayerPrefs.SetInt("_exp", GetGameExp() + change); } public static void ResetGameExp() { PlayerPrefs.SetInt("_exp", 0); } public static int GetBattleLv() { int exp = GetGameExp(); List list = ConfigSystem.GetConfig().dataList; for (int i = 0; i < list.Count; i++) { if (exp < list[i].Eliminating_quantity) { return i; } } return list.Count; } public static void AddGold(int a) { PreferencesMgr.Instance.Currency101 += a; } public static void AddGold(float a) { PreferencesMgr.Instance.Currency101 = (decimal)((float)PreferencesMgr.Instance.Currency101 + a); } public static bool needShowLevelstate(int id = -1) { var makeupTaskData = PreferencesMgr.Instance.MakeupTaskHistory.Last(); var vo = ConfigSystem.GetConfig().GetData(makeupTaskData.tableId); int lv = vo.id; int a = PlayerPrefs.GetInt("ch_lv", 0); if (id != -1) lv = id + 1; if (a < lv) { return true; } return false; } public static void addMoney(int a) { PreferencesMgr.Instance.Currency102 += a; } public static void addMoney(float a) { PreferencesMgr.Instance.Currency102 = (decimal)((float)PreferencesMgr.Instance.Currency101 + a); } public static bool showGameUI = true; public static int look_interad_numbers = 0; public static bool is_first_login = true; public static Dictionary statusDic = new Dictionary(); public static Dictionary> statusDic2 = new Dictionary>(); public static string trace_id; public static void SendLogToServer(string message, string stacktrace, LogType type) { // 如果只需要日期部分,可以使用ToShortDateString()或ToString("yyyy-MM-dd")等进行格式化 if (!GameHelper.GetLoginModel().debug_log) return; System.DateTime currentDate = System.DateTime.Now; var formattedDate = currentDate.ToString("yyyy_MM_dd_HH_mm"); var md5Str = MD5Kit.GetStringMD5(message + stacktrace); if (!statusDic2.ContainsKey(formattedDate)) { statusDic2.Add(formattedDate, new Dictionary()); } if (!statusDic2[formattedDate].ContainsKey(md5Str)) { statusDic2[formattedDate].Add(md5Str, false); } //Debug.Log($"SendLogToServer requestData========={formattedDate} \nmd5Str=== {md5Str}"); if (statusDic2[formattedDate][md5Str]) { return; } long user_id = 0; if (loginModel != null && loginModel.uid != 0) user_id = loginModel.uid; var requestData = new { uid = user_id, device = SystemInfo.deviceModel, os_ver = SystemInfo.operatingSystem, network = GetNetworkType(), device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkManager.identifier, version = Application.version, channel = SuperApplication.Instance.attribution, level = type == 0 ? "error" : "warn", message = message, stacktrace = stacktrace }; statusDic2[formattedDate][md5Str] = true; // Debug.Log($"SendLogToServer requestData1========={JsonConvert.SerializeObject(requestData)}"); // NetworkKit.Post("event/cliDebugLog", requestData, (isSuccess, data) => // { // }); } private static string GetNetworkType() { string types = "Not Connected"; switch (Application.internetReachability) { case NetworkReachability.ReachableViaCarrierDataNetwork: types = "Mobile Data"; break; case NetworkReachability.ReachableViaLocalAreaNetwork: types = "Wi-Fi"; break; } return types; } private static GameObject RainPlayUI; public static void ShowSheepPlayUI(bool isShow) { if (RainPlayUI == null) { RainPlayUI = GameObject.Find("(RainPlayUI)sheep_play"); } if (RainPlayUI != null) { RainPlayUI.transform.localPosition = isShow ? new Vector3(0, 0, 0) : new Vector3(-2000, 0, 0); } } public static bool IsTemporaryEnd; public static void IsShowPettyReward() { if (!IsGiftSwitch()) return; if (SaveData.GetSaveobject().IsGetPettyReward) return; SaveData.GetSaveobject().IsGetPettyReward = true; UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PettyAwardUI_Open); } public static void IsShowFirstReward() { int isGotGold = SaveData.GetSaveobject().isGetFirstGold; int isGotGift = SaveData.GetSaveobject().isGetFirstGift; if (loginModel.new_player || isGotGold == 0 || isGotGift == 0) { GetLoginModel().new_player = false; if (IsGiftSwitch() && isGotGift == 0) { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.FirstRewardUI_Open); if (isGotGold == 0) { SaveData.GetSaveobject().isGetFirstGold = 1; AddGoldNumber(50); } } else if (!IsGiftSwitch() && isGotGold == 0) { SaveData.GetSaveobject().isGetFirstGold = 1; AddGoldNumber(50); } } } public static Dictionary adCallbackInfo = new Dictionary(); public static void SendRevenueToAF(string purch_number) { if (!GameHelper.IsAdModelOfPay() && !string.IsNullOrEmpty(purch_number) && decimal.TryParse(purch_number, out decimal revenue)) { // Debug.Log("付费收益上报AF----------- " + revenue.ToString()); adCallbackInfo.Clear(); adCallbackInfo.Add("appsflyer_id", AppsFlyer.getAppsFlyerId()); adCallbackInfo.Add("customer_user_id", GameHelper.GetLoginModel().uid.ToString()); adCallbackInfo.Add("af_currency", "USD"); adCallbackInfo.Add("af_revenue", revenue.ToString(CultureInfo.InvariantCulture)); AppsFlyer.sendEvent("af_purchase", adCallbackInfo); GameHelper.sendRevenueToServer("af_purchase", "af_revenue", (int)(revenue * 10000)); RankSystemMgr.Instance.addGameExp(addPointType.buy, revenue); } } public static void sendRevenueToServer(string eventname, string eventproperty, int integer) { NetworkKit.BuriedPoint(eventname, eventproperty, integer); } public static void sendHighRevenueToAF() { float purch_number = GameHelper.GetCommonModel().afSendNum; string countryCode = "USD"; adCallbackInfo.Clear(); adCallbackInfo.Add("appsflyer_id", AppsFlyer.getAppsFlyerId()); adCallbackInfo.Add("customer_user_id", GameHelper.GetLoginModel().uid.ToString()); adCallbackInfo.Add("af_currency", countryCode); adCallbackInfo.Add("af_revenue", purch_number.ToString(CultureInfo.InvariantCulture)); AppsFlyer.sendEvent("af_new_purchase", adCallbackInfo); // Debug.Log($"AppsFlyer sendEvent af_new_purchase {purch_number}"); } //获取当前时间戳,精确到秒的时间戳 public static long GetCurrentTimestamp() { // 获取当前UTC时间 DateTime now = DateTime.UtcNow; // 计算从1970年1月1日00:00:00到现在的总秒数 long timestamp = (long)(now - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; return timestamp; } /// /// 检查是否有网络 /// /// true:有网, false:没网 public static bool IsConnect() { return NetworkKit.GetNetworkType() != NetworkType.notConnected; } /// /// 看完广告事件上报 /// /// 1:激励 2:插屏 public static void AdOverEvent(int type) { RespAdEventData respData = new RespAdEventData() { type = type }; NetworkKit.PostWithHeader("event/adWatchOver", respData, (isSuccess, obj) => { }); } /// /// 看完广告收益上报 /// /// 1:激励 2:插屏 public static void AdOverRevenueEvent(int type, float revenue) { RespAdRevenueEventData respData = new RespAdRevenueEventData() { type = type, revenue = revenue }; // Debug.Log($"[Max] AdOverRevenueEvent --------{JsonConvert.SerializeObject(respData)} "); NetworkKit.PostWithHeader("event/adRevenue", respData, (isSuccess, obj) => { }); } /// /// 玩法时长上报 /// /// 玩法类型:1:羊了个羊 2:单词接龙 3:关不住我 public static void PlayGameTimeEvent(int gameType, Action action = null) { m_gameTimes = GetPlayGameTimes(); if (m_gameTimes == 0) { action?.Invoke(); return; } RespGameTimeEventData respData = new RespGameTimeEventData() { type = gameType, second = m_gameTimes }; m_gameTimes = 0; PlayerPrefs.SetInt("game_times", m_gameTimes); NetworkKit.PostWithHeader("event/gameTime", respData, (isSuccess, obj) => { // Debug.Log($"PlayGameTimeEvent==== {m_gameTimes}"); action?.Invoke(); }); } private static int m_gameTimes = 0; public static void SetGameTimes() { m_gameTimes++; PlayerPrefs.SetInt("game_times", m_gameTimes); } public static int GetPlayGameTimes() { return PlayerPrefs.GetInt("game_times", 0); } /// /// 是否能关闭结算界面(必须等调控接口返回数据后才能关闭) /// private static bool isCanCloseResultView = false; public static bool GetCloseResult() { if (!IsConnect()) { ShowTips("The network connection is abnormal."); } return isCanCloseResultView; } public static void SetCloseResult(bool isCan) { isCanCloseResultView = isCan; } /// /// 第几个玩法调控表 /// public static int conf_num = 1; /// /// 玩法调控,请求配置 /// public static void RequestGameConfig() { NetworkKit.PostWithHeader("game/regulate", null, (isSuccess, obj) => { if (isSuccess) { // Debug.Log($"RequestGameConfig==== {obj.conf_num}"); PlayerPrefs.SetInt("game_conf_num", obj.conf_num); conf_num = obj.conf_num; } isCanCloseResultView = true; UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PayloadingUI_Close); }); } public static List makeupLevels = new(); public static void SetLevelsList() { List makeup_list = ConfigSystem.GetConfig().dataList; for (int i = 0; i < makeup_list.Count; i++) { makeupLevels.Add(makeup_list[i].levels_need); } // Debug.Log($"barry makeupLevels-======== {SerializeUtil.ToJson(makeupLevels)}"); } public static bool IsShowLevelTips() { GameHelper.SetLevelsList(); bool isShow = false; for (int i = 0; i < makeupLevels.Count; i++) { if (IsGiftSwitch() && GetLevel() == makeupLevels[i]) { isShow = true; break; } } return isShow; } public static long getNowTimeByMillisecond() { #if !JarvisRelease return DateTimeManager.Instance.GetCurrTimesTampByMillisecond(); // return DateTimeManager.Instance.GetServerCurrTimestamp(); #else return DateTimeManager.Instance.GetServerCurrTimestampByMillisecond(); #endif } public static void ShowPaidPack() { if (Random.Range(0, 100) < GetCommonModel().TurnOffPackRate) { if (!SaveData.GetSaveobject().is_get_ThreeDaysGift) { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.ThreeDaysGiftUI_Open);//在每个打开的界面的onclose方法中调用CallShowTurn方法 } else if (SaveData.GetSaveobject().failed_pack_time > GameHelper.GetNowTime()) { float progress = showResurgence(); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.ResurgenceUI_Open, progress); } else if (!SaveData.GetSaveobject().is_get_battlepass) { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassViewUI_Open); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassunlockUI_Open); } else if (!SaveData.GetSaveobject().have_slot) { // if (SaveData.GetSaveobject().addview_off_time > GameHelper.GetNowTime()) // { // UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.AddViewoffUI_Open); // } // else // { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.BuyslotUI_Open); // } } else { CallShowTurn();//调用事件 } } else { CallShowTurn();//调用事件 } } public static event Action ShowTurn; public static void CallShowTurn() { ShowTurn += ShowTurnOffReward; ShowTurn?.Invoke(); ShowTurn = null; } private static string jsonstr = null; public static string jsonFilePath = Path.Combine(Application.persistentDataPath, "RainData1.json"); static void getJsonData() { // string levelData = PreferencesMgr.Instance.LevelData; // if (!string.IsNullOrEmpty(levelData)) // { // jsonstr = levelData; // } if (File.Exists(jsonFilePath)) { jsonstr = File.ReadAllText(jsonFilePath); File.Delete(jsonFilePath); //return JsonUtility.FromJson(json); } } public static float showResurgence() { getJsonData(); if (string.IsNullOrEmpty(jsonstr)) return 0; List> card_item_list = JsonConvert.DeserializeObject>>(jsonstr); int surplus_item = 0; for (int i = 0; i < card_item_list.Count; i++) { for (int j = 0; j < card_item_list[i].Count; j++) { surplus_item++; } } return 1 - (float)surplus_item / (SaveData.GetSaveobject().all_card_numbers * 3); } public static void ShowTurnOffReward() { Debug.Log("chansghidakai"); if (!UIManager.Instance.IsExistUI(UIConst.GoldRewardUI)) { if (IsTemporaryEnd) return; if (SaveData.GetSaveobject().TurnOffDay != DateTime.Now.Day) { SaveData.GetSaveobject().TurnOffDay = DateTime.Now.Day; SaveData.GetSaveobject().TurnOffNumbers = 0; } if (Random.Range(0, 100) < ConfigSystem.GetConfig().TurnOffRewardsRate) { if ((SaveData.GetSaveobject().TurnOffNumbers < ConfigSystem.GetConfig().TurnOffRewardslimit) && (GameHelper.GetNowTime() > SaveData.GetSaveobject().TurnOffTime)) { SaveData.GetSaveobject().TurnOffTime = GameHelper.GetNowTime() + ConfigSystem.GetConfig().TurnOffRewardsCD; SaveData.GetSaveobject().TurnOffNumbers++; UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.GoldRewardUI_Open); } } SaveData.saveDataFunc(); } } private static HashSet generatedKeys = new HashSet(); public static string GenerateUniqueKey() { const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; string key; do { StringBuilder sb = new StringBuilder(); sb.Append(GenerateRandomString(chars, 4)); sb.Append("-"); sb.Append(GenerateRandomString(chars, 6)); sb.Append("-"); sb.Append(GenerateRandomString(chars, 4)); key = sb.ToString(); } while (generatedKeys.Contains(key)); // 如果重复就重新生成 generatedKeys.Add(key); // 添加到集合中 return key; } static string GenerateRandomString(string charSet, int length) { StringBuilder sb = new StringBuilder(); System.Random random = new System.Random(); for (int i = 0; i < length; i++) { int index = random.Next(charSet.Length); sb.Append(charSet[index]); } return sb.ToString(); } public static void CopyText(string text) { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_STANDALONE_LINUX GUIUtility.systemCopyBuffer = text; #elif UNITY_ANDROID // CopyToClipboardAndroid(text); #elif UNITY_IOS BrigdeIOS.copyText(text); #else Debug.LogWarning("当前平台不支持复制到剪贴板功能"); #endif GameHelper.ShowTips("Copy Succeed"); } public static string getDesByKey(string key) { if (isRDExchangeMode()) { string str = ConfigSystem.GetConfig().dataList.FirstOrDefault(data => data.des_key == key)?.Mode_1 ?? ""; if (str != "") { str = str.Replace("", "") .Replace("", ""); } return str; } else { return ConfigSystem.GetConfig().dataList.FirstOrDefault(data => data.des_key == key)?.Mode_0 ?? ""; } } } }