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