Project1

标题: 【自动化】动态变量(让变量功能更加强大) [打印本页]

作者: 九夜神尊    时间: 2011-10-6 22:15
标题: 【自动化】动态变量(让变量功能更加强大)
注:该脚本的功能完全可以用事件脚本替代。只是为了方便制作而写。




若吐槽,请确认你吐得是真的槽。

纯文本

什么是动态变量呢。
比方说大家在做一个主角等级为XX级以上做什么,以下做什么的条件分歧的时候。
首先要用一个变量来记录角色等级,然后再对变量条件分歧。
这个大家都知道。

当然这是事件可以直接涉及到的地方。

然而实际制作过程当中经常遇到一些事件涉及不到的地方,必须要调用脚本了。
比如说XX装备的名称。XX武器的攻击力等等。这些都必须采用事件脚本了。

动态变量是直接用一个变量绑定一个脚本句子。如  $data_weapons[1].name 1号武器的名称。
将变量绑定以后,就可以直接访问这个值了。比如修改装备的名称,属性等等。

这个脚本配合这个脚本使用非常好用。
贴上脚本

  1. #================================================================
  2. #  Game_Variables
  3. #----------------------------------------------------------------
  4. #   动态变量
  5. #================================================================
  6. =begin
  7. 今天突然发现RM变量名称可以设置40个字符,恩个人觉得这比较高兴地
  8. 动态变量实际上这个名字对不对都不知道。简单地说就是让变量持续跟随者
  9. 某一值这样以后用的时候就可以直接调用,怎么说呢???
  10. 算了!!往下看
  11. 设置变量名,前面可以是备注,以#隔开,后面的写脚本语句
  12. 1号角色的命中率#$game_acotrs[1].hit  

  13. 那么你选择这个变量的时候,就等于选择了这个值。
  14. 当然,如果变量容许的话,是可以反操作的。这个
  15. 太专业了,我不知道怎么说了。
  16. =end
  17. #==============================================================================
  18. # ■ Game_Variables
  19. #------------------------------------------------------------------------------
  20. #  处理变量的类。编入的是类 Array 的外壳。本类的实例请参考 $game_variables。
  21. #==============================================================================
  22. class Game_Variables
  23.   #--------------------------------------------------------------------------
  24.   # ● 初始化对像
  25.   #--------------------------------------------------------------------------
  26.   def initialize
  27.     @data = []
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 获取变量
  31.   #     variable_id : 变量 ID
  32.   #--------------------------------------------------------------------------
  33.   def [](variable_id)
  34.    
  35.     name = $data_system.variables[variable_id] #获取名称
  36.     if name.include? "#"#如果含有#
  37.       s = name.split("#")[1]
  38.       begin
  39.         n = eval(s)
  40.         return n
  41.       rescue
  42.         p s+" 这个变量产生错误!"
  43.       end
  44.     else
  45.       if @data[variable_id] == nil
  46.         return 0
  47.       else
  48.         return @data[variable_id]
  49.       end
  50.     end

  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 设置变量
  54.   #     variable_id : 变量 ID
  55.   #     value       : 变量的值
  56.   #--------------------------------------------------------------------------
  57.   def []=(variable_id, value)
  58.     name = $data_system.variables[variable_id] #获取名称
  59.     if name.include? "#"#如果第一个字符是#
  60.       s = name.split("#")[1]
  61.       begin
  62.        s = s + "= #{value}" #生成新的语句
  63.        eval(s) #执行语句
  64.       
  65.       rescue #如果出错
  66.         p s+" 这个变量产生错误!"#产生提示信息
  67.       end
  68.     else
  69.       if variable_id <= 5000  #原有数据方法
  70.         @data[variable_id] = value
  71.       end
  72.     end
  73.    
  74.    
  75.    
  76.    
  77.    
  78.    
  79.    
  80.    
  81.    
  82.    
  83.    
  84.    
  85.    
  86.    
  87.    
  88.    
  89.    
  90.    
  91.   end
  92. end
复制代码

虽然范例是VX版的,不过脚本XP也能使用(这是真的吗?)

范例工程.rar

243.71 KB, 下载次数: 585


作者: 忧雪の伤    时间: 2011-10-6 22:21
本帖最后由 忧雪の伤 于 2011-10-6 22:25 编辑

听不懂注释中的您在说啥。
看注释上面那段终于看懂了……
我就吐槽几句吧。所谓开头是 "#" 并不是 include? "#" 而是 [0, 1] == "#" 。
虽然实际上好像需要的是 include? 啊……那我只能说您的注释误导人了。
貌似不需要重写而可以通过 alias 就能完成增加的功能?
暂时没发现其他问题了。思路很新奇啊……
作者: 九夜神尊    时间: 2011-10-6 22:38
忧雪の伤 发表于 2011-10-6 22:21
听不懂注释中的您在说啥。
看注释上面那段终于看懂了……
我就吐槽几句吧。所谓开头是 "#" 并不是 include? ...

灵感就在闪光的一瞬间。

后面那个注释的错误是因为我最开始写的时候没有考虑到变量名需要加一个备注,这样你所看到的变量名全是字母。后来我在前面添加了变量名的空间,所以就不是开头为#。
你所看到的注释错误是由于疏忽导致。

alias嘛!就是耶
懒得改了!!!
作者: 各种压力的猫君    时间: 2011-10-6 22:40
本帖最后由 各种压力的猫君 于 2011-10-7 02:50 编辑

我对这个要收费实在是吐槽不能了 = = b
研究这个还不如简化一下,把条件分歧的脚本部分加上“角色1的攻击力”就会自动替换为相应脚本这样方便一点 = = b
忧雪の伤 发表于 2011-10-6 22:45
第二句话看不懂。
就是这样啦:

抱歉刚才没看懂脚本 = = b 的确是个很方便的脚本
但是默认的变量赋值貌似没办法赋除了数字之外的值吧?
也就是说想要变更名称的话还要用事件脚本来更改名称显然多此一举了……
作者: 九夜神尊    时间: 2011-10-6 23:07
本帖最后由 九夜神尊 于 2011-10-6 23:10 编辑
各种压力的猫君 发表于 2011-10-6 22:40
我对这个要收费实在是吐槽不能了 = = b
研究这个还不如简化一下,把条件分歧的脚本部分加上“角色1的攻击力 ...


你确认简化了??
使用你的方法必须打字对吧?
此外脚本涉及范围有限吧?

这脚本实际上是一劳永逸的,只需要设定一次名称,以后都可以直接选择就能使用!

此外1点经验只为记录。
作者: fux2    时间: 2011-10-7 00:42
eval($1) if name[/#(.*)/]
作者: salbcyd    时间: 2011-10-7 09:35
提示: 作者被禁止或删除 内容自动屏蔽




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