查看: 3163|回复: 5

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

[复制链接]
梦石
0
星屑
34459
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2021-7-29 08:26:08 | 显示全部楼层 |阅读模式

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

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

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

[pre lang="ruby"]#==============================================================================
# 〓 全局开关和变量 〓      By: 芯☆淡茹水
#==============================================================================
# 全局开关或变量,在取名时在名字前面加上 $ 符号
#==============================================================================
module XR_GlobalData
  #--------------------------------------------------------------------------
  File_name = "GlobalData"
  #--------------------------------------------------------------------------
  def self.filename
    return File_name + ".rxdata"
  end
  #--------------------------------------------------------------------------
  def self.make_empty_data
    return {:switches=>{}, :variables=>{}}
  end
  #--------------------------------------------------------------------------
  def self.on_change(type, id, value)
    @data = @data || self.make_empty_data
    if @data[type]
      @data[type][id] = value
      file = File.open(self.filename, "wb")
      Marshal.dump(@data, file)
      file.close
    end
  end
  #--------------------------------------------------------------------------
  def self.load
    @data = self.make_empty_data
    if FileTest.exist?(self.filename)
      file = File.open(self.filename, "rb")
      @data = Marshal.load(file)
      file.close
    end
    $game_switches.synchro(@data[:switches])
    $game_variables.synchro(@data[:variables])
  end
end
#==============================================================================
class Game_Switches
  #--------------------------------------------------------------------------
  def is_global_switch?(switch_id)
    return false if !switch_id
    name = $data_system.switches[switch_id]
    return !!name && !!name.match(/^\$/)
  end
  #--------------------------------------------------------------------------
  def synchro(hash)
    hash.keys.each do |id|
      @data[id] = hash[id]
      $game_map.need_refresh = true
    end
  end
  #--------------------------------------------------------------------------
  alias :xr_gd_change_switch :[]=
  def []=(switch_id, value)
    tmp = self[switch_id]
    xr_gd_change_switch(switch_id, value)
    if is_global_switch?(switch_id) && tmp != self[switch_id]
      XR_GlobalData.on_change(:switches, switch_id, self[switch_id])
    end
  end
end
#==============================================================================
class Game_Variables
  #--------------------------------------------------------------------------
  def is_global_variable?(variable_id)
    return false if !variable_id
    name = $data_system.variables[variable_id]
    return !!name && !!name.match(/^\$/)
  end
  #--------------------------------------------------------------------------
  def synchro(hash)
    hash.keys.each do |id|
      @data[id] = hash[id]
      $game_map.need_refresh = true
    end
  end
  #--------------------------------------------------------------------------
  alias :xr_gd_change_variable :[]=
  def []=(variable_id, value)
    tmp = self[variable_id]
    xr_gd_change_variable(variable_id, value)
    if is_global_variable?(variable_id) && tmp != self[variable_id]
      XR_GlobalData.on_change(:variables, variable_id, self[variable_id])
    end
  end
end
#==============================================================================
class Scene_Title
  #--------------------------------------------------------------------------
  alias xr_gd_command_new_game command_new_game
  def command_new_game
    xr_gd_command_new_game
    XR_GlobalData.load
  end
end
#==============================================================================
class Scene_Load
  #--------------------------------------------------------------------------
  alias xr_gd_read_save_data read_save_data
  def read_save_data(file)
    xr_gd_read_save_data
    XR_GlobalData.load
  end
end
#==============================================================================
# end
#==============================================================================[/pre]

评分

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

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2021-7-29 12:16:30 | 显示全部楼层
本帖最后由 enghao_lim 于 2021-7-29 12:17 编辑

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

点评

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

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 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 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
2109
在线时间
242 小时
注册时间
2018-3-23
回帖
94
发表于 2021-7-29 20:30:23 | 显示全部楼层
现在大佬们做游戏都要搞多周目了吗
RMXP天下第一!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部