设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3998|回复: 2
打印 上一主题 下一主题

[原创发布] 仿 大航海时代 公正存档

[复制链接]

Lv1.梦旅人

神之瞳

梦石
0
星屑
60
在线时间
5 小时
注册时间
2009-7-5
帖子
314
跳转到指定楼层
1
发表于 2010-6-17 22:06:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 上帝的眼睛 于 2010-6-20 10:43 编辑

============================================
============================================
●仿 大航海时代 公正存档●
============================================
============================================
说明:
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)
脚本内容
  1. #==============================================================================
  2. # ■ Scene_SaveE
  3. #------------------------------------------------------------------------------
  4. #  处理存档画面的类。
  5. #==============================================================================

  6. class Scene_SaveE < Scene_File
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize(mode = 0)
  11.     super("要保存到这个文件吗?")
  12.     @mode = mode
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 确定时的处理
  16.   #--------------------------------------------------------------------------
  17.   def on_decision(filename)
  18.     # 演奏存档 SE
  19.     $game_system.se_play($data_system.save_se)
  20.     if @choose_window.active || $game_system.fair == 0
  21.       @choose_window.active = false
  22.       @choose_window.visible = false
  23.       if @choose_window.index == 0 && $game_system.fair == -1
  24.         $game_system.fair = 1
  25.       else
  26.         $game_system.fair = 0
  27.       end
  28.       # 写入存档数据
  29.       file = File.open(filename, "wb")
  30.       write_save_data(file)
  31.       file.close
  32.       $scene = nil if @mode == 0
  33.       $scene = Scene_Title.new if @mode == 1
  34.     else
  35.       @help_window.set_text("是否存储为公正存档?")
  36.       @choose_window.active = true
  37.       @choose_window.visible = true
  38.     end
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 取消时的处理
  42.   #--------------------------------------------------------------------------
  43.   def on_cancel
  44.     # 演奏取消 SE
  45.     unless @choose_window.active
  46.     $game_system.se_play($data_system.cancel_se)
  47.     $scene = Scene_Exit.new
  48.     else
  49.       @choose_window.active = false
  50.       @choose_window.visible = false
  51.       @help_window.set_text("要保存到这个文件吗?")
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 写入存档数据
  56.   #     file : 写入用文件对像 (已经打开)
  57.   #--------------------------------------------------------------------------
  58.   def write_save_data(file)
  59.     # 生成描绘存档文件用的角色图形
  60.     characters = []
  61.     for i in 0...$game_party.actors.size
  62.       actor = $game_party.actors[i]
  63.       characters.push([actor.character_name, actor.character_hue])
  64.     end
  65.     # 写入描绘存档文件用的角色数据
  66.     Marshal.dump(characters, file)
  67.     # 写入测量游戏时间用画面计数
  68.     Marshal.dump(Graphics.frame_count, file)
  69.     # 增加 1 次存档次数
  70.     $game_system.save_count += 1
  71.     # 保存魔法编号
  72.     # (将编辑器保存的值以随机值替换)
  73.     $game_system.magic_number = $data_system.magic_number
  74.     # 写入各种游戏对像
  75.     Marshal.dump($game_system, file)
  76.     Marshal.dump($game_switches, file)
  77.     Marshal.dump($game_variables, file)
  78.     Marshal.dump($game_self_switches, file)
  79.     Marshal.dump($game_screen, file)
  80.     Marshal.dump($game_actors, file)
  81.     Marshal.dump($game_party, file)
  82.     Marshal.dump($game_troop, file)
  83.     Marshal.dump($game_map, file)
  84.     Marshal.dump($game_player, file)
  85.   end
  86. end


  87. class Game_System
  88.   #attr  :save_id,true
  89.   attr  :fair,true
  90.   alias ini initialize
  91.   def initialize
  92.     #@save_id = 0
  93.     @fair = -1
  94.     ini
  95.   end
  96. end
  97. class Window_SaveFile < Window_Base
  98.   def refresh
  99.     self.contents.clear
  100.     # 描绘文件编号
  101.     self.contents.font.color = normal_color
  102.     name = "文件 #{@file_index + 1}"
  103.     self.contents.draw_text(4, 0, 600, 32, name)
  104.     @name_width = contents.text_size(name).width
  105.     # 存档文件存在的情况下
  106.     if @file_exist
  107.       # 描绘角色
  108.       for i in [url=mailto:[email protected]][email protected][/url]
  109.         bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
  110.         cw = bitmap.rect.width / 4
  111.         ch = bitmap.rect.height / 4
  112.         src_rect = Rect.new(0, 0, cw, ch)
  113.         x = 300 - @characters.size * 32 + i * 64 - cw / 2
  114.         self.contents.blt(x, 68 - ch, bitmap, src_rect)
  115.       end
  116.       # 描绘游戏时间
  117.       hour = @total_sec / 60 / 60
  118.       min = @total_sec / 60 % 60
  119.       sec = @total_sec % 60
  120.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  121.       self.contents.font.color = normal_color
  122.       self.contents.draw_text(4, 8, 600, 32, time_string, 2)
  123.       # 描绘时间标记
  124.       self.contents.font.color = normal_color
  125.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  126.       self.contents.draw_text(4, 40, 600, 32, time_string, 2)
  127.       if @game_system.fair == 1
  128.         self.contents.font.color = system_color
  129.         self.contents.draw_text(4, 8, 600-24*4, 32, "公正进度",2)
  130.       end
  131.     end
  132.   end
  133. end

  134. class Scene_Load < Scene_File
  135.   alias od on_decision
  136.   def on_decision(filename)
  137.     od(filename)
  138. #    $game_system.save_id = filename
  139.     $game_system.fair = 0 if $game_system.fair == -1
  140.     $game_system.fair = -1 if $game_system.fair == 1
  141.       file = File.open(filename, "wb") if FileTest.exist?(filename)
  142.       write_save_data(file) if FileTest.exist?(filename)
  143.       file.close if FileTest.exist?(filename)
  144.   end
  145. end
  146. class Scene_Save < Scene_File
  147.     def on_decision(filename)
  148.     # 演奏存档 SE
  149.     $game_system.se_play($data_system.save_se)
  150.     if @choose_window.active || $game_system.fair == 0
  151.       @choose_window.active = false
  152.       @choose_window.visible = false
  153.       if @choose_window.index == 0 && $game_system.fair != 0
  154.         $game_system.fair = 1
  155.       else
  156.         $game_system.fair = 0
  157.       end
  158.       # 写入存档数据
  159.       file = File.open(filename, "wb")
  160.       write_save_data(file)
  161.       file.close
  162.       # 如果被事件调用

  163.       # 切换到菜单画面
  164.       if $game_system.fair == 0
  165.         if $game_temp.save_calling
  166.         # 清除存档调用标志
  167.         $game_temp.save_calling = false
  168.         # 切换到地图画面
  169.         $scene = Scene_Map.new
  170.         return
  171.         end
  172.         $scene = Scene_Menu.new(4)
  173.       else
  174.         $scene = nil
  175.       end
  176.     else
  177.       @help_window.set_text("是否存储为公正存档?")
  178.       @choose_window.active = true
  179.       @choose_window.visible = true
  180.     end
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 取消时的处理
  184.   #--------------------------------------------------------------------------
  185.   def on_cancel
  186.     # 演奏取消 SE
  187.     unless @choose_window.active
  188.     $game_system.se_play($data_system.cancel_se)
  189.     # 如果被事件调用
  190.     if $game_temp.save_calling
  191.       # 清除存档调用标志
  192.       $game_temp.save_calling = false
  193.       # 切换到地图画面
  194.       $scene = Scene_Map.new
  195.       return
  196.     end
  197.     # 切换到菜单画面
  198.     $scene = Scene_Menu.new(4)
  199.     else
  200.       @choose_window.active = false
  201.       @choose_window.visible = false
  202.       @help_window.set_text("要保存到这个文件吗?")
  203.     end
  204.   end
  205. end
  206. class Scene_File
  207.   alias m main
  208.   def main
  209.     @choose_window = Window_Command.new(64,["是","否"])
  210.     @choose_window.x=640-64
  211.     @choose_window.y = 32
  212.     @choose_window.z = 9999
  213.     @choose_window.active = false
  214.     @choose_window.visible = false
  215.     m
  216.     @choose_window.dispose
  217.   end
  218.     def update
  219.     # 刷新窗口
  220.     @choose_window.update
  221.     @help_window.update
  222.     for i in @savefile_windows
  223.       i.update
  224.     end
  225.     # 按下 C 键的情况下
  226.     if Input.trigger?(Input::C)
  227.       # 调用过程 on_decision (定义继承目标)

  228.       on_decision(make_filename(@file_index))
  229.       $game_temp.last_file_index = @file_index
  230.       return
  231.     end
  232.     # 按下 B 键的情况下
  233.     if Input.trigger?(Input::B)
  234.       # 调用过程 on_cancel (定义继承目标)
  235.       on_cancel
  236.       return
  237.     end
  238.     # 按下方向键下的情况下
  239.     if Input.repeat?(Input::DOWN) && !@choose_window.active
  240.       # 方向键下的按下状态不是重复的情况下、
  241.       # 并且光标的位置在 3 以前的情况下
  242.       if Input.trigger?(Input::DOWN) or @file_index < 3
  243.         # 演奏光标 SE
  244.         $game_system.se_play($data_system.cursor_se)
  245.         # 光标向下移动
  246.         @savefile_windows[@file_index].selected = false
  247.         @file_index = (@file_index + 1) % 4
  248.         @savefile_windows[@file_index].selected = true
  249.         return
  250.       end
  251.     end
  252.     # 按下方向键上的情况下
  253.     if Input.repeat?(Input::UP) && !@choose_window.active
  254.       # 方向键上的按下状态不是重复的情况下、
  255.       # 并且光标的位置在 0 以后的情况下
  256.       if Input.trigger?(Input::UP) or @file_index > 0
  257.         # 演奏光标 SE
  258.         $game_system.se_play($data_system.cursor_se)
  259.         # 光标向上移动
  260.         @savefile_windows[@file_index].selected = false
  261.         @file_index = (@file_index + 3) % 4
  262.         @savefile_windows[@file_index].selected = true
  263.         return
  264.       end
  265.     end
  266.   end
  267. end
  268.   def write_save_data(file)
  269.     # 生成描绘存档文件用的角色图形
  270.     characters = []
  271.     for i in 0...$game_party.actors.size
  272.       actor = $game_party.actors[i]
  273.       characters.push([actor.character_name, actor.character_hue])
  274.     end
  275.     # 写入描绘存档文件用的角色数据
  276.     Marshal.dump(characters, file)
  277.     # 写入测量游戏时间用画面计数
  278.     Marshal.dump(Graphics.frame_count, file)
  279.     # 增加 1 次存档次数
  280.     $game_system.save_count += 1
  281.     # 保存魔法编号
  282.     # (将编辑器保存的值以随机值替换)
  283.     $game_system.magic_number = $data_system.magic_number
  284.     # 写入各种游戏对像
  285.     Marshal.dump($game_system, file)
  286.     Marshal.dump($game_switches, file)
  287.     Marshal.dump($game_variables, file)
  288.     Marshal.dump($game_self_switches, file)
  289.     Marshal.dump($game_screen, file)
  290.     Marshal.dump($game_actors, file)
  291.     Marshal.dump($game_party, file)
  292.     Marshal.dump($game_troop, file)
  293.     Marshal.dump($game_map, file)
  294.     Marshal.dump($game_player, file)
  295.   end
  296. class Scene_Exit
  297.   def initialize(mode = 0)
  298.     @mode = mode
  299.   end
  300.   def main
  301.     @help_window = Window_Base.new(0,240-32,640,64)
  302.     @help_window.contents = Bitmap.new(640 - 32, 32)
  303.     @help_window.contents.draw_text(0,0,640-32,32,"如果现在保存此进度将成为公正进度,是否保存?",1)
  304.     @choose_window = Window_Command.new(64,["是","否"])
  305.     @choose_window.x = 320-32
  306.     @choose_window.y = 320
  307.     @choose_window.active = true
  308.     # 执行过渡
  309.     Graphics.transition
  310.     # 主循环
  311.     loop do
  312.       # 刷新游戏画面
  313.       Graphics.update
  314.       # 刷新输入信息
  315.       Input.update
  316.       # 刷新画面
  317.       update
  318.       # 如果画面切换的话就中断循环
  319.       if $scene != self
  320.         break
  321.       end
  322.     end
  323.     # 准备过渡
  324.     Graphics.freeze
  325.     # 释放窗口
  326.     @help_window.dispose
  327.     @choose_window.dispose
  328.   end
  329.   def update
  330.     @choose_window.update
  331.     if Input.trigger?(Input::C)
  332.       $game_system.se_play($data_system.decision_se)
  333.       if @choose_window.index == 0
  334.         $scene = Scene_SaveE.new(@mode)
  335.       else
  336.       $scene = nil if @mode == 0
  337.       $scene = Scene_Title.new if @mode == 1
  338.       end
  339.     end
  340.   end
  341. end
  342. def exit(value)
  343.   if $scene.is_a?(Scene_Map) || $scene.is_a?(Scene_Menu)
  344.     $scene = Scene_Exit.new
  345.   else
  346.     $scene = nil
  347.   end
  348. end
  349. class Scene_End
  350.   alias tt command_to_title
  351.   def command_to_title
  352.     if $game_system.fair == -1
  353.       $scene = Scene_Exit.new(1)
  354.     else
  355.       tt
  356.     end
  357.   end
  358.   alias s command_shutdown
  359.   def command_shutdown
  360.     if $game_system.fair == -1
  361.       $scene = Scene_Exit.new
  362.     else
  363.       s
  364.     end
  365.   end
  366. end
复制代码




Lv1.梦旅人

神之瞳

梦石
0
星屑
60
在线时间
5 小时
注册时间
2009-7-5
帖子
314
2
 楼主| 发表于 2010-6-17 22:19:06 | 只看该作者
本帖最后由 上帝的眼睛 于 2010-6-18 08:52 编辑

范例已更新,可以下载

九月三日

  有时我真不理解,怎么有另一个人能够爱她,可以爱她,殊不知我爱她爱得如此真切,如此忘情,如此情意缱倦,除了她我什么也不了解,什么也不知道,什么也没有呀!
——摘自《少年维特之烦恼》

谨以 纪念一段消逝了的感情
ILY ZXY

NOIp什么的最讨厌了!

啊……讨厌,为什么我的网盘全部坏掉了……
zoomshare恢复了,虚惊一场
可恶的skydrive,我XX你的OO,竟把我的帐号封了!
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2010-6-24
帖子
8
3
发表于 2010-6-25 08:27:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 05:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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