Project1

标题: 扩展游戏设计思路:超级变量XP版 [打印本页]

作者: 九夜神尊    时间: 2010-10-6 15:50
标题: 扩展游戏设计思路:超级变量XP版
本帖最后由 九夜神尊 于 2010-10-6 21:25 编辑

直接粘贴VX的发布帖。



这也是我在做游戏的时候的一个灵感。
超级变量

超级变量:这些变量表面上和一般变量完全相同,但是不同的是
               这些变量一旦改变,立马保存。但是不会影响到游戏的正常存档



改变变量以后,直接关闭游戏。打开游戏继续有游戏,变量为更改后的值。


超级变量是用来对存档做一个辅助作用。作用有很多很多。
我在口述一个作用吧。
给每一个存档设定一个存档次数。一个保存在游戏内,一个保存在超级变量
每存档一次,两个数均+1


如果玩家有通过复制存档来SL游戏,会出现存档次数不符合。完全可以在游戏内部发现
  1. #==================================================================
  2. # ■SUPER_VARISBLES
  3. #------------------------------------------------------------------
  4. #  超级变量
  5. #===================================================================


  6. =begin


  7. 版本1.0

  8. 脚本作用:独立一些变量为特殊变量,这些变量在改变的同时就会保存。

  9. 使用方法:设置变量首尾ID,此外需设定特殊变量保存位置(可以让玩家找不到的位置)

  10. 注意事项:特殊变量最好不要做其他用途。
  11.           使用特殊变量后存档由两部分组成
  12.           请确保变量总数超过尾ID
  13.           超级变量首变量和尾变量被系统保利,请勿使用
  14.          

  15. 可能冲突:暂无,若冲突请查看○标志的地方。


  16. =end

  17. class Super_Varisbles
  18.   VAR_HEAD = 81  #设定超级变量首ID
  19.   VAR_LAST = 100 #设定超级变量尾ID
  20.   SEAT = ""#这里设定保存的位置,默认为游戏目录,例"save/"即为保存在save文件夹中。
  21.   #原设定表示81-100号变量为超级变量。
  22.   #--------------------------------------------------------------------------
  23.   # ● 初始化
  24.   #--------------------------------------------------------------------------
  25.   def index
  26.     $game_variables[VAR_HEAD]+1
  27.   end
  28.   
  29.   #--------------------------------------------------------------------------
  30.   # ● 执行存档
  31.   # id :存档编号,若存档编号为空则自动寻找存档编号
  32.   #--------------------------------------------------------------------------
  33.   def save(id = 0)
  34.     id = id == 0? index : id
  35.     var = []
  36.     for i in VAR_HEAD...VAR_LAST
  37.       var.push($game_variables[i])
  38.     end
  39.     file = File.open(file_name(id), "wb")
  40.     Marshal.dump(var,file)  #写入数据
  41.     file.close
  42.    
  43.   end#save(id = 0)
  44.   #--------------------------------------------------------------------------
  45.   # ● 执行读档
  46.   # id :存档编号
  47.   #--------------------------------------------------------------------------
  48.   def load(id=0)
  49.     id = id == 0? index : id
  50.     return if !FileTest.exist?(file_name(id))
  51.     file = File.open(file_name(id), "rb")
  52.     var = Marshal.load(file) #读取数据
  53.     file.close
  54.     for i in VAR_HEAD...VAR_LAST
  55.       $game_variables[i] = var[i-VAR_HEAD]
  56.     end
  57.   end #load(id=0)
  58.   #--------------------------------------------------------------------------
  59.   # ● 获取文件名
  60.   # id :存档编号
  61.   #--------------------------------------------------------------------------
  62.   def file_name(id=0)
  63.     SEAT+"super_var"+ (id).to_s + ".rvdata"
  64.   end

  65.   
  66.   
  67.   
  68.   
  69. end#SUPER_VARISBLES
  70. #==============================================================================
  71. # ■ Scene_Save
  72. #------------------------------------------------------------------------------
  73. #  处理存档画面的类。
  74. #==============================================================================

  75. class Scene_Save < Scene_File
  76.   

  77.   #--------------------------------------------------------------------------
  78.   # ○ 执行存档
  79.   #--------------------------------------------------------------------------
  80.   alias super_varisbles_write_save_data write_save_data
  81.   def write_save_data(file)
  82.     super_varisbles_write_save_data(file)
  83.     $game_variables[Super_Varisbles::VAR_HEAD] = @index
  84.     Super_Varisbles.new.save
  85.     $game_variables[Super_Varisbles::VAR_LAST] = 1
  86.   end
  87. end
  88. #==============================================================================
  89. # ■ Scene_Load
  90. #------------------------------------------------------------------------------
  91. #  处理读档画面的类。
  92. #==============================================================================

  93. class Scene_Load < Scene_File
  94.   #--------------------------------------------------------------------------
  95.   # ○ 执行读档
  96.   #--------------------------------------------------------------------------
  97.   alias super_varisbles_read_save_data read_save_data
  98.   def read_save_data(file)
  99.    
  100.     super_varisbles_read_save_data(file)
  101.     $game_variables[Super_Varisbles::VAR_LAST] = 0
  102.     $game_variables[Super_Varisbles::VAR_HEAD] = @index
  103.     Super_Varisbles.new.load
  104.     $game_variables[Super_Varisbles::VAR_LAST] = 1
  105.   end
  106.   
  107. end
  108. #==============================================================================
  109. # ■ Game_Variables
  110. #------------------------------------------------------------------------------
  111. #  处理变量的类。编入的是类 Array 的外壳。本类的实例请参考 $game_variables。
  112. #==============================================================================

  113. class Game_Variables
  114.   #--------------------------------------------------------------------------
  115.   # ● 设置变量
  116.   #     variable_id : 变量 ID
  117.   #     value       : 变量的值
  118.   #--------------------------------------------------------------------------
  119.   def []=(variable_id, value)
  120.     if variable_id <= 5000
  121.       @data[variable_id] = value
  122.     end
  123.     if variable_id >= Super_Varisbles::VAR_HEAD and variable_id < Super_Varisbles::VAR_LAST
  124.       if $game_variables[Super_Varisbles::VAR_LAST] != 0
  125.         Super_Varisbles.new.save #保存变量
  126.       end
  127.       
  128.     end
  129.    
  130.   end
  131. end
复制代码
好了这是范例。
你可以F9然后改变超级变量然后不保存关闭游戏,下次打开在查看这些变量。

超级变量.rar

288.77 KB, 下载次数: 147


作者: SVM伟    时间: 2010-10-6 16:20
额,对脚本一窍不通的我,不知道这有什么用?表怪我啊
作者: 九夜神尊    时间: 2010-10-6 16:36
本帖最后由 九夜神尊 于 2010-10-6 16:41 编辑

回复 SVM伟 的帖子
完全傻瓜式脚本,只需要设置一下脚本里面两个数字
VAR_HEAD = 81  #设定超级变量首ID
  VAR_LAST = 100 #设定超级变量尾ID
  这个代表作为超级变量的区间 (因为很多人81-100号变量已经使用过了吧?
改变这两个ID到你没有使用过的空间,比如800-900)
然后以后使用的时候注意,你设置的空间内的变量都是改变即保存。


有什么用这是一个很深奥的问题

因为普通变量必须存档才能保存。
这使得这些变量在玩家战斗失败(Game Over)后没有保存
或者在玩家点×之后也不能保存。所以引用了超级变量。随时保存

如果你做过游戏,给你讲一个小用处:自调难度

为了使游戏更多人容易玩,自调难度可以为很多玩家创造方便

在战斗前让一个变量 = 1
战斗结束这个变量 = 0

那么如果战斗失败,这个变量就不会为0了。也就game over了
下次打开,可以通过事件发现上次战斗是战斗失败了。我们更改另一个超级变量记录战败了多少次

如果次数达到一定的程度,我们就应该思考着降低一定的难度了。
作者: 火ZHI意志    时间: 2010-10-6 21:56
我早上刚看见VX的晚上就看见XP的了…………
作者: 嫁衣    时间: 2010-10-6 23:40
很有用的功能啊
作者: 退屈£无聊    时间: 2010-10-7 17:11
很有用的脚本但是
对我来说貌似找不到其安家之所




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1