From 44ce844d2f073811a98f94285d8c4acf51d3eeed Mon Sep 17 00:00:00 2001 From: strawberry <2806566736@.qq.com> Date: Wed, 20 Aug 2025 16:48:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E5=86=8C=E5=AE=8C=E6=88=90=EF=BC=8C?= =?UTF-8?q?=E4=BD=86=E6=80=A7=E8=83=BD=E7=95=A5=E5=B7=AE=EF=BC=8C=E8=80=83?= =?UTF-8?q?=E8=99=91webgl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/plugins.js | 496 ++++++++++++++++++++++++++++----------------- 1 file changed, 309 insertions(+), 187 deletions(-) diff --git a/project/plugins.js b/project/plugins.js index 0cee401..efad9d4 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -3821,7 +3821,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.isMoving() ) return; - core.useItem("fly"); + core.useFly(true); return; } /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3]) @@ -3839,7 +3839,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.isMoving() ) return; - core.useItem("fly"); + core.useFly(true); return; } /* @@ -4001,37 +4001,38 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = x, y, floorId, - config={} + config = {} ) { var mon_hp = info.mon_hp, - hero_atk = config.atk??core.status.hero.atk, + hero_atk = config.atk ?? core.status.hero.atk, mon_def = info.mon_def, - pre = info.damage; + damage=info.damage + pre = info.mon_turn; var list = []; var start_atk = hero_atk; if (info.__over__) { start_atk += info.__overAtk__; list.push([info.__overAtk__, -info.damage]); } - var start=core.clone(config) - var mid=core.clone(config) - var end=core.clone(config) + var start = core.clone(config) + var mid = core.clone(config) + var end = core.clone(config) var calNext = function (currAtk, maxAtk) { - start.atk = Math.floor(currAtk) - end.atk = Math.floor(maxAtk); + start.atk = Math.floor(currAtk) + end.atk = Math.floor(maxAtk); if (start.atk > end.atk) return null; while (start.atk < end.atk) { - mid.atk = Math.floor((start.atk + end.atk) / 2); + mid.atk = Math.floor((start.atk + end.atk) / 2); if (mid.atk - start.atk > end.atk - mid.atk) mid.atk--; var nextInfo = core.enemys.getDamageInfo( - enemy, mid , + enemy, mid, x, y, floorId ); if (nextInfo == null || typeof nextInfo == "number") return null; - if (pre > nextInfo.damage) end.atk = mid.atk; + if (pre > nextInfo.mon_turn&&damage>nextInfo.damage) end.atk = mid.atk; else start.atk = mid.atk + 1; } var nextInfo = core.enemys.getDamageInfo( @@ -4042,16 +4043,17 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ); return nextInfo == null || typeof nextInfo == "number" || - nextInfo.damage >= pre ? - null : [start.atk, nextInfo.damage]; + nextInfo.mon_turn >= pre ||nextInfo.damage>=damage? + null : [start.atk, nextInfo.damage, nextInfo.mon_turn]; }; var currAtk = start_atk; while (true) { - var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER, pre); + var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER,damage, pre); if (next == null) break; currAtk = next[0]; - pre = next[1]; - list.push([currAtk - hero_atk, info.damage - pre]); + damage=next[1]; + pre = next[2]; + list.push([currAtk - hero_atk, info.damage - damage]); if (pre <= 0 && !core.flags.enableNegativeDamage) break; if (list.length >= number) break; } @@ -4155,7 +4157,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ctx.fillStyle = style; ctx.fillText(text, x, y); } - + events.prototype.battle = function (id, x, y, force, callback) { core.saveAndStopAutomaticRoute(); id = id || core.getBlockId(x, y); @@ -4333,10 +4335,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.fillText('data', tip.text, tip.textX, 33 + 42 * k, '#FFFFFF'); core.setAlpha('data', 1); } -let time=0 + let time = 0 control.prototype._animateFrame_tip = function (timestamp) { let delta - core.animateFrame.tip??=[] + core.animateFrame.tip ??= [] if (core.animateFrame.tip.length === 0) return; if (timestamp - time <= 30) return; @@ -4395,7 +4397,7 @@ let time=0 } } core.animateFrame.tip.push(one) - if(core.animateFrame.tip.length>4)core.animateFrame.tip.shift() + if (core.animateFrame.tip.length > 4) core.animateFrame.tip.shift() } }, "额外信息": function () { @@ -21840,7 +21842,8 @@ let time=0 var mon_hp = info.mon_hp, hero_speed = config.speed ?? core.status.hero.speed, mon_def = info.mon_def, - pre = info.damage; + damage = info.damage + pre = info.mon_turn; var list = []; var start_speed = hero_speed; var start = core.clone(config) @@ -21856,19 +21859,20 @@ let time=0 if (mid.speed - start.speed > end.speed - mid.speed) mid.speed--; var nextInfo = core.enemys.getDamageInfo(enemy, mid, x, y, floorId); if (nextInfo == null || (typeof nextInfo == 'number')) return null; - if (pre > nextInfo.damage) end.speed = mid.speed; + if (pre > nextInfo.mon_turn && damage > nextInfo.damage) end.speed = mid.speed; else start.speed = mid.speed + 1; } var nextInfo = core.enemys.getDamageInfo(enemy, start, x, y, floorId); - return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.damage >= pre ? null : [start.speed, nextInfo.damage]; + return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.mon_turn >= pre || nextInfo.damage >= damage ? null : [start.speed, nextInfo.damage, nextInfo.mon_turn]; } var currSpeed = start_speed; while (true) { - var next = calNext(currSpeed + 1, Number.MAX_SAFE_INTEGER, pre); + var next = calNext(currSpeed + 1, Number.MAX_SAFE_INTEGER, damage, pre); if (next == null) break; currSpeed = next[0]; - pre = next[1]; - list.push([currSpeed - hero_speed, info.damage - pre]); + damage = next[1] + pre = next[2]; + list.push([currSpeed - hero_speed, info.damage - damage]); if (pre <= 0 && !core.flags.enableNegativeDamage) break; if (list.length >= number) break; } @@ -21880,7 +21884,7 @@ let time=0 if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; number = number || 1; - var info = core.getDamageInfo(enemy, null, x, y, floorId); + var info = core.getDamageInfo(enemy, config, x, y, floorId); if (info == null) { // 如果未破防... return [ ['?', '?'] @@ -21898,8 +21902,8 @@ let time=0 var mon_hp = info.mon_hp, hero_spell = config.spell ?? core.status.hero.spell, mon_def = info.mon_def, - turn = info.mon_turn, - pre = info.damage; + pre = info.mon_turn, + damage = info.damage; var list = []; var start_spell = hero_spell; var start = core.clone(config) @@ -21915,19 +21919,20 @@ let time=0 if (mid.spell - start.spell > end.spell - mid.spell) mid.spell--; var nextInfo = core.enemys.getDamageInfo(enemy, mid, x, y, floorId); if (nextInfo == null || (typeof nextInfo == 'number')) return null; - if (turn > nextInfo.mon_turn) end.spell = mid.spell; + if (pre >= nextInfo.mon_turn & damage > nextInfo.damage) end.spell = mid.spell; else start.spell = mid.spell + 1; } var nextInfo = core.enemys.getDamageInfo(enemy, start, x, y, floorId); - return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.mon_turn >= turn ? null : [start.spell, nextInfo.damage]; + return nextInfo == null || (typeof nextInfo == 'number') || (nextInfo.mon_turn >= pre || nextInfo.damage >= damage) ? null : [start.spell, nextInfo.damage, nextInfo.mon_turn]; } var currSpell = start_spell; while (true) { - var next = calNext(currSpell + 1, Number.MAX_SAFE_INTEGER, pre, turn); + var next = calNext(currSpell + 1, Number.MAX_SAFE_INTEGER, damage, pre); if (next == null) break; currSpell = next[0]; - pre = next[1]; - list.push([currSpell - hero_spell, info.damage - pre]); + pre = next[2]; + damage = next[1]; + list.push([currSpell - hero_spell, info.damage - damag]); if (pre <= 0 && !core.flags.enableNegativeDamage) break; if (list.length >= number) break; } @@ -22066,31 +22071,31 @@ let time=0 core.fillText(this.left, "无恶意目标", 150, 214, '#999999', core.ui._buildFont(34, true)); core.fillText(this.right, "合上书本", 254, 380, '#000000', core.ui._buildFont(16, true)); } - drawBoxAnimate(ctx, dir) { - const blockInfo = core.getBlockInfo(this.enemys[this.page + dir].id) + drawBoxAnimate(ctx, page, x, y) { + const blockInfo = core.getBlockInfo(this.enemys[page].id) if (blockInfo.bigImage) { core.status.boxAnimateObjs.push({ bigImage: blockInfo.bigImage, face: blockInfo.face, - centerX: 150, - centerY: 50, + centerX: x ?? 150, + centerY: y ?? 50, max_width: 60, ctx: ctx, nobackground: true }); } else if (blockInfo.height >= 48) { - var originEnemy = core.material.enemys[this.enemys[this.page + dir]] || {}; + var originEnemy = core.material.enemys[this.enemys[page]] || {}; if (originEnemy.is32x32 == null) { originEnemy.is32x32 = core.ui._drawBook_is32x32(blockInfo); } if (originEnemy.is32x32) { core.status.boxAnimateObjs.push({ - 'bgx': 134, - 'bgy': 34, + 'bgx': x ? x - 16 : 134, + 'bgy': y ? y - 16 : 34, 'bgWidth': 32, 'bgHeight': 32, - 'x': 134, - 'y': 34, + 'x': x ? x - 16 : 134, + 'y': y ? y - 16 : 34, 'height': 32, 'animate': blockInfo.animate, 'image': blockInfo.image, @@ -22101,12 +22106,12 @@ let time=0 } else { var drawWidth = 32 * 32 / blockInfo.height; core.status.boxAnimateObjs.push({ - 'bgx': 134, - 'bgy': 34, + 'bgx': x ? x - 16 : 134, + 'bgy': y ? y - 16 : 34, 'bgWidth': 32, 'bgHeight': 48, - 'x': 134, - 'y': 34, + 'x': x ? x - 16 : 134, + 'y': y ? y - 16 : 34, 'dw': 32, 'dh': 48, 'height': blockInfo.height, @@ -22119,12 +22124,12 @@ let time=0 } } else { core.status.boxAnimateObjs.push({ - 'bgx': 134, - 'bgy': 34, + 'bgx': x ? x - 16 : 134, + 'bgy': y ? y - 16 : 34, 'bgWidth': 32, 'bgHeight': 32, - 'x': 134, - 'y': 34, + 'x': x ? x - 16 : 134, + 'y': y ? y - 16 : 34, 'height': 32, 'animate': blockInfo.animate, 'image': blockInfo.image, @@ -22136,9 +22141,9 @@ let time=0 } - drawTempLeft(dir) { + drawTempLeft(page) { core.clearMap(this.tempLeft) - const enemy = this.enemys[this.page + dir] + const enemy = this.enemys[page] core.setTextAlign(this.tempLeft, 'center') core.fillText(this.tempLeft, enemy.name, 150, 120, "#000000", core.ui._buildFont(20, true)) core.fillText(this.tempLeft, "基础属性", 150, 150, "#000000", core.ui._buildFont(14, true)) @@ -22170,11 +22175,40 @@ let time=0 lineHeight: 20, color: "#000000" }); - + if (this.enemys.length <= 8) { + for (let i = 0; i < this.enemys.length; i++) { + this.drawBoxAnimate(this.tempLeft, i, 167 - (this.enemys.length / 2 - i) * 34, 370) + } + core.strokeRect(this.tempLeft, 150 - (this.enemys.length / 2 - page) * 34 + 1, 354, 32, 32, "#FFFF00", 2) + } else { + this.tempLeft.beginPath() + this.tempLeft.moveTo(63, 354) + this.tempLeft.lineTo(29, 370) + this.tempLeft.lineTo(63, 386) + this.tempLeft.closePath() + this.tempLeft.fillStyle = page < 3 ? "#999999" : "#000000" + this.tempLeft.fill() + this.tempLeft.beginPath() + this.tempLeft.moveTo(237, 353) + this.tempLeft.lineTo(271, 370) + this.tempLeft.lineTo(237, 386) + this.tempLeft.closePath() + this.tempLeft.fillStyle = page > this.enemys.length - 4 ? "#999999" : "#000000" + this.tempLeft.fill() + this.drawBoxAnimate(this.tempLeft, core.clamp(page - 2, 0, this.enemys.length - 5), 80, 370) + this.drawBoxAnimate(this.tempLeft, core.clamp(page - 1, 1, this.enemys.length - 4), 114, 370) + this.drawBoxAnimate(this.tempLeft, core.clamp(page, 2, this.enemys.length - 3), 148, 370) + this.drawBoxAnimate(this.tempLeft, core.clamp(page + 1, 3, this.enemys.length - 2), 182, 370) + this.drawBoxAnimate(this.tempLeft, core.clamp(page + 2, 4, this.enemys.length - 1), 216, 370) + if (page < 2) core.strokeRect(this.tempLeft, 64 + 34 * page, 354, 32, 32, "#FFFF00", 2) + else if (page > this.enemys.length - 3) core.strokeRect(this.tempLeft, 234 - (this.enemys.length - page) * 34, 354, 32, 32, "#FFFF00", 2) + else core.strokeRect(this.tempLeft, 132, 354, 32, 32, "#FFFF00", 2) + } + this.drawBoxAnimate(bookInfo.tempLeft, page) } - drawTempRight(dir) { + drawTempRight(page) { core.clearMap(this.tempRight) - const enemy = this.enemys[this.page] + const enemy = this.enemys[page] core.maps.drawThumbnail(this.floorId, null, { ctx: this.tempRight, size: 0.4, x: 10, y: 220, noEnabled: true }) enemy.locs.forEach(v => { this.tempRight.beginPath() @@ -22191,8 +22225,9 @@ let time=0 core.fillText(this.tempRight, "受击次数 " + (getDamageInfo ? getDamageInfo.mon_turn : '???'), 130, 50, "#000000", core.ui._buildFont(12, true)) let color = "#FFFF00", damage = enemy.damage - if (damage == '???') { - damage = '你会死的哦~杂鱼❤~'; + + if (damage == '???' || damage == null) { + damage = '杂鱼喵❤~'; color = '#FF2222'; } else { if (damage >= core.status.hero.hp) color = '#FF2222'; @@ -22201,7 +22236,9 @@ let time=0 damage = core.formatBigNumber(damage); } if (enemy.notBomb) damage += "[b]"; - core.fillText(this.tempRight, damage, 230, 50, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.tempRight, 'center'); + core.fillText(this.tempRight, damage, 240, 50, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.tempRight, 'left'); core.fillText(this.tempRight, "攻击临界 " + enemy.criticalAtk[0], 30, 70, "#000000", core.ui._buildFont(12, true)) core.fillText(this.tempRight, "速度临界 " + enemy.criticalSpeed[0], 120, 70, "#000000", core.ui._buildFont(12, true)) core.fillText(this.tempRight, '法强临界 ' + enemy.criticalSpell[0], 210, 70, "#000000", core.ui._buildFont(12, true)) @@ -22219,9 +22256,9 @@ let time=0 core.fillText(this.tempRight, "出手次数 " + (getDamageInfo ? getDamageInfo.hero_turn : '???'), 30, 130, "#000000", core.ui._buildFont(12, true)) core.fillText(this.tempRight, "受击次数 " + (getDamageInfo ? getDamageInfo.mon_turn : '???'), 130, 130, "#000000", core.ui._buildFont(12, true)) color = "#FFFF00" - damage = getDamageInfo.damage - if (damage == '???') { - damage = '你会死的哦~杂鱼❤~'; + damage = getDamageInfo?.damage + if (damage == '???' || !getDamageInfo) { + damage = '杂鱼喵❤~'; color = '#FF2222'; } else { if (damage >= core.status.hero.hp) color = '#FF2222'; @@ -22230,7 +22267,9 @@ let time=0 damage = core.formatBigNumber(damage); } if (enemy.notBomb) damage += "[b]"; - core.fillText(this.tempRight, damage, 230, 130, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.tempRight, 'center'); + core.fillText(this.tempRight, damage, 240, 130, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.tempRight, 'left'); let atk = core.nextCriticals(enemy, null, null, null, null, config) let speed = core.nextCriticals_speed(enemy, null, null, null, null, config) let spell = core.nextCriticals_spell(enemy, null, null, null, null, config) @@ -22324,6 +22363,36 @@ let time=0 lineHeight: 16, color: "#000000" }); + if (this.enemys.length <= 8) { + for (let i = 0; i < this.enemys.length; i++) { + this.drawBoxAnimate(this.left, i, 167 - (this.enemys.length / 2 - i) * 34, 370) + } + core.strokeRect(this.left, 150 - (this.enemys.length / 2 - this.page) * 34 + 1, 354, 32, 32, "#FFFF00", 2) + } else { + this.left.beginPath() + this.left.moveTo(63, 354) + this.left.lineTo(29, 370) + this.left.lineTo(63, 386) + this.left.closePath() + this.left.fillStyle = this.page < 3 ? "#999999" : "#000000" + this.left.fill() + this.left.beginPath() + this.left.moveTo(237, 354) + this.left.lineTo(271, 370) + this.left.lineTo(237, 386) + this.left.closePath() + this.left.fillStyle = this.page > this.enemys.length - 4 ? "#999999" : "#000000" + this.left.fill() + this.drawBoxAnimate(this.left, core.clamp(this.page - 2, 0, this.enemys.length - 5), 80, 370) + this.drawBoxAnimate(this.left, core.clamp(this.page - 1, 1, this.enemys.length - 4), 114, 370) + this.drawBoxAnimate(this.left, core.clamp(this.page, 2, this.enemys.length - 3), 148, 370) + this.drawBoxAnimate(this.left, core.clamp(this.page + 1, 3, this.enemys.length - 2), 182, 370) + this.drawBoxAnimate(this.left, core.clamp(this.page + 2, 4, this.enemys.length - 1), 216, 370) + if (this.page < 2) core.strokeRect(this.left, 64 + 34 * this.page, 354, 32, 32, "#FFFF00", 2) + else if (this.page > this.enemys.length - 3) core.strokeRect(this.left, 234 - (this.enemys.length - this.page) * 34, 354, 32, 32, "#FFFF00", 2) + else core.strokeRect(this.left, 132, 354, 32, 32, "#FFFF00", 2) + } + this.drawBoxAnimate(this.left, this.page) } drawRight() { @@ -22345,8 +22414,8 @@ let time=0 core.fillText(this.right, "受击次数 " + (getDamageInfo ? getDamageInfo.mon_turn : '???'), 130, 50, "#000000", core.ui._buildFont(12, true)) let color = "#FFFF00", damage = enemy.damage - if (damage == '???') { - damage = '你会死的哦~杂鱼❤~'; + if (damage == '???' || damage == null) { + damage = '杂鱼喵❤~'; color = '#FF2222'; } else { if (damage >= core.status.hero.hp) color = '#FF2222'; @@ -22355,7 +22424,9 @@ let time=0 damage = core.formatBigNumber(damage); } if (enemy.notBomb) damage += "[b]"; - core.fillText(this.right, damage, 230, 50, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.left, 'center') + core.fillText(this.right, damage, 240, 50, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.left, 'left') core.fillText(this.right, "攻击临界 " + enemy.criticalAtk[0], 30, 70, "#000000", core.ui._buildFont(12, true)) core.fillText(this.right, "速度临界 " + enemy.criticalSpeed[0], 120, 70, "#000000", core.ui._buildFont(12, true)) core.fillText(this.right, '法强临界 ' + enemy.criticalSpell[0], 210, 70, "#000000", core.ui._buildFont(12, true)) @@ -22373,9 +22444,9 @@ let time=0 core.fillText(this.right, "出手次数 " + (getDamageInfo ? getDamageInfo.hero_turn : '???'), 30, 130, "#000000", core.ui._buildFont(12, true)) core.fillText(this.right, "受击次数 " + (getDamageInfo ? getDamageInfo.mon_turn : '???'), 130, 130, "#000000", core.ui._buildFont(12, true)) color = "#FFFF00" - damage = getDamageInfo.damage - if (damage == '???') { - damage = '你会死的哦~杂鱼❤~'; + damage = getDamageInfo?.damage + if (damage == '???' || !getDamageInfo) { + damage = '杂鱼喵❤~'; color = '#FF2222'; } else { if (damage >= core.status.hero.hp) color = '#FF2222'; @@ -22384,7 +22455,9 @@ let time=0 damage = core.formatBigNumber(damage); } if (enemy.notBomb) damage += "[b]"; - core.fillText(this.right, damage, 230, 130, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.left, 'center') + core.fillText(this.right, damage, 240, 130, color, core.ui._buildFont(12, true)) + core.setTextAlign(this.left, 'left') let atk = core.nextCriticals(enemy, null, null, null, null, config) let speed = core.nextCriticals_speed(enemy, null, null, null, null, config) let spell = core.nextCriticals_spell(enemy, null, null, null, null, config) @@ -22467,7 +22540,7 @@ let time=0 } this.drawLeft() this.drawRight() - this.drawBoxAnimate(this.left, 0) + } } @@ -22514,95 +22587,151 @@ let time=0 const speedchangebox = makeBox([606, 341], [25, 25]) const zerochangebox = makeBox([515, 365], [35, 35]) if (this.isAnimate) return - if (inRect(pos, atkupbox)) { - bookInfo.atk += bookInfo.atkStep - bookInfo.drawRight() - this.update() - } else if (inRect(pos, atkdownbox)) { - bookInfo.atk -= bookInfo.atkStep - if (bookInfo.atk < 0) bookInfo.atk = 0 - bookInfo.drawRight() - this.update() - } else if (inRect(pos, atkchangebox)) { - core.myprompt("请输入攻击调整步距(只可输入数字)", null, (value) => { - if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { - bookInfo.atkStep = Number(value) - bookInfo.drawRight() - this.update() - } else if (value) { - alert("无效的输入!"); - } else if (value === "") { + let length = bookInfo.enemys.length + if (length > 0) { + if (length > 8 && inRect(pos, makeBox([66, 361], [238, 34]))) { + let num = core.clamp(Math.floor((x - 66) / 34), 0, 6) - } - }); - } else if (inRect(pos, defupbox)) { - bookInfo.def += bookInfo.defStep - bookInfo.drawRight() - this.update() - } else if (inRect(pos, defdownbox)) { - bookInfo.def -= bookInfo.defStep - if (bookInfo.def < 0) bookInfo.def = 0 - bookInfo.drawRight() - this.update() - } else if (inRect(pos, defchangebox)) { - core.myprompt("请输入防御调整步距(只可输入数字)", null, (value) => { - if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { - bookInfo.defStep = Number(value) - bookInfo.drawRight() - this.update() - } else if (value) { - alert("无效的输入!"); - } else if (value === "") { + if (num === 0) this.turnleft(this.page - 1) - } - }); - } else if (inRect(pos, spellupbox)) { - bookInfo.spell += bookInfo.spellStep - bookInfo.drawRight() - this.update() - } else if (inRect(pos, spelldownbox)) { - bookInfo.spell -= bookInfo.spellStep - if (bookInfo.spell < 0) bookInfo.spell = 0 - bookInfo.drawRight() - this.update() - } else if (inRect(pos, spellchangebox)) { - core.myprompt("请输入法强调整步距(只可输入数字)", null, (value) => { - if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { - bookInfo.spellStep = Number(value) - bookInfo.drawRight() - this.update() - } else if (value) { - alert("无效的输入!"); - } else if (value === "") { + else if (num === 1) { + const clamp = core.clamp(bookInfo.page - 2, 0, length - 5) - } - }); - } else if (inRect(pos, speedupbox)) { - bookInfo.speed += bookInfo.speedStep - bookInfo.drawRight() - this.update() - } else if (inRect(pos, speeddownbox)) { - bookInfo.speed -= bookInfo.speedStep - if (bookInfo.speed < 0) bookInfo.speed = 0 - bookInfo.drawRight() - this.update() - } else if (inRect(pos, speedchangebox)) { - core.myprompt("请输入速度调整步距(只可输入数字)", null, (value) => { - if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { - bookInfo.speedStep = Number(value) - bookInfo.drawRight() - this.update() - } else if (value) { - alert("无效的输入!"); - } else if (value === "") { + if (clamp < this.page - 1) this.turnleft(clamp + 1) + } else if (num === 2) { + const clamp = core.clamp(bookInfo.page - 1, 1, length - 4) - } - }); - } else if (inRect(pos, zerochangebox)) { - bookInfo.clearEx() - bookInfo.drawRight() - this.update() - } else if (inRect(pos, exitbox)) { + if (clamp < this.page - 1) this.turnleft(clamp + 1) + else if (clamp > this.page - 1) this.turnright(clamp + 1) + } else if (num === 3) { + const clamp = core.clamp(bookInfo.page, 2, length - 3) + + if (clamp < this.page - 1) this.turnleft(clamp + 1) + else if (clamp > this.page - 1) this.turnright(clamp + 1) + } else if (num === 4) { + const clamp = core.clamp(bookInfo.page + 1, 3, length - 2) + + if (clamp < this.page - 1) this.turnleft(clamp + 1) + else if (clamp > this.page - 1) this.turnright(clamp + 1) + } else if (num === 5) { + const clamp = core.clamp(bookInfo.page + 2, 4, length - 1) + + if (clamp < this.page - 1) this.turnleft(clamp + 1) + else if (clamp > this.page - 1) this.turnright(clamp + 1) + } else if (num === 6) this.turnright(this.page + 1) + } else if (length <= 8 && inRect(pos, makeBox([187 - length * 17, 361], [length * 34, 34]))) { + let num = core.clamp(Math.floor((x - 187 + length * 17) / 34), 0, length - 1) + if (num > this.page - 1) this.turnright(num + 1) + else if (num < this.page - 1) this.turnleft(num + 1) + } else if (inRect(pos, atkupbox)) { + bookInfo.atk += bookInfo.atkStep + bookInfo.drawRight() + this.update() + } else if (inRect(pos, atkdownbox)) { + bookInfo.atk -= bookInfo.atkStep + if (bookInfo.atk < 0) bookInfo.atk = 0 + bookInfo.drawRight() + this.update() + } else if (inRect(pos, atkchangebox)) { + core.myprompt("请输入攻击调整步距(只可输入数字)", null, (value) => { + if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { + bookInfo.atkStep = Number(value) + bookInfo.drawRight() + this.update() + } else if (value) { + alert("无效的输入!"); + } else if (value === "") { + + } + }); + } else if (inRect(pos, defupbox)) { + bookInfo.def += bookInfo.defStep + bookInfo.drawRight() + this.update() + } else if (inRect(pos, defdownbox)) { + bookInfo.def -= bookInfo.defStep + if (bookInfo.def < 0) bookInfo.def = 0 + bookInfo.drawRight() + this.update() + } else if (inRect(pos, defchangebox)) { + core.myprompt("请输入防御调整步距(只可输入数字)", null, (value) => { + if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { + bookInfo.defStep = Number(value) + bookInfo.drawRight() + this.update() + } else if (value) { + alert("无效的输入!"); + } else if (value === "") { + + } + }); + } else if (inRect(pos, spellupbox)) { + bookInfo.spell += bookInfo.spellStep + bookInfo.drawRight() + this.update() + } else if (inRect(pos, spelldownbox)) { + bookInfo.spell -= bookInfo.spellStep + if (bookInfo.spell < 0) bookInfo.spell = 0 + bookInfo.drawRight() + this.update() + } else if (inRect(pos, spellchangebox)) { + core.myprompt("请输入法强调整步距(只可输入数字)", null, (value) => { + if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { + bookInfo.spellStep = Number(value) + bookInfo.drawRight() + this.update() + } else if (value) { + alert("无效的输入!"); + } else if (value === "") { + + } + }); + } else if (inRect(pos, speedupbox)) { + bookInfo.speed += bookInfo.speedStep + bookInfo.drawRight() + this.update() + } else if (inRect(pos, speeddownbox)) { + bookInfo.speed -= bookInfo.speedStep + if (bookInfo.speed < 0) bookInfo.speed = 0 + bookInfo.drawRight() + this.update() + } else if (inRect(pos, speedchangebox)) { + core.myprompt("请输入速度调整步距(只可输入数字)", null, (value) => { + if (value && !Number.isNaN(Number(value)) && Number(value) >= 1) { + bookInfo.speedStep = Number(value) + bookInfo.drawRight() + this.update() + } else if (value) { + alert("无效的输入!"); + } else if (value === "") { + + } + }); + } else if (inRect(pos, zerochangebox)) { + bookInfo.clearEx() + bookInfo.drawRight() + this.update() + } else if (inRect(pos, exitbox)) { + core.playSound('取消'); + core.book.close() + if (core.events.recoverEvents(core.status.event.interval)) { + return; + } else if (core.status.event.ui != null) { + core.status.boxAnimateObjs = []; + core.ui._drawViewMaps(core.status.event.ui); + } else core.ui.closePanel(); + + return; + } else if (inRect(pos, leftbox)) { + + this.turnleft(this.page - 1) + } else if (inRect(pos, rightbox)) { + + this.turnright(this.page + 1) + } + return + } + if (inRect(pos, exitbox)) { core.playSound('取消'); core.book.close() if (core.events.recoverEvents(core.status.event.interval)) { @@ -22613,20 +22742,13 @@ let time=0 } else core.ui.closePanel(); return; - } else if (inRect(pos, leftbox)) { - - this.turnleft() - } else if (inRect(pos, rightbox)) { - - this.turnright() } } - async turnleft() { + async turnleft(page) { if (this.page <= 1) return this.isAnimate = true - bookInfo.drawTempLeft(-1) - bookInfo.drawTempRight(-1) - bookInfo.drawBoxAnimate(bookInfo.tempLeft, -1) + bookInfo.drawTempLeft(page - 1) + bookInfo.drawTempRight(page - 1) core.drawBoxAnimate() await this.ani.time(1) .absolute() @@ -23249,7 +23371,7 @@ let time=0 ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; //绘制上一页左页 - core.drawImage(ctx, this.paperpages[this.page - 2][0], 0, 0, this.ani.x / (this.width * 2) * 300, 400, dx, dy, this.ani.x / 2, this.height); + core.drawImage(ctx, this.paperpages[page - 1][0], 0, 0, this.ani.x / (this.width * 2) * 300, 400, dx, dy, this.ani.x / 2, this.height); ctx.shadowColor = "transparent"; core.drawImage(ctx, bookInfo.tempLeft.canvas, 0, 0, this.ani.x / (this.width * 2) * 300, 400, dx, dy, this.ani.x / 2, this.height); ctx.shadowColor = "rgba(0,0,0,0.5)"; @@ -23257,7 +23379,7 @@ let time=0 ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; //绘制翻起的右页 - core.drawImage(ctx, this.paperpages[this.page - 2][1], 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, this.ani.x / 2 + dx, dy, this.ani.x / 2, this.height); + core.drawImage(ctx, this.paperpages[page - 1][1], 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, this.ani.x / 2 + dx, dy, this.ani.x / 2, this.height); ctx.shadowColor = "transparent"; core.drawImage(ctx, bookInfo.tempRight.canvas, 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, this.ani.x / 2 + dx, dy, this.ani.x / 2, this.height); ctx.shadowColor = "rgba(0,0,0,0.5)"; @@ -23286,24 +23408,23 @@ let time=0 .move(this.width * 2, 0).n(1) this.ani.ticker.clear() this.isAnimate = false - this.page-- - bookInfo.page--; + this.page = page + bookInfo.page = page - 1; [bookInfo.left, bookInfo.tempLeft] = [bookInfo.tempLeft, bookInfo.left]; [bookInfo.right, bookInfo.tempRight] = [bookInfo.tempRight, bookInfo.right] - core.clearUI() - bookInfo.drawBoxAnimate(bookInfo.left, 0) + core.status.boxAnimateObjs = core.status.boxAnimateObjs.filter(v => v.ctx === bookInfo.left) core.drawBoxAnimate() + this.update() core.clearMap(bookInfo.tempLeft) core.clearMap(bookInfo.tempRight) } - async turnright() { + async turnright(page) { if (this.page >= this.pagemax) return this.isAnimate = true - bookInfo.drawTempLeft(1) - bookInfo.drawTempRight(1) - bookInfo.drawBoxAnimate(bookInfo.tempLeft, 1) + bookInfo.drawTempLeft(page - 1) + bookInfo.drawTempRight(page - 1) core.drawBoxAnimate() await this.ani.time(1) .absolute() @@ -23926,7 +24047,7 @@ let time=0 ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; //绘制翻起的左页 - core.drawImage(ctx, this.paperpages[this.page][0], 0, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x, dy, this.ani.x / 2, this.height); + core.drawImage(ctx, this.paperpages[page - 1][0], 0, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x, dy, this.ani.x / 2, this.height); ctx.shadowColor = "transparent"; core.drawImage(ctx, bookInfo.tempLeft.canvas, 0, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x, dy, this.ani.x / 2, this.height); ctx.shadowColor = "rgba(0,0,0,0.5)"; @@ -23934,7 +24055,7 @@ let time=0 ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 0; //绘制下一页右页 - core.drawImage(ctx, this.paperpages[this.page][1], 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x / 2, dy, this.ani.x / 2, this.height); + core.drawImage(ctx, this.paperpages[page - 1][1], 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x / 2, dy, this.ani.x / 2, this.height); ctx.shadowColor = "transparent"; core.drawImage(ctx, bookInfo.tempRight.canvas, 300 - this.ani.x / (this.width * 2) * 300, 0, this.ani.x / (this.width * 2) * 300, 400, 676 - dx - this.ani.x / 2, dy, this.ani.x / 2, this.height); ctx.shadowColor = "rgba(0,0,0,0.5)"; @@ -23965,12 +24086,11 @@ let time=0 .move(this.width * 2, 0).n(1) this.ani.ticker.clear() this.isAnimate = false - this.page++ - bookInfo.page++; + this.page = page + bookInfo.page = page - 1; [bookInfo.left, bookInfo.tempLeft] = [bookInfo.tempLeft, bookInfo.left]; [bookInfo.right, bookInfo.tempRight] = [bookInfo.tempRight, bookInfo.right] - core.clearUI() - bookInfo.drawBoxAnimate(bookInfo.left, 0) + core.status.boxAnimateObjs = core.status.boxAnimateObjs.filter(v => v.ctx === bookInfo.left) core.drawBoxAnimate() this.update() core.clearMap(bookInfo.tempLeft) @@ -25277,9 +25397,11 @@ let time=0 ctx.shadowColor = "transparent"; core.drawImage(ctx, bookInfo.left.canvas, 0, 0, 300, 400, dx, dy, this.width, this.height) core.drawImage(ctx, bookInfo.right.canvas, 0, 0, 300, 400, dx + this.width, dy, this.width, this.height) + ctx.restore(); } setPage(num) { + if (num === 1) { this.paperpages = [ [this.paperTexture('left'), this.paperTexture('right')] @@ -27566,7 +27688,7 @@ let time=0 centerX += core.bigmap.offsetX; centerY += core.bigmap.offsetY; } - var id = Symbol(); + var id = setTimeout(); animate.se = animate.se || {}; if (typeof animate.se == 'string') animate.se = { 1: animate.se }; tran.mode(linear()).time(1).absolute() @@ -27604,7 +27726,7 @@ let time=0 animate.se = animate.se || {}; if (typeof animate.se == 'string') animate.se = { 1: animate.se }; - var id = id || Symbol(); + var id = id || setTimeout(); tran.mode(linear()).time(1).absolute() if (!hero) tran.value[id + name + "x"] = centerX if (!hero) tran.value[id + name + "y"] = centerY @@ -27809,7 +27931,7 @@ let time=0 if (!flags["animate_" + name]) { callback?.() } - if (!id) id = Symbol() + if (!id) id = setTimeout() tran.mode(linear()).time(1).absolute() if (!hero) tran.value[id + name + "x"] = x if (!hero) tran.value[id + name + "y"] = y