Compare commits

..

5 Commits

7 changed files with 10225 additions and 9168 deletions

View File

@ -116,6 +116,14 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_lint": true, "_lint": true,
"_docs": "能否使用或装备", "_docs": "能否使用或装备",
"_data": "当前能否使用或装备该道具仅对cls不为items有效。null表示始终不可使用但可装备" "_data": "当前能否使用或装备该道具仅对cls不为items有效。null表示始终不可使用但可装备"
},
"canBatchUse": {
"_leaf": true,
"_type": "textarea",
"_string": true,
"_lint": true,
"_docs": "能否批量使用",
"_data": "该道具是否允许批量使用仅对cls为tools或constants有效true表示可批量使用。建议同时勾选【回放不绘制道具栏】"
} }
} }
}, },

View File

@ -1529,7 +1529,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"hp": 1000, "hp": 1000,
"manamax": -1, "manamax": -1,
"mana": 0, "mana": 0,
"atk": 60, "atk": 10,
"def": 10, "def": 10,
"mdef": 100, "mdef": 100,
"speed": 10, "speed": 10,

View File

@ -55,9 +55,9 @@ main.floors.xiaoxiang01=
[120147, 0, 32, 0,200199, 0,201029,225,110132,224, 0, 0,90675], [120147, 0, 32, 0,200199, 0,201029,225,110132,224, 0, 0,90675],
[120164,225,200998,200999,201037, 81,201029, 0, 0, 0,110116, 0, 94], [120164,225,200998,200999,201037, 81,201029, 0, 0, 0,110116, 0, 94],
[120172, 0,222, 0,221, 0,201029, 81,110116,225,110137,110138,90650], [120172, 0,222, 0,221, 0,201029, 81,110116,225,110137,110138,90650],
[120180,201037,201037, 81,201037,201037,201037, 0,110124, 0, 81, 31,90658], [120180,201037,201037, 81,201037,201037,201037,246,110124, 0, 81, 31,90658],
[ 92, 32, 32, 22, 21,80089, 31, 0,110132, 0,110122,110122,110197], [ 92, 32, 32, 22, 21,80089, 31, 0,110132, 0,110122,110122,110197],
[140,110191, 21, 21, 21,80089, 0, 0, 81, 0,222, 29,110197], [140,110191, 21, 21, 21,80089, 0,246, 81, 0,222, 29,110197],
[140,140,140,110191,80083,80097, 93,110138,110138,140189,140,140,140] [140,140,140,110191,80083,80097, 93,110138,110138,140189,140,140,140]
], ],
"areas": "牢狱", "areas": "牢狱",

View File

@ -48,8 +48,8 @@ main.floors.yiqu1=
[140142, 0,120015,120028,201037, 0,201029, 0, 0, 0, 0, 0,110197], [140142, 0,120015,120028,201037, 0,201029, 0, 0, 0, 0, 0,110197],
[140150, 0, 0,120019, 0, 0,201029, 0,110189,140,110191, 0,110205], [140150, 0, 0,120019, 0, 0,201029, 0,110189,140,110191, 0,110205],
[ 92, 0, 0,120019,201037,201037,201037, 0,110197,140,110199, 81,110224], [ 92, 0, 0,120019,201037,201037,201037, 0,110197,140,110199, 81,110224],
[ 0, 0, 0,120027, 37, 37, 0, 0,110197,140,110199, 0,110232], [ 0, 0, 0,120027, 0, 0, 0, 0,110197,140,110199, 0,110232],
[110191, 0, 0, 0, 36, 35,110189,140,140,140,110199, 0, 94], [110191, 0, 0, 0, 0, 0,110189,140,140,140,110199, 0, 94],
[110199,140,140,110191, 0, 0,110197,140,140,110204,110207, 0, 0], [110199,140,140,110191, 0, 0,110197,140,140,110204,110207, 0, 0],
[140,140,140,110199,90684,90684,110197,140,140,110199,110234, 0, 0], [140,140,140,110199,90684,90684,110197,140,140,110199,110234, 0, 0],
[140,140,140,110199,100307,100308,110197,140,140,110199, 0, 0, 0] [140,140,140,110199,100307,100308,110197,140,140,110199, 0, 0, 0]

View File

@ -282,7 +282,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
return true; return true;
}, },
"afterBattle": function (enemyId, x, y) { "afterBattle": async function (enemyId, x, y) {
// 战斗结束后触发的事件 // 战斗结束后触发的事件
var enemy = core.getEnemyInfo(enemyId, hero, x, y) var enemy = core.getEnemyInfo(enemyId, hero, x, y)
var special = enemy.special; var special = enemy.special;
@ -295,7 +295,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
animate = core.material.items[equipId].equip.animate; animate = core.material.items[equipId].equip.animate;
// 你也可以在这里根据自己的需要比如enemyId或special或flag来修改播放的动画效果 // 你也可以在这里根据自己的需要比如enemyId或special或flag来修改播放的动画效果
// if (enemyId == '...') animate = '...'; // if (enemyId == '...') animate = '...';
if (core.getFlag('noAnimate')) {
// 检查该动画是否存在SE如果不存在则使用默认音效 // 检查该动画是否存在SE如果不存在则使用默认音效
if (!(core.material.animates[animate] || {}).se) if (!(core.material.animates[animate] || {}).se)
core.playSound('attack.mp3'); core.playSound('attack.mp3');
@ -305,11 +305,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.drawAnimate(animate, x, y); core.drawAnimate(animate, x, y);
else else
core.drawHeroAnimate(animate); core.drawHeroAnimate(animate);
}
// 获得战斗伤害信息 // 获得战斗伤害信息
var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {}; var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {};
if (!core.getFlag("noAnimate")) core.attackAnimate( if (!core.getFlag("noAnimate")) await core.attackAnimate(
enemyId, enemyId,
damageInfo.start[0], damageInfo.start[0],
damageInfo.start[1], damageInfo.start[1],
@ -928,6 +928,17 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
origin_hero_atk = core.getStatusOrDefault(hero, "atk"), origin_hero_atk = core.getStatusOrDefault(hero, "atk"),
origin_hero_def = core.getStatusOrDefault(hero, "def"); origin_hero_def = core.getStatusOrDefault(hero, "def");
//编辑器特判
if (main.mode == "editor") {
hero_hp = hero?.hp ?? core.status.hero.hp,
hero_atk = hero?.atk ?? core.status.hero.atk,
hero_def = hero?.def ?? core.status.hero.def,
hero_matk = hero?.matk ?? core.status.hero.matk,
hero_mdef = hero?.mdef ?? core.status.hero.mdef,
hero_mhp = hero?.mhp ?? core.status.hero.mhp,
hero_speed = hero?.speed ?? core.status.hero.speed,
hero_spell = hero?.spell ?? core.status.hero.spell;
}
// 怪物的各项数据 // 怪物的各项数据
// 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中 // 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中
var enemyInfo = core.enemys.getEnemyInfo(enemy, hero, x, y, floorId); var enemyInfo = core.enemys.getEnemyInfo(enemy, hero, x, y, floorId);
@ -1017,7 +1028,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
//需要变更 //需要变更
const onegcd = gcd(...oneTurn) //最大公约数 const onegcd = gcd(...oneTurn) //最大公约数
oneTurn = lcm(...oneTurn) / onegcd //单次回合长度 oneTurn = lcm(...oneTurn) //单次回合长度
//在这里处理equip的初始位置now //在这里处理equip的初始位置now
equipInfo.forEach(v => { equipInfo.forEach(v => {
switch (v.id) { switch (v.id) {
@ -1029,7 +1040,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
v.onAttack = false v.onAttack = false
if (v.now === oneTurn) v.onAttack = true //增加正在攻击的标志 if (v.now === oneTurn) v.onAttack = true //增加正在攻击的标志
}) })
const heroinfo = { hp: hero_hp, atk: hero_atk, def: hero_def, mdef: hero_mdef, spell: hero_spell, mhp: Math.floor(hero_spell * hero_mhp / 100), matk: Math.floor(hero_spell * hero_matk / 100), speed: hero_speed, now: 0, isAttack: false } //勇士属性 const heroinfo = { hp: hero_hp, atk: hero_atk, def: hero_def, mdef: (!hero?.mdef || hero?.mdef === 100) ? hero_mdef : hero.mdef, spell: hero_spell, mhp: Math.floor(hero_spell * hero_mhp / 100), matk: Math.floor(hero_spell * hero_matk / 100), speed: hero_speed, now: 0, isAttack: false } //勇士属性
const enemyinfo = { hp: mon_hp, atk: mon_atk, def: mon_def, mdef: mon_mdef, spell: mon_spell, speed: mon_speed, special: mon_special, now: 0, onAttack: false, isAttack: false } //怪物属性 const enemyinfo = { hp: mon_hp, atk: mon_atk, def: mon_def, mdef: mon_mdef, spell: mon_spell, speed: mon_speed, special: mon_special, now: 0, onAttack: false, isAttack: false } //怪物属性
//先攻,先攻为怪物和勇士勇士行动前怪物出第一刀 //先攻,先攻为怪物和勇士勇士行动前怪物出第一刀
if (core.hasSpecial(mon_special, 1)) { if (core.hasSpecial(mon_special, 1)) {
@ -1062,7 +1073,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0), let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100); per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
//这里记录伤害触发后的属性变化和动画同时计入diff、damage //这里记录伤害触发后的属性变化和动画同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
if (core.hasSpecial(mon_special, 6)) { if (core.hasSpecial(mon_special, 6)) {
hero_damage += per_damage * enemy.n + per_mdamage * enemy.n hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
} else { } else {
@ -1071,12 +1082,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let animate = core.plugin.enemyanimate[enemy.id] ?? "sword" let animate = core.plugin.enemyanimate[enemy.id] ?? "sword"
//这里可通过if更改默认的怪物攻击特效 //这里可通过if更改默认的怪物攻击特效
hero_animate.push(animate) //勇士身上绘制sword动画 hero_animate.push(animate) //勇士身上绘制sword动画
if (heroinfo.mhp - hero_damage >= 0) { if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
heroinfo.mhp = heroinfo.mhp - hero_damage hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
hero_damage = 0 hero_damage = 0
hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
} else { } else {
hero_damage -= heroinfo.mhp hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
heroinfo.hp -= hero_damage hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
} }
@ -1089,7 +1102,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (v.onAttack) { if (v.onAttack) {
let mon_damage = 0 let mon_damage = 0
let hero_damage = 0 let hero_damage = 0
//这里写生效装备的技能效果同时对双方属性的修改计入diff //这里写生效装备的技能效果同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
let animate = core.plugin.equipanimate[v.id] ?? "sword" let animate = core.plugin.equipanimate[v.id] ?? "sword"
//这里可通过if更改默认的道具特效 //这里可通过if更改默认的道具特效
enemy_animate.push(animate) //勇士身上绘制动画 enemy_animate.push(animate) //勇士身上绘制动画
@ -1104,6 +1117,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
enemyDiffList.push(enemy_diff) enemyDiffList.push(enemy_diff)
heroanimateList.push(hero_animate) heroanimateList.push(hero_animate)
enemyanimateList.push(enemy_animate) enemyanimateList.push(enemy_animate)
//处理属性变化
for (let v in hero_diff) {
heroinfo[v] += hero_diff[v]
}
for (let v in enemy_diff) {
enemyinfo[v] += enemy_diff[v]
}
continue //进入下一循环 continue //进入下一循环
} }
heroinfo.now += heroinfo.speed heroinfo.now += heroinfo.speed
@ -1124,12 +1144,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let per_damage = Math.max(heroinfo.atk - enemyinfo.def, 0) let per_damage = Math.max(heroinfo.atk - enemyinfo.def, 0)
let per_mdamage = Math.max(Math.floor(heroinfo.matk * (100 - enemyinfo.mdef) / 100), 0) let per_mdamage = Math.max(Math.floor(heroinfo.matk * (100 - enemyinfo.mdef) / 100), 0)
mon_damage = per_damage + per_mdamage mon_damage = per_damage + per_mdamage
//这里记录伤害触发后的属性变化和动画同时计入diff //这里记录伤害触发后的属性变化和动画同时计入diff(不要在此直接修改heroinfo和enemyinfo)
let animate = core.plugin.heroanimate[equip0] ?? "sword" let animate = core.plugin.heroanimate[equip0] ?? "sword"
//这里可通过if更改默认的武器攻击特效 //这里可通过if更改默认的武器攻击特效
enemy_animate.push(animate) enemy_animate.push(animate)
enemyinfo.hp -= mon_damage
enemy_diff.hp = (enemy_diff.hp ?? 0) - mon_damage enemy_diff.hp = (enemy_diff.hp ?? 0) - mon_damage
heroinfo.now -= oneTurn heroinfo.now -= oneTurn
hero_turn++ hero_turn++
@ -1145,7 +1165,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0), let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100); per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
//这里记录伤害触发后的属性变化和动画同时计入diff、damage //这里记录伤害触发后的属性变化和动画同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
if (core.hasSpecial(mon_special, 6)) { if (core.hasSpecial(mon_special, 6)) {
hero_damage += per_damage * enemy.n + per_mdamage * enemy.n hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
} else { } else {
@ -1154,12 +1174,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
let animate = core.plugin.enemyanimate[enemy.id] ?? "sword" let animate = core.plugin.enemyanimate[enemy.id] ?? "sword"
//这里可通过if更改默认的怪物攻击特效 //这里可通过if更改默认的怪物攻击特效
hero_animate.push(animate) //勇士身上绘制sword动画 hero_animate.push(animate) //勇士身上绘制sword动画
if (heroinfo.mhp - hero_damage >= 0) { if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
heroinfo.mhp = heroinfo.mhp - hero_damage hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
hero_damage = 0 hero_damage = 0
hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
} else { } else {
hero_damage -= heroinfo.mhp hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
heroinfo.hp -= hero_damage hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
} }
@ -1172,7 +1194,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (v.now >= oneTurn) { if (v.now >= oneTurn) {
let mon_damage = 0 let mon_damage = 0
let hero_damage = 0 let hero_damage = 0
//这里写生效装备的技能效果同时对双方属性的修改计入diff //这里写生效装备的技能效果同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
let animate = core.plugin.equipanimate[v.id] ?? "sword" let animate = core.plugin.equipanimate[v.id] ?? "sword"
//这里可通过if更改默认的道具特效 //这里可通过if更改默认的道具特效
enemy_animate.push(animate) //怪物身上绘制动画 enemy_animate.push(animate) //怪物身上绘制动画
@ -1183,20 +1205,27 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}) })
if (onattack) { //处理完毕后的数据处理 //处理完毕后的数据处理
heroDiffList.push(hero_diff) heroDiffList.push(hero_diff)
enemyDiffList.push(enemy_diff) enemyDiffList.push(enemy_diff)
heroanimateList.push(hero_animate) heroanimateList.push(hero_animate)
enemyanimateList.push(enemy_animate) enemyanimateList.push(enemy_animate)
let a = hero_turn % 50 //出手50回合怪物生命未降低直接判负避免死循环 //处理属性变化
if (a === 0) { for (let v in hero_diff) {
heroinfo[v] += hero_diff[v]
}
for (let v in enemy_diff) {
enemyinfo[v] += enemy_diff[v]
}
//出手50回合怪物生命未降低直接判负避免死循环
if (hero_turn === 50) {
if (enemyinfo.hp >= beforehp) { if (enemyinfo.hp >= beforehp) {
return null return null
} else {
beforehp = enemyinfo.hp
}
} }
} }
} }
//下面这些还没修改,原有技能除先攻、连击外暂时全部移除,所有技能需要在上方的模拟循环中做修正 //下面这些还没修改,原有技能除先攻、连击外暂时全部移除,所有技能需要在上方的模拟循环中做修正

View File

@ -310,13 +310,15 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"itemEffectTip": ",防御+100护盾+100" "itemEffectTip": ",防御+100护盾+100"
}, },
"superPotion": { "superPotion": {
"cls": "items", "cls": "tools",
"name": "圣水", "name": "圣水",
"itemEffect": "core.status.hero.hp *= 2", "itemEffect": "core.status.hero.hp *= 2",
"itemEffectTip": ",生命值翻倍", "itemEffectTip": ",生命值翻倍",
"useItemEffect": "core.status.hero.hp *= 2;core.playSound('回血');", "useItemEffect": "core.status.hero.hp *= 2;core.playSound('回血');",
"canUseItemEffect": "true", "canUseItemEffect": "true",
"text": "生命值翻倍" "text": "生命值翻倍",
"canBatchUse": "true",
"hideInReplay": true
}, },
"book": { "book": {
"cls": "constants", "cls": "constants",

File diff suppressed because it is too large Load Diff