using Thousandto.Code.Center;
using Thousandto.Core.Base;
using UnityEngine;
using Thousandto.Cfg.Data;
using Thousandto.CoreSDK;
using Thousandto.CoreSDK.Event;
using Thousandto.Code.Global;
using MSG_backpack;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Networking;
using System.Collections;
using Thousandto.Plugins.Common;
using EventManager = UnityEngine.Gonbest.MagicCube.EventManager;
using EventSystemHandler = UnityEngine.Gonbest.MagicCube.EventSystemHandler;
using JSONNode = UnityEngine.Gonbest.MagicCube.JSONNode;
using JSON = UnityEngine.Gonbest.MagicCube.JSON;
using PathUtils = UnityEngine.Gonbest.MagicCube.PathUtils;
using CoroutinePool = UnityEngine.Gonbest.MagicCube.CoroutinePool;
using StringUtils = UnityEngine.Gonbest.MagicCube.StringUtils;
using AppPersistData = UnityEngine.Gonbest.MagicCube.AppPersistData;
using System;
using UnityEngine.Gonbest.MagicCube;
using BestHTTP.WebSocket;
namespace Thousandto.Code.Logic
{
///
/// SDK 接入的管理类
///
public class SDKSystem
{
#region //私有变量
//保存的重置数据 物品ID,物品名称,人民币
private string _itemId;
private string _itemName;
private float _rmb;
//是否从sdk界面点击切换账号
private bool _isLogoutFromSDKUI = true;
private string _platformName = "defalt";
private string _savePlayerId = "";
private string _hasSendPowerInfoMsg = PlayerPrefs.GetString("HAS_SEND_POWERINFO");
//LocalVersion.xml的fgi
private int _localFgi = 0;
//游戏版本号
private string _appVersion = "1.0.0.0";
// 绿岸获取商品列表 请求url
private string _defaultPayReqUrl = string.Format("{0}/api/goods/list.do?app_id=16&chn_id=73", SDKCacheData.DefaultURL);
private string PayReqUrl
{
get
{
if (string.IsNullOrEmpty(SDKCacheData.AppID))
{
return _defaultPayReqUrl;
}
else
{
_defaultPayReqUrl = string.Format("{0}/api/goods/list.do?app_id={1}&chn_id={2}",
GameCenter.SDKSystem.SDKImplement.GetServerUrl(),
SDKCacheData.AppID,
SDKCacheData.ChannelID);
}
return _defaultPayReqUrl;
}
}
//缓存的渠道名字
private string _cacheChnnelName = null;
//缓存的当前货币符号
private string _cacheMoneySign = null;
///
/// 获取QQ大厅启动的参数
///
///
public Dictionary GetPCParams()
{
return FuncellSDK.Instance.GetPCParams();
}
#endregion
#region //成员和属性
//是否新创建角色的标记
public bool IsCreatePlayerFlag { get; set; }
public long CreateRoleTime { get; set; }
public string PlatformName
{
get
{
return _platformName = SDKBridge.GetPlatformName();
}
}
///
/// 获取LocalVersion.xml的FGI,用作渠道判断
///
public int LocalFGI
{
get
{
//取一次就行了,这个值不会变
if (_localFgi != 0)
{
return _localFgi;
}
if (AppManager.Instance.LocalVersionData.ContainsKey("fgi"))
{
string fgi = AppManager.Instance.LocalVersionData["fgi"];
int.TryParse(fgi, out _localFgi);
}
return _localFgi;
}
}
public string AppVersion
{
get
{
if (_appVersion != "1.0.0.0")
{
return _appVersion;
}
if (AppManager.Instance.LocalVersionData.ContainsKey("local_app_version"))
{
_appVersion = AppManager.Instance.LocalVersionData["local_app_version"];
}
return _appVersion;
}
}
//SDK底层的一些具体实现
public CoreSDK.FuncellSDK SDKImplement
{
get
{
return CoreSDK.FuncellSDK.Instance;
}
}
#endregion
#region 构造函数、初始化
public SDKSystem()
{
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_LOGIN_SUCCESS, OnSDKLoginSuccess);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_LOGIN_FAIL, OnSDKLoginFailOrCancel);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_LOGIN_SWITCH_ACCOUNT, OnSDKLoginSwitchAccount);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_LOGIN_LOGOUT_ACCOUNT, OnSDKLogoutAccount);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_PAY_CALLBACK, OnSDKPayCallback);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_PAY_ORDER_BACK, OnSDKPayOrderback);
RegFixEventHandle(SDKEventDefine.SDK_COMMIT_TO_APPSTORE, OnCommitToAppstore);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_SERVERS_LOADED, OnServerLoadedCallback);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_NOTICE, OnNoticeCallback);
RegFixEventHandle(SDKEventDefine.SDK_CALLBACK_REALNAME_RESULT, OnRealNameCallback);
RegFixEventHandle((int)LogicEventDefine.EID_EVENT_RECONNECT_SUCCESS, OnReConnectSuccess);
RegFixEventHandle((int)LogicEventDefine.EID_EVENT_FIGHT_POWER_CHANGED, OnFightPowerChanged);
RegFixEventHandle((int)LogicEventDefine.EID_EVENT_WELFARE_CARD_RECEIVED, OnWelfareCardUpdate);
ClearFixEvent(SDKEventDefine.SDK_COMMIT_TO_APPSTORE);
RegFixEventHandle(SDKEventDefine.SDK_COMMIT_TO_APPSTORE, (_obj, _sender) => { });
ClearFixEvent(SDKEventDefine.SDK_EXIT_CALL);
RegFixEventHandle(SDKEventDefine.SDK_EXIT_CALL, (_obj, _sender) =>
{
GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.Exit_Game),
(s) =>
{
if (s == MsgBoxResultCode.Button2)
{
//退出游戏
CoreSDK.FuncellSDK.Instance.EventExit();
#if UNITY_STANDALONE_WIN
AppPersistData.WantExitResult = true;
#endif
Application.Quit();
}
});
});
//清除TryExitGame的消息,然后再注册---在SDKRootScript也注册了这个消息
ClearFixEvent(SDKEventDefine.SDK_TRY_EXIT_GAME);
RegFixEventHandle(SDKEventDefine.SDK_TRY_EXIT_GAME,
(_obj, _sender) =>
{
//如果当前注册了关闭当前窗体的事件,那么就执行关闭当前窗体的处理
if (GameCenter.EventManager.IsExistEventHandler((int)LogicEventDefine.EID_EVENT_HIDE_CURRENT_FORM))
{
//将sdk的事件转接到游戏内的事件
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HIDE_CURRENT_FORM);
}
else
{
ExitGame();
}
}
);
//RegFixEventHandle(SDKEventDefine.SDK_VOICE_ROOM_PERSON_NUM, OnVoiceRoomNumberResponse);
//RegFixEventHandle(SDKEventDefine.SDK_VOICE_ROOM_ENTER_FAIL, OnJoinVoiceRoomFail);
ClearFixEvent(SDKEventDefine.SDK_CLIP_IMG_CALLBACK);
RegFixEventHandle(SDKEventDefine.SDK_CLIP_IMG_CALLBACK,
(_obj, _sender) =>
{
string path = _obj as string;
string bytesBase64 = _sender as string;
if (string.IsNullOrEmpty(path))
{
GameCenter.MsgPromptSystem.ShowPrompt("Error ImagePath Is Null");
return;
}
if (string.IsNullOrEmpty(bytesBase64))
{
GameCenter.MsgPromptSystem.ShowPrompt("Error ImageData Is Null");
return;
}
byte[] bytes = Convert.FromBase64String(bytesBase64);
//保存到文件
File.WriteAllBytes(path, bytes);
//将sdk的事件转接到游戏内的事件
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_CLIP_IMG_CALLBACK, path);
}
);
#if UNITY_ANDROID || UNITY_IPHONE
//正式环境,从app包中读取app版本
#if !UNITY_EDITOR
if (CoreSDK.FuncellSDK.Instance.UseSDK)
{
string appVers = "";
string resVers = "";
Update.Manager.UpdateManager.Instance.GetVersionInfo(out appVers, out resVers);
}
#endif
#endif
#if UNITY_STANDALONE_WIN
AppPersistData.WantExitResult = false;
Application.wantsToQuit += () =>
{
if (!AppPersistData.WantExitResult)
{
if (GameCenter.MainFunctionSystem.FunctionIsVisible(FunctionStartIdCode.ExitRewardTips))
{
GameCenter.MainFunctionSystem.DoFunctionCallBack(FunctionStartIdCode.ExitRewardTips, 0);
}
else
{
GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.Exit_Game),
(s) =>
{
if (s == MsgBoxResultCode.Button2)
{
//退出游戏
CoreSDK.FuncellSDK.Instance.EventExit();
AppPersistData.WantExitResult = true;
Application.Quit();
}
});
}
}
return AppPersistData.WantExitResult;
};
#endif
}
public void Initalize()
{
//增加计时器,每天00.01定时执行操作,循环的,主要是上海那边说要登记下第二天还没下线的玩家
GameCenter.TimerEventSystem.AddTimeStampDayEvent(1, 1, true, null, SendLoginTypeMsg);
}
public void Unitialize()
{
}
#endregion
#region 下载充值列表的数据
///
/// 下载充值列表
///
public void DownLoadPayList()
{
GameCenter.LuaSystem.Adaptor.DownLoadPayList();
}
#endregion
#region // 逻辑代码, 设置数据,提供充值接口。 以下接口必须都被调用了,充值界面才能打开
//参数1为计时器id,参数2为有效期剩余时间
private void SendLoginTypeMsg(int eventId, double remainTime, object param)
{
//发送统计数据给SDK
SDKCacheData.LoginType = "3";
GameCenter.SDKSystem.SendEventServerInfo();
}
//设置角色信息
public void SetRoleInfo()
{
if (SkipSDK()) return;
var player = GameCenter.GameSceneSystem.GetLocalPlayer();
if (player == null) return;
//保存vip等级
SDKCacheData.RoleVipLevel = player.VipLevel.ToString();
var occName = GetOccName(player.Occ);
var gold = GameCenter.ItemContianerSystem.GetEconomyWithType(ItemTypeCode.Gold);
//角色性别
int roleSex = DeclarePlayerOccupation.Get((int)player.Occ).Sex;
//当前地图ID
int mapId = GameCenter.GameSceneSystem.GetActivedMapID();
FuncellSDK.Instance.SetRoleInfo
(
player.Name,
player.ID.ToString(),
occName,
player.FightPower,
gold,
player.Level,
roleSex,
mapId,
AppVersion,
CreateRoleTime
);
}
//获取职业的名字
private string GetOccName(int occ)
{
var cfg = DeclarePlayerOccupation.Get(occ);
if (cfg != null) return cfg.JobName;
return "";
}
//初始化角色等级信息,当第一次进入游戏主场景时
public void SetLevelInfoWhileFirstEnterGame(int level)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SetLevelInfoWhileFirstEnterGame(level);
Debug.Log("初始化玩家等级: #" + level);
}
//设置角色元宝余额
public void SetGoldBalance(int balance)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SetGoldBalance(balance);
}
//设置公会信息
public void SetGuildName(string name)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SetGuildName(name);
}
//设置服务器信息,选择服务器的时候就设置了
public void SetServerInfo(string serverId, string serverName)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SetServerInfo(serverId, serverName);
}
#endregion
#region //主动调用SDK的功能, 充值、登陆、账号切换、等级变化、订单查询
public void Login()
{
PlayerEventRecord.Instance.RecordEvent(PlayerEventEnum.ActionSDKLoginBegin);
CoreSDK.FuncellSDK.Instance.SDKLogin();
}
public void Logout()
{
CoreSDK.FuncellSDK.Instance.SDKLogout();
}
//登出
public void SDKLogout()
{
_isLogoutFromSDKUI = false;
CoreSDK.FuncellSDK.Instance.SDKLogout();
}
public void SwitchAccount()
{
CoreSDK.FuncellSDK.Instance.SwitchAccount();
}
public void DealMessage(int id)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.DealMessage(id);
}
///
/// 升级时的时间
///
///
public void SetLevelUpTime(long levelUpTime)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SetRoleLevelupTime(levelUpTime);
}
public void ExitGame()
{
if (!GameCenter.LuaSystem.IsInit) return;
int maxActive = GameCenter.LuaSystem.Adaptor.GetDailyMaxActive();
long active = GameCenter.ItemContianerSystem.GetEconomyWithType(Code.Global.ItemTypeCode.ActivePoint);
//需要网络是连接的
if ((maxActive > active || active > 0) && GameCenter.Networker.IsConnected)
{
if (GameCenter.MainFunctionSystem.FunctionIsVisible(FunctionStartIdCode.ExitRewardTips))
{
GameCenter.MainFunctionSystem.DoFunctionCallBack(FunctionStartIdCode.ExitRewardTips, 0);
}
else
{
//GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.Exit_Game), (code) =>
//{
// if (code == MsgBoxResultCode.Button2)
// {
// Application.Quit();
// }
//});
if (!FuncellSDK.Instance.ExitGame())
{
#if UNITY_STANDALONE_WIN
AppPersistData.WantExitResult = true;
#endif
Application.Quit();
}
}
}
else
{
//GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.Exit_Game), (code) =>
//{
// if (code == MsgBoxResultCode.Button2)
// {
// Application.Quit();
// }
//});
if (!FuncellSDK.Instance.ExitGame())
{
#if UNITY_STANDALONE_WIN
AppPersistData.WantExitResult = true;
#endif
Application.Quit();
}
}
}
//充值接口
public void Pay(string itemId, string itemName, int buyNum, float price, string goodsDealType, string payNotifyUrl, string rechargeType = "1", string extension = "1", int cfgId = 0, string orderNo = "0")
{
//先保存数据
_rmb = price;
_itemId = itemId;
_itemName = itemName;
SetRoleInfo();
Debug.LogFormat(
"SDKSystem Pay: " +
"itemId = {0}, " +
"itemName = {1}, " +
"buyNum = {2}, " +
"price = {3}, " +
"goodsDealType = {4}, " +
"payNotifyUrl = {5}, " +
"rechargeType = {6}, " +
"extension = {7}, " +
"cfgId = {8}, " +
"orderNo = {9}",
itemId, itemName, buyNum, price, goodsDealType, payNotifyUrl, rechargeType, extension, cfgId, orderNo);
#if UNITY_EDITOR
//编辑器模式下使用GM命令进行充值
MSG_Chat.ChatReqCS req = new MSG_Chat.ChatReqCS();
req.chattype = 0;
req.recRoleId = 0;
req.condition = string.Format("&rechargeid {0}", itemId);
req.chatchannel = 0;
req.Send();
#else
FuncellSDK.Instance.Pay(itemId, itemName, buyNum, price, goodsDealType, payNotifyUrl, rechargeType, extension, cfgId, orderNo);
#endif
}
//调用SDK等级变化接口
public void CallLevelChange(int level)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.OnLevelChange(level);
}
public void SendEventLogin()
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SendEventLogin();
}
public void EventExit()
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.EventExit();
}
public void SendEventCreateRole()
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SendEventCreatRole();
}
public void SendEventServerInfo()
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SendEventServerInfo();
}
public void SendEventLevelUp()
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SendEventLevelUp();
}
public void SendEventTaskFinsh(int taskId, string taskType)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.SendEventTaskFinsh(taskId, taskType);
}
public void InstallApp(string pathOrUrl)
{
if (SkipSDK()) return;
CoreSDK.FuncellSDK.Instance.InstallApp(pathOrUrl);
}
#endregion
#region//SDK 回调相关
//SDK登陆成功
private void OnSDKLoginSuccess(object obj, object sender)
{
string msg = obj as string;
if (msg == null || string.IsNullOrEmpty(msg))
{
Debug.LogError("SDK登陆失败,返回msg为null");
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_UPDATE_RECORDER_STEP, new object[] { Thousandto.Update.Recorder.StepType.StartSDKLogin, 1, "SDK登陆失败,返回msg为null" });
return;
}
//如果是在游戏场景,则登陆无效。比如应用宝在返回主界面一段时间后再切回游戏会触发sdk授权成功的回调
//这个时候是无效的
if (GameCenter.GameStateSystem != null &&
GameCenter.GameStateSystem.GetCurState() != null &&
(GameStateId)GameCenter.GameStateSystem.GetCurState().GetStateId() == GameStateId.World)
{
Debug.LogError("SDK登陆无效,在游戏主场景中触发了登陆回调 -->" + msg);
return;
}
GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.C_LOGINFORM_MSGBOX_CONNECTING),
null, null, null, false, true, 5, MsgInfoPriority.Highest, 0.3f);
var json = JSON.Parse(msg);
//账户名
SDKCacheData.PlatUserName = json["username"].Value;
//UID
SDKCacheData.PlatformUID = json["userID"].Value;
SDKCacheData.CPUserID = json["cpUserID"].Value;
SDKCacheData.CPUserName = json["cpUserName"].Value;
SDKCacheData.Token = json["token"].Value;
//应用编号
SDKCacheData.AppID = json["appID"].Value;
//渠道编号
SDKCacheData.ChannelID = json["channelID"].Value;
int _channelID = 0;
int.TryParse(json["channelID"].Value, out _channelID);
SDKBridge.PlatformID = _channelID;
Thousandto.Update.Recorder.StepRecorder.SetChannelName(SDKBridge.GetPlatformName());
Thousandto.Update.Recorder.StepRecorder.SetAccountID(SDKCacheData.PlatformUID);
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_UPDATE_RECORDER_STEP, new object[] { Thousandto.Update.Recorder.StepType.StartSDKLogin });
//GameCenter.LoginSystem.Account = "";
//GameCenter.ServerListSystem.DownloadServerList();
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_SDK_LOGIN_SUCCESS);
PlayerPrefs.SetString(GameGlobalData.PlayerPrefs_Account, SDKCacheData.PlatUserName);
}
private void OnSDKLogoutAccount(object obj, object sender)
{
GameCenter.GameSceneSystem.ReturnToLogin();
}
//切换账号,返回登陆界面
private void OnSDKLoginSwitchAccount(object obj, object sender)
{
//直接调用返回登陆
GameCenter.GameSceneSystem.ReturnToLogin();
}
//SDK登陆失败或取消
private void OnSDKLoginFailOrCancel(object obj, object sender)
{
string msg = obj as string;
if (msg == null || msg == "")
{
Debug.Log("登陆失败");
return;
}
if (msg.IndexOf("0") > 0)
{
Debug.Log("登陆出错");
if (LanguageSystem.Lang == LanguageConstDefine.TW)
{
GameCenter.MsgPromptSystem.ShowMsgBox("目前您的網路不穩,建議您完整退出遊戲再重新嘗試登入", DeclareMessageString.Get(DeclareMessageString.C_MSGBOX_OK));
}
}
if (msg.IndexOf("1") > 0)
{
Debug.Log("登陆取消");
}
}
///
/// 充值回调,通知服务器加元宝
///
///
private void OnSDKPayCallback(object obj, object sender)
{
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE);
string msg = obj as string;
if (msg == null || string.IsNullOrEmpty(msg))
{
UnityEngine.Debug.LogError("充值返回订单信息是空的: " + msg);
return;
}
UnityEngine.Debug.LogError("充值回调,通知服务器加元宝 OnSDKPayCallback: " + obj);
var node = JSONNode.Parse(msg);
string token = node["accessToken"].Value;
string orderId = node["purchase_order"].Value;
if (token == null || orderId == null)
{
UnityEngine.Debug.LogError("充值返回订单信息有问题: " + msg);
return;
}
if (orderId == "")
{
UnityEngine.Debug.Log("SDK没有返回订单号,充值失败了!" + msg);
return;
}
}
//订单查询结果
private void OnSDKPayOrderback(object obj, object sender)
{
GameCenter.PushFixEvent(UIEventDefine.UI_WAITING_CLOSE);
UnityEngine.Debug.LogError("11111订单查询结果 OnSDKPayOrderback: " + obj);
if ((Thousandto.CoreSDK.SDKBridge.SDKPlatform & SDKPlatform.Normal) == 0)
{
return;
}
if (obj == null || string.IsNullOrEmpty((string)obj))
{
UnityEngine.Debug.Log("没有漏单");
return;
}
UnityEngine.Debug.LogError("22222订单查询结果 OnSDKPayOrderback: " + obj);
//SendReqGetGold((string)obj);
ResetPayData();
}
private void OnCommitToAppstore(object obj, object sender)
{
string url = obj as string;
if (string.IsNullOrEmpty(url))
{
UnityEngine.Debug.LogError("OnCommitToAppstore: error url-" + obj);
return;
}
CoreSDK.FuncellSDK.Instance.CommitToAppStore(url);
}
private void OnServerLoadedCallback(object obj, object sender)
{
string json = obj as string;
if (string.IsNullOrEmpty(json))
{
UnityEngine.Debug.LogError("OnServerLoadedCallback: error servers -" + obj);
return;
}
var node = JSONNode.Parse(json);
//保存SDK过来的服务器列表
SDKCacheData.ServersJson = node["servers"];
}
private void OnNoticeCallback(object obj, object sender)
{
string notice = obj as string;
if (string.IsNullOrEmpty(notice))
{
UnityEngine.Debug.LogError("OnNoticeCallback: error notice-" + obj);
return;
}
//保存SDK过来的公告的内容
SDKCacheData.NoticeContent = notice;
}
private void OnReConnectSuccess(object obj, object sender)
{
//登录类型,普通登录 = 1,掉线重连 = 2 ,跨天登记 = 3
SDKCacheData.LoginType = "2";
GameCenter.SDKSystem.SendEventServerInfo();
}
//战力改变
private void OnFightPowerChanged(object obj, object sender = null)
{
//战力达到100万的统计,中度活跃用户
//达到100万并且没有发送过
string _playerRoleId = "";
var localPlayer = GameCenter.GameSceneSystem.GetLocalPlayer();
if (null == localPlayer)
{
return;
}
_playerRoleId = localPlayer.ID.ToString();
//战力小于100万就不走了
if (localPlayer.FightPower < 1000000)
{
return;
}
//加个判断,少点IO导致的GC
if (string.IsNullOrEmpty(_savePlayerId))
{
_savePlayerId = PlayerPrefs.GetString("PLAYER_ROLEID");
if (string.IsNullOrEmpty(_savePlayerId))
{
PlayerPrefs.SetString("PLAYER_ROLEID", localPlayer.ID.ToString());
_savePlayerId = localPlayer.ID.ToString();
}
else
{
//not a same role, save the player id
if (!_playerRoleId.Equals(_savePlayerId))
{
PlayerPrefs.SetString("PLAYER_ROLEID", localPlayer.ID.ToString());
_savePlayerId = localPlayer.ID.ToString();
}
}
}
if (!_hasSendPowerInfoMsg.Equals(_savePlayerId))
{
PlayerPrefs.SetString("HAS_SEND_POWERINFO", "");
_hasSendPowerInfoMsg = "";
}
//判断是否是同一个角色,并且还没发过统计消息
if (localPlayer.ID.ToString().Equals(_savePlayerId) && string.IsNullOrEmpty(_hasSendPowerInfoMsg) && localPlayer.FightPower >= 1000000)
{
string playerID = localPlayer.ID.ToString();
long fightPower = localPlayer.FightPower;
PlayerPrefs.SetString("HAS_SEND_POWERINFO", playerID);
_hasSendPowerInfoMsg = playerID;
SDKCacheData.FightPower = fightPower.ToString();
FuncellSDK.Instance.EventFightPower();
}
}
//购买月卡周卡
private void OnWelfareCardUpdate(object obj, object sender)
{
if (obj != null)
{
int id = int.Parse(obj.ToString());
DeclareMonthCard cfg = DeclareMonthCard.Get(id);
if (cfg != null)
{
//周卡
if (cfg.Day < 30 && cfg.Day > 0)
{
FuncellSDK.Instance.EventWMCard(WeekMonthCard.CARD_WEEK);
}
//月卡
else
{
FuncellSDK.Instance.EventWMCard(WeekMonthCard.CARD_MONTH);
}
}
}
}
///
/// 实名认证的结果
///
///
///
private void OnRealNameCallback(object obj, object sender)
{
UnityEngine.Debug.LogError("OnRealNameCallback: result-" + obj);
string result = obj as string;
if (string.IsNullOrEmpty(result))
{
UnityEngine.Debug.LogError("OnRealNameCallback: error result-" + obj);
return;
}
var node = JSONNode.Parse(result);
//这个是成功或者失败的标记
bool res = node["result"].AsBool;
//code 0:实名认证成功
// 2014:身份证错误
// 2015:姓名错误
int code = node["code"].AsInt;
//认证成功了
if (res || code == 0)
{
var msg = new MSG_Register.ReqNoticeCertifySuccess();
msg.Send();
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_SHIMING_TONGGUO));
GameCenter.MainFunctionSystem.SetFunctionVisible(FunctionStartIdCode.Certification, false);
}
//认证失败
else
{
switch (code)
{
//身份证错误
case 2014:
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_SFYZSB));
break;
//姓名错误
case 2015:
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_XMYZSB));
break;
default:
GameCenter.MsgPromptSystem.ShowPrompt(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_SMYZSB));
break;
}
}
}
private void SendReqGetGold(string orderId)
{
//MSG_Recharge.ReqGetRechargeGold req = new MSG_Recharge.ReqGetRechargeGold();
//req.access_token = SDKCacheData.Token;
//req.orderId = orderId;
//req.Send();
}
//重置保存的充值数据
private void ResetPayData()
{
_itemId = "";
_itemName = "";
_rmb = 0;
}
private bool SkipSDK()
{
#if UNITY_EDITOR
return true;
#endif
return false;
}
///
/// 获取当前网络类型
///
/// WIFI 2G 3G 4G N/A
public string GetNetworkType()
{
return CoreSDK.FuncellSDK.Instance.GetNetworkType();
}
private bool GetIsSDKLogin()
{
//如果这个标记是true,那么肯定是登陆成功了,这个是SDK初始化成功返回的消息,然后设置的标记
if (CoreSDK.FuncellSDK.Instance.SDKInitFinish)
{
return true;
}
//根据渠道ID来判断是否是SDK登陆的,这个是SDK登陆成功之后就能获取到的
return SDKInitialize.RumtimePlatform > MyRuntimePlatform.StandaloneEditor && !string.IsNullOrEmpty(SDKCacheData.Token);
}
///
/// 是否SDK登陆
/// 备注,这里单独写个函数多此一举是因为IOS那边打内网包(类:BuildEditor.UI.PackageWindow)需要替换成 return false; dinghuaqiang -2020/05/19
///
///
public bool IsSDKLogin()
{
return GetIsSDKLogin();
}
///
/// 是否是模拟器
///
///
public bool IsEmulator()
{
return FuncellSDK.Instance.IsEmulator();
}
///
/// 判断是否已经实名制了
///
///
public bool IsRealNameAuthorized()
{
return FuncellSDK.Instance.IsRealNameAuthorized();
}
///
/// 调用实名制接口
///
///
///
public void DoRealNameAuthority(string name, string idcard)
{
FuncellSDK.Instance.DoRealNameAuthority(name, idcard);
}
///
/// 调用SDK重启App
///
public void ReStartGame()
{
FuncellSDK.Instance.ReStartGame();
}
public void WebSocket()
{
WebSocket ws = new WebSocket(new Uri(""));
ws.OnMessage = OnWebSocketMsgReceived;
ws.Open();
ws.Send("");
}
public void OnWebSocketMsgReceived(WebSocket webSocket, string message)
{
}
#endregion
#region 游戏统计
public void ActionEvent(ActionEventCode code, string key, string value)
{
switch (code)
{
case ActionEventCode.CreateChar:
DealMessage(CoreSDK.PLATFORM_DEAL_TYPE.PDT_TOTAL_CREATEROLE, key, value);
break;
case ActionEventCode.SelectChar:
//DealMessage(CoreSDK.PLATFORM_DEAL_TYPE., key, value);
break;
case ActionEventCode.EnterServer:
DealMessage(CoreSDK.PLATFORM_DEAL_TYPE.PDT_TOTAL_ENTERGAME, key, value);
break;
case ActionEventCode.ChargeSuccess:
//DealMessage(CoreSDK.PLATFORM_DEAL_TYPE.PDT_TOTAL_CREATEROLE, key, value);
break;
case ActionEventCode.ChargeLevel:
//DealMessage(CoreSDK.PLATFORM_DEAL_TYPE.PDT_TOTAL_CREATEROLE, key, value);
break;
}
}
///
/// 热云:自定义事件
///
private void DealMessage(CoreSDK.PLATFORM_DEAL_TYPE eventCode, string key, string value)
{
CoreSDK.FuncellSDK.Instance.DealMessage((int)eventCode, value);
}
///
/// 货币改变
///
///
public void ActionCoinChange(ResCoinChange coin)
{
int type = coin.changeCoin.type;
long oldValue = GameCenter.ItemContianerSystem.GetEconomyWithType(type);
long offsetValue = coin.changeCoin.value - oldValue;
// 现在勇者没有真气,这里先把真气的判断暂时去掉
if (type == ItemTypeCode.Exp)
{
return;
}
if (offsetValue > 0)
{
if (IsCoinType(type))
{
//保存本次充值的元宝数量
SDKCacheData.RoleRechargeBalance = offsetValue.ToString();
//玩家剩余的元宝数量
SDKCacheData.RoleGoldBalance = coin.changeCoin.value.ToString();
EventManager.SharedInstance.PushFixEvent(SDKEventDefine.SDK_ENENT_ADD_GOLD_CALLBACK);
//ActionEvent(((ItemTypeCode)coin.changeCoin.type).ToString(), ActionItemChangeCode.Add.ToString(), offsetValue.ToString());
}
}
else
{
if (IsCoinType(type))
{
//ActionEvent(((ItemTypeCode)coin.changeCoin.type).ToString(), ActionItemChangeCode.Reduce.ToString(), offsetValue.ToString());
}
}
}
private bool IsCoinType(int type)
{
//只管蓝砖,这个才是真实发货
switch (type)
{
case ItemTypeCode.Gold:
//case ItemTypeCode.BindGold:
//case ItemTypeCode.BindMoney:
return true;
}
return false;
}
#endregion
#region 东南亚sdk特殊接口
public void SetSDKLanguage()
{
CoreSDK.FuncellSDK.Instance.SetSDKLan();
}
#endregion
#region 渠道判断
//是否韩国GP平台
public bool IsKRGP()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.KR.GetType(), ChannelName.KR);
//return SDKBridge.IsKRGP();
}
//判断是否东南亚sdk
public bool IsDongNanYaSDK()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.TH.GetType(), ChannelName.TH) || chnnel == Enum.GetName(ChannelName.VIE.GetType(), ChannelName.VIE);
//return SDKBridge.IsDongNanYaSDK();
}
//判断是否港澳台sdk
public bool IsGangAoTai()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.TW.GetType(), ChannelName.TW);
//return SDKBridge.IsGangAoTai();
}
//判断是越南sdk
public bool IsYueNan()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.VIE.GetType(), ChannelName.VIE);
}
//判断是日本sdk
public bool IsJapan()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.JP.GetType(), ChannelName.JP);
}
//判断是否是PC版本QQ大厅
public bool IsQQPC()
{
string chnnel = GetChnnelNameByCfg();
return chnnel == Enum.GetName(ChannelName.QQ.GetType(), ChannelName.QQ);
}
///
/// 是否是4399渠道
///
///
public bool Is4399()
{
return SDKBridge.Is4399();
}
///
/// 根据配置表获取渠道名称
///
///
private string GetChnnelNameByCfg()
{
if (_cacheChnnelName == null)
{
_cacheChnnelName = "CH";
var cfg = DeclareSdkplatform.Get(LocalFGI);
if (cfg != null)
{
_cacheChnnelName = cfg.Chanel;
}
}
return _cacheChnnelName;
}
///
/// 根据配置表获取当前货币符号
///
///
///
public string GeMoneySignByCfg()
{
if (_cacheMoneySign == null)
{
_cacheMoneySign = "¥";
var cfg = DeclareSdkplatform.Get(LocalFGI);
if (cfg != null)
{
_cacheMoneySign = cfg.MoneySign;
}
}
return _cacheMoneySign;
}
#endregion
#region SDK事件处理
public void RegFixEventHandle(int eid, EventSystemHandler handler)
{
EventManager.SharedInstance.RegFixEventHandle(eid, handler);
}
public void PushFixEvent(object target, int eid, object param, object sender)
{
EventManager.SharedInstance.PushFixEvent(eid, param, sender, target);
}
public void PushFixEvent(int eid, object obj = null)
{
EventManager.SharedInstance.PushFixEvent(eid, obj);
}
public void ClearFixEvent(int eid)
{
EventManager.SharedInstance.ClearFixEvent(eid);
}
public void UnRegFixEventHandle(int eventType, EventSystemHandler handler)
{
EventManager.SharedInstance.UnRegFixEventHandle(eventType, handler);
}
#endregion
#region 其他的支撑函数
//复制到剪贴板
public void CopyToClipboard(string text)
{
CoreSDK.FuncellSDK.Instance.CopyToClipboard(text);
}
//头像 type: 0 从相册取, 1 拍照
public void GetPhoto(int type, string path, int width, int height)
{
if (type == 0 || HardwareManager.MemoryInfo.GetFreeMemory() >= 350)
{
#if UNITY_EDITOR
try
{
var filePath = UnityEditor.EditorUtility.OpenFilePanel("Change Layer Prefab Path", "", "jpg");
if (string.IsNullOrEmpty(filePath))
{
return;
}
var bytes = File.ReadAllBytes(filePath);
File.WriteAllBytes(path, bytes);
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_CLIP_IMG_CALLBACK, path);
}
catch (Exception ex)
{
Debug.LogError(ex.ToString());
}
#else
CoreSDK.FuncellSDK.Instance.GetPhoto(type, path, width, height);
#endif
}
else
{
//如果是拍照,并且剩余内存小于指定数值,那么就提示内存不足.
GameCenter.MsgPromptSystem.ShowMsgBox(DeclareMessageString.Get(DeclareMessageString.C_SYSMEMLOW_CAMERA_DISABLED), DeclareMessageString.Get(DeclareMessageString.C_MSGBOX_OK));
}
}
///
/// 去分享
///
/// 分享的链接
public void DoShare(string url)
{
FuncellSDK.Instance.DoShare(url);
}
///
/// 去应用商店评论
///
/// 应用市场的app地址
public void DoRate(string appstoreURL)
{
FuncellSDK.Instance.DoRate(appstoreURL);
}
///
/// 点赞[其实只是打开下链接]
///
///
public void OpenURL(string needOpenUrl)
{
FuncellSDK.Instance.OpenUrl(needOpenUrl);
}
//执行退出
public void HandlePCExit()
{
#if UNITY_STANDALONE_WIN
AppPersistData.WantExitResult = true;
Application.Quit();
#endif
}
#endregion
}
}