241 lines
7.0 KiB
TypeScript
241 lines
7.0 KiB
TypeScript
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)
|
|
}
|
|
}
|
|
} |