查看: 3280|回复: 1

[已经解决] 地图数量怎么突破999啊

[复制链接]
梦石
0
星屑
74
在线时间
11 小时
注册时间
2015-8-2
回帖
2
发表于 2020-7-17 12:26:05 | 显示全部楼层 |阅读模式
悬赏300星屑已解决
最近因为房间和迷宫搞的地图数量不够用的了,求一个破限脚本!
梦石
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]
VA外站脚本汉化群:226308173   |    部分远古文件备份:https://wwzv.lanzoue.com/b02rac5pc  密码:acgm
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部