赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 1165 |
最后登录 | 2015-11-23 |
在线时间 | 6 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 6 小时
- 注册时间
- 2015-1-26
- 帖子
- 6
|
2楼
楼主 |
发表于 2015-1-28 12:57:02
|
只看该作者
- =begin
- シンボルエンカウント for VX Ace Ver1.31
- シンボルエンカウントを使用する場合のRGSSです。
- 以下のリストを素材のところに挿入してください。
- 変更・追加しているのは以下のクラスです。
- RGSS上で影響がある場合は確認して下さい。
- 再定義箇所
- Game_Player def start_map_event
- 使用クラス
- Game_Map
- Game_Party
- Game_Player
- Game_Event
- Game_Character
- Game_CharacterBase
- Game_Follower
- ●使い方
- ★1:
- RGSSリストを挿入します。リスト先頭のパラメータは任意で設定して下さい。
- ★2:
- 敵のイベントを設定します。
- まず、MAP上にイベントを作成します。
- イベントの名前欄に半角で以下にある文字列を入力します。
- 文字列は離さないでくっつけて記入します。意味は以下の通りです。
- ENEMY :これが記入されていると敵イベントと判別。
- [ENEMY]の後ろに警戒範囲の半径XY(マス)。1以上を設定。
- @ :敵の警戒フラグ。これがある場合、向きに関係なく警戒範囲に入った
- 段階でプレイヤーに向かってくる(セルフスイッチAがONになる)。
- 無い場合、プレイヤーが背後から近づいても警戒しない。
- ! :敵探査範囲フラグ。これがあると探査範囲がひし形になる。
- ない場合は正方形に探索する。
- # :これがある場合、フキダシが出なくなる(警戒しない敵または常時追跡用)。
- & :エネミーに発見された時の追跡時間。[&]の後ろに数値(1~**** フレーム)。
- 無い場合や0未満は[0]となり、初期値200(ENEMY_FORMING_TIMER)が登録。
- % :通行禁止リージョンID群の配列NOを指す。[%]の後ろに配列NOを登録。
- 記入なしや数値なしの場合は「0」番になる。
- _ :プレイヤーとの能力差が有る場合に反応するモードを指す。
- [_]の後ろに英小文字(a~c)・後にイベントと同じ敵グループNO(1~**)を登録。
- [_]が無い場合や、パラメータ無い場合はモード「a」敵グループ「1」番になる。
- なお、名前欄の敵グループ番号はモードaの場合は機能しない。
- モード解説
- a:デフォルト。今までと同じく能力差関係無しで追ってくる。
- b:能力差があると、敵シンボルが逃げ出す。
- c:能力差があると、敵シンボルは反応せずに通常の移動のままになる。
- ※記入例:
- ENEMY2&300
- ENEMY2!#&300
- ENEMY2&300@
- ENEMY2!@&300
- ENEMY2!@&300%1
- ENEMY2!@&300%1_b16
- ■PLAYERの警戒範囲(視認範囲)が変更できます。
- 設定 DISTANCE_TYPE によって視認範囲のモードを変更できます。
- 正方形(false) ひし形(true)
- ●●●●● ●
- ●●●●● ●●●
- ●●○●● ●●○●●
- ●●●●● ●●●
- ●●●●● ●
- ★3:
- イベントページを5つ作成します。各ページの設定は以下の通りです。
- 基本的には以下の通りにすると良いですが、そのほかイベントの組み合わせで
- 色々方法が変わりますので試してみて下さい。
- 敵のキャラクタはどのページでも同じ方向で設定してください(正面向きがベスト)。
- 同じにしないと、意図した動作にならない場合があります。
- ※P1:通常時の敵の行動
- キャラクタ :決めた敵シンボル
- 条件 :なし
- 自律移動 :タイプ-ランダム 速度-3 頻度-3 (それぞれ任意)
- オプション :移動時アニメのみON
- トリガー :プレイヤーから接触
- ▲隊列有る場合はイベントから接触でもOK
- イベント内容:なし
- ※P2:プレイヤーが警戒範囲に接近(視認範囲にいる)
- キャラクタ :決めた敵シンボル
- 条件 :セルフスイッチAがON
- 自律移動 :タイプ-近づく 速度-5 頻度-6 (それぞれ任意)
- ▲おとなしい敵の場合
- タイプ-ランダム 速度-3 頻度-3 (それぞれ任意)
- オプション :移動時アニメのみON
- トリガー :イベントから接触
- イベント内容:なし
- ※P3:戦闘状態
- キャラクタ :決めた敵シンボル
- 条件 :セルフスイッチBがON
- 自律移動 :任意 (固定)
- オプション:任意 (移動時アニメのみON)
- トリガー :自動実行
- イベント内容:バトルの処理(敵グループNOは任意)
- 勝った場合:セルフスイッチの操作:C=ON
- 逃げた場合:セルフスイッチの操作:D=ON
- ▲ 負けた場合:任意(基本はゲームオーバー)
- ※P4:勝利時の状態
- キャラクタ :決めた敵シンボル(または無し)
- 条件 :セルフスイッチCがON
- 自律移動 :(固定)
- オプション :(すり抜け)
- トリガー :決定ボタン(復活する予定のある場合)
- イベント内容:イベントの一時消去(復活しない場合)
- ▲または
- なし(復活する予定のある場合)
- ※基本的にどちらかになるようにして下さい。
- ※P5:逃走時の状態
- キャラクタ :決めた敵シンボル
- 条件 :セルフスイッチDがON
- 自律移動 :任意 (固定)
- オプション :任意 (すり抜け)
- トリガー :決定ボタン
- イベント内容:なし
- ※P4・P5にて、自律移動で動かす場合は「すり抜け」は設定しない方がいいです。
- 壁にめり込むなどのバグが発生しやすいようです。(VXAceでは未確認)
- ※復活のON/OFFは任意のスイッチで切替が出来ます。
- 詳しくはリストを参照して下さい。
- ●先制攻撃・奇襲攻撃などを行いたい場合
- 戦闘突入時にツクール内ゲーム変数に先制・奇襲などを行うための数値が
- 代入されています(初期値はID:10番)。数値の意味は以下の通りです。
- 0:通常 ・正面から当たった場合
- 1:先制 ・敵の背後から接触した場合
- 2:奇襲 ・敵に背後から接触された場合
- 3:ランダム・それ以外の方向からお互い当たった場合
- (ex:PLAYERが↓で敵が→の場合等)
- ※隊列移動をONにしている場合、先頭キャラ以外に敵が接触した時は
- すべて奇襲「2」扱いとなります。
- ※このRGSSには戦闘開始時の先制攻撃などのシステムは付けていません。
- (システムによってまちまちなので対応し切れません)
- 別途改造などして準備して下さい。
- 無くても、戦闘自体は問題なく動きます。
- ●イベントの一時停止
- ツクール内ゲーム変数($game_variables)に以下の数値を
- 代入することで各種機能が働きます。
- ウインドウ表示中に敵シンボルを止めたいときなどに使用できます。
- 使用の際は「EVENT_CHARACTER_STOP」で指定してある変数ID(初期11)に以下の数値を
- 任意に代入してください(イベントコマンドにて入力)。
- 0:イベントすべて稼動
- 1:敵シンボルのみ停止
- 2:動くイベントすべて停止(固定・強制イベントは稼動)
- ●リージョンIDによる、敵イベントの進入禁止エリア設定
- リージョンIDを登録することで、進入してほしくないゾーンの設定ができます。
- ENEMY_REGION_SET に進入禁止にしたいリージョンIDを登録します。その後
- [%]の後にその登録配列NOを記入することでその機能が働きます。
- ※イベント接触範囲拡張使用の場合、仕様上、拡張した部分はリージョンに
- 入ってしまうので注意。
- ●能力差による、敵イベントシンボルの反応変化
- 名前欄に追加で記入することで、プレイヤーパーティの能力差に応じて、
- 敵が逃げ出したり、反応しなくなったりします。
- ※機能解説------------------------
- a:デフォルト。今までと同じく能力差関係無しで追ってくる。
- (記入無しの場合のデフォルトモードになります)
- b:能力差があると、敵シンボルが逃げ出す。
- c:能力差があると、敵シンボルは反応せずに通常の移動のままになる。
- ※モード[a]の敵イベントの場合は、特に記入する必要はありません。
- 比較データ算出方法--------------------------------------------------------
- 攻撃(ATK)防御(DEF)魔法(MAT)魔防(MDF)速度(AGI)運(LUK)
- 以上の各数値でパーティメンバー、敵グループ双方の中での平均値を出す。
- さらに算出されたそれらの値を全て足したものがそれぞれの合計値となる。
- その後、パーティ値 >= 敵グループ値 * 2.0(GAP_MAGNIFICATION_NO)で検出している
- --
- ●機能説明
- イベントコマンドにて以下のスクリプトを入力することが出来ます。
- 必要に応じて使用して下さい。
- ■$game_map.enemy_all_recover
- MAP上にて倒した敵シンボルが全て復活します。
- MAP切替時の設定は無視され、強制的に復活します。
- ただし「イベント一時消去」をしていると復活しません。
- (厳密にはMAP内のセルフスイッチCがON状態の敵シンボルのみ復活)
- 罠とかに使えるかも知れません。
- ■$game_party.all_see? (通常は内部使用のため使わなくても良い)
- 指定ステートがメンバー内の誰かにある場合、敵が完全に見える。
- これはその状態を確認する。trueで真、falseで偽。
- 条件分岐 : $game_party.all_see? とするなどして使用。
- ■$game_party.no_caution? (通常は内部使用のため使わなくても良い)
- 指定ステートがメンバー内の誰かにある場合、敵が警戒しなくなる。
- これはその状態を確認する。trueで真、falseで偽。
- 条件分岐 : $game_party.no_caution? とするなどして使用。
- ■$game_party.no_encount?(通常は内部使用のため使わなくても良い)
- 指定ステートがメンバー内の誰かにある場合、敵と戦闘しなくなる。
- これはその状態を確認する。trueで真、falseで偽。
- 条件分岐 : $game_party.no_encount? とするなどして使用。
- ●その他
- ※ツクール内ゲームスイッチ・変数には強制的にフラグや数値が代入されます。
- 任意のIDの数値を変更したくない場合は、他のIDを設定してください
- (使用される初期 スイッチID:10・11 )
- (使用される初期 変数ID:10・11 )
- ※「イベント接触範囲拡張 VX Ace 1.02」に対応しています。
- 名前欄にて以下のように設定すると使えます。
- 必要に応じて活用して下さい(巨大な敵シンボルとか??)
- EVENT_WIDE,1,2,2,ENEMY2@&300
- ★上記の通り、必ず順番の最後に入力して下さい。
- RGSS組み込みのときは シンボルエンカウント → イベント接触範囲拡張
- の順に組み込んでください。
- 併用の際は、以下の「EVENT_WIDE_COMBINE」を[true]にしてください(必須)
- ● ●●●●●
- ● ●●●●●
- ●●◎●● ●●◎●●
- ● ●●●●●
- ● ●●●●●
- ※例:こんな敵シンボルとかも可能
- 履歴
- Ver1.00 公開。
- Ver1.01 イベントの一時停止機能追加。
- Ver1.20 リージョンIDによる進入禁止設定機能追加。
- Ver1.30 ステータスの差によって、敵イベントが逃げるようになる機能追加。
- Ver1.31 シンボル復活の処理方法変更
- =end
- #==============================================================================
- #各種設定項目
- #==============================================================================
- # 定数
- #==============================================================================
- module F_Setting
- FOLLOWER_ENCOUNT_FG = true #隊列がある場合、隊列接触でイベント発生させるか
- #※後列に接触した場合はすべて奇襲となる
- EVENT_WIDE_COMBINE = false#true #イベント接触範囲拡張併用時は必ずtrue
- #(※エラー対策)
- end
- #==============================================================================
- # ■ Game_Party
- #==============================================================================
- class Game_Party < Game_Unit
- #以下の機能を使用する場合、それぞれステートID設定(使用不可は0)
- ALL_SEE = 0 #遠見状態ステートID
- NO_CAUTION = 51 #敵警戒しないステートID
- NO_ENCOUNT = 0 #敵戦闘しないステートID
- NO_ALL_BATTLE = 0 #上記機能3つ全部ある場合のステートID
- ALL_SEE_NO_CAUTION = 0 #遠見&敵警戒しないステートID
- NO_CAUTION_BATTLE = 0 #敵警戒しない&戦闘無しステートID
- end
- #==============================================================================
- # ■ Game_Character
- #==============================================================================
- #$game_variables(ツクール内ゲーム変数)の結果格納ID
- class Game_Character < Game_CharacterBase
- EVENT_CHARACTER_STOP = 9 #ウインドウ表示時などに敵シンボルを一時停止させる
- #0:イベントすべて稼動(機能OFF)
- #1:敵シンボルのみ停止
- #2:動くイベントすべて停止(固定・強制イベントは稼動)
- end
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #それぞれ以下の初期設定をして下さい。
- EVENT_ENEMY_NAME = "ENEMY" #イベントにこの名前があると敵シンボル。
- EVENT_ENEMY_NAME_S = /ENEMY(\d+)/ #範囲取得用。
- ENEMY_FORMING_SWITCH = "&" #敵タイマーフラグ
- ENEMY_FORMING_SWITCH_S = /&(\d+)/ #数値取得用。
- EVENT_ENEMY_CAUTION = "@" #敵の警戒フラグ。
- EVENT_ENEMY_WATCH = "!" #敵探査範囲フラグ。
- EVENT_ENEMY_BALLOON_OFF = "#" #フキダシのON/OFF(つけるとOFF)
- EVENT_ENEMY_REGION_SET = "%" #移動不可リージョンIDを登録したセットNO
- EVENT_ENEMY_REGION_SET_S = /%(\d+)/ #数値取得用。
- ENEMY_CHANGE_ACTION_GAP = "_" #敵イベント反応モード
- ENEMY_CHANGE_ACTION_GAP_S = /_([abc])(\d+)/ #英小文字1字・数値取得用。
- #上記の文字データは変更可能。上記文字の変更時、他のスクリプトで使用する
- #名前や文字・正規表現記号等にかぶらないように注意してください
- #(※正規表現が分からない方は、変えないほうが無難)
- end
- #==============================================================================
- # ■ Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- #リージョンID登録データベース ---------------------------------------------
- #敵イベント通行禁止にするリージョンIDを配列内に登録する(1~63の間で複数登録可)
- #EVENT_ENEMY_REGION_SETをセットの際に、配列のNOを記入すると、
- #配列登録されているリージョンの場所は敵イベントが進入しない。
- #記入なしや数値なしの場合は自動的にNO「0」番になる。
- #
- #※イベント接触範囲拡張使用の場合、仕様上、拡張した部分はリージョンに
- #入ってしまうので注意。
- ENEMY_REGION_SET = [], # 0(ここは変更しないでください)
- [1,2,3], # 1
- [4,7,13], # 2
- [1,2], #<<<< これをコピペで追加分を登録する
- [5,9,45] # (ここは一番最後に)
- end
- #----------------------------------------------------------------------------
- class Game_Map
- ENCOUNT_DISTANCE1 = 656 #32 * 5 敵との距離1(これより大きいと透明になる距離)
- ENCOUNT_DISTANCE2 = 656 #32 * 3 敵との距離2(これより大きいと半透明になる距離)
- #距離はMAPパーツの基本の大きさである32を基準に考えると良い (ex: 32 * ?)
- #※ひし形の場合は決めた範囲に+16した方が良いようだ
- CHANGE_OPACITY = 80 #敵との距離で使用する半透明時の透明度
- DISTANCE_TYPE = false # PLAYER視認範囲計測方法
- #(false = 正方形 true = ひし形)
- DISTANCE_ERASE_MODE = true #点滅状態時に距離を離すとシンボルが消える 初期ON
- ENEMY_DEATH_COUNT = 350 #戦闘勝利後シンボルが復活するまでの時間(フレーム)
- ENEMY_ESCAPE_COUNT = 140 #敵から逃走・シンボル復活時の点滅時間(フレーム)
- ENEMY_FIRST_COUNT = 30 #MAP切替時の敵シンボル点滅時間(フレーム)
- ENEMY_ESCAPE_OPACITY = 60 #逃走・MAP切替時の半透明状態の透明度
- ENEMY_FORMING_TIMER = 200 #発見された後エネミーに追跡される基本時間(フレーム)
- #※数値が未入力または0以下の場合、この値が適用される
- ENEMY_FIND_ICON = 1 #発見時のフキダシアイコンID
- ENEMY_LOST_ICON = 7 #見失った時のフキダシアイコンID
- ENEMY_ESCAPE_ICON = 6 #逃げ切ったときのフキダシアイコンID
- ENEMY_BALLOON_TIMER = 44 #フキダシ表示時間
- ENEMY_BALLOON_SE = 'Audio/SE/Decision1' #発見時のフキダシSE
- ENEMY_BALLOON_VOLUME = 45 #発見時のフキダシSE 音量
- ENEMY_BALLOON_PITCH = 150 #発見時のフキダシSE ピッチ
- CHANGE_ACTION_GAP_TABLE = {"a" => 0, "b" => 1, "c" => 2 } #モード用テーブル
- GAP_MAGNIFICATION_NO = 1.0 #敵シンボルが逃げ出す、比較用倍率
- #プレイヤー側が2.0倍以上の大差をつけた場合
- #(強い場合)に、シンボルが逃げるモードになる
- #----------------------------------------------------------------------------
- #$game_switches(ツクール内ゲームスイッチ)の結果格納ID
- ENEMY_REFRESH_NO = 1 #MAP切替時に敵が全て復活する 初期OFF
- ENEMY_REVIVE_NO = 2 #倒した敵シンボルが一定時間後に復活する 初期OFF
- #$game_variables(ツクール内ゲーム変数)の結果格納ID
- ENEMY_FIRST_TURN_NO = 1 #敵戦闘開始時の向き
- # 0:通常 1:先制 2:奇襲
- # 3:ランダム(ex:PLAYERが↓で敵が→の場合等)
- #----------------------------------------------------------------------------
- # 敵グループ毎の逃走レベル閾値 2013.01.22
- ESCAPE_LEVEL_LUT = [
- 1, # グループ 0 *dummy
- # 0 1 2 3 4 5 6 7 8 9
- 4, 4, 4, 4, 4,99,12,12,12, # 0x
- 12,12,18,18,18,99,99,18,99,18, # 1x
- 22,22,22,99,26,26,26,26,26,38, # 2x
- 38,38,38,99,99,99,99,99,99,99, # 3x
- 27,27,27,30,32,32,32,32,35,35, # 4x
- 35, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 5x
- 1, 1, 1, 1, 1, 1, 1, 1, 1 # 6x-68
- ]
- #----------------------------------------------------------------------------
- attr_accessor :enemy_events #エンカウントする敵イベントID
- attr_accessor :enemy_forming_flg #追跡ONフラグ(時間が-1でフラグOFF)
- attr_reader :enemy_forming_maxtimer #追跡の最大時間
- attr_accessor :follower_encount_fg #後列メンバーエンカウントフラグ
- attr_reader :enemy_notenter_region #進入禁止リージョンID配列NO
- attr_reader :change_action_gap_fg #敵イベント反応モード フラグ
- #--------------------------------------------------------------------------
- # ■ セットアップ
- # map_id : マップ ID
- #--------------------------------------------------------------------------
- alias wiki2_setup setup
- def setup(map_id)
- # 130219追加:dowsing で切ると間に合わない
- $game_switches[WhiteSnow::WEATHER_BGS_DISABLE] = false
-
- #MAP切替時に敵イベント初期化?(スイッチで切替)
- if $game_switches[ENEMY_REFRESH_NO]
- all_enemy_refresh
- end
- # 呼び戻す
- wiki2_setup(map_id)
- #エンカウントデータ初期化
- @enemy_events = [] #敵イベント
- @enemy_range = [] #警戒距離
- @enemy_distance_type = [] #警戒範囲のタイプ
- @enemy_caution = [] #警戒心強い?
- @enemy_wait = [] #点滅時のウエイト
- @enemy_forming_maxtimer = [] #追跡の最大時間
- @enemy_forming_flg = [] #追跡ONフラグ(時間が-1になるとフラグOFF)
- @flach_fg = -1 #点滅用フラグ
- @anime_wait_fg = [] #フキダシアイコン表示(ウエイト)
- @anime_balloon_end_fg = [] #追跡終了フラグ用
- @enemy_balloon_off = [] #フキダシOFF
- @enemy_notenter_region = [] #進入禁止リージョンID配列NO
- @follower_encount_fg = false #後列メンバーエンカウントした時
- @change_action_gap_fg = [] #敵イベント反応モード フラグ
- #エンカウントデータ取得
- for i in @map.events.values
- if i.name.include?(EVENT_ENEMY_NAME)
- @enemy_events.push(i.id)
- end
- end
- for i in 0...@enemy_events.size
- tmp = ""
- tmp2 = ""
- data = []
- #EVENT_ENEMY_NAME のある文字列を選別
- data = @events[@enemy_events[i]].name.split(/,/)
- data.each_index do |j|
- if data[j].include?(EVENT_ENEMY_NAME)
- tmp = data[j].dup
- break
- end
- end
- EVENT_ENEMY_NAME_S =~ tmp
- tmp2 = [ DISCUZ_CODE_0 ]
- if tmp2 != nil
- tmp.slice!(tmp2)
- tmp2.slice!(EVENT_ENEMY_NAME)
- end
- range = [tmp2.to_i, 1].max
- #リージョンID
- EVENT_ENEMY_REGION_SET_S =~ tmp
- tmp2 = [ DISCUZ_CODE_0 ]
- if tmp2 != nil
- tmp.slice!(tmp2)
- tmp2.slice!(EVENT_ENEMY_REGION_SET)
- end
- @enemy_notenter_region[i] = (tmp2.to_i > 0)? tmp2.to_i : 0
- #追跡最大時間取得・フラグ初期化
- ENEMY_FORMING_SWITCH_S =~ tmp
- tmp2 = [ DISCUZ_CODE_0 ]
- if tmp2 != nil
- tmp.slice!(tmp2)
- tmp2.slice!(ENEMY_FORMING_SWITCH)
- end
- @enemy_forming_maxtimer[i] = (tmp2.to_i > 0)? tmp2.to_i : ENEMY_FORMING_TIMER
- forming_timer_reset(i)
- @anime_wait_fg[i] = 0
- @anime_balloon_end_fg[i] = false
- @enemy_balloon_off[i] = false
- #敵イベント反応モード
- if $game_variables[WhiteSnow::TIME_ZONE_STORE_VID] == 4..5 # 夜は敵が逃走しない
- @change_action_gap_fg[i] = 0
- else
- ENEMY_CHANGE_ACTION_GAP_S =~ tmp
- tmp1 = nil
- c = 0
- tmp2 = [ DISCUZ_CODE_0 ]
- if tmp2 != nil
- tmp.slice!(tmp2)
- tmp1 = $1
- tmp2 = $2
- tmp2.slice!(tmp1)
- tmp2.slice!(ENEMY_CHANGE_ACTION_GAP)
- end
- #テーブル設定-----------------------------
- if tmp1 != nil
- tmp1.strip
- c = CHANGE_ACTION_GAP_TABLE[tmp1]
- trp_no = (tmp2.to_i >= 1)? tmp2.to_i : 1
- if c > 0
- # c = 0 unless enemy_average_compare_check(trp_no)
- c = 0 unless miriel_level_check(trp_no) # ミーリエルのレベルで逃走するように変更(2013.01.22)
- end
- end
- #プレイヤーと能力比較した場合の 発見時の移動モード
- # 0:追跡 1:逃げる 2:動きそのまま
- @change_action_gap_fg[i] = c
- end
- #警戒反応モード
- @enemy_caution[i] = (tmp.include?(EVENT_ENEMY_CAUTION))
- #tmp.slice!(EVENT_ENEMY_CAUTION)
- #警戒範囲のタイプ
- @enemy_distance_type[i] = (tmp.include?(EVENT_ENEMY_WATCH))
- #tmp.slice!(EVENT_ENEMY_WATCH)
- #フキダシのOFF
- @enemy_balloon_off[i] = (tmp.include?(EVENT_ENEMY_BALLOON_OFF))
- #tmp.slice!(EVENT_ENEMY_BALLOON_OFF)
- #警戒距離
- range *= 32
- #ひし形の場合16pix余分に足す
- range += 16 if @enemy_distance_type[i]
- @enemy_range.push(range)
- end
- #~ #MAP切替時に敵イベント初期化?(スイッチで切替)
- #~ if $game_switches[ENEMY_REFRESH_NO]
- #~ all_enemy_refresh
- #~ end
- #出現用 点滅カウント設定
- for i in 0...@enemy_events.size
- key3 = [@map_id,@enemy_events[i],"C"] #戦闘勝利
- #ENEMY死んでいない場合
- if !$game_self_switches[key3]
- enemy_refresh(@enemy_events[i],true)
- @enemy_wait[i] = ENEMY_FIRST_COUNT
- enemy_switch(@enemy_events[i],"D",true)
- #ENEMY死んでいて、時間復活ある場合
- elsif $game_self_switches[key3] && $game_switches[ENEMY_REVIVE_NO]
- @enemy_wait[i] = ENEMY_DEATH_COUNT
- end
- end
-
- dowsing #
- end
- #--------------------------------------------------------------------------
- # ■ 敵復活の操作
- #--------------------------------------------------------------------------
- def enemy_all_recover
- #点滅カウント設定
- for i in 0...@enemy_events.size
- # @enemy_wait[i] = 0
- key1 = [@map_id,@enemy_events[i],"A"] #
- key2 = [@map_id,@enemy_events[i],"B"] #戦闘
- key3 = [@map_id,@enemy_events[i],"C"] #戦闘勝利
- key4 = [@map_id,@enemy_events[i],"D"] #逃走
- if $game_self_switches[key3]# or $game_self_switches[key4]
- unless (!$game_self_switches[key1] or $game_self_switches[key1]) &&
- !$game_self_switches[key2] && !$game_self_switches[key3] &&
- !$game_self_switches[key4]
- @enemy_wait[i] = ENEMY_FIRST_COUNT
- forming_timer_reset(i)
- updete_encount_set_sub(i,false)
- enemy_switch(@enemy_events[i],"D",true,true)
- end
- enemy_switch(@enemy_events[i],"B",false,true)
- enemy_switch(@enemy_events[i],"C",false,false)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ■ セルフスイッチの操作
- #--------------------------------------------------------------------------
- def enemy_switch(event_id,switch,value,mode = false)
- key = [@map_id,event_id,switch]
- $game_self_switches[key] = value
- if mode == false
- $game_map.need_refresh = true
- end
- end
- #--------------------------------------------------------------------------
- # ■ 一つの敵イベントの初期化
- #--------------------------------------------------------------------------
- def enemy_refresh(event_id,mode = false)
- enemy_switch(event_id,"A",false,true)
- enemy_switch(event_id,"B",false,true)
- enemy_switch(event_id,"C",false,true)
- enemy_switch(event_id,"D",false,mode)
- end
- #--------------------------------------------------------------------------
- # ■ 全ての敵イベントの初期化
- #--------------------------------------------------------------------------
- def all_enemy_refresh
- for i in 0...@enemy_events.size
- forming_timer_reset(i)
- enemy_refresh(@enemy_events[i],true)
- end
- $game_map.need_refresh = true
- end
- #--------------------------------------------------------------------------
- # ■ イベントとプレイヤーの距離
- # falseで絶対値を返す
- # mode: 0:通常(絶対値) 1:通常 2:ひし形(マンハッタン距離(絶対値))
- #--------------------------------------------------------------------------
- def event_distance(event_id,px,py,mode = 0)
- xy = []
- xy[0] = (@events[event_id].screen_x - px)
- xy[1] = (@events[event_id].screen_y - py)
- #0、2は絶対値に変換
- if mode == 0 or mode == 2
- xy[0] = xy[0].abs
- xy[1] = xy[1].abs
- end
- #ひし形(マンハッタン距離)
- xy[2] = xy[0] + xy[1] if mode == 2
- #配列で返す
- return xy
- end
- #--------------------------------------------------------------------------
- # ■ 敵イベントフレーム更新
- #--------------------------------------------------------------------------
- #イベントID,警戒距離,反応,探査範囲
- #def update_enemy_event_sub(event_id,range,mode,type,forming,xy,mode2 = false)
- def update_enemy_event(event_id,range,mode,type,forming)
- key1 = [@map_id,event_id,"A"] #警戒範囲
- key3 = [@map_id,event_id,"C"] #戦闘勝利
- key4 = [@map_id,event_id,"D"] #戦闘逃走
- xy = event_distance(event_id,$game_player.screen_x,$game_player.screen_y,2) #敵との距離
- #透明で初期化
- tmp_opacity = 0
- #勝利状態でない場合
- unless $game_self_switches[key3]
- #追跡状態?
- if encount_balloon_wait?(@enemy_events.index(event_id)) or $game_self_switches[key1]
- tmp_opacity = 255
- else
- #正方形範囲
- if !DISTANCE_TYPE
- #距離2(不透明>半透明)
- if xy[0] <= ENCOUNT_DISTANCE2 && xy[1] <= ENCOUNT_DISTANCE2 or $game_party.all_see?
- tmp_opacity = ($game_self_switches[key4]) ? ENEMY_ESCAPE_OPACITY : 255
- #距離1(半透明>透明)
- elsif xy[0] <= ENCOUNT_DISTANCE1 && xy[1] <= ENCOUNT_DISTANCE1
- tmp_opacity = ($game_self_switches[key4]) ? ENEMY_ESCAPE_OPACITY : CHANGE_OPACITY
- #点滅状態?(距離は透明時)
- elsif $game_self_switches[key4] && !DISTANCE_ERASE_MODE
- tmp_opacity = ENEMY_ESCAPE_OPACITY
- end
- #ひし形(マンハッタン距離)
- else
- #距離2(不透明 << 半透明)
- if xy[2] <= ENCOUNT_DISTANCE2 or $game_party.all_see?
- tmp_opacity = ($game_self_switches[key4]) ? ENEMY_ESCAPE_OPACITY : 255
- #距離1(半透明 << 透明)
- elsif xy[2] <= ENCOUNT_DISTANCE1
- tmp_opacity = ($game_self_switches[key4]) ? ENEMY_ESCAPE_OPACITY : CHANGE_OPACITY
- #点滅状態?(距離は透明時)
- elsif $game_self_switches[key4] && !DISTANCE_ERASE_MODE
- tmp_opacity = ENEMY_ESCAPE_OPACITY
- end
- end
- end
- end
- #透明度設定(点滅用)
- if $game_self_switches[key4] && @flach_fg < 2
- @events[event_id].opacity_setting(1)
- else
- @events[event_id].opacity_setting(tmp_opacity)
- end
- #警戒状態
- if !$game_map.interpreter.running? && !$game_player.move_route_forcing &&
- !$game_self_switches[key3] && !$game_self_switches[key4]
- if forming > -1
- enemy_switch(event_id,"A",true) if !$game_self_switches[key1]
- else
- #警戒範囲制御
- if (!type && xy[0] <= range && xy[1] <= range or type && xy[2] <= range) &&
- !$game_party.no_caution? && (enemy_caution_check(event_id) or mode)
- if !$game_self_switches[key1] && @change_action_gap_fg[@enemy_events.index(event_id)] != 2
- enemy_switch(event_id,"A",true)
- fine_balloon_start(@enemy_events.index(event_id))
- end
- else
- if $game_self_switches[key1]
- enemy_switch(event_id,"A",false)
- lost_balloon_start(@enemy_events.index(event_id)) if @anime_balloon_end_fg[@enemy_events.index(event_id)]
- end
- @anime_balloon_end_fg[@enemy_events.index(event_id)] = false
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ■ 敵警戒状態 範囲チェック
- #--------------------------------------------------------------------------
- def enemy_caution_check(event_id)
- xy = event_distance(event_id,$game_player.screen_x,$game_player.screen_y,1)
- x = xy[0]
- y = xy[1]
- case @events[event_id].direction
- when 2
- return (y <= 0)
- when 4
- return (x >= 0)
- when 6
- return (x <= 0)
- when 8
- return (y >= 0)
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ■ 敵戦闘開始時の向き(イベントコマンドで使用)
- # (ツクール内ゲーム変数 「ENEMY_FIRST_TURN_NO」にID.NO)に以下の返り値
- # 0:通常 1:先制 2:奇襲 3:ランダム(ex:PLAYERが↓で敵が→の場合等)
- #--------------------------------------------------------------------------
- #$game_map.turn_inbattle(@event_id) <<書式
- def turn_inbattle(event_id)
- t = 0
- #後列に接触?
- if !@follower_encount_fg
- #XY数値検出
- xy = event_distance(event_id,$game_player.screen_x,$game_player.screen_y,1)
- x = xy[0] #比較X
- y = xy[1] #比較Y
- t = 0 #向きのモード 0で初期化
- en = @events[event_id].direction #敵の向き
- pl = $game_player.direction #PLAYERの向き
- #上下
- if pl == 2 or pl == 8
- if en == 4 or en == 6
- t = 3
- elsif en == 2 && pl == 2
- t = 2 if y < 0
- t = 1 if y > 0
- elsif en == 8 && pl == 8
- t = 2 if y > 0
- t = 1 if y < 0
- end
- #左右
- elsif pl == 4 or pl == 6
- if en == 2 or en == 8
- t = 3
- elsif en == 4 && pl == 4
- t = 2 if x > 0
- t = 1 if x < 0
- elsif en == 6 && pl == 6
- t = 2 if x < 0
- t = 1 if x > 0
- end
- end
- else
- #後列に接触で自動的に奇襲
- t = 2
- end
- @follower_encount_fg = false
- $game_variables[ENEMY_FIRST_TURN_NO] = t
- end
- #--------------------------------------------------------------------------
- # ■ 追跡時間カウンター 操作
- #--------------------------------------------------------------------------
- def forming_timer_set(i,mode)
- if mode
- @enemy_forming_flg[i] = @enemy_forming_maxtimer[i]
- else
- if @enemy_forming_flg[i] < 0
- forming_timer_reset(i)
- else
- @enemy_forming_flg[i] -= 1 if !@events[@enemy_events[i]].message_wait? && !$game_map.interpreter.running?
- @anime_balloon_end_fg[i] = true if @enemy_forming_flg[i] < 0
- end
- end
- end
- #--------------------------------------------------------------------------
- def forming_timer_reset(i)
- @enemy_forming_flg[i] = -1
- end
- #--------------------------------------------------------------------------
- # ■ 追跡開始
- #--------------------------------------------------------------------------
- def fine_balloon_start(i)
- return if @events[@enemy_events[i]].balloon_id > 0
- if !@enemy_balloon_off[i]
- @events[@enemy_events[i]].balloon_id = ENEMY_FIND_ICON
- Audio.se_play(ENEMY_BALLOON_SE, ENEMY_BALLOON_VOLUME, ENEMY_BALLOON_PITCH)
- @anime_wait_fg[i] = ENEMY_BALLOON_TIMER
- end
- forming_timer_set(i,true)
- end
- #--------------------------------------------------------------------------
- # ■ 見失い開始
- #--------------------------------------------------------------------------
- def lost_balloon_start(i)
- return if @events[@enemy_events[i]].balloon_id > 0 or @enemy_balloon_off[i]
- if @change_action_gap_fg[i] == 1
- @events[@enemy_events[i]].balloon_id = ENEMY_ESCAPE_ICON
- else
- @events[@enemy_events[i]].balloon_id = ENEMY_LOST_ICON
- end
- @anime_wait_fg[i] = ENEMY_BALLOON_TIMER
- end
- #--------------------------------------------------------------------------
- # ■ 追跡状態?(フキダシ待ち関連)
- #--------------------------------------------------------------------------
- def encount_balloon_wait?(i)
- return (@events[@enemy_events[i]].balloon_id != 0 or @anime_wait_fg[i] > 0)
- end
- #--------------------------------------------------------------------------
- # ■ エンカウントシンボル 各種数値・フラグ解除
- #--------------------------------------------------------------------------
- def updete_encount_set_sub(i,mode = false)
- unless mode
- @events[@enemy_events[i]].direction_fix_change(false)
- @events[@enemy_events[i]].unlock
- @anime_wait_fg[i] = 0
- end
- forming_timer_reset(i)
- @anime_balloon_end_fg[i] = false
- @events[@enemy_events[i]].balloon_id = 0
- end
- #--------------------------------------------------------------------------
- # ■ エンカウントシンボル 更新
- #--------------------------------------------------------------------------
- def updete_encount_set(i)
- #イベント起動中?
- return if @events[@enemy_events[i]].starting
- key1 = [@map_id,@enemy_events[i],"A"] #警戒範囲
- key3 = [@map_id,@enemy_events[i],"C"] #戦闘勝利
- key4 = [@map_id,@enemy_events[i],"D"] #戦闘逃走
- #敵シンボルが復活する場合
- if $game_self_switches[key3] && $game_switches[ENEMY_REVIVE_NO]
- if @enemy_wait[i] > 0 && !@events[@enemy_events[i]].message_wait? && !$game_map.interpreter.running?
- @enemy_wait[i] -= 1
- if @enemy_wait[i] <= 0 #シンボル復帰処理
- enemy_switch(@enemy_events[i],"C",false)
- enemy_switch(@enemy_events[i],"D",true)
- updete_encount_set_sub(i)
- end
- elsif @enemy_wait[i] <= 0 #シンボル点滅時間、初期化
- @enemy_wait[i] = ENEMY_DEATH_COUNT
- end
- #逃げた時・シンボル復活・MAP切替時の点滅設定処理
- elsif $game_self_switches[key4]
- if @enemy_wait[i] > 0 && !@events[@enemy_events[i]].message_wait? && !$game_map.interpreter.running?
- @enemy_wait[i] -= 1
- if @enemy_wait[i] <= 0
- enemy_refresh(@enemy_events[i])
- @events[@enemy_events[i]].opacity_setting(ENEMY_ESCAPE_OPACITY)
- updete_encount_set_sub(i)
- end
- elsif @enemy_wait[i] <= 0
- @enemy_wait[i] = ENEMY_ESCAPE_COUNT
- end
- #追跡カウンターが0より上の場合
- elsif @anime_wait_fg[i] > 0
- @events[@enemy_events[i]].lock
- @anime_wait_fg[i] -= 1
- @events[@enemy_events[i]].unlock if @anime_wait_fg[i] <= 0
- #セルフスイッチAがONの場合
- elsif $game_self_switches[key1]
- @events[@enemy_events[i]].direction_fix_change(false)
- forming_timer_set(i,(@enemy_forming_flg[i] < 0))
- end
- end
- #--------------------------------------------------------------------------
- # ■ 敵シンボルとプレイヤーキャラの能力比較
- # パーティメンバーと敵グループの各能力の平均値合計を比較する
- #--------------------------------------------------------------------------
- def enemy_average_compare_check(i)
- #アクター側パーティ平均値取得
- a_comp = average_compare_set($game_party.battle_members)
- #敵グループ平均値取得
- $game_troop.setup(i)
- e_comp = average_compare_set($game_troop.members)
- #合計値の差を比較
- #プレイヤー側が [GAP_MAGNIFICATION_NO] 倍以上の大差をつけた場合(強い場合)に、
- #可となる
- return true if a_comp >= e_comp * GAP_MAGNIFICATION_NO
- return false
- end
- #--------------------------------------------------------------------------
- # ■ 平均値用データ取得
- #--------------------------------------------------------------------------
- #攻撃(ATK)防御(DEF)魔法(MAT)魔防(MDF)速度(AGI)運(LUK)
- #以上の各数値でパーティメンバー、又は敵グループの中での平均値を出す。
- #さらに算出されたそれらの値を全て足したものが合計値となる。
- def average_compare_set(battlers)
- atk = deff = mat = mdf = agi = luk = []
- for battler in battlers
- atk.push(battler.atk)
- deff.push(battler.def)
- mat.push(battler.mat)
- mdf.push(battler.mdf)
- agi.push(battler.agi)
- luk.push(battler.luk)
- end
- return pram_compare(atk) + pram_compare(deff) + pram_compare(mat) +
- pram_compare(mdf) + pram_compare(luk)
- end
- #--------------------------------------------------------------------------
- # ■ 平均値算出
- #--------------------------------------------------------------------------
- def pram_compare(numbers)
- c = 0
- numbers.each do |item|
- c += item
- end
- return c / numbers.size
- end
- #--------------------------------------------------------------------------
- # ★ イベントの更新
- #--------------------------------------------------------------------------
- alias wiki_update_events update_events
- def update_events
- #呼び戻す
- wiki_update_events
- #敵シンボル イベングループ
- @flach_fg = (@flach_fg < 2)? @flach_fg + 1 : 0
- for i in 0...@enemy_events.size
- update_enemy_event(@enemy_events[i],@enemy_range[i],@enemy_caution[i],
- @enemy_distance_type[i],@enemy_forming_flg[i])
- @events[@enemy_events[i]].check_event_trigger_here_encount([1,2]) if !@events[@enemy_events[i]].stopping?
- updete_encount_set(i)
- end
- end
-
- #--------------------------------------------------------------------------
- # 敵グループ逃走のレベル閾値チェック
- # 2013.01.22
- #--------------------------------------------------------------------------
- def miriel_level_check(group_id)
- # 範囲外の敵グループIDならfalse
- if group_id < 1 || group_id >= ESCAPE_LEVEL_LUT.size
- return false
- end
- if $game_actors[1].level >= ESCAPE_LEVEL_LUT[group_id]
- return true
- end
- return false
- end
- end
- #==============================================================================
- # ■ Game_Player
- #------------------------------------------------------------------------------
- # プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
- # 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
- #==============================================================================
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # ■再定義 マップイベントの起動
- # triggers : トリガーの配列
- # normal : プライオリティ[通常キャラと同じ]かそれ以外か
- #--------------------------------------------------------------------------
- def start_map_event(x, y, triggers, normal)
- flg = false
- if F_Setting::EVENT_WIDE_COMBINE
- #イベント接触範囲拡張
- $game_map.events_range_xy(x, y).each do |event|
- if event.trigger_in?(triggers) && !event.starting &&
- $game_map.enemy_events.include?(event.id) &&
- !$game_self_switches[[$game_map.map_id,event.id,"B"]]
- getn = $game_map.event_name_range_word_check(event.name)
- if (!getn[2] or getn[2] && event.normal_priority? == normal)
- event.encount_switch_set_sub
- event.start
- flg = true
- end
- end
- end
- return flg if flg
- end
- $game_map.events_xy(x, y).each do |event|
- flg = false
- if event.trigger_in?(triggers) && event.normal_priority? == normal
- if $game_map.enemy_events.include?(event.id)
- if !event.starting && event.encount_switch_set
- event.start
- flg = true
- end
- else
- event.start
- flg = true
- end
- end
- end
- return flg
- end
- #--------------------------------------------------------------------------
- # ● マップ通行可能判定
- # d : 方向(2,4,6,8)
- #--------------------------------------------------------------------------
- alias encount_map_passable? map_passable?
- def map_passable?(x, y, d)
- if F_Setting::EVENT_WIDE_COMBINE
- #flg = false
- $game_map.events_range_xy(x, y).each do |event|
- if event.trigger_in?([0,1,2]) && #!event.starting &&
- $game_map.enemy_events.include?(event.id) &&
- !$game_self_switches[[$game_map.map_id,event.id,"B"]]
- getn = $game_map.event_name_range_word_check(event.name)
- if (!getn[2] or getn[2] && event.normal_priority? == normal)
- return false
- end
- end
- end
- encount_map_passable?(x, y, d)
- else
- encount_map_passable?(x, y, d)
- end
- end
- #--------------------------------------------------------------------------
- # ● 同位置のイベント起動判定
- #--------------------------------------------------------------------------
- alias wiki_check_event_trigger_here check_event_trigger_here
- def check_event_trigger_here(triggers)
- #
- $game_map.follower_encount_fg = false
- wiki_check_event_trigger_here(triggers)
- #
- if F_Setting::FOLLOWER_ENCOUNT_FG
- $game_player.followers.visible_folloers.each do |follower|
- if start_map_event(follower.fx, follower.fy, [1,2], false)
- $game_map.follower_encount_fg = true
- end
- end
- end
- end
- end
- #==============================================================================
- # ■ Game_Follower
- #------------------------------------------------------------------------------
- # フォロワーを扱うクラスです。フォロワーとは、隊列歩行で表示する、先頭以外の
- # 仲間キャラクターのことです。Game_Followers クラスの内部で参照されます。
- #==============================================================================
- class Game_Follower < Game_Character
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias follower_initialize initialize
- def initialize(member_index, preceding_character)
- follower_initialize(member_index, preceding_character)
- @old_x = @preceding_character.x
- @old_y = @preceding_character.y
- end
- #--------------------------------------------------------------------------
- # ● 先導キャラクターを追う
- #--------------------------------------------------------------------------
- alias follower_chase_preceding_character chase_preceding_character
- def chase_preceding_character
- unless moving?
- @old_x = @preceding_character.x
- @old_y = @preceding_character.y
- end
- follower_chase_preceding_character
- end
- #--------------------------------------------------------------------------
- def fx
- return @old_x
- end
- #--------------------------------------------------------------------------
- def fy
- return @old_y
- end
- end
- #==============================================================================
- # ■ Game_Event
- #------------------------------------------------------------------------------
- # イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
- # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- alias wiki_refresh refresh
- def refresh
- wiki_refresh
- if @old_opacity != nil
- @opacity = @old_opacity
- end
- end
- #--------------------------------------------------------------------------
- # ■ イベント名の取得
- #--------------------------------------------------------------------------
- def name
- return @event.name
- end
- #--------------------------------------------------------------------------
- # ■ 不透明度の変化
- #--------------------------------------------------------------------------
- def opacity_setting(opacity)
- return if @opacity == opacity
- @old_opacity = opacity
- @opacity = opacity
- end
- #--------------------------------------------------------------------------
- # ● 接触イベントの起動判定
- #--------------------------------------------------------------------------
- alias simbol_check_event_trigger_touch check_event_trigger_touch
- def check_event_trigger_touch(x, y)
- #エンカウントIDある?
- if $game_map.enemy_events.include?(self.id) && $game_self_switches[[@map_id,self.id,"B"]] != true
- return if $game_map.interpreter.running?
- #イベント接触範囲拡張 フラグ取得
- if F_Setting::EVENT_WIDE_COMBINE
- if $game_map.wide_event.include?(self.id)
- num = $game_map.wide_event.index(self.id)
- # トリガー [イベントから接触] が一致した場合
- tmp = event_number_range_check($game_player.x, $game_player.y,
- $game_map.wide_parameter[num], $game_map.wide_extend[num]) if @trigger == 2
- #ジャンプ中では無く、条件が一致した場合
- if tmp && !jumping? && (!$game_map.wide_priority[num] or
- $game_map.wide_priority[num] && normal_priority?)
- $game_map.follower_encount_fg = false
- self.encount_switch_set_sub
- start
- return
- end
- end
- end
- if @trigger == 2 && $game_player.pos?(x, y)
- if !jumping? && normal_priority?
- $game_map.follower_encount_fg = false
- encount_switch_set_sub
- start
- return
- end
- end
- if F_Setting::FOLLOWER_ENCOUNT_FG
- if @trigger == 2 && collide_with_player_characters?(x, y)
- if !jumping? && normal_priority?
- $game_map.follower_encount_fg = true
- encount_switch_set_sub
- start
- end
- end
- end
- else
- simbol_check_event_trigger_touch(x, y)
- end
- end
- #--------------------------------------------------------------------------
- # ■ 同位置のイベント起動判定
- # triggers : トリガーの配列
- #--------------------------------------------------------------------------
- def check_event_trigger_here_encount(triggers)
- if check_event_trigger_here_encount_check($game_player.x,$game_player.y,triggers)
- $game_map.follower_encount_fg = false
- return
- end
- if F_Setting::FOLLOWER_ENCOUNT_FG
- $game_player.followers.visible_folloers.each do |follower|
- if check_event_trigger_here_encount_check(follower.fx,follower.fy,triggers)
- $game_map.follower_encount_fg = true
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ■ 同位置のイベント起動判定 チェック
- # triggers : トリガーの配列
- #--------------------------------------------------------------------------
- def check_event_trigger_here_encount_check(x,y,triggers)
- if $game_map.enemy_events.include?(self.id) && $game_self_switches[[@map_id,self.id,"B"]] != true
- return false if $game_map.interpreter.running?
- #イベント接触範囲拡張併用?
- return false unless F_Setting::EVENT_WIDE_COMBINE
- #フラグ取得
- if $game_map.wide_event.include?(self.id)
- num = $game_map.wide_event.index(self.id)
- # トリガー が一致した場合
- tmp = event_number_range_check(x, y,$game_map.wide_parameter[num],
- $game_map.wide_extend[num]) if trigger_in?(triggers)
- #ジャンプ中では無く、条件が一致した場合
- if tmp && !jumping? && (!$game_map.wide_priority[num] or
- $game_map.wide_priority[num] && !normal_priority?)
- encount_switch_set_sub
- start
- return true
- end
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ■ 停止時の更新 一時停止関連 イベント起動していない場合
- #--------------------------------------------------------------------------
- alias event_update_stop update_stop
- def update_stop
- if message_wait? || $game_map.interpreter.running?
- if $game_variables[EVENT_CHARACTER_STOP] == 1
- if !$game_map.enemy_events.include?(self.id)
- event_update_stop
- return
- end
- super
- return
- elsif $game_variables[EVENT_CHARACTER_STOP] == 2
- super
- return
- end
- end
- event_update_stop
- end
- #--------------------------------------------------------------------------
- # ■ 通行可能判定
- # d : 方向(2,4,6,8)
- #--------------------------------------------------------------------------
- def passable?(x, y, d)
- if $game_map.enemy_events.include?(self.id)
- #イベント接触範囲拡張 フラグ取得
- if F_Setting::EVENT_WIDE_COMBINE
- if $game_map.wide_event.include?(self.id)
- tmp = false
- num = $game_map.wide_event.index(self.id)
- # トリガー [イベントから接触] が一致した場合
- tmp = event_number_range_check($game_player.x, $game_player.y,
- $game_map.wide_parameter[num], $game_map.wide_extend[num]) if @trigger == 2
- return false if tmp && !jumping? && (!$game_map.wide_priority[num] or
- $game_map.wide_priority[num] && normal_priority?)
- end
- end
- x2 = $game_map.round_x_with_direction(x, d)
- y2 = $game_map.round_y_with_direction(y, d)
- r_id = $game_map.enemy_notenter_region[$game_map.enemy_events.index(self.id)]
- return false if ENEMY_REGION_SET[r_id].include?($game_map.region_id(x2, y2))
- end
- super
- end
- #--------------------------------------------------------------------------
- # ■ 移動タイプ : 離れる
- #--------------------------------------------------------------------------
- def move_type_away_from_player
- if near_the_player?
- case rand(6)
- when 0..3; move_away_from_player
- when 4; move_random
- when 5
- turn_away_from_player
- move_forward
- end
- else
- move_random
- end
- end
- #--------------------------------------------------------------------------
- # ★ 自律移動の更新
- #--------------------------------------------------------------------------
- alias wiki_update_self_movement update_self_movement
- def update_self_movement
- #イベント能力値による行動変化ある場合
- if $game_map.enemy_events.include?(self.id) &&
- $game_map.enemy_forming_flg[$game_map.enemy_events.index(self.id)] >= 0
- if $game_map.change_action_gap_fg[$game_map.enemy_events.index(self.id)] == 1
- if near_the_screen? && @stop_count > stop_count_threshold
- case @move_type
- when 1; move_type_random
- when 2; move_type_away_from_player
- when 3; move_type_custom
- end
- end
- return
- end
- end
- #呼び戻す
- wiki_update_self_movement
- end
- end
- #==============================================================================
- # ■ Game_Character
- #------------------------------------------------------------------------------
- # 主に移動ルートなどの処理を追加したキャラクターのクラスです。Game_Player、
- # Game_Follower、GameVehicle、Game_Event のスーパークラスとして使用されます。
- #==============================================================================
- class Game_Character < Game_CharacterBase
- #--------------------------------------------------------------------------
- # ● 停止時の更新 イベント起動中の場合
- #--------------------------------------------------------------------------
- alias event2_update_stop update_stop
- def update_stop
- if message_wait? or $game_map.interpreter.running?
- if $game_variables[EVENT_CHARACTER_STOP] == 1
- if self.is_a?(Game_Event) && !$game_map.enemy_events.include?(self.id) &&
- (@move_route_forcing or $game_map.any_event_starting?)
- event2_update_stop
- return
- end
- super
- return
- elsif $game_variables[EVENT_CHARACTER_STOP] == 2
- if @move_route_forcing or $game_map.any_event_starting?
- event2_update_stop
- return
- end
- super
- return
- end
- end
- event2_update_stop
- end
- #--------------------------------------------------------------------------
- # ■ ウインドウ表示中?
- #--------------------------------------------------------------------------
- def message_wait?
- if EVENT_CHARACTER_STOP > 0 && $game_variables[EVENT_CHARACTER_STOP] > 0 &&
- $game_variables[EVENT_CHARACTER_STOP] < 3
- return true if $game_message.visible or $game_message.busy?
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ■ エンカウント判定
- #--------------------------------------------------------------------------
- def encount_switch_set
- #エンカウント禁止?
- return false if $game_party.no_encount?
- key = [$game_map.map_id, self.id, "B"] #スイッチB
- if $game_map.enemy_events.include?(self.id) && $game_self_switches[key] != true
- encount_switch_set_sub
- return true
- end
- return false
- end
- #--------------------------------------------------------------------------
- def encount_switch_set_sub
- return false if $game_party.no_encount?
- key = [$game_map.map_id, self.id, "B"] #スイッチB
- $game_self_switches[key] = true
- self.direction_fix_change(true)
- $game_map.turn_inbattle(self.id)
- $game_map.updete_encount_set_sub($game_map.enemy_events.index(self.id), true)
- end
- end
- #==============================================================================
- # ■ Game_CharacterBase
- #------------------------------------------------------------------------------
- # キャラクターを扱う基本のクラスです。全てのキャラクターに共通する、座標やグ
- # ラフィックなどの基本的な情報を保持します。
- #==============================================================================
- class Game_CharacterBase
- #--------------------------------------------------------------------------
- # ● 非公開メンバ変数の初期化
- #--------------------------------------------------------------------------
- alias wiki_init_private_members init_private_members
- def init_private_members
- #呼び戻し
- wiki_init_private_members
- @direction_lock = false
- end
- #--------------------------------------------------------------------------
- # ● 指定方向に向き変更
- # d : 方向(2,4,6,8)
- #--------------------------------------------------------------------------
- alias wiki_set_direction set_direction
- def set_direction(d)
- #呼び戻し
- @stop_count = 0
- unless @direction_lock
- wiki_set_direction(d)
- end
- end
- #--------------------------------------------------------------------------
- # ■ 向き固定フラグ変更
- # flg : true / false
- #--------------------------------------------------------------------------
- def direction_fix_change(flg)
- @direction_lock = flg
- end
- end
- #==============================================================================
- # ■ Game_Party
- #------------------------------------------------------------------------------
- # パーティを扱うクラスです。ゴールドやアイテムなどの情報が含まれます。このク
- # ラスのインスタンスは $game_party で参照されます。
- #==============================================================================
- class Game_Party < Game_Unit
- #--------------------------------------------------------------------------
- # ■ ステートIDがパーティーにあるか?
- #--------------------------------------------------------------------------
- def party_stete?(state_id)
- if state_id > 0
- if exists
- for actor in battle_members
- #if actor.exist? && actor.state?(state_id)
- return true if actor.state?(state_id)
- end
- end
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ■ 遠見状態?
- #--------------------------------------------------------------------------
- def all_see?
- return (party_stete?(NO_ALL_BATTLE) or party_stete?(ALL_SEE_NO_CAUTION) or
- party_stete?(ALL_SEE))
- end
- #--------------------------------------------------------------------------
- # ■ 敵警戒しない状態?
- #-------------------------------------------------------------------------
- def no_caution?
- return (party_stete?(NO_ALL_BATTLE) or party_stete?(ALL_SEE_NO_CAUTION) or
- party_stete?(NO_CAUTION_BATTLE) or party_stete?(NO_CAUTION))
- end
- #--------------------------------------------------------------------------
- # ■ エンカウントしない状態?(多分イベントコマンド内でも使用)
- #--------------------------------------------------------------------------
- #条件分岐にて : $game_party.no_encount? << イベントコマンド内書式
- def no_encount?
- return (party_stete?(NO_ALL_BATTLE) or party_stete?(NO_CAUTION_BATTLE) or
- party_stete?(NO_ENCOUNT))
- end
- end
复制代码 (;´Д`)这就是那个脚本,求大神帮看看有没有什么办法只取用怪物的索敌能力和离开地图后自动刷新这两个功能
谢谢( TдT) |
|