using System; using FairyGUI; using UnityEngine; using DG.Tweening; using Spine.Unity; using System.Text; using BingoBrain.Core; using System.Linq; using BingoBrain.HotFix; using System.Collections.Generic; using System.Text.RegularExpressions; using Newtonsoft.Json; using AppsFlyerSDK; using DontConfuse; namespace BingoBrain { public static class GameHelper { public static string GetNum(float num, int floatLength = -1) { var numString = num.ToString(floatLength < 0 ? "" : $"f{floatLength}"); if (num > 1000) { return numString; } numDic.TryAdd(num, numString); return numDic[num]; } private const string fenhao = ":"; public static string GetInterval(long interval) { int hour, minute, second; second = (int)(interval % 60); int tempMinute = (int)(interval / 60); hour = tempMinute / 60; minute = tempMinute - (hour * 60); StringBuilder str = new StringBuilder(); if (hour < 10) str.Append("0"); str.Append(hour); str.Append(fenhao); if (minute < 10) str.Append("0"); str.Append(minute); str.Append(fenhao); if (second < 10) str.Append("0"); str.Append(second); return str.ToString(); } public static Vector3 FguiToUnityLocalPot(Vector3 pot) { var v = Vector3.zero; v.x = pot.x; v.y = -pot.y; v.z = pot.z; return v; } public static void Toast(string val, bool isLangue = false) { var valStr = val; var tipsData = TipsData.GetTips(valStr); UICtrlDispatcher.Instance.Dispatch(SkinInfo.JTipsUI_Open, tipsData); } public static void GetVideo(string adId, Action onCompleted) { MaxADKit.ShowVideo(adId, isSuccess => { if (isSuccess) { CtrlDispatcher.Instance.Dispatch(CtrlMsg.WatchVideoFinish); } else { Toast("Ads Not Ready", true); } onCompleted?.Invoke(isSuccess); }); } private static long CanShowInterstitialTime; public static void ShowInterstitial(string key) { //if(Random.Range(0, 100)>ConfigSystem.GetConfig().interstitialtype) return; MaxADKit.ShowInterstitial(key, isSuccess => { if (isSuccess) { // CtrlDispatcher.Instance.Dispatch(CtrlMsg.WatchIntVideoFinish); Debug.Log($"ShowInterstitial key==== {key}"); if (key == "AfterReward") { NetworkKit.BuriedPoint(BuriedPointEvent.Apple_pay_event, BuriedPointEvent.afterRewardAdEnd, 1); } AdOverEvent(2); } }); } private static int Interstitial_num = 0; private enum DynamicType : int { /// /// 累计 /// Max = 0, /// /// 当前 /// Curr } public static string GetItemSum(int id, decimal sum) { if (id == 102) { if (sum == 0) { return "0"; } return $"{sum:N}"; } if (sum == 0) { return "0"; } return GetNoDecimalUnitStr((int)sum); } public static Dictionary gObjectDic = new Dictionary(); public static Dictionary posDic = new Dictionary(); public static void SetGObject(string name, GObject gObject) { gObjectDic[name] = gObject; } public static void SetGuidePos(string key, GObject value) { if (value != null) { posDic[key] = GetUICenterPosition(value); } } public static void SetGuidePos(string key, Vector2 value) { posDic[key] = value; } 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); } 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 BingoBrainRelease1 return DateTimeBoardk.Instance.GetCurrTimestamp(); #else return DateTimeBoardk.Instance.GetServerCurrTimestamp(isFix); #endif } 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 (isLimit) { name = LimitName(name, length); } gTextField.text = name; } public static void OnRiseUIRecover(int itemId, UILayerType layerType = UILayerType.Top) { var gObject = GetItemUI(itemId); if (gObject == null) return; SetUILayer(gObject, gObject.sortingOrder - 500, layerType); UI.Instance.ResetGObjectUILayer(gObject); } public static GComponent GetItemUI(int itemId) { GComponent gObject = null; switch (itemId) { case 101: { if (UI.Instance.GetDynamicUI(UIConst.SmailUI) is SmailUI topUI2) { gObject = topUI2.ui.btn_coin; } else if (UI.Instance.GetDynamicUI(UIConst.BingoStartUI) is BingoStartUI topUI) { gObject = topUI.ui.btn_coin; } } break; case 102: { if (UI.Instance.GetDynamicUI(UIConst.SmailUI) is SmailUI topUI2) { gObject = topUI2.ui.btn_cash; } else if (UI.Instance.GetDynamicUI(UIConst.BingoStartUI) is BingoStartUI topUI) { gObject = topUI.ui.btn_cash; } } break; case 110: { if (UI.Instance.GetDynamicUI(UIConst.BingoStartUI) is BingoStartUI topUI) { gObject = topUI.ui.com_carddi; } } break; } return gObject; } public static void SetUILayer(GObject gObject, int sortingOrder, UILayerType layerType) { gObject.sortingOrder = sortingOrder; UI.Instance.SetGObjectUILayer(layerType, gObject); } public static Dictionary noDecimalUnitDic = new(); public static string GetNoDecimalUnitStr(double tmp) { float num = (float)tmp; // if (num < 1000) // return GetNum(num); // if (!noDecimalUnitDic.ContainsKey(num)) // noDecimalUnitDic.Add(num, HRsac.ConvertUnit(num)); // return noDecimalUnitDic[num]; return num.ToString(); } public static Jcna goWrapperPool = new(); private static ShungTik _shungTik; public static ShungTik ShungTik { get { return _shungTik ??= new ShungTik(); } private set => _shungTik = value; } public static GameObject SetEffect(string effectPath, string effectName, GGraph graph, bool isResetRotation = false) { var effect = ShungTik.Get(effectPath, effectName); var goWrapper = goWrapperPool.Get(); goWrapper.SetWrapTarget(effect, false); graph.SetNativeObject(goWrapper); effect.transform.localPosition = Vector3.zero; effect.transform.localScale = Vector3.one * 100; if (isResetRotation) { effect.transform.localEulerAngles = Vector3.zero; } return effect; } public static GameObject SetEffect(string effectPath, string effectName, GameObject graph, bool isResetRotation = false) { var effect = ShungTik.Get(effectPath, effectName); var goWrapper = goWrapperPool.Get(); goWrapper.SetWrapTarget(effect, false); effect.transform.SetParent(graph.transform); effect.transform.localPosition = Vector3.zero; effect.transform.localScale = Vector3.one; if (isResetRotation) { effect.transform.localEulerAngles = Vector3.zero; } return effect; } public static GameObject SetParticleSystem(string effectPath, string effectName, GGraph graph, bool isResetRotation = false) { var effect = SetEffect(effectPath, effectName, graph, isResetRotation); return effect; } public static SkeletonAnimation SetSpine(string effectPath, string effectName, GGraph graph, string animName = null, bool isLoop = true, bool isResetRotation = false) { var effect = SetEffect(effectPath, effectName, graph, isResetRotation); var spine = effect.GetComponentInChildren(); if (spine != null) { spine.ClearState(); if (!animName.IsNullOrWhiteSpace()) { spine.state?.SetAnimation(0, animName, isLoop); } } return spine; } public static SkeletonAnimation SetSpine(string effectPath, string effectName, GameObject graph, string animName = null, bool isLoop = true, bool isResetRotation = false) { var effect = SetEffect(effectPath, effectName, graph, isResetRotation); var spine = effect.GetComponentInChildren(); spine.ClearState(); if (!animName.IsNullOrWhiteSpace()) { spine.state.SetAnimation(0, animName, isLoop); } return spine; } public static bool IsGiftSwitch() { // return false; // return true; // Debug.Log(GetLoginModel().is_magic); return GetLoginModel().is_magic; } public static bool IsOpenGuide() { return true; } public static bool IsCanGuide() { return IsOpenGuide() && IsGiftSwitch(); } public static int Get101() { return PreferencesMgr.Instance.Currency101; } public static decimal Get102() { return PreferencesMgr.Instance.Currency102; } public static string Get101Str(decimal currency) { return $"{currency:N0}"; } public static Tween DelayedShowGObject(BaseUI baseUI, params GObject[] gObjects) { return DelayedShowGObject(baseUI, 1.5f, gObjects); } public static Tween DelayedShowGObject(BaseUI baseUI, float time = 1.5f, params GObject[] gObjects) { if (baseUI.isClose) { return null; } foreach (var item in gObjects) { item.visible = false; } var tween = DOVirtual.DelayedCall(time, () => { foreach (var item in gObjects) { if (baseUI.isClose) { return; } item.visible = true; } }); return tween; } public static Vector2 WoldToUIPot(Vector3 tar) { Vector3 screenPos = Camera.main.WorldToScreenPoint(tar); screenPos.y = Screen.height - screenPos.y; Vector2 pt = GRoot.inst.GlobalToLocal(screenPos); return pt; } public static void OpenEmail() { var email = ""; var common = ConfigSystem.GetConfig(); if (common != null) { email = common.contactUs; } email = "maxyuen001@gmail.com"; var subject = "Contact Us"; var body = $"Thanks for your words\n"; var url = $"mailto:{email}?subject={subject}&body={body}"; var uri = new Uri(url); Application.OpenURL(uri.AbsoluteUri); GameHelper.Toast("Trying to call send mail..."); } public static void GetReward(int rewardTypeId, decimal value, RewardOrigin origin, GObject startGObject = null, GObject endGObject = null, bool isDialog = true, bool isNeedAd = true, Action onCompleted = null, decimal rate = 1) { var rewardData = new RewardData(); var rewardSingleData = new Goda(rewardTypeId, 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); GameDispatcher.Instance.Dispatch(BingoInfo.GetReward, rewardData); } public static void GetReward(int rewardTypeId, decimal value, RewardOrigin origin, Vector3 startPosition = default, Vector3 endPosition = default, bool isDialog = true, bool isNeedAd = true, Action onCompleted = null, decimal rate = 1) { var rewardData = new RewardData(); var rewardSingleData = new Goda(rewardTypeId, value, origin) { multiRate = rate }; if (startPosition != default) { rewardSingleData.startPosition = startPosition; } if (endPosition != default) { rewardSingleData.endPosition = endPosition; } 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); GameDispatcher.Instance.Dispatch(BingoInfo.GetReward, rewardData); } public static void GetRewardOnly(int rewardTypeId, decimal value, RewardOrigin origin, Action onCompleted = null, GObject startGObject = null, GObject endGObject = null, decimal rate = 1) { GetReward(rewardTypeId, value, origin, startGObject, endGObject, false, false, onCompleted, rate); } public static void GetRewardOnly1(int rewardTypeId, decimal value, RewardOrigin origin, Action onCompleted = null, Vector3 startPosition = default, Vector3 endPosition = default, decimal rate = 1) { GetReward(rewardTypeId, value, origin, startPosition, endPosition, false, false, onCompleted, rate); } public static string Get102Str(decimal currency102 = -1) { if (currency102 == -1) { currency102 = PreferencesMgr.Instance.Currency102; } if (IsGiftSwitch()) { return $"${currency102:N}"; } else { return $"{currency102:N}"; } } public static T GetConfig() { return ConfigSystem.GetConfig(); } public static CommonModel GetCommonModel() { return ConfigSystem.GetConfig(); } public static bool IsCommonCard(CardEntity card) { return !card.data.isSelect && !card.data.isCoin && card.data.type == CardPropType.none && !card.data.isDelaySelect; } public static Out101 GetDynamicVersion_Coin() { var outCoinModel = ConfigSystem.GetConfig(); foreach (Out101 item in outCoinModel.dataList) { int min = item.totalCoin[0]; int max = item.totalCoin[1]; if (max == -1) { max = int.MaxValue; } double val = 0; if (GetCommonModel().DynamicType == (int)DynamicType.Max) { val = PreferencesMgr.Instance.Max101; } else if (GetCommonModel().DynamicType == (int)DynamicType.Curr) { val = PreferencesMgr.Instance.Currency101; } if (val >= min && val <= max) { return item; } } return outCoinModel.dataList.Last(); } public static Out102 GetDynamicVersion_Cash() { var outCashModel = ConfigSystem.GetConfig(); foreach (Out102 item in outCashModel.dataList) { float min = item.totalCash[0]; float max = item.totalCash[1]; if (max == -1) { max = float.MaxValue; } double val = 0; if (GetCommonModel().DynamicType == (int)DynamicType.Max) { val = (double)PreferencesMgr.Instance.Max102; } else if (GetCommonModel().DynamicType == (int)DynamicType.Curr) { val = (double)PreferencesMgr.Instance.Currency102; } if (val >= min && val <= max) { return item; } } return outCashModel.dataList.Last(); } public static void GetRewardExtra(int rewardTypeId, decimal value, int cont_index = 0, Action onCompleted = null, Vector3 startPosition = default) { Debug.Log(rewardTypeId); Debug.Log("????????????????????"); var val = RewardedVal.Get(rewardTypeId, (double)value); val.cont_index = cont_index; val.IsMulti = true; //val.StartPot = startPosition; val.onfinish = onCompleted; //Debug.Log(JsonConvert.SerializeObject(val)); UICtrlDispatcher.Instance.Dispatch(SkinInfo.ExtraItemUI_Open, val); } public static AdReward GetChanceByIdAndNum(int id, int num = 0) { var adRewardModel = GetConfig(); return adRewardModel.GetDataList().FirstOrDefault(vo => vo.reward == id && (vo.rewardAmount == 0 || vo.rewardAmount == num)); } public static float GetDynamicReward(int id, float[] rewardArr) { if (rewardArr == null || rewardArr.Length == 0) { return 0; } var rewardIndex = GetDynamicIndex(id); if (rewardIndex < rewardArr.Length) { return rewardArr[rewardIndex]; } return rewardArr[rewardArr.Length - 1]; } public static int GetDynamicIndex(int id) { if (id == 101) { return GetDynamicVersion_Coin().id - 1; } if (id == 102) { return GetDynamicVersion_Cash().id - 1; } return 0; } public static bool IsCanSignInToday() { var signInModel = ModuleBoardk.Instance.GetModel(ModelConst.JTodModel) as JTodModel; if (signInModel == null) { return false; } var signInDay = signInModel.GetDailyDonusDay(); var dailyBonusItem = PreferencesMgr.Instance.DailyBonusItemLst[signInDay - 1]; return !dailyBonusItem.IsCollect; } public static string GetDynamicVersion() { return GetDynamicVersion_Coin().id + GetDynamicVersion_Cash().id.ToString(); } public const int sunSecond = 86400; private static Dictionary numDic = new(); public static string trace_id; private static LoginModel loginModel; public static Dictionary statusDic = new Dictionary(); public static Dictionary> statusDic2 = new Dictionary>(); internal static void PostFunnelLogin(string str, bool payload = false) { //Debug.Log(str); if (statusDic.TryGetValue(str, out var status)) { if (status) { return; } } loginModel = GetLoginModel(); if (str == "bootstrap") { long timestamp = DateTime.Now.ToUniversalTime().Ticks - 621355968000000000; trace_id = timestamp.ToString(); } long user_id = 0; if (loginModel != null && loginModel.uid != 0) user_id = loginModel.uid; string play_object = ""; if (str == "afRecv" || str == "loginRecv") { play_object = payload ? "success" : "fail"; } login_class requestData = new login_class() { uid = user_id, trace_id = trace_id, device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkMsg.Identifier, version = Application.version, channel = BingoBea.Instance.attribution, type = str, payload = play_object }; Debug.Log(user_id); statusDic.Add(str, true); NetworkKit.Post("event/funnelLogin", requestData, (isSuccess, data) => { }); } public static LoginModel GetLoginModel() { return LoginModel.Instance; } public static void ShowTips(string val, bool isLangue = false) { var valStr = val; if (isLangue) { } var tipsData = TipsData.GetTips(valStr); UICtrlDispatcher.Instance.Dispatch(SkinInfo.JTipsUI_Open, tipsData); } 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 CheckNameValidly(string name) { if (string.IsNullOrEmpty(name)) { return false; } const string expression = @"^[a-zA-Z]*$"; return Regex.IsMatch(name, expression); } public static void ShowLoading(float min = 0.2f, float max = 1f, Action onCompleted = null) { ShowLoading(UnityEngine.Random.Range(min, max), onCompleted); } public static void ShowLoading(float time, Action onCompleted = null) { UICtrlDispatcher.Instance.Dispatch(SkinInfo.NetLoadingUI_Open); // TimerHelper.mEasy.AddTimer(time, () => // { DOVirtual.DelayedCall(time, () => { UICtrlDispatcher.Instance.Dispatch(SkinInfo.NetLoadingUI_Close); onCompleted?.Invoke(); }); //}); } public static string TimeFormat(int second, CountDownType countDownType = CountDownType.Second, string dayFormat = "") { var result = new StringBuilder(); if (second < 0) { second = 0; } if (countDownType == CountDownType.Second) { result.Append(second); return result.ToString(); } int tmpSecond; if (second >= 60) { tmpSecond = second % 60; } else { tmpSecond = second; } result.Append(tmpSecond); if (tmpSecond < 10) { result.Insert(0, 0); } int tmpMin = second / 60; if (countDownType == CountDownType.Minute) { result.Insert(0, ":"); result.Insert(0, tmpMin); return result.ToString(); } int tmpHour = tmpMin / 60; if (countDownType == CountDownType.Hour) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } return result.ToString(); } int tmpDay = tmpHour / 24; if (countDownType == CountDownType.Day) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } if (tmpHour >= 24) { tmpHour %= 24; } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } if (string.IsNullOrEmpty(dayFormat)) { dayFormat = "Days"; } result.Insert(0, $" {dayFormat} "); result.Insert(0, tmpDay); } return result.ToString(); } 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; // Debug.Log("1111111111111111"); 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; ErrorClass requestData = new ErrorClass { uid = user_id, device = SystemInfo.deviceModel, os_ver = SystemInfo.operatingSystem, network = GetNetworkType(), device_id = SystemInfo.deviceUniqueIdentifier, pack_name = NetworkMsg.Identifier, version = Application.version, channel = BingoBea.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; } public static bool showGameUI = true; 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 30; 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 void AddGold(int a) { PreferencesMgr.Instance.Currency101 += a; } public static void AddGold(float a) { PreferencesMgr.Instance.Currency101 = (int)((float)PreferencesMgr.Instance.Currency101 + a); } 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 9999; 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 9999; 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 look_interad_numbers = 0; public static bool is_first_login = true; public static void addInterAdnumber() { look_interad_numbers++; if (!SaveData.GetSaveobject().is_get_removead && look_interad_numbers >= ConfigSystem.GetConfig().playtimes) { look_interad_numbers = 0; if (UnityEngine.Random.Range(0, 100) < ConfigSystem.GetConfig().interstitialtype) { if (UI.Instance.IsExistUI(UIConst.H5UI)) GameHelper.ShowInterstitial("interstitial_h5reward"); else UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.AdcomingUI_Open); } } } 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 float[] GetRewardValue(int type) { var currentRedeemLevel = 1; for (var i = 0; i < PreferencesMgr.Instance.MakeupTaskHistory.Count; i++) { var task = PreferencesMgr.Instance.MakeupTaskHistory[i]; if (task.status == MakeupTaskStatus.Inline) { currentRedeemLevel++; } } // Debug.Log($"GetRewardValue=====================currentRedeemLevel {currentRedeemLevel} \n type: {type}"); if (currentRedeemLevel > 3) { currentRedeemLevel = 3; } var currentIndex = GetValueIndex(currentRedeemLevel); Debug.Log("++++++++++++++++++++++++++++==" + currentIndex); if (currentIndex != -1) { if (type == 0) { var vos = ConfigSystem.GetConfig().dataList; SmallrewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRedeemLevel); } else if (type == 1) { var vos = ConfigSystem.GetConfig().dataList; LargerewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRedeemLevel); } else if (type == 2) { var vos = ConfigSystem.GetConfig().dataList; rewardNum rewardNumVo = vos[currentIndex]; return GetValue(rewardNumVo, currentRedeemLevel); } } return new float[] { 0, 0 }; } private static int GetValueIndex(int index) { var cash = Get102(); var vos = ConfigSystem.GetConfig().dataList; var currentIndex = -1; if (cash < 0) { currentIndex = 0; } else { for (var i = 0; i < vos.Count; i++) { var rewardNumVo = vos[i]; var cashArray = index switch { 1 => rewardNumVo.cash_1, 2 => rewardNumVo.cash_2, 3 => rewardNumVo.cash_3, _ => default }; if (i < vos.Count - 1) { if (cash >= (decimal)cashArray[0] && cash < (decimal)cashArray[1]) { currentIndex = i; break; } } else { if (cash >= (decimal)cashArray[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 = UnityEngine.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; 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 = UnityEngine.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; 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 = UnityEngine.Random.Range(normalArray[0], normalArray[1]); normalValue = (float)Math.Round(normalValue, 2); return new float[] { normalValue, videoRewardRate }; } public static bool IsTemporaryEnd; 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 Dictionary adCallbackInfo = new Dictionary(); 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()); AppsFlyer.sendEvent("af_new_purchase", adCallbackInfo); Debug.Log($"AppsFlyer sendEvent af_new_purchase {purch_number}"); } public static void SetSelfAvatar(GLoader gLoader) { var avatarId = PreferencesMgr.Instance.PlayerAvatarId; EyesHarmony.SetAvatarToLoader(avatarId, gLoader); } public static bool needShowLevelstate(int id = -1) { var makeupTaskData = PreferencesMgr.Instance.MakeupTaskHistory.Last(); Debug.Log(makeupTaskData.tableId); var vo = ConfigSystem.GetConfig().GetData(makeupTaskData.tableId); Debug.Log(vo); int lv = vo.id; int a = PlayerPrefs.GetInt("cash_lv", 0); if (id != -1) lv = id + 1; if (a < lv) { return true; } return false; } public static bool checkGoldNumber(int target) { return PreferencesMgr.Instance.Currency101 >= target ? true : false; } public static Dictionary activeTimes = new Dictionary(); public static Dictionary activeTimes_saveingpot = new Dictionary(); public static int GetBattleLv_Index() { 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 - 1; } /// /// 检查是否有网络 /// /// true:有网, false:没网 public static bool IsConnect() { return NetworkKit.GetNetworkType() != NetworkType.notConnected; } /// /// 看完广告事件上报 /// /// 1:激励 2:插屏 public static void AdOverEvent(int type) { RespAdEventData respData = new() { type = type }; NetworkKit.PostWithHeader("event/adWatchOver", respData, (isSuccess, obj) => { }); } /// /// 玩法时长上报 /// /// 玩法类型:1:羊了个羊 2:单词接龙 3:关不住我 public static void PlayGameTimeEvent(int gameType, Action action = null) { m_gameTimes = GetPlayGameTimes(); if (m_gameTimes == 0) return; RespGameTimeEventData respData = new() { 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); }); } /// /// 是否是广告兑换模式 /// /// true:广告兑换 -- false:三方支付 public static bool IsAdModelOfPay() { bool isAd = true; if (IsGiftSwitch() && GetLoginModel().enwp == 1) { isAd = false; } return isAd; } public static List makeupLevels = new(); public static void SetLevelsList() { makeupLevels.Clear(); 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() { 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 DateTimeBoardk.Instance.GetCurrTimesTampByMillisecond(); // return DateTimeManager.Instance.GetServerCurrTimestamp(); #else return DateTimeBoardk.Instance.GetServerCurrTimestampByMillisecond(); #endif } public static void sendRevenueToServer(string eventname, string eventproperty, int integer) { NetworkKit.BuriedPoint(eventname, eventproperty, integer); } 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 = DateTimeBoardk.Instance.GetCurrDateTime().AddDays(offset); yesterday = new DateTime(yesterday.Year, yesterday.Month, yesterday.Day); if (isInclude) { return oldDate >= yesterday; } return oldDate > yesterday; } } } public class RespAdEventData { public int type; } public class RespGameTimeEventData { public int type; public int second; } public class ResGameConfigData { public int conf_num; } public class login_class { public long uid; public string trace_id; public string device_id; public string pack_name; public string version; public string channel; public string type; public string payload; }