赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 8 |
经验 | 0 |
最后登录 | 2025-6-2 |
在线时间 | 174 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 783
- 在线时间
- 174 小时
- 注册时间
- 2021-5-1
- 帖子
- 11
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 alderpaw 于 2025-5-29 00:11 编辑
插件地址:https://github.com/alderpaw/rmmz ... _CtbBattleSystem.js
附件图片里提供了用于指示行动条位置的箭头图标
2025.5.28:修复了一系列bug,目前S爆发技功能应该不会导致卡死了,另外增加了一系列可以设置的额外属性(如物理伤害增加、魔法伤害增加、硬直减少),基本都是轨迹系列里各种高级回路会附带的特殊属性。
重要:这个插件是基于VisuMZ_1_BattleCore写的,目前必须一起使用!!!
单独使用会报错,这个报错目前我解决不了,因为我的很多处理逻辑都是按照战斗核心修改了以后来写的,不太了解官方原生的哪里有差别。
使用时,将此插件放在战斗核心下面,并将战斗系统设置为“时间制-等待”。
实现类似轨迹的CTB战斗系统,根据人物agi和不同行动的耗时来决定各角色的行动顺序。
*************** v1.10修改 ***************
****** BUG修复和特性修改 ******
1. 修复了有时按键盘1~4键无法爆S技的问题。
2. 修复了角色正在释放技能动画时,对该角色爆S技会导致窗口卡住的问题。
3. 删除了竖向行动条,只保留横向(有bug,懒得做适配了)。
4. 修复了回复/扣血类AT奖励触发时机不固定的问题。现在一定会在轮到角色行动回合
时触发效果,不会在行动结束后再触发。并且,如果这个AT奖励已经对某名角色产生过
效果了,那么爆S技的角色虽然会强制移动到该位置,但不会重复获得该AT奖励。
5. 修复了某些异常状态下战斗系统可能会卡死的问题(还需验证是否完全修复)。
6. 现在本插件将VisuMZ战斗核心指定为了必需的前置插件。
7. 增加对魔石系统(Alderpaw_MagicStone)的适配。
****** 新增功能 ******
1. 新增选择技能/物品时行动条可往下移的选项,避免挡住上方的描述窗口。
2. 新增开局直接插入一定量AT奖励的选项。
3. 改变了状态和BUFF计算回合数的逻辑。现在状态和BUFF都是在一次行动结束后
刷新持续回合数(驱动不消耗回合数)。
4. 可指定敌人等级以及是否为Boss,用于实现你想要的功能。例如,DQ中只对等级为
特定倍数的敌人才生效的即死魔法,闪之轨迹中Boss类敌人只会进入1回合异常状态等。
具体用法请看下面的Notetags部分的说明。
5. 新增很多轨迹系列里经常用到的人物属性,例如暴击增伤、低血增伤、护盾等。这些
参数需要通过备注栏指定,并且一定要在VisuMZ战斗核心中做适当配置才能生效。具体
请看下面的Notetags部分的说明。
6. 本插件里还包含对VisuMZ_2_BattleGrid插件的一些兼容,但这个插件得额外付费20
美刀,大部分人应该不用,所以此处不赘述。
*************** v1.01新增 ***************
1. 获得零驱动AT奖励时,魔法预测的行动位置显示为硬直时间,而不是驱动时间。
2. 增加插件参数,可选择竖向放置ctb行动条。
3. 增加新功能:可为装备设定AT延迟效果,装备上后攻击就能延迟敌人。
4. 增加新功能:S爆发技。类似空轨,按下键盘上的1~4数字键可无视行动顺序瞬发S技。
此时会强制进入S技选择界面,只能使用S技,不能做其他任何操作。
可以在插件参数中设置爆S技时的音效以及需要多少TP才能发动S技。
另外,最好在人物栏创建一个标记,符合发动S技的条件时就亮起。
但由于每个人的UI都不同,这里就不提供了,可以自己简单写一下。
********** 战斗系统介绍 **********
每名敌我角色都有一个AT(Action Time)值,AT=0时该名角色就可以行动。
战斗开始时,每名角色都有一个随机的AT值,agi越高则AT值小的概率就越大。
战斗开始时以及每次行动结束时,都会同步减少所有角色的AT,直到有角色的AT减至0。
不同的行动(技能、物品、普攻等)具有不同的耗时,称之为ST(Skill Time)。
对于ST,可以分别设置驱动时间castST和硬直时间delayST。
-驱动时间:技能使用后需要读条才能释放,一般这种技能就是魔法。
-硬直时间:技能结束后,角色需要等待多久才能再次行动。
每次行动后,根据ST和agi可以计算得知该名角色的AT会增加多少。
AT计算公式为ΔAT=100*ST/agi,向下取整。
然后,根据AT重新对所有角色进行排队。
行动结束的角色会插到相应的位置,从而实现CTB战斗系统的循环。
此外,行动条上还会随机出现AT奖励,会使当前行动的角色受到一些增益或减益效果。
你可以控制AT奖励的出现概率,并定义AT奖励的种类。
在轨迹系列中,技能一般是分为战技和魔法。所有“命中类型”为物理攻击的技能就是战技,
所有“命中类型”为魔法攻击的技能就是魔法。注意战技和魔法的区分只和命中类型相关,而
与伤害的计算公式无关,例如部分战技也可以是魔法伤害,伤害公式考虑使用者的魔攻和目
标的魔防。下文中所有的“战技”和“魔法”都遵循这里的定义。
一般来说普通攻击也会设置为物理命中类型,所以普通攻击也属于战技。
魔法需要驱动时间,战技不需要,本系统计算驱动时间时也只会考虑上面定义的“魔法”。
********** VisuMZ战斗核心设置 **********
如果你希望本插件新增的人物属性能实际生效的话,必须在VisuMZ战斗核心中做以下设置。
建议打开本插件的.js文件再复制,格式更好看。
1. 把Damage Settings的Formulas的JS: Overall Formula改成以下内容:
const user = this.subject();
const target = arguments[0];
const critical = arguments[1];
const item = this.item();
const stunStateId = 13;
// Get Base Damage
const baseValue = this.evalDamageFormula(target);
// Calculate Element Modifiers
let value = baseValue * this.calcElementRate(target);
// Calculate Physical and Magical Modifiers
if (this.isPhysical()) {
value *= target.pdr;
value *= user.pdr_to_target;
//计算残血和满血增伤
value *= (1 + (user.low_hp_craft_damage_rate - 1) * (1 - user.hp / user.mhp));
value *= (1 + (user.high_hp_craft_damage_rate - 1) * (user.hp / user.mhp));
}
if (this.isMagical()) {
value *= target.mdr;
value *= user.mdr_to_target;
//计算残血和满血增伤
value *= (1 + (user.low_hp_magic_damage_rate - 1) * (1 - user.hp / user.mhp));
value *= (1 + (user.high_hp_magic_damage_rate - 1) * (user.hp / user.mhp));
}
// Apply Healing Modifiers
if (baseValue < 0) {
value *= target.rec;
if (item.isSkill()) {
value *= user.extra_heal_rate;
}
}
// Apply Critical Modifiers
if (critical) {
value = this.applyCritical(value);
}
// Apply Variance and Guard Modifiers
value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
//破防增伤
if (target.isStateAffected(stunStateId)) {
value *= 1.2;
}
// 伤害取整后,减去护盾
value = Math.round(value);
if (target._shieldHp > 0) {
const originalShieldHp = target._shieldHp;
target._shieldHp = Math.max(0, target._shieldHp - value);
value = Math.max(0, value - originalShieldHp);
if (target._shieldHp === 0) {
for (const state of target.states()) {
if (state.meta["Shield Hp Value"]) {
target.removeState(state.id);
break;
}
}
}
}
return value;
2. 把Damage Settings的Critical Hits的JS: Damage Formula改成以下内容:
// Declare Constants
const user = this.subject();
let damage = arguments[0];
let multiplier = 1.5;
let bonusDamage = this.subject().luk * this.subject().cri;
if (this.isHpRecover() || this.isMpRecover()) {
bonusDamage *= -1;
}
if (this.isPhysical()) {
multiplier *= user.extra_critical_damage_rate;
}
// Apply Notetags
const note = this.item().note;
if (note.match(/<MODIFY CRITICAL MULTIPLIER:[ ](\d+)([%%])>/i)) {
multiplier = Number(RegExp.$1) / 100;
}
if (note.match(/<MODIFY CRITICAL MULTIPLIER:[ ]([\+\-]\d+)([%%])>/i)) {
multiplier += Number(RegExp.$1) / 100;
}
if (note.match(/<MODIFY CRITICAL BONUS DAMAGE:[ ](\d+)([%%])>/i)) {
bonusDamage *= Number(RegExp.$1) / 100;
}
if (note.match(/<MODIFY CRITICAL BONUS DAMAGE:[ ]([\+\-]\d+)([%%])>/i)) {
bonusDamage += bonusDamage * (RegExp.$1) / 100;
}
if (note.match(/<JS CRITICAL DAMAGE>\s*([\s\S]*)\s*<\/JS CRITICAL DAMAGE>/i)) {
const code = String(RegExp.$1);
try {
eval(code);
} catch (e) {
if ($gameTemp.isPlaytest()) console.log(e);
}
}
// Return Damage
return damage * multiplier;
3. 把Mechanics Settings的JS: Action Related的JS: Post-Damage改成以下内容:
const value = arguments[0];
const target = arguments[1];
const user = this.subject();
const a = user;
const b = target;
const action = this;
const item = this.item();
const skill = this.item();
if (this.isMagical() && user.attack_mp_absorb_rate > 0) {
user.gainMp(Math.floor(value * user.attack_mp_absorb_rate));
}
if (this.isPhysical() && user.attack_hp_absorb_rate > 0) {
user.gainHp(Math.floor(value * user.attack_hp_absorb_rate));
}
if (value >= target.hp && user.kill_tp_absorb_value > 0) {
user.gainTpReward(user.kill_tp_absorb_value);
}
return value;
********** Notetags **********
扩展功能通过将特定标签写在备注栏来实现。注意,以下所有的冒号都是英文冒号。
1. 设定技能的驱动时间和硬直时间
填写位置:技能的备注栏
<castST:50> 该技能的驱动时间为50,若不设置则驱动时间默认为0(即不需要驱动)。
<delayST:120> 该技能的硬直时间为120,若不设置则硬直时间默认为100。
2. 增加命中目标的AT,可用于实现具有延迟效果的技能或装备
填写位置:技能、装备的备注栏
<AT Delay By Value:+x> 命中后固定将目标的AT增加x,这种延迟与agi无关。
<AT Delay By ST:+x> 命中后使目标的硬直增加x,实际AT延迟量为100*x/target.agi。
<AT Delay Chance:0.x> 有0.x的概率触发延迟,不写默认100%触发(若敌人有延迟抗性,会相应折算)。
另外,可以在插件参数中指定哪些类型的技能会触发装备的延迟特效。比如轨迹系列中,
一般魔法不会触发这类特效,只有普通攻击和战技可以。
3. 减少命中目标的AT,可用于实现提行动条的技能
填写位置:技能的备注栏
<AT Advance By Value:+x>表示技能命中后使目标的AT减少x,与agi无关。
<AT Advance By ST:+x>表示技能命中后使目标的硬直减少x,通过100*x/target.agi计算得到AT减少量。
4. 设置本技能具有解除正在驱动的魔法的功能
填写位置:技能的备注栏
<Cancel Cast>
5. 特定状态下才能/不能使用的技能
填写位置:技能的备注栏
<Disabled In State: x>表示该技能在x号状态下无法使用。
<Enabled In State: x>表示该技能只有在x号状态下才能使用。
6. 指定技能为S爆发技
填写位置:技能的备注栏
<奥义技>表示将此技能设定为S爆发技,可以设定多个,爆S时选择一个使用。
7. 指定敌人的等级以及是否为Boss
填写位置:敌人的备注栏
<Level: x> 表示将敌人等级设定为x
<Boss> 表示将该敌人设定为Boss
Game_Enemy类新增一个isBoss()方法,用于判断敌人是否为Boss。
8. 人物新增属性
填写位置:装备、状态的备注栏,角色佩戴该装备或拥有该状态时触发相应效果。
<Craft DelayST Rate: x.y>
角色所有行动的硬直时间(ST)变为x.y倍。多个装备·状态的该效果之间乘算。
<CastST Rate: x.y>
角色使用魔法时的驱动时间变为x.y倍。多个装备·状态的该效果之间乘算。
<Magic Critical Rate: +0.x>
轨迹系列里,魔法是无法暴击的,因此我推荐在数据库里把魔法的暴击设置为“无”。
而这个标签可以使魔法有0.x的概率暴击。多个效果之间加算。
<Extra Critical Damage Rate: +0.x>
角色的暴击伤害额外增加0.x,多个效果之间加算。内部加算后,和原始暴击伤害倍率
之间则是乘算。比如原始暴击伤害1.5倍,有2个装备设置了这个标签,分别是+0.1和
+0.2,那么最终暴击伤害倍率为1.5*(1+0.2+0.1)=1.95。
<Extra Heal Rate: +0.x>
角色使用回复技能时,对目标的治疗效果额外提升0.x倍。多个效果之间加算。
<Craft Damage Rate: +0.x>
角色使用战技(命中类型为物理的技能)时,伤害增加0.x倍,多个效果之间加算。
<Magic Damage Rate: +0.x>
角色使用魔法(命中类型为魔法的技能)时,伤害增加0.x倍,多个效果之间加算。
<Mp Absorb Rate: +0.x>
角色使用魔法命中敌人时,按照伤害的0.x倍回复MP,多个效果之间加算。
<Hp Absorb Rate: +0.x>
角色使用战技命中敌人时,按照伤害的0.x倍回复HP,多个效果之间加算。
<Kill Tp Absorb Value: +x>
角色击杀敌人时,回复x点TP。多个效果之间加算。
<Low Hp Craft Damage Rate: +0.x>
角色HP越低则战技伤害越高,1血时增加0.x倍,满血时不增伤(线性关系),多个效果之间加算。
<Low Hp Magic Damage Rate: +0.x>
角色HP越低则魔法伤害越高,1血时增加0.x倍,满血时不增伤(线性关系),多个效果之间加算。
<High Hp Craft Damage Rate: +0.x>
角色HP越高则战技伤害越高,满血时增加0.x倍,1血时不增伤(线性关系),多个效果之间加算。
<High Hp Magic Damage Rate: +0.x>
角色HP越高则魔法伤害越高,满血时增加0.x倍,1血时不增伤(线性关系),多个效果之间加算。
9. 护盾相关
填写位置:状态的备注栏
<Shield Hp Value: x> 此状态提供护盾效果,护盾的承伤上限为x(x是正整数)。
这个护盾是黎轨里的机制,而不是空零碧闪那样的按次数来完全防御,因为我一直
觉得空轨的盾太强了,黎轨的平衡一点。对于护盾状态,需要将持续回合数设置为
无效,护盾HP消耗完后会自动移除。另外,最好是给护盾做一个UI,用来显示角色
当前的护盾值。本插件实现了一个Sprite_Gauge_Shield类,可以像HP那样显示一
个类似血条的“护盾条”,但是需要一定的JS基础才能将其放到战斗UI上去。由于每
个人使用的战斗UI都不同,本插件没有实现UI的修改,只是提供了护盾的机制。 |
 组图打开中,请稍候......
评分
-
查看全部评分
|