PlatformHaiTuoH5.ts 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. /**
  2. * haituoh5版本 sdk配置
  3. *
  4. 微信内跳转入口是
  5. 在main.js的最上面
  6. window.__zero__ = {
  7. "packageID": "101",
  8. }
  9. 在onStart初始化sdk
  10. 引入SDK:在html中添加一个script标签就可以了
  11. <!-- // H5引入方舟SDK -->
  12. <script type="text/javascript" src="htkSdk_xxxxx.js"></script>
  13. <script >
  14. hitalkOpenSDK.init(function(res){//初始化sdk
  15. if(res.retCode!=0){
  16. console.log("初始化失败")
  17. return
  18. }
  19. console.log("初始化成功")
  20. //调用登录接口
  21. },{gameId:319}); //向海拓申请获得
  22. </script>
  23. <!-- 开启vConsole -->
  24. <!-- <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
  25. <script>
  26. // VConsole 默认会挂载到 `window.VConsole` 上
  27. var vConsole = new window.VConsole();
  28. </script> -->
  29. */
  30. import Mint from "../utils/mintFilter/index";
  31. import Gamecfg from "../common/gameCfg";
  32. import { gameMethod } from "../common/gameMethod";
  33. import { PlayerLogin, PlayerLoginPram } from "../common/Xyc";
  34. import { SevBack } from "../common/Xys";
  35. import Config from "../Config";
  36. import { LoadEvent } from "../data/const/EventConst";
  37. import { GameErrCode, InGame, PayProductParam, ReportRoleType } from "../data/const/TypeConst";
  38. import GameDataCenter from "../data/GameDataCenter";
  39. import GameController from "../GameController";
  40. import UIHelp from "../logic/ui/UIHelp";
  41. import EventMng from "../manager/EventMng";
  42. import PlatformBase from "./PlatformBase";
  43. export default class PlatformHaiTuoH5 extends PlatformBase {
  44. isGoPay: boolean
  45. mint: Mint;
  46. constructor() {
  47. super()
  48. cc.game.on(cc.game.EVENT_SHOW, () => {
  49. if (this.isGoPay) {
  50. this.isGoPay = false
  51. if (Config.paySuccAdokId != null) {
  52. clearInterval(Config.paySuccAdokId)
  53. Config.paySuccAdokId = null
  54. }
  55. Config.paySuccAdokIndex = 0
  56. Config.paySuccAdokId = setInterval(() => {
  57. Config.paySuccAdokIndex++
  58. if (Config.paySuccAdokIndex >= 5) {
  59. clearInterval(Config.paySuccAdokId)
  60. Config.paySuccAdokId = null
  61. }
  62. GameDataCenter.time.sendAdok()
  63. }, 1000)
  64. }
  65. })
  66. window['DHMiniH5SDK'].setSwitchAccountNotification(function (callbackData) {
  67. console.log("SwitchAccount data=>", JSON.stringify(callbackData))
  68. window['DHMiniH5SDK'].logout(() => {
  69. })
  70. });
  71. window['DHMiniH5SDK'].setLogoutNotification(() => {
  72. GameDataCenter.sevBack = null
  73. Config.inGame = InGame.no
  74. // this.restart()
  75. cc.game.restart()
  76. })
  77. //防沉迷
  78. if (window['DHMiniH5SDK'].isDhApp) {
  79. console.log("注册防沉迷强制下线监听")
  80. window['DHMiniH5SDK'].gamePreventAddiction((reponse) => {
  81. // 在被强制下线后的回调函数中,理论上游戏应按如下步骤执行相关操作:
  82. // 第一步,清除当前登录的账号角色等信息
  83. // 第二步,重回游戏起始页
  84. // 第三步,再次调用 sdk.login 接口以拉起登录窗口
  85. console.log("触发防沉迷强制下线,游戏重启")
  86. let cb = () => {
  87. GameDataCenter.sevBack = null
  88. Config.inGame = InGame.no
  89. // this.restart()
  90. cc.game.restart()
  91. }
  92. UIHelp.ShowDialog({
  93. content: "根据国家新闻出版署 《关于防止未成年人沉迷网络游戏的通知》、《关于进一步严格管理切实防止未成年人沉迷网络游戏的通知》的要求,您已超出今日健康体验时限,游戏将强制退出。",
  94. title: "防沉迷调整通知",
  95. txtConfirm: "我知道了",
  96. onlyConfirm: true,
  97. cbConfirm: cb
  98. })
  99. });
  100. }
  101. }
  102. showLoginView(): void {
  103. console.log("MiniH5初始化&登录SDK")
  104. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.25, "login")
  105. let packageInfo = Gamecfg.packageInfo.getItem(Config.pid)
  106. var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
  107. var productKey = packageInfo.params[1]; //QuickSDK后台自动分配
  108. try {
  109. window['DHMiniH5SDK'].login((result: any) => {
  110. console.log("login data=", JSON.stringify(result))
  111. // EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result))
  112. if (result.code == 0) {
  113. let data = result.data
  114. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.75, "login")
  115. let params: PlayerLoginPram = {
  116. pid: Config.pid,
  117. param: [data.accountId, data.loginType, data.token]
  118. }
  119. setTimeout(() => {
  120. //电魂sdk漏斗打点
  121. if (window['DHMiniH5SDK']) {
  122. window['DHMiniH5SDK'].analytics.log({
  123. eventId: "420000::GAME_CLIENT_LOGIN_START",
  124. subEventId: "0",
  125. logLevel: "d",
  126. logContent: "游戏客户端开始请求登录游戏服",
  127. accountId: window['DHMiniH5SDK'].userInfo.accountId
  128. }, params => {
  129. console.log(params);
  130. });
  131. }
  132. GameController.network.send(PlayerLogin.url, params, (result: SevBack) => {
  133. console.log("后段验证返回")
  134. if (result.type != 1) {
  135. if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
  136. GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
  137. }
  138. return
  139. }
  140. EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "login")
  141. if (result.type == 1 && result.platBack) {
  142. this.openId = result.platBack.openid
  143. this.loginParams = [result.platBack.token]
  144. console.log("后端验证成功", this.openId)
  145. this.login()
  146. //电魂sdk漏斗打点
  147. if (window['DHMiniH5SDK']) {
  148. window['DHMiniH5SDK'].analytics.log({
  149. eventId: "450000::GAME_CLIENT_LOGIN_SUCCESS",
  150. subEventId: "0",
  151. logLevel: "d",
  152. logContent: "游戏客户端登录成功",
  153. accountId: window['DHMiniH5SDK'].userInfo.accountId
  154. }, params => {
  155. console.log(params);
  156. });
  157. }
  158. } else {
  159. console.log("PlayerLogin.url 返回数据异常")
  160. if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
  161. GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
  162. }
  163. }
  164. })
  165. }, 1000)
  166. } else {
  167. UIHelp.ShowTips("登录失败")
  168. // GameDataCenter.plat.instance.restart()
  169. }
  170. })
  171. } catch (error) {
  172. UIHelp.ShowTips("----" + error)
  173. // UIHelp.ShowDialog({ content: error })
  174. }
  175. }
  176. pay(orderId: string, order10cs: string, param: PayProductParam): void {
  177. this.isGoPay = true
  178. let serverList = GameDataCenter.user.serverList
  179. let serverName = GameDataCenter.sevBack.userInfo?.a?.sid
  180. for (const iterator of serverList) {
  181. if (iterator.sid == GameDataCenter.sevBack.userInfo?.a?.sid) {
  182. serverName = iterator.name
  183. break
  184. }
  185. }
  186. let payData = {
  187. serverId: parseInt(GameDataCenter.sevBack.userInfo?.a?.sid),
  188. serverName: serverName,
  189. roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid),
  190. roleName: GameDataCenter.sevBack.userInfo?.a?.name,
  191. roleLevel: GameDataCenter.sevBack.userInfo?.a?.level,
  192. productId: param.productId,
  193. productName: param.productName,
  194. productNum: 1,
  195. price: param.price * 100,
  196. currencyType: "CNY",
  197. cpOrderId: orderId,
  198. areaId: Config.pid,
  199. areaName: Config.pid,
  200. memo: orderId
  201. }
  202. console.log("拉取支付的参数:", JSON.stringify(payData))
  203. window['DHMiniH5SDK'].payment(payData, (response) => {
  204. if (response.code == 0) { // 支付成功
  205. window['DHMiniH5SDK'].analytics.pay({
  206. accountId: window['DHMiniH5SDK'].userInfo.accountId,
  207. roleId: window['DHMiniH5SDK'].userInfo.accountId,
  208. roleLevel: GameDataCenter.sevBack.userInfo?.a?.level,
  209. orderId: orderId,
  210. itemId: param.productId,
  211. payAmount: param.price
  212. }, params => {
  213. console.log(params);
  214. });
  215. //电魂sdk漏斗打点
  216. if (window['DHMiniH5SDK']) {
  217. window['DHMiniH5SDK'].analytics.log({
  218. eventId: "510000::GAME_CLIENT_PAY_SUCCESS",
  219. subEventId: "0",
  220. logLevel: "d",
  221. logContent: "发放支付道具至玩家",
  222. accountId: window['DHMiniH5SDK'].userInfo.accountId
  223. }, params => {
  224. console.log(params);
  225. });
  226. }
  227. this.isGoPay = false
  228. if (Config.paySuccAdokId != null) {
  229. clearInterval(Config.paySuccAdokId)
  230. Config.paySuccAdokId = null
  231. }
  232. Config.paySuccAdokIndex = 0
  233. Config.paySuccAdokId = setInterval(() => {
  234. Config.paySuccAdokIndex++
  235. if (Config.paySuccAdokIndex >= 5) {
  236. clearInterval(Config.paySuccAdokId)
  237. Config.paySuccAdokId = null
  238. }
  239. GameDataCenter.time.sendAdok()
  240. }, 1000)
  241. } else { // 其他,支付失败
  242. }
  243. });
  244. }
  245. // 上报角色数据
  246. reportRole(event: ReportRoleType): void {
  247. // • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤.
  248. if (GameDataCenter.sevBack == null) { return }
  249. if (GameDataCenter.sevBack.userInfo == null) { return }
  250. console.log("上报角色数据:", event)
  251. let onlineTime = 0
  252. if (GameDataCenter.time.onlineTime > 0) {
  253. onlineTime = GameDataCenter.time.sevTime - GameDataCenter.time.onlineTime
  254. }
  255. let isCreateRole = false
  256. let level = GameDataCenter.sevBack.userInfo?.a?.level
  257. let type = ""
  258. switch (event) {
  259. case ReportRoleType.create:
  260. isCreateRole = true
  261. type = "CREATE_ROLE"
  262. //电魂sdk漏斗打点
  263. if (window['DHMiniH5SDK']) {
  264. window['DHMiniH5SDK'].analytics.log({
  265. eventId: "450001::GAME_CLIENT_CREATING_A_ROLE",
  266. subEventId: "0",
  267. logLevel: "d",
  268. logContent: "游戏客户端创角成功",
  269. accountId: window['DHMiniH5SDK'].userInfo.accountId
  270. }, params => {
  271. console.log(params);
  272. });
  273. }
  274. // window['DHMiniH5SDK'].analytics.register({accountId: window['DHMiniH5SDK'].userInfo.accountId}, params => {
  275. // console.log(params);
  276. // });
  277. break;
  278. case ReportRoleType.levelup:
  279. type = "LEVEL_UP"
  280. level++
  281. break;
  282. case ReportRoleType.offline:
  283. break;
  284. case ReportRoleType.online:
  285. type = "LOGIN_GAME"
  286. break;
  287. case ReportRoleType.other:
  288. break;
  289. default:
  290. break;
  291. }
  292. let power = 1;
  293. if (gameMethod.isEmpty(GameDataCenter.sevBack)) {
  294. power = 1
  295. } else {
  296. let eps = gameMethod.ep_all(GameDataCenter.sevBack);
  297. let power1 = gameMethod.ep_power(0, eps);
  298. power = power1
  299. }
  300. let serverName = GameDataCenter.user.getServerNameBySid(GameDataCenter.sevBack.userInfo?.a?.sid) || GameDataCenter.sevBack.userInfo?.a?.sid;
  301. var roleInfo = {
  302. type: type,
  303. isCreateRole: isCreateRole,
  304. roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime,
  305. uid: GameDataCenter.plat.instance.openId,
  306. username: GameDataCenter.sevBack.userInfo?.a?.name,
  307. serverId: GameDataCenter.sevBack.userInfo?.a?.sid,
  308. serverName: serverName,
  309. userRoleName: GameDataCenter.sevBack.userInfo?.a?.name,
  310. userRoleId: GameDataCenter.sevBack.userInfo?.a?.uuid,
  311. userRoleBalance: 0,
  312. vipLevel: 1,
  313. userRoleLevel: level,
  314. gameRolePower: power,
  315. partyId: 0,
  316. partyName: '无',
  317. };
  318. var roleInfoJson = JSON.stringify(roleInfo);
  319. window['DHMiniH5SDK'].analytics.uploadRoleInfo({
  320. type: type,
  321. isCreateRole: isCreateRole, // 仅创建角色时传true,更新信息时传false
  322. roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime, // 角色创建时间,时间戳精确到秒
  323. serverId: parseInt(GameDataCenter.sevBack.userInfo?.a?.sid), // 角色所在游戏服务器ID
  324. serverName: serverName, // 角色所在游戏服务器名称
  325. roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid), // 角色ID
  326. roleName: GameDataCenter.sevBack.userInfo?.a?.name, // 角色名
  327. roleLevel: level, // 角色等级
  328. roleBalance: 0, // 角色游戏内货币余额
  329. vipLevel: 1, // 角色VIP等级
  330. partyId: 0, // 公会/社团ID
  331. partyName: '无', // 公会/社团名称
  332. rolePower: power, // 角色战力
  333. partyRoleId: 1, // 角色在帮派中的ID
  334. }, (response) => {
  335. console.log(response);
  336. });
  337. }
  338. openService() {
  339. if (window['DHMiniH5SDK'].isDhApp) {
  340. window['DHMiniH5SDK'].service({
  341. roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid),
  342. nickname: GameDataCenter.sevBack.userInfo?.a?.name,
  343. level: GameDataCenter.sevBack.userInfo?.a?.level
  344. });
  345. }
  346. }
  347. checkMsg(str: string, cb: Function): void {
  348. cb()
  349. }
  350. }