注册会员 登录
Project1 返回首页

喵呜喵5的树洞 https://rpg.blue/?291206 [收藏] [复制] [分享] [RSS]

日志

【脚本】独立变量

热度 12已有 2796 次阅读2013-11-20 22:36 |个人分类:脚本

直接插入脚本后,可以创建多个以下内容的相同事件来查看脚本的效果:

=begin

===============================================================================

  独立变量 By喵呜喵5

===============================================================================


【说明】


  设定的变量变为事件的独立变量


  与独立开关类似,例如,设置ID为1的变量为独立变量,

  在【事件1】中操作【变量1】并不会改变【事件2】中【变量1】的值


  在并行事件、公共事件或者显示变量脚本等无法确定属于哪个事件的场合使用独立变量时,

  将可能出现非预期的数值


  针对有一定脚本基础的人,在脚本中,

  使用 M5SV20150801.s(地图ID,事件ID,变量ID) 来获取特定事件的独立变量

  使用 M5SV20150801.s(地图ID,事件ID,变量ID,值) 来为特定事件的独立变量赋值


=end

$m5script ||= {};$m5script[:M5SV20150801] = 20150801

module M5SV20150801

#==============================================================================

#  设定部分

#==============================================================================


  VAR = [1, 2, 3]


  # 在两个中括号中间设定需要作为独立变量使用的变量ID

  # 在事件A中操作对应ID的变量不会影响事件B中该变量的值

  # 多个变量ID之间请用英文逗号隔开


  DEFAULT = 100


  # 设定独立变量的初始值


#==============================================================================

#  设定结束

#==============================================================================

  def self.s(map, ev, var, value = nil)

    return $game_variables.m5_20150801_sv(map, ev, var, value)

  end

end

class Game_Variables

  def m5_20150801_sv(map, ev, var, value = nil)

    key = [map, ev, var]

    result = value || @m5_20150801_selfvar[key] || M5SV20150801::DEFAULT

    @m5_20150801_selfvar[key] = result

  end

  def m5_20150801_condition(var)

    !$game_party.in_battle && M5SV20150801::VAR.include?(var)

  end


  alias m5_20150801_initialize initialize

  def initialize

    m5_20150801_initialize

    @m5_20150801_selfvar = {}

  end

  alias m5_20150801_get []

  def [](var)

    if m5_20150801_condition(var)

      return m5_20150801_sv( $game_map.interpreter.map_id,

        $game_map.interpreter.event_id, var)

    else

      return m5_20150801_get(var)

    end

  end

  alias m5_20150801_set []=

  def []=(var, value)

    if m5_20150801_condition(var)

      m5_20150801_sv( $game_map.interpreter.map_id,

        $game_map.interpreter.event_id, var, value)

      on_change

    else

      return m5_20150801_set(var, value)

    end

  end

end

class Game_Event

  alias m5_20150801_conditions_met? conditions_met?

  def conditions_met?(page)

    c = page.condition

    var = c.variable_id

    if c.variable_valid && M5SV20150801::VAR.include?(var)

      return false if $game_variables.m5_20150801_sv(@map_id, @id,

        var) < c.variable_value

      c.variable_valid = false

    end

    result = m5_20150801_conditions_met? page

    c.variable_valid = true

    return result

  end

end

6

鸡蛋
5

鲜花

刚表态过的朋友 (11 人)

发表评论 评论 (16 个评论)

回复 moy 2014-6-8 12:14
才看到你也写过这个233,我直接拿独立开关改了一个。hash可以存不同类型真是帮了大忙~
回复 喵呜喵5 2014-6-8 12:19
moy: 才看到你也写过这个233,我直接拿独立开关改了一个。hash可以存不同类型真是帮了大忙~
我也是直接拿独立开关改,剩下的语句都是如何在事件中能够比较简单的操作独立变量www

不过自己实际用起来还是觉得我写的这玩意儿相当麻烦,实用度很低
回复 moy 2014-6-8 12:24
喵呜喵5: 我也是直接拿独立开关改,剩下的语句都是如何在事件中能够比较简单的操作独立变量www

不过自己实际用起来还是觉得我写的这玩意儿相当麻烦,实用度很低 ...
http://rm.66rpg.com/thread-366532-1-1.html
↑我是这么处理的,另外虽然脚本里没说,其实按照我们通常在事件中给别的事件的独立开关赋值的方法也是可以直接给独立变量赋值的——因为他就是独立开关囧
给点建议嘛2333(你这宣传打的喂
回复 moy 2014-6-8 12:46
喵呜喵5: 我也是直接拿独立开关改,剩下的语句都是如何在事件中能够比较简单的操作独立变量www

不过自己实际用起来还是觉得我写的这玩意儿相当麻烦,实用度很低 ...
才不是要糖QAQ(自重!
回复 黑舞嗜 2014-9-6 16:43
唉,上面那张图看的云里雾里的...3排个脚本都是一样的啊。。。不是会写错了吧。。
回复 喵呜喵5 2014-9-6 21:41
黑舞嗜: 唉,上面那张图看的云里雾里的...3排个脚本都是一样的啊。。。不是会写错了吧。。
哦,确实写错了,第二个事件脚本应该是 m5_send_value
回复 黑舞嗜 2015-9-20 19:42
制作游戏的时候卡壳了....经过多次测试,终于发现问题所在,如果事件页的执行方式是并行处理,事件页1里给变量x赋值后通过并行处理打开独立开关进入第二页后,该变量会变成初始值(按确定键与自动执行均不会)
回复 喵呜喵5 2015-9-20 20:56
黑舞嗜: 制作游戏的时候卡壳了....经过多次测试,终于发现问题所在,如果事件页的执行方式是并行处理,事件页1里给变量x赋值后通过并行处理打开独立开关进入第二页后,该 ...
去看了一下原生脚本,确实会出现这个问题,暂时没想到比较兼容的修改方法,要解决这个问题的话可以用 M5SV20150801.s(地图ID,事件ID,变量ID)读取,用 M5SV20150801.s(地图ID,事件ID,变量ID,值)赋值
回复 黑舞嗜 2015-9-20 21:55
嗯,谢谢
回复 MeowSnow 2017-12-13 19:57
_(:з」∠)_如果想用事件的分歧判断独立变量为XX时,在条件分歧的脚本一栏里填【M5SV20150801.s(地图ID,事件ID,变量ID) = XX】就可以了吗?地图ID和事件ID能否填-1代表本地图本事件?
回复 喵呜喵5 2017-12-14 08:59
MeowSnow: _(:з」∠)_如果想用事件的分歧判断独立变量为XX时,在条件分歧的脚本一栏里填【M5SV20150801.s(地图ID,事件ID,变量ID) = XX】就可以了吗?地图ID和事件ID能否填 ...
除非是打算在在并行事件、公共事件或者显示变量脚本等无法确定属于哪个事件的场合使用独立变量,否则直接按图中那样直接用就可以了
回复 MeowSnow 2017-12-14 11:00
喵呜喵5: 除非是打算在在并行事件、公共事件或者显示变量脚本等无法确定属于哪个事件的场合使用独立变量,否则直接按图中那样直接用就可以了 ...
_(:з」∠)_图中似乎是普通变量?也就是说生成独立变量以后在条件分歧填对应ID的普通变量就能操作吗?
回复 喵呜喵5 2017-12-14 13:15
MeowSnow: _(:з」∠)_图中似乎是普通变量?也就是说生成独立变量以后在条件分歧填对应ID的普通变量就能操作吗?
对,所有在脚本开头设置了ID的变量都会变成独立变量,独立变量和普通变量在默认的事件指令中使用方法没有任何区别
回复 喵呜喵5 2017-12-14 13:16
MeowSnow: _(:з」∠)_图中似乎是普通变量?也就是说生成独立变量以后在条件分歧填对应ID的普通变量就能操作吗?
其实你可以直接插入脚本之后写一个图中这样的事件,然后把这个事件多复制几个扔到地图上,然后进入游戏直接看效果
回复 MeowSnow 2017-12-14 13:16
喵呜喵5: 对,所有在脚本开头设置了ID的变量都会变成独立变量,独立变量和普通变量在默认的事件指令中使用方法没有任何区别 ...
_(:з」∠)_原来如此,流石喵呜菊苣
回复 MeowSnow 2017-12-14 13:22
喵呜喵5: 其实你可以直接插入脚本之后写一个图中这样的事件,然后把这个事件多复制几个扔到地图上,然后进入游戏直接看效果 ...
_(:з」∠)_因为策划还在绘制素材阶段,还没开始弄工程相关的内容,所以先口头咨询一些,谢谢喵呜菊苣。

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

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

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

GMT+8, 2024-4-20 06:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部