| 赞 | 275 |
| VIP | |
| 好人卡 | |
| 积分 | 154 |
| 经验 | |
| 最后登录 | 2026-9-15 |
| 在线时间 | 2109 小时 |
- 梦石
- 1
- 星屑
- 14374
- 在线时间
- 2109 小时
- 注册时间
- 2017-9-28
- 回帖
- 607
|
发表于 2020-7-17 12:26:06
|
显示全部楼层
本帖最后由 VIPArcher 于 2022-5-28 03:19 编辑
脚本一[pre lang="ruby"]=begin
#===============================================================================
Title: 地图文件夹
Author: Hime
Date: Mar 19, 2014
--------------------------------------------------------------------------------
** Change log
Mar 19, 2014
- overwrites the way maps are loaded.
Apr 3, 2013
- added support for explicit transfer designation using script call
Feb 24, 2013
- added "load from zero folder" option
- added support for custom folder naming schemes
- added support for specifying (x, y) on the new map
- Initial release
--------------------------------------------------------------------------------
** Terms of Use
* Free to use in non-commercial projects
* Contact me for commercial use
* Will do bug fixes, but no compatibility patches
* Features may be requested but no guarantees, especially if it is non-trivial
* Credit Hime Works
* Preserve this header
--------------------------------------------------------------------------------
** 说明
让单个工程拥有地图数大于999.
允许你将额外的地图放入“Data”文件夹中的单独子文件夹中。
例如, 1000号至1999号地图放在Map1文件夹里,
2000号至2999号地图放在Map2文件夹里, 以此类推
所有直接放在Data文件夹里的地图会被视为“0文件夹”中的一部分
--------------------------------------------------------------------------------
** Installation
Place this below Materials and above Main.
You should place this script above other custom scripts.
--------------------------------------------------------------------------------
** 使用方法
在Data文件夹里新建文件夹,重命名为
Maps#
#替换为数字. 例如: Map1, Map2, Map23
您可以在脚本设定部分更改命名方案。 命名方案必须仅使用一个数字,该数字代表文件夹ID。
一个文件夹最多可以放999张地图。
记住要同时转移 mapInfos.rvdata2 文件,因为编辑器将需要正确地使用该文件以加载地图树。
使用事件脚本以将当前地图更改为其他地图文件夹中的地图
请在地图传送之前使用事件脚本:
change_map_folder(文件夹id)
或
$game_system.change_map_folder(文件夹id)
如果你希望将传送后的地图变更为 Map12 文件夹中的地图, 请使用脚本:
change_map_folder(12)
为了避免传送到新地图中的不可移动区域,你可以设定传送到新地图的指定坐标:
change_map_folder(文件夹id, 地图id, x坐标, y坐标)
注意: 由于默认脚本的工作原理,如果玩家传送到具有相同ID的地图,则游戏实际上不会设置
新的地图! 这很容易解决,但是出于兼容性的原因,它尚未更改。
--------------------------------------------------------------------------------
** Compatibility
The following classes/functions have been modified
aliased - load_data
Game_Interpreter
command_201
Game_Map
aliased - setup
Game_System
aliased - initialize
#===============================================================================
=end
$imported = {} if $imported.nil?
$imported["TH_MapFolders"] = true
#===============================================================================
# ** Configuration
#===============================================================================
module TH
module Map_Folders
# 地图文件夹命名格式
Folder_Names = "Map%d"
# 是否从0文件夹而不是Data文件夹加载。
# 如果您当前正在以【使用地图子文件夹的方式】开发地图,则可能会很有用
Load_From_Zero_Folder = false
# 开始新游戏时使用的地图文件夹id
Start_Folder = 0
end
end
#===============================================================================
# ** Rest of script
#===============================================================================
#-------------------------------------------------------------------------------
# Store the current folder ID somewhere
#-------------------------------------------------------------------------------
class Game_System
attr_reader :map_folder_id
alias :th_map_folders_init :initialize
def initialize
th_map_folders_init
@map_folder_id = TH::Map_Folders::Start_Folder
end
def change_map_folder(folder_id)
@map_folder_id = folder_id
end
end
class Game_Temp
attr_accessor :map_folder_transfer_x
attr_accessor :map_folder_transfer_y
attr_accessor :map_folder_transfer_map_id
end
#-------------------------------------------------------------------------------
# Game map setup includes folder ID
#-------------------------------------------------------------------------------
class Game_Map
alias :th_map_folders_setup :setup
def setup(map_id)
@map_id = map_id
@map = load_folder_map(map_id)
@tileset_id = @map.tileset_id
@display_x = 0
@display_y = 0
referesh_vehicles
setup_events
setup_scroll
setup_parallax
setup_battleback
@need_refresh = false
end
def load_folder_map(map_id)
map_id += 1000 * $game_system.map_folder_id
folder_id = map_id / 1000
map_id = map_id % 1000
if folder_id == 0 && !TH::Map_Folders::Load_From_Zero_Folder
load_data("Data/Map%03d.rvdata2" %map_id)
else
load_data(sprintf("Data/%s/Map%03d.rvdata2", sprintf(TH::Map_Folders::Folder_Names, folder_id), map_id))
end
end
end
class Game_Player < Game_Character
alias :th_map_folders_reserve_transfer :reserve_transfer
def reserve_transfer(map_id, x, y, d = 2)
th_map_folders_reserve_transfer(map_id, x, y, d)
@new_x = $game_temp.map_folder_transfer_x if $game_temp.map_folder_transfer_x
@new_y = $game_temp.map_folder_transfer_y if $game_temp.map_folder_transfer_y
@new_map_id = $game_temp.map_folder_transfer_map_id if $game_temp.map_folder_transfer_map_id
end
end
#-------------------------------------------------------------------------------
# For convenience
#-------------------------------------------------------------------------------
class Game_Interpreter
alias :th_map_folders_clear :clear
def clear
th_map_folders_clear
$game_temp.map_folder_transfer_x = nil
$game_temp.map_folder_transfer_y = nil
$game_temp.map_folder_transfer_map_id = nil
end
def change_map_folder(folder_id, map_id=nil, x=nil, y=nil)
$game_system.change_map_folder(folder_id)
$game_temp.map_folder_transfer_map_id = map_id
$game_temp.map_folder_transfer_x = x
$game_temp.map_folder_transfer_y = y
end
alias :th_map_folders_command_201 :command_201
def command_201
@params[1] = $game_temp.map_folder_transfer_map_id || @params[1]
@params[2] = $game_temp.map_folder_transfer_x || @params[2]
@params[3] = $game_temp.map_folder_transfer_y || @params[3]
th_map_folders_command_201
end
end[/pre]
脚本二(请自行汉化)[pre lang="ruby"]#==============================================================================
# ■ RGSS3 新マップ数上限突破 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# VXAceのマップ上限999を超えたプロジェクトの作成が可能になります。
# ただし、プロジェクト上で表示可能なマップは1~999までとなる為
# 別のプロジェクトを使用し1001を超えるマップIDのデータを作成する必要があります。
# なお、動作の仕様上ID1000やID2000等、1000の倍数のマップIDは作成できません。
# 1001~1999、2001~2999といったルールになります。
#==============================================================================
# 要注意事項
#------------------------------------------------------------------------------
# 導入後にゲームを公開し、マップID1000以上のマップでセーブした後
# バージョンアップでこのスクリプトの導入を止めた場合等は
# そのセーブデータが使用できなくなるという問題がどうしても発生します。
# また、通常の製作上あまり行わないPC上でのファイル操作が必要になりますので
# 謝って必要なデータを上書きしたり消したりしないように注意して下さい。
#
# このスクリプトの使用は本当に最後の手段であり
# どうしてもマップ数が999では足りないという場合にのみ使用して下さい。
# 本スクリプトの利用でプロジェクトファイルが破損した場合でも
# 当方は責任を負いかねますので、あらかじめご了承ください。
#==============================================================================
# 作業手順
#------------------------------------------------------------------------------
# 1.!!!事故防止を兼ねてバックアップを取って下さい!!!
#
# 2.製作のメインとなる1~999までのマップデータのあるプロジェクトファイルの
# Dataフォルダ内にOverThousand1というフォルダを作成します。
# このフォルダは必要に応じてOverThousand2以降も作成して下さい。
#
# 3.バックアップを取っておいたプロジェクトデータを複製し
# マップデータのみ全てエディタ上で消去するか
# 新規プロジェクトにDataフォルダ内の必要なデータをコピーする等して
# マップ関係以外がメインのプロジェクトと同じ環境を用意して下さい。
# これでサブプロジェクトの出来あがりです。
#
# 4.ID1001以上のマップデータをサブプロジェクトファイルで製作して
# プロジェクトファイルを一旦保存して下さい。
# その後、そのプロジェクトファイルのDataフォルダから
# MapXXX.rvdata2(XXX部分は001~999の数字)のファイルと
# MapInfos.rvdata2をコピーし
# メインのプロジェクトファイルのDataフォルダ内に先程用意した
# OverThousand1フォルダの中にコピーします。
#
# これで、OverThousand1のフォルダ内のマップは全てID+1000のマップとして扱われ
# OverThousand1のMapInfoデータに関してもそのようになります。
# 2001以上のマップデータに関しても必要な場合は同じように製作し
# MapInfoデータと共に、今度はOverThousand2フォルダにコピーして下さい。
#==============================================================================
module OverThousandMap
#1001マップ以上を格納するフォルダ用のフォーマットを指定。
Format = "OverThousand%s"
#1001マップ以上のマップを保存するフォルダをいくつ用意するかを指定。
#1フォルダに対し999マップまでと、対応するMapInfoの、最大1000ファイルを格納。
#例えば2000未満(1999まで)で済むなら1、3000未満(2999まで)で済むなら2、など。
FFC = 1
#移動先のマップIDに対して1000倍の加算を行う変数IDを指定。
#例.変数IDの値が1でなおかつ移動先のマップIDが20の場合
# 移動先のマップIDはDataフォルダ内のOverThousand1フォルダ内の
# Map020.rvdata2が読み込まれる。
# MapInfoも同じくDataフォルダ内のOverThousand1フォルダ内の
# MapInfos[20]を読み込む。
VID = 50
end
class << DataManager
#--------------------------------------------------------------------------
# 通常のデータベースをロード
#--------------------------------------------------------------------------
alias load_normal_database_over_thousand_map load_normal_database
def load_normal_database
load_normal_database_over_thousand_map
if OverThousandMap::FFC > 0
OverThousandMap::FFC.times {|n|
c = n + 1
mi = load_data("Data/" + sprintf(OverThousandMap::Format,c) + "/MapInfos.rvdata2")
mi.each_with_index {|f,i| $data_mapinfos[i + 1000 * c] = f}}
end
end
end
class Game_Map
#--------------------------------------------------------------------------
# セットアップ
#--------------------------------------------------------------------------
alias setup_over_thousand_map setup
def setup(map_id)
new_map_id = (map_id < 1000 && $game_variables && ($game_variables[OverThousandMap::VID] > 0)) ? ((map_id % 1000) + $game_variables[OverThousandMap::VID] * 1000) : map_id
setup_over_thousand_map(new_map_id)
end
end
class Game_Player
#--------------------------------------------------------------------------
# 場所移動の予約
#--------------------------------------------------------------------------
alias reserve_transfer_over_thousand_map reserve_transfer
def reserve_transfer(map_id, x, y, d = 2)
new_map_id = (map_id < 1000 && $game_variables && ($game_variables[OverThousandMap::VID] > 0)) ? ((map_id % 1000) + $game_variables[OverThousandMap::VID] * 1000) : map_id
reserve_transfer_over_thousand_map(new_map_id, x, y, d)
end
end
#--------------------------------------------------------------------------
# データのロード
#--------------------------------------------------------------------------
alias :load_data_over_thousand_map :load_data unless $!
def load_data(filename)
flag = false
if /#{"Data/Map"}(\d+)#{".rvdata2"}/ =~ filename
map_id = $1.to_i
if map_id > 1000
flag = true
true_filename = sprintf("Data/OverThousand%s/Map%03d.rvdata2",map_id / 1000,map_id % 1000)
end
end
true_filename = filename unless flag
load_data_over_thousand_map(true_filename)
end[/pre] |
|