xy-server/game/zhenFa/xwManager.ts

447 lines
15 KiB
TypeScript
Raw Permalink Normal View History

2025-04-23 09:34:08 +08:00
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)
}
}
}
}