设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3711|回复: 4
打印 上一主题 下一主题

[RMVA发布] 【把偷懒进行到底】读取备注栏信息

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2014-3-21 17:11:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taroxd 于 2014-3-23 07:59 编辑

嘛我是一个很懒的人,总是不想写重复的脚本,比如说alias
这个脚本的作用是:自动定义读取数据库备注的方法(类似attr_reader),为读取的内容缓存并检查重名。
使用此脚本不需要任何正则表达式相关知识

使用说明:直接给出范例
这是我的备注

角色2没有备注任何东西

要读取这段备注,使用的脚本如下
RUBY 代码复制
  1. class RPG::Actor  # 读取角色的备注。这里的类可以是任意带有备注的类
  2.   # 定义了读取备注的方法
  3.   # 本系列所有方法,均读取备注中的这样一段
  4.   # <方法名 读取内容>
  5.   # 其中,方法名要截去末尾的!和?,并会自动将所有下划线替换成空格。大小写不敏感
  6.  
  7.   # note_s 读取内容是字符串
  8.   # 预期的备注示例 <name is Eric>
  9.   # 后面的false是设置默认值,表示当没有读取到预期的备注时,方法返回false
  10.   # 如果不设置默认值,那么方法会返回一个空字符串
  11.   note_s :name_is, false
  12.  
  13.   # note_bool 返回一个布尔值
  14.   # 预期的备注示例 <male>
  15.   note_bool :male?
  16.  
  17.   # 下面两者分别用来读取整数和小数,不显式设置默认值的话,会返回0和0.0。
  18.   note_i :age
  19.   note_f :weight
  20.  
  21.   # 注意事项
  22.   #    1. 默认值不能设为 nil,如果需要表示什么都没有,请设置为 false
  23.   #    2. 不要和已有方法重名  错误示例: note_s :name
  24.   #    3. 默认值请设为Ruby内置的类型,不要用自己定义的对象。除非你完全清楚这个脚本实现的原理。
  25. end
  26.  
  27. # 脚本到此结束,以下为测试部分
  28.  
  29. $data_actors = load_data("Data/Actors.rvdata2")
  30. data1 = $data_actors[1]
  31. data2 = $data_actors[2]
  32.  
  33. # 注释为输出的结果
  34.  
  35. puts data1.name_is  # Eric
  36. puts data1.male?    # true
  37. puts data1.age      # 25
  38. puts data1.weight   # 100.07
  39.  
  40. puts data2.name_is  # false
  41. puts data2.male?    # false
  42. puts data2.age      # 0
  43. puts data2.weight   # 0.0
  44.  
  45. rgss_stop


脚本的实现:
RUBY 代码复制
  1. module RPG
  2.   module Notable
  3.     #------------------------------------------------------------------------
  4.     # ● 任意备注
  5.     #------------------------------------------------------------------------
  6.     def note_any(name, default, re, capture)
  7.       raise ArgumentError, "default can't be nil" if default.nil?
  8.       name = name.to_s
  9.       mark = name.slice!(/[?!]\Z/)
  10.       if method_defined? name
  11.         message = "already defined method `#{name}' for #{self}"
  12.         raise NameError.new(message, name.to_sym)
  13.       end
  14.       re = "/<#{name.gsub(/_/, '\s*')}#{re.source}>/i"
  15.       default = default.inspect
  16.       class_eval %{
  17.         def #{name}
  18.           return @#{name} unless @#{name}.nil?
  19.           @#{name} = @note =~ #{re} ? (#{capture}) : (#{default})
  20.         end
  21.       }
  22.       alias_method name + mark, name if mark
  23.     end
  24.     #------------------------------------------------------------------------
  25.     # ● 备注整数
  26.     #------------------------------------------------------------------------
  27.     def note_i(name, default = 0)
  28.       note_any(name, default, /\s*(-?\d+)/, '$1.to_i')
  29.     end
  30.     #------------------------------------------------------------------------
  31.     # ● 备注小数
  32.     #------------------------------------------------------------------------
  33.     def note_f(name, default = 0.0)
  34.       note_any(name, default, /\s*(-?\d+(?:\.\d+)?)/, '$1.to_f')
  35.     end
  36.     #------------------------------------------------------------------------
  37.     # ● 备注字符串
  38.     #------------------------------------------------------------------------
  39.     def note_s(name, default = '')
  40.       note_any(name, default, /\s*(\S.*)/, '$1')
  41.     end
  42.     #------------------------------------------------------------------------
  43.     # ● 备注是否匹配
  44.     #------------------------------------------------------------------------
  45.     def note_bool(name)
  46.       note_any(name, false, //, 'true')
  47.     end
  48.   end
  49.   BaseItem.extend Notable
  50.   Map.extend      Notable
  51.   Tileset.extend  Notable
  52. end

评分

参与人数 1星屑 +200 梦石 +1 收起 理由
怪蜀黍 + 200 + 1 发布奖励

查看全部评分

Lv1.梦旅人

梦石
0
星屑
60
在线时间
350 小时
注册时间
2012-7-25
帖子
126
2
发表于 2014-3-21 17:26:04 手机端发表。 | 只看该作者
把所有数据库的都写上吧......

点评

什么意思  发表于 2014-3-21 17:39
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

3
发表于 2014-3-22 18:37:17 | 只看该作者

点评

嘛我更喜欢自己的格式,只是顺便发出来而已。另外两者的思路完全不一样吧  发表于 2014-3-22 20:16
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
154 小时
注册时间
2011-2-1
帖子
47
4
发表于 2014-3-29 16:40:36 | 只看该作者
作为初心者,至少第一个我看懂了。。。。
复制走研究去

点评

第二个看不懂没关系,扔在那里用就行  发表于 2014-3-29 16:45
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1206
在线时间
561 小时
注册时间
2014-11-30
帖子
155
5
发表于 2015-9-7 23:06:49 | 只看该作者
我看到你的读取角色备注的脚本,我想在66RPG上的那个套装=武器的脚本里面,设置套装属性也可以读取武器上的备注,需要怎么写呢,我不会写,就是他的套装属性其实是读取武器的属性,能不能也可以读取武器上的备注呢,能不能帮我修改一下,万分感谢,我非常需要
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 23:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表