boss战回合攻击

This commit is contained in:
草莓 2025-02-15 23:10:29 +08:00
parent d9a5f79f7a
commit 5a3552c2c0
3 changed files with 1144 additions and 735 deletions

View File

@ -276,7 +276,7 @@ main.prototype.init = function (mode, callback) {
coreData[t] = main[t];
});
main.core.init(coreData, callback);
main.core.resize();
core.resize();
// 自动放缩最大化
if (!main.replayChecking) {
if (core.getLocalStorage("autoScale") == null) {

View File

@ -94,7 +94,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
);
});
},
},
"changingFloor": function (floorId, heroLoc) {
// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
// floorId为要切换到的楼层IDheroLoc表示勇士切换到的位置
@ -1867,7 +1867,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 如需强行终止行走可以在这里条件判定:
// core.stopAutomaticRoute();
},
},
"moveDirectly": function (x, y, ignoreSteps) {
// 瞬间移动x,y为要瞬间移动的点ignoreSteps为减少的步数可能之前已经被计算过
// 返回true代表成功瞬移false代表没有成功瞬移

View File

@ -2728,6 +2728,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
main.dom.boss5.style.width = obj.totalWidth + 3 + "px";
main.dom.boss5.style.height = obj.totalHeight + 3 + "px";
main.dom.boss6.style.width = obj.totalWidth + 3 + "px";
main.dom.boss6.style.height = obj.totalHeight + 3 + "px";
main.dom.boss7.style.width = obj.totalWidth + 3 + "px";
main.dom.boss7.style.height = obj.totalHeight + 3 + "px";
main.dom.boss8.style.width = obj.totalWidth + 3 + "px";
main.dom.boss8.style.height = obj.totalHeight + 3 + "px";
main.dom.boss.style.width = obj.totalWidth + 3 + "px";
main.dom.boss.style.height = obj.totalHeight + 3 + "px";
@ -8714,6 +8720,35 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
yellowgreen: "#9acd32",
transparent: "#0000",
};
// 计算两个数的最大公约数
function gcdOfTwo(a, b) {
while (b !== 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
// 计算任意项整数的最大公约数
function gcd(...numbers) {
if (numbers.length < 2) {
throw new Error("至少需要两个数");
}
return numbers.reduce((a, b) => gcdOfTwo(a, b));
}
// 计算两个数的最小公倍数
function lcmOfTwo(a, b) {
return (a * b) / gcdOfTwo(a, b);
}
// 计算任意项整数的最小公倍数
function lcm(...numbers) {
if (numbers.length < 2) {
throw new Error("至少需要两个数");
}
return numbers.reduce((a, b) => lcmOfTwo(a, b));
}
if (has(core.plugin.utils)) {
throw new ReferenceError(
@ -8721,6 +8756,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
);
}
core.plugin.utils = {
gcdOfTwo,
lcmOfTwo,
gcd,
lcm,
has,
slide,
backDir,
@ -8773,7 +8812,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
throw "未设置callback";
}
};
},
},
"音频系统": function () {
// 在此增加新插件
/* libs/thirdparty index.html
@ -16478,6 +16517,41 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
boss5.style.transform = "translate(-50%,-50%)";
const ctx5 = boss5.getContext("2d");
main.dom.boss5 = boss5;
const boss6 = document.createElement("canvas"); //boss战画布设置
boss6.style.position = "absolute";
boss6.style.zIndex = 305;
boss6.style.display = "none";
boss6.id = "boss6";
main.dom.gameGroup.insertAdjacentElement("afterend", boss6);
boss6.style.top = "50%";
boss6.style.left = "50%";
boss6.style.transform = "translate(-50%,-50%)";
const ctx6 = boss6.getContext("2d");
main.dom.boss6 = boss6;
const boss7 = document.createElement("canvas"); //boss战画布设置
boss7.style.position = "absolute";
boss7.style.zIndex = 306;
boss7.style.display = "none";
boss7.id = "boss7";
main.dom.gameGroup.insertAdjacentElement("afterend", boss7);
boss7.style.top = "50%";
boss7.style.left = "50%";
boss7.style.transform = "translate(-50%,-50%)";
const ctx7 = boss7.getContext("2d");
main.dom.boss7 = boss7;
const boss8 = document.createElement("canvas"); //boss战画布设置
boss8.style.position = "absolute";
boss8.style.zIndex = 307;
boss8.style.display = "none";
boss8.id = "boss8";
main.dom.gameGroup.insertAdjacentElement("afterend", boss8);
boss8.style.top = "50%";
boss8.style.left = "50%";
boss8.style.transform = "translate(-50%,-50%)";
const ctx8 = boss8.getContext("2d");
main.dom.boss8 = boss8;
boss.onclick = function (e) {
try {
e.preventDefault();
@ -16496,7 +16570,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
main.log(ee);
}
};
const { sleep } = core.plugin.utils
class Boss {
constructor() {
@ -16504,14 +16578,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
this.bg = "bg_3512.webp";
this.heroImage = "tati_310101.webp"
this.hero = { hp: 1000, atk: 100, def: 100, spell: 100, speed: 10, mdef: 10 }
this.boss = { name: "菲奥奈", id: "angel", image: "tati_050143.webp", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 }
this.boss = { name: "菲奥奈", id: "angel", image: "tati_050143.webp", hp: 1000, atk: 200, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 }
this.enemy = [
{ name: "小蝙蝠", id: "bat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "红蝙蝠", id: "redBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "大蝙蝠", id: "bigBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "绿色史莱姆", id: "greenSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "红色史莱姆", id: "redSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "黑色史莱姆", id: "blackSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10 },
{ name: "小蝙蝠", id: "bat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
{ name: "红蝙蝠", id: "redBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
{ name: "大蝙蝠", id: "bigBat", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
{ name: "绿色史莱姆", id: "greenSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
{ name: "红色史莱姆", id: "redSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
{ name: "黑色史莱姆", id: "blackSlime", hp: 1000, atk: 100, def: 100, speed: 10, mdef: 10, skill: ['普通攻击', '重斩'], index: 0 },
]
this.bossImage = "tati_050143.webp"
this.selection = "boss"
@ -16525,7 +16599,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
[],
[]
]
this.skills = { //技能列表,便于调用(可通过this.skills[name]调用)
"菲奥奈": ['普通攻击', '重斩']
}
this.turn = 0;
this.playingAnimate = new Set();
}
click(px, py) {
//点击效果
const makeBox = ([x, y], [w, h]) => {
@ -16543,18 +16623,169 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
const pos = [px, py];
}
async bossStart() {
boss.style.display = "block"
this.turn = 0
core.lockControl()
await this.blackBg()
this.moveboss()
await this.movehero()
await this.moveStatus()
this.drawenemy()
this.update()
this.fight()
}
async bossEnd() {
hero.hp = this.hero.hp
await this.close()
core.unlockControl()
core.unlockControl()
core.updateStatusBar()
if (hero.hp <= 0) {
hero.hp = 0
core.events.lose("BOSS战失败");
}
}
async fight() {
await this.drawturn()
const fightList = []
fightList.push(['hero', this.hero.speed])
if (this.boss.hp > 0) fightList.push(["boss", this.boss.speed])
this.enemy.forEach((v, i) => {
if (v.id && v.hp > 0) fightList.push([i, v.speed])
})
fightList.sort((a, b) => b[1] - a[1])
let damage;
for (const v of fightList) {
switch (v[0]) {
case 'hero':
await this.playanimate("sword", 1800, 800) //播放动画sword
await sleep(200) //等待200ms
break;
case 'boss':
if (this.boss.hp > 0) {
this.selection = "boss"
this.update()
switch (this.boss.skill[this.boss.index]) { //这里写boss技能的效果
case "普通攻击":
damage = Math.max(this.boss.atk - this.hero.def, 0) //基础伤害
damage = Math.floor(damage * this.boss.speed / this.hero.speed) //速度比值伤害加成
this.hero.hp -= damage //承受伤害
core.status.hero.statistics.battleDamage += damage; //数据统计记录伤害
await this.playanimate("sword", 350, 800) //播放动画sword
await sleep(200) //等待200ms
break;
}
this.boss.index++
if (this.boss.index >= this.boss.skill.length) this.boss.index = 0
}
break;
default:
const enemy = this.enemy[v[0]];
if (enemy.hp > 0) {
this.selection = v[0]
this.update()
switch (enemy.skill[enemy.index]) { //这里写boss召唤物小怪的技能效果
case "普通攻击":
damage = Math.max(enemy.atk - this.hero.def, 0) //基础伤害
damage = Math.floor(damage * enemy.speed / enemy.speed) //速度比值伤害加成
this.hero.hp -= damage //承受伤害
core.status.hero.statistics.battleDamage += damage; //数据统计记录伤害
switch (enemy.id) { //根据怪物id选取不同的特效
case "bat":
await this.playanimate("sword", 350, 800) //播放动画sword
break;
case "redBat":
await this.playanimate("Fire01", 350, 800) //播放动画Fire01
break;
case "bigBat":
await this.playanimate("Fire02", 350, 800) //播放动画Fire02
break;
case "greenSlime":
await this.playanimate("005-Attack03", 350, 800) //播放动画005-Attack03
break;
case "redSlime":
await this.playanimate("012-Heal01", 350, 800) //播放动画012-Heal01
break;
case "blackSlime":
await this.playanimate("sword", 350, 800) //播放动画sword
break;
}
await sleep(200) //等待200ms
break;
}
if (enemy.index >= enemy.length) enemy.index = 0
}
break;
}
this.update()
}
let end = true;
if (this.boss.hp > 0) end = false;
this.enemy.forEach(v => { if (v.hp > 0) end = false })
if (this.hero.hp <= 0) end = true
if (end) { this.bossEnd() } else { this.fight() }
}
drawturn() {
boss8.style.display = "block"
this.turn += 1
let time = 0,
frame = 0,
frame2 = 0,
right = 1,
once = 10;
return new Promise((resolve) => {
core.registerAnimationFrame("drawturn", true, (temptime) => {
if (temptime - time > 1000 / 60) {
time = temptime
frame += 1 * right
core.clearMap(ctx)
if (core.domStyle.isVertical) {
ctx.canvas.width = 1248;
ctx.canvas.height = 2028;
ctx.save(); //保存设置
ctx.translate(1248, 0); //重新定位右上角为基准
ctx.rotate(Math.PI / 2); //旋转90度
} else {
ctx.canvas.width = 2028;
ctx.canvas.height = 1248;
}
core.fillRect(ctx, 0, 624 - once * frame, 2028, once * frame * 2, 'rgba(0,0,0,0.7)')
core.setTextAlign(ctx, "center")
core.fillBoldText1(
ctx,
'ROUND ' + this.turn,
1014,
624,
"#FFFFFF",
"#000000",
6,
core.ui._buildFont(frame * 5, true)
)
if (1014 - once * frame * 7 <= 0) {
frame -= 1
frame2++
if (frame2 > 30) right = -1
}
if (frame < 0) {
core.clearMap(ctx)
core.unregisterAnimationFrame("drawturn")
resolve()
}
}
})
})
}
drawenemy() {
let block,
@ -16567,7 +16798,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
farme += 1
let animate = Math.floor(farme / 30),
posx = 700,
posy = 350;
posy = 500;
core.clearMap(ctx5)
if (core.domStyle.isVertical) {
ctx5.canvas.width = 1248;
@ -16584,7 +16815,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (enemy) {
core.drawWindowSkin("winskin.webp", ctx5, 650, 250, 400, 660, null, null, null, 3)
if (this.selection === "boss") core.strokeRect(ctx5, 800, 600, 100, 150, "yellow", 6)
if (this.selection === "boss") core.strokeRect(ctx5, 800, 300, 100, 150, "yellow", 6)
const bossBlock = core.getBlockInfo(this.boss.id)
core.drawImage(
ctx5,
@ -16594,7 +16825,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
48,
800,
600,
300,
96,
144
);
@ -16611,7 +16842,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
144
);
for (let i = 0; i < this.enemy.length; i++) {
if (this.enemy[i].id) {
if (this.enemy[i].id && this.enemy[i].hp > 0) {
block = core.getBlockInfo(this.enemy[i].id)
} else {
posx += 100
@ -16717,7 +16948,158 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
this.drawboss()
this.drawhero()
this.drawStatus()
let dodraw = false
for (let i = 0; i < this.enemy.length; i++) {
if (this.enemy[i].id && this.enemy[i].hp > 0) { dodraw = true }
}
if (dodraw === true) this.drawenemy()
}
playanimate(name, x, y, scalex = 10, scaley = 10) {
const one = {
name: name,
x: x,
y: y,
scalex: scalex,
scaley: scaley,
farme: 0
}
let time = 0
boss6.style.display = "block"
return new Promise((resolve) => {
core.registerAnimationFrame("animateboss", true, (timestamp) => {
if (timestamp - time > 1000 / 60) {
time = timestamp;
core.clearMap(ctx6);
const data = flags["animate_" + one.name];
if (core.domStyle.isVertical) {
ctx6.canvas.width = 1248;
ctx6.canvas.height = 2028;
ctx6.save(); //保存设置
ctx6.translate(1248, 0); //重新定位右上角为基准
ctx6.rotate(Math.PI / 2); //旋转90度
} else {
ctx6.canvas.width = 2028;
ctx6.canvas.height = 1248;
}
if (!data) {
core.registerAnimationFrame("animateboss")
resolve()
} else {
data.imageList.forEach(function (image) {
if (
one.farme >= (image.beforefarme ?? 0) &&
one.farme <= (image.afterfarme ?? data.allFarme)
) {
const img = core.material.images.images?.[image.image];
if (img) {
const gla = image.globalAlpha ?? 100;
const agla = image.aglobalAlpha ?? gla,
beforefarme = image.beforefarme ?? 0;
const afterfarme = image.afterfarme ?? data.allFarme;
ctx6.globalAlpha =
(gla +
((agla - gla) * (one.farme - beforefarme)) /
(afterfarme - beforefarme || 1)) /
100;
const cx =
(image.cx ?? 0) +
(((image.acx ?? 0) - (image.cx ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
cy =
(image.cy ?? 0) +
(((image.acy ?? 0) - (image.cy ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
cw =
(image.cw ?? img.width) +
(((image.acw ?? img.width) - (image.cw ?? img.width)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
ch =
(image.ch ?? img.height) +
(((image.acw ?? img.height) - (image.cw ?? img.height)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
x =
(image.x ?? 0) +
(((image.ax ?? 0) - (image.x ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
y =
(image.y ?? 0) +
(((image.ay ?? 0) - (image.y ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
w =
(image.w ?? one.width) +
(((image.aw ?? one.width) - (image.w ?? one.width)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
h =
(image.h ?? one.height) +
(((image.aw ?? one.height) - (image.w ?? one.height)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
angle =
(Math.PI *
((image.image.angle ?? 0) +
(((image.aangle ?? 0) - (image.image.angle ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1))) /
180;
core.drawImage(
ctx6,
img,
cx,
cy,
cw,
ch,
one.x + (x - data.px) * one.scalex,
one.y + (y - data.py) * one.scaley,
w * one.scalex,
h * one.scaley,
angle
);
}
}
});
data.soundList.forEach(function (sound) {
const lisen =
sound.sound &&
core.sounds[sound.sound] &&
core.musicStatus.soundStatus;
if (one.farme == sound.startfarme && lisen) {
if (sound.stopbefore) core.stopSound();
core.playSound(sound.sound);
}
});
one.farme++;
ctx6.restore();
if (one.farme > data.allFarme) {
core.clearMap(ctx6)
core.registerAnimationFrame("animateboss")
resolve()
}
}
}
});
})
}
drawboss() {
core.clearMap(ctx3)
if (core.domStyle.isVertical) {
@ -17391,7 +17773,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
close() {
let globalAlpha = 0,
time = 0
boss.style.display = 'block'
return new Promise((resolve) => {
core.registerAnimationFrame("closeblack", true, (temptime) => {
if (temptime - time > 1000 / 60) {
@ -17424,6 +17805,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
boss3.style.display = 'none'
boss4.style.display = 'none'
boss5.style.display = 'none'
boss6.style.display = 'none'
boss7.style.display = 'none'
boss8.style.display = 'none'
core.registerAnimationFrame("closeblack2", true, (temptime) => {
if (temptime - time > 1000 / 60) {
time = temptime
@ -17439,7 +17824,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx.canvas.height = 1248;
}
ctx.globalAlpha = globalAlpha
core.fillRect(ctx1, 0, 0, 2028, 1248, "#000000");
core.fillRect(ctx, 0, 0, 2028, 1248, "#000000");
ctx.restore();
globalAlpha -= 1 / 30
if (globalAlpha < 0) {
@ -19249,7 +19634,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
});
}
});
},
},
"intro&loop": function () {
// 在此增加新插件
this.introAndLoop = function (intro, time, loop) {
@ -19605,14 +19990,15 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
const ctx = animateAttack.getContext("2d");
main.dom.gameDraw.appendChild(animateAttack);
const { lcm, gcd } = core.plugin.utils
this.drawAttackAnimate = function (
heroInfo,
oneTurn,
enemyInfo,
equipInfo,
farme,
damageInfo
damageInfo,
onegcd
) {
let attack = false;
if (heroInfo.isAttack) attack = true;
@ -19852,8 +20238,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
"bold 36px pala"
);
if (!attack) enemyInfo.now += (enemyInfo.speed / oneTurn) * 215;
let enemynow = Math.min(100 + enemyInfo.now, 315);
if (!attack) enemyInfo.now += enemyInfo.speed / onegcd;
let enemynow = Math.min(100 + enemyInfo.now / oneTurn * 215, 315);
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.moveTo(enemynow, 100);
@ -19891,8 +20277,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}
core.drawLine(ctx, 100, 105, 315, 105, "#FFFFFF", 5);
equipInfo.forEach(function (v) {
if (!attack) v.now += (v.speed / oneTurn) * 215;
let vnow = Math.min(100 + v.now, 315);
if (!attack) v.now += v.speed / onegcd;
let vnow = Math.min(100 + v.now / oneTurn * 215, 315);
ctx.beginPath();
ctx.moveTo(vnow, 100);
ctx.lineTo(vnow + 3, 90);
@ -19903,41 +20289,60 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.drawIcon(ctx, v.id, vnow - 16, 64, 32, 32);
});
if (!attack) heroInfo.now += (heroInfo.speed / oneTurn) * 215;
let heronow = Math.min(100 + heroInfo.now, 315);
if (!attack) heroInfo.now += hero.speed / onegcd;
let heronow = Math.min(100 + heroInfo.now / oneTurn * 215, 315);
ctx.beginPath();
ctx.moveTo(heronow, 100);
ctx.lineTo(heronow + 3, 90);
ctx.lineTo(heronow - 3, 90);
ctx.lineTo(heronow + 5, 90);
ctx.lineTo(heronow - 5, 90);
ctx.closePath();
ctx.fill();
core.drawImage(ctx, "hero.webp", 0, 0, 32, 19, heronow - 16, 70, 32, 19);
let nowattacking = false
if (heroInfo.now >= oneTurn && !heroInfo.isAttack) {
if (heroInfo.now >= 215 && !heroInfo.isAttack) {
heroInfo.isAttack = true;
nowattacking = true
}
if (enemyInfo.now >= oneTurn && !enemyInfo.isAttack) {
enemyInfo.isAttack = true;
nowattacking = true
}
const equipanimate = []
equipInfo.forEach(v => {
if (v.now >= oneTurn && !v.isAttack) {
v.isAttack = true;
nowattacking = true
equipanimate.push(v)
}
});
if (!attack && nowattacking) {
if (heroInfo.isAttack) {
animateOnAttack("sword", true, () => {
heroInfo.now -= 215;
heroInfo.now = 0;
heroInfo.isAttack = false;
});
}
if (enemyInfo.now >= 215 && !enemyInfo.isAttack) {
enemyInfo.isAttack = true;
if (enemyInfo.isAttack) {
animateOnAttack("sword", false, () => {
enemyInfo.now -= 215;
enemyInfo.now = 0;
enemyInfo.isAttack = false;
});
}
equipInfo.forEach((v) => {
if (v.now >= 215 && !v.isAttack) {
v.isAttack = true;
if (equipanimate.length > 0) {
equipanimate.forEach(v => {
animateOnAttack("sword", true, () => {
v.now -= 215;
v.now = 0;
v.isAttack = false;
});
})
}
}
});
};
function animateOnAttack(name, onenemy, callback) {
@ -19985,15 +20390,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
enemyInfo.name = core.material.enemys[enemyId].name;
enemyInfo.now = 0;
enemyInfo.isAttack = false;
let oneTurn = heroInfo.speed + enemyInfo.speed;
let oneTurn = [heroInfo.speed, enemyInfo.speed];
if (equipInfo.length > 0) {
for (let i; i < equipInfo.length - 1; i++) {
equipInfo[i].now = 0;
equipInfo[i].isAttack = false;
oneTurn += equipInfo[i].speed;
oneTurn.push(equipInfo[i].speed);
}
}
oneTurn *= 25;
const onegcd = gcd(...oneTurn)
oneTurn = lcm(...oneTurn) / onegcd
if (oneTurn < 60) oneTurn *= Math.round(60 / oneTurn)
let time = 0,
farme = 0;
@ -20006,7 +20414,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
enemyInfo,
equipInfo,
farme,
damageInfo
damageInfo,
onegcd
);
farme++;
}