いつもお世話になっております。
表題の件でご助力お願いします。
ゲーム内で同じマップだけど時代が変わって出現する敵も違う、という表現をしたのですが
例えばスイッチ1がonの時とoffの時で過去と現在を行き来すると現在だとスライム、過去だとドラゴンが出現する
感じです。
リージョンというので1マスづつ別のエネミーグループを設定出来るのは分かったのですが同じマスで条件によってエネミーを変えるというのが表現出来なかったので…。
一応リージョンIDでマップ内のエネミーグループを選別はしています(水のマスにはクラゲのエネミーとか)。
宜しくお願いします。
【解決済】 同一マップ内で条件によって出現エネミーを変える
【解決済】 同一マップ内で条件によって出現エネミーを変える
最後に編集したユーザー しろう [ 2021年3月02日(火) 22:09 ], 累計 1 回
Re: 同一マップ内で条件によって出現エネミーを変える
しろう 様 こんにちは
スクリプトを作ってみようかと思うのですが
一つのスイッチをONにしたら全てのマップのエンカウントグループが切り替わる方式で大丈夫ですか?
それともマップごとにスイッチを割り当てて切り替える方がいいですか?
追記:両方実装できそうなのでやってみます
少々お待ちください
スクリプトを作ってみようかと思うのですが
一つのスイッチをONにしたら全てのマップのエンカウントグループが切り替わる方式で大丈夫ですか?
それともマップごとにスイッチを割り当てて切り替える方がいいですか?
追記:両方実装できそうなのでやってみます
少々お待ちください
Re: 同一マップ内で条件によって出現エネミーを変える
DEDEN様ありがとうございます。
楽しみに待っております。
楽しみに待っております。
Re: 同一マップ内で条件によって出現エネミーを変える
しろう様 大変お待たせしました
スクリプトが完成しました
私の力不足で使い方が複雑になってしまったので説明をよく読んでご使用ください
ざっくり説明しますと
マップ設定のメモ欄にe_listn[4,5,6]と記入し、その後イベントコマンドのスクリプトで
encounter_switch(マップID,n)と実行すれば指定マップIDの出現エネミーが敵グループID:4,5,6に変化します
但し重みやリージョンを設定する場合はスクリプトエディタでの設定が必要です
不明な点や不具合があればいつでもどうぞ
スクリプトが完成しました
私の力不足で使い方が複雑になってしまったので説明をよく読んでご使用ください
ざっくり説明しますと
マップ設定のメモ欄にe_listn[4,5,6]と記入し、その後イベントコマンドのスクリプトで
encounter_switch(マップID,n)と実行すれば指定マップIDの出現エネミーが敵グループID:4,5,6に変化します
但し重みやリージョンを設定する場合はスクリプトエディタでの設定が必要です
不明な点や不具合があればいつでもどうぞ
コード: 全て選択
#==============================================================================
# ■ エンカウントグループ変更 Ver:1.00
#------------------------------------------------------------------------------
# 任意のタイミングでエンカウントするグループを変更できます
#==============================================================================
#==============================================================================
# 〇使い方
#------------------------------------------------------------------------------
# ●マップのメモ欄にe_list1[グループID]と切り替えたいグループを入力します
# 例:e_list1[1,2,3]
# 末尾番号を増やして複数記入すればその分パターンを増やす事が出来ます
# 例:e_list1[1,2,3]
# e_list2[4,5,6]
# と改行して2つ入力すればデフォルトのグループと合わせて3パターンから
# エンカウントグループを切り替えることができるようになります
# この方法で設定した場合は全て重み10、出現リージョンは全域になります
#
# ●重みと出現リージョンも設定したい場合はスクリプトエディタで設定します
# 詳細は下部の設定項目2を参照して下さい
#
# ●イベントコマンドのスクリプトでencounter_switch(マップID,パターンID)
# と実行すると指定したマップIDのエンカウントグループを変更できます
# パターンIDはデフォルトのマップ設定が0、メモ欄等で追加した分が1から順に続きます
# 例1:encounter_switch(1,0)
# マップID:1番のエンカウントグループがデフォルトに戻ります
# 例2:encounter_switch(2,1)
# マップID:2番のエンカウントグループが追加設定した1つめのグループに
# 変更されます
# 例3:encounter_switch($game_map.map_id,$game_variables[10])
# 現在のマップのエンカウントグループが変数10番の値になります
#
# ●イベントコマンドのスクリプトでall_encounter_switch(パターンID)
# と実行すると全てのマップのエンカウントグループを指定パターンに変更できます
#==============================================================================
#==============================================================================
# ● 設定項目1
#==============================================================================
module Deden
module Encount_Switch
#マップ毎のグループ作成最大数 もしも1マップあたり1000以上のグループを指定したい
#場合はこの値を増やしてください
GROOP_MAX = 999
#マップ作成上限数 通常は変更する必要はありません
MAP_MAX = 999
end
end
#==============================================================================
# この間は変更しないで下さい
#==============================================================================
class Scene_Title < Scene_Base
include Deden::Encount_Switch
def encounter_info(map_id)
e_list = [[]]
GROOP_MAX.times {e_list.push([])}
case map_id
#==============================================================================
# この間は変更しないで下さい
#==============================================================================
#==============================================================================
# ● 設定項目2
#==============================================================================
# 敵グループ、重み、リージョンを直接設定します
# マップのメモ欄と重複した場合はこちらが優先されるのでご注意下さい
#------------------------------------------------------------------------------
# ●設定方法
# when マップID
# e_list[パターンID][n] = [敵グループID,重み,[リージョンID]]
# パターンIDは1からスタートして下さい 番号を飛ばす事はできません
# nは0からスタートです
#------------------------------------------------------------------------------
# ●設定例
when 1 #マップID:1番
e_list[1][0] = [3,10,[1,2,3]] #敵グループID:3、重み:10、出現リージョン:1,2,3
e_list[1][1] = [5,20,[4]] #敵グループID:5、重み:20、出現リージョン:4
e_list[1][2] = [7,10,[]] #敵グループID:7、重み:10、出現リージョン:全域
#上記の設定でマップ1のパターンを1に切り替えるとID:3,5,7の敵グループとエンカウントします
e_list[2] = [[9,10,[5]],[11,10,[6,7]],[13,15,[8,9,10]]]
#またこの様に表記すると一括で設定できます
#上記の設定でマップ1のパターンを2に切り替えるとID:9,11,13の敵グループとエンカウントします
#ここから追加して下さい
#==============================================================================
# 設定項目終了
#==============================================================================
end
return e_list
end
#--------------------------------------------------------------------------
# ● グループ読み込み用の変数用意
#--------------------------------------------------------------------------
def create_groop
$encounter_list = [nil]
for @n in 1 .. MAP_MAX
begin
@map_data = load_data(sprintf("Data/Map%03d.rvdata2", @n))
rescue Errno::ENOENT
next
end
list = @map_data.encounter_list
$encounter_list[@n] = [list]
if encounter_info(@n)[1].size == 0
map_note_info
else
groop = encounter_info(@n)
for m in 1 .. GROOP_MAX
break if groop[m].size == 0
$encounter_list[@n].push([])
groop[m].each do |f|
encounter = RPG::Map::Encounter.new
encounter.troop_id = f[0]
encounter.weight = f[1]
encounter.region_set = f[2]
$encounter_list[@n][m].push(encounter)
end
end
end
end
end
#--------------------------------------------------------------------------
# ● マップデータから取得
#--------------------------------------------------------------------------
def map_note_info
for m in 1 .. GROOP_MAX
check = "e_list"
check += m.to_s
if /^#{check}\[([\d\,]+)\]/ =~ @map_data.note
$encounter_list[@n].push([])
$1.split(/\,/).map{|i| i.to_i}.each do |i|
encounter = RPG::Map::Encounter.new
encounter.troop_id = i
$encounter_list[@n][m].push(encounter)
end
else
break
end
end
end
#--------------------------------------------------------------------------
# ● 現在グループ管理用変数作成
#--------------------------------------------------------------------------
def create_groop_list
$encounter_list_id = [nil]
MAP_MAX.times {$encounter_list_id.push(0)}
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias start_deden start
def start
start_deden
create_groop
end
#--------------------------------------------------------------------------
# ● コマンド[ニューゲーム]
#--------------------------------------------------------------------------
alias command_new_game_deden command_new_game
def command_new_game
command_new_game_deden
create_groop_list
end
end
class Game_Map
include Deden::Encount_Switch
#--------------------------------------------------------------------------
# ● エンカウントリストの取得
#--------------------------------------------------------------------------
def encounter_list
$encounter_list[@map_id][$encounter_list_id[@map_id]]
end
end
class Game_Interpreter
include Deden::Encount_Switch
#--------------------------------------------------------------------------
# ● エンカウントグループ切り替え
#--------------------------------------------------------------------------
def encounter_switch(map_id,groop_id)
$encounter_list_id[map_id] = groop_id
end
#--------------------------------------------------------------------------
# ● 全マップのエンカウントグループ切り替え
#--------------------------------------------------------------------------
def all_encounter_switch(groop_id)
for n in 1 .. MAP_MAX
$encounter_list_id[n] = groop_id
end
end
end
module DataManager
#--------------------------------------------------------------------------
# ● 特異メソッド
#--------------------------------------------------------------------------
class << self
alias :make_save_contents_deden :make_save_contents
alias :extract_save_contents_deden :extract_save_contents
end
#--------------------------------------------------------------------------
# ● セーブ内容の作成
#--------------------------------------------------------------------------
def self.make_save_contents
contents = make_save_contents_deden
contents[:list] = $encounter_list_id
contents
end
#--------------------------------------------------------------------------
# ● セーブ内容の展開
#--------------------------------------------------------------------------
def self.extract_save_contents(contents)
extract_save_contents_deden(contents)
$encounter_list_id = contents[:list]
end
end
Re: 同一マップ内で条件によって出現エネミーを変える
DEDEN様ありがとうございます!
試してみたところ、非常に分かりやすく簡単に出現グループの切り替えが出来ました!
重みやリージョンの設定の方もメモではなくエディダの方で一括で設定出来るので大きなマップだとこの方がありがたいです。
本当にありがとうございました。
こちらは解決済とさせて頂きます。
試してみたところ、非常に分かりやすく簡単に出現グループの切り替えが出来ました!
重みやリージョンの設定の方もメモではなくエディダの方で一括で設定出来るので大きなマップだとこの方がありがたいです。
本当にありがとうございました。
こちらは解決済とさせて頂きます。
Re: 【解決済】 同一マップ内で条件によって出現エネミーを変える
無事に動作したようで何よりです
後から気付いたのですが既存のセーブデータでエンカウントしたりグループ切替をしようとしたらエラーが起きませんか?
もしそれでお困りなら
適当なイベントを作成してこのコードをイベントコマンドで実行してみてください
その後セーブすれば以降はスクリプト導入前のセーブデータも使えるようになります
役目を終えたイベントは削除して大丈夫です
後から気付いたのですが既存のセーブデータでエンカウントしたりグループ切替をしようとしたらエラーが起きませんか?
もしそれでお困りなら
コード: 全て選択
$encounter_list_id = [nil]
MAP_MAX.times {$encounter_list_id.push(0)}
その後セーブすれば以降はスクリプト導入前のセーブデータも使えるようになります
役目を終えたイベントは削除して大丈夫です
Re: 【解決済】 同一マップ内で条件によって出現エネミーを変える
お気遣いありがとうございます。
新しいスクリプトを導入した時はニューゲームで確認してるので大丈夫でした。
新しいスクリプトを導入した時はニューゲームで確認してるので大丈夫でした。