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

Project1

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

[RMVA发布] 【邪道】玩坏 $game_party

[复制链接]

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

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

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

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

x
本帖最后由 taroxd 于 2014-3-7 21:46 编辑

本脚本配合 http://rpg.blue/thread-352151-1-1.html 使用,效果更佳。
本脚本是   http://rpg.blue/thread-344203-1-1.html 1L的一部分

效果:把 $game_party 制作成一个包装着队伍中所有成员的数组,就如同$game_variables包装着游戏变量一样。
该“数组”支持方法:each,Enumerable中所有方法,[](获取数组元素),size,empty?,
delete,delete_at,slice,slice!,delete_if,pop,<<,push,shift
以上方法意义和返回值参考Ruby手册

方法主要用处是在事件中进行队伍管理。而迭代的方法也可以在编写脚本的时候偷懒(虽然只是少打一个.members而已,但是,偷懒省事总是好的,不是吗?)。
图:默认脚本中可偷懒的地方(此外还有7处$game_troop可以偷懒)

说明即使不是事件中进行队伍管理,这个脚本还算是有点用处的。

特别地,还定义了以下方法
$game_party + 5 $game_party += 5 表示金钱增加5,减号则相反
也可以 $game_party + 4 + 5 - 3 等等

$game_party < 1
这里的<不是小于号,而是add_actor的一个别名。特别地,支持如下操作:
$game_party < 1 < 2,表示将1号角色和2号角色加入队伍。
同理, >表示remove_actor

<=,>=分别是<和>的别名


RUBY 代码复制
  1. class Game_Unit
  2.   include Enumerable
  3.   #--------------------------------------------------------------------------
  4.   # ● 迭代每位成员
  5.   #--------------------------------------------------------------------------
  6.   def each(&b); b ? members.each(&b) : to_enum(__method__); end
  7.   alias each_member each
  8.   #--------------------------------------------------------------------------
  9.   # ● 获取成员
  10.   #--------------------------------------------------------------------------
  11.   def [](*args); members[*args]; end
  12.   alias slice []
  13.   #--------------------------------------------------------------------------
  14.   # ● 是否为空
  15.   #--------------------------------------------------------------------------
  16.   def empty?; members.empty?; end
  17.   #--------------------------------------------------------------------------
  18.   # ● 获取成员人数
  19.   #--------------------------------------------------------------------------
  20.   def size; members.size; end
  21.   alias length size
  22. end
  23.  
  24. class Game_Party < Game_Unit
  25.   #--------------------------------------------------------------------------
  26.   # ● 增加持有金钱
  27.   #--------------------------------------------------------------------------
  28.   def +(gold)
  29.     gain_gold(gold)
  30.     self
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 减少持有金钱
  34.   #--------------------------------------------------------------------------
  35.   def -(gold)
  36.     lose_gold(gold)
  37.     self
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 角色入队
  41.   #--------------------------------------------------------------------------
  42.   def <(actor_id)
  43.     add_actor(actor_id)
  44.     self
  45.   end
  46.   alias <= <
  47.   #--------------------------------------------------------------------------
  48.   # ● 角色离队
  49.   #--------------------------------------------------------------------------
  50.   def >(actor_id)
  51.     remove_actor(actor_id)
  52.     self
  53.   end
  54.   alias >= >
  55.   #--------------------------------------------------------------------------
  56.   # ● 使角色离队
  57.   #--------------------------------------------------------------------------
  58.   def delete(actor)
  59.     return unless include?(actor)
  60.     remove_actor(actor.id)
  61.     actor
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 使指定位置的成员离队
  65.   #--------------------------------------------------------------------------
  66.   def delete_at(index)
  67.     delete(members[index])
  68.   end
  69.   def slice!(*args)
  70.     actors = members[*args]
  71.     if actors.kind_of?(Array)
  72.       actors.each {|actor| delete(actor) }
  73.     else
  74.       delete(actors)
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 删除符合 block 条件的角色
  79.   #--------------------------------------------------------------------------
  80.   def delete_if
  81.     return to_enum(__method__) unless block_given?
  82.     members.each {|actor| delete(actor) if yield actor }
  83.     self
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 删除最后的队员
  87.   #--------------------------------------------------------------------------
  88.   def pop(*n)
  89.     return slice!(-1) if n.empty?
  90.     n = [n[0], size].min
  91.     slice!(-n, n)
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 添加队员
  95.   #--------------------------------------------------------------------------
  96.   def <<(actor)
  97.     add_actor(actor.id)
  98.     self
  99.   end
  100.   def push(*actors)
  101.     actors.each {|actor| self << actor }
  102.     self
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 删除领头的队员
  106.   #--------------------------------------------------------------------------
  107.   def shift(*n); slice!(0, *n); end
  108. end


点评

应使用人类能够理解的操作符或方法名= =比如说添加队员使用<<是合适的,使用<就是不合适的【前提是只有队员可以“像栈一样添加”  发表于 2014-3-14 12:10

评分

参与人数 1星屑 +20 收起 理由
tan12345 + 20 果然是玩坏$game_party啊

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-2
帖子
35
2
发表于 2014-3-8 21:01:32 | 只看该作者
楼主是懒到了何种地步…………

-------------
$game_party.shift莫名戳中笑点
Request Time Out.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
3
发表于 2014-3-13 12:17:55 | 只看该作者
这样做不好的= =

点评

除了队员还有什么可以像栈一样添加?也没有比较大小的必要吧 主要目的是在事件的脚本框中省字数  发表于 2014-3-14 16:27
大丈夫,萌大奶!  发表于 2014-3-13 16:15
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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