Files
ZYZ/shared/pubUtils/battleUtils.ts
2023-06-16 10:37:28 +08:00

114 lines
3.9 KiB
TypeScript

import * as crc from 'crc';
import { md5 } from './sdkUtil';
import { gameData } from './data';
import moment = require('moment');
import { cloneDeep } from 'lodash';
const BATTLE_CLASS_MOD = 100; // 存档分类模数
const CDN_URL_PREFIX_SQ = 'https://download-sgzzyz.yev242.com'; // sq cdn 服务器地址前缀
const CDN_URL_PREFIX_ZYZ = 'http://zyz-download.trgame.cn'; // 公司下载服务器地址前缀
const CDN_URL_PREFIX_YJZ = 'https://srcdownload-yjz.fdd73.com'; // 公司下载服务器地址前缀
// 将字符串 crc32 处理后取模,以将随机字符串分组
function modStr(str: string, mod: number) {
if (typeof(str) !== 'string' || typeof(mod) !== 'number') return undefined;
return crc.crc32(str) % mod;
}
function getPrefixByEnv(env: string) {
switch (env) {
case 'dev':
case 'monitor':
case 'alpha':
case 'stable':
case 'distribute':
return CDN_URL_PREFIX_ZYZ;
case 'sq1':
case 'sq4':
case 'sq7':
case 'sq9':
return CDN_URL_PREFIX_SQ;
case 'zy1':
case 'ch1':
return CDN_URL_PREFIX_YJZ;
default:
}
}
export function getLocalRplUrl(roleId: string, warType: number, battleCode: string) {
const battleClass = modStr(battleCode, BATTLE_CLASS_MOD); // 将存档文件按一定规则分批保存
const writePath = `/zyz_logs/rpls/${roleId}/${warType}/${battleClass}`;
return writePath;
}
export function getRemoteRplUrl(sshHost: string, roleId: string, warType: number, battleCode: string) {
const battleClass = modStr(battleCode, BATTLE_CLASS_MOD); // 将存档文件按一定规则分批保存
const rplUrl = `/${md5(sshHost).substring(0, 4)}/${roleId}/${warType}/${battleClass}`;
return rplUrl;
}
export function getRemoteRplPrefix(env: string) {
const rplUrl = `${getPrefixByEnv(env)}/rpls/`;
return rplUrl;
}
export function getRemoteRplFilePath(remoteUrl: string, roleId: string, warType: number, battleCode: string) {
if(remoteUrl) return remoteUrl;
const battleClass = modStr(battleCode, BATTLE_CLASS_MOD); // 将存档文件按一定规则分批保存
const rplUrl = `/${roleId}/${warType}/${battleClass}/${battleCode}.bin`;
return rplUrl;
}
export function getLocalQrCodeUrl(curEnv: string, env: string) {
if(curEnv == 'development') {
return './img'
} else {
return `/zyz_logs/img/${md5(env).substring(0, 4)}/qrcode`;
}
}
export function getRemoteQrCodeUrl(env: string, fileName: string) {
const rplUrl = `${getPrefixByEnv(env)}/img/${md5(env).substring(0, 4)}/qrcode/` + fileName;
return rplUrl;
}
export function getLocalImgUrl(curEnv: string, type: string) {
if(curEnv == 'development') {
return './img'
} else {
return `/zyz_logs/img/${type}`;
}
}
export function getRemoteImgUrl(curEnv: string, fileName: string, type: string) {
const rplUrl = `${getPrefixByEnv(curEnv)}/img/${type}/` + fileName;
return rplUrl;
}
/**
* 寻宝当前是否是有加成的特殊时间
*/
export function isComBattleTimeLimit() {
let arr = gameData.comBattleRewardTime;
for(let { from, to } of arr) {
let fromTime = moment(moment().format(`YYYY-MM-DD ${from}`)).valueOf();
let toTime = moment(moment().format(`YYYY-MM-DD ${to}`)).valueOf();
let now = moment().valueOf();
if(fromTime <= now && toTime >= now) return true;
}
return false;
}
/**
* 拷贝敌军数组并添加当前血量字段
* @param source 原敌军数组,不包含当前血量字段
*/
export function transBossHpArr(source: Array<{ dataId: number, hp: number, actorId: number }>): Array<{ dataId: number, hp: number, curHp: number, actorId: number }> {
let desArr = [];
source.forEach(elem => {
let { hp } = elem;
desArr.push(Object.assign(elem, { curHp: hp }));
});
return cloneDeep(desArr);
}