939 lines
28 KiB
TypeScript
939 lines
28 KiB
TypeScript
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;
|
||
}
|
||
} |