查看: 3465|回复: 1

[RMVA发布] 匹配事件的物品/技能

[复制链接]
梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2018-1-26 12:39:26 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 jianyulei 于 2018-2-23 14:59 编辑

简单说就是使用背包里的钥匙,然后面前的门被打开了……这样的脚本,当然,实际用法不会这么简单,具体用途见范例

范例使用的是老版本的脚本,仅做教程使用,如果需要复制脚本页的话请使用下面这个
[fold=脚本]
[pre lang="ruby"]
=begin

匹配事件的物品/技能  by:老香蕉

脚本用途:
用正在使用的物品和技能的备注对角色正前方事件的名称进行匹配,如果达标则修改变量并
开始执行事件,主要用于制作解谜类游戏的事件。

版本信息
20180220修复了战斗时报错的BUG

详细说明:
在物品“钥匙”的备注上写上 <匹配 简单锁> 然后地图事件“门”的名称改成:
<匹配 简单锁,203号门>,表示任何备注有“简单锁”或者“203号门”的物品都可以匹配
门的事件,当人物面对门使用钥匙时,因为钥匙和事件中简单锁相匹配,所以打开
了全局变量$shijian_kg,并开始执行门的事件,你可以门的事件里面写分歧判断语句:
“$shijian_kg”(表示有任何一种条件匹配成功),和“$shijian_kg==false”(匹配失
败的事件),以及“$shijian_kg==nil”(目标不能进行匹配,进行事件本身的对话)
只有$shijian_kg==nil,也就是事件和道具都没有设定匹配条件时才不会执行事件。

还有个储存了物品上备注的所有匹配项目的变量$shijian_pp,用$shijian_pp.include?("简单锁")
来判断物品是否有此匹配,返回true或false,这种匹配方法更加灵活多变。
如果你想在匹配成功之后才消耗道具,那么在道具备注<匹配成功消耗 100> 后面的数
字是几率,100代表100%消耗1个。
另外,可以匹配时会自动将正使用的道具/技能的所有信息保存到了变量$item_qian中,
如果你有需求的话可以调用。

注意事项:
<匹配 简单锁,203号门>,匹配后面有个空格,不同分类间使用半角逗号隔开。
$shijian_kg、$shijian_pp、$item_qian,这三个变量都会在事件结束后被赋值nil(空值)
在一些比较特别的使用情况下,你可能需要先判断这些变量不是空值才使用。
=end
class Game_Battler < Game_BattlerBase
alias use_item_20180122 use_item
def use_item(item)
  use_item_20180122(item)
  $item_qian = item
  if !$game_party.in_battle
    x = $game_map.round_x_with_direction($game_player.x, $game_player.direction)
    y = $game_map.round_y_with_direction($game_player.y, $game_player.direction)
    shijian_20180122 = $game_map.events[$game_map.event_id_xy(x, y)]
    if shijian_20180122 != nil && item.note.include?("<匹配 ") && shijian_20180122.instance_variable_get(:@event).name.include?("<匹配 ")
      mingzi = shijian_20180122.instance_variable_get(:@event).name
      if item.note.match(/<匹配 (\S*)>/)
        $shijian_pp = $1.split(",")
        if mingzi.match(/<匹配 (\S*)>/)
          d_m = $1.split(",")
          if $shijian_pp & d_m == []
            $shijian_kg = false;SceneManager.goto(Scene_Map);shijian_20180122.start
          else
            if item.note.match(/<匹配成功消耗 (\d+)>/)
              if rand < $1.to_i*0.01
                $game_party.gain_item(item, -1)
              end
            end
            $shijian_kg = true;SceneManager.goto(Scene_Map);shijian_20180122.start
          end
        end
      end
    else
    $shijian_kg =nil
    end
  end
end#def
end#class


class Game_Interpreter
  alias run_20180126 run
  def run
    run_20180126
    $shijian_kg = nil;$shijian_pp = nil;$item_qian = nil #这里将3个变量给赋值空值
  end
end
[/pre]
[/fold]





物品匹配事件范例.rar

1.43 MB, 下载次数: 133

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2018-1-27 13:58:31 | 显示全部楼层
只是开门的情况就不用这么大费周章了···不过拿来做别的机关是不错
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部