じ☆ve冰风 发表于 2026-4-21 23:59:49

仿《 DELTARUNE》战斗物品动态字幕评价脚本

RUBY 代码
#==============================================================================
# ■ 仿《德尔塔符文》战斗物品动态字幕评价
#==============================================================================
# 作者:瑞吉
# 标签说明:
#   单人:
#   双人:
#   多人:
# 适用范围:物品、技能
#==============================================================================

module DataManager
class{ user_speech: 台词, targets: { target_id => 台词 } } }

def load_notetag_subtitle_final
    @subtitle_map = {}
    @subtitle_pair_map = {}
    @multi_subtitle_map = {}

    # 单人
    self.note.scan(//i)do |match|
      @subtitle_map.to_i] = match.to_s
    end

    # 双人
    self.note.scan(//i)do |match|
      @subtitle_pair_map[.to_i, match.to_i]] = {
      ci: match.to_s,
      pi: match.to_s
      }
    end

    # 多人
    self.note.scan(//i)do |match|
      user_id = match.to_i
      content = match.to_s
      target_map = {}
      user_speech = nil

      content.split('|').eachdo |part|
      part = part.strip
      if part =~ /^US\s*:\s*(.+)/i
          user_speech = $1.to_s.strip
      elsif part =~ /^(\d+)\s*:\s*(.+)/i
          target_map[$1.to_i] = $2.to_s.strip
      end
      end

      @multi_subtitle_map = {
      user_speech: user_speech,
      targets: target_map
      }
    end
end

def subtitle_for(actor_id)
    return@subtitle_mapif@subtitle_map.key?(actor_id)
    return@subtitle_mapif@subtitle_map.key?(0)
    nil
end

def pair_subtitle_for(user_id, target_id)
    @subtitle_pair_map[]
end

def multi_subtitle_for(user_id)
    @multi_subtitle_map
end
end

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
alias use_item_subtitle_final use_item

def use_item
    @last_used_item = @subject.current_action.item
    @last_user = @subject
    @last_targets = @subject.current_action.make_targets.compact

    use_item_subtitle_final

    show_subtitle_final if should_show_subtitle_final?
end

def should_show_subtitle_final?
    returnfalseunless@last_used_item.is_a?(RPG::UsableItem)
    returnfalseunless@last_used_item.respond_to?(:subtitle_for)

    item = @last_used_item
    user = @last_user

    multi = item.multi_subtitle_for(user.id)
    if multi
      targets = multi[:targets]
      returntrueif@last_targets.any? { |t| t.is_a?(Game_Actor) && targets.key?(t.id)}
      returntrueif multi[:user_speech] && !multi[:user_speech].empty?
    end

    @last_targets.eachdo |t|
      returntrueif t.is_a?(Game_Actor) && item.pair_subtitle_for(user.id, t.id)
    end

    returntrueif item.subtitle_for(user.id)

    false
end

def show_subtitle_final
    item = @last_used_item
    user = @last_user
    returnunless@log_window

    # 1. 多人评价
    multi_data = item.multi_subtitle_for(user.id)
    if multi_data
      targets_map = multi_data[:targets]
      user_speech = multi_data[:user_speech]

      # 使用者台词
      if user_speech && !user_speech.empty?
      user_name = $game_actors.name
      @log_window.add_text("#{user_name}:#{user_speech}")
      wait(30)
      end

      # 队友台词
      shown = false
      @last_targets.eachdo |target|
      nextunless target.is_a?(Game_Actor)
      text = targets_map
      nextunless text
      name = $game_actors.name
      @log_window.add_text("#{name}:#{text}")
      wait(20)
      shown = true
      end

      if shown || user_speech
      wait(30)
      return
      end
    end

    # 2. 双人评价
    @last_targets.eachdo |target|
      nextunless target.is_a?(Game_Actor)
      pair = item.pair_subtitle_for(user.id, target.id)
      if pair
      user_name = $game_actors.name
      target_name = $game_actors.name
      @log_window.add_text("#{user_name}:#{pair[:ci]}\n#{target_name}:#{pair[:pi]}")
      wait(60)
      return
      end
    end

    # 3. 单人评价
    single = item.subtitle_for(user.id)
    if single
      user_name = $game_actors.name
      @log_window.add_text("#{user_name}:#{single}")
      wait(60)
    end
end
end










            本帖来自P1论坛作者Ruigi,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=498846若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 仿《 DELTARUNE》战斗物品动态字幕评价脚本