Project1

标题: 请问如何能让角色和怪物在战斗中有前排和后排的概念 [打印本页]

作者: wwla703    时间: 2013-5-1 20:51
标题: 请问如何能让角色和怪物在战斗中有前排和后排的概念
就是近战站前排,远程站后排
近战只能打前排 远程都可以打这样
作者: wwla703    时间: 2013-5-2 13:06
就这么沉了吗.......
球脚本球事件,什么都行
作者: MWp1986    时间: 2013-5-2 14:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: wwla703    时间: 2013-5-3 18:12
......结果最后只来了俩广告么
作者: viva0072008    时间: 2013-5-3 18:44
何谓前排后排?单纯站位吗?你也不描述下腰什么效果,攻击只能先攻击前排的敌人,前排的敌人死了才能攻击后排?
这种效果略复杂,要写脚本的话,直接问一般不会有人鸟你,出VIP还有点希望,只是有点希望而已。
日站有关于阵型的脚本,但因为是日文的,我也看不懂具体是什么效果,只知道不同阵型有不同属性加成。
作者: 紫苍焰    时间: 2013-5-3 19:01
……
其实你可以给前排角色加个特质,让前排角色被攻击几率变高,实现之后也就是传说中的嘲讽脸……
感觉上还是这么做比较靠谱……
不过话说法师这么强大的生物真的需要站后排吗?
防护系专精的法师甚至可以跟Boss对A……
作者: tseyik    时间: 2013-5-3 22:15
我没用過,如何使用,請自行參詳
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ★ 前後列システム導入スクリプト ver0.52 - 解像度640x480対応版 (Jun.A)
  3. #--------------------------------------------------------------------------
  4. =begin
  5.  
  6.   戦闘に前列・後列の概念を与えるスクリプトです。
  7.   設定した位置によって物理攻撃のダメージが変動します。
  8.  
  9.   メニューの並び替え中に、隊列を変更せずにもう一度決定ボタンを押すと、
  10.   前列なら後列、後列なら前列に切り替わります。
  11.  
  12.   色々上書きして使用しますので、競合確率が高めです。
  13.   なるべく最後の方にコピペしてご利用ください。
  14.  
  15.   <BATTLER_RANKSモジュールについて>
  16.  
  17.     DAMAGE_BACK_ROW_NUMBER:指定値として使用します。(説明は後述)、
  18.     ADD_STATE_CHECK       :隊列変更時にステートを付着するかどうかです。
  19.                             デフォルトはfalseです。付着しません。
  20.     ROW_STATE_NUMBER      :上記をtrueにした際に付着させるステートIDの値です。
  21.                 デフォルト値は即死です。
  22.     DEBUG                 :コンソールに状態を表示。制作用なので利用は非推奨です。
  23.  
  24.     
  25.   □ 前列
  26.  
  27.     ・敵の後列に物理攻撃する際、ダメージ/指定値されます。
  28.     
  29.    ・敵の後列からの物理攻撃を、ダメージ/指定値されます。
  30.  
  31.   □ 後列
  32.  
  33.    ・敵の前列に物理攻撃する際、ダメージ/指定値されます。
  34.    ・敵の後列に物理攻撃する際、ダメージ/指定値/指定値されます。
  35.  
  36.    ・敵の前列からの物理攻撃を、ダメージ/指定値されます。
  37.    ・敵の後列からの物理攻撃を、ダメージ/指定値/指定値されます。
  38.  
  39.   □ 前列・後列無視攻撃
  40.  
  41.    武器、スキル、クラスのメモ欄に <貫通> と書くと、個別に効果を発揮します。
  42.    優先順位は クラス>スキル>武器 です。
  43.  
  44.    武器はequip[0]のみ認識します。
  45.    敵の場合、使用するスキルに <貫通> と書けばそのスキル毎に無視攻撃になります。
  46.  
  47.   <注意>
  48.  
  49.    ・ゲームの戦闘に参加可能な最大パーティ人数を、
  50.       モジュールのPARTY_NUMBERに入力してください。
  51.     ・必中、魔法、回復ダメージは上記の計算を無視します。
  52.     ・混乱ステートが付着している場合、上記の計算を無視します。
  53.    ・上記の計算はクリティカル等全ての計算を行った後に実行されます。
  54.  
  55.    ・現在の状況は下記のスクリプトを打ち込むと呼び出すことが可能です。
  56.       アクセサで管理しているので、自由に書き換える事が可能です。
  57.       falseが前列、trueが後列です。
  58.  
  59.     $game_party.members[index].row  //indexは整数0より開始、0が隊列1番目
  60.  
  61.     例) $game_party.members[0].row = true //隊列1番目のアクターを後列にします
  62.       $game_party.members[0].row    //現状の値を取得します。
  63.   
  64.   ・現状(ver0.50現在)、敵側にも隊列の概念が含まれていますが、
  65.    戦闘で使用する設定を付けていませんので、未実装です。
  66.  
  67. =end
  68.  
  69. module BATTLER_RANKS
  70.   PARTY_NUMBER           = 4      # パーティ最大人数設定(デフォルト:4)
  71.   DAMAGE_BACK_ROW_NUMBER = 2      # 後列時に除算するための指定値 (デフォルト:2)
  72.   ADD_STATE_CHECK        = false  # 前列/後列 変更時、ステートを付着するか
  73.   ROW_STATE_NUMBER       = 1      # 上記で付着する指定ステート
  74.   DEBUG                  = false  # デバッグ用フラグ
  75. end
  76.  
  77. class Game_BattlerBase
  78.   #--------------------------------------------------------------------------
  79.   # ● 公開インスタンス変数
  80.   #--------------------------------------------------------------------------
  81.   attr_accessor :row  #前列(false)か、後列(true)か
  82.   #--------------------------------------------------------------------------
  83.   # ● オブジェクト初期化(エイリアス)
  84.   #--------------------------------------------------------------------------
  85.   alias sss01_old_initialize initialize
  86.   def initialize
  87.     sss01_old_initialize
  88.     @row = false  #隊列の初期化(前列にする)
  89.   end
  90. end
  91.  
  92. #====================================================
  93. # 混乱しておらず・物理攻撃である場合、
  94. # 敵・味方別処理で後列ダメージを指定値 除算する
  95. class Game_Battler
  96.   #--------------------------------------------------------------------------
  97.   # ● ダメージ計算(上書き)
  98.   #--------------------------------------------------------------------------
  99.   def make_damage_value(user, item)
  100.     penetration = false # 貫通フラグの初期化
  101.  
  102.     # 使い手がアクターなら装備・スキル・クラスのメモに<貫通>と書いてあれば、
  103.     # penetration(貫通)をtrueにする。クラス・スキル・装備の順に優先される。  
  104.     if user.actor? && user.equips[0] != nil
  105.       penetration = true if user.equips[0].note.include?("<貫通>")
  106.       penetration = true if item.note.include?("<貫通>")
  107.       penetration = true if user.class.note.include?("<貫通>")
  108.     else
  109.     # 使い手が敵ならスキルのメモに<貫通>と書いてあれば、貫通をtrueにする。
  110.       penetration = true if item.note.include?("<貫通>")
  111.     end
  112.     #-オリジナルの計算式------------------------------------
  113.     value = item.damage.eval(user, self, $game_variables)
  114.     value *= item_element_rate(user, item)
  115.     value *= pdr if item.physical?
  116.     value *= mdr if item.magical?
  117.     value *= rec if item.damage.recover?
  118.     value = apply_critical(value) if @result.critical
  119.     value = apply_variance(value, item.damage.variance)
  120.     value = apply_guard(value)
  121.     #-------------------------------------------------------
  122.  
  123.     # 物理攻撃?(魔法と回復は無視) または混乱しているなら、物理でも処理を無視
  124.     unless user.confusion?
  125.       if item.physical?
  126.         unless penetration  # 貫通フラグがfalseなら最終計算を行う
  127.           # 使い手が後列なら、計算結果を指定した値で割る
  128.           value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if user.row
  129.           # 使い手がアクターか?
  130.           if user.actor?
  131.             # 目標の敵が後列なら、計算結果を指定した値で割る
  132.             value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if $game_troop.members[@index].row
  133.           elsif user.enemy? # 敵
  134.             # indexにダメージを食らう味方と適合するパーティID(0~3)を入れる
  135.             index = target_actor_index(@actor_id)
  136.             p "敵" if BATTLER_RANKS::DEBUG
  137.             p index if BATTLER_RANKS::DEBUG
  138.             p $game_party.members[index].name if BATTLER_RANKS::DEBUG
  139.             #p $game_party.members[@last_target_index].name
  140.             # 目標のアクターが後列なら、計算結果を指定した値で割る
  141.             value /= BATTLER_RANKS::DAMAGE_BACK_ROW_NUMBER if $game_party.members[index].row
  142.           end
  143.         end
  144.       end
  145.     end
  146.  
  147.     #-オリジナルの計算結果----------------------------------
  148.     @result.make_damage(value.to_i, item)
  149.     #-------------------------------------------------------
  150.   end
  151.  
  152.   #--------------------------------------------------------------------------
  153.   # ○ 敵の攻撃のターゲットになっているアクターIDから、
  154.   #  ターゲットのアクターを割り出す(新規)
  155.   #--------------------------------------------------------------------------
  156.   def target_actor_index(actor_id)
  157.     p actor_id if BATTLER_RANKS::DEBUG
  158.     n = 0
  159.     target_actor = 0  #パーティメンバー番号初期化
  160.     for n in 0..BATTLER_RANKS::PARTY_NUMBER #サーチ
  161.       next if $game_party.members[n] == nil
  162.       p $game_party.members[n].name if BATTLER_RANKS::DEBUG
  163.       p $game_party.members[n].id   if BATTLER_RANKS::DEBUG
  164.       # ターゲットのアクターIDとパーティに参加しているアクターのIDが同じなら、
  165.       # nの値をパーティメンバー番号に。(補足:アクターID ≠ パーティメンバー番号)
  166.       target_actor = n if $game_party.members[n].id == actor_id
  167.     end
  168.     p target_actor if BATTLER_RANKS::DEBUG
  169.     return target_actor
  170.   end
  171. end
  172.  
  173. #========================================================================
  174. # パーティ並び替え時、キャラそのままで決定すると前列/後列が切り替えられる
  175. class Scene_Menu
  176.   #--------------------------------------------------------------------------
  177.   # ● 並び替え[決定]@states(上書き)
  178.   #--------------------------------------------------------------------------
  179.   def on_formation_ok
  180.     # デバッグ用
  181.     p $game_party.members[@status_window.index].name if BATTLER_RANKS::DEBUG
  182.     p $game_party.members[@status_window.pending_index].name if BATTLER_RANKS::DEBUG
  183.  
  184.     if @status_window.pending_index >= 0
  185.       $game_party.swap_order(@status_window.index,
  186.                              @status_window.pending_index)
  187.  
  188.       formation_state_check #新規追加 // 並び替え [決定]時のステートチェック
  189.       @status_window.pending_index = -1
  190.       @status_window.redraw_item(@status_window.index)
  191.     else
  192.       @status_window.pending_index = @status_window.index
  193.     end
  194.     @status_window.activate
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 並び替え [決定]時のステートチェック(新規)
  198.   #    trueならステート解除、falseならステート不可。
  199.   #--------------------------------------------------------------------------
  200.   def formation_state_check
  201.     if @status_window.index == @status_window.pending_index
  202.       if $game_party.members[@status_window.index].row
  203.         $game_party.members[@status_window.index].row = false
  204.         if BATTLER_RANKS::ADD_STATE_CHECK
  205.           $game_party.members[@status_window.index].remove_state(BATTLER_RANKS::ROW_STATE_NUMBER)
  206.         end
  207.       else
  208.         $game_party.members[@status_window.index].row = true
  209.         if BATTLER_RANKS::ADD_STATE_CHECK
  210.           $game_party.members[@status_window.index].add_new_state(BATTLER_RANKS::ROW_STATE_NUMBER)
  211.         end
  212.       end
  213.       # デバッグ//rowの状態を出力
  214.       p $game_party.members[@status_window.index].row if BATTLER_RANKS::DEBUG
  215.     end
  216.   end
  217. end
  218.  
  219. #====================================================
  220. # メニューのステータス部の顔グラフィックを、
  221. # 指定アクターが前列・後列かどうかによって前後させる
  222. class Window_MenuStatus
  223.   #--------------------------------------------------------------------------
  224.   # ● 項目の描画 (メニュー・ステータス部 名前以降の位置調整、上書き)
  225.   #--------------------------------------------------------------------------
  226.   def draw_item(index)
  227.     actor = $game_party.members[index]
  228.     enabled = $game_party.battle_members.include?(actor)
  229.     rect = item_rect(index)
  230.     draw_item_background(index)
  231.     # 前列ならデフォルト配置、後列ならxを15右にずらす。
  232.     if actor.row
  233.       #デフォルトは  rect.x + 1、rect.y + 1。顔グラフィックの座標をずらす。
  234.       draw_actor_face(actor, rect.x + 4 + 15, rect.y + 8, actor.alive?)#enabled)
  235.     else
  236.       draw_actor_face(actor, rect.x + 4, rect.y + 8, actor.alive?)
  237.     end
  238.     draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 4)
  239.   end
  240. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1