PlatformHaiTuoH5.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  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. })
  50. window['DHMiniH5SDK'].setSwitchAccountNotification(function (callbackData) {
  51. console.log("SwitchAccount data=>", JSON.stringify(callbackData))
  52. window['DHMiniH5SDK'].logout(() => {
  53. })
  54. });
  55. window['DHMiniH5SDK'].setLogoutNotification(() => {
  56. GameDataCenter.sevBack = null
  57. Config.inGame = InGame.no
  58. // this.restart()
  59. cc.game.restart()
  60. })
  61. //防沉迷
  62. if (window['DHMiniH5SDK'].isDhApp) {
  63. console.log("注册防沉迷强制下线监听")
  64. window['DHMiniH5SDK'].gamePreventAddiction((reponse) => {
  65. // 在被强制下线后的回调函数中,理论上游戏应按如下步骤执行相关操作:
  66. // 第一步,清除当前登录的账号角色等信息
  67. // 第二步,重回游戏起始页
  68. // 第三步,再次调用 sdk.login 接口以拉起登录窗口
  69. console.log("触发防沉迷强制下线,游戏重启")
  70. let cb = () => {
  71. GameDataCenter.sevBack = null
  72. Config.inGame = InGame.no
  73. // this.restart()
  74. cc.game.restart()
  75. }
  76. UIHelp.ShowDialog({
  77. content: "根据国家新闻出版署 《关于防止未成年人沉迷网络游戏的通知》、《关于进一步严格管理切实防止未成年人沉迷网络游戏的通知》的要求,您已超出今日健康体验时限,游戏将强制退出。",
  78. title: "防沉迷调整通知",
  79. txtConfirm: "我知道了",
  80. onlyConfirm: true,
  81. cbConfirm: cb
  82. })
  83. });
  84. }
  85. }
  86. showLoginView(): void {
  87. console.log("MiniH5初始化&登录SDK")
  88. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.25, "login")
  89. let packageInfo = Gamecfg.packageInfo.getItem(Config.pid)
  90. var productCode = packageInfo.params[0]; //QuickSDK后台自动分配
  91. var productKey = packageInfo.params[1]; //QuickSDK后台自动分配
  92. try {
  93. window['DHMiniH5SDK'].login((result: any) => {
  94. console.log("login data=", JSON.stringify(result))
  95. // EventMng.emit(LoadEvent.LOAD_MESSAGE, JSON.stringify(result))
  96. if (result.code == 0) {
  97. let data = result.data
  98. EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.75, "login")
  99. let params: PlayerLoginPram = {
  100. pid: Config.pid,
  101. param: [data.accountId, data.loginType, data.token]
  102. }
  103. setTimeout(() => {
  104. //电魂sdk漏斗打点
  105. if (window['DHMiniH5SDK']) {
  106. window['DHMiniH5SDK'].analytics.log({
  107. eventId: "420000::GAME_CLIENT_LOGIN_START",
  108. subEventId: "0",
  109. logLevel: "d",
  110. logContent: "游戏客户端开始请求登录游戏服",
  111. accountId: window['DHMiniH5SDK'].userInfo.accountId
  112. }, params => {
  113. console.log(params);
  114. });
  115. }
  116. GameController.network.send(PlayerLogin.url, params, (result: SevBack) => {
  117. console.log("后段验证返回")
  118. if (result.type != 1) {
  119. if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
  120. GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
  121. }
  122. return
  123. }
  124. EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "login")
  125. if (result.type == 1 && result.platBack) {
  126. this.openId = result.platBack.openid
  127. this.loginParams = [result.platBack.token]
  128. console.log("后端验证成功", this.openId)
  129. this.login()
  130. //电魂sdk漏斗打点
  131. if (window['DHMiniH5SDK']) {
  132. window['DHMiniH5SDK'].analytics.log({
  133. eventId: "450000::GAME_CLIENT_LOGIN_SUCCESS",
  134. subEventId: "0",
  135. logLevel: "d",
  136. logContent: "游戏客户端登录成功",
  137. accountId: window['DHMiniH5SDK'].userInfo.accountId
  138. }, params => {
  139. console.log(params);
  140. });
  141. }
  142. } else {
  143. console.log("PlayerLogin.url 返回数据异常")
  144. if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
  145. GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
  146. }
  147. }
  148. })
  149. }, 1000)
  150. } else {
  151. UIHelp.ShowTips("登录失败")
  152. // GameDataCenter.plat.instance.restart()
  153. }
  154. })
  155. } catch (error) {
  156. UIHelp.ShowTips("----" + error)
  157. // UIHelp.ShowDialog({ content: error })
  158. }
  159. }
  160. pay(orderId: string, order10cs: string, param: PayProductParam): void {
  161. this.isGoPay = true
  162. let serverList = Object.values(GameDataCenter.login.playerInfo?.qufuList || {});
  163. let serverName = GameDataCenter.user.userInfo?.sid
  164. for (const iterator of serverList) {
  165. if (iterator.sid == GameDataCenter.user.userInfo?.sid) {
  166. serverName = iterator.name
  167. break
  168. }
  169. }
  170. let payData = {
  171. serverId: parseInt(GameDataCenter.user.userInfo?.sid),
  172. serverName: serverName,
  173. roleId: parseInt(GameDataCenter.user.userInfo?.uuid),
  174. roleName: GameDataCenter.user.userInfo?.name,
  175. roleLevel: GameDataCenter.user.userInfo?.level,
  176. productId: param.productId,
  177. productName: param.productName,
  178. productNum: 1,
  179. price: param.price * 100,
  180. currencyType: "CNY",
  181. cpOrderId: orderId,
  182. areaId: Config.pid,
  183. areaName: Config.pid,
  184. memo: orderId
  185. }
  186. console.log("拉取支付的参数:", JSON.stringify(payData))
  187. window['DHMiniH5SDK'].payment(payData, (response) => {
  188. if (response.code == 0) { // 支付成功
  189. window['DHMiniH5SDK'].analytics.pay({
  190. accountId: window['DHMiniH5SDK'].userInfo.accountId,
  191. roleId: window['DHMiniH5SDK'].userInfo.accountId,
  192. roleLevel: GameDataCenter.sevBack.userInfo?.a?.level,
  193. orderId: orderId,
  194. itemId: param.productId,
  195. payAmount: param.price
  196. }, params => {
  197. console.log(params);
  198. });
  199. //电魂sdk漏斗打点
  200. if (window['DHMiniH5SDK']) {
  201. window['DHMiniH5SDK'].analytics.log({
  202. eventId: "510000::GAME_CLIENT_PAY_SUCCESS",
  203. subEventId: "0",
  204. logLevel: "d",
  205. logContent: "发放支付道具至玩家",
  206. accountId: window['DHMiniH5SDK'].userInfo.accountId
  207. }, params => {
  208. console.log(params);
  209. });
  210. }
  211. this.isGoPay = false
  212. } else { // 其他,支付失败
  213. }
  214. });
  215. }
  216. // 上报角色数据
  217. reportRole(event: ReportRoleType): void {
  218. // • 初始化成功后调⽤. • 进⼊区服、创⻆、⻆⾊等级更新、战⼒更新时调⽤.
  219. if (GameDataCenter.sevBack == null) { return }
  220. if (GameDataCenter.sevBack.userInfo == null) { return }
  221. console.log("上报角色数据:", event)
  222. let onlineTime = 0
  223. if (GameDataCenter.time.onlineTime > 0) {
  224. onlineTime = GameDataCenter.time.sevTime - GameDataCenter.time.onlineTime
  225. }
  226. let isCreateRole = false
  227. let level = GameDataCenter.sevBack.userInfo?.a?.level
  228. let type = ""
  229. switch (event) {
  230. case ReportRoleType.create:
  231. isCreateRole = true
  232. type = "CREATE_ROLE"
  233. //电魂sdk漏斗打点
  234. if (window['DHMiniH5SDK']) {
  235. window['DHMiniH5SDK'].analytics.log({
  236. eventId: "450001::GAME_CLIENT_CREATING_A_ROLE",
  237. subEventId: "0",
  238. logLevel: "d",
  239. logContent: "游戏客户端创角成功",
  240. accountId: window['DHMiniH5SDK'].userInfo.accountId
  241. }, params => {
  242. console.log(params);
  243. });
  244. }
  245. // window['DHMiniH5SDK'].analytics.register({accountId: window['DHMiniH5SDK'].userInfo.accountId}, params => {
  246. // console.log(params);
  247. // });
  248. break;
  249. case ReportRoleType.levelup:
  250. type = "LEVEL_UP"
  251. level++
  252. break;
  253. case ReportRoleType.offline:
  254. break;
  255. case ReportRoleType.online:
  256. type = "LOGIN_GAME"
  257. break;
  258. case ReportRoleType.other:
  259. break;
  260. default:
  261. break;
  262. }
  263. let power = 1;
  264. if (gameMethod.isEmpty(GameDataCenter.sevBack)) {
  265. power = 1
  266. } else {
  267. let eps = gameMethod.ep_all(GameDataCenter.sevBack);
  268. let power1 = gameMethod.ep_power(0, eps);
  269. power = power1
  270. }
  271. let serverName = GameDataCenter.user.getServerNameBySid(GameDataCenter.sevBack.userInfo?.a?.sid) || GameDataCenter.sevBack.userInfo?.a?.sid;
  272. var roleInfo = {
  273. type: type,
  274. isCreateRole: isCreateRole,
  275. roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime,
  276. uid: GameDataCenter.plat.instance.openId,
  277. username: GameDataCenter.sevBack.userInfo?.a?.name,
  278. serverId: GameDataCenter.sevBack.userInfo?.a?.sid,
  279. serverName: serverName,
  280. userRoleName: GameDataCenter.sevBack.userInfo?.a?.name,
  281. userRoleId: GameDataCenter.sevBack.userInfo?.a?.uuid,
  282. userRoleBalance: 0,
  283. vipLevel: 1,
  284. userRoleLevel: level,
  285. gameRolePower: power,
  286. partyId: 0,
  287. partyName: '无',
  288. };
  289. var roleInfoJson = JSON.stringify(roleInfo);
  290. window['DHMiniH5SDK'].analytics.uploadRoleInfo({
  291. type: type,
  292. isCreateRole: isCreateRole, // 仅创建角色时传true,更新信息时传false
  293. roleCreateTime: GameDataCenter.sevBack.userInfo?.a?.regtime, // 角色创建时间,时间戳精确到秒
  294. serverId: parseInt(GameDataCenter.sevBack.userInfo?.a?.sid), // 角色所在游戏服务器ID
  295. serverName: serverName, // 角色所在游戏服务器名称
  296. roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid), // 角色ID
  297. roleName: GameDataCenter.sevBack.userInfo?.a?.name, // 角色名
  298. roleLevel: level, // 角色等级
  299. roleBalance: 0, // 角色游戏内货币余额
  300. vipLevel: 1, // 角色VIP等级
  301. partyId: 0, // 公会/社团ID
  302. partyName: '无', // 公会/社团名称
  303. rolePower: power, // 角色战力
  304. partyRoleId: 1, // 角色在帮派中的ID
  305. }, (response) => {
  306. console.log(response);
  307. });
  308. }
  309. openService() {
  310. if (window['DHMiniH5SDK'].isDhApp) {
  311. window['DHMiniH5SDK'].service({
  312. roleId: parseInt(GameDataCenter.sevBack.userInfo?.a?.uuid),
  313. nickname: GameDataCenter.sevBack.userInfo?.a?.name,
  314. level: GameDataCenter.sevBack.userInfo?.a?.level
  315. });
  316. }
  317. }
  318. checkMsg(str: string, cb: Function): void {
  319. cb()
  320. }
  321. }