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

Project1

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

[原创发布] 【XP】全局开关和变量

[复制链接]

Lv5.捕梦者

梦石
0
星屑
33464
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

跳转到指定楼层
1
发表于 2021-7-29 08:26:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 芯☆淡茹水 于 2021-7-29 15:58 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # 〓 全局开关和变量 〓      By: 芯☆淡茹水
  3. #==============================================================================
  4. # 全局开关或变量,在取名时在名字前面加上 $ 符号
  5. #==============================================================================
  6. module XR_GlobalData
  7.   #--------------------------------------------------------------------------
  8.   File_name = "GlobalData"
  9.   #--------------------------------------------------------------------------
  10.   def self.filename
  11.     return File_name + ".rxdata"
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   def self.make_empty_data
  15.     return {:switches=>{}, :variables=>{}}
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   def self.on_change(type, id, value)
  19.     @data = @data || self.make_empty_data
  20.     if @data[type]
  21.       @data[type][id] = value
  22.       file = File.open(self.filename, "wb")
  23.       Marshal.dump(@data, file)
  24.       file.close
  25.     end
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   def self.load
  29.     @data = self.make_empty_data
  30.     if FileTest.exist?(self.filename)
  31.       file = File.open(self.filename, "rb")
  32.       @data = Marshal.load(file)
  33.       file.close
  34.     end
  35.     $game_switches.synchro(@data[:switches])
  36.     $game_variables.synchro(@data[:variables])
  37.   end
  38. end
  39. #==============================================================================
  40. class Game_Switches
  41.   #--------------------------------------------------------------------------
  42.   def is_global_switch?(switch_id)
  43.     return false if !switch_id
  44.     name = $data_system.switches[switch_id]
  45.     return !!name && !!name.match(/^\$/)
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   def synchro(hash)
  49.     hash.keys.each do |id|
  50.       @data[id] = hash[id]
  51.       $game_map.need_refresh = true
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   alias :xr_gd_change_switch :[]=
  56.   def []=(switch_id, value)
  57.     tmp = self[switch_id]
  58.     xr_gd_change_switch(switch_id, value)
  59.     if is_global_switch?(switch_id) && tmp != self[switch_id]
  60.       XR_GlobalData.on_change(:switches, switch_id, self[switch_id])
  61.     end
  62.   end
  63. end
  64. #==============================================================================
  65. class Game_Variables
  66.   #--------------------------------------------------------------------------
  67.   def is_global_variable?(variable_id)
  68.     return false if !variable_id
  69.     name = $data_system.variables[variable_id]
  70.     return !!name && !!name.match(/^\$/)
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   def synchro(hash)
  74.     hash.keys.each do |id|
  75.       @data[id] = hash[id]
  76.       $game_map.need_refresh = true
  77.     end
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   alias :xr_gd_change_variable :[]=
  81.   def []=(variable_id, value)
  82.     tmp = self[variable_id]
  83.     xr_gd_change_variable(variable_id, value)
  84.     if is_global_variable?(variable_id) && tmp != self[variable_id]
  85.       XR_GlobalData.on_change(:variables, variable_id, self[variable_id])
  86.     end
  87.   end
  88. end
  89. #==============================================================================
  90. class Scene_Title
  91.   #--------------------------------------------------------------------------
  92.   alias xr_gd_command_new_game command_new_game
  93.   def command_new_game
  94.     xr_gd_command_new_game
  95.     XR_GlobalData.load
  96.   end
  97. end
  98. #==============================================================================
  99. class Scene_Load
  100.   #--------------------------------------------------------------------------
  101.   alias xr_gd_read_save_data read_save_data
  102.   def read_save_data(file)
  103.     xr_gd_read_save_data
  104.     XR_GlobalData.load
  105.   end
  106. end
  107. #==============================================================================
  108. # end
  109. #==============================================================================

评分

参与人数 1+1 收起 理由
enghao_lim + 1 塞糖

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
2
发表于 2021-7-29 12:16:30 | 只看该作者
本帖最后由 enghao_lim 于 2021-7-29 12:17 编辑

对脚本党来说这个命名有一定的误导性啊,是骗我读脚本吗?
不过这样一个小巧思一下子把跨存档开关变量拉到没有0门槛了,真有意思。

点评

加符号方便在事件编辑时区分嘛  发表于 2021-7-29 16:02
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2021-7-29 14:04:39 | 只看该作者
游戏一开始就$data_system就不会有任何改变了,可以用Hash存下来名字开头是$的变量ID,避免调用XR_GlobalData.save时每次都要循环全部的变量匹配一下正则表达式。

而且每次改变一个全局变量或者开关的时候,都会对所有的变量和开关做一次遍历,匹配它们的名字。有的人做游戏时什么都不管先把变量和开关开成5000的,就会大大影响效率了。

点评

用哈希存也可以,不用不是全局的也遍历  发表于 2021-7-29 15:27
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2145
在线时间
235 小时
注册时间
2018-3-23
帖子
100
4
发表于 2021-7-29 20:30:23 | 只看该作者
现在大佬们做游戏都要搞多周目了吗
RMXP天下第一!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 18:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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