447 lines
15 KiB
TypeScript
447 lines
15 KiB
TypeScript
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)
|
||
}
|
||
}
|
||
}
|
||
}
|