2372 lines
82 KiB
TypeScript
2372 lines
82 KiB
TypeScript
// 游戏工具类
|
||
import * as path from "path";
|
||
import * as os from "os";
|
||
import PartnerConfigMgr from "../object/PartnerConfigMgr";
|
||
import Player from "../object/Player";
|
||
import SKLogger from "../gear/SKLogger";
|
||
import SKDataUtil from "../gear/SKDataUtil";
|
||
import GameConf from "../../conf/GameConf";
|
||
import {EAttrCalType, EAttrTypeL1, EAttrTypeL2, EEquipType, EMagicType, ERaceType, ESexType, ESkillType} from "../role/EEnum";
|
||
import ServerConf from "../../conf/ServerConf";
|
||
import SnowFlack53 from "../gear/SnowFlake53";
|
||
import GTimer from "../common/GTimer";
|
||
|
||
export default class GameUtil {
|
||
// REDIS服务是否开启
|
||
static redisEnabled: boolean = true;
|
||
// 游戏配置
|
||
static game_conf: any;
|
||
// 本地IP地址
|
||
static localIP: string;
|
||
// 服务器配置
|
||
static serverConf: ServerConf;
|
||
// 服务器类型
|
||
static serverType: string;
|
||
// 网络类型
|
||
static netType: string;
|
||
// 服务器索引
|
||
static serverId: number;
|
||
// 服务器名称
|
||
static serverName: string;
|
||
// 世界时间控制
|
||
static gameTime: number = 0;
|
||
// 游戏帧时间
|
||
static frameTime: number;
|
||
// 30分钟后销毁战斗数据
|
||
static battleSkipTime: number = 30 * 60 * 1000;
|
||
// 每5分钟保存一次玩家数据
|
||
static savePlayerTime: number = 5 * 60 * 1000;
|
||
// 是否关服
|
||
static isClose: boolean = false;
|
||
// 在线玩家人数
|
||
static online: number = 0;
|
||
// 保存玩家人数
|
||
static saveCount: number = 0;
|
||
// 保存玩家总数
|
||
static saveTotal: number = 0;
|
||
// 机器人总数
|
||
static robotCount: number = 0;
|
||
// 存档失败纪录
|
||
static saveFailed: any[] = [];
|
||
// 坐骑技能升级道具
|
||
static horseSkillUpItemId: number = 10607; // 丹书密卷
|
||
// 坐骑洗炼道具
|
||
static horseRefiningItemId: number = 10608; // 净露玉瓶
|
||
// 炼化锁消耗仙玉
|
||
static lockJade = [10, 20, 30];
|
||
|
||
static limitPartnerLevel = 35;
|
||
private static snowFlake53: SnowFlack53;
|
||
|
||
static attrToBaseAttr: any = {
|
||
[EAttrTypeL1.HP_ADD]: {
|
||
cal: EAttrCalType.ADD_PERCENT,
|
||
target: EAttrTypeL1.HP,
|
||
},
|
||
[EAttrTypeL1.SPD_ADD]: {
|
||
cal: EAttrCalType.ADD_PERCENT,
|
||
target: EAttrTypeL1.SPD,
|
||
},
|
||
[EAttrTypeL1.MP_ADD]: {
|
||
cal: EAttrCalType.ADD_PERCENT,
|
||
target: EAttrTypeL1.MP,
|
||
},
|
||
[EAttrTypeL1.ATK_ADD]: {
|
||
cal: EAttrCalType.ADD_PERCENT,
|
||
target: EAttrTypeL1.ATK,
|
||
},
|
||
[EAttrTypeL1.HP_PERC]: {
|
||
cal: EAttrCalType.PERCENT,
|
||
target: EAttrTypeL1.HP,
|
||
},
|
||
[EAttrTypeL1.MP_PERC]: {
|
||
cal: EAttrCalType.PERCENT,
|
||
target: EAttrTypeL1.MP,
|
||
},
|
||
[EAttrTypeL1.ATK_PERC]: {
|
||
cal: EAttrCalType.PERCENT,
|
||
target: EAttrTypeL1.ATK,
|
||
},
|
||
[EAttrTypeL1.SPD_PERC]: {
|
||
cal: EAttrCalType.PERCENT,
|
||
target: EAttrTypeL1.SPD,
|
||
},
|
||
}
|
||
// 界面图标是否展示 0:展示 1:不展示
|
||
static iconList = {"vip": 0,"dream": 0,"lock": 1,"fytz": 0,"kac": 1, "tie": 0, "au": GameConf.accumulative, "level":0, "sign":0, "special": 0};
|
||
static flagGoods = ["1003010", "1003020", "1003030", "1003040", "1003050", "1003060", "1003070", "1003080", "1003090", "100320", "100321", "100322", "100323"];
|
||
static firstLevelCode = [65665, 65666, 65667, 65668, 65669];
|
||
static attrTypeL1Text = {
|
||
'DHUNLUAN': EAttrTypeL1.K_CONFUSION, // 抗混乱
|
||
'DFENGYIN': EAttrTypeL1.K_SEAL, // 抗封印
|
||
'DHUNSHUI': EAttrTypeL1.K_SLEEP, // 抗昏睡
|
||
'DDU': EAttrTypeL1.K_POISON, // 抗毒
|
||
'DFENG': EAttrTypeL1.K_WIND, // 抗风
|
||
'DHUO': EAttrTypeL1.K_FIRE, // 抗火
|
||
'DSHUI': EAttrTypeL1.K_WATER, // 抗水
|
||
'DLEI': EAttrTypeL1.K_THUNDER, // 抗雷
|
||
'DGUIHUO': EAttrTypeL1.K_WILDFIRE, // 抗鬼火
|
||
'DYIWANG': EAttrTypeL1.K_FORGET, // 抗遗忘
|
||
'DSANSHI': EAttrTypeL1.K_BLOODRETURN, // 抗三尸
|
||
'DZHENSHE': EAttrTypeL1.K_DETER, // 抗震慑
|
||
'DWULI': EAttrTypeL1.K_PHY_GET, // 抗物理
|
||
'PXISHOU': EAttrTypeL1.PHY_GET, // 物理吸收
|
||
'PMINGZHONG': EAttrTypeL1.PHY_HIT, // 命中
|
||
'PSHANBI': EAttrTypeL1.PHY_DODGE, // 闪避
|
||
'PLIANJI': EAttrTypeL1.PHY_COMBO, //连击
|
||
'PLIANJILV': EAttrTypeL1.PHY_COMBO_PROB, //连击率
|
||
'PKUANGBAO': EAttrTypeL1.PHY_DEADLY, //狂暴
|
||
'PPOFANG': EAttrTypeL1.PHY_BREAK, //破防
|
||
'PPOFANGLV': EAttrTypeL1.PHY_BREAK_PROB, //破防率
|
||
'PFANZHEN': EAttrTypeL1.PHY_REBOUND, //反震
|
||
'PFANZHENLV': EAttrTypeL1.PHY_REBOUND_PROB, //反震率
|
||
'ADEFEND': EAttrTypeL1.DEFEND_ADD, //加防
|
||
'ASPD': EAttrTypeL1.SPD_ADD, //加速
|
||
'AATK': EAttrTypeL1.ATK_ADD, //加攻
|
||
'AHP': EAttrTypeL1.HP_ADD, //加血
|
||
'AMP': EAttrTypeL1.MP_ADD, //加蓝
|
||
'AMEIHUO': EAttrTypeL1.CHARM_ADD, //加强魅惑
|
||
'HDHUNLUAN': EAttrTypeL1.HK_CONFUSION, // 忽视抗混乱
|
||
'HDFENGYIN': EAttrTypeL1.HK_SEAL, // 忽视抗封印
|
||
'HDHUNSHUI': EAttrTypeL1.HK_SLEEP, // 忽视抗昏睡
|
||
'HDDU': EAttrTypeL1.HK_POISON, // 忽视抗毒
|
||
'HDFENG': EAttrTypeL1.HK_WIND, // 忽视抗风
|
||
'HDHUO': EAttrTypeL1.HK_FIRE, // 忽视抗火
|
||
'HDSHUI': EAttrTypeL1.HK_WATER, // 忽视抗水
|
||
'HDLEI': EAttrTypeL1.HK_THUNDER, // 忽视抗雷
|
||
'HDGUIHUO': EAttrTypeL1.HK_WILDFIRE, // 忽视抗鬼火
|
||
'HDYIWANG': EAttrTypeL1.HK_FORGET, // 忽视抗遗忘
|
||
'HDSANSHI': EAttrTypeL1.HK_BLOODRETURN, // 忽视抗三尸
|
||
'HDZHENSHE': EAttrTypeL1.HK_DETER, // 忽视抗震慑
|
||
'HDWULI': EAttrTypeL1.HK_PHY_GET, // 忽视抗物理
|
||
'HP': EAttrTypeL1.HP, // 生命值
|
||
'MAXHP': EAttrTypeL1.HP_MAX, // 最在生命值
|
||
'MP': EAttrTypeL1.MP, // 魔法值
|
||
'MAXMP': EAttrTypeL1.MP_MAX, // 最大魔法值
|
||
'ATK': EAttrTypeL1.ATK, // 攻击力
|
||
'SPD': EAttrTypeL1.SPD, // 速度
|
||
'PHP': EAttrTypeL1.HP_PERC, // 生命百分比
|
||
'PMP': EAttrTypeL1.MP_PERC, // 魔法百分比
|
||
'PATK': EAttrTypeL1.ATK_PERC, // 攻击百分比
|
||
'PSPD': EAttrTypeL1.SPD_PERC, // 速度百分比
|
||
'SHUIKBPRE': EAttrTypeL1.KB_WATER, // 水狂暴率
|
||
'LEIKBPRE': EAttrTypeL1.KB_THUNDER, // 雷狂暴率
|
||
'HUOKBPRE': EAttrTypeL1.KB_FIRE, // 火狂暴率
|
||
'FENGKBPRE': EAttrTypeL1.KB_WIND, // 风狂暴率
|
||
'SANSHIKBPRE': EAttrTypeL1.KB_BLOODRETURN, // 三尸狂暴率
|
||
'GUIHUOKBPRE': EAttrTypeL1.KB_WILDFIRE, // 鬼火狂暴率
|
||
'SHUIKB': EAttrTypeL1.Q_WATER, // 水狂暴
|
||
'LEIKB': EAttrTypeL1.Q_THUNDER, // 雷狂暴
|
||
'HUOKB': EAttrTypeL1.Q_FIRE, // 火狂暴
|
||
'FENGKB': EAttrTypeL1.Q_WIND, // 风狂暴
|
||
'SANSHIKB': EAttrTypeL1.Q_BLOODRETURN, // 三尸狂暴
|
||
'GUIHUOKB': EAttrTypeL1.Q_WILDFIRE, // 鬼火狂暴
|
||
}
|
||
|
||
static attrTypeStrL1: any = {
|
||
[EAttrTypeL1.K_CONFUSION]: 'DHUNLUAN', // 抗混乱
|
||
[EAttrTypeL1.K_SEAL]: 'DFENGYIN', // 抗封印
|
||
[EAttrTypeL1.K_SLEEP]: 'DHUNSHUI', // 抗昏睡
|
||
[EAttrTypeL1.K_POISON]: 'DDU', // 抗毒
|
||
[EAttrTypeL1.K_WIND]: 'DFENG', // 抗风
|
||
[EAttrTypeL1.K_FIRE]: 'DHUO', // 抗火
|
||
[EAttrTypeL1.K_WATER]: 'DSHUI', // 抗水
|
||
[EAttrTypeL1.K_THUNDER]: 'DLEI', // 抗雷
|
||
[EAttrTypeL1.K_WILDFIRE]: 'DGUIHUO', // 抗鬼火
|
||
[EAttrTypeL1.K_FORGET]: 'DYIWANG', // 抗遗忘
|
||
[EAttrTypeL1.K_BLOODRETURN]: 'DSANSHI', // 抗三尸
|
||
[EAttrTypeL1.K_DETER]: 'DZHENSHE', // 抗震慑
|
||
[EAttrTypeL1.K_PHY_GET]: 'DWULI', // 抗物理
|
||
[EAttrTypeL1.PHY_GET]: 'PXISHOU', // 物理吸收
|
||
[EAttrTypeL1.PHY_HIT]: 'PMINGZHONG', // 命中
|
||
[EAttrTypeL1.PHY_DODGE]: 'PSHANBI', // 闪避
|
||
|
||
[EAttrTypeL1.PHY_COMBO]: 'PLIANJI', //连击
|
||
[EAttrTypeL1.PHY_COMBO_PROB]: 'PLIANJILV', //连击率
|
||
[EAttrTypeL1.PHY_DEADLY]: 'PKUANGBAO', //狂暴
|
||
[EAttrTypeL1.PHY_BREAK]: 'PPOFANG', //破防
|
||
[EAttrTypeL1.PHY_BREAK_PROB]: 'PPOFANGLV', //破防率
|
||
[EAttrTypeL1.PHY_REBOUND]: 'PFANZHEN', //反震
|
||
[EAttrTypeL1.PHY_REBOUND_PROB]: 'PFANZHENLV', //反震率
|
||
[EAttrTypeL1.DEFEND_ADD]: 'ADEFEND', //加防
|
||
[EAttrTypeL1.SPD_ADD]: 'ASPD', //加速
|
||
[EAttrTypeL1.ATK_ADD]: 'AATK', //加攻
|
||
[EAttrTypeL1.HP_ADD]: 'AHP', //加血
|
||
[EAttrTypeL1.MP_ADD]: 'AMP', //加蓝
|
||
[EAttrTypeL1.CHARM_ADD]: 'AMEIHUO', //加强魅惑
|
||
|
||
[EAttrTypeL1.HK_CONFUSION]: 'HDHUNLUAN', // 忽视抗混乱
|
||
[EAttrTypeL1.HK_SEAL]: 'HDFENGYIN', // 忽视抗封印
|
||
[EAttrTypeL1.HK_SLEEP]: 'HDHUNSHUI', // 忽视抗昏睡
|
||
[EAttrTypeL1.HK_POISON]: 'HDDU', // 忽视抗毒
|
||
[EAttrTypeL1.HK_WIND]: 'HDFENG', // 忽视抗风
|
||
[EAttrTypeL1.HK_FIRE]: 'HDHUO', // 忽视抗火
|
||
[EAttrTypeL1.HK_WATER]: 'HDSHUI', // 忽视抗水
|
||
[EAttrTypeL1.HK_THUNDER]: 'HDLEI', // 忽视抗雷
|
||
[EAttrTypeL1.HK_WILDFIRE]: 'HDGUIHUO', // 忽视抗鬼火
|
||
[EAttrTypeL1.HK_FORGET]: 'HDYIWANG', // 忽视抗遗忘
|
||
[EAttrTypeL1.HK_BLOODRETURN]: 'HDSANSHI', // 忽视抗三尸
|
||
[EAttrTypeL1.HK_DETER]: 'HDZHENSHE', // 忽视抗震慑
|
||
[EAttrTypeL1.HK_PHY_GET]: 'HDWULI', // 忽视抗物理
|
||
/////////////////////////////////////////
|
||
[EAttrTypeL1.HP]: 'HP',
|
||
[EAttrTypeL1.HP_MAX]: 'MAXHP',
|
||
[EAttrTypeL1.MP]: 'MP',
|
||
[EAttrTypeL1.MP_MAX]: 'MAXMP',
|
||
[EAttrTypeL1.ATK]: 'ATK',
|
||
[EAttrTypeL1.SPD]: 'SPD',
|
||
|
||
[EAttrTypeL1.HP_PERC]: 'PHP',
|
||
[EAttrTypeL1.MP_PERC]: 'PMP',
|
||
[EAttrTypeL1.ATK_PERC]: 'PATK',
|
||
[EAttrTypeL1.SPD_PERC]: 'PSPD',
|
||
|
||
[EAttrTypeL1.KB_WATER]: 'SHUIKBPRE',
|
||
[EAttrTypeL1.KB_THUNDER]: 'LEIKBPRE',
|
||
[EAttrTypeL1.KB_FIRE]: 'HUOKBPRE',
|
||
[EAttrTypeL1.KB_WIND]: 'FENGKBPRE',
|
||
[EAttrTypeL1.KB_BLOODRETURN]: 'SANSHIKBPRE',
|
||
[EAttrTypeL1.KB_WILDFIRE]: 'GUIHUOKBPRE',
|
||
[EAttrTypeL1.Q_WATER]: 'SHUIKB',
|
||
[EAttrTypeL1.Q_THUNDER]: 'LEIKB',
|
||
[EAttrTypeL1.Q_FIRE]: 'HUOKB',
|
||
[EAttrTypeL1.Q_WIND]: 'FENGKB',
|
||
[EAttrTypeL1.Q_BLOODRETURN]: 'SANSHIKB',
|
||
[EAttrTypeL1.Q_WILDFIRE]: 'GUIHUOKB',
|
||
}
|
||
|
||
static mapType: any = {
|
||
Unknow: 0,
|
||
Map: 1,
|
||
Instance: 2,
|
||
}
|
||
|
||
static attrEquipTypeStr: any = {
|
||
'FatalRate': EAttrTypeL1.PHY_DEADLY, // 致命(狂暴)%
|
||
'HitRate': EAttrTypeL1.PHY_HIT, // 命中%
|
||
'PhyDefNef': EAttrTypeL1.PHY_BREAK, // 破防程度%
|
||
'PhyDefNefRate': EAttrTypeL1.PHY_BREAK_PROB, // 破防概率%
|
||
'AdAtkEhan': EAttrTypeL1.ATK_ADD, // 加强攻击%
|
||
'CureEhan': EAttrTypeL1.CURE_EHAN, // 加强治愈%
|
||
'SweepEhan': EAttrTypeL1.SWEEP_EHAN, // 加强横扫%
|
||
'BreakEhan': EAttrTypeL1.BREAK_EHAN, // 加强破甲%
|
||
'ThudEhan': EAttrTypeL1.THUD_EHAN, // 加强震击%
|
||
'Atk': EAttrTypeL1.ATK, //攻击(原数增加)
|
||
'AdSpd': EAttrTypeL1.SPD_ADD, // 加速%
|
||
'AdSpdEhan': EAttrTypeL1.SPD_ADD_EHAN, // 加强加速%
|
||
'HpMax': EAttrTypeL1.HP_MAX, // 增加气血上限
|
||
'MpMax': EAttrTypeL1.MP_MAX, // 增加法力上限
|
||
'HpPercent': EAttrTypeL1.HP_ADD, // 气血%
|
||
'MpPercent': EAttrTypeL1.MP_ADD, // 法力%
|
||
'AtkPercent': EAttrTypeL1.ATK_PERC, //攻击百分比
|
||
'HpPer': EAttrTypeL1.HP_PERC, //气血百分比
|
||
'Speed': EAttrTypeL1.SPD, // 速度 (原数增加)
|
||
'RainDef': EAttrTypeL1.K_WATER, // 抗水法%
|
||
'ThunderDef': EAttrTypeL1.K_THUNDER, // 抗雷法%
|
||
'FireDef': EAttrTypeL1.K_FIRE, // 抗火法%
|
||
'WindDef': EAttrTypeL1.K_WIND, // 抗风法%
|
||
'RainDefNeg': EAttrTypeL1.HK_WATER, // 忽视水%
|
||
'ThunderDefNeg': EAttrTypeL1.HK_THUNDER, // 忽视雷%
|
||
'FireDefNeg': EAttrTypeL1.HK_FIRE, // 忽视火%
|
||
'WindDefNeg': EAttrTypeL1.HK_WIND, // 忽视风%
|
||
'SealDef': EAttrTypeL1.K_SEAL, // 抗封印%
|
||
'DisorderDef': EAttrTypeL1.K_CONFUSION, // 抗混乱%
|
||
'SleepDef': EAttrTypeL1.K_SLEEP, // 抗昏睡%
|
||
'PoisonDef': EAttrTypeL1.K_POISON, // 抗中毒%
|
||
'SealDefNeg': EAttrTypeL1.HK_SEAL, // 忽视封印%
|
||
'DisorderDefNeg': EAttrTypeL1.HK_CONFUSION, // 忽视混乱%
|
||
'SleepDefNeg': EAttrTypeL1.HK_SLEEP, // 忽视昏睡%
|
||
'PoisonDefNeg': EAttrTypeL1.HK_POISON, // 忽视毒%
|
||
'ForgetDef': EAttrTypeL1.K_FORGET, // 抗遗忘%
|
||
'GfireDef': EAttrTypeL1.K_WILDFIRE, // 抗鬼火%
|
||
'SanshiDef': EAttrTypeL1.K_BLOODRETURN, // 抗三尸%
|
||
'ForgetDefNeg': EAttrTypeL1.HK_FORGET, // 忽视遗忘%
|
||
'GfireDefNeg': EAttrTypeL1.HK_WILDFIRE, // 忽视鬼火%
|
||
'SanshiDefNeg': EAttrTypeL1.HK_BLOODRETURN, // 忽视三尸%
|
||
'ShockDefNeg': EAttrTypeL1.HK_DETER, // 忽视抗震慑%
|
||
'CharmEhan': EAttrTypeL1.CHARM_ADD, // 加强魅惑%
|
||
'PhyDef': EAttrTypeL1.PHY_GET, // 物理吸收%
|
||
'AdDefEhan': EAttrTypeL1.DEFEND_ADD, //加强加防%
|
||
'ShockDef': EAttrTypeL1.K_DETER, //抗震慑%
|
||
'HitCombo': EAttrTypeL1.PHY_COMBO, //连击次数
|
||
'HitComboProb': EAttrTypeL1.PHY_COMBO_PROB, //连击率
|
||
'VoidRate': EAttrTypeL1.PHY_DODGE, //躲闪%
|
||
|
||
'Basecon': EAttrTypeL2.GENGU, // 根骨
|
||
'Wakan': EAttrTypeL2.LINGXING, // 灵性
|
||
'Power': EAttrTypeL2.LILIANG, // 力量
|
||
'Agility': EAttrTypeL2.MINJIE, // 敏捷
|
||
|
||
'RainFatalRate': EAttrTypeL1.KB_WATER,
|
||
'ThunderFatalRate': EAttrTypeL1.KB_THUNDER,
|
||
'FireFatalRate': EAttrTypeL1.KB_FIRE,
|
||
'WindFatalRate': EAttrTypeL1.KB_WIND,
|
||
'SanshiFatalRate': EAttrTypeL1.KB_BLOODRETURN,
|
||
'GfireFatalRate': EAttrTypeL1.KB_WILDFIRE,
|
||
'RainFatalHurt': EAttrTypeL1.Q_WATER,
|
||
'ThunderFatalHurt': EAttrTypeL1.Q_THUNDER,
|
||
'FireFatalHurt': EAttrTypeL1.Q_FIRE,
|
||
'WindFatalHurt': EAttrTypeL1.Q_WIND,
|
||
'SanshiFatalHurt': EAttrTypeL1.Q_BLOODRETURN,
|
||
'GfireFatalHurt': EAttrTypeL1.Q_WILDFIRE,
|
||
'Kgold': EAttrTypeL1.S_GOLD,
|
||
'Kwood': EAttrTypeL1.S_WOOD,
|
||
'Kwater': EAttrTypeL1.S_WATER,
|
||
'Kfire': EAttrTypeL1.S_FIRE,
|
||
'Kearth': EAttrTypeL1.S_SOIL,
|
||
}
|
||
//抗性重铸属性
|
||
static attrEquipKangXing: any = {
|
||
'0': EAttrTypeL1.K_WATER, // 抗水法%
|
||
'1': EAttrTypeL1.K_THUNDER, // 抗雷法%
|
||
'2': EAttrTypeL1.K_FIRE, // 抗火法%
|
||
'3': EAttrTypeL1.K_WIND, // 抗风法%
|
||
'4': EAttrTypeL1.K_SEAL, // 抗封印%
|
||
'5': EAttrTypeL1.K_CONFUSION, // 抗混乱%
|
||
'6': EAttrTypeL1.K_SLEEP, // 抗昏睡%
|
||
'7': EAttrTypeL1.K_POISON, // 抗中毒%
|
||
'8': EAttrTypeL1.K_FORGET, // 抗遗忘%
|
||
'9': EAttrTypeL1.K_WILDFIRE, // 抗鬼火%
|
||
'10': EAttrTypeL1.K_BLOODRETURN, // 抗三尸%
|
||
'11': EAttrTypeL1.K_DETER, //抗震慑%
|
||
}
|
||
//武器重铸属性
|
||
static attrEquipWeapon: any = {
|
||
'0': EAttrTypeL1.PHY_DEADLY, // 致命(狂暴)%
|
||
'1': EAttrTypeL1.PHY_HIT, // 命中%
|
||
'2': EAttrTypeL1.PHY_BREAK, // 破防程度%
|
||
'3': EAttrTypeL1.PHY_BREAK_PROB, // 破防概率%
|
||
'4': EAttrTypeL1.ATK, //攻击(原数增加)
|
||
'5': EAttrTypeL1.HP_MAX, // 增加气血上限
|
||
'6': EAttrTypeL1.MP_MAX, // 增加法力上限
|
||
}
|
||
//人族重铸属性
|
||
static attrEquipRenHuShi: any = {
|
||
'1': EAttrTypeL1.HK_SEAL, // 忽视封印%
|
||
'2': EAttrTypeL1.HK_CONFUSION, // 忽视混乱%
|
||
'3': EAttrTypeL1.HK_SLEEP, // 忽视昏睡%
|
||
'0': EAttrTypeL1.HK_POISON, // 忽视毒%
|
||
}
|
||
//仙族重铸属性
|
||
static attrEquipXianHuShi: any = {
|
||
'1': EAttrTypeL1.HK_WATER, // 忽视水%
|
||
'2': EAttrTypeL1.HK_THUNDER, // 忽视雷%
|
||
'3': EAttrTypeL1.HK_FIRE, // 忽视火%
|
||
'0': EAttrTypeL1.HK_WIND, // 忽视风%
|
||
}
|
||
//鬼族重铸属性
|
||
static attrEquipGuiHuShi: any = {
|
||
'1': EAttrTypeL1.HK_FORGET, // 忽视遗忘%
|
||
'2': EAttrTypeL1.HK_WILDFIRE, // 忽视鬼火%
|
||
'0': EAttrTypeL1.HK_BLOODRETURN, // 忽视三尸%
|
||
}
|
||
//魔族重铸属性
|
||
static attrEquipMoHuShi: any = {
|
||
'1': EAttrTypeL1.HK_DETER, // 忽视抗震慑%
|
||
'2': EAttrTypeL1.SPD_ADD_EHAN, // 加强加速%
|
||
'3': EAttrTypeL1.DEFEND_ADD, //加强加防%
|
||
'0': EAttrTypeL1.CHARM_ADD, // 加强魅惑%
|
||
}
|
||
//龙族重铸属性
|
||
static attrEquipLong: any = {
|
||
'1': EAttrTypeL1.CURE_EHAN, // 加强治愈%
|
||
'2': EAttrTypeL1.SWEEP_EHAN, // 加强横扫%
|
||
'3': EAttrTypeL1.BREAK_EHAN, // 加强破甲%
|
||
'0': EAttrTypeL1.THUD_EHAN, // 加强震击%
|
||
}
|
||
//项链重铸属性
|
||
static attrEquipTorque: any = {
|
||
'1': EAttrTypeL1.SPD_ADD_EHAN, // 加强加速%
|
||
'2': EAttrTypeL1.HP_MAX, // 增加气血上限
|
||
'3': EAttrTypeL1.MP_MAX, // 增加法力上限
|
||
'4': EAttrTypeL1.HP_ADD, // 气血%
|
||
'5': EAttrTypeL1.MP_ADD, // 法力%
|
||
'6': EAttrTypeL1.SPD, // 速度 (原数增加)
|
||
'0': EAttrTypeL1.ATK_PERC, //攻击百分比
|
||
}
|
||
//鞋子重铸属性
|
||
static attrEquipShose: any = {
|
||
'1': EAttrTypeL1.K_WATER, // 抗水法%
|
||
'2': EAttrTypeL1.K_THUNDER, // 抗雷法%
|
||
'3': EAttrTypeL1.K_FIRE, // 抗火法%
|
||
'4': EAttrTypeL1.K_WIND, // 抗风法%
|
||
'5': EAttrTypeL1.K_SEAL, // 抗封印%
|
||
'6': EAttrTypeL1.K_CONFUSION, // 抗混乱%
|
||
'13': EAttrTypeL1.SPD, // 速度 (原数增加)
|
||
'7': EAttrTypeL1.K_SLEEP, // 抗昏睡%
|
||
'8': EAttrTypeL1.K_POISON, // 抗中毒%
|
||
'9': EAttrTypeL1.K_FORGET, // 抗遗忘%
|
||
'0': EAttrTypeL1.SPD_ADD_EHAN, // 加强加速%
|
||
'10': EAttrTypeL1.K_WILDFIRE, // 抗鬼火%
|
||
'11': EAttrTypeL1.K_BLOODRETURN, // 抗三尸%
|
||
'12': EAttrTypeL1.K_DETER, //抗震慑%
|
||
}
|
||
|
||
// 不需要进行百分百计算的
|
||
static equipTypeNumerical = [
|
||
EAttrTypeL1.ATK, // 攻击力
|
||
EAttrTypeL1.SPD, // 速度
|
||
EAttrTypeL1.DEFEND_ADD, // 加防
|
||
EAttrTypeL1.PHY_COMBO, // 连击
|
||
EAttrTypeL1.HP_MAX, // 最大生命值
|
||
EAttrTypeL1.MP_MAX, // 最大魔法值
|
||
EAttrTypeL1.BONE, // 根骨
|
||
EAttrTypeL1.SPIRIT, // 灵性
|
||
EAttrTypeL1.STRENGTH, // 力量
|
||
EAttrTypeL1.DEXTERITY, // 敏捷
|
||
EAttrTypeL1.GOLD, // 金
|
||
EAttrTypeL1.WOOD, // 木
|
||
EAttrTypeL1.WATER, // 水
|
||
EAttrTypeL1.FIRE, // 火
|
||
EAttrTypeL1.SOIL, // 土
|
||
];
|
||
|
||
static defineSkill: any = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.JieDaoShaRen]: 0,
|
||
[ESkillType.MiHunZui]: 0,
|
||
[ESkillType.ZuoBiShangGuan]: 0,
|
||
[ESkillType.ShiXinKuangLuan]: 0,
|
||
[ESkillType.BaiRiMian]: 0,
|
||
[ESkillType.SiMianChuGe]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.HeDingHongFen]: 0,
|
||
[ESkillType.MiHunZui]: 0,
|
||
[ESkillType.ZuoBiShangGuan]: 0,
|
||
[ESkillType.WanDuGongXin]: 0,
|
||
[ESkillType.BaiRiMian]: 0,
|
||
[ESkillType.SiMianChuGe]: 0,
|
||
}
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.FengLeiYongDong]: 0,
|
||
[ESkillType.DianShanLeiMing]: 0,
|
||
[ESkillType.JiaoLongChuHai]: 0,
|
||
[ESkillType.XiuLiQianKun]: 0,
|
||
[ESkillType.TianZhuDiMie]: 0,
|
||
[ESkillType.JiuLongBingFeng]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.LieHuoJiaoYang]: 0,
|
||
[ESkillType.DianShanLeiMing]: 0,
|
||
[ESkillType.JiaoLongChuHai]: 0,
|
||
[ESkillType.JiuYinChunHuo]: 0,
|
||
[ESkillType.TianZhuDiMie]: 0,
|
||
[ESkillType.JiuLongBingFeng]: 0,
|
||
}
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.TianWaiFeiMo]: 0,
|
||
[ESkillType.ShouWangShenLi]: 0,
|
||
[ESkillType.XiaoHunShiGu]: 0,
|
||
[ESkillType.QianKunJieSu]: 0,
|
||
[ESkillType.MoShenFuShen]: 0,
|
||
[ESkillType.YanLuoZhuiMing]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.MoShenHuTi]: 0,
|
||
[ESkillType.ShouWangShenLi]: 0,
|
||
[ESkillType.XiaoHunShiGu]: 0,
|
||
[ESkillType.HanQingMoMo]: 0,
|
||
[ESkillType.MoShenFuShen]: 0,
|
||
[ESkillType.YanLuoZhuiMing]: 0,
|
||
}
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.XueShaZhiGu]: 0,
|
||
[ESkillType.LuoRiRongJin]: 0,
|
||
[ESkillType.ShiXinFeng]: 0,
|
||
[ESkillType.XiXingDaFa]: 0,
|
||
[ESkillType.XueHaiShenChou]: 0,
|
||
[ESkillType.MengPoTang]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.QinSiBingWu]: 0,
|
||
[ESkillType.LuoRiRongJin]: 0,
|
||
[ESkillType.ShiXinFeng]: 0,
|
||
[ESkillType.QianNvYouHun]: 0,
|
||
[ESkillType.XueHaiShenChou]: 0,
|
||
[ESkillType.MengPoTang]: 0,
|
||
}
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.NiLin]: 0,
|
||
[ESkillType.LingXvYvFeng]: 0,
|
||
[ESkillType.FeiJvJiuTian]: 0,
|
||
[ESkillType.PeiRanMoYv]: 0,
|
||
[ESkillType.ZeBeiWanWu]: 0,
|
||
[ESkillType.FengLeiWanJun]: 0,
|
||
[ESkillType.ZhenTianDongDi]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.NiLin]: 0,
|
||
[ESkillType.BaiLangTaoTian]: 0,
|
||
[ESkillType.CangHaiHengLiu]: 0,
|
||
[ESkillType.PeiRanMoYv]: 0,
|
||
[ESkillType.ZeBeiWanWu]: 0,
|
||
[ESkillType.FengLeiWanJun]: 0,
|
||
[ESkillType.ZhenTianDongDi]: 0,
|
||
}
|
||
},
|
||
}
|
||
|
||
static robotDefineSkill: any = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.ShiXinKuangLuan]: 0,
|
||
[ESkillType.BaiRiMian]: 0,
|
||
[ESkillType.SiMianChuGe]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.WanDuGongXin]: 0,
|
||
[ESkillType.BaiRiMian]: 0,
|
||
[ESkillType.SiMianChuGe]: 0,
|
||
}
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.XiuLiQianKun]: 0,
|
||
[ESkillType.TianZhuDiMie]: 0,
|
||
[ESkillType.JiuLongBingFeng]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.JiuYinChunHuo]: 0,
|
||
[ESkillType.TianZhuDiMie]: 0,
|
||
[ESkillType.JiuLongBingFeng]: 0,
|
||
}
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.QianKunJieSu]: 0,
|
||
[ESkillType.MoShenFuShen]: 0,
|
||
[ESkillType.YanLuoZhuiMing]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.HanQingMoMo]: 0,
|
||
[ESkillType.MoShenFuShen]: 0,
|
||
[ESkillType.YanLuoZhuiMing]: 0,
|
||
}
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.XiXingDaFa]: 0,
|
||
[ESkillType.XueHaiShenChou]: 0,
|
||
[ESkillType.MengPoTang]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.QianNvYouHun]: 0,
|
||
[ESkillType.XueHaiShenChou]: 0,
|
||
[ESkillType.MengPoTang]: 0,
|
||
}
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[ESkillType.ZeBeiWanWu]: 0,
|
||
[ESkillType.FeiJvJiuTian]: 0,
|
||
[ESkillType.ZhenTianDongDi]: 0,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[ESkillType.CangHaiHengLiu]: 0,
|
||
[ESkillType.ZeBeiWanWu]: 0,
|
||
[ESkillType.ZhenTianDongDi]: 0,
|
||
}
|
||
},
|
||
}
|
||
|
||
// 成长值
|
||
static growPre: any = {
|
||
[ERaceType.HUMEN]: {
|
||
[EAttrTypeL2.GENGU]: 1.2,
|
||
[EAttrTypeL2.LINGXING]: 1,
|
||
[EAttrTypeL2.LILIANG]: 1,
|
||
[EAttrTypeL2.MINJIE]: 0.8,
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[EAttrTypeL2.GENGU]: 1,
|
||
[EAttrTypeL2.LINGXING]: 1.3,
|
||
[EAttrTypeL2.LILIANG]: 0.7,
|
||
[EAttrTypeL2.MINJIE]: 1,
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[EAttrTypeL2.GENGU]: 1.1,
|
||
[EAttrTypeL2.LINGXING]: 0.6,
|
||
[EAttrTypeL2.LILIANG]: 1.3,
|
||
[EAttrTypeL2.MINJIE]: 1.2,
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[EAttrTypeL2.GENGU]: 1.2,
|
||
[EAttrTypeL2.LINGXING]: 1,
|
||
[EAttrTypeL2.LILIANG]: 0.95,
|
||
[EAttrTypeL2.MINJIE]: 0.85,
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[EAttrTypeL2.GENGU]: 1.3,
|
||
[EAttrTypeL2.LINGXING]: 1,
|
||
[EAttrTypeL2.LILIANG]: 1.5,
|
||
[EAttrTypeL2.MINJIE]: 1.1,
|
||
},
|
||
}
|
||
|
||
// 基础一级属性
|
||
static baseAttr: any = {
|
||
[ERaceType.HUMEN]: {
|
||
[EAttrTypeL1.HP]: 360,
|
||
[EAttrTypeL1.MP]: 300,
|
||
[EAttrTypeL1.ATK]: 70,
|
||
[EAttrTypeL1.SPD]: 8,
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[EAttrTypeL1.HP]: 270,
|
||
[EAttrTypeL1.MP]: 350,
|
||
[EAttrTypeL1.ATK]: 80,
|
||
[EAttrTypeL1.SPD]: 9,
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[EAttrTypeL1.HP]: 330,
|
||
[EAttrTypeL1.MP]: 210,
|
||
[EAttrTypeL1.ATK]: 80,
|
||
[EAttrTypeL1.SPD]: 10,
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[EAttrTypeL1.HP]: 300,
|
||
[EAttrTypeL1.MP]: 390,
|
||
[EAttrTypeL1.ATK]: 60,
|
||
[EAttrTypeL1.SPD]: 10,
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[EAttrTypeL1.HP]: 300,
|
||
[EAttrTypeL1.MP]: 240,
|
||
[EAttrTypeL1.ATK]: 80,
|
||
[EAttrTypeL1.SPD]: 10,
|
||
},
|
||
}
|
||
// 1转修正
|
||
static reliveFixAttr1 = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_CONFUSION]: 10,
|
||
[EAttrTypeL1.K_SEAL]: 10,
|
||
[EAttrTypeL1.K_SLEEP]: 10,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_POISON]: 10,
|
||
[EAttrTypeL1.K_SEAL]: 10,
|
||
[EAttrTypeL1.K_SLEEP]: 10,
|
||
},
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 10,
|
||
[EAttrTypeL1.K_WATER]: 10,
|
||
[EAttrTypeL1.K_WIND]: 10,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 10, // 抗混乱
|
||
[EAttrTypeL1.K_WATER]: 10, // 抗封印
|
||
[EAttrTypeL1.K_FIRE]: 10, // 抗昏睡
|
||
},
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 8.2,
|
||
[EAttrTypeL1.MP]: 8.2,
|
||
[EAttrTypeL1.SPD]: 6.15,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 8.2,
|
||
[EAttrTypeL1.MP]: 8.2,
|
||
[EAttrTypeL1.K_DETER]: 9.2,
|
||
},
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 10,
|
||
[EAttrTypeL1.K_FORGET]: 10,
|
||
[EAttrTypeL1.K_BLOODRETURN]: 10,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 10,
|
||
[EAttrTypeL1.K_FORGET]: 10,
|
||
[EAttrTypeL1.K_PHY_GET]: 15.3,
|
||
},
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 8.2,
|
||
[EAttrTypeL1.PHY_GET]: 10,
|
||
[EAttrTypeL1.HK_PHY_GET]: 5,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 8.2,
|
||
[EAttrTypeL1.PHY_GET]: 10,
|
||
[EAttrTypeL1.HK_PHY_GET]: 5,
|
||
},
|
||
}
|
||
}
|
||
// 2转修正
|
||
static reliveFixAttr2 = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_CONFUSION]: 15,
|
||
[EAttrTypeL1.K_SEAL]: 15,
|
||
[EAttrTypeL1.K_SLEEP]: 15,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_POISON]: 15,
|
||
[EAttrTypeL1.K_SEAL]: 15,
|
||
[EAttrTypeL1.K_SLEEP]: 15,
|
||
},
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 15,
|
||
[EAttrTypeL1.K_WATER]: 15,
|
||
[EAttrTypeL1.K_WIND]: 15,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 15, // 抗混乱
|
||
[EAttrTypeL1.K_WATER]: 15, // 抗封印
|
||
[EAttrTypeL1.K_FIRE]: 15, // 抗昏睡
|
||
},
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 12.3,
|
||
[EAttrTypeL1.MP]: 12.3,
|
||
[EAttrTypeL1.SPD]: 9.23,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 12.3,
|
||
[EAttrTypeL1.MP]: 12.3,
|
||
[EAttrTypeL1.K_DETER]: 13.8,
|
||
},
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 15,
|
||
[EAttrTypeL1.K_FORGET]: 15,
|
||
[EAttrTypeL1.K_BLOODRETURN]: 15,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 15,
|
||
[EAttrTypeL1.K_FORGET]: 15,
|
||
[EAttrTypeL1.K_PHY_GET]: 23,
|
||
},
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 16,
|
||
[EAttrTypeL1.PHY_GET]: 16.8,
|
||
[EAttrTypeL1.HK_PHY_GET]: 15.1,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 16.3,
|
||
[EAttrTypeL1.PHY_GET]: 18,
|
||
[EAttrTypeL1.HK_PHY_GET]: 16.8,
|
||
},
|
||
}
|
||
}
|
||
// 转生修正3
|
||
static reliveFixAttr3 = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_CONFUSION]: 20,
|
||
[EAttrTypeL1.K_SEAL]: 20,
|
||
[EAttrTypeL1.K_SLEEP]: 20,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_POISON]: 20,
|
||
[EAttrTypeL1.K_SEAL]: 20,
|
||
[EAttrTypeL1.K_SLEEP]: 20,
|
||
},
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 20,
|
||
[EAttrTypeL1.K_WATER]: 20,
|
||
[EAttrTypeL1.K_WIND]: 20,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 20, // 抗混乱
|
||
[EAttrTypeL1.K_WATER]: 20, // 抗封印
|
||
[EAttrTypeL1.K_FIRE]: 20, // 抗昏睡
|
||
},
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 16.4,
|
||
[EAttrTypeL1.MP]: 16.4,
|
||
[EAttrTypeL1.SPD]: 12.3,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 16.4,
|
||
[EAttrTypeL1.MP]: 16.4,
|
||
[EAttrTypeL1.K_DETER]: 18.5,
|
||
},
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 20,
|
||
[EAttrTypeL1.K_FORGET]: 20,
|
||
[EAttrTypeL1.K_BLOODRETURN]: 20,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 20,
|
||
[EAttrTypeL1.K_FORGET]: 20,
|
||
[EAttrTypeL1.K_PHY_GET]: 30.6,
|
||
},
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 21.4,
|
||
[EAttrTypeL1.PHY_GET]: 21.4,
|
||
[EAttrTypeL1.HK_PHY_GET]: 25.4,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 21.4,
|
||
[EAttrTypeL1.PHY_GET]: 21.4,
|
||
[EAttrTypeL1.HK_PHY_GET]: 25.6,
|
||
},
|
||
}
|
||
}
|
||
// 转生修正4
|
||
static reliveFixAttr4 = {
|
||
[ERaceType.HUMEN]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_CONFUSION]: 25,
|
||
[EAttrTypeL1.K_SEAL]: 25,
|
||
[EAttrTypeL1.K_SLEEP]: 25,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_POISON]: 25,
|
||
[EAttrTypeL1.K_SEAL]: 25,
|
||
[EAttrTypeL1.K_SLEEP]: 25,
|
||
},
|
||
},
|
||
[ERaceType.SKY]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 25,
|
||
[EAttrTypeL1.K_WATER]: 25,
|
||
[EAttrTypeL1.K_WIND]: 25,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_THUNDER]: 25, // 抗混乱
|
||
[EAttrTypeL1.K_WATER]: 25, // 抗封印
|
||
[EAttrTypeL1.K_FIRE]: 25, // 抗昏睡
|
||
},
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 22.4,
|
||
[EAttrTypeL1.MP]: 22.4,
|
||
[EAttrTypeL1.SPD]: 24.3,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 22.4,
|
||
[EAttrTypeL1.MP]: 22.4,
|
||
[EAttrTypeL1.K_DETER]: 24.5,
|
||
},
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 25,
|
||
[EAttrTypeL1.K_FORGET]: 25,
|
||
[EAttrTypeL1.K_BLOODRETURN]: 25,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.K_WILDFIRE]: 25,
|
||
[EAttrTypeL1.K_FORGET]: 25,
|
||
[EAttrTypeL1.K_PHY_GET]: 42.6,
|
||
},
|
||
},
|
||
[ERaceType.DRAGON]: {
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HP]: 25,
|
||
[EAttrTypeL1.PHY_GET]: 25,
|
||
[EAttrTypeL1.HK_PHY_GET]: 50,
|
||
},
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HP]: 25,
|
||
[EAttrTypeL1.PHY_GET]: 25,
|
||
[EAttrTypeL1.HK_PHY_GET]: 50,
|
||
},
|
||
},
|
||
}
|
||
static attrToBtlAttr: any = {
|
||
[EAttrTypeL1.ATK]: [EAttrTypeL1.ATK_ADD],
|
||
[EAttrTypeL1.K_PHY_GET]: [EAttrTypeL1.DEFEND_ADD, EAttrTypeL1.PHY_GET],
|
||
[EAttrTypeL1.SPD]: [EAttrTypeL1.SPD_ADD],
|
||
}
|
||
|
||
static atkSkills = [
|
||
EMagicType.PHYSICS, //物理
|
||
EMagicType.CHAOS, //混乱
|
||
EMagicType.TOXIN, //毒
|
||
EMagicType.SLEEP, //昏睡
|
||
EMagicType.SEAL, //封印
|
||
EMagicType.WIND, //风法
|
||
EMagicType.FIRE, //火法
|
||
EMagicType.THUNDER, //雷法
|
||
EMagicType.WATER, //水法
|
||
EMagicType.FRIGHTEN, //震慑
|
||
EMagicType.THREE_CORPSE, //三尸
|
||
EMagicType.CHARM, //魅惑
|
||
EMagicType.GHOST_FIRE, //鬼火
|
||
EMagicType.FORGET, //遗忘
|
||
EMagicType.SUB_DEFENSE, // 减防
|
||
]
|
||
|
||
static skillActOn: any = {
|
||
All: 0,
|
||
Enemy: 1,
|
||
Self: 2,
|
||
}
|
||
|
||
static defSkills: any = [
|
||
EMagicType.SPEED, //加速
|
||
EMagicType.DEFENSE, //加防
|
||
EMagicType.ATTACK, //加攻
|
||
EMagicType.HIDING, //隐身
|
||
]
|
||
|
||
static debuffSkills: any = [
|
||
EMagicType.CHAOS, //混乱
|
||
EMagicType.TOXIN, //毒
|
||
EMagicType.SLEEP, //昏睡
|
||
EMagicType.SEAL, //封印
|
||
EMagicType.CHARM, //魅惑
|
||
EMagicType.FORGET, //遗忘
|
||
EMagicType.SUB_DEFENSE, // 减防
|
||
]
|
||
|
||
static buffSkillType: any = { //法系id
|
||
[EMagicType.PHYSICS]: 0, //物理
|
||
[EMagicType.CHAOS]: 2, //混乱
|
||
[EMagicType.TOXIN]: 0, //毒
|
||
[EMagicType.SLEEP]: 0, //昏睡
|
||
[EMagicType.SEAL]: 0, //封印
|
||
[EMagicType.WIND]: 0, //风法
|
||
[EMagicType.FIRE]: 0, //火法
|
||
[EMagicType.THUNDER]: 0, //雷法
|
||
[EMagicType.WATER]: 0, //水法
|
||
[EMagicType.SPEED]: 1, //加速
|
||
[EMagicType.DEFENSE]: 1, //加防
|
||
[EMagicType.ATTACK]: 1, //加攻
|
||
[EMagicType.FRIGHTEN]: 0, //震慑
|
||
[EMagicType.THREE_CORPSE]: 0, //三尸
|
||
[EMagicType.CHARM]: 2, //魅惑
|
||
[EMagicType.GHOST_FIRE]: 0, //鬼火
|
||
[EMagicType.FORGET]: 2, //遗忘
|
||
[EMagicType.SUB_DEFENSE]: 2, // 减防
|
||
}
|
||
// 抗性列表
|
||
static skillTypeKangXing: any = {
|
||
[EMagicType.CHAOS]: EAttrTypeL1.K_CONFUSION,
|
||
[EMagicType.SEAL]: EAttrTypeL1.K_SEAL,
|
||
[EMagicType.SLEEP]: EAttrTypeL1.K_SLEEP,
|
||
[EMagicType.TOXIN]: EAttrTypeL1.K_POISON,
|
||
[EMagicType.WIND]: EAttrTypeL1.K_WIND,
|
||
[EMagicType.FIRE]: EAttrTypeL1.K_FIRE,
|
||
[EMagicType.WATER]: EAttrTypeL1.K_WATER,
|
||
[EMagicType.THUNDER]: EAttrTypeL1.K_THUNDER,
|
||
[EMagicType.GHOST_FIRE]: EAttrTypeL1.K_WILDFIRE,
|
||
[EMagicType.FORGET]: EAttrTypeL1.K_FORGET,
|
||
[EMagicType.THREE_CORPSE]: EAttrTypeL1.K_BLOODRETURN,
|
||
[EMagicType.FRIGHTEN]: EAttrTypeL1.K_DETER,
|
||
[EMagicType.PHYSICS]: EAttrTypeL1.K_PHY_GET,
|
||
}
|
||
// 忽视列表
|
||
static skillTypeStrengthen: any = {
|
||
[EMagicType.CHAOS]: EAttrTypeL1.HK_CONFUSION, // 忽视抗混乱
|
||
[EMagicType.TOXIN]: EAttrTypeL1.HK_POISON,
|
||
[EMagicType.SLEEP]: EAttrTypeL1.HK_SLEEP,
|
||
[EMagicType.SEAL]: EAttrTypeL1.HK_SEAL,
|
||
[EMagicType.WIND]: EAttrTypeL1.HK_WIND,
|
||
[EMagicType.FIRE]: EAttrTypeL1.HK_FIRE,
|
||
[EMagicType.THUNDER]: EAttrTypeL1.HK_THUNDER,
|
||
[EMagicType.WATER]: EAttrTypeL1.HK_WATER,
|
||
[EMagicType.GHOST_FIRE]: EAttrTypeL1.HK_WILDFIRE,
|
||
[EMagicType.FORGET]: EAttrTypeL1.HK_FORGET,
|
||
[EMagicType.THREE_CORPSE]: EAttrTypeL1.HK_BLOODRETURN,
|
||
[EMagicType.FRIGHTEN]: EAttrTypeL1.HK_DETER,
|
||
[EMagicType.PHYSICS]: EAttrTypeL1.HK_PHY_GET,
|
||
}
|
||
|
||
static wuXingStrengthen: any = {
|
||
[EAttrTypeL1.GOLD]: EAttrTypeL1.WOOD, // 金
|
||
[EAttrTypeL1.WOOD]: EAttrTypeL1.SOIL, // 木
|
||
[EAttrTypeL1.WATER]: EAttrTypeL1.FIRE, // 水
|
||
[EAttrTypeL1.FIRE]: EAttrTypeL1.GOLD, // 火
|
||
[EAttrTypeL1.SOIL]: EAttrTypeL1.WATER, // 土
|
||
}
|
||
static WuXingKeStrengthen: any = {
|
||
[EAttrTypeL1.S_GOLD]: EAttrTypeL1.GOLD, //强力克金
|
||
[EAttrTypeL1.S_WOOD]: EAttrTypeL1.WOOD, //强力克木
|
||
[EAttrTypeL1.S_WATER]: EAttrTypeL1.WATER, //强力克水
|
||
[EAttrTypeL1.S_FIRE]: EAttrTypeL1.FIRE, //强力克火
|
||
[EAttrTypeL1.S_SOIL]: EAttrTypeL1.SOIL, //强力克土
|
||
}
|
||
|
||
// 战斗回合类型
|
||
static BtlActionType: any = {
|
||
Initiative: 1, // 主动
|
||
Passive: 2, // 被动
|
||
}
|
||
|
||
|
||
static buffType = {
|
||
None: 0, //无buff
|
||
Loop: 1, //循环伤害
|
||
Once: 2, // 一次计算
|
||
}
|
||
|
||
// 战斗回合内 响应
|
||
static btlRespone: any = {
|
||
NoThing: 0, // 无响应
|
||
Defense: 1, // 防御
|
||
Dodge: 2, // 闪避
|
||
CriticalHit: 3, // 暴击
|
||
Catched: 4, // 被抓
|
||
NoCatch: 5, // 不能被抓
|
||
CatchFail: 6, // 捕捉失败
|
||
Protect: 7,
|
||
BeProtected: 8, //被保护
|
||
SummonBack: 9,
|
||
Summon: 10,
|
||
SummonFaild: 11,
|
||
PoFang: 12,
|
||
}
|
||
|
||
static skillEffect = {
|
||
cnt: 1, // 人数
|
||
round: 0, // 回合
|
||
hurt: 0, //伤害
|
||
hurtpre: 0, //伤害百分比
|
||
hppre: 0, // 加血百分比
|
||
mppre: 0, // 加蓝百分比
|
||
smppre: 0, // 法力减少-
|
||
hit: 0, // 命中增加+
|
||
spd: 0, // 速度增加+
|
||
atk: 0, // 攻击增加+
|
||
kongzhi: 0, // 控制抗性+
|
||
fashang: 0, // 法伤抗性+
|
||
fangyu: 0, // 防御+
|
||
hp: 0, // 增加血量
|
||
maxhp:0,//最大生命值
|
||
aihp: 0, // 智能回血(用于吸血类技能)
|
||
skongzhi: 0, // 减少控制抗性
|
||
yinshen: 0, // 隐身
|
||
attrtype: 0, //五行
|
||
attrnum: 0, //五行数值
|
||
rate: 0, //几率
|
||
}
|
||
|
||
static wuXing = {
|
||
Gold: 1,
|
||
Wood: 2,
|
||
Water: 3,
|
||
Fire: 4,
|
||
Earth: 5,
|
||
}
|
||
|
||
static actType = {
|
||
Skill: 1,
|
||
Item: 2,
|
||
Summon: 3, // 召唤
|
||
RunAway: 4, // 逃跑
|
||
Protect: 5, // 保护
|
||
Catch: 6, //捕捉
|
||
SummonBack: 7, //召还
|
||
}
|
||
|
||
|
||
static ENpcKind = {
|
||
ERole: 1,
|
||
EThing: 2,
|
||
EBomb: 3
|
||
}
|
||
//人物转职后的等级表
|
||
static reliveLimit: any = {
|
||
[1]: {
|
||
level: 100,
|
||
tolevel: 80,
|
||
price: 100,
|
||
},
|
||
[2]: {
|
||
level: 120,
|
||
tolevel: 100,
|
||
price: 100,
|
||
},
|
||
[3]: {
|
||
level: 140,
|
||
tolevel: 120,
|
||
price: 100,
|
||
},
|
||
[4]: {
|
||
level: 180,
|
||
tolevel: 150,
|
||
price: 100,
|
||
},
|
||
}
|
||
|
||
static cantPKMaps = [
|
||
1011, // 长安
|
||
1201, // 监狱
|
||
1002, // 天宫
|
||
1000, // 皇宫
|
||
1206, // 金銮殿
|
||
1012, // 地府
|
||
1202, // 白骨洞
|
||
1203, // 斜月三星洞
|
||
1208, // 兜率宫
|
||
1013, // 兰若寺
|
||
1014, // 灵兽村
|
||
3002, // 帮派
|
||
4001, // 家
|
||
];
|
||
// 帮派聊天充值总额限制
|
||
static limitBangChatCharge = 30;
|
||
// 世界聊天等级限制
|
||
static limitWorldChatLevel = 80;
|
||
// 世界聊天充值总额限制
|
||
static limitWorldChatCharge = 30;
|
||
// 世界铃铛充值总额限制
|
||
static bellMsg = 500;
|
||
static limitPetNum = 100;
|
||
static limitMail = 20;
|
||
// 创建帮会充值金额总额限制
|
||
static limitGreateBangChargeCount = 1000;
|
||
// 创建帮会个数限值
|
||
static limitChildBangCount = 9999;
|
||
// 创建帮会仙玉费用
|
||
static ChildBangCost = 300000;
|
||
|
||
static limitBroadcastList: string[] = [
|
||
'qq',
|
||
'QQ',
|
||
'微信',
|
||
'君羊',
|
||
'君.羊',
|
||
'龙马服',
|
||
'残端',
|
||
'私服',
|
||
'无线',
|
||
'裙',
|
||
'号',
|
||
]
|
||
|
||
static addLimitWord(text: string) {
|
||
if (text && text.length > 0) {
|
||
if (this.limitBroadcastList.indexOf(text) == -1)
|
||
this.limitBroadcastList.push(text);
|
||
}
|
||
}
|
||
|
||
// 开启背包消耗金额
|
||
static bagPrice = 500;
|
||
// 背包默认空间
|
||
static limitBagKindNum = 100;
|
||
// 仓库默认空间
|
||
static limitLockerKindNum = 100;
|
||
// 宠物锁技能消耗金额
|
||
static petLockSkillJade = 1000;
|
||
|
||
static shenBingBroke: number[] = [
|
||
5000,
|
||
2500,
|
||
1000,
|
||
500,
|
||
]
|
||
|
||
static equipPos: any = {
|
||
UNKNOW: 1,
|
||
USE: 2,
|
||
BAG: 3,
|
||
BANK: 4,
|
||
}
|
||
|
||
// 强杀等级限制
|
||
static PKLevelLimit = 90;
|
||
|
||
static petGrade: any = {
|
||
Normal: 0,
|
||
High: 1,
|
||
Special: 2,
|
||
Shen: 3,
|
||
SSR: 4,
|
||
}
|
||
|
||
static goldKind: any = {
|
||
Money: 0, // 银两
|
||
Jade: 1, // 仙玉
|
||
BindJade: 2, // 绑定仙玉
|
||
SLDH_Score: 3, // 水路大会积分
|
||
Goods: 4, // 道具
|
||
arena_Score: 5,//竞技场积分
|
||
bang_Score: 6,//帮贡
|
||
shi_Score: 7,//师贡
|
||
di_Score: 8,//地宫积分
|
||
xiu_Score: 9,//除魔积分
|
||
guo_Score: 10,//郭氏积分
|
||
}
|
||
|
||
static titleType: any = {
|
||
IMGTitle: 0, //图片类称谓
|
||
CommonTitle: 1, //普通文字称谓,如帮派类称谓
|
||
BroTitle: 2, //结拜类称谓
|
||
CoupleTitle: 3, //夫妻类称谓
|
||
}
|
||
|
||
static titleBangType: any = {
|
||
NoTitle: 0,
|
||
ShuiLuZhanShen: 86,
|
||
Shancaitongzi: 43,
|
||
Couple: 200,
|
||
Brother: 201,
|
||
BangZhu: 227, // 帮主
|
||
FuBangZhu: 226, // 副帮主
|
||
ZuoHuFa: 225, // 左护法
|
||
YouHuFa: 224, // 右护法
|
||
ZhangLao: 223, // 长老
|
||
TangZhu: 222, // 堂主
|
||
BangZhong: 221, // 帮众
|
||
}
|
||
|
||
static bangPost = {
|
||
Unknow: 0, // 未知
|
||
BangZhu: 1, // 帮主
|
||
FuBangZhu: 2, // 副帮主
|
||
ZuoHuFa: 3, // 左护法
|
||
YouHuFa: 4, // 右护法
|
||
ZhangLao: 5, // 长老
|
||
TangZhu: 6, // 堂主
|
||
BangZhong: 7, // 帮众
|
||
}
|
||
|
||
static relationType = {
|
||
Brother: 0, // 结拜
|
||
Couple: 1, // 结婚
|
||
}
|
||
|
||
static relationTypeMembersCount = {
|
||
[GameUtil.relationType.Brother]: 5,
|
||
[GameUtil.relationType.Couple]: 2,
|
||
}
|
||
|
||
static lingHouMinMoney = 2000;
|
||
static LingHouRetMoney = 10000;
|
||
static brotherMoney = 1000000;
|
||
static schemeUseMoney = 10000000;
|
||
static prop_data: any = {};
|
||
static catch_data: any = {};
|
||
|
||
static starList = [
|
||
10051,
|
||
10052,
|
||
10053,
|
||
10054,
|
||
10055,
|
||
10056,
|
||
10057,
|
||
10058,
|
||
10059,
|
||
10060,
|
||
10061,
|
||
10062,
|
||
];
|
||
|
||
static limitWordList: string[] = [
|
||
'系统',
|
||
'官方',
|
||
'测试',
|
||
'gm',
|
||
'Gm',
|
||
'GM',
|
||
'管理',
|
||
'内测',
|
||
'内部',
|
||
'技术',
|
||
'公告',
|
||
'公测',
|
||
'垃圾',
|
||
'毛泽东',
|
||
'周恩来',
|
||
'刘少奇',
|
||
'习近平',
|
||
'李克强',
|
||
'朱德',
|
||
'丁磊',
|
||
'你妈',
|
||
'买号',
|
||
'卖号',
|
||
'收号',
|
||
'出号',
|
||
'号',
|
||
'共产党'
|
||
]
|
||
|
||
static numchar: string[] = [
|
||
'q', 'Q', 'O', '0', 'X', '微','员',
|
||
'一', '二', '三', '四', '五', '六', '七', '八', '九', '零', '〇',
|
||
'①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨',
|
||
'⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹',
|
||
'₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉',
|
||
'⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼',
|
||
'⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐',
|
||
'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ',
|
||
'❶', '❷', '❸', '❹', '❺', '❻', '❼', '❽', '❾',
|
||
'➊', '➋', '➌', '➍', '➎', '➏', '➐', '➑', '➒', '➓',
|
||
'⓵', '⓶', '⓷', '⓸', '⓹', '⓺', '⓻', '⓼', '⓽','⑨','①','②','⑤','③','④','⑧',
|
||
'㈠', '㈡', '㈢', '㈣', '㈤', '㈥', '㈦', '㈧', '㈨',
|
||
'壹', '贰', '叁', '叄', '肆', '伍', '陆', '柒', '捌', '扒', '玖',
|
||
'伞', '溜', '君', '羊', '久', '巴',
|
||
'玉', '仙', '裙', '群', '西', '游','峮',
|
||
'1', '2', '3', '4', '5', '6', '7', '8', '9','无限钰','亲民服','新区峮','➀','➁','➂','➄','➃','➅','➆'
|
||
]
|
||
|
||
static fdump(obj: any) {
|
||
let t = 0;
|
||
let repeat = (str: any, n: any) => {
|
||
return new Array(n).join(str);
|
||
}
|
||
let adump = (object: any) => {
|
||
t++;
|
||
if (object && typeof object === "object") {
|
||
for (const key in object) {
|
||
if (object.hasOwnProperty(key)) {
|
||
const value = object[key];
|
||
if (value && typeof value === "object") {
|
||
let isa = Array.isArray(value);
|
||
console.log(repeat('\t', t), key + ':' + (isa ? '[' : '{'));
|
||
adump(value);
|
||
t--;
|
||
console.log(repeat('\t', t), isa ? ']' : '}');
|
||
} else {
|
||
console.log(repeat('\t', t), key + ':' + value);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
console.log(repeat('\t', t), object);
|
||
}
|
||
}
|
||
adump(obj);
|
||
}
|
||
|
||
static dump(...args: any[]) {
|
||
for (const arg of args) {
|
||
this.fdump(arg);
|
||
}
|
||
}
|
||
|
||
static seed_index: number = 10000;
|
||
static buff_index: number = 10000;
|
||
|
||
static getAutoAddId(): number {
|
||
GameUtil.seed_index++;
|
||
return GameUtil.seed_index;
|
||
}
|
||
|
||
static getAutoBuffId(): number {
|
||
GameUtil.buff_index++;
|
||
return GameUtil.buff_index;
|
||
}
|
||
|
||
static random(min: number, max: number): number {
|
||
return Math.floor(Math.random() * (max - min + 1) + min);
|
||
}
|
||
|
||
static getFlag(nNum: number, nIndex: number): number {
|
||
if (nIndex < 0 || nIndex > 31)
|
||
return 0;
|
||
let nRet = (nNum >> nIndex) & 1;
|
||
return nRet;
|
||
}
|
||
|
||
static setFlag(nNum: any, nIndex: number, bValue: number): number {
|
||
if (nIndex < 0 || nIndex > 31)
|
||
return null;
|
||
if (bValue != 0 && bValue != 1)
|
||
return null;
|
||
|
||
let bFlag = GameUtil.getFlag(nNum, nIndex);
|
||
if (bFlag > bValue) {
|
||
nNum -= (1 << nIndex);
|
||
}
|
||
if (bFlag < bValue) {
|
||
nNum += (1 << nIndex);
|
||
}
|
||
return nNum;
|
||
}
|
||
|
||
|
||
static EPlayerFlag = {
|
||
EBanSpeak: 1,
|
||
}
|
||
|
||
static checkLimitWord = function (msg: any): boolean {
|
||
for (let k = 0; k < msg.length; k++) {
|
||
let msgchar: any = msg[k];
|
||
if (msgchar == "["){
|
||
return true;
|
||
}
|
||
if (GameUtil.numchar.indexOf(msgchar) != -1) {
|
||
return false;
|
||
}
|
||
}
|
||
for (let i = 0; i < GameUtil.limitBroadcastList.length; i++) {
|
||
const fword = GameUtil.limitBroadcastList[i];
|
||
let exp = "[" + fword.split('').join("].*[") + "]";
|
||
let reg = new RegExp(exp, 'im');
|
||
if (reg.test(msg)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
static serverState: any = {
|
||
lower: 1, // 流畅
|
||
high: 2, // 拥堵
|
||
close: 3, // 关闭
|
||
}
|
||
|
||
static MonkeyPos: any = [
|
||
// 1007 大唐边境
|
||
{mapid: 1007, x: 133, y: 27},
|
||
{mapid: 1007, x: 21, y: 111},
|
||
{mapid: 1007, x: 76, y: 97},
|
||
{mapid: 1007, x: 5, y: 65},
|
||
{mapid: 1007, x: 165, y: 95},
|
||
// 1011 长安
|
||
{mapid: 1011, x: 256, y: 51},
|
||
{mapid: 1011, x: 71, y: 5},
|
||
{mapid: 1011, x: 253, y: 74},
|
||
{mapid: 1011, x: 176, y: 130},
|
||
{mapid: 1011, x: 73, y: 138},
|
||
{mapid: 1011, x: 106, y: 125},
|
||
{mapid: 1011, x: 7, y: 67},
|
||
{mapid: 1011, x: 32, y: 69},
|
||
{mapid: 1011, x: 2, y: 107},
|
||
{mapid: 1011, x: 28, y: 138},
|
||
// 1004 大唐境内
|
||
{mapid: 1004, x: 137, y: 90},
|
||
{mapid: 1004, x: 141, y: 22},
|
||
{mapid: 1004, x: 88, y: 6},
|
||
{mapid: 1004, x: 4, y: 74},
|
||
// 1010 东海渔村
|
||
{mapid: 1010, x: 115, y: 63},
|
||
{mapid: 1010, x: 52, y: 45},
|
||
{mapid: 1010, x: 113, y: 97},
|
||
{mapid: 1010, x: 75, y: 108},
|
||
{mapid: 1010, x: 24, y: 103},
|
||
{mapid: 1010, x: 94, y: 133},
|
||
// 1006 万寿山
|
||
{mapid: 1006, x: 80, y: 149},
|
||
{mapid: 1006, x: 84, y: 149},
|
||
{mapid: 1006, x: 88, y: 149},
|
||
{mapid: 1006, x: 92, y: 149},
|
||
{mapid: 1006, x: 96, y: 148},
|
||
{mapid: 1006, x: 96, y: 144},
|
||
{mapid: 1006, x: 91, y: 144},
|
||
{mapid: 1006, x: 84, y: 144},
|
||
{mapid: 1006, x: 78, y: 144},
|
||
{mapid: 1006, x: 66, y: 139},
|
||
{mapid: 1006, x: 72, y: 139},
|
||
{mapid: 1006, x: 76, y: 139},
|
||
{mapid: 1006, x: 82, y: 139},
|
||
{mapid: 1006, x: 66, y: 134},
|
||
{mapid: 1006, x: 75, y: 134},
|
||
{mapid: 1006, x: 86, y: 134},
|
||
{mapid: 1006, x: 92, y: 134},
|
||
{mapid: 1006, x: 15, y: 131},
|
||
{mapid: 1006, x: 9, y: 35},
|
||
// 1015 蟠桃园
|
||
{mapid: 1015, x: 41, y: 12},
|
||
{mapid: 1015, x: 5, y: 19},
|
||
{mapid: 1015, x: 76, y: 56},
|
||
{mapid: 1015, x: 102, y: 66},
|
||
{mapid: 1015, x: 43, y: 67},
|
||
{mapid: 1015, x: 9, y: 125},
|
||
{mapid: 1015, x: 4, y: 48},
|
||
// 1016 御马监
|
||
{mapid: 1016, x: 9, y: 16},
|
||
{mapid: 1016, x: 137, y: 40},
|
||
{mapid: 1016, x: 141, y: 65},
|
||
{mapid: 1016, x: 78, y: 90},
|
||
{mapid: 1016, x: 86, y: 34},
|
||
// 1014 灵兽村
|
||
{mapid: 1014, x: 8, y: 97},
|
||
{mapid: 1014, x: 2, y: 60},
|
||
{mapid: 1014, x: 148, y: 16},
|
||
{mapid: 1014, x: 140, y: 6},
|
||
{mapid: 1014, x: 88, y: 99},
|
||
// 1017 傲来国
|
||
{mapid: 1017, x: 8, y: 28},
|
||
{mapid: 1017, x: 8, y: 77},
|
||
{mapid: 1017, x: 10, y: 75},
|
||
{mapid: 1017, x: 1, y: 72},
|
||
{mapid: 1017, x: 34, y: 112},
|
||
{mapid: 1017, x: 32, y: 97},
|
||
{mapid: 1017, x: 100, y: 80},
|
||
{mapid: 1017, x: 56, y: 63},
|
||
{mapid: 1017, x: 68, y: 33},
|
||
{mapid: 1017, x: 9, y: 8},
|
||
{mapid: 1017, x: 27, y: 6},
|
||
{mapid: 1017, x: 43, y: 6},
|
||
{mapid: 1017, x: 59, y: 6},
|
||
{mapid: 1017, x: 113, y: 6},
|
||
{mapid: 1017, x: 142, y: 20},
|
||
{mapid: 1017, x: 97, y: 37},
|
||
{mapid: 1017, x: 137, y: 54},
|
||
// 1008 白骨山
|
||
{mapid: 1008, x: 105, y: 64},
|
||
{mapid: 1008, x: 10, y: 40},
|
||
{mapid: 1008, x: 48, y: 13},
|
||
// 1005 方寸山
|
||
{mapid: 1005, x: 14, y: 20},
|
||
{mapid: 1005, x: 49, y: 55},
|
||
{mapid: 1005, x: 59, y: 70},
|
||
// 1019 平顶山
|
||
{mapid: 1019, x: 182, y: 7},
|
||
{mapid: 1019, x: 121, y: 2},
|
||
{mapid: 1019, x: 147, y: 19},
|
||
{mapid: 1019, x: 178, y: 9},
|
||
{mapid: 1019, x: 15, y: 82},
|
||
{mapid: 1019, x: 2, y: 62},
|
||
{mapid: 1019, x: 2, y: 29},
|
||
{mapid: 1019, x: 29, y: 3},
|
||
{mapid: 1019, x: 47, y: 124},
|
||
{mapid: 1019, x: 191, y: 97},
|
||
{mapid: 1019, x: 191, y: 40},
|
||
{mapid: 1019, x: 175, y: 58},
|
||
{mapid: 1019, x: 177, y: 77},
|
||
{mapid: 1019, x: 146, y: 64},
|
||
// 1003 北俱芦洲
|
||
{mapid: 1003, x: 23, y: 69},
|
||
{mapid: 1003, x: 51, y: 74},
|
||
{mapid: 1003, x: 84, y: 6},
|
||
{mapid: 1003, x: 135, y: 22},
|
||
{mapid: 1003, x: 139, y: 5},
|
||
{mapid: 1003, x: 139, y: 45},
|
||
{mapid: 1003, x: 139, y: 62},
|
||
{mapid: 1003, x: 138, y: 80},
|
||
];
|
||
|
||
static require_ex(file: string): any {
|
||
if (GameUtil.prop_data[file]) {
|
||
return GameUtil.prop_data[file];
|
||
}
|
||
let data = GameUtil.reloadfile(file);
|
||
if (data == null) {
|
||
SKLogger.warn(`加载配置文件错误:${file}`);
|
||
} else {
|
||
GameUtil.prop_data[file] = data;
|
||
}
|
||
return data;
|
||
}
|
||
|
||
// 重新加载配置文件
|
||
static reloadPropData() {
|
||
let errorlist = [];
|
||
for (let filename in GameUtil.prop_data) {
|
||
let fieldata = GameUtil.reloadfile(filename);
|
||
if (fieldata) {
|
||
if (GameUtil.prop_data[filename]) {
|
||
let data = GameUtil.prop_data[filename];
|
||
for (const datakey in data) {
|
||
if (data.hasOwnProperty(datakey)) {
|
||
data[datakey] = fieldata[datakey];
|
||
}
|
||
}
|
||
} else {
|
||
GameUtil.prop_data[filename] = fieldata;
|
||
}
|
||
} else {
|
||
errorlist.push(filename);
|
||
}
|
||
}
|
||
SKLogger.info('热更新完成');
|
||
if (errorlist.length > 0) {
|
||
for (let filename of errorlist) {
|
||
SKLogger.warn(`文件加载错误:[${filename}]`);
|
||
}
|
||
}
|
||
return errorlist;
|
||
}
|
||
|
||
static reloadfile(filename: any): any {
|
||
let full_path = path.join(__dirname, filename);
|
||
let old = require.cache[require.resolve(full_path)];
|
||
if (old != null || old != undefined) {
|
||
GameUtil.catch_data[full_path] = old;
|
||
}
|
||
require.cache[require.resolve(full_path)] = undefined;
|
||
|
||
let ret_data = null;
|
||
try {
|
||
let data = require(require.resolve(full_path));
|
||
if (data) {
|
||
ret_data = data;
|
||
} else {
|
||
require.cache[full_path] = GameUtil.catch_data[full_path];
|
||
ret_data = null;
|
||
}
|
||
} catch (error) {
|
||
console.error('load json ERROR, filename:' + full_path);
|
||
console.error(error.message);
|
||
require.cache[full_path] = GameUtil.catch_data[full_path];
|
||
ret_data = null;
|
||
}
|
||
delete GameUtil.catch_data[full_path];
|
||
return ret_data;
|
||
}
|
||
|
||
static serviceType = {
|
||
Gate: 1,
|
||
Game: 2,
|
||
IM: 3,
|
||
}
|
||
|
||
static getPartnerJson(pPartner: any): string {
|
||
if (null == pPartner) {
|
||
return '{}';
|
||
}
|
||
let stLevelInfo = PartnerConfigMgr.shared.GetPower(pPartner.id, pPartner.relive, pPartner.level);
|
||
if (null == stLevelInfo)
|
||
return '{}';
|
||
let stData: any = {
|
||
id: pPartner.id,
|
||
level: pPartner.level,
|
||
exp: pPartner.exp,
|
||
resid: pPartner.resid,
|
||
name: pPartner.name,
|
||
race: pPartner.race,
|
||
dingwei: pPartner.dingwei,
|
||
relive: pPartner.relive,
|
||
mapZiZhi: pPartner.mapZiZhi,
|
||
skill_list: pPartner.skill_list,
|
||
livingtype: pPartner.living_type
|
||
};
|
||
for (var it2 in stLevelInfo.Attribute) {
|
||
stData[it2] = stLevelInfo.Attribute[it2];
|
||
}
|
||
let strJson = SKDataUtil.toJson(stData, "{}");
|
||
return strJson;
|
||
}
|
||
|
||
static getMapLen(mapTmp: any): number {
|
||
let nCnt = 0;
|
||
for (const it in mapTmp)
|
||
nCnt++;
|
||
return nCnt;
|
||
}
|
||
|
||
static numToString(nNum: number, nLen: number): string {
|
||
return (Array(nLen).join('0') + nNum).slice(-nLen);
|
||
}
|
||
|
||
static getTime() {
|
||
let nTime = Math.floor(Date.now() / 1000);
|
||
let nLocalTime = nTime + 28800;
|
||
return nLocalTime;
|
||
}
|
||
|
||
static changeNumToRange(fData: number, fMin: number, fMax: number): number {
|
||
fData = Math.max(fData, fMin);
|
||
fData = Math.min(fData, fMax);
|
||
return fData;
|
||
}
|
||
|
||
static isVectorEqual(vec1: any, vec2: any): boolean {
|
||
if (vec1.length != vec2.length)
|
||
return false;
|
||
|
||
for (var it in vec1) {
|
||
if (vec1[it] != vec2[it])
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
static isDataInVecter(stData: any, vecData: any): boolean {
|
||
for (let it in vecData) {
|
||
if (stData == vecData[it])
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
static getAttribute(stData: any, strKey: any, stDefault: any): any {
|
||
if (stData.hasOwnProperty(strKey) == false)
|
||
return stDefault;
|
||
|
||
return stData[strKey];
|
||
}
|
||
|
||
static getDistance(stPosA: any, stPosB: any): number {
|
||
let nXDis = Math.abs(stPosA.x - stPosB.x);
|
||
let nYDis = Math.abs(stPosA.y - stPosB.y);
|
||
let nDis = Math.pow(nXDis * nXDis + nYDis * nYDis, 0.5);
|
||
return nDis;
|
||
}
|
||
|
||
static getDefault(value: any, valid?: any): any {
|
||
if (typeof (value) == "undefined") {
|
||
return valid;
|
||
}
|
||
return value;
|
||
}
|
||
|
||
static atribKey_IntToString(nKey: any): any {
|
||
for (let it in GameUtil.attrEquipTypeStr) {
|
||
if (GameUtil.attrEquipTypeStr[it] == nKey)
|
||
return it;
|
||
}
|
||
return '';
|
||
}
|
||
|
||
static getMapDataByIndex(mapData: any, nIndex: number): any {
|
||
if (nIndex < 0 || nIndex >= this.getMapLen(mapData))
|
||
return null;
|
||
|
||
let nCnt = -1;
|
||
for (let it in mapData) {
|
||
nCnt++;
|
||
if (nCnt == nIndex)
|
||
return mapData[it];
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
static givePlayerPrize(player: Player, strItem: string, count: number, is: boolean = true) {
|
||
if (player == null)
|
||
return;
|
||
|
||
if (strItem == 'exp') {
|
||
player.addExp(count);
|
||
} else if (strItem == 'petexp') {
|
||
if (player.curPet) {
|
||
player.curPet.addExp(count);
|
||
}
|
||
} else if (strItem == 'money') {
|
||
player.addMoney(0, count, '高级藏宝图');
|
||
} else {
|
||
player.addItem(parseInt(strItem), count, is, '高级藏宝图');
|
||
}
|
||
}
|
||
|
||
static zhenbukuiMap: any = [
|
||
// 1007 大唐边境
|
||
//{ mapid: 1016, x: 75, y: 49 }, //测试用地点,在御马监小马仙附近
|
||
{mapid: 1007, x: 148, y: 44},
|
||
{mapid: 1007, x: 100, y: 24},
|
||
{mapid: 1007, x: 109, y: 5},
|
||
{mapid: 1007, x: 44, y: 14},
|
||
{mapid: 1007, x: 84, y: 104},
|
||
{mapid: 1007, x: 29, y: 83},
|
||
// 1011 长安
|
||
{mapid: 1011, x: 49, y: 36},
|
||
{mapid: 1011, x: 143, y: 66},
|
||
{mapid: 1011, x: 122, y: 34},
|
||
{mapid: 1011, x: 223, y: 34},
|
||
{mapid: 1011, x: 239, y: 113},
|
||
{mapid: 1011, x: 143, y: 84},
|
||
{mapid: 1011, x: 40, y: 9},
|
||
// 1004 大唐境内
|
||
{mapid: 1004, x: 124, y: 74},
|
||
{mapid: 1004, x: 120, y: 49},
|
||
{mapid: 1004, x: 119, y: 37},
|
||
{mapid: 1004, x: 38, y: 47},
|
||
{mapid: 1004, x: 70, y: 14},
|
||
// 1010 东海渔村
|
||
{mapid: 1010, x: 129, y: 47},
|
||
{mapid: 1010, x: 141, y: 34},
|
||
{mapid: 1010, x: 60, y: 22},
|
||
{mapid: 1010, x: 24, y: 9},
|
||
{mapid: 1010, x: 41, y: 53},
|
||
{mapid: 1010, x: 82, y: 89},
|
||
{mapid: 1010, x: 42, y: 103},
|
||
{mapid: 1010, x: 114, y: 114},
|
||
// 1006 万寿山
|
||
{mapid: 1006, x: 56, y: 73},
|
||
{mapid: 1006, x: 98, y: 48},
|
||
{mapid: 1006, x: 93, y: 8},
|
||
{mapid: 1006, x: 18, y: 30},
|
||
{mapid: 1006, x: 109, y: 94},
|
||
{mapid: 1006, x: 74, y: 136},
|
||
// 1015 蟠桃园
|
||
{mapid: 1015, x: 70, y: 30},
|
||
{mapid: 1015, x: 37, y: 26},
|
||
{mapid: 1015, x: 14, y: 57},
|
||
{mapid: 1015, x: 39, y: 76},
|
||
{mapid: 1015, x: 53, y: 103},
|
||
{mapid: 1015, x: 14, y: 120},
|
||
{mapid: 1015, x: 90, y: 58},
|
||
// 1016 御马监
|
||
{mapid: 1016, x: 34, y: 63},
|
||
{mapid: 1016, x: 112, y: 63},
|
||
{mapid: 1016, x: 96, y: 23},
|
||
{mapid: 1016, x: 68, y: 23},
|
||
{mapid: 1016, x: 37, y: 26},
|
||
// 1014 灵兽村
|
||
{mapid: 1014, x: 50, y: 36},
|
||
{mapid: 1014, x: 14, y: 55},
|
||
{mapid: 1014, x: 64, y: 58},
|
||
{mapid: 1014, x: 113, y: 64},
|
||
{mapid: 1014, x: 117, y: 42},
|
||
{mapid: 1014, x: 138, y: 12},
|
||
// 1017 傲来国
|
||
{mapid: 1017, x: 57, y: 11},
|
||
{mapid: 1017, x: 20, y: 10},
|
||
{mapid: 1017, x: 33, y: 42},
|
||
{mapid: 1017, x: 56, y: 64},
|
||
{mapid: 1017, x: 80, y: 71},
|
||
{mapid: 1017, x: 93, y: 90},
|
||
{mapid: 1017, x: 44, y: 103},
|
||
{mapid: 1017, x: 12, y: 74},
|
||
{mapid: 1017, x: 98, y: 29},
|
||
{mapid: 1017, x: 133, y: 51},
|
||
// 1008 白骨山
|
||
{mapid: 1008, x: 80, y: 13},
|
||
{mapid: 1008, x: 79, y: 52},
|
||
{mapid: 1008, x: 57, y: 70},
|
||
{mapid: 1008, x: 36, y: 70},
|
||
{mapid: 1008, x: 30, y: 10},
|
||
// 1005 方寸山
|
||
{mapid: 1005, x: 34, y: 22},
|
||
{mapid: 1005, x: 24, y: 65},
|
||
{mapid: 1005, x: 48, y: 48},
|
||
{mapid: 1005, x: 68, y: 78},
|
||
{mapid: 1005, x: 94, y: 89},
|
||
{mapid: 1005, x: 101, y: 28},
|
||
// 1019 平顶山
|
||
{mapid: 1019, x: 154, y: 91},
|
||
{mapid: 1019, x: 112, y: 104},
|
||
{mapid: 1019, x: 101, y: 60},
|
||
{mapid: 1019, x: 78, y: 39},
|
||
{mapid: 1019, x: 28, y: 22},
|
||
{mapid: 1019, x: 32, y: 55},
|
||
{mapid: 1019, x: 110, y: 17},
|
||
// 1003 北俱芦洲
|
||
{mapid: 1003, x: 24, y: 37},
|
||
{mapid: 1003, x: 61, y: 42},
|
||
{mapid: 1003, x: 102, y: 48},
|
||
{mapid: 1003, x: 120, y: 17},
|
||
{mapid: 1003, x: 87, y: 23},
|
||
];
|
||
|
||
static attrTypeL1Name: any = {
|
||
// 抗控制
|
||
[EAttrTypeL1.K_CONFUSION]: '抗混乱',
|
||
[EAttrTypeL1.K_SEAL]: '抗封印',
|
||
[EAttrTypeL1.K_SLEEP]: '抗昏睡',
|
||
[EAttrTypeL1.K_FORGET]: '抗遗忘',
|
||
// 法术抗性
|
||
[EAttrTypeL1.K_WIND]: '抗风',
|
||
[EAttrTypeL1.K_THUNDER]: '抗雷',
|
||
[EAttrTypeL1.K_WATER]: '抗水',
|
||
[EAttrTypeL1.K_FIRE]: '抗火',
|
||
[EAttrTypeL1.K_WILDFIRE]: '抗鬼火',
|
||
[EAttrTypeL1.K_BLOODRETURN]: '抗三尸',
|
||
[EAttrTypeL1.K_POISON]: '抗毒',
|
||
[EAttrTypeL1.K_DETER]: '抗震慑',
|
||
// 忽视抗性(强法)
|
||
[EAttrTypeL1.HK_SEAL]: '忽视抗封印',
|
||
[EAttrTypeL1.HK_CONFUSION]: '忽视抗混乱',
|
||
[EAttrTypeL1.HK_SLEEP]: '忽视抗昏睡',
|
||
[EAttrTypeL1.HK_FORGET]: '忽视抗遗忘',
|
||
[EAttrTypeL1.HK_WIND]: '忽视抗风',
|
||
[EAttrTypeL1.HK_THUNDER]: '忽视抗雷',
|
||
[EAttrTypeL1.HK_WATER]: '忽视抗水',
|
||
[EAttrTypeL1.HK_FIRE]: '忽视抗火',
|
||
[EAttrTypeL1.HK_WILDFIRE]: '忽视抗鬼火',
|
||
[EAttrTypeL1.HK_BLOODRETURN]: '忽视抗三尸',
|
||
[EAttrTypeL1.HK_POISON]: '忽视抗毒',
|
||
[EAttrTypeL1.HK_DETER]: '忽视抗震慑',
|
||
[EAttrTypeL1.K_PHY_GET]: '抗物理',
|
||
[EAttrTypeL1.HK_PHY_GET]: '忽视抗物理',
|
||
// 物理属性
|
||
[EAttrTypeL1.PHY_GET]: '物理吸收',
|
||
[EAttrTypeL1.PHY_BREAK]: '破防程度',
|
||
[EAttrTypeL1.PHY_BREAK_PROB]: '破防率',
|
||
[EAttrTypeL1.PHY_HIT]: '命中率',
|
||
[EAttrTypeL1.PHY_DODGE]: '闪躲率',
|
||
[EAttrTypeL1.PHY_COMBO]: '连击',
|
||
[EAttrTypeL1.PHY_COMBO_PROB]: '连击率',
|
||
[EAttrTypeL1.PHY_DEADLY]: '狂暴',
|
||
// 法术也会反震
|
||
[EAttrTypeL1.PHY_REBOUND]: '反震程度',
|
||
[EAttrTypeL1.PHY_REBOUND_PROB]: '反震率',
|
||
[EAttrTypeL1.DEFEND_ADD]: '加强防御',
|
||
[EAttrTypeL1.SPD_ADD]: '加速',
|
||
[EAttrTypeL1.ATK_ADD]: '加攻',
|
||
[EAttrTypeL1.HP_ADD]: '加血',
|
||
[EAttrTypeL1.MP_ADD]: '加法',
|
||
[EAttrTypeL1.CHARM_ADD]: '加强魅惑',
|
||
[EAttrTypeL1.HP_MAX]: '增加气血上限',
|
||
[EAttrTypeL1.MP_MAX]: '增加法力上限',
|
||
[EAttrTypeL1.ATK]: '攻击',
|
||
[EAttrTypeL1.SPD]: '速度',
|
||
[EAttrTypeL1.HP]: '气血',
|
||
[EAttrTypeL1.MP]: '法力',
|
||
[EAttrTypeL1.CURE_EHAN]: '加强治愈',
|
||
[EAttrTypeL1.SWEEP_EHAN]: '加强横扫',
|
||
[EAttrTypeL1.BREAK_EHAN]: '加强破甲',
|
||
[EAttrTypeL1.THUD_EHAN]: '加强震击',
|
||
|
||
[EAttrTypeL1.HP_PERC]: '气血百分比',
|
||
[EAttrTypeL1.MP_PERC]: '法力百分比',
|
||
[EAttrTypeL1.ATK_PERC]: '攻击百分比',
|
||
[EAttrTypeL1.SPD_PERC]: '速度百分比',
|
||
|
||
[EAttrTypeL1.KB_WATER]: '水系狂暴率',
|
||
[EAttrTypeL1.KB_THUNDER]: '雷系狂暴率',
|
||
[EAttrTypeL1.KB_FIRE]: '火系狂暴率',
|
||
[EAttrTypeL1.KB_WIND]: '风系狂暴率',
|
||
[EAttrTypeL1.KB_BLOODRETURN]: '三尸狂暴率',
|
||
[EAttrTypeL1.KB_WILDFIRE]: '鬼火狂暴率',
|
||
[EAttrTypeL1.Q_WATER]: '水狂暴',
|
||
[EAttrTypeL1.Q_THUNDER]: '雷狂暴',
|
||
[EAttrTypeL1.Q_FIRE]: '火狂暴',
|
||
[EAttrTypeL1.Q_WIND]: '风狂暴',
|
||
[EAttrTypeL1.Q_BLOODRETURN]: '三尸狂暴',
|
||
[EAttrTypeL1.Q_WILDFIRE]: '鬼火狂暴',
|
||
// 五行(百分比值)(只有宝宝出生有五行,人使用道具改变五行值,法术改变五行值)
|
||
[EAttrTypeL1.GOLD]: '金',
|
||
[EAttrTypeL1.WOOD]: '木',
|
||
[EAttrTypeL1.WATER]: '水',
|
||
[EAttrTypeL1.FIRE]: '火',
|
||
[EAttrTypeL1.SOIL]: '土',
|
||
// 强力克五行
|
||
[EAttrTypeL1.S_GOLD]: '强力克金',
|
||
[EAttrTypeL1.S_WOOD]: '强力克木',
|
||
[EAttrTypeL1.S_WATER]: '强力克水',
|
||
[EAttrTypeL1.S_FIRE]: '强力克火',
|
||
[EAttrTypeL1.S_SOIL]: '强力克土',
|
||
|
||
[EAttrTypeL1.SLEEP_EHAN]: '加强昏睡',
|
||
[EAttrTypeL1.DETER_EHAN]: '加强震慑',
|
||
[EAttrTypeL1.WILDFIRE]: '加强鬼火',
|
||
[EAttrTypeL1.TOXIN_EHAN]: '加强毒',
|
||
[EAttrTypeL1.SPD_ADD_EHAN]: '加强加速',
|
||
[EAttrTypeL1.DEFEND_ADD_EHAN]: '加强加防',
|
||
[EAttrTypeL1.BLOODRETURN_EHAN]: '加强三尸',
|
||
[EAttrTypeL1.ICE_EHAN]: '加强冰',
|
||
[EAttrTypeL1.SEAL_EHAN]: '加强封印',
|
||
[EAttrTypeL1.CHAOS_EHAN]: '加强混乱',
|
||
[EAttrTypeL1.WIND_EHAN]: '加强风',
|
||
[EAttrTypeL1.FIRE_EHAN]: '加强火',
|
||
[EAttrTypeL1.WATER_EHAN]: '加强水',
|
||
[EAttrTypeL1.THUNDER_EHAN]: '加强雷',
|
||
[EAttrTypeL1.FORGET_EHAN]: '加强遗忘',
|
||
|
||
[EAttrTypeL1.BONE]: '根骨',
|
||
[EAttrTypeL1.SPIRIT]: '灵性',
|
||
[EAttrTypeL1.STRENGTH]: '力量',
|
||
[EAttrTypeL1.DEXTERITY]: '敏捷',
|
||
};
|
||
// 属性2名称
|
||
static attrTypeL2Name: any = {
|
||
[EAttrTypeL2.GENGU]: '根骨',
|
||
[EAttrTypeL2.LINGXING]: '灵性',
|
||
[EAttrTypeL2.LILIANG]: '力量',
|
||
[EAttrTypeL2.MINJIE]: '敏捷',
|
||
}
|
||
|
||
static launch() {
|
||
// SKRedisUtil.launch();
|
||
this.snowFlake53 = new SnowFlack53(BigInt(this.serverId - 1000 + 1));
|
||
this.game_conf = SKDataUtil.readJson("../../conf/json/game_conf.json");
|
||
SKLogger.isDebug = GameConf.isDebug;
|
||
SKLogger.info(`[${GameConf.channel}:${SKLogger.isDebug ? `调试` : `正式`}]读取游戏全局配置完成!`);
|
||
}
|
||
|
||
static getReliveText(relive: number, level: number): string {
|
||
let prefix = "";
|
||
if (relive > 3) {
|
||
prefix = "飞升";
|
||
} else {
|
||
prefix = `${relive}转`;
|
||
}
|
||
let result = `${prefix}${level}级`;
|
||
return result;
|
||
}
|
||
|
||
static sex: any = ["未知","男","女"];
|
||
static race: any = ["未知","人","仙","魔","鬼","龙"];
|
||
|
||
static getRoleRaceText(race: number, sex: number): string {
|
||
return GameUtil.race[race] + GameUtil.sex[sex];
|
||
}
|
||
|
||
static getRandomArrayElements(arr: any, count: number) {
|
||
let shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
|
||
while (i-- > min) {
|
||
index = Math.floor((i + 1) * Math.random());
|
||
temp = shuffled[index];
|
||
shuffled[index] = shuffled[i];
|
||
shuffled[i] = temp;
|
||
}
|
||
return shuffled.slice(min);
|
||
}
|
||
|
||
/**
|
||
* 装备评分计算
|
||
* @param race 种族
|
||
* @param equip 装备
|
||
*/
|
||
static getEquipScore(baseAttr: any, lianhuaAttr: any, type: number, grade: number, sex: number, race: number, baseScore: number, gemCnt: any): number {
|
||
let score = 0;
|
||
// 佩饰
|
||
if (type == EEquipType.BALDRIC) {
|
||
score = this.getBasicsListAttrScore(race, sex, baseAttr);
|
||
score += baseScore + baseScore * 0.5 * grade;
|
||
}
|
||
|
||
// 翅膀 或 仙器 或 神器 或 高级装备 或 新手装备
|
||
else if (type == EEquipType.WING || type == EEquipType.XianQi || type == EEquipType.ShenBing || type == EEquipType.HIGH || type == EEquipType.XinShou) {
|
||
// 宝石评分
|
||
if (JSON.stringify(gemCnt) != '{}'){
|
||
score += this.gemCalculate(gemCnt);
|
||
}
|
||
// 炼化评分
|
||
if (JSON.stringify(lianhuaAttr) != '{}'){
|
||
score += this.getBasicsListAttrScore(race, sex, lianhuaAttr);
|
||
}
|
||
score += this.calculate(baseAttr,race, sex, true);
|
||
score += baseScore + baseScore * 0.5 * grade;
|
||
}
|
||
// 其他装备
|
||
else {
|
||
score += baseScore + baseScore * 0.5 * grade;
|
||
}
|
||
if (isNaN(score)){
|
||
score = 0;
|
||
}
|
||
return Math.floor(score);
|
||
}
|
||
|
||
// 数组对象类型属性评分计算[{}]
|
||
static getBasicsListAttrScore(race: number, sex: number, baseAttr: any): number {
|
||
let score = 0;
|
||
// 查看当前属性是否有值
|
||
if (baseAttr.length > 0) {
|
||
// 有值则遍历取值
|
||
for (let base of baseAttr) {
|
||
// 计算属性值
|
||
score += this.calculate(base,race,sex,false);
|
||
}
|
||
}
|
||
return Math.floor(score);
|
||
}
|
||
|
||
// 计算属性值
|
||
static calculate(base: any, race: number, sex: number,flag :boolean): number{
|
||
let score = 0;
|
||
// 当前属性
|
||
for (let key in base) {
|
||
let key_ = parseInt(key);
|
||
let value = parseInt(base[key]);
|
||
// 判断当前属性值是否不用计算百分百比
|
||
if (this.equipTypeNumerical.indexOf(key_) != -1) {
|
||
value = value / 100;
|
||
}else {
|
||
if (flag){
|
||
value = value / 10;
|
||
}
|
||
}
|
||
// 获取装备属性每点分数
|
||
let grade = this.getScore(race, sex, key_);
|
||
score += value * grade;
|
||
}
|
||
return Math.floor(score);
|
||
}
|
||
|
||
// 计算宝石属性评分
|
||
static gemCalculate(gemCnt: any): number{
|
||
let score = 0;
|
||
for (let key in gemCnt) {
|
||
// 宝石编号
|
||
let key_ = parseInt(key);
|
||
// 镶嵌数量
|
||
let value = parseInt(gemCnt[key]);
|
||
// 根据宝石编号获取当前宝石单个分数
|
||
let grade = this.gemBasicsScore[key_];
|
||
score += grade * value;
|
||
}
|
||
return Math.floor(score);
|
||
}
|
||
|
||
// 角色属性分数:15分 通用属性忽视抗抗连击率:10分 角色基础属性分数:5分
|
||
static getScore(race: number, sex: number, key: number): number {
|
||
let grade = 5;
|
||
let roleAttrScore: any = this.roleAttrScore[race];
|
||
// 判断是否为通用装备
|
||
if (roleAttrScore != undefined) {
|
||
if (sex != 9) {
|
||
let value = roleAttrScore[sex][key];
|
||
if (value == undefined) {
|
||
value = this.roleBasicsAttrScore[key];
|
||
if (value != undefined) {
|
||
grade = 10;
|
||
}
|
||
} else {
|
||
grade = value;
|
||
}
|
||
} else {
|
||
grade = 5;
|
||
}
|
||
} else {
|
||
let value = this.roleBasicsAttrScore[key];
|
||
if (value != undefined) {
|
||
grade = 10;
|
||
}
|
||
}
|
||
return grade;
|
||
}
|
||
|
||
// 角色基础属性分数
|
||
static roleBasicsAttrScore: any = {
|
||
[EAttrTypeL2.GENGU]: 5,
|
||
[EAttrTypeL2.LINGXING]: 5,
|
||
[EAttrTypeL2.LILIANG]: 5,
|
||
[EAttrTypeL2.MINJIE]: 5,
|
||
}
|
||
|
||
// 角色属性分数
|
||
static roleAttrScore: any = {
|
||
[ERaceType.HUMEN]: {
|
||
// 人族 (男)
|
||
[ESexType.MALE]: {
|
||
// key 属性, value 每点属性分数
|
||
[EAttrTypeL1.K_SEAL_CONFUSION_SLEEP_FORGET_LIMIT]: 15,
|
||
[EAttrTypeL1.HK_CONFUSION]: 15,
|
||
[EAttrTypeL1.HK_SEAL]: 15,
|
||
[EAttrTypeL1.HK_SLEEP]: 15,
|
||
},
|
||
// 人族 (女)
|
||
[ESexType.FEMALE]: {
|
||
// key 属性, value 每点属性分数
|
||
[EAttrTypeL1.HK_POISON]: 15,
|
||
[EAttrTypeL1.BONE]: 15,
|
||
},
|
||
},
|
||
[ERaceType.SKY]: {
|
||
// 仙族 (男)
|
||
[ESexType.MALE]: {
|
||
// key 属性, value 每点属性分数
|
||
[EAttrTypeL1.SPIRIT]: 15,
|
||
[EAttrTypeL1.Q_WIND]: 15,
|
||
[EAttrTypeL1.Q_FIRE]: 15,
|
||
[EAttrTypeL1.Q_WATER]: 15,
|
||
[EAttrTypeL1.Q_THUNDER]: 15,
|
||
[EAttrTypeL1.KB_WIND]: 15,
|
||
[EAttrTypeL1.KB_FIRE]: 15,
|
||
[EAttrTypeL1.KB_WATER]: 15,
|
||
[EAttrTypeL1.KB_THUNDER]: 15,
|
||
[EAttrTypeL1.HK_WIND]: 15,
|
||
[EAttrTypeL1.HK_FIRE]: 15,
|
||
[EAttrTypeL1.HK_WATER]: 15,
|
||
[EAttrTypeL1.HK_THUNDER]: 15,
|
||
},
|
||
// 仙族 (女)
|
||
[ESexType.FEMALE]: {
|
||
// key 属性, value 每点属性分数
|
||
[EAttrTypeL1.SPIRIT]: 15,
|
||
[EAttrTypeL1.Q_WIND]: 15,
|
||
[EAttrTypeL1.Q_FIRE]: 15,
|
||
[EAttrTypeL1.Q_WATER]: 15,
|
||
[EAttrTypeL1.Q_THUNDER]: 15,
|
||
[EAttrTypeL1.KB_WIND]: 15,
|
||
[EAttrTypeL1.KB_FIRE]: 15,
|
||
[EAttrTypeL1.KB_WATER]: 15,
|
||
[EAttrTypeL1.KB_THUNDER]: 15,
|
||
[EAttrTypeL1.HK_WIND]: 15,
|
||
[EAttrTypeL1.HK_FIRE]: 15,
|
||
[EAttrTypeL1.HK_WATER]: 15,
|
||
[EAttrTypeL1.HK_THUNDER]: 15,
|
||
},
|
||
},
|
||
[ERaceType.DEMON]: {
|
||
// 魔族 (男)
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.Q_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.KB_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.HK_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.HK_DETER]: 15,
|
||
},
|
||
// 魔族 (女)
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.Q_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.KB_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.HK_BLOODRETURN]: 15,
|
||
[EAttrTypeL1.HK_DETER]: 15,
|
||
},
|
||
},
|
||
[ERaceType.GHOST]: {
|
||
// 鬼族 (男)
|
||
[ESexType.MALE]: {
|
||
[EAttrTypeL1.HK_WILDFIRE]: 15,
|
||
[EAttrTypeL1.KB_WILDFIRE]: 15,
|
||
[EAttrTypeL1.Q_WILDFIRE]: 15,
|
||
},
|
||
// 鬼族 (女)
|
||
[ESexType.FEMALE]: {
|
||
[EAttrTypeL1.HK_WILDFIRE]: 15,
|
||
[EAttrTypeL1.KB_WILDFIRE]: 15,
|
||
[EAttrTypeL1.Q_WILDFIRE]: 15,
|
||
},
|
||
},
|
||
}
|
||
|
||
// 宝石分数
|
||
static gemBasicsScore: any = {
|
||
// 红宝石基础分数: 70分 每增加一个等级增加5分
|
||
30025: 70,
|
||
30026: 75,
|
||
30027: 80,
|
||
30028: 85,
|
||
30029: 90,
|
||
30030: 95,
|
||
30104: 100,
|
||
// 绿宝石基础分数: 65分 每增加一个等级增加5分
|
||
30013: 65,
|
||
30014: 70,
|
||
30015: 75,
|
||
30016: 80,
|
||
30017: 85,
|
||
30018: 90,
|
||
30102: 95,
|
||
// 蓝宝石基础分数: 65分 每增加一个等级增加5分
|
||
30019: 65,
|
||
30020: 70,
|
||
30021: 75,
|
||
30022: 80,
|
||
30023: 85,
|
||
30024: 90,
|
||
30103: 95,
|
||
// 紫宝石基础分数: 65分 每增加一个等级增加5分
|
||
30001: 65,
|
||
30002: 70,
|
||
30003: 75,
|
||
30004: 80,
|
||
30005: 85,
|
||
30006: 90,
|
||
30100: 95,
|
||
// 橙宝石基础分数: 65分 每增加一个等级增加5分
|
||
30007: 65,
|
||
30008: 70,
|
||
30009: 75,
|
||
30010: 80,
|
||
30011: 85,
|
||
30012: 90,
|
||
30101: 95,
|
||
}
|
||
|
||
// Map转数组
|
||
static mapToArray(entries: any, size: number) {
|
||
let list = [];
|
||
for (let i = 0; i < size; i++) {
|
||
let data = entries.next().value;
|
||
list.push(data[1])
|
||
}
|
||
return list;
|
||
};
|
||
|
||
// 清空属性表
|
||
static clearAllAttr(attr1: { [key: string]: number }) {
|
||
for (let key in EAttrTypeL1) {
|
||
let value = SKDataUtil.numberBy(key);
|
||
if (isNaN(value)) {
|
||
continue;
|
||
}
|
||
attr1[value] = 0;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 生成签到数据
|
||
* flag: 0:未签到、1:签到、2:补签
|
||
*/
|
||
static getDaySignIn(): any{
|
||
let data: any = {};
|
||
// 当前月天数
|
||
let day = GTimer.getMonthDay();
|
||
// 当前月份
|
||
let month = GTimer.getCurMonth();
|
||
let list: any = [];
|
||
for (let i = 0; i < day; i++) {
|
||
list.push({day: i + 1, flag: 0})
|
||
}
|
||
data[month] = list;
|
||
return SKDataUtil.toJson(data,"{}");
|
||
}
|
||
|
||
//阿拉伯数字转中文数字
|
||
noToChinese(num: any) {
|
||
if (!/^\d*(\.\d*)?$/.test(num)) {
|
||
alert("Number is wrong!");
|
||
return "Number is wrong!";
|
||
}
|
||
let AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
|
||
let BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
|
||
let a: any = ("" + num).replace(/(^0*)/g, "").split("."),
|
||
k = 0,
|
||
re = "";
|
||
for (let i = a[0].length - 1; i >= 0; i--) {
|
||
switch (k) {
|
||
case 0:
|
||
re = BB[7] + re;
|
||
break;
|
||
case 4:
|
||
if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
|
||
re = BB[4] + re;
|
||
break;
|
||
case 8:
|
||
re = BB[5] + re;
|
||
BB[7] = BB[5];
|
||
k = 0;
|
||
break;
|
||
}
|
||
if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
|
||
if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
|
||
k++;
|
||
}
|
||
if (a.length > 1) //加上小数部分(如果有小数部分)
|
||
{
|
||
re += BB[6];
|
||
for (let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
|
||
}
|
||
return re;
|
||
};
|
||
|
||
static getIPAdress(): string {
|
||
var interfaces = os.networkInterfaces();
|
||
for (var devName in interfaces) {
|
||
var iface = interfaces[devName];
|
||
for (var i = 0; i < iface.length; i++) {
|
||
var alias = iface[i];
|
||
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
|
||
return alias.address;
|
||
}
|
||
}
|
||
}
|
||
return "127.0.0.1";
|
||
}
|
||
|
||
static nextId(): number {
|
||
if (this.snowFlake53 == null) {
|
||
throw new Error("服务器没有正常启动!");
|
||
}
|
||
return this.snowFlake53.nextId();
|
||
}
|
||
}
|