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

Project1

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

[有事请教] 问下有没有让敌人暂时无法选中的脚本或方法

[复制链接]

Lv2.观梦者

梦石
0
星屑
358
在线时间
36 小时
注册时间
2024-5-9
帖子
6
跳转到指定楼层
1
发表于 3 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
大概想模仿鬼兰,双方是4v4,然后远程/魔法之外的攻击只能攻击前两个活着的这样子的。也就是只有前面的死了才能攻击到后排

Lv5.捕梦者

梦石
0
星屑
27747
在线时间
5498 小时
注册时间
2016-3-8
帖子
1697
2
发表于 3 天前 | 只看该作者
RUBY 代码复制
  1. #==============================================================================
  2. #  ■前衛、後衛概念擬似表現スクリプト for RGSS3 Ver1.01-β3
  3. # □作成者 kure
  4. #==============================================================================
  5.  
  6. =begin
  7.  
  8. ※概要
  9.  統合ベーススクリプト対応用の表現拡張スクリプトです。単独でも稼働します。
  10.  統合ベーススクリプト併用下の不具合調査の為公開します。
  11.  当スクリプトは動作不具合の報告を推奨します。
  12.  
  13. ※Ver1.01-β3
  14.  ●処理修正
  15.  
  16. ※Ver1.01-β
  17.  ●単独稼働時の不具合を一点修正を行っています。
  18.  ●飛行状態の時の通常攻撃回避率を一律100%から設定できるようにしました。
  19.   飛行状態では命中率が設定値で固定されます。
  20.  
  21. ※設定
  22.  ZOOM_OUT_RATE = 0.05
  23.  MIN_RATE = 0.7
  24.  UP_DOWN_RATE = 1
  25.  POS_MOVE_RATE = 2
  26.  POS_RATE = 40
  27.  各種設定を行います。特に必要なければ設定値を利用してください。
  28.  
  29.  ATK_RATE = 0.65
  30.  DEF_RATE = 0.65
  31.  後衛となっているバトラーのダメージ率を設定します。
  32.  
  33. ※メモ欄の設定
  34. ●前衛、後衛
  35.  バトラーのメモ欄に「<前衛>」「<後衛>」と書いて設定します。
  36.  設定されたバトラーは指定位置で戦闘を開始します。
  37.  ※未設定時は前衛として扱います。
  38.  
  39.  また、ターン終了時に生存している前衛が存在しない場合
  40.  後衛は前衛に移動します。
  41.  
  42. ●飛行
  43.  バトラーのメモ欄に「<飛行>」と書いて設定します。
  44.  設定されたバトラーは飛行状態となります。
  45.  
  46.  飛行状態のバトラーは必中攻撃、及びメモ欄に「<遠距離攻撃>」と書かれている
  47.  スキル以外に対して100%の回避率を持つようになります。
  48.  
  49. ●後衛補正無視スキル
  50.  スキルのメモ欄に「<後衛補正無視>」と書いて設定します。
  51.  設定されたスキルは設定の後衛補正を無視して攻撃を行います。
  52.  
  53. ●遠距離攻撃
  54.  スキルのメモ欄に「<遠距離攻撃>」と書いて設定します。
  55.  設定されたスキルは飛行状態のバトラーに対して通常の命中判定で攻撃を行います。
  56.  
  57. ●隊列入れ替え処理
  58.  スキルのメモ欄で設定します。
  59.  「<使用者前衛移動>」 → 発動後、スキル使用者が前衛に移動します。
  60.  「<使用者後衛移動>」 → 発動後、スキル使用者が後衛に移動します。
  61.  「<使用者隊列入替>」 → 発動後、スキル使用者の前衛と後衛が入れ替わります。
  62.  「<対象前衛移動>」 → 効果対象者が前衛に移動します。
  63.  「<対象後衛移動>」 → 効果対象者が後衛に移動します。
  64.  「<対象隊列入替>」 → 効果対象者の前衛と後衛を入れ替えます。
  65.  
  66. ●飛行状態入れ替え処理
  67.  スキルのメモ欄で設定します。
  68.  「<使用者着地>」 → 発動後、使用者が飛行状態が解除されます。
  69.  「<使用者飛行>」 → 発動後、使用者が飛行状態になります。
  70.  「<使用者浮遊入替>」 → 発動後、使用者が飛行状態を入れ替えます。
  71.  「<対象着地>」 → 対象の飛行状態を解除します。飛行状態の回避補正を対象外
  72.  「<対象飛行>」 → 対象を飛行状態にします。
  73.  「<対象浮遊入替>」 → 対象の飛行状態を入れ替えます。飛行状態の回避補正を対象外
  74.  
  75. ●効果範囲設定
  76.  スキルのメモ欄に「<対象数 x, y, z>」で設定します。
  77.  xで前衛対象数 yで後衛対象数 を設定します。
  78.  zで対象数0の場合の攻撃対象数を設定します。
  79.  ※ただし、効果範囲で単体を指定した場合、指定した対象はこの設定外です。
  80.  
  81.   例)ランダムあるいは全体スキルの場合
  82.     全体より 前衛x体、後衛y体 がランダムに選ばれます。
  83.     この時 xまたはy の値が0の為対象が存在しない場合
  84.     zの数を全体ランダムで選び対象とします。
  85.  
  86.   例2)対象指定スキルの場合
  87.     選択した対象は無条件で攻撃対象となります。
  88.     その後、選択した対象が前衛であれば 前衛x-1体 後衛y体
  89.     選択した対象が後衛であれば 前衛x体 後衛y体
  90.     をランダムに選択し攻撃を行います。
  91.  
  92. =end
  93.  
  94. $kure_integrate_script = {} if $kure_integrate_script == nil
  95. $kure_integrate_script[:Formation] = 100
  96. p "前衛、後衛概念擬似表現スクリプト"
  97.  
  98. module KURE
  99.   module Formation
  100.     #動作設定-------------------------------------------------------------------
  101.       #1フレームあたりの縮小率
  102.       ZOOM_OUT_RATE = 0.05
  103.       #縮小倍率
  104.       MIN_RATE = 0.7
  105.       #1フレームあたりの上下移動の座標数
  106.       UP_DOWN_RATE = 1
  107.       #1フレームあたりの座標移動数(-方向)
  108.       POS_MOVE_RATE = 2
  109.       #移動する座標数(-方向)
  110.       POS_RATE = 40
  111.  
  112.     #処理設定------------------------------------------------------------------
  113.       #後衛の攻撃時ダメージ倍率補正
  114.       ATK_RATE = 0.65
  115.       #後衛の攻撃を受けた時のダメージ率
  116.       DEF_RATE = 0.65
  117.  
  118.       #飛行状態の攻撃回避率(0~1で設定、0で0%、1で100%)
  119.       AIR_EVA_RATE = 1
  120.   end
  121. end
  122.  
  123. #==============================================================================
  124. # ■ RPG::BaseItem(追加定義)
  125. #==============================================================================
  126. class RPG::BaseItem
  127.   #--------------------------------------------------------------------------
  128.   # ★ 初期ポジション(追加定義)(追加定義)
  129.   #--------------------------------------------------------------------------  
  130.   def first_pos
  131.     return 0 if @note.include?("<前衛>")
  132.     return 1 if @note.include?("<後衛>")
  133.     return 0
  134.   end  
  135.   #--------------------------------------------------------------------------
  136.   # ★ 初期飛行状態(追加定義)(追加定義)
  137.   #--------------------------------------------------------------------------  
  138.   def first_air
  139.     return 1 if @note.include?("<飛行>")
  140.     return 0
  141.   end
  142. end
  143.  
  144. #==============================================================================
  145. # ●■ RPG::UsableItem(追加定義集積)
  146. #==============================================================================
  147. class RPG::UsableItem < RPG::BaseItem
  148.   #--------------------------------------------------------------------------
  149.   # ★ 隊列無視(追加定義)(追加定義)
  150.   #--------------------------------------------------------------------------  
  151.   def ignore_formation
  152.     return @note.include?("<後衛補正無視>")
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ★ 遠距離攻撃(追加定義)(追加定義)
  156.   #--------------------------------------------------------------------------  
  157.   def long_range_atk
  158.     return @note.include?("<遠距離攻撃>")
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ★ 隊列入れ替え処理(追加定義)(追加定義)
  162.   #--------------------------------------------------------------------------  
  163.   def move_pos_id
  164.     return 1 if @note.include?("<使用者前衛移動>")
  165.     return 2 if @note.include?("<使用者後衛移動>")
  166.     return 3 if @note.include?("<使用者隊列入替>")
  167.     return 4 if @note.include?("<対象前衛移動>")
  168.     return 5 if @note.include?("<対象後衛移動>")
  169.     return 6 if @note.include?("<対象隊列入替>")
  170.     return 0
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ★ 遠距離攻撃(追加定義)(追加定義)
  174.   #--------------------------------------------------------------------------  
  175.   def air_pos_id
  176.     return 1 if @note.include?("<使用者着地>")
  177.     return 2 if @note.include?("<使用者飛行>")
  178.     return 3 if @note.include?("<使用者浮遊入替>")
  179.     return 4 if @note.include?("<対象着地>")
  180.     return 5 if @note.include?("<対象飛行>")
  181.     return 6 if @note.include?("<対象浮遊入替>")
  182.     return 0
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ★ 効果範囲設定(追加定義)(追加定義)
  186.   #--------------------------------------------------------------------------  
  187.   def target_pos
  188.     @note.match(/<対象数\s?(\d+)\s?,\s?(\d+)\s?,\s?(\d+)\s?>/)
  189.     return ($1 && $2 && $3) ? [$1.to_i, $2.to_i, $3.to_i] : nil
  190.   end
  191. end
  192.  
  193. #==============================================================================
  194. # ■ Game_Battler
  195. #==============================================================================
  196. class Game_Battler < Game_BattlerBase
  197.   attr_accessor   :positon                 # 前衛、後衛ID
  198.   attr_accessor   :air_pos                 # 飛行中ID
  199.   #--------------------------------------------------------------------------
  200.   # ● 隊列移動
  201.   #--------------------------------------------------------------------------
  202.   def change_pos(id)
  203.     case id
  204.     when 1 ; @positon = 0
  205.     when 2 ; @positon = 1
  206.     when 3 ; @positon = @positon == 1 ? 0 : 1
  207.     end
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 飛行状態変化
  211.   #--------------------------------------------------------------------------
  212.   def change_air(id)
  213.     case id
  214.     when 1 ; @air_pos = 0
  215.     when 2 ; @air_pos = 1
  216.     when 3 ; @air_pos = @air_pos == 1 ? 0 : 1
  217.     end
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ◎ スキル/アイテムの属性修正値を取得(エイリアス再定義)
  221.   #--------------------------------------------------------------------------
  222.   alias k_enemy_pos_make_before_item_element_rate item_element_rate unless $!
  223.   def item_element_rate(user, item)
  224.     result = k_enemy_pos_make_before_item_element_rate(user, item)
  225.     if user.positon == 1 && result > 0 && !item.ignore_formation
  226.       result = result * KURE::Formation::ATK_RATE
  227.     end
  228.     if @positon == 1 && result > 0 && !item.ignore_formation
  229.       result = result * KURE::Formation::DEF_RATE
  230.     end
  231.     return result
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ◎ スキル/アイテムの回避率計算(エイリアス再定義)
  235.   #--------------------------------------------------------------------------
  236.   alias k_enemy_pos_make_before_item_eva item_eva unless $!
  237.   def item_eva(user, item)
  238.     result = k_enemy_pos_make_before_item_eva(user, item)
  239.     result = KURE::Formation::AIR_EVA_RATE if air_eva?(item)
  240.     return result
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ★◎ 拡張命中率の計算(再定義)
  244.   #--------------------------------------------------------------------------
  245.   def item_ex_hit(user, item)
  246.     return (1 - KURE::Formation::AIR_EVA_RATE) if air_eva?(item)
  247.     return [user.hit - eva ,KURE::Integrate::MIN_HIT_RATE].max if item.physical?
  248.     return [user.mhit - mev,KURE::Integrate::MIN_HIT_RATE].max if item.magical?
  249.     return 1
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 飛行状態への回避補正判定適用
  253.   #--------------------------------------------------------------------------
  254.   def air_eva?(item)
  255.     return false unless @air_pos == 1
  256.     return false if item.long_range_atk
  257.     return false if item.certain?
  258.     return false if item.air_pos_id == 4
  259.     return false if item.air_pos_id == 6
  260.     return true
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ◎ スキル/アイテムに有効な使用効果が一つでもあるかを判定(エイリアス)
  264.   #--------------------------------------------------------------------------
  265.   alias k_enemy_pos_make_before_item_has_any_valid_effects? item_has_any_valid_effects? unless $!
  266.   def item_has_any_valid_effects?(user, item)
  267.     return true if k_enemy_pos_make_before_item_has_any_valid_effects?(user, item)
  268.     return true if item.move_pos_id != 0
  269.     return true if item.air_pos_id != 0
  270.     return false
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ◎ 使用者側への効果適用(エイリアス再定義)
  274.   #--------------------------------------------------------------------------
  275.   alias k_enemy_pos_make_before_item_user_effect item_user_effect unless $!
  276.   def item_user_effect(user, item)
  277.     k_enemy_pos_make_before_item_user_effect(user, item)
  278.     case item.move_pos_id
  279.     when 1 ; user.change_pos(1)
  280.     when 2 ; user.change_pos(2)
  281.     when 3 ; user.change_pos(3)
  282.     when 4 ; change_pos(1)
  283.     when 5 ; change_pos(2)
  284.     when 6 ; change_pos(3)
  285.     end
  286.  
  287.     case item.air_pos_id
  288.     when 1 ; user.change_air(1)
  289.     when 2 ; user.change_air(2)
  290.     when 3 ; user.change_air(3)
  291.     when 4 ; change_air(1)
  292.     when 5 ; change_air(2)
  293.     when 6 ; change_air(3)
  294.     end
  295.   end
  296. end
  297.  
  298. #==============================================================================
  299. # ■ Game_Actor
  300. #==============================================================================
  301. class Game_Actor < Game_Battler
  302.   #--------------------------------------------------------------------------
  303.   # ● セットアップ
  304.   #--------------------------------------------------------------------------
  305.   alias k_enemy_pos_make_before_setup setup unless $!
  306.   def setup(actor_id)
  307.     k_enemy_pos_make_before_setup(actor_id)
  308.     @positon = actor.first_pos
  309.     @air_pos = actor.first_air
  310.   end
  311. end
  312.  
  313. #==============================================================================
  314. # ■ Game_Enemy
  315. #==============================================================================
  316. class Game_Enemy < Game_Battler
  317.   #--------------------------------------------------------------------------
  318.   # ◎ オブジェクト初期化(エイリアス再定義)
  319.   #--------------------------------------------------------------------------
  320.   alias k_enemy_pos_make_before_initialize initialize unless $!
  321.   def initialize(index, enemy_id)
  322.     k_enemy_pos_make_before_initialize(index, enemy_id)
  323.     @positon = enemy.first_pos
  324.     @air_pos = enemy.first_air
  325.   end
  326. end
  327.  
  328. #==============================================================================
  329. # ■ Game_Action
  330. #==============================================================================
  331. class Game_Action
  332.   #--------------------------------------------------------------------------
  333.   # ◎ ターゲットの配列作成(エイリアス)
  334.   #--------------------------------------------------------------------------
  335.   alias k_enemy_pos_make_before_make_targets make_targets unless $!
  336.   def make_targets
  337.     basic_target = k_enemy_pos_make_before_make_targets
  338.     return basic_target unless item.target_pos
  339.     result_target = Array.new
  340.     new_basic_target = opponents_unit.members if item.for_opponent?
  341.     new_basic_target = friends_unit.members  if item.for_friend?
  342.  
  343.     if basic_target.size == 1
  344.       result_target = basic_target
  345.       new_basic_target -= basic_target
  346.       front_target = new_basic_target.select{|battler| battler.positon == 0}
  347.       rear_target = new_basic_target.select{|battler| battler.positon == 1}
  348.  
  349.       case basic_target[0].positon
  350.       when 0
  351.         result_target += front_target.sample([item.target_pos[0] - 1,0].max)
  352.         result_target += rear_target.sample(item.target_pos[1])
  353.       when 1
  354.         result_target += front_target.sample(item.target_pos[0])
  355.         result_target += rear_target.sample([item.target_pos[1] - 1,0].max)
  356.       end
  357.     else
  358.       front_target = basic_target.select{|battler| battler.positon == 0}
  359.       rear_target = basic_target.select{|battler| battler.positon == 1}
  360.  
  361.       result_target += front_target.sample(item.target_pos[0])
  362.       result_target += rear_target.sample(item.target_pos[1])
  363.     end
  364.  
  365.     return result_target if result_target != []
  366.     result_target += new_basic_target.sample(item.target_pos[2])
  367.     return result_target
  368.   end
  369. end
  370.  
  371. #==============================================================================
  372. # ■ Sprite_Battler
  373. #==============================================================================
  374. class Sprite_Battler < Sprite_Base
  375.   #--------------------------------------------------------------------------
  376.   # ● オブジェクト初期化
  377.   #--------------------------------------------------------------------------
  378.   alias k_enemy_pos_make_before_initialize initialize##########
  379.   def initialize(viewport, battler = nil)
  380. #~     super(viewport)
  381. #~     @battler = battler
  382. #~     @battler_visible = false
  383. #~     @effect_type = nil
  384. #~     @effect_duration = 0
  385.     k_enemy_pos_make_before_initialize(viewport, battler)##########
  386.     @zoom_cheaker = nil
  387.     @pos = 0
  388.     first_setting(battler)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ☆ 初期化設定(追加定義)
  392.   #--------------------------------------------------------------------------
  393.   def first_setting(battler)
  394.     return unless battler
  395.     return if battler.actor?
  396.  
  397.     @last_pos = battler.positon
  398.     case battler.positon
  399.     when 1
  400.       self.zoom_x = KURE::Formation::MIN_RATE
  401.       self.zoom_y = KURE::Formation::MIN_RATE
  402.       @battler.screen_y = @battler.screen_y - KURE::Formation::POS_RATE
  403.       @pos = KURE::Formation::POS_RATE.abs
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ◎ フレーム更新(エイリアス再定義)
  408.   #--------------------------------------------------------------------------
  409.   alias k_enemy_pos_make_before_update update
  410.   def update
  411.     k_enemy_pos_make_before_update
  412.     pos_cheaker
  413.     update_zoom
  414.     update_movement
  415.     update_flight
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ☆ 拡大率の初期化(追加定義)
  419.   #--------------------------------------------------------------------------
  420.   def pos_cheaker
  421.     return unless @battler
  422.     return if @battler.actor?
  423.     return if @last_pos == @battler.positon
  424.     @last_pos = @battler.positon
  425.  
  426.     @zoom_cheaker = true
  427.     @move_cheaker = true  
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ☆ 拡大率変化処理(追加定義)
  431.   #--------------------------------------------------------------------------
  432.   def update_zoom
  433.     return unless @zoom_cheaker
  434.     case @battler.positon
  435.     #前衛
  436.     when 0
  437.       if self.zoom_x < 1.0
  438.         self.zoom_x += KURE::Formation::ZOOM_OUT_RATE
  439.         self.zoom_y += KURE::Formation::ZOOM_OUT_RATE
  440.       else ; @zoom_cheaker = nil
  441.       end
  442.     #後衛
  443.     when 1
  444.       if self.zoom_x > KURE::Formation::MIN_RATE
  445.         self.zoom_x -= KURE::Formation::ZOOM_OUT_RATE
  446.         self.zoom_y -= KURE::Formation::ZOOM_OUT_RATE
  447.       else ; @zoom_cheaker = nil
  448.       end
  449.     end
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ☆ 座標移動処理(追加定義)
  453.   #--------------------------------------------------------------------------
  454.   def update_movement
  455.     return unless @move_cheaker
  456.     case @battler.positon
  457.     #前衛
  458.     when 0
  459.       if @pos <= 0
  460.         @move_cheaker = nil ; return
  461.       end
  462.       @pos -= KURE::Formation::POS_MOVE_RATE.abs
  463.       @battler.screen_y += KURE::Formation::POS_MOVE_RATE
  464.     #後衛
  465.     when 1
  466.       if @pos >= KURE::Formation::POS_RATE.abs
  467.         @move_cheaker = nil ; return
  468.       end
  469.       @pos += KURE::Formation::POS_MOVE_RATE.abs
  470.       @battler.screen_y -= KURE::Formation::POS_MOVE_RATE
  471.     end
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ☆ 飛行アクション(追加定義)
  475.   #--------------------------------------------------------------------------
  476.   def update_flight
  477.     return unless @battler
  478.     return if @battler.actor?
  479.     return unless @battler.air_pos == 1
  480.  
  481.     @roop ||= 0
  482.     @battler.screen_y -= KURE::Formation::UP_DOWN_RATE if [10,20,30,40,50].include?(@roop)
  483.     @battler.screen_y += KURE::Formation::UP_DOWN_RATE if [60,70,80,90,100].include?(@roop)
  484.     @roop += 1
  485.     @roop = 0 if @roop > 100
  486.   end
  487. end
  488.  
  489. #==============================================================================
  490. # ■ Scene_Battle
  491. #==============================================================================
  492. class Scene_Battle < Scene_Base
  493.   #--------------------------------------------------------------------------
  494.   # ◎ ターン終了(エイリアス再定義)
  495.   #--------------------------------------------------------------------------
  496.   alias k_enemy_pos_make_turn_end turn_end unless $!
  497.   def turn_end
  498.     k_enemy_pos_make_turn_end
  499.  
  500.     #隊列移動処理
  501.     num = $game_troop.members.select{|battler| battler.alive? && battler.positon == 0}.size
  502.     if num == 0
  503.       $game_troop.members.each{|battler| battler.positon = 0}
  504.     end
  505.   end
  506. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-11-23 22:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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