xy-server/game/zhenFa/xwManager.ts
2025-04-23 09:34:08 +08:00

447 lines
15 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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