import GameConf from "../../conf/GameConf"; import GameUtil from "../core/GameUtil"; import ItemUtil from "../core/ItemUtil"; import SKDataUtil from "../gear/SKDataUtil"; import xwItem from "./xwItem"; function random_select_pos(pro: any[], list: any[]) { var total_pro: number = 0 const size = pro.length for (var i = 0; i < size; ++i) { var bContinue = false for (var j = 0; j < list.length; ++j) { if (pro[i].pos == list[j]) { bContinue = true break } } if (!!bContinue) continue total_pro += pro[i].probability } var r = Math.floor(Math.random() * 10000) % total_pro var start_pro = 0 for (var i = 0; i < size; ++i) { var bContinue = false for (var j = 0; j < list.length; ++j) { if (pro[i].pos == list[j]) { bContinue = true break } } if (!!bContinue) continue if (start_pro <= r && r < (start_pro + pro[i].probability)) { return pro[i] } start_pro += pro[i].probability } return null } function random_select_attr(pro: any[], list: any[]) { var total_pro: number = 0 const size = pro.length for (var i = 0; i < size; ++i) { var bContinue = false for (var j = 0; j < list.length; ++j) { if (pro[i].attr_index == list[j]) { bContinue = true break } } if (!!bContinue) continue total_pro += pro[i].probability } var r = Math.floor(Math.random() * 10000) % total_pro var start_pro = 0 for (var i = 0; i < size; ++i) { var bContinue = false for (var j = 0; j < list.length; ++j) { if (pro[i].attr_index == list[j]) { bContinue = true break } } if (!!bContinue) continue if (start_pro <= r && r < (start_pro + pro[i].probability)) { return pro[i] } start_pro += pro[i].probability } return null } const XWItemType = { type_storm: 11, type_guard: 12 } /** * 信物管理 */ export default class xwManager { /** * 信物数组 */ xwItemAry: xwItem[]; /** * 炼化 */ lianhuaData: any; // lianhuaArr: any; /** * 玩家代理 */ delegte: any = null; QIANGXI: any[] SHOUHU: any[] QiangxiLianHua: any[] ShouhuLianHua: any[] constructor(delegte: any) { this.xwItemAry = [] this.delegte = delegte } // const attr_name = ['加强攻击','加强速度','加强魅惑','加强加防','加强治愈','加强横扫','加强破甲' // ,'加强震击','忽视水','忽视雷','忽视火','忽视风','忽视封印','忽视混乱','忽视昏睡','忽视毒' // ,'忽视遗忘','忽视鬼火','忽视三尸虫','忽视抗震慑','强力克金','强力克木','强力克水','强力克火' // ,'强力克土'] // return attr_name[attr] // } else { // const attr_name = ['抗水法','抗雷法','抗火法','抗风法','抗封印','抗混乱','抗昏睡' // ,'抗中毒','抗遗忘','抗鬼火','抗三尸虫','物理吸收','抗震慑','躲闪'] // return attr_name[attr] // } init() { this.lianhuaData = GameUtil.require_ex('../../conf/prop_data/prop_lianhua.json'); // this.lianhuaArr = {}; // for (let index = 0; index < 12; index++) { // this.lianhuaArr[index + 1] = []; // } // for (let key in this.lianhuaData) { // if (this.lianhuaData.hasOwnProperty(key)) { // let info = this.lianhuaData[key]; // for (let index = 0; index < 12; index++) { // if (info[`pos${index + 1}`].length > 0) { // info.key = key; // this.lianhuaArr[index + 1].push(info); // } // } // } // } //[阵位]:info info里面又对应阵位, 人才 this.QIANGXI = ["AdAtkEhan", "AdSpdEhan", "CharmEhan", "AdDefEhan", "CureEhan", "SweepEhan", "BreakEhan", "ThudEhan", "RainDefNeg", "ThunderDefNeg", "FireDefNeg", "WindDefNeg", "SealDefNeg", "DisorderDefNeg", "SleepDefNeg", "PoisonDefNeg", "ForgetDefNeg", "GfireDefNeg", "SanshiDefNeg", "ShockDefNeg", "Kgold", "Kwood", "Kwater", "Kfire", "Kearth" ] this.QiangxiLianHua = [] for (let index = 0; index < this.QIANGXI.length; index++) { let name = this.QIANGXI[index]; let info = this.lianhuaData[name] for (let idx = 1; idx < 12; idx++) { let name = "pos"+idx if(info[name].length > 0){ this.QiangxiLianHua[index] = info[name] break } } } this.SHOUHU = [ "RainDef", "ThunderDef", "FireDef", "WindDef", "SealDef", "DisorderDef", "SleepDef", "PoisonDef", "ForgetDef", "GfireDef", "SanshiDef", "PhyDef", "ShockDef", "VoidRate" ] this.ShouhuLianHua = [] for (let index = 0; index < this.SHOUHU.length; index++) { let name = this.SHOUHU[index]; let info = this.lianhuaData[name] for (let idx = 1; idx < 12; idx++) { let name = "pos"+idx if(info[name].length > 0){ this.ShouhuLianHua[index] = info[name] break } } } } loadData(data: any) { const size = data.length for (var i = 0; i < size; ++i) { var item = new xwItem() if (!!item) { item.clear() item.setXwItemID(data[i].itemID) item.setXwItemInfo(0, data[i].attr1.pos, data[i].attr1.index, data[i].attr1.value, data[i].attr1.max) item.setXwItemInfo(1, data[i].attr2.pos, data[i].attr2.index, data[i].attr2.value, data[i].attr2.max) item.setXwItemInfo(2, data[i].attr3.pos, data[i].attr3.index, data[i].attr3.value, data[i].attr3.max) this.xwItemAry.push(item) } } } ToJson() { return this.getXwListByJson() } //生成信物 buildNewXw(itemID: number) { let item = this.getXwItem(itemID) if (item != null) return false item = new xwItem() if (!!item) { item.clear() item.setXwItemID(itemID) item.setXwItemInfo(0, -1, -1, -1, -1) item.setXwItemInfo(1, -1, -1, -1, -1) item.setXwItemInfo(2, -1, -1, -1, -1) item.setNewAttr(0, -1, -1, -1, -1) item.setNewAttr(1, -1, -1, -1, -1) item.setNewAttr(2, -1, -1, -1, -1) this.xwItemAry.push(item) } return true } //获取信物列表JSON getXwListByJson() { var tempList: any = [] const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item) { var info: any = { itemID: item.getItemID(), attr1: { pos: item.getItemPosByIndex(0), index: item.getItemAttrIndexByIndex(0), value: item.getItemAttrValueByIndex(0), max: item.getItemMaxByIndex(0), }, attr2: { pos: item.getItemPosByIndex(1), index: item.getItemAttrIndexByIndex(1), value: item.getItemAttrValueByIndex(1), max: item.getItemMaxByIndex(1), }, attr3: { pos: item.getItemPosByIndex(2), index: item.getItemAttrIndexByIndex(2), value: item.getItemAttrValueByIndex(2), max: item.getItemMaxByIndex(2), } } tempList.push(info) } } return SKDataUtil.toJson(tempList, "[]") } //洗练 succinct(itemID: number): any { const size = GameUtil.game_conf.XinWu.length var pos_list = []; var attr_list = []; var attr_value_list = []; var attr_max_list = []; var itemObj = ItemUtil.getItemData(itemID) // var type = (0 == itemObj.classify ? XWItemType.type_storm : XWItemType.type_guard) for (var i = 0; i < size; ++i) { if (itemID == GameUtil.game_conf.XinWu[i].id) { var pos1: number = random_select_pos(GameUtil.game_conf.XinWu[i].pos_pro, pos_list).pos var attr1: number = random_select_attr(GameUtil.game_conf.XinWu[i].attr_pro, attr_list).attr_index var value1 = this.getAttrValue(itemObj.classify, attr1) pos_list.push(pos1) attr_list.push(attr1) attr_value_list.push(value1) attr_max_list.push(this.getMaxAttrValue(itemObj.classify, attr1)) var pos2: number = random_select_pos(GameUtil.game_conf.XinWu[i].pos_pro, pos_list).pos var attr2: number = random_select_attr(GameUtil.game_conf.XinWu[i].attr_pro, attr_list).attr_index var value2 = this.getAttrValue(itemObj.classify, attr2) pos_list.push(pos2) attr_list.push(attr2) attr_value_list.push(value2) attr_max_list.push(this.getMaxAttrValue(itemObj.classify, attr2)) var pos3: number = random_select_pos(GameUtil.game_conf.XinWu[i].pos_pro, pos_list).pos var attr3: number = random_select_attr(GameUtil.game_conf.XinWu[i].attr_pro, attr_list).attr_index var value3 = this.getAttrValue(itemObj.classify, attr3) pos_list.push(pos3) attr_list.push(attr3) attr_value_list.push(value3) attr_max_list.push(this.getMaxAttrValue(itemObj.classify, attr3)) } } var info = { pos1: pos_list[0], attr1: attr_list[0], value1: attr_value_list[0], max1: attr_max_list[0], pos2: pos_list[1], attr2: attr_list[1], value2: attr_value_list[1], max2: attr_max_list[1], pos3: pos_list[2], attr3: attr_list[2], value3: attr_value_list[2], max3: attr_max_list[2], } return info } getMaxAttrValue(type: number, pos: number): number { let arr = this.QiangxiLianHua if (type == 1){ arr = this.ShouhuLianHua } let info = arr[pos]; let valuearr = info.split(','); return Number(valuearr[1]) } getAttrValue(type: number, pos: number) { // let factor = 0.3; // let arr = this.lianhuaArr[type]; let arr = this.QiangxiLianHua if (type == 1){ arr = this.ShouhuLianHua } let info = arr[pos]; let valuearr = info.split(','); // let deltaValue = Number(valuearr[1]) - Number(valuearr[0]); // let randValue = Math.random() * deltaValue * 0.5 + deltaValue * factor; // let fvalue = Number(valuearr[0]) + randValue; // return parseInt(String(fvalue)) return SKDataUtil.random(Number(valuearr[0]), Number(valuearr[1])) } //获取属性信息 getAttrInfo(itemID: number) { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == this.xwItemAry[i].itemID) { // console.log("2222222222222222222222222222222222222222222222222222",this.xwItemAry[i]) return this.xwItemAry[i].getAttrInfo() } } return { pos1: -1, attr1: -1, value1: -1, pos2: -1, attr2: -1, value2: -1, pos3: -1, attr3: -1, value3: -1, max1: -1, max2: -1, max3: -1, } } // setAttrInfo(itemID:number,info:any) { // const count = this.xwItemAry.length // for (var i = 0; i < count; ++i) { // var item = this.xwItemAry[i] // if (!!item && itemID == item.itemID) { // item.setXwItemInfo(0,info.pos1,info.attr1,info.attr_value1, info.max1) // item.setXwItemInfo(1,info.pos2,info.attr2,info.attr_value2, info.max2) // item.setXwItemInfo(2,info.pos3,info.attr3,info.attr_value3, info.max3) // return true // } // } // return false // } //设置新属性信息 setNewAttrInfo(itemID: number, info: any) { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == item.itemID) { item.setNewAttr(0, info.pos1, info.attr1, info.value1, info.max1) item.setNewAttr(1, info.pos2, info.attr2, info.value2, info.max2) item.setNewAttr(2, info.pos3, info.attr3, info.value3, info.max3) break } } } //获取新属性信息 getNewAttrInfo(itemID: number): any { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == item.itemID) { return item.getNewAttrInfo() } } return null } //替换属性 replaceAttr(itemID: number) { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == item.itemID) { return item.replace_attr() } } return 2 } ClearNewAttr(itemID: number) { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == item.itemID) { item.ClearAttr(item.succinct_attr_pos, item.succinct_attr_index, item.succinct_attr_value, item.succinct_attr_max) break } } } getXwItem(itemID: number): any { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item && itemID == item.itemID) { return item } } return null } clearNewAttrInfo() { const count = this.xwItemAry.length for (var i = 0; i < count; ++i) { var item = this.xwItemAry[i] if (!!item) { item.ClearAttr(item.succinct_attr_pos, item.succinct_attr_index, item.succinct_attr_value, item.succinct_attr_max) } } } }