【RGSS3版】タイルをコピーして置き換え【解決済】

musashi
記事: 2
登録日時: 2017年4月26日(水) 23:23

【RGSS3版】タイルをコピーして置き換え【解決済】

投稿記事by musashi » 2017年4月26日(水) 23:33

閲覧ありがとうございます。
VXAceでタイルを置き換えするスクリプトをご存知の方、または作ってくださる方はいらっしゃいますでしょうか?
MV版とVX版だけで、VXAce版を見つけられなかったのでリクエストさせていただきました。
1タイル単位で置き換えができて、元に戻すまでセーブにも保存される仕組みです。
難しいかもしれませんが、どうぞ宜しくお願い致します。

【参考】
MV版 Supponさん作
viewtopic.php?f=5&t=338
VX版 CACAOさん作
http://cacaosoft.webcrow.jp/script/rgss2/chgt.html
最後に編集したユーザー musashi on 2017年4月29日(土) 13:06 [ 編集 1 回目 ]

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【RGSS3版】タイルをコピーして置き換え

投稿記事by TOMO » 2017年4月29日(土) 01:53

こんな感じでどうですか?

コード: 全て選択

# ・タイルの変更
# $game_map.change_tile_id(x, y, z, tile_id)
#
# ・変更したタイルの確認
# p $game_map.ex_tile_ids
#
# ※補足
# $game_map.ex_tile_idsで出てくるデータですが、
# {[マップID, X座標, Y座標, Z座標]=>タイルID}
# といった感じになります

class Game_Map
  attr_accessor   :ex_tile_ids
  #--------------------------------------------------------------------------
  # ● タイル ID の変更
  #--------------------------------------------------------------------------
  def change_tile_id(x, y, z, tile_id)
    @ex_tile_ids = {} unless @ex_tile_ids
    return if @ex_tile_ids[[@map_id, x, y, z]] == tile_id
    @ex_tile_ids[[@map_id, x, y, z]] = tile_id
    refresh
  end
  #--------------------------------------------------------------------------
  # ● マップデータの取得
  #--------------------------------------------------------------------------
  alias tomo_change_tile_ids_data data
  def data
    @ex_tile_ids = {} unless @ex_tile_ids
    data = tomo_change_tile_ids_data
    @ex_tile_ids.each do |key, value|
      if key[0] == @map_id && data[key[1], key[2], key[3]] != value
        data[key[1], key[2], key[3]] = value
      end
    end
    data
  end
end
musashi
記事: 2
登録日時: 2017年4月26日(水) 23:23

Re: 【RGSS3版】タイルをコピーして置き換え

投稿記事by musashi » 2017年4月29日(土) 13:05

TOMOさん、ありがとうございます!
これでタイルの置き換えができて制作の幅が広がります!本当にありがとうございました!
このスレッドは【解決済】にさせていただきます。

他の方へ、ご参考までに。
置き換えたタイルを消す時は$game_map.ex_tile_idsの値を、rubyのハッシュの操作で削除すれば消せました。
消しても見かけ上は残りますが、別のマップに移動して戻れば消えます。

“VX / Ace:スクリプト素材のリクエスト” へ戻る