rpgmakervxace吧 关注:17,939贴子:51,432
  • 1回复贴,共1

幸运关联技能离散度浮动拓展脚本分享(ai)

取消只看楼主收藏回复

在rpg maker vx ace中,幸运这个属性一直以来都是作为一种软属性呈现辅助作用,通过敌我双方幸运的差距,来增强某种状态施展成功的概率,以及小部分的增加逃跑成功的概率,相对来说,幸运这个属性在战斗方面起到的作用相当有限。
而技能离散度则是技能在造成伤害时,在技能计算公式的最终伤害后形成的相应的离散度之中的随机伤害,通常是用来作为避免伤害单一,使技能伤害呈现多样性的功能之一,但遗憾的是,幸运这个属性似乎并没有与技能伤害的浮动有相应的关联性。
这个脚本就可以将幸运与技能的离散度之间建立联系,当角色的幸运高于敌方的幸运时,技能造成的浮动伤害下限会提升,并且会随着幸运的提升使得技能造成的伤害接近浮动的峰值。
声明:此脚本为我协同ai并经过了适当修改,并非完全由我独立制作
脚本的具体规则在注释中写的比较详细,因此不在这里赘述。
此脚本内容如下:
#==============================================================================
# ■ 幸运属性修正 - 影响技能离散度
#==============================================================================
# 作者: 召唤魔龙,ai
# 版本: 1.0
# 最后更新: 2026-02-16
#------------------------------------------------------------------------------
# 功能说明:
# 根据攻击者与目标的幸运差值,动态调整技能伤害的浮动范围及分布偏向。
#------------------------------------------------------------------------------
# 详细规则:
# 1.当角色的幸运与敌人的幸运相近时(双方幸运的差的绝对值在20以内),如果技能离散度
# 为20,则按照原本的20离散度计算(即技能浮动为80%到120%);
# 2.当角色的幸运超过敌人幸运时(角色幸运比敌人大20以上,100及以下),则离散度中伤害
# 偏低的部分的离散度将会升高,例如离散度为x,原本技能幅度为100-x到100+x,但角色幸运
# 值相对敌人较高(超出部分大于20,不大于100),技能幅度将会变为100-x/2到100+x。且超
# 出幸运越接近100,造成伤害大于100(原倍率)的概率越大;
# 3.当角色的幸运远超于敌人时(差值大于100),则技能离散度将会升到100(技能原倍率)
# 到100+x,且幸运差距越大,造成接近100+x倍率伤害的概率越大;
# 4.当角色幸运小于敌人时,同理,角色与敌人的幸运差值(角色-敌人)在-20到-100之间,
# 伤害倍率为100-x到100+x/2,且越接近-100,造成伤害小于原倍率的概率越高;当差值
# 低于-100时,倍率变为100-x到100,且幸运差值相差越大,造成接近100-x倍率伤害的
# 概率越大;
#5.幸运与技能离散度的关联,对敌方单位也有效。
#------------------------------------------------------------------------------
# 注意事项:
# 离散度修正仅作用于 HP/MP 伤害,对于 TP 伤害或无浮动效果的技能不产生影响。
# 当离散度 x 为 0 时,本脚本自动回退到原始逻辑(伤害不变)。
# 若您有其他脚本也修改了 apply_variance,请确保本脚本最后加载,或手动调整别名顺序。
#------------------------------------------------------------------------------
# 配置:
# 在 LuckVariance::ENABLED 中设置 true 启用,false 禁用。
#==============================================================================
module LuckVariance
# 是否启用幸运影响离散度
ENABLED = true
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
# 新增实例变量,用于在 apply_variance 中获取攻击者和技能信息
attr_accessor :last_user, :last_item
#--------------------------------------------------------------------------
# ● 别名:计算伤害(用于记录攻击者和技能)
#--------------------------------------------------------------------------
alias luck_make_damage_value make_damage_value
def make_damage_value(user, item)
# 记录本次伤害计算的攻击者和技能
@last_user = user
@last_item = item
luck_make_damage_value(user, item)
# 清除记录,避免影响后续计算(可选)
@last_user = nil
@last_item = nil
end
#--------------------------------------------------------------------------
# ● 重定义:应用离散度(支持幸运修正)
#--------------------------------------------------------------------------
alias luck_apply_variance apply_variance
def apply_variance(damage, variance)
# 若未启用幸运修正、缺少必要信息、或方差为0,则使用原始方法
if !LuckVariance::ENABLED || @last_user.nil? || @last_item.nil? || variance == 0
return luck_apply_variance(damage, variance)
end
user = @last_user
target = self
item = @last_item
d = user.luk - target.luk # 幸运差值
x = variance.to_f # 原始离散度(百分比)
# --- 1. 根据幸运差值确定伤害倍率范围 [lower, upper] ---
lower = 100.0
upper = 100.0
if d.abs <= 20
lower = 100 - x
upper = 100 + x
elsif d > 20 && d <= 100
lower = 100 - x / 2
upper = 100 + x
elsif d > 100
lower = 100
upper = 100 + x
elsif d >= -100 && d < -20
lower = 100 - x
upper = 100 + x / 2
else # d < -100
lower = 100 - x
upper = 100
end
# --- 2. 根据幸运差值计算分布参数 t,用于偏向性 ---
t = 1.0
if d.abs <= 20
t = 1.0
elsif d > 20 && d <= 100
# t 从 1 线性下降到 0.1
t = (100 - d) / 80 * 0.9 + 0.1
elsif d > 100
t = 100.0 / d
elsif d >= -100 && d < -20
# p = (100 + d) / 80 从 1 到 0
p = (100 + d) / 80
t = 1.0 / (p * 0.9 + 0.1)
else # d < -100
t = d.abs / 100.0
end
# --- 3. 生成随机因子并计算最终倍率 ---
r = rand
factor = r ** t
rate = lower + (upper - lower) * factor
# --- 4. 应用倍率到伤害值 ---
new_damage = damage * rate / 100.0
# 保持原伤害的符号(正/负),并取整
sign = damage <=> 0
new_damage = new_damage.to_i
new_damage = 0 if sign == 0
return new_damage
end
end
#==============================================================================
# 注:本脚本需置于所有战斗相关脚本之后,以确保正确覆盖 apply_variance 方法。
# 若出现兼容性问题,请调整脚本顺序。
#==============================================================================


贴子含AI内容
IP属地:天津1楼2026-02-19 13:06回复
    一些非必要的说明:
    1、可以在脚本的配置界面通过修改true或者false来决定是否启用幸运影响技能离散度;
    2、在该脚本中,对幸运产生技能浮动影响的有效幸运差值为100,如果你的项目中的装备属性数值需求与本脚本差异较大,可以修改脚本内容中apply_variance方法的相关数据,来适应你的项目。该脚本的计算公式写的相对简单,d为幸运差值(等价于a.luk-b.luk),x为技能离散度,理解难度并不算大,可在方法中修改关于d和x的公式;
    3、本脚本主要用到的方法apply_variance,如果有其他脚本也修改了此方法,可以尝试调整脚本顺序使该脚本覆盖方法以正常生效;
    4、暂时就这些,其余以后补充


    IP属地:天津2楼2026-02-19 13:15
    回复