import GameUtil from "../core/GameUtil"; import ItemUtil from "../core/ItemUtil"; import SKDataUtil from "../gear/SKDataUtil"; import { EAttrTypeL1, EAttrTypeL2 } from "../role/EEnum"; import EquipMgr from "./EquipMgr"; class Attr { ID: number //属性id Base: number //基础属性 Value: number //属性值 } class Star { ID: number //星阵id Level: number //星阵等级 EquipAttr: Attr[] = [] //装备属性 FreshAttr: Attr[] = [] //洗练属性 constructor(id: number, level: number) { this.ID = id this.Level = level this.EquipAttr = [] this.FreshAttr = [] } GetObject() { return { id: this.ID, level: this.Level, equipAttr: this.EquipAttr, freshAttr: this.FreshAttr } } UpdateData(data: any) { this.Level = data.level this.EquipAttr = data.equipAttr this.FreshAttr = data.freshAttr } GetAttr(pos: number): any { let arr = EquipMgr.shared.lianhuaArr[pos] let info = arr[Math.floor(Math.random() * arr.length)]; let type = GameUtil.attrEquipTypeStr[info.key] if (type == EAttrTypeL2.GENGU ||type == EAttrTypeL2.LINGXING || type == EAttrTypeL2.LILIANG || type == EAttrTypeL2.MINJIE){ return this.GetAttr(pos) } return info } //洗练星阵 Fresh() { let cnt = 2 if (this.ID <= 3) { cnt = 5 } this.FreshAttr = [] for (let index = 0; index < cnt; index++) { let pos = this.ID + 1 let info = this.GetAttr(pos) let valuearr = info[`pos${pos}`].split(','); let deltaValue = Number(valuearr[1]) - Number(valuearr[0]); let randValue = Math.random() * deltaValue let fvalue = Number(valuearr[0]) + randValue; let attrtype = GameUtil.attrEquipTypeStr[info.key]; let attr = new Attr() attr.ID = attrtype attr.Base = Math.floor(fvalue) attr.Value = parseInt(String(attr.Base * (1 + 0.005 * this.Level))); this.FreshAttr.push(attr) } } //装备洗练属性 Equip(): number { this.EquipAttr = this.FreshAttr this.FreshAttr = [] return 0 } //更新星阵属性 Update(){ if (this.EquipAttr.length != 0) { for (let index = 0; index < this.EquipAttr.length; index++) { let attr = this.EquipAttr[index]; attr.Value = parseInt(String(attr.Base * (1 + 0.005 * this.Level))); } } if (this.FreshAttr.length != 0) { for (let index = 0; index < this.FreshAttr.length; index++) { let attr = this.FreshAttr[index]; attr.Value = parseInt(String(attr.Base * (1 + 0.005 * this.Level))); } } } } export default class StarMgr { StarList: Star[] = [] EquipID: number //装备的星阵id Player: any constructor(player: any) { this.Player = player this.EquipID = -1 //未装备星阵 //八个星阵位占位 for (let index = 0; index < 8; index++) { let star = new Star(index, 1) this.StarList.push(star) } } setDB(data: string) { let result = SKDataUtil.jsonBy(data) if (result == null ) { return } this.EquipID = result.equipid let list = result.list for (let index = 0; index < list.length; index++) { let starData = list[index]; let star = this.StarList[starData.id] star.UpdateData(starData) } } ToJson() { let obj: any = { equipid: this.EquipID, } let list = [] for (let index = 0; index < this.StarList.length; index++) { let star = this.StarList[index]; list.push(star.GetObject()) } obj.list = list return SKDataUtil.toJson(obj, "{}") } GetStarByID(starid: number): Star{ if(starid > this.StarList.length || starid < 0){ return null } return this.StarList[starid] } Upgrade(starid: number, upgrade: number){ if(starid > this.StarList.length || starid < 0){ return 1; //starid 不符合规则 } let star = this.StarList[starid] if (star.Level == 100) { return 2; //已经满级不需要再升级 } if (star.Level + upgrade > 100){ upgrade = 100 - star.Level } if(upgrade <= 0) { return 3; //升级参数错误 } let need = (2 * star.Level + upgrade - 1) * upgrade / 2 * 5 let has = ItemUtil.getBagItemCount(this.Player, 9654) if (need > has){ return 4; } this.Player.update_bagitem({ operation: 0, itemid: 9654, count: need }) star.Level = star.Level + upgrade star.Update() return 0 } GetNewStarAttr(starid: number){ if(starid > this.StarList.length || starid < 0){ return 1; //starid 不符合规则 } let hasMoney = this.Player.GetMoney(GameUtil.goldKind.Money) let has = ItemUtil.getBagItemCount(this.Player, 9655) if (5 > has || 300000 > hasMoney){ return 2 } this.Player.addMoney(GameUtil.goldKind.Money, -300000) this.Player.update_bagitem({ operation: 0, itemid: 9655, count: 5 }) let star = this.StarList[starid] star.Fresh() return 0 } ReplaceStarAttr(starid: number){ if(starid > this.StarList.length || starid < 0){ return 1; //starid 不符合规则 } let star = this.StarList[starid] if (star.FreshAttr.length == 0) { return 2 //错误: 未进行洗练 } star.Equip() return 0 } EquipStar(starid: number){ if(starid > this.StarList.length || starid < 0){ return 1; //starid 不符合规则 } this.EquipID = starid //todo: 更新玩家属性 return 0 } calculateStarAttr(attrArry: { [key: number]: number }) { if (this.EquipID == -1) return let star = this.StarList[this.EquipID] //额外增加冰混睡忘技能属性 if (this.EquipID == 7) { let buf = star.Level * 0.3 attrArry[EAttrTypeL1.K_SEAL] = Math.floor(attrArry[EAttrTypeL1.K_SEAL] + buf) attrArry[EAttrTypeL1.K_SLEEP] = Math.floor(attrArry[EAttrTypeL1.K_SLEEP] + buf) attrArry[EAttrTypeL1.K_CONFUSION] = Math.floor(attrArry[EAttrTypeL1.K_CONFUSION] + buf) attrArry[EAttrTypeL1.K_FORGET] = Math.floor(attrArry[EAttrTypeL1.K_FORGET] + buf) } if (star.EquipAttr.length == 0) return for (let index = 0; index < star.EquipAttr.length; index++) { let attr = star.EquipAttr[index]; attrArry[attr.ID] = Math.floor(attrArry[attr.ID] + attr.Value / 10) } } }