xy-server/game/object/Scheme.ts

303 lines
10 KiB
TypeScript
Raw Normal View History

2025-04-23 09:34:08 +08:00
import Player from "./Player";
import GameUtil from "../core/GameUtil";
import SKDataUtil from "../gear/SKDataUtil";
import { MsgCode } from "../role/EEnum";
export default class Scheme {
schemeItemList: any;
schemeId: string;
roleId: any;
status: number;
schemeName: any;
player: Player;
content: any;
constructor(player: any, schemeMgr: any, name: any) {
this.schemeItemList = {};
this.schemeId = "0";
this.roleId = player.roleid;
this.status = 0; //-1 未开放0已开放未激活 1已激活
this.schemeName = name;
this.player = player;
this.content = {};
}
initDefaultData() {
let partnerData = SKDataUtil.clone(this.player.partnerMgr.vecChuZhan);
let xlevel = this.player.xiulevel;
for (const key in this.player.addattr1) {
if (this.player.addattr1.hasOwnProperty(key)) {
xlevel = xlevel - this.player.addattr1[key];
}
}
this.content = {
curEquips: {},
attribute: {
//baseQianNeng:this.player.qianneng,
qianNeng: this.player.qianneng,//this.player.qianneng,
addPoint: SKDataUtil.clone(this.player.addattr2)
},
defense: {
//baseXiuLevel:this.player.xiulevel,
xiuLevel: xlevel,
xiuPoint: SKDataUtil.clone(this.player.addattr1)
},
partner: partnerData
};
}
changeSchemeName(data: any) {
this.schemeName = data;
this.player.send('s2c_scheme_changeName', {
ecode: MsgCode.SUCCESS,
schemeId: this.schemeId.toString(),
newName: this.schemeName
});
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
}
syncPartner() {
let partnerData = SKDataUtil.clone(this.player.partnerMgr.vecChuZhan);
this.content.partner = partnerData
}
syncEquipsData(curEquipsData: boolean) {
this.content.curEquips = curEquipsData;
}
updateEquips(equipId: any, type: any) {
let equip = this.player.equipObjs[equipId];
let fullEquipData = equip.getFullData(this.player.roleid);
if (fullEquipData.NeedGrade > this.player.level || fullEquipData.NeedRei > this.player.relive) {
this.player.send('s2c_notice', {
strRichText: '角色等级不足,尚不能使用!'
});
return;//转生或等级不符合
}
if (fullEquipData.Shuxingxuqiu) { //属性需求不符合
for (const key in fullEquipData.Shuxingxuqiu) {
if (this.player.getAttr1(key) < fullEquipData.Shuxingxuqiu[key]) {
this.player.send('s2c_notice', {
strRichText: '角色属性不足,尚不能使用!'
});
return;
}
}
}
if (equip) {
let result = false;
let curEquips = this.content.curEquips;
let unloadEquipId = -1;
if (curEquips.hasOwnProperty(equip.EIndex)) {
if (curEquips[equip.EIndex] == equipId) {
unloadEquipId = equipId;
delete curEquips[equip.EIndex];
result = true;
} else {
unloadEquipId = curEquips[equip.EIndex];
if (this.checkEquips(equipId)) {
curEquips[equip.EIndex] = equipId;
result = true;
}
}
} else {
if (this.checkEquips(equipId)) {
curEquips[equip.EIndex] = equipId;
result = true;
}
}
if (result) {
this.player.send('s2c_scheme_updateEquip', {
ecode: MsgCode.SUCCESS,
schemeId: this.schemeId.toString(),
curEquips: SKDataUtil.toJson(curEquips,"{}"),
type: type,
unloadEquipId: unloadEquipId.toString(),
});
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
}
}
}
syncPoint() {
if (this.status == 1) {
//激活,则同步所有加点数据
this.content.attribute.qianNeng = this.player.qianneng;
this.content.attribute.addPoint = SKDataUtil.clone(this.player.addattr2);
this.content.defense.xiuPoint = SKDataUtil.clone(this.player.addattr1);
this.content.defense.xiuLevel = this.player.xiulevel;
for (var key in this.content.defense.xiuPoint) {
if (this.content.defense.xiuPoint.hasOwnProperty(key)) {
this.content.defense.xiuLevel -= this.content.defense.xiuPoint[key];
}
}
} else {
//未激活,如果潜能和修炼点数据总值发生变化,则同步数据
let curXLevel = this.content.defense.xiuLevel;
for (var key in this.content.defense.xiuPoint) {
if (this.content.defense.xiuPoint.hasOwnProperty(key)) {
curXLevel += this.content.defense.xiuPoint[key];
}
}
let diffXiu = this.player.xiulevel - curXLevel;
this.content.defense.xiuLevel += (diffXiu >= 0 ? diffXiu : 0);
let curQianneng = this.content.attribute.qianNeng;
for (var key in this.content.attribute.addPoint) {
if (this.content.attribute.addPoint.hasOwnProperty(key)) {
curQianneng += this.content.attribute.addPoint[key];
}
}
let diffValue = this.player.getTotalQianneng() - curQianneng;
this.content.attribute.qianNeng += (diffValue >= 0 ? diffValue : 0);
}
}
deleteEquips(delId: any) {
for (var it in this.content.curEquips) {
if (this.content.curEquips.hasOwnProperty(it)) {
let equipId = this.content.curEquips[it]
if (equipId == delId)
delete this.content.curEquips[it]
}
}
}
schemeEquip(data: any){
for(let scheme in this.content.curEquips){
let eqiup = this.content.curEquips[scheme];
if (eqiup) {
this.updateEquips(eqiup, 1);
}
}
}
checkEquips(checkId: any) {
let result = false;
for (var it in this.content.curEquips) {
if (this.content.curEquips.hasOwnProperty(it)) {
let equipId = this.content.curEquips[it]
if (equipId == checkId)
result = true;
}
}
result = this.player.checkSchemeEquip(checkId);
return result;
}
addCustomPoint(data: any) {
this.content.attribute.addPoint = SKDataUtil.jsonBy(data.addPoint);
this.content.attribute.qianNeng = data.qianNeng;
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
}
addXiulianPoint(data: any) {
this.content.defense.xiuPoint = SKDataUtil.jsonBy(data.xiulianPoint);
this.content.defense.xiuLevel = data.xiulevel;
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
}
resetXiulianPoint(data: any) {
let strErr = this.player.CostFee(GameUtil.goldKind.Money, 200000);
if (strErr != "") {
this.player.send('s2c_scheme_resetXiulianPoint', {
ecode: MsgCode.FAILED,
errorMsg: strErr
})
return;
}
this.content.defense.xiuLevel = this.player.xiulevel;
for (var key in this.content.defense.xiuPoint) {
if (this.content.defense.xiuPoint.hasOwnProperty(key)) {
this.content.defense.xiuPoint[key] = 0;
}
}
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
this.player.send('s2c_scheme_resetXiulianPoint', {
ecode: MsgCode.SUCCESS,
errorMsg: ''
})
}
changePartner(data: any) {
this.content.partner[data.order] = data.partnerId;
if (this.status == 1) {
this.checkEquipExist();
this.player.activateScheme();
}
}
checkEquipExist() {
for (var key in this.content.curEquips) {
if (this.content.curEquips.hasOwnProperty(key)) {
if (!this.player.checkEquipExist(this.content.curEquips[key])) {
delete this.content.curEquips[key];
}
}
}
}
activateScheme(status: any) {
//如果方案里的装备已经不存在,则从方案中删除
this.checkEquipExist();
this.status = status;
if (this.status == 1) {
let strErr = this.player.CostFee(GameUtil.goldKind.Money, 100000);
if (strErr != '') {
this.status = 0;
return;
}
console.log(typeof this.schemeId)
this.player.send('s2c_scheme_activate', {
ecode: MsgCode.SUCCESS,
schemeId: this.schemeId.toString()
});
this.player.activateScheme();
}
}
onUse() {
let strErr = this.player.CostFee(GameUtil.goldKind.Money, 10000000);
if (strErr != "") {
return;
}
this.player.send('s2c_scheme_use', {
ecode: MsgCode.SUCCESS,
schemeId: this.schemeId.toString()
});
this.status = 0;
}
toObj() {
let obj: any = {};
obj.schemeId = this.schemeId == undefined ? "" : this.schemeId.toString();
obj.roleId = this.roleId;
obj.status = this.status;
obj.schemeName = this.schemeName;
obj.content = SKDataUtil.toJson(this.content,"{}");
if (obj.status == undefined){
obj.status = 0;
}
return obj;
}
}