查看: 6310|回复: 3

[已经过期] 关于视野限制脚本

[复制链接]
梦石
0
星屑
330
在线时间
57 小时
注册时间
2018-8-3
回帖
4
发表于 2019-7-14 16:31:26 | 显示全部楼层 |阅读模式

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

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

×
在测试的时候出现了报错。
之前也有过这种情况。不知道问题出在什么地方。
几次都是在中途出现的。对代码不清楚。是不是因为画面中敌人数量多了......还是别的什么。
先提前感谢大家——!
(附上截图和原代码)
[pre lang="ruby"]=begin
      RGSS3
      
      ★ シンボルエンカウント補助 ★

      イベントでのシンボルエンカウントの動作を補助します。
      
      ● 仕様 ●==========================================================
      シンボルエンカウント有効後は、
      イベントページの自律移動の項で設定されたものは全て無効になります。
      --------------------------------------------------------------------
      一度有効になったシンボルエンカウントを無効にするには、
      シンボルエンカウント設定のないイベントページに切り替えてください。
      ====================================================================
      
      ● 機能 ●==========================================================
      シンボルエンカウントイベントから戦闘を起動した場合、
      シンボルとプレイヤーの位置関係により先制攻撃or不意打ちが発生します。
          ・イベントの背後を取った場合           => 先制攻撃
          ・イベントに背後を取られた場合         => 不意打ち
          ・イベントが隊列の最後尾に接触した場合 => 不意打ち
      --------------------------------------------------------------------
      プレイヤーとの距離が一定内になるとプレイヤーを追跡するようになります。
      --------------------------------------------------------------------
      プレイヤーとの距離によりシンボルの透明度を変化させることができます。
      --------------------------------------------------------------------
      プレイヤーのレベルによりシンボルが逃走したりします。
      --------------------------------------------------------------------
      ダッシュしているとシンボルが反応しやすくなったりします。
      --------------------------------------------------------------------
      シンボルが反応した瞬間フキダシアイコンが表示されたりします。
      --------------------------------------------------------------------
      シンボルが反応しなくなるアイテムやスキルを作ることができます。
      --------------------------------------------------------------------
      シンボルが通行できないリージョンを設定することができます。
      ====================================================================
      
      ● シンボルエンカウントイベントの設定方法 ●========================
      シンボルの動作を設定箇所にてあらかじめ定義しておきます。
      --------------------------------------------------------------------
      イベント>自律移動>頻度を最高に設定してください。
      --------------------------------------------------------------------
      イベント>自律移動>カスタム>移動ルート>スクリプトに
        enable_symbol_encount(id)
      と記述します。idには設定箇所で定義したものを指定します。
      --------------------------------------------------------------------
      後はイベントのトリガーを"イベントから接触"にして戦闘を起動するだけ!
      ====================================================================
      
      ● ステルス機能について ●==========================================
      メモ欄に「ステルス:n」と記述されたスキル・アイテムを使用すると
      ステルス状態となり、一定期間シンボルが反応しなくなります。
      nにはステルス状態が維持されるプレイヤーの歩数を指定します。
      --------------------------------------------------------------------
      イベントのスクリプトから下記のコードを実行することで、
      ステルスを強制的に解除することができます。
        reset_stealth
      --------------------------------------------------------------------
      操作キャラクターの変更時や、シナリオ上で長い時間が経過した際などに
      使用してください。
      ====================================================================
      
      ● 注意 ●==========================================================
      ニューゲームから始めないとエラーを吐きます。
      ====================================================================
      
      ver1.01

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

#===================================
#  ●設定箇所
#===================================
module SymbolEncount
  # 隊列がシンボルと接触した場合、イベントを起動するかどうか
  FOLLOWER_CONTACT = true

  # シンボルエンカウントの設定をあらかじめ定義
  SYMBOL_SETTING_LIST = {
    #-----------------------------------------------------------
    0 => [
          # シンボルが逃げるプレイヤーレベル
          #   0が設定されている場合逃走しません
          0,
          # プレイヤーレベルの判断種別
          #   0:平均レベル、1:最大レベル、2:先頭メンバーのレベル
          0,
          # シンボルが反応するプレイヤーとの距離
          3,
          # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          6,
          # プレイヤーに反応していない時の移動パターン
          #   0:ランダム移動、1:停止
          0,
          # 透明度の変化するプレイヤーとの距離
          #   ここで指定した距離よりもシンボルから遠ざかることで
          #   シンボルが少しずつ見えにくくなっていきます。
          #   0が設定されている場合この機能は無効になります。
          0,
          # 反応前の移動速度
          #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
          3,
          # 反応後の移動速度
          #   1:1/8倍速、2:1/4倍速、3:1/2倍速、4:標準速、5:2倍速、6:4倍速
          4,
          # 反応前の移動頻度
          #   1:最低、2:低、3:通常、4:高、5:最高
          5,
          # 反応後の移動頻度
          #   1:最低、2:低、3:通常、4:高、5:最高
          5,
          # 反応時に再生するフキダシアイコンID
          #   0が設定されている場合この機能は無効になります。
          1,
          # シンボルが通行することのできないリージョンID
          # 配列形式で指定してください。
          []
         ],
    #警備兵------------------------------------------------
    1 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          6, # シンボルが反応するプレイヤーとの距離
          6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          1, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          6, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #番兵-------------------------------
    2 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          6, # シンボルが反応するプレイヤーとの距離
          6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          5, # 反応前の移動速度
          6, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #Lv10までのモンスター----------------------------------------------------
    3 => [
          10, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #Lv18までのモンスター----------------------------------------------------
    4 => [
          18, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #Lv27までのモンスター----------------------------------------------------
    5 => [
          27, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #Lv35までのモンスター----------------------------------------------------
    6 => [
          35, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #制限なしモンスター----------------------------------------------------
    7 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #山賊----------------------------------------------------
    8 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          5, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #ノトーリアスモンスター-----------------------------------
    9 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          2, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #警備兵(徘徊)------------------------------------------------
    10 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          5, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          2, # 反応前の移動速度
          5, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #Lv42までのモンスター----------------------------------------------------
    11 => [
          42, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          5, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #看守------------------------------------------------
    12 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          6, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          1, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          3, # 反応前の移動速度
          4, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #高速接近------------------------------------------------
    13 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          3, # シンボルが反応するプレイヤーとの距離
          3, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          0, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          5, # 反応前の移動速度
          5, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
    #宝飾店店主------------------------------------------------
    14 => [
          0, # シンボルが逃げるプレイヤーレベル
          0, # プレイヤーレベルの判断種別
          4, # シンボルが反応するプレイヤーとの距離
          4, # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
          1, # プレイヤーに反応していない時の移動パターン
          0, # 透明度の変化するプレイヤーとの距離
          5, # 反応前の移動速度
          6, # 反応後の移動速度
          5, # 反応前の移動頻度
          5, # 反応後の移動頻度
          1, # 反応時に再生するフキダシアイコンID
          [] # シンボルが移動することのできないリージョンID
         ],
  }
end
#===================================
#  ここまで
#===================================

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

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

class << BattleManager
  #--------------------------------------------------------------------------
  # ● モジュールのインスタンス変数
  #--------------------------------------------------------------------------
  attr_writer   :run_event
  @run_event = nil # 戦闘を呼び出したイベント
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  alias _symbol_encount_setup setup
  def setup(troop_id, can_escape = true, can_lose = false)
    _symbol_encount_setup(troop_id, can_escape, can_lose)
    set_battle_condition
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウントイベントから戦闘が呼び出されている場合の処理
  #--------------------------------------------------------------------------
  def set_battle_condition
    if @run_event && @run_event.symbol_encount
      @run_event.set_contact_condition
      case @run_event.contact_condition
      when 1
        @preemptive = true
      when 2
        @surprise = true
      end
    end
    @run_event = nil
  end
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用
  #--------------------------------------------------------------------------
  def use_item(item)
    stealth_effect(item)
    super
  end
  #--------------------------------------------------------------------------
  # ● ステルス効果の適用
  #--------------------------------------------------------------------------
  def stealth_effect(item)
    result = item.stealth_obj_count
    $game_player.stealth_count = result if result > 0
  end
end

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● プレイヤーレベルの取得
  #--------------------------------------------------------------------------
  def get_player_level(type)
    case type
    when 0
      members.inject(0){|r, actor| r += actor.level} / members.size
    when 1
      members.max_by{|actor| actor.level}
    when 2
      $game_party.members.first.level
    end
  end
end

class Game_Character < Game_CharacterBase
  #--------------------------------------------------------------------------
  # ● 非公開メンバ変数の初期化
  #--------------------------------------------------------------------------
  alias _symbol_init_private_members init_private_members
  def init_private_members
    _symbol_init_private_members
    @origin_opacity = @opacity
  end
  #--------------------------------------------------------------------------
  # ● 移動コマンドの処理
  #--------------------------------------------------------------------------
  alias _symbol_process_move_command process_move_command
  def process_move_command(command)
    params = command.parameters
    @origin_opacity = params[0] if command.code == ROUTE_CHANGE_OPACITY
    _symbol_process_move_command(command)
  end
  #--------------------------------------------------------------------------
  # ● 指定キャラクターとの位置関係を取得(接触していることを前提)
  #--------------------------------------------------------------------------
  def positional_relationship(character)
    if character.real_x == real_x
      character.real_y > real_y ? 1 : 0
    elsif character.real_y == real_y
      character.real_x > real_x ? 2 : 3
    else
      -1
    end
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウント関連処理による透明度の更新
  #--------------------------------------------------------------------------
  def update_symbol_opacity
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias _symbol_opacity_update update
  def update
    _symbol_opacity_update
    update_symbol_opacity
  end
end

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_writer :stealth_count
  #--------------------------------------------------------------------------
  # ● 公開メンバ変数の初期化
  #--------------------------------------------------------------------------
  def init_public_members
    super
    reset_stealth
  end
  #--------------------------------------------------------------------------
  # ● ステルス状態の初期化
  #--------------------------------------------------------------------------
  def reset_stealth
    @stealth_count = 0
  end
  #--------------------------------------------------------------------------
  # ● ステルス判定
  #--------------------------------------------------------------------------
  def stealth?
    !@stealth_count.zero?
  end
  #--------------------------------------------------------------------------
  # ● 歩数増加
  #--------------------------------------------------------------------------
  alias _increase_stealth_count increase_steps
  def increase_steps
    _increase_stealth_count
    @stealth_count -= 1 if stealth?
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウント関連処理による透明度の更新
  #--------------------------------------------------------------------------
  def update_symbol_opacity
    if stealth? && !$game_map.interpreter.running?
      @opacity = 64 #規定値 128
    else
      @opacity = @origin_opacity
    end
  end
end

class Game_Follower < Game_Character
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :member_index
end

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● インクルード SymbolEncount
  #--------------------------------------------------------------------------
  include SymbolEncount
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :symbol_encount
  attr_reader :contact_condition
  #--------------------------------------------------------------------------
  # ● 非公開メンバ変数の初期化
  #--------------------------------------------------------------------------
  alias _symbol_encount_ini init_private_members
  def init_private_members
    _symbol_encount_ini
    init_symbol_encount
  end
  #--------------------------------------------------------------------------
  # ● イベントページのセットアップ
  #--------------------------------------------------------------------------
  alias _symbol_encount_setup_page setup_page
  def setup_page(new_page)
    init_symbol_encount
    _symbol_encount_setup_page(new_page)
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウントの初期化
  #--------------------------------------------------------------------------
  def init_symbol_encount
    @forming = false
    @symbol_encount = false
    @symbol_away_level = 0
    @symbol_away_level_type = 0
    @reaction_distance = 0
    @reaction_distance_with_dash = 0
    @nonreaction_move_type = 0
    @visibility_distance = 0
    @reaction_before_speed = 0
    @reaction_after_speed = 0
    @reaction_before_speed = 0
    @reaction_after_frequency = 0
    @reaction_balloon_id = 0
    @unpassable_region = []
    @contact_index = -1
    @contact_condition = 0
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウントを有効化
  #--------------------------------------------------------------------------
  def enable_symbol_encount(id)
    data = SYMBOL_SETTING_LIST[id]
    @symbol_encount = true
    @symbol_away_level = data[0]
    @symbol_away_level_type = data[1]
    @reaction_distance = data[2]
    @reaction_distance_with_dash = data[3]
    @nonreaction_move_type = data[4]
    @visibility_distance = data[5]
    @reaction_before_speed = data[6]
    @reaction_after_speed = data[7]
    @reaction_before_frequency = data[8]
    @reaction_after_frequency = data[9]
    @reaction_balloon_id = data[10]
    @unpassable_region = data[11].dup
  end
  #--------------------------------------------------------------------------
  # ● 通行可能判定
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    if @symbol_encount
      x2 = $game_map.round_x_with_direction(x, d)
      y2 = $game_map.round_y_with_direction(y, d)
      return false if @unpassable_region.include?($game_map.region_id(x2, y2))
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● ロック(実行中のイベントが立ち止まる処理) ※再定義
  #--------------------------------------------------------------------------
  def lock
    unless @locked
      @prelock_direction = @direction
      turn_toward_player unless @symbol_encount
      @locked = true
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーレベルの取得
  #--------------------------------------------------------------------------
  def player_level
    $game_party.get_player_level(@symbol_away_level_type)
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーからの距離を取得
  #--------------------------------------------------------------------------
  def distance_from_player
    distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs
  end
  #--------------------------------------------------------------------------
  # ● 指定キャラクターからの距離を取得
  #--------------------------------------------------------------------------
  def distance_from_character(character)
    distance_x_from(character.x).abs + distance_y_from(character.y).abs
  end
  #--------------------------------------------------------------------------
  # ● 反応するプレイヤーからの距離を取得
  #--------------------------------------------------------------------------
  def reaction_distance
    if @forming
      @reaction_distance_with_dash.next
    elsif $game_player.dash? && $game_player.moving?
      @reaction_distance_with_dash
    else
      @reaction_distance
    end
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウントを動作させるか
  #--------------------------------------------------------------------------
  def active_symbol_encount?
    if $game_map.interpreter.running?
      false
    elsif @erased || $game_player.stealth?
      @forming = false
      false
    else
      true
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーと同じ方向を向いているか
  #--------------------------------------------------------------------------
  def direction_as_player?
    direction == $game_player.direction
  end
  #--------------------------------------------------------------------------
  # ● 指定キャラクターとの簡易接触判定
  #--------------------------------------------------------------------------
  def contact?(character)
    distance_from_character(character) <= 1
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーへの反応判定
  #--------------------------------------------------------------------------
  def reaction?
    distance_from_player <= reaction_distance
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーからの逃走判定
  #--------------------------------------------------------------------------
  def away?
    player_level > @symbol_away_level
  end
  #--------------------------------------------------------------------------
  # ● 接触状況の判断
  #--------------------------------------------------------------------------
  def set_contact_condition
    @contact_index = -1
    @contact_condition = 0
    if contact?($game_player)
      @contact_index = 0
    elsif FOLLOWER_CONTACT
      $game_player.followers.visible_folloers.each{|follower|
        @contact_index = follower.member_index if contact?(follower)
      }
    end
    if @contact_index.zero?
      @contact_condition = direction_and_positional
    elsif $game_player.followers.visible_folloers.size == @contact_index
      @contact_condition = 2
    else
      @contact_condition = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーとの位置と向き関係から接触状況を取得
  #--------------------------------------------------------------------------
  def direction_and_positional
    position = positional_relationship($game_player)
    if position == -1
      0
    else
      case direction
      when 2
        direction_as_player? ? (position == 0 ? 1 : 2) : 0
      when 4
        direction_as_player? ? (position == 2 ? 1 : 2) : 0
      when 6
        direction_as_player? ? (position == 3 ? 1 : 2) : 0
      when 8
        direction_as_player? ? (position == 1 ? 1 : 2) : 0
      else
        0
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 接触イベントの起動判定
  #--------------------------------------------------------------------------
  alias _symbol_encount_trigger check_event_trigger_touch
  def check_event_trigger_touch(x, y)
    if @symbol_encount && FOLLOWER_CONTACT
      unless $game_map.interpreter.running?
        if @trigger == 2 && collide_with_player_characters?(x, y)
          start unless jumping?
        end
      end
    else
      _symbol_encount_trigger(x, y)
    end
  end
  #--------------------------------------------------------------------------
  # ● 追跡の開始
  #--------------------------------------------------------------------------
  def start_forming
    @move_speed = @reaction_after_speed
    @move_frequency = @reaction_after_frequency
    unless @reaction_balloon_id.zero?
      Audio.se_play('Audio/SE/Decision1', 50, 150)
      @balloon_id = @reaction_balloon_id
    end
  end
  #--------------------------------------------------------------------------
  # ● 追跡の終了(見失う)
  #--------------------------------------------------------------------------
  def end_forming
    @move_speed = @reaction_before_speed
    @move_frequency = @reaction_before_frequency
  end
  #--------------------------------------------------------------------------
  # ● 反応している時の移動処理
  #--------------------------------------------------------------------------
  def reaction_movement
    @move_speed = @reaction_after_speed
    @move_frequency = @reaction_after_frequency
    if @symbol_away_level.zero?
      move_type_toward_player
    elsif away?
      move_away_from_player
    else
      move_type_toward_player
    end
  end
  #--------------------------------------------------------------------------
  # ● 反応していない時の移動処理
  #--------------------------------------------------------------------------
  def nonreaction_movement
    @move_speed = @reaction_before_speed
    @move_frequency = @reaction_before_frequency
    case @nonreaction_move_type
    when 0
      move_type_random
    when 1
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias _update_with_symbol update
  def update
    update_symbol_reaction if @symbol_encount && @wait_count <= 0 && !@move_route_forcing
    _update_with_symbol
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーへの反応判定を更新
  #--------------------------------------------------------------------------
  def update_symbol_reaction
    if active_symbol_encount?
      if !@forming && reaction?
        start_forming
      elsif @forming && !reaction?
        end_forming
      end
      @forming = reaction?
    end
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウント関連処理による透明度の更新
  #--------------------------------------------------------------------------
  def update_symbol_opacity
    if @visibility_distance.zero?
      @opacity = @origin_opacity
    else
      @opacity = @origin_opacity - 50 * (distance_from_player - @visibility_distance)
    end
  end
  #--------------------------------------------------------------------------
  # ● 自律移動の更新
  #--------------------------------------------------------------------------
  alias _update_self_movement_with_symbol update_self_movement
  def update_self_movement
    if @symbol_encount
      update_symbol_movement if near_the_screen? && @stop_count > stop_count_threshold
    else
      _update_self_movement_with_symbol
    end
  end
  #--------------------------------------------------------------------------
  # ● シンボルの動作を更新
  #--------------------------------------------------------------------------
  def update_symbol_movement
    if near_the_screen? && @stop_count > stop_count_threshold
      if active_symbol_encount?
        @forming ? reaction_movement : nonreaction_movement
      else
        nonreaction_movement
      end
    end
  end
end

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● バトルの処理
  #--------------------------------------------------------------------------
  alias _command_301_with_symbol_encount command_301
  def command_301
    unless $game_party.in_battle
      BattleManager.run_event = $game_map.events[@event_id]
      _command_301_with_symbol_encount
    end
  end
  #--------------------------------------------------------------------------
  # ● ステルス状態の解除
  #--------------------------------------------------------------------------
  def reset_stealth
    $game_player.reset_stealth
  end
end
[/pre]
截图未命名.jpg
截图未命名2.jpg

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2019-7-14 17:52:51 | 显示全部楼层
看起来不像是这个脚本的问题啊?
你确定在去掉这个脚本后,再调用角色心情气泡时就没有问题了吗?(事件指令-显示心情气泡,或者事件指令-移动路线-脚本:@balloon_id=1,来显示第二行的心情气泡)

一般来说这个精灵并不会在中途被释放掉,你是否还使用了其他对角色、事件的地图行走图进行修改的脚本?
回复

使用道具 举报

梦石
0
星屑
330
在线时间
57 小时
注册时间
2018-8-3
回帖
4
 楼主| 发表于 2019-7-14 21:58:20 | 显示全部楼层
本帖最后由 兔翔 于 2019-7-14 22:04 编辑
百里_飞柳 发表于 2019-7-14 17:52
看起来不像是这个脚本的问题啊?
你确定在去掉这个脚本后,再调用角色心情气泡时就没有问题了吗?(事件指 ...


我测了一下...暂时没有发现问题。
其他脚本的问题我也不是很清楚。我试试把工程发出来吧?(在楼下了)
先行谢过!!
回复

使用道具 举报

梦石
0
星屑
330
在线时间
57 小时
注册时间
2018-8-3
回帖
4
 楼主| 发表于 2019-7-14 22:02:15 | 显示全部楼层
链接:https://pan.baidu.com/s/1MYpSiXa2_j_qe0uu4GySHg
提取码:bzfq
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部