boss战回合攻击
This commit is contained in:
parent
d9a5f79f7a
commit
5a3552c2c0
2
main.js
2
main.js
@ -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) {
|
||||
|
@ -94,7 +94,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
}
|
||||
);
|
||||
});
|
||||
},
|
||||
},
|
||||
"changingFloor": function (floorId, heroLoc) {
|
||||
// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
|
||||
// floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置
|
||||
@ -1867,7 +1867,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
|
||||
// 如需强行终止行走可以在这里条件判定:
|
||||
// core.stopAutomaticRoute();
|
||||
},
|
||||
},
|
||||
"moveDirectly": function (x, y, ignoreSteps) {
|
||||
// 瞬间移动;x,y为要瞬间移动的点;ignoreSteps为减少的步数,可能之前已经被计算过
|
||||
// 返回true代表成功瞬移,false代表没有成功瞬移
|
||||
|
@ -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++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user