Project1

标题: 请问如何一下关闭所有独立开关? [打印本页]

作者: 瓦沙尔    时间: 2009-8-17 20:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 赤点    时间: 2009-8-17 20:42
For循环每个地图每个脚本每个独立开关.
作者: 瓦沙尔    时间: 2009-8-17 20:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 牛肉面    时间: 2009-8-17 20:54
我也想问啊!我想一下子关闭某个地图的所有独立开关!

如这样

和某一NPC对话→地图XX内的所有事件的独立开关关闭……
作者: 赤点    时间: 2009-8-17 21:05
只能用脚本也不会很长哪里麻烦?内部没有直接关毕所有独开的方法
作者: 牛肉面    时间: 2009-8-17 21:14
我的问题能不能用脚本解决?就是那种可以用在事件里调用的那种!
作者: 紫苏    时间: 2009-8-17 21:30
所有独立开关都是存在一个散列表中的,该散列表以 [地图 ID, 事件 ID, 独立开关 ID] 为键,开关状态为值,被封装到了 Game_SelfSwitches 类中,只要调用 Hash#each_key 方法就能遍历所有存在的独立开关了~

先插入这一小段脚本到脚本编辑器:
  1. class Game_SelfSwitches
  2.   def each_key
  3.     @data.each_key do |i|
  4.       yield(i)
  5.     end
  6.   end
  7. end
复制代码
然后在事件脚本中调用
  1. $game_self_switches.each_key do |i|
  2. $game_self_switches[i] = false
  3. end
  4. $game_map.need_refresh = true
复制代码

作者: 牛肉面    时间: 2009-8-17 21:39
能不能详细说明一下怎样使用?

比如我要关掉地图1 中 事件1~50的所有独立开关,能不能做到?
作者: 越前リョーマ    时间: 2009-8-17 21:47
独立开关操作:
$game_self_switches[[地图编号,事件编号,"A"]] = true/false
作者: 牛肉面    时间: 2009-8-17 21:52
可不可以这样写

$game_self_switches[[1,1…50,"A"]] = false
作者: 紫苏    时间: 2009-8-17 21:54
能不能详细说明一下怎样使用?

比如我要关掉地图1 中 事件1~50的所有独立开关,能不能做到?
牛肉面 发表于 2009-8-17 21:39

我回答的是楼主的问题,希望不要弄错了~
你的问题:
  1. for i in 1..50
  2.   for j in ["A", "B", "C", "D", "E"]
  3.     $game_self_switches[[1, i, j]] = false
  4.   end
  5. end
  6. $game_map.need_refresh = true
复制代码

作者: 越前リョーマ    时间: 2009-8-17 21:56
可不可以这样写

$game_self_switches[[1,1…50,"A"]] = false
牛肉面 发表于 2009-8-17 21:52

恐怕不行吧…… - -
不过有个偷懒的半自动化办法,
把那个事件编号作为一个变量,然后作循环让它不断的上升,每上升1都执行一次这个事件脚本,变量到50为止再离开循环。
作者: 牛肉面    时间: 2009-8-17 22:20
谢谢大家,但我加不了太多分!
作者: 瓦沙尔    时间: 2009-8-17 22:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-8-17 22:51
紫苏大的这个方法确实可以一下关闭了,但不知能否做出跨地图关闭独立开关?比如在1号地图调用的脚本关闭2号地图中的独立开关?
其实是为了做个游戏2周目的初始化效果 ...
瓦沙尔 发表于 2009-8-17 22:44

这个本来就是跨地图的,具体的参数可以参考上面越前的回帖~
作者: 瓦沙尔    时间: 2009-8-18 02:05
提示: 作者被禁止或删除 内容自动屏蔽




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