查看: 2422|回复: 6

[已经过期] 请问如何能让角色和怪物在战斗中有前排和后排的概念

[复制链接]
梦石
0
星屑
173
在线时间
192 小时
注册时间
2011-3-13
回帖
31
发表于 2013-5-1 20:51:01 | 显示全部楼层 |阅读模式

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

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

×
就是近战站前排,远程站后排
近战只能打前排 远程都可以打这样
梦石
0
星屑
173
在线时间
192 小时
注册时间
2011-3-13
回帖
31
 楼主| 发表于 2013-5-2 13:06:12 | 显示全部楼层
就这么沉了吗.......
球脚本球事件,什么都行
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
165
在线时间
1 小时
注册时间
2013-3-5
回帖
1
发表于 2013-5-2 14:15:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
173
在线时间
192 小时
注册时间
2011-3-13
回帖
31
 楼主| 发表于 2013-5-3 18:12:22 | 显示全部楼层
......结果最后只来了俩广告么
回复

使用道具 举报

梦石
0
星屑
50
在线时间
366 小时
注册时间
2009-7-14
回帖
102
发表于 2013-5-3 18:44:23 | 显示全部楼层
何谓前排后排?单纯站位吗?你也不描述下腰什么效果,攻击只能先攻击前排的敌人,前排的敌人死了才能攻击后排?
这种效果略复杂,要写脚本的话,直接问一般不会有人鸟你,出VIP还有点希望,只是有点希望而已。
日站有关于阵型的脚本,但因为是日文的,我也看不懂具体是什么效果,只知道不同阵型有不同属性加成。

评分

参与人数 1星屑 +50 收起 理由
Sion + 50 回复奖励

查看全部评分

回复

使用道具 举报

梦石
0
星屑
125
在线时间
486 小时
注册时间
2007-5-27
回帖
788
发表于 2013-5-3 19:01:33 | 显示全部楼层
……
其实你可以给前排角色加个特质,让前排角色被攻击几率变高,实现之后也就是传说中的嘲讽脸……
感觉上还是这么做比较靠谱……
不过话说法师这么强大的生物真的需要站后排吗?
防护系专精的法师甚至可以跟Boss对A……

评分

参与人数 1星屑 +50 收起 理由
Sion + 50 回复奖励

查看全部评分

回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2013-5-3 22:15:08 | 显示全部楼层
我没用過,如何使用,請自行參詳
[pre lang="ruby" line="1"]#--------------------------------------------------------------------------
# ★ 前後列システム導入スクリプト ver0.52 - 解像度640x480対応版 (Jun.A)
#--------------------------------------------------------------------------
=begin

  戦闘に前列・後列の概念を与えるスクリプトです。
  設定した位置によって物理攻撃のダメージが変動します。
  
  メニューの並び替え中に、隊列を変更せずにもう一度決定ボタンを押すと、
  前列なら後列、後列なら前列に切り替わります。
  
  色々上書きして使用しますので、競合確率が高めです。
  なるべく最後の方にコピペしてご利用ください。
  
  <BATTLER_RANKSモジュールについて>
  
    DAMAGE_BACK_ROW_NUMBER:指定値として使用します。(説明は後述)、
    ADD_STATE_CHECK       :隊列変更時にステートを付着するかどうかです。
                            デフォルトはfalseです。付着しません。
    ROW_STATE_NUMBER      :上記をtrueにした際に付着させるステートIDの値です。
                デフォルト値は即死です。
    DEBUG                 :コンソールに状態を表示。制作用なので利用は非推奨です。
  
   
  □ 前列

    ・敵の後列に物理攻撃する際、ダメージ/指定値されます。
   
   ・敵の後列からの物理攻撃を、ダメージ/指定値されます。
  
  □ 後列
  
   ・敵の前列に物理攻撃する際、ダメージ/指定値されます。
   ・敵の後列に物理攻撃する際、ダメージ/指定値/指定値されます。
  
   ・敵の前列からの物理攻撃を、ダメージ/指定値されます。
   ・敵の後列からの物理攻撃を、ダメージ/指定値/指定値されます。
  
  □ 前列・後列無視攻撃
  
   武器、スキル、クラスのメモ欄に <貫通> と書くと、個別に効果を発揮します。
   優先順位は クラス>スキル>武器 です。
  
   武器はequip[0]のみ認識します。
   敵の場合、使用するスキルに <貫通> と書けばそのスキル毎に無視攻撃になります。
  
  <注意>
  
   ・ゲームの戦闘に参加可能な最大パーティ人数を、
      モジュールのPARTY_NUMBERに入力してください。
    ・必中、魔法、回復ダメージは上記の計算を無視します。
    ・混乱ステートが付着している場合、上記の計算を無視します。
   ・上記の計算はクリティカル等全ての計算を行った後に実行されます。
  
   ・現在の状況は下記のスクリプトを打ち込むと呼び出すことが可能です。
      アクセサで管理しているので、自由に書き換える事が可能です。
      falseが前列、trueが後列です。
  
    $game_party.members[index].row  //indexは整数0より開始、0が隊列1番目
  
    例) $game_party.members[0].row = true //隊列1番目のアクターを後列にします
      $game_party.members[0].row    //現状の値を取得します。
  
  ・現状(ver0.50現在)、敵側にも隊列の概念が含まれていますが、
   戦闘で使用する設定を付けていませんので、未実装です。

=end

module BATTLER_RANKS
  PARTY_NUMBER           = 4      # パーティ最大人数設定(デフォルト:4)
  DAMAGE_BACK_ROW_NUMBER = 2      # 後列時に除算するための指定値 (デフォルト:2)
  ADD_STATE_CHECK        = false  # 前列/後列 変更時、ステートを付着するか
  ROW_STATE_NUMBER       = 1      # 上記で付着する指定ステート
  DEBUG                  = false  # デバッグ用フラグ
end

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :row  #前列(false)か、後列(true)か
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化(エイリアス)
  #--------------------------------------------------------------------------
  alias sss01_old_initialize initialize
  def initialize
    sss01_old_initialize
    @row = false  #隊列の初期化(前列にする)
  end
end

#====================================================
# 混乱しておらず・物理攻撃である場合、
# 敵・味方別処理で後列ダメージを指定値 除算する
class Game_Battler
  #--------------------------------------------------------------------------
  # ● ダメージ計算(上書き)
  #--------------------------------------------------------------------------
  def make_damage_value(user, item)
    penetration = false # 貫通フラグの初期化
   
    # 使い手がアクターなら装備・スキル・クラスのメモに<貫通>と書いてあれば、
    # penetration(貫通)をtrueにする。クラス・スキル・装備の順に優先される。  
    if user.actor? && user.equips[0] != nil
      penetration = true if user.equips[0].note.include?("<貫通>")
      penetration = true if item.note.include?("<貫通>")
      penetration = true if user.class.note.include?("<貫通>")
    else
    # 使い手が敵ならスキルのメモに<貫通>と書いてあれば、貫通をtrueにする。
      penetration = true if item.note.include?("<貫通>")
    end
    #-オリジナルの計算式------------------------------------
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    #-------------------------------------------------------
   
    # 物理攻撃?(魔法と回復は無視) または混乱しているなら、物理でも処理を無視
    unless user.confusion?
      if item.physical?
        unless penetration  # 貫通フラグがfalseなら最終計算を行う
          # 使い手が後列なら、計算結果を指定した値で割る
          value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if user.row
          # 使い手がアクターか?
          if user.actor?
            # 目標の敵が後列なら、計算結果を指定した値で割る
            value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if $game_troop.members[@index].row
          elsif user.enemy? # 敵
            # indexにダメージを食らう味方と適合するパーティID(0~3)を入れる
            index = target_actor_index(@actor_id)
            p "敵" if BATTLER_RANKS::DEBUG
            p index if BATTLER_RANKS::DEBUG
            p $game_party.members[index].name if BATTLER_RANKS::DEBUG
            #p $game_party.members[@last_target_index].name
            # 目標のアクターが後列なら、計算結果を指定した値で割る
            value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if $game_party.members[index].row
          end
        end
      end
    end
   
    #-オリジナルの計算結果----------------------------------
    @result.make_damage(value.to_i, item)
    #-------------------------------------------------------
  end
  
  #--------------------------------------------------------------------------
  # ○ 敵の攻撃のターゲットになっているアクターIDから、
  #  ターゲットのアクターを割り出す(新規)
  #--------------------------------------------------------------------------
  def target_actor_index(actor_id)
    p actor_id if BATTLER_RANKS::DEBUG
    n = 0
    target_actor = 0  #パーティメンバー番号初期化
    for n in 0..BATTLER_RANKS::PARTY_NUMBER #サーチ
      next if $game_party.members[n] == nil
      p $game_party.members[n].name if BATTLER_RANKS::DEBUG
      p $game_party.members[n].id   if BATTLER_RANKS::DEBUG
      # ターゲットのアクターIDとパーティに参加しているアクターのIDが同じなら、
      # nの値をパーティメンバー番号に。(補足:アクターID ≠ パーティメンバー番号)
      target_actor = n if $game_party.members[n].id == actor_id
    end
    p target_actor if BATTLER_RANKS::DEBUG
    return target_actor
  end
end

#========================================================================
# パーティ並び替え時、キャラそのままで決定すると前列/後列が切り替えられる
class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 並び替え[決定]@states(上書き)
  #--------------------------------------------------------------------------
  def on_formation_ok
    # デバッグ用
    p $game_party.members[@status_window.index].name if BATTLER_RANKS::DEBUG
    p $game_party.members[@status_window.pending_index].name if BATTLER_RANKS::DEBUG

    if @status_window.pending_index >= 0
      $game_party.swap_order(@status_window.index,
                             @status_window.pending_index)
      
      formation_state_check #新規追加 // 並び替え [決定]時のステートチェック
      @status_window.pending_index = -1
      @status_window.redraw_item(@status_window.index)
    else
      @status_window.pending_index = @status_window.index
    end
    @status_window.activate
  end
  #--------------------------------------------------------------------------
  # ● 並び替え [決定]時のステートチェック(新規)
  #    trueならステート解除、falseならステート不可。
  #--------------------------------------------------------------------------
  def formation_state_check
    if @status_window.index == @status_window.pending_index
      if $game_party.members[@status_window.index].row
        $game_party.members[@status_window.index].row = false
        if BATTLER_RANKS::ADD_STATE_CHECK
          $game_party.members[@status_window.index].remove_state(BATTLER_RANKS::ROW_STATE_NUMBER)
        end
      else
        $game_party.members[@status_window.index].row = true
        if BATTLER_RANKS::ADD_STATE_CHECK
          $game_party.members[@status_window.index].add_new_state(BATTLER_RANKS::ROW_STATE_NUMBER)
        end
      end
      # デバッグ//rowの状態を出力
      p $game_party.members[@status_window.index].row if BATTLER_RANKS::DEBUG
    end
  end
end

#====================================================
# メニューのステータス部の顔グラフィックを、
# 指定アクターが前列・後列かどうかによって前後させる
class Window_MenuStatus
  #--------------------------------------------------------------------------
  # ● 項目の描画 (メニュー・ステータス部 名前以降の位置調整、上書き)
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    draw_item_background(index)
    # 前列ならデフォルト配置、後列ならxを15右にずらす。
    if actor.row
      #デフォルトは  rect.x + 1、rect.y + 1。顔グラフィックの座標をずらす。
      draw_actor_face(actor, rect.x + 4 + 15, rect.y + 8, actor.alive?)#enabled)
    else
      draw_actor_face(actor, rect.x + 4, rect.y + 8, actor.alive?)
    end
    draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 4)
  end
end[/pre]

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 感謝解答

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部