设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 99|回复: 0

[转载发布] [XP/VX/Ace] LILY'S MEGA DATA! (Go beyond the 999 database limit)

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    前天 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    4472

    主题

    864

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    22951
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    28317

    灌水之王

    发表于 6 天前 | 显示全部楼层 |阅读模式
    LILY'S MEGA DATA!
    Version: 1.0



    Introduction
    Are you bummed by the 999 database limit for skills, items, actors and the like?  If so, then you may want to make a mega-data database.

    This script alters the load_data kernel to recognize key databases used by the RPGMaker engines which use Ruby Scripting, and allows additional database records to be added upon game load.

    This script may also generate a txt file (or set of text files) which will list all the items within your mega databases.

    Demo
    Nope.


    Script
    Spoiler: MegaData
                    Code:        
    #============================================================================== # ** LILY'S MEGA DATA! #------------------------------------------------------------------------------ #    by DerVVulfman #    version 1.0 #    08-22-2017 (mm/dd/yyyy) #    RUBY - RGSS / RGSS2 / RGSS3 (RMXP, RMVX & RMVXAce) #============================================================================== # #  Introduction: #  ============= # #  Are you bummed by the 999 database limit for skills, items, actors and the #  like?  If so, then you may want to make a mega-data database. # #  This script alters the load_data kernel to recognize key databases used by #  the RPGMaker engines which use Ruby Scripting, and allows additional data- #  base records to be added upon game load. # #  This script may also generate a txt file (or set of text files) which will #  list all the items within your mega databases. # #                                == * == * == # #  The MegaData Module: #  ==================== #   #  This module is your configuration section, controlling how the script runs #  and holds the lists of any additional  RPGMaker databases  which are being #  imported into the project. # #  The first set of values are the two within the BASIC SETTINGS category and #  are as follows: # #  * RGSS_SYSTEM:  This setting lets you use this system for whichever version #                  of RPGMaker you choose,  as long as it uses Ruby Scripting. # #                  A value of 0 (by default)  informs the script that it is in #                  an RPGMaker XP project.   Meanwhile,  a value of 1 will set #                  the system to read and recognize RPGMaker VX data files,and #                  a value of 2 informs the script that it is being used in an #                  RPGMaker VXAce project. # #  * LIST_SYSTEM:  This is a simple true/false setting that determines if the #                  project will generate any database output text files. # #                  Generated output files  will be created  in your project's #                  root folder, and always begin with "MEGA" in its name. The #                  file(s)  are only generated  for those databases  that are #                  being appended by outside database files. # #                  Remember to turn the feature off for your completed games. # #  The second set of values are arrays,  each meant to hold  the filenames of #  additional database being loaded.  These extra databases attach themselves #  to your existing ones, never overwriting them. # #  The List of arrays are as follows: # #  * ACTOR_LIST   - To let you go beyond 999 actors. #  * SKILL_LIST   - To let you learn more than 999 skills. #  * ITEM_LIST    - To let you have more than 999 items. #  * WEAP_LIST    - To let you have more than 999 weapons in your armory. #  * ARMOR_LIST   - To let you go beyond 999 pieces of armor. #  * ENEMY_LIST   - To let you increase your bestiary beyond 999 foes. #  * ANIM_LIST    - To let you go beyond 999 battle animations. #  * TILES_LIST   - To let you have more than 999 tilesets (RMXP Only). # #  When adding a database filename to the list,  you only enter  the filename #  itself without either the Data pathway or the file's extension. It is made #  this way to let the system work more easily  with the multiple RUBY script #  platforms.  An example appears in the script by default. # #  EX:  SKILL_LIST  = ["Skills2"] # #  So not only will the project load the default 'Data\Skills.rxdata' file, but #  also an accompanying Skills2.rxdata file within the Data folder. This, assu- #  ming that a Skills2.rxdata file exists, otherwise an error will occur. # # #                                == * == * == # #  USAGE: #  ====== #   #  This master script is designed to allow you  to increase the size  of your #  available data.  However, the default RPGMaker editors only work with data #  up to record 999.  Ergo, you will need to use script commands and/or addi- #  tional code to mimic typical map event commands like 'Change Actor' or the #  like. # #                                == * == * == # #  COMPATIBILITY: #  ============== # #  This script should be usable for all Ruby-Scripting versions of RPGMaker, #  and it merely attaches code  to the 'load_data' method  within the Kernel #  module itself.   # #                                == * == * == # #  CREDITS AND THANKS: #  =================== # #  Thanks goes to a dear friend who inquired just this past week if one could #  get past the 999 item or skill limit. # #============================================================================== # #  TERMS AND CONDITIONS: #  ===================== # #  Free for use, even in commercial games.  Due credit is all that's required. # #==============================================================================   module MegaData     # BASIC SETTINGS   # ==============   # Basic control switches determining the Ruby based engine in use, or if the   # system outputs a file containing the whole list of 'records' of a combined   # mega database.   #     RGSS_SYSTEM   = 0       # 0 = RGSS/RMXP, 1 = RGSS2/RMVX, 2 = RGSS3/RMVXAce     LIST_SYSTEM   = true    # If true, outputs a txt file for the combined data      # ADDITIONAL FILES   # ================   # Each is an array containing the filenames of additional database files with   # its records being added into the database for the current project. Only the   # name of the extra file is needed as the script recognizes that each file is   # within the Data folder, and attaches the suitable file extension ( .rxdata,   # .rvdata, rvdata2).  The arrays may be set to nil or [] (empty).   #     ACTOR_LIST  = nil     SKILL_LIST  = ["Skills2"]   # <--- example for having 'Data\Skills2.rxdata'     ITEM_LIST   = nil     WEAP_LIST   = nil     ARMOR_LIST  = nil     ENEMY_LIST  = nil     ANIM_LIST   = nil     TILES_LIST  = nil   end    #============================================================================== # ** Kernel #------------------------------------------------------------------------------ #  The Kernel module is a child of the Object class, allowing all methods and #  values within to be globally accessible unless overridden. #==============================================================================  module Kernel   #--------------------------------------------------------------------------   # * Alias / Renamed Method Listings with F12 anti-stack support   #--------------------------------------------------------------------------   if @kernel_mega_load_data_stack.nil?     @kernel_mega_load_data_stack = true     alias kernel_mega_load_data load_data   end   #--------------------------------------------------------------------------   # * load data   #     filename : name of data file - able to read encrypted game data.   #--------------------------------------------------------------------------   def load_data(filename)     # Acquire position of filename's period     parse_cnt = filename.index(".")     # Crop away file extension for non-biased system test     testname = filename[0,parse_cnt]     # Branch on filename, retrieving data (expanded or otherwise)     case testname     when "Data/Actors"       effective = load_mega("Data/Actors", MegaData::ACTOR_LIST)     when "Data/Skills"       effective = load_mega("Data/Skills", MegaData::SKILL_LIST)     when "Data/Items"       effective = load_mega("Data/Items", MegaData::ITEM_LIST)     when "Data/Weapons"       effective = load_mega("Data/Weapons", MegaData::WEAP_LIST)     when "Data/Armors"       effective = load_mega("Data/Armors", MegaData::ARMOR_LIST)     when "Data/Enemies"       effective = load_mega("Data/Enemies", MegaData::ENEMY_LIST)     when "Data/Animations"       effective = load_mega("Data/Animations", MegaData::ANIM_LIST)     when "Data/Tilesets"       effective = load_mega("Data/Tilesets", MegaData::TILES_LIST)     else       effective = kernel_mega_load_data(filename)     end     # Return database data     return effective   end   #--------------------------------------------------------------------------   # * load mega data   #     filename  : name of data file - able to read encrypted game data.   #     arraylist : list of additional data files added   #--------------------------------------------------------------------------   def load_mega(filename, arraylist)     # Keep old filename for output (minus data folder)     oldfilename = filename[5,filename.length]     # Attach filename extension based on RGSS used     filename = load_mega_extension(filename)     # Acquire records from default datafile     effective = kernel_mega_load_data(filename)     # Set our counter     counter = 0     # Sort through datafile records     for record in effective       # Skip null record       next if record.nil?       # Increase counter for each viable record       counter += 1     end     # Exit with normal data if array list is nil     return effective if  arraylist.nil? or arraylist == []         # Generate a list, if enabled     if MegaData::LIST_SYSTEM == true       # Create the new text file for the given data       f = File.new("MEGA " + oldfilename+".txt",  "w+")       f.puts "Initial Project Data:"       # Sort through the new data records       for record in effective         # Skip null record         next if record.nil?         # Create a formatted string of the ID and record data name         formatted = "ID: " + (record.id).to_s + " - " + record.name         # Output to the file         f.puts formatted       end         # Add 1 line spacing       f.puts " "     end     # Sort through each filename     for datafile in arraylist       # Apply Data folder prefix to datafile name       renamed_datafile = "Data/" + datafile       # Attach filename extension based on RGSS used       renamed_datafile = load_mega_extension(renamed_datafile)       # Acquire records from acquired filename       tempeffective = kernel_mega_load_data(renamed_datafile)       # Generate file heading for report if enabled       if MegaData::LIST_SYSTEM == true         f.puts "Data from: " + datafile       end       # Sort through datafile records       for record in tempeffective         # Skip null record         next if record.nil?         # Increase counter for viable record         counter += 1         # Redefine current record's ID by counter         record.id = counter         # Add record data to default datafile         effective.push record         # Output record for report if enabled         if MegaData::LIST_SYSTEM == true           # Create a formatted string of the ID and record data name           formatted = "ID: " + (record.id).to_s + " - " + record.name           # Output to the file           f.puts formatted         end       end       # Add 1 line spacing       if MegaData::LIST_SYSTEM == true         f.puts " "       end         end     # Close Report generator if enabled     if MegaData::LIST_SYSTEM == true       f.close     end        # Exit with expanded datafile     return effective   end   #--------------------------------------------------------------------------   # * load mega datafile extension   #     filename  : name of data file to have the extension attached   #--------------------------------------------------------------------------   def load_mega_extension(filename)     # Attach filename extension based on RGSS used     case MegaData::RGSS_SYSTEM     when 1       effective = filename + ".rvdata"     when 2       effective = filename + ".rxdata2"     else       effective = filename + ".rxdata"     end     return effective   end end



    Instructions
    The script itself is only the basis.  You need to create extra database files using your RPGMaker and copy the extra database files (be it rxdata, rvdata2...) into your real project's data folder and then add them to the list of arrays in the script.

    It does not adapt the 'event commands' in the editor to go beyond the 999 limit.  So one needs to have a matching set of script calls to go beyond that limit.  


    Example Utility Code
    The below code is meant for RPGMaker XP users, but shows how one can make routines within the Interpreter class (or Game_Interpreter) so one can use script calls that may go beyond the 999 editor cap.
    Spoiler: Example RMXP addon
                    Code:        
    #============================================================================== # ** Interpreter #------------------------------------------------------------------------------ #  This interpreter runs event commands. This class is used within the #  Game_System class and the Game_Event class. #==============================================================================  class Interpreter     #--------------------------------------------------------------------------   # * Test Party for an Actor   #     actor_id : actor ID   #--------------------------------------------------------------------------   def mega_actor_test(actor_id)     return true if $game_party.actors.include?(actor)     return false   end     #--------------------------------------------------------------------------   # * Change Actor   #     actor_id : actor ID   #     remove   : (optional: If true, removes actor from party)   #--------------------------------------------------------------------------   def mega_actor_change(actor_id=1, remove=false)     unless remove       $game_party.add_actor(actor_id)     else       $game_party.remove_actor(actor_id)     end   end      #--------------------------------------------------------------------------   # * Change Actor HP Increase   #     actor_id    : actor ID   #     value       : Value of HP gain (or loss if negative)   #     allow_death : if knockout allows death   #--------------------------------------------------------------------------   def mega_actor_HP(actor_id=1, value=0, allow_death=false)     actor = $game_actors[actor_id]     return if actor.nil?     $game_actors[actor_id].hp += value     if allow_death == false and $game_actors[actor_id].hp == 0       $game_actors[actor_id].hp = 1        end     # Determine game over     $game_temp.gameover = $game_party.all_dead?   end   #--------------------------------------------------------------------------   # * Change Actor SP Increase   #     actor_id    : actor ID   #     value       : Value of SP gain (or loss if negative)   #--------------------------------------------------------------------------   def mega_actor_HP(actor_id=1, value=0)     actor = $game_actors[actor_id]     return if actor.nil?     $game_actors[actor_id].sp += value   end      #--------------------------------------------------------------------------   # * Change Enemy HP Increase   #     enemy_id    : enemy ID   #     value       : Value of HP gain (or loss if negative)   #--------------------------------------------------------------------------   def mega_actor_HP(enemy_id=1, value=0)     enemy = $game_troop.enemies[enemy_id]     return if enemy.nil?     $game_troop.enemies[enemy_id].hp += value   end   #--------------------------------------------------------------------------   # * ChangeEnemy SP Increase   #     enemy_id    : enemy ID   #     value       : Value of SP gain (or loss if negative)   #--------------------------------------------------------------------------   def mega_actor_HP(enemy_id=1, value=0)     enemy = $game_troop.enemies[enemy_id]     return if enemy.nil?     $game_troop.enemies[enemy_id].sp += value   end        #--------------------------------------------------------------------------   # * Test Actor for a Skill   #     actor_id : actor ID   #     skill_id : skill ID   #--------------------------------------------------------------------------   def mega_skill_test(actor_id=1, skill_id=1)     actor = $game_actors[actor_id]     return false if actor.nil?     return true if actor.skills.include?(skill_id)     return false   end   #--------------------------------------------------------------------------   # * Change Skill   #     actor_id : actor ID   #     skill_id : skill ID   #     remove   : (optional: If true, removes skill from actor)   #--------------------------------------------------------------------------   def mega_skill_change(actor_id=1, skill_id=1, remove=false)     actor = $game_actors[actor_id]     return if actor.nil?     unless remove       actor.learn_skill(skill_id)     else       actor.forget_skill(skill_id)     end   end   #--------------------------------------------------------------------------   # * Test Party for an Item   #     item_id : item ID   #--------------------------------------------------------------------------   def mega_item_test(item_id=1)     return true if $game_party.items.include?(item_id)     return false   end     #--------------------------------------------------------------------------   # * Change Item   #     item_id : item ID   #     remove   : (optional: If true, removes item from party)   #--------------------------------------------------------------------------   def mega_item_change(item_id=1, qty=1, remove=false)     unless remove       $game_party.gain_item(item_id, qty)     else       $game_party.lose_item(item_id, qty)     end   end     #--------------------------------------------------------------------------   # * Test Party for a Weapon   #     weapon_id : item ID   #--------------------------------------------------------------------------   def mega_weapon_test(weapon_id=1)     return true if $game_party.weapons.include?(weapon_id)     return false   end     #--------------------------------------------------------------------------   # * Change Weapon   #     weapon_id : weapon ID   #     remove    : (optional: If true, removes weapon from party)   #--------------------------------------------------------------------------   def mega_weapon_change(weapon_id=1, qty=1, remove=false)     unless remove       $game_party.gain_weapon(weapon_id, qty)     else       $game_party.lose_weapon(weapon_id, qty)     end   end   #--------------------------------------------------------------------------   # * Test Party for a Armor   #     armor_id : armor ID   #--------------------------------------------------------------------------   def mega_armor_test(armor_id=1)     return true if $game_party.armors.include?(armor_id)     return false   end   #--------------------------------------------------------------------------   # * Change Armor   #     armor_id : armor ID   #     remove   : (optional: If true, removes armor from party)   #--------------------------------------------------------------------------   def mega_armor_change(armor_id=1, qty=1, remove=false)     unless remove       $game_party.gain_armor(armor_id, qty)     else       $game_party.lose_armor(armor_id, qty)     end   end   #--------------------------------------------------------------------------   # * Show Animation   #  anim_id : animation ID   #  event_id : event ID (-1 = player, 0 = this event, 1+ identified on map)   #--------------------------------------------------------------------------   def mega_animation_event(anim_id, event_id=0)     # Get character     character = get_character(event_id)     # If no character exists     if character == nil       # Continue       return true     end     # Set animation ID     character.animation_id = anim_id     # Continue     return true   end   end




    Compatibility
    This script should be usable for all Ruby-Scripting versions of RPGMaker, and it merely attaches code  to the 'load_data' method  within the Kernel module itself.  


    Credits and Thanks
    Thanks goes to a dear friend who inquired just this past week if one could get past the 999 item or skill limit.


    Terms and Conditions
    Free for use, even in commercial games.  Due credit is all that's required.


    本贴来自国际rpgmaker官方论坛作者:DerVVulfman处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/xp-vx-ace-lilys-mega-data-go-beyond-the-999-database-limit.83392/
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-7-14 18:03 , Processed in 0.111069 second(s), 52 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表