rp_11001/assets/Loading/scripts/comm.ts
TJH 9109cb225e
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2m5s
11
2026-01-04 13:55:03 +08:00

275 lines
6.8 KiB
TypeScript

// https://stackoverflow.com/questions/46946380/fetch-api-request-timeout
// https://developer.mozilla.org/zh-CN/docs/Web/API/AbortSignal#%E8%B6%85%E6%97%B6%E6%88%96%E6%98%BE%E5%BC%8F%E4%B8%AD%E6%AD%A2_fetch
import { log, path } from "cc"
import { PREVIEW } from "cc/env"
const gameId = "rp_11001";
// let apiaddr = "https://rpgames-api.rpfafafahkdev.com";
let apiaddr = "";
let token = "eyJQIjoxMDA5NDksIkUiOjE3NjcxODg0ODAsIlMiOjk5NiwiRCI6InJwXzExMDAxIn0.1f57MSRhno684vFFFA1Nthne1Du5HhgU-nEQsjtayVo";
let language = "en"
let currency = "THB"
let csymbol = "$"
let fromUrl = ""
let supportUrl = ""
let oddsUrl = ""
let historyUrl = ""
let isRB7 = false;
export function getOddsUrl() {
return oddsUrl;
}
export function getSupportUrl() {
return supportUrl;
}
export function getHistoryUrl() {
return historyUrl;
}
export function getLanguage() {
// return 'zh';
return language;
}
export function getIsRB7() {
// return true;
return isRB7;
}
export function getFromUrl() {
return fromUrl;
}
export function getCsymbol() {
return csymbol;
}
export function getGameId() {
return gameId;
}
export function initReqAddr() {
let partHost = ".rpfafafahkdev.com";
if (!PREVIEW) {
const qs = new URLSearchParams(location.search)
token = qs.get("t");
const l = qs.get("l");
if (l) {
language = l
}
const c = qs.get("c");
if (c) {
currency = c
}
// brand=rb7
const rb7 = qs.get("brand");
if (rb7) {
isRB7 = rb7 == "rb7";
}
const f = qs.get("from");
if (f) {
fromUrl = f;
}
const csy = qs.get("csymbol");
if (csy) {
csymbol = csy
}
const dotidx = location.host.indexOf('.')
partHost = location.host.slice(dotidx)
}
apiaddr = `https://rpgames-api${partHost}`
supportUrl = `https://rpgames-intro${partHost}/#/index?gid=${gameId}&type=support&l=${language}&c=${currency}`
oddsUrl = `https://rpgames-intro${partHost}/#/index?gid=${gameId}&type=odds&l=${language}&c=${currency}`
historyUrl = `https://rpgames-intro${partHost}/#/history?gid=${gameId}&l=${language}&c=${currency}&t=${token}`
}
AbortSignal.timeout ??= function timeout(ms) {
const ctrl = new AbortController()
setTimeout(() => ctrl.abort(), ms)
return ctrl.signal
}
export async function callGameApi(action: string, argsObj: any) {
const url = apiaddr + path.join("/gameapi/", gameId, action)
const payload = JSON.stringify(argsObj)
const res = await fetch(url, {
signal: AbortSignal.timeout(10000),
headers: {
"Content-Type": "application/json",
"X-Rp-Token": token,
},
method: "POST",
body: payload,
mode: 'cors',
})
if (res.status != 200) {
const errstr = await res.text()
throw new Error(errstr || res.statusText)
}
const obj = await res.json()
return obj
}
export async function callGameApiForRank(action: string, argsObj: any) {
const url = apiaddr + path.join("/gameapi/", 'rank', action)
const payload = JSON.stringify(argsObj)
const res = await fetch(url, {
signal: AbortSignal.timeout(10000),
headers: {
"Content-Type": "application/json",
"X-Rp-Token": token,
},
method: "POST",
body: payload,
mode: 'cors',
})
if (res.status != 200) {
const errstr = await res.text()
throw new Error(errstr || res.statusText)
}
const obj = await res.json()
return obj
}
let uploadErrorSeq = 0
export async function uploadError(msg: string) {
if (uploadErrorSeq > 1000) {
return
}
const argsObj = {
"game": gameId,
"type": "error",
"href": window.location.href,
"userAgent": window.navigator.userAgent,
"language": language,
"currency": currency,
"token": token,
"msg": msg,
"seq": uploadErrorSeq++,
}
const url = apiaddr + "/event/upload"
const payload = JSON.stringify(argsObj)
const res = await fetch(url, {
signal: AbortSignal.timeout(10000),
method: "POST",
body: payload,
mode: 'cors',
})
// console.log("uploadError", "statusText", res.statusText)
}
export function gold2cash(v: number): string {
v /= 10000
return v.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
export function gold2cash2(v: number): string {
v /= 10000
if (v % 1 == 0) {
return v.toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
} else {
return v.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
}
export async function getHistory(argsObj: any) {
// https://rpgames-api.rpfafafahkdev.com/gameapi/rp_11001/gameinfo
// https://rpgames-api.rpfafafahkdev.com/gameapi/history
// const resp = await callGameApi("history", argsObj)
// callGameApi 会多拼一截gameId , history单独写
const url = apiaddr + path.join("/gameapi/", "history")
const payload = JSON.stringify(argsObj)
const res = await fetch(url, {
signal: AbortSignal.timeout(10000),
headers: {
"Content-Type": "application/json",
"X-Rp-Token": token,
},
method: "POST",
body: payload,
mode: 'cors',
})
if (res.status != 200) {
const errstr = await res.text()
throw new Error(errstr || res.statusText)
}
const obj = await res.json()
return obj
}
export async function getHistoryDetails(argsObj: any) {
// https://rpgames-api.rpfafafahkdev.com/gameapi/rp_11001/gameinfo
// https://rpgames-api.rpfafafahkdev.com/gameapi/history
// const resp = await callGameApi("history", argsObj)
// callGameApi 会多拼一截gameId , history单独写
const url = apiaddr + path.join("/gameapi/", "historyDetails")
const payload = JSON.stringify(argsObj)
const res = await fetch(url, {
signal: AbortSignal.timeout(10000),
headers: {
"Content-Type": "application/json",
"X-Rp-Token": token,
},
method: "POST",
body: payload,
mode: 'cors',
})
if (res.status != 200) {
const errstr = await res.text()
throw new Error(errstr || res.statusText)
}
const obj = await res.json()
return obj
}
// 取消逗号,转换为数字
export function cash2gold(v: string): number {
v = v.replace(/,/g, '');
return Number(v);
}
export function getCurrency() {
// return 'THB';
return currency;
}
export function truncateString(str: string, maxLength: number = 10): string {
if (!str) return '';
if (str.length <= maxLength) return str;
return str.substring(0, maxLength) + '...';
}