- 累计送礼:
 - 0 个
 
 - 累计收礼:
 - 0 个
 
 TA的每日心情  | 开心 2025-10-18 22:41 | 
|---|
 
  签到天数: 165 天 连续签到: 1 天 [LV.7]常住居民III 
  
管理员 
    
    
        - VIP
 
        - 6 
 
     
    
        - 卡币
 
        - 14829 
 
     
    
        - OK点
 
        - 16 
 
     
    
    - 推广点
 
    - 0 
 
     
	
    - 同能卷
 
    - 0 
 
     
  
	- 积分
 - 17954
 
 
  
 
  
 | 
 
============================================ 
============================================ 
●仿 大航海时代 公正存档● 
============================================ 
============================================ 
说明: 
1、公正存档的作用是控制使用者无法使用S\L大 
法,即保存为公正存档后必须退出游戏,退出游 
戏前必须保存公正存档。如果游戏结束则自动取 
消公正存档记号。 
2、该脚本修改了exit方法,所以右上角的红色退 
出按钮作用被修改。在以下场景且为公正进 
度的存档点击该按钮会提示是否保存。 
Map Menu 
3、在游戏中如果像判定是否是公正存档请使用以 
下脚本:$game_system.fair == -1 
具体请参考范例中的艾斯迪儿事件 
4、范例中1号存档是公正存档,2号存档是非公正 
存档。 
============================================ 
作用: 
可以限制游戏者不得通过回档来作弊,对于公正 
存档的玩家,可以有隐藏结局等奖励,具体请参 
考大航海时代4+ 
============================================ 
范例下载: 右击 目标另存为下载
紧急差错:349行出错,请修改为    if $scene.is_a?(Scene_Map) || $scene.is_a?(Scene_Menu)
脚本内容 - #==============================================================================# ■ Scene_SaveE#------------------------------------------------------------------------------#  处理存档画面的类。#==============================================================================class Scene_SaveE < Scene_File  #--------------------------------------------------------------------------  # ● 初始化对像  #--------------------------------------------------------------------------  def initialize(mode = 0)    super("要保存到这个文件吗?")    @mode = mode  end  #--------------------------------------------------------------------------  # ● 确定时的处理  #--------------------------------------------------------------------------  def on_decision(filename)    # 演奏存档 SE    $game_system.se_play($data_system.save_se)    if @choose_window.active || $game_system.fair == 0      @choose_window.active = false      @choose_window.visible = false      if @choose_window.index == 0 && $game_system.fair == -1        $game_system.fair = 1      else        $game_system.fair = 0      end      # 写入存档数据      file = File.open(filename, "wb")      write_save_data(file)      file.close      $scene = nil if @mode == 0      $scene = Scene_Title.new if @mode == 1    else      @help_window.set_text("是否存储为公正存档?")      @choose_window.active = true      @choose_window.visible = true    end  end  #--------------------------------------------------------------------------  # ● 取消时的处理  #--------------------------------------------------------------------------  def on_cancel    # 演奏取消 SE    unless @choose_window.active    $game_system.se_play($data_system.cancel_se)    $scene = Scene_Exit.new    else      @choose_window.active = false      @choose_window.visible = false      @help_window.set_text("要保存到这个文件吗?")    end  end  #--------------------------------------------------------------------------  # ● 写入存档数据  #     file : 写入用文件对像 (已经打开)  #--------------------------------------------------------------------------  def write_save_data(file)    # 生成描绘存档文件用的角色图形    characters = []    for i in 0...$game_party.actors.size      actor = $game_party.actors[i]      characters.push([actor.character_name, actor.character_hue])    end    # 写入描绘存档文件用的角色数据    Marshal.dump(characters, file)    # 写入测量游戏时间用画面计数    Marshal.dump(Graphics.frame_count, file)    # 增加 1 次存档次数    $game_system.save_count += 1    # 保存魔法编号    # (将编辑器保存的值以随机值替换)    $game_system.magic_number = $data_system.magic_number    # 写入各种游戏对像    Marshal.dump($game_system, file)    Marshal.dump($game_switches, file)    Marshal.dump($game_variables, file)    Marshal.dump($game_self_switches, file)    Marshal.dump($game_screen, file)    Marshal.dump($game_actors, file)    Marshal.dump($game_party, file)    Marshal.dump($game_troop, file)    Marshal.dump($game_map, file)    Marshal.dump($game_player, file)  endendclass Game_System  #attr  :save_id,true  attr  :fair,true  alias ini initialize  def initialize    #@save_id = 0    @fair = -1    ini  endendclass Window_SaveFile < Window_Base  def refresh    self.contents.clear    # 描绘文件编号    self.contents.font.color = normal_color    name = "文件 #{@file_index + 1}"    self.contents.draw_text(4, 0, 600, 32, name)    @name_width = contents.text_size(name).width    # 存档文件存在的情况下    if @file_exist      # 描绘角色      for i in [url=mailto:[email protected]][email protected][/url]        bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])        cw = bitmap.rect.width / 4        ch = bitmap.rect.height / 4        src_rect = Rect.new(0, 0, cw, ch)        x = 300 - @characters.size * 32 + i * 64 - cw / 2        self.contents.blt(x, 68 - ch, bitmap, src_rect)      end      # 描绘游戏时间      hour = @total_sec / 60 / 60      min = @total_sec / 60 % 60      sec = @total_sec % 60      time_string = sprintf("%02d:%02d:%02d", hour, min, sec)      self.contents.font.color = normal_color      self.contents.draw_text(4, 8, 600, 32, time_string, 2)      # 描绘时间标记      self.contents.font.color = normal_color      time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")      self.contents.draw_text(4, 40, 600, 32, time_string, 2)      if @game_system.fair == 1        self.contents.font.color = system_color        self.contents.draw_text(4, 8, 600-24*4, 32, "公正进度",2)      end    end  endendclass Scene_Load < Scene_File  alias od on_decision  def on_decision(filename)    od(filename)#    $game_system.save_id = filename    $game_system.fair = 0 if $game_system.fair == -1    $game_system.fair = -1 if $game_system.fair == 1      file = File.open(filename, "wb") if FileTest.exist?(filename)      write_save_data(file) if FileTest.exist?(filename)      file.close if FileTest.exist?(filename)  endendclass Scene_Save < Scene_File    def on_decision(filename)    # 演奏存档 SE    $game_system.se_play($data_system.save_se)    if @choose_window.active || $game_system.fair == 0      @choose_window.active = false      @choose_window.visible = false      if @choose_window.index == 0 && $game_system.fair != 0        $game_system.fair = 1      else        $game_system.fair = 0      end      # 写入存档数据      file = File.open(filename, "wb")      write_save_data(file)      file.close      # 如果被事件调用      # 切换到菜单画面      if $game_system.fair == 0        if $game_temp.save_calling        # 清除存档调用标志        $game_temp.save_calling = false        # 切换到地图画面        $scene = Scene_Map.new        return        end        $scene = Scene_Menu.new(4)      else        $scene = nil      end    else      @help_window.set_text("是否存储为公正存档?")      @choose_window.active = true      @choose_window.visible = true    end  end  #--------------------------------------------------------------------------  # ● 取消时的处理  #--------------------------------------------------------------------------  def on_cancel    # 演奏取消 SE    unless @choose_window.active    $game_system.se_play($data_system.cancel_se)    # 如果被事件调用    if $game_temp.save_calling      # 清除存档调用标志      $game_temp.save_calling = false      # 切换到地图画面      $scene = Scene_Map.new      return    end    # 切换到菜单画面    $scene = Scene_Menu.new(4)    else      @choose_window.active = false      @choose_window.visible = false      @help_window.set_text("要保存到这个文件吗?")    end  endendclass Scene_File  alias m main  def main    @choose_window = Window_Command.new(64,["是","否"])    @choose_window.x=640-64    @choose_window.y = 32    @choose_window.z = 9999    @choose_window.active = false    @choose_window.visible = false    m    @choose_window.dispose  end    def update    # 刷新窗口    @choose_window.update    @help_window.update    for i in @savefile_windows      i.update    end    # 按下 C 键的情况下    if Input.trigger?(Input::C)      # 调用过程 on_decision (定义继承目标)      on_decision(make_filename(@file_index))      $game_temp.last_file_index = @file_index      return    end    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 调用过程 on_cancel (定义继承目标)      on_cancel      return    end    # 按下方向键下的情况下    if Input.repeat?(Input::DOWN) && !@choose_window.active      # 方向键下的按下状态不是重复的情况下、      # 并且光标的位置在 3 以前的情况下      if Input.trigger?(Input::DOWN) or @file_index < 3        # 演奏光标 SE        $game_system.se_play($data_system.cursor_se)        # 光标向下移动        @savefile_windows[@file_index].selected = false        @file_index = (@file_index + 1) % 4        @savefile_windows[@file_index].selected = true        return      end    end    # 按下方向键上的情况下    if Input.repeat?(Input::UP) && !@choose_window.active      # 方向键上的按下状态不是重复的情况下、      # 并且光标的位置在 0 以后的情况下      if Input.trigger?(Input::UP) or @file_index > 0        # 演奏光标 SE        $game_system.se_play($data_system.cursor_se)        # 光标向上移动        @savefile_windows[@file_index].selected = false        @file_index = (@file_index + 3) % 4        @savefile_windows[@file_index].selected = true        return      end    end  endend  def write_save_data(file)    # 生成描绘存档文件用的角色图形    characters = []    for i in 0...$game_party.actors.size      actor = $game_party.actors[i]      characters.push([actor.character_name, actor.character_hue])    end    # 写入描绘存档文件用的角色数据    Marshal.dump(characters, file)    # 写入测量游戏时间用画面计数    Marshal.dump(Graphics.frame_count, file)    # 增加 1 次存档次数    $game_system.save_count += 1    # 保存魔法编号    # (将编辑器保存的值以随机值替换)    $game_system.magic_number = $data_system.magic_number    # 写入各种游戏对像    Marshal.dump($game_system, file)    Marshal.dump($game_switches, file)    Marshal.dump($game_variables, file)    Marshal.dump($game_self_switches, file)    Marshal.dump($game_screen, file)    Marshal.dump($game_actors, file)    Marshal.dump($game_party, file)    Marshal.dump($game_troop, file)    Marshal.dump($game_map, file)    Marshal.dump($game_player, file)  endclass Scene_Exit  def initialize(mode = 0)    @mode = mode  end  def main    @help_window = Window_Base.new(0,240-32,640,64)    @help_window.contents = Bitmap.new(640 - 32, 32)    @help_window.contents.draw_text(0,0,640-32,32,"如果现在保存此进度将成为公正进度,是否保存?",1)    @choose_window = Window_Command.new(64,["是","否"])    @choose_window.x = 320-32    @choose_window.y = 320    @choose_window.active = true    # 执行过渡    Graphics.transition    # 主循环    loop do      # 刷新游戏画面      Graphics.update      # 刷新输入信息      Input.update      # 刷新画面      update      # 如果画面切换的话就中断循环      if $scene != self        break      end    end    # 准备过渡    Graphics.freeze    # 释放窗口    @help_window.dispose    @choose_window.dispose  end  def update    @choose_window.update    if Input.trigger?(Input::C)      $game_system.se_play($data_system.decision_se)      if @choose_window.index == 0        $scene = Scene_SaveE.new(@mode)      else      $scene = nil if @mode == 0      $scene = Scene_Title.new if @mode == 1      end    end  endenddef exit(value)  if $scene.is_a?(Scene_Map) || $scene.is_a?(Scene_Menu)    $scene = Scene_Exit.new  else    $scene = nil  endendclass Scene_End  alias tt command_to_title  def command_to_title    if $game_system.fair == -1      $scene = Scene_Exit.new(1)    else      tt    end  end  alias s command_shutdown  def command_shutdown    if $game_system.fair == -1      $scene = Scene_Exit.new    else      s    end  endend复制代码
 
  复制代码 
 
 
 
             本帖来自P1论坛作者上帝的眼睛,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=139244  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。  |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 
		
		
		 
 
 |