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); }