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

Project1

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

[已经解决] 游戏开关变量检测的一个脚本……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
214 小时
注册时间
2014-1-23
帖子
197
跳转到指定楼层
1
发表于 2015-2-13 09:31:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制下载
  1. #------------------------------------------------------------
  2. # ● 监控开关变量
  3. #------------------------------------------------------------
  4. #
  5. #    设置区域在下方,设置范例:
  6. #
  7. #    变量1 固定为队伍的金钱
  8. #      variable(1) { $game_party.gold }
  9. #
  10. #    变量2 固定为队伍中第i+1号队员的体力值,其中i为变量2原本的值
  11. #      variable(2) do |i|
  12. #        actor = $game_party.members[i]
  13. #        actor ? actor.hp : 0
  14. #      end
  15. #
  16. #    开关1 取反
  17. #      switch(1, &:!)
  18. #
  19. #------------------------------------------------------------
  20.  
  21. module Taroxd end
  22.  
  23. module Taroxd::Monitor
  24.  
  25.   @list = {}  # 保存了监控设置的哈希表
  26.  
  27.   # 获取变量的值
  28.   def self.operate(id, value)
  29.     proc = @list[id]
  30.     proc ? proc.call(value) : value
  31.   end
  32.  
  33.   # 增加开关监控(不存档)
  34.   def self.switch(id, &proc)
  35.     @list[-id] = proc
  36.   end
  37.  
  38.   # 增加变量监控(不存档)
  39.   def self.variable(id, &proc)
  40.     @list[id] = proc
  41.   end
  42.  
  43.   # 是否正在监控。若列表不存在对应的项或值为 nil,则返回 nil。
  44.   def self.include?(id)
  45.     @list[id]
  46.   end
  47.  
  48.   # --- 设置区域在此 ---
  49.  
  50.   # --- 设置区域结束 ---
  51. end
  52.  
  53. class Game_Switches
  54.   alias_method :no_monitor_value, :[]
  55.   def [](id)
  56.     Taroxd::Monitor.operate(-id, no_monitor_value(id))
  57.   end
  58. end
  59.  
  60. class Game_Variables
  61.   alias_method :no_monitor_value, :[]
  62.   def [](id)
  63.     Taroxd::Monitor.operate(id, no_monitor_value(id))
  64.   end
  65. end
  66.  
  67. class Game_Interpreter
  68.   def operate_variable(id, type, value)
  69.     $game_variables[id] = case type
  70.     when 0  # 代入
  71.       value
  72.     when 1  # 加法
  73.       $game_variables.no_monitor_value(id) + value
  74.     when 2  # 减法
  75.       $game_variables.no_monitor_value(id) - value
  76.     when 3  # 乘法
  77.       $game_variables.no_monitor_value(id) * value
  78.     when 4  # 除法
  79.       value.zero? ? 0 : $game_variables.no_monitor_value(id) / value
  80.     when 5  # 取余
  81.       value.zero? ? 0 : $game_variables.no_monitor_value(id) % value
  82.     end
  83.   end
  84. end
  85.  
  86. class Window_DebugRight < Window_Selectable
  87.  
  88.   def update_switch_mode
  89.     return unless Input.trigger?(:C)
  90.     id = current_id
  91.     $game_switches[id] = !$game_switches.no_monitor_value(id)
  92.     Sound.play_ok
  93.     redraw_current_item
  94.   end
  95.  
  96.   def update_variable_mode
  97.     id = current_id
  98.     value = $game_variables.no_monitor_value(id)
  99.     return unless value.is_a?(Numeric)
  100.     value += 1 if Input.repeat?(:RIGHT)
  101.     value -= 1 if Input.repeat?(:LEFT)
  102.     value += 10 if Input.repeat?(:R)
  103.     value -= 10 if Input.repeat?(:L)
  104.     if $game_variables.no_monitor_value(current_id) != value
  105.       $game_variables[id] = value
  106.       Sound.play_cursor
  107.       redraw_current_item
  108.     end
  109.   end
  110.  
  111.   def draw_item(index)
  112.     data_id = @top_id + index
  113.     id_text = sprintf("%04d:", data_id)
  114.     id_width = text_size(id_text).width
  115.     if @mode == :switch
  116.       name = $data_system.switches[data_id]
  117.       status = $game_switches.no_monitor_value(data_id) ? '[ON]' : '[OFF]'
  118.       if Taroxd::Monitor.include?(-data_id)
  119.         status.concat($game_switches[data_id] ? ' ->  [ON]' : ' -> [OFF]')
  120.       end
  121.     else
  122.       name = $data_system.variables[data_id]
  123.       status = $game_variables.no_monitor_value(data_id).to_s
  124.       if Taroxd::Monitor.include?(data_id)
  125.         status << ' -> ' << $game_variables[data_id].to_s
  126.       end
  127.     end
  128.     name = "" unless name
  129.     rect = item_rect_for_text(index)
  130.     change_color(normal_color)
  131.     draw_text(rect, id_text)
  132.     rect.x += id_width
  133.     rect.width -= id_width + 60
  134.     draw_text(rect, name)
  135.     rect.width += 60
  136.     draw_text(rect, status, 2)
  137.   end
  138. end



以上…………就是以前的一个游戏开关变量监测脚本,适用性非常广泛……然而……我不会用= =
虽然大概能看得懂作用原理,但是根本不会调用具体的数据,求大神过来指教一下,如果想要用这个判定几号角色是否在队列中、系统时间、武器是否被装备,那么具体应该怎么做?
在线求解答- -谢谢咯!

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-2-13 09:35:56 | 只看该作者
判定几号角色是否在队列中
$game_party.members.include? $game_actors[角色ID]

系统时间
Time.now.hour / Time.now.min / Time.now.sec

武器是否被装备
$game_party,members_equip_include?($game_weapons[武器ID])

另外,补充说明一下。这个脚本不适合没有脚本常识的人使用。

点评

谢了!其实拿这个主要是因为有几个脚本没办法整合在一起还容易冲突…………话说倒是挺想学学脚本的可就是不知道从哪开始下手好- -  发表于 2015-2-13 09:40

评分

参与人数 1星屑 +66 收起 理由
熊喵酱 + 66 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 18:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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