查看: 4691|回复: 4

[已经解决] 关于视野范围

[复制链接]
梦石
0
星屑
50
在线时间
86 小时
注册时间
2013-7-17
回帖
47
发表于 2014-7-30 19:33:50 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 月初雪姬 于 2014-7-31 19:15 编辑

我语死早。。表在意。。
就是在规定范围内。。。诶。。。靠近怪物的话。它就会追过来。。要是离远了。就依旧在那里走来走去怎么做?

点评

那啥。。。。你还是不打算改标题吗?(改了以后XD君帮删这句  发表于 2014-7-31 18:30

评分

参与人数 1星屑 -20 收起 理由
taroxd -20 标题

查看全部评分

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-30 19:39:07 | 显示全部楼层
语死早也请写一个合适的标题,参考本区所有其他帖子

下面的脚本嘛~ 看得懂日语就用吧~

[pre lang="ruby" line="1"]=begin
      ★シンボルエンカウント補助★

      イベントでのシンボルエンカウントの動作を補助します。

      ● 仕様 ●==========================================================
      指定したキャラクターは、基本ランダム移動を行い、
      プレイヤーが一定距離内に近づくと、プレイヤーを追跡、
      またプレイヤーレベルによっては逃走をするようになります。
      ====================================================================
      
      ● 使い方 ●========================================================
      イベント>自律移動>カスタム>移動ルート>スクリプトに
          @symbol_encount = [true, n]
      と記述してください。nはシンボルが逃げるプレイヤーのレベルです。
      シンボルを逃がしたくない場合は、nにnilを入れてください。
      --------------------------------------------------------------------
      イベント>自立移動の速度を1/4倍速、頻度を最高にするといい感じの
      動作をするかもしれません。
      ====================================================================
      
      ● 注意 ●==========================================================
      ニューゲームから始めないとエラーを吐きます。
      ====================================================================
      
      ver1.32

      Last Update : 2011/12/14
      12/14 : ソースコードの見直し
      ----------------------2011--------------------------
      03/05 : イベントページ切り替えごとにシンボルエンカウント判定をリセットするようにした
            : シンボルイベントの一時削除が正常に機能しなくなる不具合修正
      02/27 : クラスをGame_CharacterからGame_Eventに変更
            : 一度見つかったら反応するプレイヤーとの距離が増加するようになりました
            : 見つかった際にフキダシアイコンとSEを再生する機能の追加
            : ダッシュボタンを押していても移動していなければ反応距離が増加しないようになりました
      ----------------------2010--------------------------
      08/08 : プレイヤーレベルによって、シンボルが逃げる機能を追加
            : 追跡の挙動を少し変更
      05/17 : プレイヤーがダッシュしていると発見されやすくなる機能を追加
      05/06 : 新規
      ----------------------2009--------------------------
      
      ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end

#===========================================
#   設定箇所
#===========================================
module Rokan
module Symbol_Encount
    # シンボルが反応するプレイヤーとの距離(プレイヤー徒歩時)
    DISTANCE_SYMBOL = 3
    # シンボルが反応するプレイヤーとの距離(プレイヤーダッシュ時)
    DISTANCE_SYMBOL_DASH = 5
    # 反応後上昇する移動速度値(変化させたくない場合は 0 にしてください)
    SPEED_SYMBOL = 2
   
    # プレイヤーレベルの判定タイプ
    # 0 => メンバーの平均レベル
    # 1 => メンバーの最大レベル
    # 2 => 主人公(先頭キャラ)のレベル
    ESCAPE_SYMBOL_TYPE = 0
   
    # シンボル反応時にフキダシアイコンエフェクトをかけるかどうか
    SE_EFFECT = true
end
end
#===========================================
#   ここまで
#===========================================

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

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● インクルード Rokan::Symbol_Encount
  #--------------------------------------------------------------------------
  include Rokan::Symbol_Encount
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias symbol_encount_initialize initialize
  def initialize(map_id, event)
    symbol_encount_initialize(map_id, event)
    ini_symbol_encount
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウント関連初期化
  #--------------------------------------------------------------------------
  def ini_symbol_encount
    @forming = false # 追跡中判定
    @symbol_encount = [false, false]
  end
  #--------------------------------------------------------------------------
  # ● イベントページのセットアップ
  #--------------------------------------------------------------------------
  alias symbol_encount_setup setup
  def setup(new_page)
    ini_symbol_encount
    symbol_encount_setup(new_page)
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーレベルの取得
  #--------------------------------------------------------------------------
  def get_player_level
    n = 0
    case ESCAPE_SYMBOL_TYPE
    when 0
      $game_party.members.each{|i| n += i.level}
      n /= $game_party.members.size
    when 1
      a = []
      $game_party.members.each{|i| a << i.level}
      n = a.max
    when 2
      n = $game_party.members[0].level
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーからの距離を取得
  #--------------------------------------------------------------------------
  def distance_from_player
    return distance_x_from_player.abs + distance_y_from_player.abs
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーが指定距離内にいるか
  #--------------------------------------------------------------------------
  def distance_symbol
    if @forming
      d = DISTANCE_SYMBOL_DASH.next
    else
      d = $game_player.dash? && $game_player.moving? ? DISTANCE_SYMBOL_DASH : DISTANCE_SYMBOL
    end
    return distance_from_player <= d
  end
  #--------------------------------------------------------------------------
  # ● シンボルエンカウントを動作させるか
  #--------------------------------------------------------------------------
  def active_symbol_encount?
    # イベント中・一時削除中は動作しない
    if $game_map.interpreter.running?
      return false
    elsif @erased
      @forming = false
      return false
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーに反応しているか
  #--------------------------------------------------------------------------
  def symbol_encount_forming?
    return false unless active_symbol_encount?
    result = distance_symbol
    unless @forming
      if SE_EFFECT && result
        RPG::SE.new("Decision1", 50, 150).play unless $rsi["フキダシSE"]
        @balloon_id = 1
      end
    end
    @forming = result
    return result
  end
  #--------------------------------------------------------------------------
  # ● 追うか逃げるか
  #--------------------------------------------------------------------------
  def toward_or_away?
    if @symbol_encount[1] && get_player_level > @symbol_encount[1]
      move_away_from_player
    else
      move_toward_player
    end
  end
  #--------------------------------------------------------------------------
  # ● 自律移動の更新   ※再定義
  #--------------------------------------------------------------------------
  def update_self_movement
    if @stop_count > 30 * (5 - @move_frequency)
      if @symbol_encount[0]
        symbol_encount_forming? ? toward_or_away? : move_type_random  
      else
        case @move_type
        when 1; move_type_random
        when 2; move_type_toward_player
        when 3; move_type_custom
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 移動時の更新   ※再定義
  #--------------------------------------------------------------------------
  def update_move
    distance = @symbol_encount[0] && distance_symbol ?
    2 ** (@move_speed + SPEED_SYMBOL) : 2 ** @move_speed
    distance *= 2 if dash?        # ダッシュ状態ならさらに倍
    @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
    @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
    @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
    @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
    update_bush_depth unless moving?
    if @walk_anime
      @anime_count += 1.5
    elsif @step_anime
      @anime_count += 1
    end
  end
end[/pre]

点评

懒得翻译= = 不过挺符合你的要求的。求楼下大神翻译吧。顺便标题快点改了  发表于 2014-7-30 20:00
请问这脚本怎么用呢。。  发表于 2014-7-30 19:51
日语..................  发表于 2014-7-30 19:44

评分

参与人数 1星屑 +1 收起 理由
鑫晴 + 1 差评

查看全部评分

回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-7-30 20:03:41 | 显示全部楼层
http://www.atelier-rgss.com/RGSS/System/ACE_SYS03.html

这个脚本可以实现你要求的功能,下载后在下载的范例中找到后直接插入你的游戏即可,不会设置的话也可以查看范例

评分

参与人数 4星屑 +107 收起 理由
taroxd + 100 我很赞同
落月小天魔 + 1 这不是葡文么。。我机翻得时候明明检测到葡.
david_ng223 + 5 塞糖
鑫晴 + 1 一个日文一个英文。。

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
回帖
110
发表于 2014-7-31 12:57:11 | 显示全部楼层
3L网址打不开,不知道一不一样....
  1. #==============================================================================
  2. # +++ MOG - Event Sensor Range (v1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com
  6. #==============================================================================
  7. # Permite que o evento tenha dois comportamentos, de curta distância e de
  8. # longa distância.
  9. #===============================================================================
  10. #
  11. #在事件名里添加<SensorX>(X = 视野范围)
  12. #例子: EV001<Sensor2>
  13. #
  14. #===============================================================================
  15. module MOG_EVENT_SENSOR
  16.   #进入视野以后开启的独立开关
  17.   SENSOR_SELF_SWITCH = "D"
  18. end

  19. #===============================================================================
  20. # ■ GAME EVENT
  21. #===============================================================================
  22. class Game_Event < Game_Character
  23.   
  24.   attr_reader   :sensor_range
  25.   
  26.   #--------------------------------------------------------------------------
  27.   # ● Initialize
  28.   #--------------------------------------------------------------------------            
  29.   alias mog_event_sensor_initialize initialize
  30.   def initialize(map_id, event)
  31.       mog_event_sensor_initialize(map_id, event)
  32.       setup_event_sensor
  33.   end
  34.   
  35.   #--------------------------------------------------------------------------
  36.   # ● Setup Event Sensor
  37.   #--------------------------------------------------------------------------         
  38.   def setup_event_sensor
  39.       @sensor_range =  @event.name =~ /<Sensor(\d+)>/ ? $1.to_i : 0
  40.   end  
  41.   
  42.   #--------------------------------------------------------------------------
  43.   # ● Update
  44.   #--------------------------------------------------------------------------            
  45.   alias mog_event_sensor_update update
  46.   def update
  47.       mog_event_sensor_update
  48.       update_event_sensor
  49.   end  
  50.   
  51.   #--------------------------------------------------------------------------
  52.   # ● Update Sensor
  53.   #--------------------------------------------------------------------------        
  54.   def update_event_sensor
  55.       return if @sensor_range == 0
  56.       distance = ($game_player.x - self.x).abs + ($game_player.y - self.y).abs
  57.       enable   = (distance <= @sensor_range)
  58.       key = [$game_map.map_id, self.id, MOG_EVENT_SENSOR::SENSOR_SELF_SWITCH]
  59.       last_enable = $game_self_switches[key]
  60.       execute_sensor_effect(enable,key) if enable != last_enable
  61.     end

  62.   #--------------------------------------------------------------------------
  63.   # ● Execute_Sensor Effect
  64.   #--------------------------------------------------------------------------            
  65.   def execute_sensor_effect(enable,key)      
  66.       @pattern = 0
  67.       @pattern_count = 0               
  68.       $game_self_switches[key] = enable
  69.       self.refresh
  70.   end
  71.    
  72. end
复制代码

点评

yes  发表于 2014-7-31 18:26
这样就好了?  发表于 2014-7-31 16:47
在事件名里添加<SensorX>(X = 视野范围) 例子: EV001<Sensor2>  发表于 2014-7-31 16:37
怎么用呢?  发表于 2014-7-31 16:30
好吧。。。解决了  发表于 2014-7-31 15:30

评分

参与人数 1星屑 +100 收起 理由
taroxd + 100 我很赞同

查看全部评分

回复

使用道具 举报

梦石
0
星屑
124
在线时间
900 小时
注册时间
2012-11-13
回帖
845
发表于 2014-7-31 18:28:40 | 显示全部楼层

评分

参与人数 1星屑 +100 收起 理由
taroxd + 100 我很赞同

查看全部评分

废弃
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部