じ☆ve冰风 发表于 昨天 20:33

(VX)RPG解密游戏简单菜单模板

RPG解密游戏简易菜单模板(含增加菜单读档、更换领队、存档位增加、繁体改简体等)

序号         脚本名称                类型                                  内容
1         Scene_Menu                  修改               精简菜单为 4 项:物品、读档、队形、结束游戏
2         Scene_Formation         新建                队形调整场景,用 ← → 交换角色位置,自动更新领队变量
3         Scene_File                  修改                存档位从 4 个扩展到 20 个,支持上下滚动选择
4         Vocab                           修改                界面用语全部从繁体转简体

Scene_Menu #==============================================================================# ** Scene_Menu#------------------------------------------------------------------------------#菜單:物品 / 读档 / 队形 / 结束游戏#==============================================================================class Scene_Menu < Scene_Base#--------------------------------------------------------------------------# * 物件初始化#--------------------------------------------------------------------------def initialize(menu_index = 0)    @menu_index = 0# 光標永遠在第一項end#--------------------------------------------------------------------------# * 程式開始#--------------------------------------------------------------------------def start    super    create_menu_background    create_command_window    @status_window = Window_MenuStatus.new(160, 0)end#--------------------------------------------------------------------------# * 程式中止#--------------------------------------------------------------------------def terminate    super    dispose_menu_background    @command_window.dispose    @status_window.disposeend#--------------------------------------------------------------------------# * 更新幀#--------------------------------------------------------------------------def update    super    update_menu_background    @command_window.update    @status_window.update    if @command_window.active      update_command_selection    elsif @status_window.active      update_actor_selection    endend#--------------------------------------------------------------------------# * 創建命令視窗(4項)#--------------------------------------------------------------------------def create_command_window    s1 = Vocab::item       # 物品    s2 = "读档"            # 读档    s3 = "队形"            # 队形 ★ 新增    s4 = Vocab::game_end   # 结束游戏    @command_window = Window_Command.new(160, )    @command_window.index = @menu_index    @command_window.refresh      # 隊伍為空時禁用物品和隊形    if $game_party.members.size == 0      @command_window.draw_item(0, false)      @command_window.draw_item(2, false)    end    # 隊伍只有1人時禁用隊形    if $game_party.members.size = @top_index + VISIBLE_ROWS          @top_index = @index - VISIBLE_ROWS + 1          refresh_savefile_windows      end      new_visible = @index - @top_index      if new_visible >= 0 && new_visible < VISIBLE_ROWS          @savefile_windows.selected = true      end      end    endend#--------------------------------------------------------------------------# * 確定存檔/讀檔#--------------------------------------------------------------------------def determine_savefile    if @saving      Sound.play_save      do_save    else      if @savefile_windows[@index - @top_index].file_exist      Sound.play_load      do_load      else      Sound.play_buzzer      return      end    end    $game_temp.last_file_index = @indexend#--------------------------------------------------------------------------# * 游標下移#--------------------------------------------------------------------------def cursor_down(wrap)    if @index < SAVEFILE_COUNT - 1 or wrap      @index = (@index + 1) % SAVEFILE_COUNT    endend#--------------------------------------------------------------------------# * 游標上移#--------------------------------------------------------------------------def cursor_up(wrap)    if @index > 0 or wrap      @index = (@index - 1 + SAVEFILE_COUNT) % SAVEFILE_COUNT    endend#--------------------------------------------------------------------------# * 獲取最新存檔的索引#--------------------------------------------------------------------------def latest_file_index    index = 0    latest_time = Time.at(0)    (0...SAVEFILE_COUNT).each do |i|      filename = "Save#{i + 1}.rvdata"      if FileTest.exist?(filename)      time = File.mtime(filename)      if time > latest_time          latest_time = time          index = i      end      end    end    return indexend#--------------------------------------------------------------------------# * 執行存檔(標準VX格式,15項)#--------------------------------------------------------------------------def do_save    filename = "Save#{@index + 1}.rvdata"    current_window = @savefile_windows[@index - @top_index]    current_window.selected = false      file = File.open(filename, "wb")    write_save_data(file)    file.close      current_window.load_gamedata rescue nil    current_window.refresh    current_window.selected = true    Sound.play_save    return_sceneend#--------------------------------------------------------------------------# * 執行讀檔(自動嘗試多種格式)#--------------------------------------------------------------------------def do_load    filename = "Save#{@index + 1}.rvdata"    unless FileTest.exist?(filename)      Sound.play_buzzer      return    end    Sound.play_load      # 先嘗試格式一:標準VX格式(15項,BGM在後)    begin      file = File.open(filename, "rb")      read_save_data_standard(file)      file.close    rescue      file.close rescue nil      # 失敗就嘗試格式二:BGM在前(14項)      begin      file = File.open(filename, "rb")      read_save_data_bgm_first(file)      file.close      rescue      file.close rescue nil      # 都失敗就報錯      Sound.play_buzzer      return      end    end      $scene = Scene_Map.new    RPG::BGM.fade(1500)    Graphics.fadeout(60)    Graphics.wait(40)    @last_bgm.play rescue nil    @last_bgs.play rescue nilend#--------------------------------------------------------------------------# * 寫入存檔數據(標準VX格式,15項,BGM在後)#--------------------------------------------------------------------------def write_save_data(file)    characters = []    for i in 0...$game_party.members.size      actor = $game_party.members      characters.push()    end    $game_system.save_count += 1    $game_system.version_id = $data_system.version_id    @last_bgm = RPG::BGM.last    @last_bgs = RPG::BGS.last      Marshal.dump(characters,         file)# 1    Marshal.dump(Graphics.frame_count, file)# 2    Marshal.dump($game_system,         file)# 3    Marshal.dump($game_message,      file)# 4    Marshal.dump($game_switches,       file)# 5    Marshal.dump($game_variables,      file)# 6    Marshal.dump($game_self_switches,file)# 7    Marshal.dump($game_screen,         file)# 8 ★ 加上畫面數據    Marshal.dump($game_actors,         file)# 9    Marshal.dump($game_party,          file)# 10    Marshal.dump($game_troop,          file)# 11    Marshal.dump($game_map,            file)# 12    Marshal.dump($game_player,         file)# 13    Marshal.dump(@last_bgm,            file)# 14    Marshal.dump(@last_bgs,            file)# 15end#--------------------------------------------------------------------------# * 讀取存檔 格式一:標準VX(15項,BGM在後)#--------------------------------------------------------------------------def read_save_data_standard(file)    characters         = Marshal.load(file)    Graphics.frame_count = Marshal.load(file)    $game_system         = Marshal.load(file)    $game_message      = Marshal.load(file)    $game_switches       = Marshal.load(file)    $game_variables      = Marshal.load(file)    $game_self_switches= Marshal.load(file)    $game_screen         = Marshal.load(file)# ★ 畫面數據    $game_actors         = Marshal.load(file)    $game_party          = Marshal.load(file)    $game_troop          = Marshal.load(file)    $game_map            = Marshal.load(file)    $game_player         = Marshal.load(file)    @last_bgm            = Marshal.load(file)    @last_bgs            = Marshal.load(file)      if $game_system.version_id != $data_system.version_id      $game_map.setup($game_map.map_id)      $game_player.center($game_player.x, $game_player.y)    end      $game_party.members.size.times do |i|      $game_actors[$game_party.members.id].setup($game_party.members.id)    endend#--------------------------------------------------------------------------# * 讀取存檔 格式二:BGM在前(14項,無game_screen)#--------------------------------------------------------------------------def read_save_data_bgm_first(file)    characters         = Marshal.load(file)    Graphics.frame_count = Marshal.load(file)    @last_bgm            = Marshal.load(file)    @last_bgs            = Marshal.load(file)    $game_system         = Marshal.load(file)    $game_message      = Marshal.load(file)    $game_switches       = Marshal.load(file)    $game_variables      = Marshal.load(file)    $game_self_switches= Marshal.load(file)    $game_actors         = Marshal.load(file)    $game_party          = Marshal.load(file)    $game_troop          = Marshal.load(file)    $game_map            = Marshal.load(file)    $game_player         = Marshal.load(file)      if $game_system.version_id != $data_system.version_id      $game_map.setup($game_map.map_id)      $game_player.center($game_player.x, $game_player.y)    end      $game_party.members.size.times do |i|      $game_actors[$game_party.members.id].setup($game_party.members.id)    endend#--------------------------------------------------------------------------# * 返回原場景#--------------------------------------------------------------------------def return_scene    if @from_title      $scene = Scene_Title.new    elsif @from_event      $scene = Scene_Map.new    else      $scene = Scene_Menu.new(1)# 返回菜單,停在「讀檔」位置    endendend复制代码

Vocab #==============================================================================# ** Vocab#------------------------------------------------------------------------------#这个模块定义了界面用语和互动消息的显示内容。#它将一些信息定义为常量,而数据库里的用语数据读取自 $data_system 字段。#==============================================================================module Vocab# 交易界面ShopBuy         = "购入"ShopSell      = "售出"ShopCancel      = "放弃"Possession      = "拥有量"# 状态界面ExpTotal      = "当前经验值"ExpNext         = "%s提升所欠经验值"# 进度档案管理界面SaveMessage   = "请问您要把进度保存到第几个档位?"LoadMessage   = "请问您要从第几个档位元读取进度?"File            = "档位"# 在队伍里有多人时显示的讯息PartyName       = "%s一行人"# 基本战斗讯息Emerge          = "%s现身。"Preemptive      = "%s占据上风。"Surprise      = "%s被偷袭。"EscapeStart   = "%s准备撤退。"EscapeFailure   = "然而,撤退是徒劳的。"# 战斗结束讯息Victory         = "%s得胜。"Defeat          = "%s战败。"ObtainExp       = "获得%s点EXP。"ObtainGold      = "%s%s已获得。"ObtainItem      = "%s被发现。"LevelUp         = "%s%s提升为%s。"ObtainSkill   = "%s已经习得。"# 战斗指令DoAttack      = "%s发动攻击。"DoGuard         = "%s防御中。"DoEscape      = "%s撤退了。"DoWait          = "%s等待中。"UseItem         = "%s使用了%s。"# 暴击CriticalToEnemy = "狂暴攻击!!"CriticalToActor = "热血痛击!!"# 主角的行动结果    # 友情提示: %1$s 代表主角[下一段这个标志表示为敌人角色]    #            %2$s 代表HP/MP    #            %3$s 代表点数,也就是HP/MP的值ActorDamage   = "%s受到了%s点伤害。"ActorLoss       = "%1$s失去了%3$s点%2$s。"ActorDrain      = "%1$s被吸走了%3$s点%2$s。"ActorNoDamage   = "%s没有受到任何伤害。"ActorNoHit      = "落空!%s没有受到任何伤害。"ActorEvasion    = "%s躲过了攻击。"ActorRecovery   = "%1$s恢复了%3$s点%2$s。"# 敌人角色的行动结果EnemyDamage   = "%s受到了%s点伤害。"EnemyLoss       = "%1$s失去了%3$s点%2$s。"EnemyDrain      = "%1$s被吸走了%3$s点%2$s。"EnemyNoDamage   = "%s没有受到任何伤害。"EnemyNoHit      = "落空!%s没有受到任何伤害。"EnemyEvasion    = "%s躲过了攻击。"EnemyRecovery   = "%1$s恢复了%3$s点%2$s。"# 物品和非实体攻击类技能使用无效ActionFailure   = "%s没有受到任何影响。"# 等级def self.level    return $data_system.terms.levelend# 等级 (缩写)def self.level_a    return $data_system.terms.level_aend# HPdef self.hp    return $data_system.terms.hpend# HP (缩写)def self.hp_a    return $data_system.terms.hp_aend# MPdef self.mp    return $data_system.terms.mpend# MP (缩写)def self.mp_a    return $data_system.terms.mp_aend# 攻击力def self.atk    return $data_system.terms.atkend# 防御力def self.def    return $data_system.terms.defend# 意志力def self.spi    return $data_system.terms.spiend# 敏捷力def self.agi    return $data_system.terms.agiend# 武器def self.weapon    return $data_system.terms.weaponend# 盾def self.armor1    return $data_system.terms.armor1end# 头戴def self.armor2    return $data_system.terms.armor2end# 身穿def self.armor3    return $data_system.terms.armor3end# 佩戴def self.armor4    return $data_system.terms.armor4end# 左手def self.weapon1    return $data_system.terms.weapon1end# 右手def self.weapon2    return $data_system.terms.weapon2end# 攻击def self.attack    return $data_system.terms.attackend# 技能def self.skill    return $data_system.terms.skillend# 防御def self.guard    return $data_system.terms.guardend# 用品def self.item    return $data_system.terms.itemend# 整备def self.equip    return $data_system.terms.equipend# 状态def self.status    return $data_system.terms.statusend# 存档def self.save    return $data_system.terms.saveend# 结束游戏def self.game_end    return $data_system.terms.game_endend# 战斗def self.fight    return $data_system.terms.fightend# 撤退def self.escape    return $data_system.terms.escapeend# 新的剧情def self.new_game    return $data_system.terms.new_gameend# 读取存档def self.continue    return $data_system.terms.continueend# 退出游戏def self.shutdown    return $data_system.terms.shutdownend# 返回标题画面def self.to_title    return $data_system.terms.to_titleend# 取消def self.cancel    return $data_system.terms.cancelend# G (货币单位)def self.gold    return $data_system.terms.goldendend复制代码Tips:还需要手动改的地方
   Vocab 里的 level、hp、mp、atk、item、save 这些方法返回的是数据库里设置的用语,脚本里改不了,需要去数据库里改:
打开数据库(F9)切换到「系统」标签找到「用语」一栏把里面的繁体词条逐个改成简体
   改完这两处,游戏的系统界面文字就基本都是简体了。剩下的物品名、技能名、对话等需要去数据库和事件里手动改。
            本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=499068若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: (VX)RPG解密游戏简单菜单模板