Project1

标题: 求视野系统 [打印本页]

作者: fox1313304    时间: 2015-1-14 10:35
标题: 求视野系统
在Glimmer里发现了一个视野系统 完全看不懂
有没有别的视野系统……或者 这个怎么用……
附上脚本
  1. =begin
  2.       RGSS3
  3.       
  4.       ★ シンボルエンカウント補助 ★

  5.       イベントでのシンボルエンカウントの動作を補助します。
  6.       
  7.       ● 仕様 ●==========================================================
  8.       シンボルエンカウント有効後は、
  9.       イベントページの自律移動の項で設定されたものは全て無効になります。
  10.       --------------------------------------------------------------------
  11.       一度有効になったシンボルエンカウントを無効にするには、
  12.       シンボルエンカウント設定のないイベントページに切り替えてください。
  13.       ====================================================================
  14.       
  15.       ● 機能 ●==========================================================
  16.       シンボルエンカウントイベントから戦闘を起動した場合、
  17.       シンボルとプレイヤーの位置関係により先制攻撃or不意打ちが発生します。
  18.           ・イベントの背後を取った場合           => 先制攻撃
  19.           ・イベントに背後を取られた場合         => 不意打ち
  20.           ・イベントが隊列の最後尾に接触した場合 => 不意打ち
  21.       --------------------------------------------------------------------
  22.       プレイヤーとの距離が一定内になるとプレイヤーを追跡するようになります。
  23.       --------------------------------------------------------------------
  24.       プレイヤーとの距離によりシンボルの透明度を変化させることができます。
  25.       --------------------------------------------------------------------
  26.       プレイヤーのレベルによりシンボルが逃走したりします。
  27.       --------------------------------------------------------------------
  28.       ダッシュしているとシンボルが反応しやすくなったりします。
  29.       --------------------------------------------------------------------
  30.       シンボルが反応した瞬間フキダシアイコンが表示されたりします。
  31.       --------------------------------------------------------------------
  32.       シンボルが反応しなくなるアイテムやスキルを作ることができます。
  33.       --------------------------------------------------------------------
  34.       シンボルが通行できないリージョンを設定することができます。
  35.       ====================================================================
  36.       
  37.       ● シンボルエンカウントイベントの設定方法 ●========================
  38.       シンボルの動作を設定箇所にてあらかじめ定義しておきます。
  39.       --------------------------------------------------------------------
  40.       イベント>自律移動>頻度を最高に設定してください。
  41.       --------------------------------------------------------------------
  42.       イベント>自律移動>カスタム>移動ルート>スクリプトに
  43.         enable_symbol_encount(id)
  44.       と記述します。idには設定箇所で定義したものを指定します。
  45.       --------------------------------------------------------------------
  46.       後はイベントのトリガーを"イベントから接触"にして戦闘を起動するだけ!
  47.       ====================================================================
  48.       
  49.       ● ステルス機能について ●==========================================
  50.       メモ欄に「ステルス:n」と記述されたスキル・アイテムを使用すると
  51.       ステルス状態となり、一定期間シンボルが反応しなくなります。
  52.       nにはステルス状態が維持されるプレイヤーの歩数を指定します。
  53.       --------------------------------------------------------------------
  54.       イベントのスクリプトから下記のコードを実行することで、
  55.       ステルスを強制的に解除することができます。
  56.         reset_stealth
  57.       --------------------------------------------------------------------
  58.       操作キャラクターの変更時や、シナリオ上で長い時間が経過した際などに
  59.       使用してください。
  60.       ====================================================================
  61.       
  62.       ● 注意 ●==========================================================
  63.       ニューゲームから始めないとエラーを吐きます。
  64.       ====================================================================
  65.       
  66.       ver1.01

  67.       Last Update : 2012/03/04
  68.       03/04 : 追跡中のイベントが存在する際にイベントが発生すると、
  69.               追跡状態がおかしくなる不具合を修正
  70.       ----------------------2012--------------------------
  71.       12/23 : RGSS2からの移植
  72.       ----------------------2011--------------------------
  73.       
  74.       ろかん   http://kaisou-ryouiki.sakura.ne.jp/
  75. =end

  76. #===================================
  77. #  ●設定箇所
  78. #===================================
  79. module SymbolEncount
  80.   # 隊列がシンボルと接触した場合、イベントを起動するかどうか
  81.   FOLLOWER_CONTACT = true
  82.   
  83.   # シンボルエンカウントの設定をあらかじめ定義
  84.   SYMBOL_SETTING_LIST = {
  85.     #-----------------------------------------------------------
  86.     0 => [
  87.           # シンボルが逃げるプレイヤーレベル
  88.           #   0が設定されている場合逃走しません
  89.           43,
  90.           # プレイヤーレベルの判断種別
  91.           #   0:平均レベル、1:最大レベル、2:先頭メンバーのレベル
  92.           2,
  93.           # シンボルが反応するプレイヤーとの距離
  94.           3,
  95.           # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  96.           6,
  97.           # プレイヤーに反応していない時の移動パターン
  98.           #   0:ランダム移動、1:停止
  99.           0,
  100.           # 透明度の変化するプレイヤーとの距離
  101.           #   ここで指定した距離よりもシンボルから遠ざかることで
  102.           #   シンボルが少しずつ見えにくくなっていきます。
  103.           #   0が設定されている場合この機能は無効になります。
  104.           4,
  105.           # 反応前の移動速度
  106.           #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
  107.           1,
  108.           # 反応後の移動速度
  109.           #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
  110.           3,
  111.           # 反応前の移動頻度
  112.           #   1:最低、2:低、3:通常、4:高、5:最高
  113.           5,
  114.           # 反応後の移動頻度
  115.           #   1:最低、2:低、3:通常、4:高、5:最高
  116.           5,
  117.           # 反応時に再生するフキダシアイコンID
  118.           #   0が設定されている場合この機能は無効になります。
  119.           1,
  120.           # シンボルが通行することのできないリージョンID
  121.           # 配列形式で指定してください。
  122.           [1, 3]
  123.          ],
  124.     #-----------------------------------------------------------
  125.     1 => [
  126.           45,# シンボルが逃げるプレイヤーレベル
  127.           2, # プレイヤーレベルの判断種別
  128.           3, # シンボルが反応するプレイヤーとの距離
  129.           6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  130.           0, # プレイヤーに反応していない時の移動パターン
  131.           4, # 透明度の変化するプレイヤーとの距離
  132.           1, # 反応前の移動速度
  133.           3, # 反応後の移動速度
  134.           5, # 反応前の移動頻度
  135.           5, # 反応後の移動頻度
  136.           1, # 反応時に再生するフキダシアイコンID
  137.           [1,3] # シンボルが移動することのできないリージョンID
  138.          ],
  139.     #-----------------------------------------------------------
  140.     2 => [
  141.           47,# シンボルが逃げるプレイヤーレベル
  142.           2, # プレイヤーレベルの判断種別
  143.           3, # シンボルが反応するプレイヤーとの距離
  144.           6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  145.           0, # プレイヤーに反応していない時の移動パターン
  146.           4, # 透明度の変化するプレイヤーとの距離
  147.           1, # 反応前の移動速度
  148.           3, # 反応後の移動速度
  149.           5, # 反応前の移動頻度
  150.           5, # 反応後の移動頻度
  151.           1, # 反応時に再生するフキダシアイコンID
  152.           [1,3] # シンボルが移動することのできないリージョンID
  153.          ],
  154.     #-----------------------------------------------------------
  155.     3 => [
  156.           49, # シンボルが逃げるプレイヤーレベル
  157.           2, # プレイヤーレベルの判断種別
  158.           3, # シンボルが反応するプレイヤーとの距離
  159.           6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  160.           0, # プレイヤーに反応していない時の移動パターン
  161.           4, # 透明度の変化するプレイヤーとの距離
  162.           1, # 反応前の移動速度
  163.           3, # 反応後の移動速度
  164.           5, # 反応前の移動頻度
  165.           5, # 反応後の移動頻度
  166.           1, # 反応時に再生するフキダシアイコンID
  167.           [1,3] # シンボルが移動することのできないリージョンID
  168.          ],
  169.     #-----------------------------------------------------------
  170.     4 => [
  171.           51, # シンボルが逃げるプレイヤーレベル
  172.           2, # プレイヤーレベルの判断種別
  173.           3, # シンボルが反応するプレイヤーとの距離
  174.           6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  175.           0, # プレイヤーに反応していない時の移動パターン
  176.           98, # 透明度の変化するプレイヤーとの距離
  177.           1, # 反応前の移動速度
  178.           3, # 反応後の移動速度
  179.           5, # 反応前の移動頻度
  180.           5, # 反応後の移動頻度
  181.           1, # 反応時に再生するフキダシアイコンID
  182.           [1,3] # シンボルが移動することのできないリージョンID
  183.          ],
  184.     #-----------------------------------------------------------
  185.     #驱魔结界专用
  186.     5 => [
  187.           1, # シンボルが逃げるプレイヤーレベル
  188.           2, # プレイヤーレベルの判断種別
  189.           3, # シンボルが反応するプレイヤーとの距離
  190.           6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  191.           0, # プレイヤーに反応していない時の移動パターン
  192.           4, # 透明度の変化するプレイヤーとの距離
  193.           1, # 反応前の移動速度
  194.           3, # 反応後の移動速度
  195.           5, # 反応前の移動頻度
  196.           5, # 反応後の移動頻度
  197.           1, # 反応時に再生するフキダシアイコンID
  198.           [1,3] # シンボルが移動することのできないリージョンID
  199.          ],
  200.     #透明度反向专用
  201.     99 => [
  202.           1, # シンボルが逃げるプレイヤーレベル
  203.           2, # プレイヤーレベルの判断種別
  204.           -1, # シンボルが反応するプレイヤーとの距離
  205.           -1, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
  206.           0, # プレイヤーに反応していない時の移動パターン
  207.           99, # 透明度の変化するプレイヤーとの距離
  208.           1, # 反応前の移動速度
  209.           3, # 反応後の移動速度
  210.           5, # 反応前の移動頻度
  211.           5, # 反応後の移動頻度
  212.           1, # 反応時に再生するフキダシアイコンID
  213.           [1,3] # シンボルが移動することのできないリージョンID
  214.          ],
  215.     #-----------------------------------------------------------
  216.   }
  217. end
  218. #===================================
  219. #  ここまで
  220. #===================================

  221. $rsi ||= {}
  222. $rsi["シンボルエンカウント補助"] = true

  223. class RPG::UsableItem < RPG::BaseItem
  224.   def stealth_obj_count
  225.     self.note.each_line{|line|
  226.       return $1.to_i if line =~ /ステルス:(\d+)/i
  227.     }
  228.     0
  229.   end
  230. end

  231. class << BattleManager
  232.   #--------------------------------------------------------------------------
  233.   # ● モジュールのインスタンス変数
  234.   #--------------------------------------------------------------------------
  235.   attr_writer   :run_event
  236.   @run_event = nil # 戦闘を呼び出したイベント
  237.   #--------------------------------------------------------------------------
  238.   # ● セットアップ
  239.   #--------------------------------------------------------------------------
  240.   alias _symbol_encount_setup setup
  241.   def setup(troop_id, can_escape = true, can_lose = false)
  242.     _symbol_encount_setup(troop_id, can_escape, can_lose)
  243.     set_battle_condition
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● シンボルエンカウントイベントから戦闘が呼び出されている場合の処理
  247.   #--------------------------------------------------------------------------
  248.   def set_battle_condition
  249.     if @run_event && @run_event.symbol_encount
  250.       @run_event.set_contact_condition
  251.       case @run_event.contact_condition
  252.       when 1
  253.         @preemptive = true
  254.       when 2
  255.         @surprise = true
  256.       end
  257.     end
  258.     @run_event = nil
  259.   end
  260. end

  261. class Game_Actor < Game_Battler
  262.   #--------------------------------------------------------------------------
  263.   # ● スキル/アイテムの使用
  264.   #--------------------------------------------------------------------------
  265.   def use_item(item)
  266.     stealth_effect(item)
  267.     super
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● ステルス効果の適用
  271.   #--------------------------------------------------------------------------
  272.   def stealth_effect(item)
  273.     result = item.stealth_obj_count
  274.     $game_player.stealth_count = result if result > 0
  275.   end
  276. end

  277. class Game_Party < Game_Unit
  278.   #--------------------------------------------------------------------------
  279.   # ● プレイヤーレベルの取得
  280.   #--------------------------------------------------------------------------
  281.   def get_player_level(type)
  282.     case type
  283.     when 0
  284.       members.inject(0){|r, actor| r += actor.level} / members.size
  285.     when 1
  286.       members.max_by{|actor| actor.level}
  287.     when 2
  288.       $game_party.members.first.level
  289.     end
  290.   end
  291. end

  292. class Game_Character < Game_CharacterBase
  293.   #--------------------------------------------------------------------------
  294.   # ● 非公開メンバ変数の初期化
  295.   #--------------------------------------------------------------------------
  296.   alias _symbol_init_private_members init_private_members
  297.   def init_private_members
  298.     _symbol_init_private_members
  299.     @origin_opacity = @opacity
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 移動コマンドの処理
  303.   #--------------------------------------------------------------------------
  304.   alias _symbol_process_move_command process_move_command
  305.   def process_move_command(command)
  306.     params = command.parameters
  307.     @origin_opacity = params[0] if command.code == ROUTE_CHANGE_OPACITY
  308.     _symbol_process_move_command(command)
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 指定キャラクターとの位置関係を取得(接触していることを前提)
  312.   #--------------------------------------------------------------------------
  313.   def positional_relationship(character)
  314.     if character.real_x == real_x
  315.       character.real_y > real_y ? 1 : 0
  316.     elsif character.real_y == real_y
  317.       character.real_x > real_x ? 2 : 3
  318.     else
  319.       -1
  320.     end
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● シンボルエンカウント関連処理による透明度の更新
  324.   #--------------------------------------------------------------------------
  325.   def update_symbol_opacity
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● フレーム更新
  329.   #--------------------------------------------------------------------------
  330.   alias _symbol_opacity_update update
  331.   def update
  332.     _symbol_opacity_update
  333.     update_symbol_opacity
  334.   end
  335. end

  336. class Game_Player < Game_Character
  337.   #--------------------------------------------------------------------------
  338.   # ● 公開インスタンス変数
  339.   #--------------------------------------------------------------------------
  340.   attr_writer :stealth_count
  341.   #--------------------------------------------------------------------------
  342.   # ● 公開メンバ変数の初期化
  343.   #--------------------------------------------------------------------------
  344.   def init_public_members
  345.     super
  346.     reset_stealth
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● ステルス状態の初期化
  350.   #--------------------------------------------------------------------------
  351.   def reset_stealth
  352.     @stealth_count = 0
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● ステルス判定
  356.   #--------------------------------------------------------------------------
  357.   def stealth?
  358.     !@stealth_count.zero?
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 歩数増加
  362.   #--------------------------------------------------------------------------
  363.   alias _increase_stealth_count increase_steps
  364.   def increase_steps
  365.     _increase_stealth_count
  366.     @stealth_count -= 1 if stealth?
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ● シンボルエンカウント関連処理による透明度の更新
  370.   #--------------------------------------------------------------------------
  371.   def update_symbol_opacity
  372.     if stealth? && !$game_map.interpreter.running?
  373.       @opacity = 128
  374.     else
  375.       @opacity = @origin_opacity
  376.     end
  377.   end
  378. end

  379. class Game_Follower < Game_Character
  380.   #--------------------------------------------------------------------------
  381.   # ● 公開インスタンス変数
  382.   #--------------------------------------------------------------------------
  383.   attr_reader :member_index
  384. end

  385. class Game_Event < Game_Character
  386.   #--------------------------------------------------------------------------
  387.   # ● インクルード SymbolEncount
  388.   #--------------------------------------------------------------------------
  389.   include SymbolEncount
  390.   #--------------------------------------------------------------------------
  391.   # ● 公開インスタンス変数
  392.   #--------------------------------------------------------------------------
  393.   attr_reader :symbol_encount
  394.   attr_reader :contact_condition
  395.   #--------------------------------------------------------------------------
  396.   # ● 非公開メンバ変数の初期化
  397.   #--------------------------------------------------------------------------
  398.   alias _symbol_encount_ini init_private_members
  399.   def init_private_members
  400.     _symbol_encount_ini
  401.     init_symbol_encount
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● イベントページのセットアップ
  405.   #--------------------------------------------------------------------------
  406.   alias _symbol_encount_setup_page setup_page
  407.   def setup_page(new_page)
  408.     init_symbol_encount
  409.     _symbol_encount_setup_page(new_page)
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● シンボルエンカウントの初期化
  413.   #--------------------------------------------------------------------------
  414.   def init_symbol_encount
  415.     @forming = false
  416.     @symbol_encount = false
  417.     @symbol_away_level = 0
  418.     @symbol_away_level_type = 0
  419.     @reaction_distance = 0
  420.     @reaction_distance_with_dash = 0
  421.     @nonreaction_move_type = 0
  422.     @visibility_distance = 0
  423.     @reaction_before_speed = 0
  424.     @reaction_after_speed = 0
  425.     @reaction_before_speed = 0
  426.     @reaction_after_frequency = 0
  427.     @reaction_balloon_id = 0
  428.     @unpassable_region = []
  429.     @contact_index = -1
  430.     @contact_condition = 0
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● シンボルエンカウントを有効化
  434.   #--------------------------------------------------------------------------
  435.   def enable_symbol_encount(id)
  436.     data = SYMBOL_SETTING_LIST[id]
  437.     @symbol_encount = true
  438.     @symbol_away_level = data[0]
  439.     @symbol_away_level_type = data[1]
  440.     @reaction_distance = data[2]
  441.     @reaction_distance_with_dash = data[3]
  442.     @nonreaction_move_type = data[4]
  443.     @visibility_distance = data[5]
  444.     @reaction_before_speed = data[6]
  445.     @reaction_after_speed = data[7]
  446.     @reaction_before_frequency = data[8]
  447.     @reaction_after_frequency = data[9]
  448.     @reaction_balloon_id = data[10]
  449.     @unpassable_region = data[11].dup
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● 通行可能判定
  453.   #--------------------------------------------------------------------------
  454.   def passable?(x, y, d)
  455.     if @symbol_encount
  456.       x2 = $game_map.round_x_with_direction(x, d)
  457.       y2 = $game_map.round_y_with_direction(y, d)
  458.       return false if @unpassable_region.include?($game_map.region_id(x2, y2))
  459.     end
  460.     super
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● ロック(実行中のイベントが立ち止まる処理) ※再定義
  464.   #--------------------------------------------------------------------------
  465.   def lock
  466.     unless @locked
  467.       @prelock_direction = @direction
  468.       turn_toward_player unless @symbol_encount
  469.       @locked = true
  470.     end
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● プレイヤーレベルの取得
  474.   #--------------------------------------------------------------------------
  475.   def player_level
  476.     $game_party.get_player_level(@symbol_away_level_type)
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● プレイヤーからの距離を取得
  480.   #--------------------------------------------------------------------------
  481.   def distance_from_player
  482.     distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 指定キャラクターからの距離を取得
  486.   #--------------------------------------------------------------------------
  487.   def distance_from_character(character)
  488.     distance_x_from(character.x).abs + distance_y_from(character.y).abs
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 反応するプレイヤーからの距離を取得
  492.   #--------------------------------------------------------------------------
  493.   def reaction_distance
  494.     if @forming
  495.       @reaction_distance_with_dash.next
  496.     elsif $game_player.dash? && $game_player.moving?
  497.       @reaction_distance_with_dash
  498.     else
  499.       @reaction_distance
  500.     end
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● シンボルエンカウントを動作させるか
  504.   #--------------------------------------------------------------------------
  505.   def active_symbol_encount?
  506.     if $game_map.interpreter.running?
  507.       false
  508.     elsif @erased || $game_player.stealth?
  509.       @forming = false
  510.       false
  511.     else
  512.       true
  513.     end
  514.   end
  515.   #--------------------------------------------------------------------------
  516.   # ● プレイヤーと同じ方向を向いているか
  517.   #--------------------------------------------------------------------------
  518.   def direction_as_player?
  519.     direction == $game_player.direction
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● 指定キャラクターとの簡易接触判定
  523.   #--------------------------------------------------------------------------
  524.   def contact?(character)
  525.     distance_from_character(character) <= 1
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # ● プレイヤーへの反応判定
  529.   #--------------------------------------------------------------------------
  530.   def reaction?
  531.     distance_from_player <= reaction_distance
  532.   end
  533.   #--------------------------------------------------------------------------
  534.   # ● プレイヤーからの逃走判定
  535.   #--------------------------------------------------------------------------
  536.   def away?
  537.     player_level > @symbol_away_level
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 接触状況の判断
  541.   #--------------------------------------------------------------------------
  542.   def set_contact_condition
  543.     @contact_index = -1
  544.     @contact_condition = 0
  545.     if contact?($game_player)
  546.       @contact_index = 0
  547.     elsif FOLLOWER_CONTACT
  548.       $game_player.followers.visible_folloers.each{|follower|
  549.         @contact_index = follower.member_index if contact?(follower)
  550.       }
  551.     end
  552.     if @contact_index.zero?
  553.       @contact_condition = direction_and_positional
  554.     elsif $game_player.followers.visible_folloers.size == @contact_index
  555.       @contact_condition = 2
  556.     else
  557.       @contact_condition = 0
  558.     end
  559.   end
  560.   #--------------------------------------------------------------------------
  561.   # ● プレイヤーとの位置と向き関係から接触状況を取得
  562.   #--------------------------------------------------------------------------
  563.   def direction_and_positional
  564.     position = positional_relationship($game_player)
  565.     if position == -1
  566.       0
  567.     else
  568.       case direction
  569.       when 2
  570.         direction_as_player? ? (position == 0 ? 1 : 2) : 0
  571.       when 4
  572.         direction_as_player? ? (position == 2 ? 1 : 2) : 0
  573.       when 6
  574.         direction_as_player? ? (position == 3 ? 1 : 2) : 0
  575.       when 8
  576.         direction_as_player? ? (position == 1 ? 1 : 2) : 0
  577.       else
  578.         0
  579.       end
  580.     end
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 接触イベントの起動判定
  584.   #--------------------------------------------------------------------------
  585.   alias _symbol_encount_trigger check_event_trigger_touch
  586.   def check_event_trigger_touch(x, y)
  587.     if @symbol_encount && FOLLOWER_CONTACT
  588.       unless $game_map.interpreter.running?
  589.         if @trigger == 2 && collide_with_player_characters?(x, y)
  590.           start unless jumping?
  591.         end
  592.       end
  593.     else
  594.       _symbol_encount_trigger(x, y)
  595.     end
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 追跡の開始
  599.   #--------------------------------------------------------------------------
  600.   def start_forming
  601.     @move_speed = @reaction_after_speed
  602.     @move_frequency = @reaction_after_frequency
  603.     unless @reaction_balloon_id.zero?
  604.       Audio.se_play('Audio/SE/Decision1', 50, 150)
  605.       @balloon_id = @reaction_balloon_id
  606.     end
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● 追跡の終了(見失う)
  610.   #--------------------------------------------------------------------------
  611.   def end_forming
  612.     @move_speed = @reaction_before_speed
  613.     @move_frequency = @reaction_before_frequency
  614.   end
  615.   #--------------------------------------------------------------------------
  616.   # ● 反応している時の移動処理
  617.   #--------------------------------------------------------------------------
  618.   def reaction_movement
  619.     @move_speed = @reaction_after_speed
  620.     @move_frequency = @reaction_after_frequency
  621.     if @symbol_away_level.zero?
  622.       move_type_toward_player
  623.     elsif away?
  624.       move_away_from_player
  625.     else
  626.       move_type_toward_player
  627.     end
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 反応していない時の移動処理
  631.   #--------------------------------------------------------------------------
  632.   def nonreaction_movement
  633.     @move_speed = @reaction_before_speed
  634.     @move_frequency = @reaction_before_frequency
  635.     case @nonreaction_move_type
  636.     when 0
  637.       move_type_random
  638.     when 1
  639.     end
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● フレーム更新
  643.   #--------------------------------------------------------------------------
  644.   alias _update_with_symbol update
  645.   def update
  646.     update_symbol_reaction if @symbol_encount && @wait_count <= 0 &&
  647.       !@move_route_forcing
  648.     _update_with_symbol
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ● プレイヤーへの反応判定を更新
  652.   #--------------------------------------------------------------------------
  653.   def update_symbol_reaction
  654.     if active_symbol_encount?
  655.       if !@forming && reaction?
  656.         start_forming
  657.       elsif @forming && !reaction?
  658.         end_forming
  659.       end
  660.       @forming = reaction?
  661.     end
  662.   end
  663.   #--------------------------------------------------------------------------
  664.   # ● シンボルエンカウント関連処理による透明度の更新
  665.   #--------------------------------------------------------------------------
  666.   def update_symbol_opacity
  667.     if $game_switches[26] and @visibility_distance != 99#GFG 鹰眼
  668.       @opacity = @origin_opacity
  669.       return
  670.     end
  671.     if @visibility_distance == 99 #透明度反转
  672.       @opacity = [@origin_opacity - (255 - 50 * distance_from_player), 255].min
  673.       return
  674.     end
  675.     if @visibility_distance.zero?
  676.       @opacity = @origin_opacity
  677.     else
  678.       @opacity = @origin_opacity - 50 * (distance_from_player - @visibility_distance)
  679.     end
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● 自律移動の更新
  683.   #--------------------------------------------------------------------------
  684.   alias _update_self_movement_with_symbol update_self_movement
  685.   def update_self_movement
  686.     if @symbol_encount
  687.       update_symbol_movement if near_the_screen? && @stop_count > stop_count_threshold
  688.     else
  689.       _update_self_movement_with_symbol
  690.     end
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ● シンボルの動作を更新
  694.   #--------------------------------------------------------------------------
  695.   def update_symbol_movement
  696.     if near_the_screen? && @stop_count > stop_count_threshold
  697.       if active_symbol_encount?
  698.         @forming ? reaction_movement : nonreaction_movement
  699.       else
  700.         nonreaction_movement
  701.       end
  702.     end
  703.   end
  704. end

  705. class Game_Interpreter
  706.   #--------------------------------------------------------------------------
  707.   # ● バトルの処理
  708.   #--------------------------------------------------------------------------
  709.   alias _command_301_with_symbol_encount command_301
  710.   def command_301
  711.     unless $game_party.in_battle
  712.       BattleManager.run_event = $game_map.events[@event_id]
  713.       _command_301_with_symbol_encount
  714.     end
  715.   end
  716.   #--------------------------------------------------------------------------
  717.   # ● ステルス状態の解除
  718.   #--------------------------------------------------------------------------
  719.   def reset_stealth
  720.     $game_player.reset_stealth
  721.   end
  722. end
复制代码

作者: 15968715431    时间: 2015-1-14 10:54
不知道是指哪种视野。。。
视野限制脚本非常多,请多搜索一下,比如:
http://rpg.blue/thread-221710-1-1.html
https://rpg.blue/forum.php?mod=v ... 9039&highlight=视野

作者: taroxd    时间: 2015-1-14 12:41
你看看 Glimmer 中设置的怪物的移动路线




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