/**
* haituoh5版本 sdk配置
*
微信内跳转入口是
在main.js的最上面
window.__zero__ = {
"packageID": "101",
}
在onStart初始化sdk
引入SDK:在html中添加一个script标签就可以了
*/
import Mint from "../utils/mintFilter/index";
import Gamecfg from "../common/gameCfg";
import { gameMethod } from "../common/gameMethod";
import { PlayerLogin, PlayerLoginPram } from "../common/Xyc";
import { SevBack } from "../common/Xys";
import Config from "../Config";
import { LoadEvent } from "../data/const/EventConst";
import { GameErrCode, InGame, PayProductParam, ReportRoleType } from "../data/const/TypeConst";
import GameDataCenter from "../data/GameDataCenter";
import GameController from "../GameController";
import UIHelp from "../logic/ui/UIHelp";
import EventMng from "../manager/EventMng";
import PlatformBase from "./PlatformBase";
export default class PlatformHaiTuoH5 extends PlatformBase {
isGoPay: boolean
mint: Mint;
constructor() {
super()
cc.game.on(cc.game.EVENT_SHOW, () => {
if (this.isGoPay) {
this.isGoPay = false
if (Config.paySuccAdokId != null) {
clearInterval(Config.paySuccAdokId)
Config.paySuccAdokId = null
}
Config.paySuccAdokIndex = 0
Config.paySuccAdokId = setInterval(() => {
Config.paySuccAdokIndex++
if (Config.paySuccAdokIndex >= 5) {
clearInterval(Config.paySuccAdokId)
Config.paySuccAdokId = null
}
GameDataCenter.time.sendAdok()
}, 1000)
}
})
window['DHMiniH5SDK'].setSwitchAccountNotification(function (callbackData) {
console.log("SwitchAccount data=>", JSON.stringify(callbackData))
window['DHMiniH5SDK'].logout(() => {
})
});
window['DHMiniH5SDK'].setLogoutNotification(() => {
GameDataCenter.sevBack = null
Config.inGame = InGame.no
// this.restart()
cc.game.restart()
})
//防沉迷
if (window['DHMiniH5SDK'].isDhApp) {
console.log("注册防沉迷强制下线监听")
window['DHMiniH5SDK'].gamePreventAddiction((reponse) => {
// 在被强制下线后的回调函数中,理论上游戏应按如下步骤执行相关操作:
// 第一步,清除当前登录的账号角色等信息
// 第二步,重回游戏起始页
// 第三步,再次调用 sdk.login 接口以拉起登录窗口
console.log("触发防沉迷强制下线,游戏重启")
let cb = () => {
GameDataCenter.sevBack = null
Config.inGame = InGame.no
// this.restart()
cc.game.restart()
}
UIHelp.ShowDialog({
content: "根据国家新闻出版署 《关于防止未成年人沉迷网络游戏的通知》、《关于进一步严格管理切实防止未成年人沉迷网络游戏的通知》的要求,您已超出今日健康体验时限,游戏将强制退出。",
title: "防沉迷调整通知",
txtConfirm: "我知道了",
onlyConfirm: true,
cbConfirm: cb
})
});
}
}
showLoginView(): void {
console.log("MiniH5初始化&登录SDK")
EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.25, "login")
let packageInfo = Gamecfg.packageInfo.getItem(Config.pid)
var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
var productKey = packageInfo.params[1]; //QuickSDK后台自动分配
try {
window['DHMiniH5SDK'].login((result: any) => {
console.log("login data=", JSON.stringify(result))
// EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result))
if (result.code == 0) {
let data = result.data
EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.75, "login")
let params: PlayerLoginPram = {
pid: Config.pid,
param: [data.accountId, data.loginType, data.token]
}
setTimeout(() => {
//电魂sdk漏斗打点
if (window['DHMiniH5SDK']) {
window['DHMiniH5SDK'].analytics.log({
eventId: "420000::GAME_CLIENT_LOGIN_START",
subEventId: "0",
logLevel: "d",
logContent: "游戏客户端开始请求登录游戏服",
accountId: window['DHMiniH5SDK'].userInfo.accountId
}, params => {
console.log(params);
});
}
GameController.network.send(PlayerLogin.url, params, (result: SevBack) => {
console.log("后段验证返回")
if (result.type != 1) {
if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
}
return
}
EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "login")
if (result.type == 1 && result.platBack) {
this.openId = result.platBack.openid
this.loginParams = [result.platBack.token]
console.log("后端验证成功", this.openId)
this.login()
//电魂sdk漏斗打点
if (window['DHMiniH5SDK']) {
window['DHMiniH5SDK'].analytics.log({
eventId: "450000::GAME_CLIENT_LOGIN_SUCCESS",
subEventId: "0",
logLevel: "d",
logContent: "游戏客户端登录成功",
accountId: window['DHMiniH5SDK'].userInfo.accountId
}, params => {
console.log(params);
});
}
} else {
console.log("PlayerLogin.url 返回数据异常")
if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
}
}
})
}, 1000)
} else {
UIHelp.ShowTips("登录失败")
// GameDataCenter.plat.instance.restart()
}
})
} catch (error) {
UIHelp.ShowTips("----" + error)
// UIHelp.ShowDialog({ content: error })
}
}
pay(orderId: string, order10cs: string, param: PayProductParam): void {
this.isGoPay = true
let serverList = GameDataCenter.user.serverList
let serverName = GameDataCenter.sevBack.userInfo?.a?.sid
for (const iterator of serverList) {
if (iterator.sid == GameDataCenter.sevBack.userInfo?.a?.sid) {
serverName = iterator.name
break
}
}
let payData = {
serverId: parseInt(GameDataCenter.sevBack.userInfo?.a?.sid),
serverName: serverName,
roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid),
roleName: GameDataCenter.sevBack.userInfo?.a?.name,
roleLevel: GameDataCenter.sevBack.userInfo?.a?.level,
productId: param.productId,
productName: param.productName,
productNum: 1,
price: param.price * 100,
currencyType: "CNY",
cpOrderId: orderId,
areaId: Config.pid,
areaName: Config.pid,
memo: orderId
}
console.log("拉取支付的参数:", JSON.stringify(payData))
window['DHMiniH5SDK'].payment(payData, (response) => {
if (response.code == 0) { // 支付成功
window['DHMiniH5SDK'].analytics.pay({
accountId: window['DHMiniH5SDK'].userInfo.accountId,
roleId: window['DHMiniH5SDK'].userInfo.accountId,
roleLevel: GameDataCenter.sevBack.userInfo?.a?.level,
orderId: orderId,
itemId: param.productId,
payAmount: param.price
}, params => {
console.log(params);
});
//电魂sdk漏斗打点
if (window['DHMiniH5SDK']) {
window['DHMiniH5SDK'].analytics.log({
eventId: "510000::GAME_CLIENT_PAY_SUCCESS",
subEventId: "0",
logLevel: "d",
logContent: "发放支付道具至玩家",
accountId: window['DHMiniH5SDK'].userInfo.accountId
}, params => {
console.log(params);
});
}
this.isGoPay = false
if (Config.paySuccAdokId != null) {
clearInterval(Config.paySuccAdokId)
Config.paySuccAdokId = null
}
Config.paySuccAdokIndex = 0
Config.paySuccAdokId = setInterval(() => {
Config.paySuccAdokIndex++
if (Config.paySuccAdokIndex >= 5) {
clearInterval(Config.paySuccAdokId)
Config.paySuccAdokId = null
}
GameDataCenter.time.sendAdok()
}, 1000)
} else { // 其他,支付失败
}
});
}
// 上报角色数据
reportRole(event: ReportRoleType): void {
// • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤.
if (GameDataCenter.sevBack == null) { return }
if (GameDataCenter.sevBack.userInfo == null) { return }
console.log("上报角色数据:", event)
let onlineTime = 0
if (GameDataCenter.time.onlineTime > 0) {
onlineTime = GameDataCenter.time.sevTime - GameDataCenter.time.onlineTime
}
let isCreateRole = false
let level = GameDataCenter.sevBack.userInfo?.a?.level
let type = ""
switch (event) {
case ReportRoleType.create:
isCreateRole = true
type = "CREATE_ROLE"
//电魂sdk漏斗打点
if (window['DHMiniH5SDK']) {
window['DHMiniH5SDK'].analytics.log({
eventId: "450001::GAME_CLIENT_CREATING_A_ROLE",
subEventId: "0",
logLevel: "d",
logContent: "游戏客户端创角成功",
accountId: window['DHMiniH5SDK'].userInfo.accountId
}, params => {
console.log(params);
});
}
// window['DHMiniH5SDK'].analytics.register({accountId: window['DHMiniH5SDK'].userInfo.accountId}, params => {
// console.log(params);
// });
break;
case ReportRoleType.levelup:
type = "LEVEL_UP"
level++
break;
case ReportRoleType.offline:
break;
case ReportRoleType.online:
type = "LOGIN_GAME"
break;
case ReportRoleType.other:
break;
default:
break;
}
let power = 1;
if (gameMethod.isEmpty(GameDataCenter.sevBack)) {
power = 1
} else {
let eps = gameMethod.ep_all(GameDataCenter.sevBack);
let power1 = gameMethod.ep_power(0, eps);
power = power1
}
let serverName = GameDataCenter.user.getServerNameBySid(GameDataCenter.sevBack.userInfo?.a?.sid) || GameDataCenter.sevBack.userInfo?.a?.sid;
var roleInfo = {
type: type,
isCreateRole: isCreateRole,
roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime,
uid: GameDataCenter.plat.instance.openId,
username: GameDataCenter.sevBack.userInfo?.a?.name,
serverId: GameDataCenter.sevBack.userInfo?.a?.sid,
serverName: serverName,
userRoleName: GameDataCenter.sevBack.userInfo?.a?.name,
userRoleId: GameDataCenter.sevBack.userInfo?.a?.uuid,
userRoleBalance: 0,
vipLevel: 1,
userRoleLevel: level,
gameRolePower: power,
partyId: 0,
partyName: '无',
};
var roleInfoJson = JSON.stringify(roleInfo);
window['DHMiniH5SDK'].analytics.uploadRoleInfo({
type: type,
isCreateRole: isCreateRole, // 仅创建角色时传true,更新信息时传false
roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime, // 角色创建时间,时间戳精确到秒
serverId: parseInt(GameDataCenter.sevBack.userInfo?.a?.sid), // 角色所在游戏服务器ID
serverName: serverName, // 角色所在游戏服务器名称
roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid), // 角色ID
roleName: GameDataCenter.sevBack.userInfo?.a?.name, // 角色名
roleLevel: level, // 角色等级
roleBalance: 0, // 角色游戏内货币余额
vipLevel: 1, // 角色VIP等级
partyId: 0, // 公会/社团ID
partyName: '无', // 公会/社团名称
rolePower: power, // 角色战力
partyRoleId: 1, // 角色在帮派中的ID
}, (response) => {
console.log(response);
});
}
openService() {
if (window['DHMiniH5SDK'].isDhApp) {
window['DHMiniH5SDK'].service({
roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid),
nickname: GameDataCenter.sevBack.userInfo?.a?.name,
level: GameDataCenter.sevBack.userInfo?.a?.level
});
}
}
checkMsg(str: string, cb: Function): void {
cb()
}
}