查看: 2978|回复: 3

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

[复制链接]

…あたしは天

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

开拓者贵宾

发表于 2014-3-7 21:42:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 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可以偷懒)
搜狗截图_2014-03-07_21-40-44.png
说明即使不是事件中进行队伍管理,这个脚本还算是有点用处的。

特别地,还定义了以下方法
$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

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


[pre lang="ruby" line="1"]
class Game_Unit
  include Enumerable
  #--------------------------------------------------------------------------
  # ● 迭代每位成员
  #--------------------------------------------------------------------------
  def each(&b); b ? members.each(&b) : to_enum(__method__); end
  alias each_member each
  #--------------------------------------------------------------------------
  # ● 获取成员
  #--------------------------------------------------------------------------
  def [](*args); members[*args]; end
  alias slice []
  #--------------------------------------------------------------------------
  # ● 是否为空
  #--------------------------------------------------------------------------
  def empty?; members.empty?; end
  #--------------------------------------------------------------------------
  # ● 获取成员人数
  #--------------------------------------------------------------------------
  def size; members.size; end
  alias length size
end

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 增加持有金钱
  #--------------------------------------------------------------------------
  def +(gold)
    gain_gold(gold)
    self
  end
  #--------------------------------------------------------------------------
  # ● 减少持有金钱
  #--------------------------------------------------------------------------
  def -(gold)
    lose_gold(gold)
    self
  end
  #--------------------------------------------------------------------------
  # ● 角色入队
  #--------------------------------------------------------------------------
  def <(actor_id)
    add_actor(actor_id)
    self
  end
  alias <= <
  #--------------------------------------------------------------------------
  # ● 角色离队
  #--------------------------------------------------------------------------
  def >(actor_id)
    remove_actor(actor_id)
    self
  end
  alias >= >
  #--------------------------------------------------------------------------
  # ● 使角色离队
  #--------------------------------------------------------------------------
  def delete(actor)
    return unless include?(actor)
    remove_actor(actor.id)
    actor
  end
  #--------------------------------------------------------------------------
  # ● 使指定位置的成员离队
  #--------------------------------------------------------------------------
  def delete_at(index)
    delete(members[index])
  end
  def slice!(*args)
    actors = members[*args]
    if actors.kind_of?(Array)
      actors.each {|actor| delete(actor) }
    else
      delete(actors)
    end
  end
  #--------------------------------------------------------------------------
  # ● 删除符合 block 条件的角色
  #--------------------------------------------------------------------------
  def delete_if
    return to_enum(__method__) unless block_given?
    members.each {|actor| delete(actor) if yield actor }
    self
  end
  #--------------------------------------------------------------------------
  # ● 删除最后的队员
  #--------------------------------------------------------------------------
  def pop(*n)
    return slice!(-1) if n.empty?
    n = [n[0], size].min
    slice!(-n, n)
  end
  #--------------------------------------------------------------------------
  # ● 添加队员
  #--------------------------------------------------------------------------
  def <<(actor)
    add_actor(actor.id)
    self
  end
  def push(*actors)
    actors.each {|actor| self << actor }
    self
  end
  #--------------------------------------------------------------------------
  # ● 删除领头的队员
  #--------------------------------------------------------------------------
  def shift(*n); slice!(0, *n); end
end
[/pre]

点评

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

评分

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

查看全部评分

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-2
回帖
28
发表于 2014-3-8 21:01:32 | 显示全部楼层
楼主是懒到了何种地步…………

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

使用道具 举报

梦石
0
星屑
122
在线时间
552 小时
注册时间
2012-8-18
回帖
1392
发表于 2014-3-13 12:17:55 | 显示全部楼层
这样做不好的= =

点评

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

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部