设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: JOSEPH12345
打印 上一主题 下一主题

关于组合技能的问题

 关闭 [复制链接]

Lv4.逐梦者 (暗夜天使)

名侦探小柯

梦石
2
星屑
3660
在线时间
3689 小时
注册时间
2006-9-6
帖子
37419

MZ评测员开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

11
发表于 2007-7-14 21:01:37 | 只看该作者
6R上好像有组合技能的脚本……

或者用事件……(在特定NPC那选择组合……)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-7-5
帖子
44
12
 楼主| 发表于 2007-7-14 21:07:16 | 只看该作者
我找了个网站翻译了以下哪个脚本中的日语,现在你个我举个例子吧
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================

# 特技组合   源自日本
# 如(十字斩+扫荡=十字斩扫荡)
# 我方的特技可以组合。
# 条件基本如下
# 1.施展组合技能的角色的技能中间敌人没攻击.
# 2.攻击同一个敌人
#
# 组合成功的话,伤害增加.
# 伤害率:
# 不组合一律100%
# 每多组合1人增加25%
#===============================================



module Combo_Skill_Config
  # 组合技威力(%)
  COMBO_BONUS = 25
  # 全体攻撃的组合值,=0表示无效
  ALL_ATTCK_SKILL_MAX = 1
  # 组合技能动画编号
  COMBO_ANIME_ID = 101
  # 基本前组合成功率
  BASE_BEFORE_REVISION = 100
  # 基本後组合成功率
  BASE_AFTER_REVISION = 100
  # ダメージ一括表示するかどうか(?)
  SHOW_DAMAGE_LUMP = true
  # 显示组合名称
  COMBO_NAME_SHOW = true
  # 特级名段落最小字数
  # 这个数字以下的文字数的技艺就那样被联合编入。
  COMBO_NAME_SPLIT = 3
end

class Scene_Battle
  include Combo_Skill_Config
  #--------------------------------------------------------------------------
  # ● 主要阶段开始|
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_start_phase4 start_phase4
  def start_phase4
    @combo_on = false
    @combo_bese_target = nil
    @combo_finish = false
    @combo_count = 0
    @combo_name = ""
    scene_battle_skill_combo_start_phase4
  end
  #--------------------------------------------------------------------------
  # ● 框架更新(主要阶段)
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_update_phase4 update_phase4
  def update_phase4
    if @combo_effect_start
      update_phase4_combo_effect
      return
    end
    scene_battle_skill_combo_update_phase4
  end
  #--------------------------------------------------------------------------
  # ● 框架更新(主要阶段 阶段 2: 动作开始)
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_update_phase4_step2 update_phase4_step2
  def update_phase4_step2
    # 如果不是强制动作
    unless @active_battler.current_action.forcing
      # 规定通常攻击 [敌人]是[通常攻击伙伴的]情况
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 动作设定攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # 规定不能是 [行动的]情况
      if @active_battler.restriction == 4
        # 清洁动作强制对象的butler
        $game_temp.forcing_battler = nil
        # 阶段 1 转移
        @phase4_step = 1
        return
      end
    end
    # 联合判断
    # 未行动butler不是0,如果不是联合的进行中联合判断
    if @action_battlers.size != 0 and @combo_on == false
      # 行动者联合可能或者判断
      if combo_ok?(@active_battler)
        @combo_skill = []
        @combo_skill.push(@active_battler.current_action.skill_id)
        @combo_member = []
        @combo_member.push(@active_battler)
        last_battler = @active_battler
        # 继续的朋友的联合判断
        for i in 0...@action_battlers.size
          next_battler = @action_battlers
          break if combo_ok?(next_battler) == false
          break if combo_probability(last_battler, next_battler) == false
          next_battler.combo_number = i + 2
          @combo_skill.push(next_battler.current_action.skill_id)
          @combo_member.push(next_battler)
          last_battler = @action_battlers
        end
        @combo_max = @combo_member.size
        if @combo_max > 1
          @combo_count = 0
          @active_battler.combo_number = 1
          @combo_on = true
          @combo_effect = true
        else
          @combo_bese_target = nil
          @combo_all_target_count = 0
          @combo_on = false
        end
      end
    end
    if @combo_effect
      @combo_effect_start = true
    end
    scene_battle_skill_combo_update_phase4_step2
  end
  #--------------------------------------------------------------------------
  # ● 特级动作 结果作成
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_make_skill_action_result make_skill_action_result
  def make_skill_action_result
    scene_battle_skill_combo_make_skill_action_result
    # 消去行动者的联合号码
    if @combo_on
      @active_battler.combo_number = nil
      @combo_count += 1
      if @combo_count >= @combo_max
        @combo_finish = true
      end
      if COMBO_NAME_SHOW
        c_name = get_combo_skill_name(@skill)
        if @combo_finish
          @combo_name += c_name[1]
          @help_window.set_text(@combo_name, 1)
          @help_window.visible = true
        else
          @combo_name += c_name[0]
          @help_window.visible = false
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 框架更新(联合效果表示)
  #--------------------------------------------------------------------------
  def update_phase4_combo_effect
    # 行动方面动画
    @active_battler.animation_id = COMBO_ANIME_ID
    @active_battler.animation_hit = true
    # 尽管是动画的长度,最低8 框架等候
    @wait_count = 8
    @combo_effect_start = false
    @phase4_step = 3
  end
  #--------------------------------------------------------------------------
  # ● 框架更新(主要阶段 阶段 5: 损坏表示)
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_update_phase4_step5 update_phase4_step5
  def update_phase4_step5
    scene_battle_skill_combo_update_phase4_step5
    # 是联合的最后的情况
    if @combo_finish
      # 联合的时候的处理遗漏的应对
      battler = []
      battler += $game_troop.enemies
      battler += $game_party.actors
      for target in battler
        if target.exist?
          if SHOW_DAMAGE_LUMP
            if target.combo_total_damage != nil
              target.damage = target.combo_total_damage
              target.damage_pop = true
              target.combo_total_damage = nil
            end
          end
          if target.combo_dead
            target.hp = 0
            target.combo_dead = false
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 框架更新(主要阶段 阶段 6: 恢复精神)
  #--------------------------------------------------------------------------
  alias scene_battle_skill_combo_update_phase4_step6 update_phase4_step6
  def update_phase4_step6
    scene_battle_skill_combo_update_phase4_step6
    if @combo_finish
      @combo_on = false
      @combo_bese_target = nil
      @combo_count = 0
      @combo_finish = false
      @combo_effect = false
      @combo_name = ""
    end
  end
  #--------------------------------------------------------------------------
  # ● 联合发动判断
  #--------------------------------------------------------------------------
  def combo_ok?(actor)
    all_attck_skill_max = ALL_ATTCK_SKILL_MAX
    # 行动者要是敌人还false
    if actor.is_a?(Game_Enemy)
      return false
    end
    # 行动者如果是特级以外的行动还false
    if actor.current_action.kind != 1
      return false
    end
    # 行动者如果不能使用特级还false
    unless actor.skill_can_use?(actor.current_action.skill_id)
      return false
    end
    # 取得特级
    skill = $data_skills[actor.current_action.skill_id]
    # 使用特级如果有联合禁止属性还false
    for i in skill.element_set
      if $data_system.elements != nil
        if $data_system.elements =~ /連携禁止/
          return false
        end
      end
    end
    # 基本目标没决定的情况
    if @combo_bese_target == nil
      @combo_all_target_count = 0
      # 本来是攻击的情况
      if skill.scope == 2
        if @combo_all_target_count >= all_attck_skill_max
          return false
        end
        # 全体(-1)设定基本目标
        @combo_bese_target = -1
        @combo_all_target_count += 1
      # 是单体攻击的情况
      else
        @combo_bese_target = actor.current_action.target_index
     end
    # 如果基本目标决定最初的
    # 攻击本来是攻击的情况
    elsif @combo_bese_target == -1
      if skill.scope == 2
        # 1联合中规定回数以上的全体攻击不能编入
        if @combo_all_target_count >= all_attck_skill_max
          return false
        end
        @combo_all_target_count += 1
      else
        @combo_bese_target = actor.current_action.target_index
      end
    else
      if skill.scope == 2
        # 1联合中规定回数以上的全体攻击不能编入
        if @combo_all_target_count >= all_attck_skill_max
          return false
        end
        @combo_all_target_count += 1
      else
        # 目标是不是与基本目标一起
        if actor.current_action.target_index != @combo_bese_target
          return false
        end
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 联合概率计算
  #--------------------------------------------------------------------------
  def combo_probability(last_battler, next_battler)
    s_num = $data_system.switches.index("テスト用 絶対連携")
    if s_num != nil
      return true if $game_switches[s_num]
    end
    last_skill = $data_skills[last_battler.current_action.skill_id]
    next_skill = $data_skills[next_battler.current_action.skill_id]
    last_n = skill_combo_after_revision(last_skill)
    last_n += actor_combo_after_revision(last_battler)
    next_n = skill_combo_before_revision(next_skill)
    next_n += actor_combo_before_revision(next_battler)
    n = last_n + next_n
    if (rand(100) < n)
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● actor 的基本联合概率补正取得
  #--------------------------------------------------------------------------
  def actor_combo_base_revision(actor)
    return 0
  end
  #--------------------------------------------------------------------------
  # ● actor 的前联合概率补正取得
  #--------------------------------------------------------------------------
  def actor_combo_before_revision(actor)
    n = actor_combo_base_revision(actor)
    n += BASE_BEFORE_REVISION
    return n
  end
  #--------------------------------------------------------------------------
  # ● actor 之后联合概率补正取得
  #--------------------------------------------------------------------------
  def actor_combo_after_revision(actor)
    n = actor_combo_base_revision(actor)
    n += BASE_AFTER_REVISION
    return n
  end
  #--------------------------------------------------------------------------
  # ● 特级的前联合概率补正取得
  #--------------------------------------------------------------------------
  def skill_combo_before_revision(skill)
    rate = 0
    for i in skill.element_set
      if $data_system.elements != nil
        if $data_system.elements =~ /前連携率([+-]?[0-9]+)(%|%)/
          rate += $1.to_i
        end
      end
    end
    return rate
  end
  #--------------------------------------------------------------------------
  # ●特级之后联合概率补正取得
  #--------------------------------------------------------------------------
  def skill_combo_after_revision(skill)
    rate = 0
    for i in skill.element_set
      if $data_system.elements != nil
        if $data_system.elements =~ /後連携率([+-]?[0-9]+)(%|%)/
          rate += $1.to_i
        end
      end
    end
    return rate
  end
  #--------------------------------------------------------------------------
  # ● 把特级名分成前半部分后半还那个排列
  #--------------------------------------------------------------------------
  def get_combo_skill_name(skill)
    name = skill.name.split('')
    if name.size == 1
      return [name[0], name[0]]
    elsif name.size <= COMBO_NAME_SPLIT
      tempname = name.join
      return [tempname, tempname]
    end
    num = name.size / 2
    name1 = ""
    name2 = ""
    for i in 0...num
      name1 += name
    end
    for i in num...name.size
      name2 += name
    end
    return [name1, name2]
  end
end

class Game_Battler
  include Combo_Skill_Config
  attr_accessor :combo_number             # 联合发动的时候的顺
  attr_accessor :combo_dead               # 序联合发动的时候的死亡标
  attr_accessor :combo_total_damage       # 志联合发动的时候的总损坏
  #--------------------------------------------------------------------------
  # ● 客观初始化
  #--------------------------------------------------------------------------
  alias game_battler_skill_combo_initialize initialize
  def initialize
    game_battler_skill_combo_initialize
    @combo_number = nil
    @combo_dead = false
    @combo_total_damage = nil
  end
  #--------------------------------------------------------------------------
  # ● 特级的效果适用
  #     user  : 特级的使用者(butler)
  #     skill : 特级
  #--------------------------------------------------------------------------
  alias game_battler_skill_combo_skill_effect skill_effect
  def skill_effect(user, skill)
    result = game_battler_skill_combo_skill_effect(user, skill)
    if user.combo_number != nil
      # 联合补正
      if self.damage.is_a?(Numeric)
        combo_rate = user.combo_number * COMBO_BONUS
        damage = self.damage * combo_rate / 100
        self.damage += damage
        self.hp -= damage
        if SHOW_DAMAGE_LUMP
          @combo_total_damage = 0 if @combo_total_damage == nil
          @combo_total_damage += self.damage
          self.damage = nil
        end
      end
      if self.dead?
        self.combo_dead = true
        self.hp = 1
      end
    end
    return result
  end
end

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
我是超级采鸟
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1707
在线时间
3039 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

13
发表于 2007-7-14 23:20:14 | 只看该作者
def combo_ok?(actor)
   all_attck_skill_max = ALL_ATTCK_SKILL_MAX
   # 行动者要是敌人还false
   if actor.is_a?(Game_Enemy)
     return false
   end
   # 行动者如果是特级以外的行动还false
   if actor.current_action.kind != 1
     return false
   end
   # 行动者如果不能使用特级还false
   unless actor.skill_can_use?(actor.current_action.skill_id)
     return false
   end
   # 取得特级
   skill = $data_skills[actor.current_action.skill_id]
   # 使用特级如果有联合禁止属性还false
   for i in skill.element_set
     if $data_system.elements != nil
       if $data_system.elements =~ /連携禁止/
         return false
       end
     end
   end
   # 基本目标没决定的情况
   if @combo_bese_target == nil
     @combo_all_target_count = 0
     # 本来是攻击的情况
     if skill.scope == 2
       if @combo_all_target_count >= all_attck_skill_max
         return false
       end
       # 全体(-1)设定基本目标
       @combo_bese_target = -1
       @combo_all_target_count += 1
     # 是单体攻击的情况
     else
       @combo_bese_target = actor.current_action.target_index
    end
   # 如果基本目标决定最初的
   # 攻击本来是攻击的情况
   elsif @combo_bese_target == -1
     if skill.scope == 2
       # 1联合中规定回数以上的全体攻击不能编入
       if @combo_all_target_count >= all_attck_skill_max
         return false
       end
       @combo_all_target_count += 1
     else
       @combo_bese_target = actor.current_action.target_index
     end
   else
     if skill.scope == 2
       # 1联合中规定回数以上的全体攻击不能编入
       if @combo_all_target_count >= all_attck_skill_max
         return false
       end
       @combo_all_target_count += 1
     else
       # 目标是不是与基本目标一起
       if actor.current_action.target_index != @combo_bese_target
         return false
       end
     end
   end
   return true
end

如果我记得没错,这段就是决定什么时候连携技开始发动的。你可以在这里添加条件分歧。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-7-5
帖子
44
14
 楼主| 发表于 2007-7-15 01:06:50 | 只看该作者
爱是不懂
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-7-5
帖子
44
15
 楼主| 发表于 2007-7-15 01:07:08 | 只看该作者
还是不懂
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1707
在线时间
3039 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

16
发表于 2007-7-15 01:20:56 | 只看该作者
= =看懂脚本以后写if里面的东西。然后如果允许联合返回true,不允许返回false
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-9-22 06:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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