查看: 4731|回复: 3

[通用发布] 【RMXP/RMVX/RMVA】地图事件独立开关效果增强

[复制链接]
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-10-19 17:23:14 | 显示全部楼层 |阅读模式

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

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

×
有时候我们的游戏里面需要给NPC增加好感度这个属性,然后根据好感度,NPC会给角色派发任务什么的···但是用变量什么又觉得复杂麻烦,在EVENT里面加一个新定义是个不错的选择,但不排除和其他脚本抽风冲突什么的乱七八糟的情况,而该教程可以有效解决你的问题···

首先我们按下F11打开脚本编辑器(图片以RMVX为参考)
找到Game_SelfSwitches
然后找到图片中圈出来的语句
  1. return @data[key] == true ? true : false
复制代码
(如图,RMVA里面你需要找到的那一句是
  1. @data[key] == true
复制代码
)
1.jpg

接下来使用
  1. return @data[key] == nil ? false : @data[key]
复制代码
将这一句换掉
2.jpg

确定保存F12测试,事件指令里面的开关可以自由调用,很好···可以开始调教了
让我们来一段脚本测试,用脚本指令调用地图上的事件的开关,在这里我调用的是打开1号地图上的2号事件的独立开关A(想要用脚本调用的前提是那个地图和那个地图上的事件存在)的脚本指令
  1. $game_self_switches[[1, 2, "A"]]=true
复制代码
如果你的1号地图上的2号事件有独立开关A打开时显示的事件页或者执行的指令,就能看到明显的效果,但是还没有结束,我们继续调教!
顺带一提,如果把
  1. $game_self_switches[[1, 2, "A"]]=true
复制代码
改成
  1. $game_self_switches[[1, 2, "A"]]=false
复制代码
就是关闭了(true是开false是关)

那么,脚本调用没问题,再来试试下面一段脚本,依然是处理我们的1号地图的2号事件的独立开关A
  1. $game_self_switches[[1, 2, "A"]]=1
  2. p $game_self_switches[[1, 2, "A"]]
复制代码
你会得到p的结果1(RMVA需要打开控制台再测试才能看到p的结果)
我们还可以干得更加丧心病狂
漂亮
  1. $game_self_switches[[1, 2, "A"]]+=1
  2. $game_self_switches[[1, 2, "A"]]*=2
  3. $game_self_switches[[1, 2, "A"]]+=2
  4. $game_self_switches[[1, 2, "A"]]/=3
  5. p $game_self_switches[[1, 2, "A"]]
复制代码
这个时候的独立开关可以当成一个变量来用了!


不过你需要注意,如果没有给独立开关先下一个定义(或者说是赋值),那就会出错(RMVA不会,但是也没任何效果)
也可以说是想要把
  1. $game_self_switches[[1, 2, "A"]]
复制代码
当成变量运算的前提是
  1. $game_self_switches[[1, 2, "A"]]
复制代码
已经是一个可以用来进行运算的东西···

当然你还可以写成数组
  1. $game_self_switches[[1, 2, "A"]]=[]
  2. $game_self_switches[[1, 2, "A"]][0]=1
  3. p $game_self_switches[[1, 2, "A"]]
复制代码
如此一来,我们就可以利用独立开关来做爱做的事情
了!
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-10-19 17:40:42 | 显示全部楼层
本帖最后由 taroxd 于 2014-10-19 17:44 编辑

整个脚本页可以用一句话来代替
[pre lang="ruby" line="1"]Game_SelfSwitches = Hash[/pre]

如果是VA的话:
[pre lang="ruby" line="1"]
class Game_SelfSwitches < Hash

  def []=(_, _)
    super
    on_change
  end

  def on_change
    $game_map.need_refresh = true
  end

end[/pre]
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-10-23 22:03:08 | 显示全部楼层
taroxd 发表于 2014-10-19 00:40
整个脚本页可以用一句话来代替
Game_SelfSwitches = Hash[/pre]

开关也能直接用吗?0.0
  1. Game_SelfSwitches = Hash
复制代码
是通用的?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
1297
在线时间
995 小时
注册时间
2014-12-14
回帖
2939

开拓者

发表于 2016-4-28 15:01:06 | 显示全部楼层
本帖最后由 Vortur 于 2016-4-28 15:29 编辑
taroxd 发表于 2014-10-19 17:40
整个脚本页可以用一句话来代替
Game_SelfSwitches = Hash[/pre]

@taroxd
你好!
  不知为什么,该脚本报错。在新开的工程中也是如此!
err.png

但是在原脚本处添加,则无报错
[fold=@A@][pre lang="Ruby"]class Game_SelfSwitches < Hash
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    @data = {}
  end
  #--------------------------------------------------------------------------
  # ● 获取独立开关
  #--------------------------------------------------------------------------
  def [](key)
    @data[key] == true
  end
  #--------------------------------------------------------------------------
  # ● 设置独立开关
  #     value : 开启 (true) / 关闭 (false)
  #--------------------------------------------------------------------------
#~   def []=(key, value)
#~     @data[key] = value
#~     on_change
#~   end
  def []=(_, _)
    super
    on_change
  end
  #--------------------------------------------------------------------------
  # ● 设置独立开关时的处理
  #--------------------------------------------------------------------------
  def on_change
    $game_map.need_refresh = true
  end
end[/pre][/fold]

发现除了可以存储 数字 之外,还能存储任意东西!~~不过当数组中,存储的信息不是【数字】的话,p的结果是nil,但是变量依旧可以被调用!




谢谢!


  

点评

>A<.。喵大跟我说话啦~~  发表于 2016-4-28 16:47
因为本来就必须彻底覆盖原脚本,不要问为什么,解释之后你能懂的话你就不会问这个问题了  发表于 2016-4-28 16:40
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部