Project1

标题: 一行脚本,独立开关变独立变量 [打印本页]

作者: SailCat    时间: 2010-12-13 15:18
标题: 一行脚本,独立开关变独立变量
难度极低却很有用的东西

最近在重新捡起好几年前的游戏,其中某个系统,需要个别设定几个NPC的各项参数
直接写到RGSS里显然不合适,而用宏观变量处理起来又很麻烦
于是想到了独立开关,但是RMXP的独立开关只能返回true和false值

基于ruby的语言特性——凡是false和nil会被解释成false,其余的一切值都会被解释成true——
只需要一行脚本,就可以将独立开关变成我所需要的独立变量:

Game_SelfSwitches第20行:
原文:    return @data[key] == true ? true : false
改为:    return @data[key] == nil ? false : @data[key]

即可。
之后可以用事件脚本的方式操作独立变量:
$game_self_switches[[$game_map.map_id, @event_id, "E"]]=4
$game_self_switches[[$game_map.map_id, @event_id, "E"]]+=5

条件分岐:脚本:$game_self_switches[[$game_map.map_id, @event_id, "E"]]==9
      blabla
分歧结束

几点说明:
1. 在将开关当变量操作运算(包括作为条件分歧中的比较)前,需要先进行变量赋值,否则会有FalseClass的NoMethodError
2. 但如果是直接当开关操作则不用,比如
$game_self_switches[[$game_map.map_id, @event_id, "E"]]=!$game_self_switches[[$game_map.map_id, @event_id, "E"]]
3. 原来的独立开关逻辑仍然保留,不受任何影响,不过还是建议用到独立变量时,编号从E开始设置比较好
4. 注意引用下标的写法,双层方括号,不要写漏了。
5. 引用其他事件的独立开关:$game_self_switches[[$game_map.map_id, 那个事件的ID, 开关编号]]
作者: enghao_lim    时间: 2010-12-14 10:16
这个供新人参考还是很不错的(^^)。
以前我也用变量一个个记录的说,所以还是很重要以下。
作者: orochi2k    时间: 2010-12-14 20:53
本帖最后由 orochi2k 于 2010-12-14 20:54 编辑


class Game_Party   #丢这里只是某种神奇的向下兼容存档方式
   attr_accessor :miao
   def miaomiao
      unless miao
          miao = {}
      end
      return miao
   end
end
def miaomiaomiao
  return $game_party.miaomiao
end
然后大家可以随便miaomiaomiao["地图1,事件1,那啥开关A"] = “那个啥"



呃……这个貌似是独立字符串 ~\(≧▽≦)/~(大雾)


作者: 姬文翔    时间: 2010-12-21 02:49
也是好 好的东东啊
作者: 九夜神尊    时间: 2011-1-14 15:21
挺短的,不过用起来麻烦了!
倒是说,你倒是给了我一个提示,我打算也写一个同样功能的脚本!
作者: 越前リョーマ    时间: 2011-1-15 00:15
原来简单一改就可以使用独立变量了……其实也不会麻烦,毕竟那些参数都是必要的。
话说“E”这玩意可以当做是名字么,比如“HP”这样……
作者: yehaojie    时间: 2012-1-5 22:40
挖坟了,如果要     独立变量E  大于等于  普通变量编号1   怎么写
作者: ★PIG★    时间: 2012-1-6 11:21
嗯…这样的话…似乎能配合事件动态生成,实现“种菜”,摆脱单纯事件和变量的麻烦且底效率问题,嗯…试试




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