2025-04-23 09:34:08 +08:00

303 lines
10 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 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;
}
}