2025-04-24 17:03:28 +08:00

939 lines
28 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import MsgAlert from "../game/msg/MsgAlert";
import SKDataUtil from "../gear_2.3.4/util/SKDataUtil";
import SKUIUtil from "../gear_2.3.4/util/SKUIUtil";
import ArriveCallback from "./ArriveCallback";
import { EAttrTypeL1, EAttrTypeL2, EEquipIndex, ERaceType, ESexType, MsgCode } from "./EEnum";
import GameModel from "./GameModel";
export default class GameUtil {
// 道具索引名稱
static indexName = {
[EEquipIndex.WEAPONS]: "武器",
[EEquipIndex.NECKLACE]: "項鍊",
[EEquipIndex.CLOTHES]: "衣服",
[EEquipIndex.HELMET]: "頭盔",
[EEquipIndex.SHOES]: "鞋子",
[EEquipIndex.WING]: "翅膀",
[EEquipIndex.CAPE]: "披風",
[EEquipIndex.PENDANT]: "挂件",
[EEquipIndex.BELT]: "腰帶",
[EEquipIndex.RING_LEFT]: "戒指・左",
[EEquipIndex.RING_LEFT]: "法寶",
[EEquipIndex.RING_LEFT]: "戒指・右",
};
static PI : number = 3.14;
// 寵物技能鎖消費倍數
static petSkLok : number = 1000;
// 創建幫派 需要消費金額
static childJade : number = 300000;
static schemeUseMoney = 10000000;
static schemeActiveMoney = 100000;
static resetXiulian = 200000;
static noticeCount : number = 0;
static hasCharge : boolean = true;
// 定義
static horseExpItemId : number = 10605; // 坐騎經驗丹
static horseExpItemList : number[] = [10605, 10609]; // 坐騎經驗丹
static horseSkillUpItemId : number = 10607; // 丹書密卷
static horseRefiningItemId : number = 10608; // 淨露玉瓶
static lockJade = [10, 20, 30];
static account : string = "未知";
private static attrTypeL1Name = {
// 抗控制
[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]: '敏捷',
};
private static attrTypeL2Name = {
[EAttrTypeL2.BONE]: '根骨',
[EAttrTypeL2.SPIRIT]: '靈性',
[EAttrTypeL2.STRENGTH]: '力量',
[EAttrTypeL2.DEXTERITY]: '敏捷',
}
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 attrEquipType = {
'FatalRate': EAttrTypeL1.PHY_DEADLY, // 致命(狂暴)%
'HitRate': EAttrTypeL1.PHY_HIT, // 命中%
'PhyDefNef': EAttrTypeL1.PHY_BREAK, // 破防程度%
'PhyDefNefRate': EAttrTypeL1.PHY_BREAK_PROB, // 破防概率%
'AdAtkEhan': EAttrTypeL1.ATK_ADD, // 加強攻擊%
'Atk': EAttrTypeL1.ATK, //攻擊(原數增加)
'CureEhan': EAttrTypeL1.CURE_EHAN, // 加強治愈%
'SweepEhan': EAttrTypeL1.SWEEP_EHAN, // 加強橫掃%
'BreakEhan': EAttrTypeL1.BREAK_EHAN, // 加強破甲%
'ThudEhan': EAttrTypeL1.THUD_EHAN, // 加強震擊%
'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, // 忽視抗震懾%
'PhyDefNeg': EAttrTypeL1.HK_PHY_GET, // 忽視抗物理%
'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, //躲閃%
'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,
'Basecon': EAttrTypeL2.BONE, // 根骨
'Wakan': EAttrTypeL2.SPIRIT, // 靈性
'Power': EAttrTypeL2.STRENGTH, // 力量
'Agility': EAttrTypeL2.DEXTERITY, // 敏捷
}
static mapAudio = {
1000: 'huanggong',
1001: 'putuoshan',
1003: 'beijuluzhou',
1008: 'baigushan',
1010: 'xinshou',
1011: 'changan',
1012: 'tiangong',
1015: 'pantaoyuan',
1016: 'yumajian',
1017: 'aolaiguo',
1018: 'baoxiangguo',
1019: 'pingdingshan',
1201: 'yinan',
1206: 'zhongyuan',
1212: 'penglai',
3002: 'bangpai',
};
static roleName = {
1001: '逍遙生',
1002: '俏千金',
1011: '飛劍俠',
1012: '燕山雪',
1031: '神秀生',
1032: '紅拂女',
1101: '忘憂子',
1102: '驪珠兒',
1111: '龍淵客',
1112: '木蘭行',
1131: '滄浪君',
1132: '莫解語',
2003: '神天兵',
2004: '玄劍娥',
2013: '武尊神',
2014: '玄天姬',
2033: '龍戰將',
2034: '雲中君',
3005: '虎頭怪',
3006: '狐美人',
3015: '逆天魔',
3016: '媚靈狐',
3035: '混天魔',
3036: '九尾狐',
4007: '祭劍魂',
4008: '夜溪靈',
4017: '無崖子',
4018: '幽夢影',
4037: '南冠客',
4038: '鏡花影',
};
// 1轉修正E
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.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.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.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.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.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.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.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.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.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,
},
}
};
// 飛升修正
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.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.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.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 raceResID = {
'110': 1001, '111': 1011, '113': 1031,
'120': 1002, '121': 1012, '123': 1032,
'210': 2003, '211': 2013, '213': 2033,
'220': 2004, '221': 2014, '223': 2034,
'310': 3005, '311': 3015, '313': 3035,
'320': 3006, '321': 3016, '323': 3036,
'410': 4007, '411': 4017, '413': 4037,
'420': 4008, '421': 4018, '423': 4038,
'510': 1101, '511': 1111, '513': 1131,
'520': 1102, '521': 1112, '523': 1132,
};
static msgText = {
[MsgCode.SUCCESS]: '成功',
[MsgCode.FAILED]: '失敗',
[MsgCode.REGISTER_ACCOUNT_REPEAT]: '帳號重複',
[MsgCode.REGISTER_DATABASE_ERROR]: '無法連接到服務器,請稍後再試',
[MsgCode.LOGIN_ACCOUNT_PWD_ERROR]: '帳號或密碼錯誤',
[MsgCode.SERVICE_NOT_FOUND]: '網絡錯誤',
[MsgCode.ACCOUNT_FREEZE]: '帳號被封,請聯繫客服查詢',
[MsgCode.NETWORK_ERROR]: '網絡連接失敗,請稍後再試',
[MsgCode.NETWORK_DISCONNECT]: '網絡連接失敗,點擊重試',
[MsgCode.INVITE_CODE_ERR]: '邀請碼錯誤',
[MsgCode.VERSION_ERROR]: '版本錯誤',
[MsgCode.OPERATION_ERROR]: '操作失敗',
[MsgCode.ITEM_OPERATION_ERROR]: '物品操作失敗',
[MsgCode.ROLE_NAME_EXIST]: '角色名已存在! ',
[MsgCode.CREATE_NAME_INVALID]: '名字不合法',
[MsgCode.RELIVE_LEVEL_TOO_HIGH]: '更高轉生等級暫未開放',
[MsgCode.RELIVE_LEVEL_NOT_ENOUGH]: '轉生等級不足',
[MsgCode.BAG_ITEM_IS_FULL]: '背包已滿',
[MsgCode.GIFT_HAS_GOT]: '已經領取過了 或 暫時沒有禮包',
[MsgCode.HONGBAO_GET_YET]: '這個時間段的紅包已經領過了,等下一次吧',
[MsgCode.SLDH_NOT_OPEN]: '水陸大會沒有開啟',
[MsgCode.SLDH_NOT_SIGN_TIME]: '不在水陸大會報名時間',
[MsgCode.SIGN_ALREADY]: '已經報名過了',
[MsgCode.SLDH_SIGN_TEAM]: ' 水路大會必須3人以上組隊參加',
[MsgCode.SIGN_TEAM_LEADER]: '只能隊長報名',
[MsgCode.SLDH_NOT_SIGN]: '水路大會 沒有報名',
[MsgCode.SLDH_SIGN_LEVEL_80]: '水路大會必須所有隊員在80級以上',
[MsgCode.SAT_NOT_OPEN]: '逐鹿大會沒有開啟',
[MsgCode.SAT_NOT_SIGN_TIME]: '不在逐鹿大會報名時間',
[MsgCode.SAT_SIGN_TEAM]: '逐鹿大會必須3人以上組隊參加',
[MsgCode.SAT_NOT_SIGN]: '逐鹿大會 沒有報名',
[MsgCode.SAT_SIGN_LEVEL_80]: '逐鹿大會必須所有隊員在80級以上',
[MsgCode.LINGHOU_NOT_TEAM]: '靈猴大吼一句,欺人太甚,還想以多欺少! ',// 不能組隊
[MsgCode.LINGHOU_MONEY_ENOUGH]: '靈猴輕蔑的看了你一眼,便不再搭理你了! ',// 銀兩不足
[MsgCode.LINGHOU_FIGHT_TOO_MACH]: '靈猴大喊一聲,少俠饒命,小的再也不敢了', // 靈猴攻擊次數太多
[MsgCode.LINGHOU_TODAY_TOO_MACH]: '靈猴看到你就瑟瑟發抖', // 今天攻擊猴子次數太多
};
// 到達目標地回調
static arriveCallback : ArriveCallback;
static getAttrTypeL1Name(value : EAttrTypeL1) : string {
let result = this.attrTypeL1Name[value];
if (result == null) {
return "";
}
return result;
}
static getAttrTypeL2Name(value : EAttrTypeL1) : string {
let result = this.attrTypeL2Name[value];
if (result == null) {
return "";
}
return result;
}
// 設置0轉0級文本
static getReliveText(relive : number, level : number) {
let prefix = "";
if (relive > 3) {
prefix = "飛升";
} else {
prefix = `${relive}`;
}
let result = `${prefix}${level}`;
return result;
}
// 等級顏色富文本
static getReliveRichText(relive : number, level : number) {
let prefix = "";
if (relive > 3) {
prefix = "飛升";
} else {
prefix = `${relive}`;
}
let result = `${prefix}${level}`;
var color = this.getReliveColor16(relive, 0)
return `[color=${color}]${result}[/color]`;
}
// 設置0轉0級文本节点
static setReliveLabel(label : cc.Label, type : number, relive : number, level : number) {
label.string = this.getReliveText(relive, level);
label.node.color = this.getReliveColor(relive, type);
}
//type=0 人物和夥伴顏色type=1召喚獸顏色
static getReliveColor(relive : number, type = 0) : cc.Color {
if (relive == 0) {
if (type == 0) return SKUIUtil.colorOfString("#09FE00");
// if (type == 0) return SKUIUtil.colorOfString("#000000");
if (type == 1) return SKUIUtil.colorOfString("#ef6518");
} else if (relive == 1) {
if (type == 0) return SKUIUtil.colorOfString("#ff7d00");
if (type == 1) return SKUIUtil.colorOfString("#e792de");
} else if (relive == 2) {
if (type == 0) return SKUIUtil.colorOfString("#00F7FF");
if (type == 1) return SKUIUtil.colorOfString("#a569f7");
} else if (relive == 3) {
if (type == 0) return SKUIUtil.colorOfString("#FF0022");
if (type == 1) return SKUIUtil.colorOfString("#292cef");
} else if (relive == 4) {
if (type == 0) return SKUIUtil.colorOfString("#FF00E3");
if (type == 1) return SKUIUtil.colorOfString("#F05EE0");
}
return cc.Color.BLACK;
}
static getReliveColor16(relive : number, type = 0) : string {
if (relive == 0) {
if (type == 0) return "#10df08";
if (type == 1) return "#ef6518";
} else if (relive == 1) {
if (type == 0) return "#ff7d00";
if (type == 1) return "#e792de";
} else if (relive == 2) {
if (type == 0) return "#7bfbff";
if (type == 1) return "#a569f7";
} else if (relive == 3) {
if (type == 0) return "#de0421";
if (type == 1) return "#292cef";
} else if (relive == 4) {
if (type == 0) return "#F05EE0";
if (type == 1) return "#F05EE0";
}
return "#000000";
}
// 獲得種族資源索引
static getRaceResId(race : number, sex : number, relive : number) {
if (relive == 2) {
relive = 1;
} else if (relive == 4) {
relive = 3;
}
let key = `${race}${sex}${relive}`;
let result = SKDataUtil.valueForKey(this.raceResID, key);
if (!result) {
return 0;
}
return result;
}
static getMapAudio(mapId : number) : string {
let audio = this.mapAudio[mapId];
if (audio == null) {
audio = 'yewai';
}
return audio;
}
static getDailyData(value : number) : any {
let result = GameModel.game_conf;
if (result == null) {
return null;
}
result = result.daily;
if (result == null) {
return null;
}
result = result[value];
return result;
}
// 能否飛升
static canFlyUp() : string {
let result = ``;
let player = GameModel.player;
let relive = player.relive;
let level = player.level;
if (relive > 3) {
result = `您已經飛升成功!`;
} else if (relive != 3) {
result = `您需要達到三轉才能飛升`;
} else if (level < 180) {
result = `您的等級不夠需達到3轉180級才能飛升`;
}
return result;
}
static myPlayerToDo(mapId : number, x : number, y : number, callback : () => void) {
let mapLogic = cc.find('Canvas/MapUI').getComponent('GameMapLogic');
let myRole = mapLogic.myRole;
if (GameModel.player.mapid != mapId) {
if (GameModel.player.mapid == 1201) {
MsgAlert.addMsg(`本場景禁止傳送,請與天牢守衛對話離開。`);
return;
} else if (GameModel.player.mapid == 4004) {
MsgAlert.addMsg(`本場景禁止傳送,請與逐鹿對話離開。`);
return;
} else if (GameModel.player.mapid == 3001) {
MsgAlert.addMsg(`本場景禁止傳送,請與幫派傳送員對話離開。`);
return;
} else if (GameModel.player.mapid == 1213) {
MsgAlert.addMsg(`本場景禁止傳送,請與魏徵對話離開。`);
return;
}
mapLogic.changeMap(mapId);
}
GameUtil.arriveCallback = new ArriveCallback(x, y, callback);
if (SKUIUtil.distanceByVec2(cc.v2(x, y), cc.v2(myRole.netInfo.x, myRole.netInfo.y)) < 5) {
myRole.OnArrive();
} else {
mapLogic.touchPos({
x: x * 20,
y: y * 20
});
}
}
static createWaitTip(notice : string, time : number, callBack : () => void) {
SKUIUtil.destoryNode(cc.find('Canvas/MainUI'), 'picPercent');
let picPercent = SKUIUtil.createSubNode(cc.find('Canvas/MainUI'), cc.v2(-220, -100), GameModel.picPercent, "picPercent");
cc.find('Label', picPercent).getComponent(cc.Label).string = notice;
let progress = picPercent.getComponent(cc.ProgressBar);
progress.progress = 0;
let n = 0;
picPercent.runAction(cc.repeat(cc.sequence(cc.callFunc(() => {
let p = progress.progress + 0.1 > 1 ? 1 : progress.progress + 0.1;
progress.progress = p;
n++;
if (n >= 10) {
if (callBack) {
callBack();
}
callBack = null;
picPercent.destroy();
}
}), cc.delayTime(time / 10)), 10));
}
static waitNode = null;
static createWaitTip2(notice : string, time : number, callBack : () => void) {
SKUIUtil.destoryNode(cc.find('Canvas/MainUI'), 'picPercent');
let picPercent = SKUIUtil.createSubNode(cc.find('Canvas/MainUI'), cc.v2(-220, -100), GameModel.picPercent2, "picPercent");
cc.find('Label', picPercent).getComponent(cc.Label).string = notice;
let progress = picPercent.getComponent(cc.ProgressBar);
progress.progress = 1;
let n = 0;
picPercent.runAction(cc.repeat(cc.sequence(cc.callFunc(() => {
let p = progress.progress - (1 / 200) <= 0 ? 0 : progress.progress - (1 / 200);
progress.progress = p;
n++;
if (n >= 200) {
if (callBack) {
callBack();
}
callBack = null;
picPercent.destroy();
}
}), cc.delayTime(time / 200)), 200));
GameUtil.waitNode = picPercent
GameModel.needKeep = true
}
static createWaitTip3(notice : string, time : number, callBack : () => void) {
SKUIUtil.destoryNode(cc.find('Canvas/MainUI'), 'picPercent');
let picPercent = SKUIUtil.createSubNode(cc.find('Canvas/MainUI'), cc.v2(-220, -100), GameModel.picPercent3, "picPercent");
cc.find('Label', picPercent).getComponent(cc.Label).string = notice;
let progress = picPercent.getComponent(cc.ProgressBar);
progress.progress = 0;
let n = 0;
picPercent.runAction(cc.repeat(cc.sequence(cc.callFunc(() => {
let p = progress.progress + (1 / 200) >= 1 ? 1 : progress.progress + (1 / 200);
progress.progress = p;
n++;
if (n >= 200) {
if (callBack) {
callBack();
}
callBack = null;
picPercent.destroy();
}
}), cc.delayTime(time / 200)), 200));
GameUtil.waitNode = picPercent
GameModel.needKeep = true
}
/**
* 打斷大砲、塔蓄力
*/
static breakWaitTip2(isbreak : boolean = true) {
GameModel.needKeep = false;
if (isbreak)
GameModel.send("c2s_ask_fortifications", {
roleId: GameModel.player.roleid,
type: GameModel.needKeepType,
serial: GameModel.serial,
is: 1
})
// 如果是大砲則回復原樣
if (GameModel.needKeepType == 1) {
if (GameModel.paoNpc)
GameModel.paoNpc.initAnimation()
else {
console.log("未找到大砲")
}
}
GameUtil.waitNode.stopAllActions()
GameUtil.waitNode.destroy()
}
/**
* 根據數值獲取顏色
* @param num 數字
* @returns cc.color顏色
*/
static getNumColor(num : number) {
let color = cc.Color.WHITE;
if (num >= 0 && num < 1000000) {
color = cc.Color.WHITE;
} else if (num >= 1000000 && num < 10000000) {
color = cc.Color.YELLOW;
} else if (num >= 10000000 && num < 100000000) {
color = cc.color(0, 255, 255, 255);
} else if (num >= 100000000 && num < 1000000000) {
color = cc.Color.GREEN;
} else if (num >= 1000000000 && num < 10000000000) {
color = cc.color(255, 0, 120, 255);
}
return color;
}
/**
* 根據數值獲取顏色
* @param num 數字
* @returns 16進制顏色
*/
static getNumColorRich(num : number) {
return this.getHexColor(this.getNumColor(num));
}
/**
* 獲取16進制顏色
* @param color cc.color顏色
* @returns 16進制顏色
*/
static getHexColor(color : cc.Color) {
var strHex = "#";
var colorArr = [color.r, color.g, color.b]
for (var i = 0; i < 3; i++) {
var hex = Number(colorArr[i]).toString(16);
if (hex === "0")
hex = "00";
strHex += hex;
}
return strHex;
}
/**
*
* @param nvert 幾個頂點
* @param vertx 橫坐標數組
* @param verty 縱坐標數組
* @param testx 測試點X
* @param testy 測試點Y
* @returns
*/
static pnpoly(nvert, vertx, verty, testx, testy) {
var i, j, c = false;
for (i = 0, j = nvert - 1; i < nvert; j = i++) {
if (((verty[i] > testy) != (verty[j] > testy)) &&
(testx < (vertx[j] - vertx[i]) * (testy - verty[i]) / (verty[j] - verty[i]) + vertx[i]))
c = !c;
}
return c;
}
}