扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 75|回复: 0

[转载发布] 格挡状态加反伤技能

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 23:55
  • 签到天数: 160 天

    连续签到: 1 天

    [LV.7]常住居民III

    2467

    主题

    510

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    13543
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    16548

    灌水之王

    发表于 2025-7-24 20:28:31 | 显示全部楼层 |阅读模式
    由于没有找到合适的格挡脚本,怒了,遂自写.(推荐与Yanfly的战斗脚本搭配,并且调整Yanfly的战斗脚本中的ENABLE_POPUPS = true)
    1. class Game_Battler < Game_BattlerBase  # ========== 全局配置 ==========    # 系统总开关ID(当该开关开启时,抵挡系统生效)  SYSTEM_SWITCH_ID = 10    # 角色系统配置(状态ID => [存储变量ID, 默认比例, 抵挡比例])  ACTOR_STATES = {    10 => [11, 0.50, 0.30],  # 状态10: 存储50%伤害, 抵挡30%伤害    15 => [15, 0.30, 0.20],  # 状态15: 存储30%伤害, 抵挡20%伤害    20 => [13, 0.25, 0.15]   # 状态20: 存储25%伤害, 抵挡15%伤害  }    # 敌人系统配置(状态ID => [存储变量ID, 默认比例, 抵挡比例])  ENEMY_STATES = {    25 => [21, 0.40, 0.25],  # 状态25: 存储40%伤害, 抵挡25%伤害    30 => [22, 0.60, 0.40],  # 状态30: 存储60%伤害, 抵挡40%伤害    35 => [23, 0.75, 0.50]   # 状态35: 存储75%伤害, 抵挡50%伤害  }    # ========== 脚本核心 ==========    # 别名原伤害处理方法  alias damage_block_and_record_execute_damage execute_damage  def execute_damage(user)    # 保存原始伤害值    original_damage = @result.hp_damage        # 仅处理实际伤害(正值)    if original_damage > 0      # 检查系统总开关是否开启      if $game_switches[SYSTEM_SWITCH_ID]        # 计算抵挡伤害        blocked_damage = calculate_blocked_damage(original_damage)                # 应用抵挡效果        @result.hp_damage = [original_damage - blocked_damage, 0].max                # 处理伤害记录        process_damage_recording(original_damage)                # 显示格挡伤害弹窗        if blocked_damage > 0 && $imported["YEA-BattleEngine"]          text = sprintf("格挡 %d", blocked_damage)          create_popup(text, "BLOCK_DAMAGE")        end      else        # 系统开关关闭时,不进行任何抵挡处理        @result.hp_damage = original_damage      end    end        # 调用原始伤害处理(传递正确的参数)    damage_block_and_record_execute_damage(user)  end    # 计算抵挡伤害  def calculate_blocked_damage(original_damage)    total_blocked = 0        # 处理角色抵挡    if actor?      ACTOR_STATES.each_key do |state_id|        next unless state?(state_id)        config = ACTOR_STATES[state_id]        block_ratio = get_block_ratio(state_id, config)        total_blocked += (original_damage * block_ratio).floor      end    end        # 处理敌人抵挡    if enemy?      ENEMY_STATES.each_key do |state_id|        next unless state?(state_id)        config = ENEMY_STATES[state_id]        block_ratio = get_block_ratio(state_id, config)        total_blocked += (original_damage * block_ratio).floor      end    end        # 确保抵挡不超过原始伤害    [total_blocked, original_damage].min  end    # 处理伤害记录  def process_damage_recording(original_damage)    # 处理角色伤害记录    if actor?      ACTOR_STATES.each_key do |state_id|        next unless state?(state_id)        record_damage_for_state(original_damage, state_id, ACTOR_STATES[state_id])      end    end        # 处理敌人伤害记录    if enemy?      ENEMY_STATES.each_key do |state_id|        next unless state?(state_id)        record_damage_for_state(original_damage, state_id, ENEMY_STATES[state_id])      end    end  end    # 获取抵挡比例  def get_block_ratio(state_id, config)    state = states.find { |s| s.id == state_id }        # 优先使用状态备注中的自定义抵挡比例    if state.note =~ //i      $1.to_f    else      config[2]  # 默认抵挡比例    end  end    # 状态伤害记录核心方法  def record_damage_for_state(original_damage, state_id, config)    # 解构配置 [变量ID, 记录比例, 抵挡比例]    var_id, record_ratio, _ = config        # 从状态获取自定义记录比例    state = states.find { |s| s.id == state_id }        # 优先使用状态备注中的自定义记录比例    if state.note =~ //i      record_ratio = $1.to_f    end        # 计算并记录伤害    recorded_damage = (original_damage * record_ratio).floor    $game_variables[var_id] += recorded_damage  endend# 添加YEA弹窗规则(如果YEA引擎存在)if $imported && $imported["YEA-BattleEngine"]  module YEA    module BATTLE      # 添加格挡伤害弹窗规则      POPUP_RULES["BLOCK_DAMAGE"] = [2.0, 1.0, 24, true, false, 180, 180, 255, DEFAULT]    end  endend复制代码
    复制代码
    反伤技能可使用变量写入伤害公式,这里不再赘述.
                本帖来自P1论坛作者晨风1,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=497777  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-8-6 19:10 , Processed in 0.085389 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表