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

Project1

 找回密码
 注册会员
搜索
查看: 1606|回复: 3
打印 上一主题 下一主题

[已经解决] 有没有xp的技能反击技。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
291 小时
注册时间
2011-12-23
帖子
106
跳转到指定楼层
1
发表于 2013-3-21 14:44:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 大宇宙时代 于 2013-3-22 12:53 编辑

搜了都是vx的脚步或是地址过期,

有xp的吗

防守反击技能:
己方动作,使用技能中反击技,被敌人攻击,无伤且反击攻击。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
291 小时
注册时间
2011-12-23
帖子
106
2
 楼主| 发表于 2013-3-21 15:38:28 | 只看该作者
#==========================================================================
# 本脚本来自www.66RPG.com,由ikki转载。使用请保留此信息
#=========================================================================

# ▼▲▼ XRXS27. 特殊効果 SuperEX「反击」 ver.1.05 ▼▲▼
# by シムナフ, ピニョン

#========================================================================
# □ 自定义设定
#========================================================================
class Game_Battler
  # 反击的状态名
  STATE_COUNTER_NAME = '反击'
end

#========================================================================
# ◇ 说明文档
#=======================================================================
#****Warning! 重新定义了 Game_Actor#skill_can_use? ****

#使用方法
#对于身中“反击”状态的角色,当收到单独的攻击的时候会自动反击
#反击的模式可以在下面设定

#-cr (counter react)下面设定可以反击的挨打设定,
# 比如设定一个状态名为“反击 -crm”,则受到魔法攻击的时候会自动反击
#-crp  (physical)=>遭到通常攻击,物理攻击的时候反击
#-crm  (masic)=>遭到魔法攻击的时候反击
#-cre7 (element)=>遭到属性ID编号为7的攻击的时候反击。

#-ca (counter act)下面设定反击行为
#比如设置一个状态名叫做“反击 -cas19”,那么受到攻击的时候就会用19号特技反击。
#-cas1 (skill)=>使用编号为1的技能
#-cai1 (item)=>使用编号为1的物品。
#-caa  (attack)=>使用物理攻击反击。
#-cae  (escape)=>逃跑,敌人使用

#-cac  (copy)=>受けたスキルをそのまま反击。未テスト(笑
#何もつけない場合は通常攻撃反击になります。(不懂……?@_@?)

#注意和即时战斗的共同使用问题……

#举例:设置一个状态,使得遭遇物理攻击的时候使用物品4,“反击 -crp -cai4”

#========================================================================
# ■ Game_Battler (分割定義 1)
#========================================================================

class Game_Battler
  #-----------------------------------------------------------------------
  # ● オブジェクト初期化
  #-----------------------------------------------------------------------
  def states=(states)
    @states = states
  end

  #-----------------------------------------------------------------------
  # ● オブジェクト初期化
  #-----------------------------------------------------------------------
  alias original_initialize_before_counter_action initialize
  def initialize
    original_initialize_before_counter_action()
    @counter_action = Game_BattleAction.new
  end

  #-----------------------------------------------------------------------
  # ●
  #-----------------------------------------------------------------------
  alias original_current_action_before_counter_action current_action
  def current_action
      if @counter_action.cleared?
        return original_current_action_before_counter_action()
      else
        return @counter_action
      end
  end

  #-----------------------------------------------------------------------
  # ●
  #-----------------------------------------------------------------------
  def counter_action
    return @counter_action
  end
  #-----------------------------------------------------------------------
  # ●
  #-----------------------------------------------------------------------
  def counter_acting?
    if !@counter_action.cleared?
      return true
    else
      return false
    end
  end
  #-----------------------------------------------------------------------
  # ● 戦闘不能判定
  #-----------------------------------------------------------------------
  #alias original_dead_before_counter_action dead?
  #def dead?
  #  if self.counter_acting?
  #    return false
  #  else
  #    return original_dead_before_counter_action()
  #  end
  #end

  #----------------------------------------------------------------------
  # ●
  #----------------------------------------------------------------------
  def counter_action_for(attacker, skill = nil)
    #カウンターからのカウンターは発生しない
    if attacker.counter_acting?
      return
    end
    #動けない場合存在しない場合は発生しない
    #if !self.movable? || !self.exist?
    #  return
    #end
    if attacker.is_a?(Game_Actor)
      if self.is_a?(Game_Actor)#味方からの攻撃はカウンター不可
        return
      end
      ind = $game_party.get_index_by(attacker)
      s_ind = $game_troop.get_index_by(self)
    elsif attacker.is_a?(Game_Enemy)
      if self.is_a?(Game_Enemy)#味方からの攻撃はカウンター不可
        return
      end
      ind = $game_troop.get_index_by(attacker)
      s_ind = $game_party.get_index_by(self)
    end
    if ind.nil? || s_ind.nil?
      return
    end
   
    act_kind = 'a'
    act_id = 0
   
    for id in @states
      if $data_states[id].name =~ /^#{STATE_COUNTER_NAME}/
        react_cond = false
        react_succ = false
        for opt in $data_states[id].options
          if opt =~ /^cr([pmedns])([0-9]*)/
            kind = $1
            id = $2.to_i
            react_cond = true
            case kind
            when 'p'
              if skill.nil? || skill.atk_f >= 100
                react_succ = true
              end
            when 'm'
              if !skill.nil? && skill.int_f >= 100
                react_succ = true
              end
            when 'e'
              if id.nil? || id.zero?
                next
              elsif skill.nil? #武器の攻撃属性
                if attacker.is_a?(Game_Actor) && !$data_weapons[@weapon_id].nil?
                  if $data_weapons[@weapon_id].element_set.include?(id)
                    react_succ = true
                  end
                end
              elsif skill.element_set.include?(id)#スキルの攻撃属性
                react_succ = true
              end

            when 'n'#相手攻撃無効カウンター
              no_attack = true
            when 's'#回避時カウンター
              miss_attack = true
            when 'd'#死亡カウンター
              if self.dead? && self.movable?
                react_succ = true
              end
            end
           
          elsif opt =~ /^ca([asime])([0-9]*)/
            act_kind = $1
            act_id = $2.to_i
            act_cond = true
          end
        end
      
        if (!react_cond || react_succ)#反击条件が無い・もしくは条件に一致
          counter = true#カウンター成功
          break
        else
          next
        end
      
      end
    end
   
    if !counter#カウンター成功していなかった場合
      return
    end


    # 相手攻撃無効カウンターありならダメージ戻し
    if no_attack == true
      if self.damage != "被对手闪开了!"
        self.hp += self.damage
        self.damage = "反击!!"
        self.critical = false
        @state_changed = false
        self.states = @old_states
      end
    end

    # 回避時カウンターありでミスじゃないときはさよなら
    if miss_attack == true and self.damage != "被对手闪开了!"
      return
    end


    if act_kind == 'c'
      if skill.nil?
        act_kind = 'a'
      else
        act_kind = 's'
        act_id = skill.id
      end
    end
   
    case act_kind
    when 's'#skill kind:1 basic0
      s = $data_skills[act_id]
      if s.nil? || ![0,1].include?(s.occasion) || !self.skill_can_use?(act_id)
        return
      end
      self.counter_action.skill_id = act_id
      self.counter_action.kind = 1
      if [1,2].include?(s.scope)#1,2で敵単体、敵全体。
        self.counter_action.target_index = ind
      else
        self.counter_action.target_index = s_ind
      end
    when 'i'#item kind:2 basic:0
      i = $data_items[act_id]
      if !self.is_a?(Game_Actor) || i.nil? || ![0,1].include?(i.occasion) || !$game_party.item_can_use?(act_id)
        return
      end
      self.counter_action.item_id = act_id
      self.counter_action.kind = 2
      if [1,2].include?(i.scope)#1,2で敵単体、敵全体。
        self.counter_action.target_index = ind
      else
        self.counter_action.target_index = s_ind
      end
    when 'a'#通常攻撃 kind:0 basic:0
      self.counter_action.kind = 0
      self.counter_action.target_index = ind
      self.counter_action.basic = 0
    when 'e'#escape kind:0 basic:2
      if !self.is_a?(Game_Enemy)
        return
      end
      self.counter_action.kind = 0
      self.counter_action.target_index = ind
      self.counter_action.basic = 2     
    end
    return
   
  end

  #----------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #     attacker : 攻撃者 (バトラー)
  #----------------------------------------------------------------------
  alias original_attack_effect_before_counter_action attack_effect
  def attack_effect(attacker)
    @old_states = self.states.clone
    val = original_attack_effect_before_counter_action(attacker)
    self.counter_action_for(attacker)
    return val
  end

  #----------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #----------------------------------------------------------------------
  alias original_skill_effect_before_counter_action skill_effect
  def skill_effect(attacker, skill)
    @old_states = self.states.clone
    val = original_skill_effect_before_counter_action(attacker, skill)
    self.counter_action_for(attacker, skill)
    return val
  end

end

#=======================================================================
# ■ Game_Actor
#--------------------------------------------------------------------------
#  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
# の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
#=======================================================================

class Game_Actor < Game_Battler
  #----------------------------------------------------------------------
  # ● スキルの使用可能判定
  #     skill_id : スキル ID
  #----------------------------------------------------------------------
  def skill_can_use?(skill_id)
    #if not skill_learn?(skill_id)
    #  return false
    #end
   
    # 全技能禁止
    if self.state?(48)
      return false
    #$data_skills[112] = false
   
    # 攻击技能禁止
    elsif $data_skills[skill_id].atk_f > 0 and self.state?(49)
      return false
    end
   
    return super
  end
end

#========================================================================
# ■ Game_BattleAction
#-------------------------------------------------------------------------
#  アクション (戦闘中の行動) を扱うクラスです。このクラスは Game_Battler クラ
# スの内部で使用されます。
#========================================================================

class Game_BattleAction

  alias :xp_original_initialize :initialize
  def initialize
    xp_original_initialize()
    @turn_move_times = 0
  end
  #-----------------------------------------------------------------------
  # ● クリア判定
  #-----------------------------------------------------------------------
  def cleared?
    if @speed == 0 && @kind == 0 && @basic == 3 && @skill_id == 0 && @item_id == 0 && @target_index == -1 && @forcing == false
      return true
    else
      return false
    end
  end

end


#=========================================================================
# ■ Game_Party
#--------------------------------------------------------------------------
#  パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#=========================================================================

class Game_Party
  #----------------------------------------------------------------------
  # ●
  #----------------------------------------------------------------------
  def get_index_by(actor)
    for i in [email protected]()
      if @actors.equal?(actor)
        return i
      end
    end
    return nil
  end
end


#==========================================================================
# ■ Game_Troop
#--------------------------------------------------------------------------
#  トループを扱うクラスです。このクラスのインスタンスは $game_troop で参照さ
# れます。
#==========================================================================

class Game_Troop
  #----------------------------------------------------------------------
  # ●
  #----------------------------------------------------------------------
  def get_index_by(enemy)
    for i in [email protected]()
      if @enemies.equal?(enemy)
        return i
      end
    end
    return nil
  end
end

#==========================================================================
# ■ Scene_Battle (分割定義 4)
#--------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==========================================================================

class Scene_Battle

  #----------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #----------------------------------------------------------------------
  alias original_update_phase4_step6_before_counter_action update_phase4_step6
  def update_phase4_step6
    original_update_phase4_step6_before_counter_action()
    clear_counter_action(@active_battler)
    activate_counter_action(@action_battlers)
  end
  #----------------------------------------------------------------------
  #
  #----------------------------------------------------------------------
  def clear_counter_action(active_battler)
    #既にカウンターを行ったバトラーのカウンターアクションをクリア
    if active_battler.nil?
      return
    end
    if !active_battler.counter_acting?
      return
    end
    active_battler.counter_action.clear
    return
  end
  #----------------------------------------------------------------------
  #
  #----------------------------------------------------------------------
  def activate_counter_action(action_battlers)   
    #カウンター状態になったバトラーを一回だけアクションバトラーズにアンシフト
    if !action_battlers[0].nil?
      if action_battlers[0].counter_acting?#既にカウンター行動待機バトラーが居た場合
        return
      end
    end
    counter_battlers = []
    $game_party.actors.each{|a|
      if a.counter_acting?
        counter_battlers.push(a)
      end
    }
    $game_troop.enemies.each{|e|
      if e.counter_acting?
        counter_battlers.push(e)
      end
    }
    counter_battlers = counter_battlers.sort_by{|b| b.agi}
    counter_battlers.each{ |b|
      action_battlers.unshift(b)
    }
    #p action_battlers.collect{|b| b.name}
    return
  end
end


#=============================
#CPバトル対応。
#ターンバトルの人は必要なし。
#=============================
class Game_Battler
  if method_defined?(:cp)
    alias original_cp_before_counter_action cp
    def cp
      if self.counter_acting?
        return 65535
      else
        return original_cp_before_counter_action()
      end
    end
  end
  if method_defined?(:cp=)
    alias original_cp_before_counter_action= cp=
    def cp=(n)
      if self.counter_acting?
        return
      else
        self.original_cp_before_counter_action = n
      end
    end
  end
end
#=============================
#ここまで。
#=============================


  #---------------------------------------------------------------------
  #
  #---------------------------------------------------------------------

module RPG
  class State
    def name
      if @new_name.nil?
        name_setting()
      end
      return @new_name
    end
   
    def options
      if @options.nil?
        name_setting()
      end
      return @options
    end
   
    def name_setting
      names = @name.split(/ +\-/)
      @new_name = names.shift
      if @new_name.nil?
        @new_name = ''
      end
      @options = names
      if @options.nil?
        @options = []
      end
    end
   
  end
end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
291 小时
注册时间
2011-12-23
帖子
106
3
 楼主| 发表于 2013-3-21 15:39:44 | 只看该作者
本帖最后由 大宇宙时代 于 2013-3-22 12:33 编辑

2楼脚本具体怎么使用,请大侠赐教。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2011-2-17
帖子
518
4
发表于 2013-3-21 21:33:24 | 只看该作者
本帖最后由 小和尚 于 2013-3-21 21:35 编辑

让主角附加此状态 受到攻击的时候就会用19号特技反击 技能编号可以自己改 具体反击的内容脚本里已经写了

未命名.JPG (139.99 KB, 下载次数: 6)

未命名.JPG

点评

多谢多谢,原来设定状态栏  发表于 2013-3-22 12:53
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 04:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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