fix: 获取buff性能优化

This commit is contained in:
unanmed 2024-11-06 12:41:46 +08:00
parent c476303527
commit e9b9e4b069
5 changed files with 37 additions and 23 deletions

View File

@ -2896,22 +2896,17 @@ control.prototype.getStatusLabel = function (name) {
////// 设置某个属性的增幅值 ////// ////// 设置某个属性的增幅值 //////
control.prototype.setBuff = function (name, value) { control.prototype.setBuff = function (name, value) {
// 仅保留三位有效buff值 core.status.hero.buff[name] = value;
value = parseFloat(value.toFixed(3));
this.setFlag('__' + name + '_buff__', value);
}; };
////// 加减某个属性的增幅值 ////// ////// 加减某个属性的增幅值 //////
control.prototype.addBuff = function (name, value) { control.prototype.addBuff = function (name, value) {
var buff = this.getBuff(name) + value; core.status.hero.buff[name] += value;
// 仅保留三位有效buff值
buff = parseFloat(buff.toFixed(3));
this.setFlag('__' + name + '_buff__', buff);
}; };
////// 获得某个属性的增幅值 ////// ////// 获得某个属性的增幅值 //////
control.prototype.getBuff = function (name) { control.prototype.getBuff = function (name) {
return core.getFlag('__' + name + '_buff__', 1); return core.status.hero.buff[name] ?? 1;
}; };
////// 设置勇士的位置 ////// ////// 设置勇士的位置 //////

View File

@ -62,6 +62,21 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
if (h.magicDef === void 0 || h.magicDef === null) { if (h.magicDef === void 0 || h.magicDef === null) {
h.magicDef = 0; h.magicDef = 0;
} }
if (!core.status.hero.buff) {
const buff = {};
core.status.hero.buff = buff;
const toDelete = [];
for (const [key, value] of Object.entries(flags)) {
if (/__\w+_buff__/.test(key)) {
const name = key.slice(2, -7);
buff[name] = value;
toDelete.push(key);
}
}
toDelete.forEach(v => {
delete flags[v];
});
}
}, },
win: function (reason, norank, noexit) { win: function (reason, norank, noexit) {
// 游戏获胜事件 // 游戏获胜事件

View File

@ -1,5 +1,3 @@
import { WeatherController } from './../module/weather/weather';
import '@/module/weather/snow';
import { BgmController, bgm } from './audio/bgm'; import { BgmController, bgm } from './audio/bgm';
import { SoundController, SoundEffect, sound } from './audio/sound'; import { SoundController, SoundEffect, sound } from './audio/sound';
import { Focus, GameUi, UiController } from './main/custom/ui'; import { Focus, GameUi, UiController } from './main/custom/ui';
@ -176,8 +174,3 @@ Mota.register('module', 'Animation', Animation);
main.renderLoaded = true; main.renderLoaded = true;
Mota.require('var', 'hook').emit('renderLoaded'); Mota.require('var', 'hook').emit('renderLoaded');
const weather = new WeatherController();
Mota.require('var', 'hook').once('reset', () => {
weather.activate('snow');
});

View File

@ -71,19 +71,30 @@ function getRealStatus(
if (name === 'all') { if (name === 'all') {
const res: any = {}; const res: any = {};
Object.keys(core.status.hero).forEach(v => { for (const [key, value] of Object.entries(core.status.hero)) {
res[v] = getRealStatus(status, v as keyof HeroStatus, floorId); if (typeof value === 'number') {
}); res[key] = getRealStatus(
status,
key as keyof HeroStatus,
floorId
);
} else {
res[key] = value;
}
}
return res; return res;
} }
let s = (status?.[name] ?? core.status.hero[name]) as number; let s = (status[name] ?? core.status.hero[name]) as number;
if (s === null || s === void 0) { if (s === null || s === void 0) {
throw new ReferenceError( throw new ReferenceError(
`Wrong hero status property name is delivered: ${name}` `Wrong hero status property name is delivered: ${name}`
); );
} }
if (typeof s !== 'number') return s;
// 永夜、极昼 // 永夜、极昼
if (name === 'atk' || name === 'def') { if (name === 'atk' || name === 'def') {
s += NightSpecial.getNight(floorId); s += NightSpecial.getNight(floorId);
@ -108,10 +119,8 @@ function getRealStatus(
} }
// buff // buff
if (typeof s === 'number') { s *= core.status.hero.buff[name] ?? 1;
s *= flags[`__${name}_buff__`] ?? 1; s = Math.floor(s);
s = Math.floor(s);
}
return s; return s;
} }

View File

@ -965,4 +965,6 @@ interface HeroStatus {
x?: number; x?: number;
y?: number; y?: number;
floorId?: FloorIds; floorId?: FloorIds;
buff: Partial<Record<keyof NumbericHeroStatus, number>>;
} }