扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 53|回复: 0

[转载发布] (VX)RPG解密游戏简单菜单模板

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

    连续签到: 1 天

    [LV.7]常住居民III

    2637

    主题

    861

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

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

    灌水之王

    发表于 3 小时前 | 显示全部楼层 |阅读模式
    RPG解密游戏简易菜单模板(含增加菜单读档、更换领队、存档位增加、繁体改简体等)

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

    Scene_Menu
    1. #==============================================================================# ** 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.dispose  end  #--------------------------------------------------------------------------  # * 更新幀  #--------------------------------------------------------------------------  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    end  end  #--------------------------------------------------------------------------  # * 創建命令視窗(4項)  #--------------------------------------------------------------------------  def create_command_window    s1 = Vocab::item       # 物品    s2 = "读档"            # 读档    s3 = "队形"            # 队形 ★ 新增    s4 = Vocab::game_end   # 结束游戏    @command_window = Window_Command.new(160, [s1, s2, s3, s4])    @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[new_visible].selected = true        end      end    end  end  #--------------------------------------------------------------------------  # * 確定存檔/讀檔  #--------------------------------------------------------------------------  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 = @index  end  #--------------------------------------------------------------------------  # * 游標下移  #--------------------------------------------------------------------------  def cursor_down(wrap)    if @index < SAVEFILE_COUNT - 1 or wrap      @index = (@index + 1) % SAVEFILE_COUNT    end  end  #--------------------------------------------------------------------------  # * 游標上移  #--------------------------------------------------------------------------  def cursor_up(wrap)    if @index > 0 or wrap      @index = (@index - 1 + SAVEFILE_COUNT) % SAVEFILE_COUNT    end  end  #--------------------------------------------------------------------------  # * 獲取最新存檔的索引  #--------------------------------------------------------------------------  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 index  end  #--------------------------------------------------------------------------  # * 執行存檔(標準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_scene  end  #--------------------------------------------------------------------------  # * 執行讀檔(自動嘗試多種格式)  #--------------------------------------------------------------------------  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 nil  end  #--------------------------------------------------------------------------  # * 寫入存檔數據(標準VX格式,15項,BGM在後)  #--------------------------------------------------------------------------  def write_save_data(file)    characters = []    for i in 0...$game_party.members.size      actor = $game_party.members[i]      characters.push([actor.character_name, actor.character_index])    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)  # 15  end  #--------------------------------------------------------------------------  # * 讀取存檔 格式一:標準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[i].id].setup($game_party.members[i].id)    end  end  #--------------------------------------------------------------------------  # * 讀取存檔 格式二: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[i].id].setup($game_party.members[i].id)    end  end  #--------------------------------------------------------------------------  # * 返回原場景  #--------------------------------------------------------------------------  def return_scene    if @from_title      $scene = Scene_Title.new    elsif @from_event      $scene = Scene_Map.new    else      $scene = Scene_Menu.new(1)  # 返回菜單,停在「讀檔」位置    end  endend复制代码
    复制代码

    Vocab
    1. #==============================================================================# ** 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.level  end  # 等级 (缩写)  def self.level_a    return $data_system.terms.level_a  end  # HP  def self.hp    return $data_system.terms.hp  end  # HP (缩写)  def self.hp_a    return $data_system.terms.hp_a  end  # MP  def self.mp    return $data_system.terms.mp  end  # MP (缩写)  def self.mp_a    return $data_system.terms.mp_a  end  # 攻击力  def self.atk    return $data_system.terms.atk  end  # 防御力  def self.def    return $data_system.terms.def  end  # 意志力  def self.spi    return $data_system.terms.spi  end  # 敏捷力  def self.agi    return $data_system.terms.agi  end  # 武器  def self.weapon    return $data_system.terms.weapon  end  # 盾  def self.armor1    return $data_system.terms.armor1  end  # 头戴  def self.armor2    return $data_system.terms.armor2  end  # 身穿  def self.armor3    return $data_system.terms.armor3  end  # 佩戴  def self.armor4    return $data_system.terms.armor4  end  # 左手  def self.weapon1    return $data_system.terms.weapon1  end  # 右手  def self.weapon2    return $data_system.terms.weapon2  end  # 攻击  def self.attack    return $data_system.terms.attack  end  # 技能  def self.skill    return $data_system.terms.skill  end  # 防御  def self.guard    return $data_system.terms.guard  end  # 用品  def self.item    return $data_system.terms.item  end  # 整备  def self.equip    return $data_system.terms.equip  end  # 状态  def self.status    return $data_system.terms.status  end  # 存档  def self.save    return $data_system.terms.save  end  # 结束游戏  def self.game_end    return $data_system.terms.game_end  end  # 战斗  def self.fight    return $data_system.terms.fight  end  # 撤退  def self.escape    return $data_system.terms.escape  end  # 新的剧情  def self.new_game    return $data_system.terms.new_game  end  # 读取存档  def self.continue    return $data_system.terms.continue  end  # 退出游戏  def self.shutdown    return $data_system.terms.shutdown  end  # 返回标题画面  def self.to_title    return $data_system.terms.to_title  end  # 取消  def self.cancel    return $data_system.terms.cancel  end  # G (货币单位)  def self.gold    return $data_system.terms.gold  endend复制代码
    复制代码
    Tips:还需要手动改的地方
       Vocab 里的 level、hp、mp、atk、item、save 这些方法返回的是数据库里设置的用语,脚本里改不了,需要去数据库里改:
      打开数据库(F9)切换到「系统」标签找到「用语」一栏把里面的繁体词条逐个改成简体
       改完这两处,游戏的系统界面文字就基本都是简体了。剩下的物品名、技能名、对话等需要去数据库和事件里手动改。
                本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=499068  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

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

    本版积分规则

    关闭

    幸运抽奖

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

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2026-6-23 23:49 , Processed in 0.117959 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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