查看: 3389|回复: 4

[通用发布] 加强型事件出现条件...事件的出现条件可以自定义了咿咿...

[复制链接]

聪仔

梦石
0
星屑
6187
在线时间
3077 小时
注册时间
2013-12-26
回帖
3076
发表于 2015-5-7 20:59:19 | 显示全部楼层 |阅读模式

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

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

×
大家好,我是聪聪,今年16岁,全国第三帅...
先上范例...
【XP】加强型事件出现条件.rar (192.4 KB, 下载次数: 84)
【VX】加强型事件出现条件.rar (242.67 KB, 下载次数: 92)
【VA】加强型事件出现条件.rar (1.43 MB, 下载次数: 140)
今天聪聪给大家发福利了咿咿...写了一个《加强型事件出现条件》,介绍一下本脚本的用途...
弥补地图事件出现的条件局限性大的缺陷...如XP有开关、变量和独立开关满足条件后事件出现...VX和VA增加了物品和在队角色,但是仅有这些局限性还是非常大...通过这个脚本,可以设置任何你能想到的事件出现条件,例如:金钱大于某个值时,独立开关E为打开时,队伍中活着的人数为某个值时,某个事件的坐标满足条件时等等...
脚本最大的优点:
1、通用脚本,只要是RM都能直接使用...
2、兼容性非常好,只要出现条件的脚本书写正确,可以兼容几乎所有的脚本,包括新添加的外来脚本...
脚本的缺点:
1、依然不是实时监测,在满足条件时,除非是从一个场景变化到地图场景,否则地图必须$game_map.need_refresh = true才能看到效果...
2、需要正确书写出现条件的判定脚本,对脚本基本功有一定的要求,不太适合纯新手使用...
我再发个截图解释一下【注意事项】中的第4和第5点...
以下书写是有效的:
第4点的情形,换行衔接...
换行衔接.PNG
第5点的情形,多注释衔接...
多注释衔接.PNG
下面给大家发一下脚本,插入到main之上就能用了咿咿...脚本的介绍请看脚本开头的文字说明...
[pre lang="ruby" line="1"]#==============================================================================
# ■ 加强型事件出现条件(RMXP/VX/VA通用脚本)
#
# 作者:正太君(聪聪)
# 转载请保留脚本来源:rpg.blue
#------------------------------------------------------------------------------
# ★ 脚本用途:
#    弥补地图事件出现的条件局限性大的缺陷...如XP有开关、变量和独立开关满足条件后
#    事件出现...VX和VA增加了物品和在队角色,但是仅有这些局限性还是非常大...通过这
#    个脚本,可以设置任何你能想到的事件出现条件,例如:金钱大于某个值时,独立开关
#    E为打开时,队伍中活着的人数为某个值时,某个事件的坐标满足条件时等等...
#   
# ★ 脚本用法:
#    在希望出现的事件页添加注释,注释必须写在所有事件的最前面,注释的第一行必须写
#    上【加强型事件出现条件】,然后下一行接着写事件页出现的条件,例如希望金钱大于
#    2的时候事件页出现,则写$game_party.gold >= 2即可,如果希望当开关1和开关2只要
#    其中一个打开事件页就出现,那就写$game_switches[1] or $game_switches[1]即可...
#    只要是有效的脚本指令,都能触发执行...所以随便你发挥就好了,咿咿...
#
# ★ 注意事项:
# 1、注释事件必须写在所有事件的最前面,并且第一行必须写上【加强型事件出现条件】...
# 2、加强型事件注释和默认的出现条件不冲突,是“and”的关系,可以联合使用...
# 3、如果一行写不完脚本可以自由换行衔接,甚至一个完整的单词都能分成两行来写...
# 4、如果一个注释都写不完,可以添加第二个注释,第二个注释开头无需再写【加强型事件
#    出现条件】,但必须紧随第一个注释之后,并且支持与第一个注释的换行衔接...
# 5、如果出现条件满足但是事件无反应,说明需要在条件变化点添加一句刷新地图的脚本
#    $game_map.need_refresh = true来刷新地图,例如改变金钱时,就应该在改变金钱的事
#    件后面写上脚本命令$game_map.need_refresh = true,为了保险起见,请养成良好的习
#    惯,在每次操作完成后都刷新一次地图...
#==============================================================================
module Kernel
  def get_rm_type
    message = ""
    f = File.open("Game.ini","r")
    f.each_line{|i| message += i if i.include?("RGSS") and i.include?("dll")}
    /([0-9]+)/ =~ message
    return $1.to_i / 100
  end
end

class Game_Event < Game_Character
  if get_rm_type > 1
    alias :new_conditions_met? :conditions_met? unless defined? new_conditions_met?
    def conditions_met?(page)
      return false unless code_condition(page)
      new_conditions_met?(page)
    end
  else  
    def refresh
      new_page = nil
      unless @erased
        for page in @event.pages.reverse
          c = page.condition
          next if $game_switches[c.switch1_id] == false if c.switch1_valid
          next if $game_switches[c.switch2_id] == false if c.switch2_valid
          next if $game_variables[c.variable_id] < c.variable_value if c.variable_valid
          if c.self_switch_valid
            key = [@map_id, @event.id, c.self_switch_ch]
            next if $game_self_switches[key] != true
          end
          next unless code_condition(page)
          new_page = page
          break
        end
      end
      return if new_page == @page
      @page = new_page
      clear_starting
      if @page == nil
        @tile_id = 0
        @character_name = ""
        @character_hue = 0
        @move_type = 0
        @through = true
        @trigger = nil
        @list = nil
        @interpreter = nil
        return
      end
      @tile_id = @page.graphic.tile_id
      @character_name = @page.graphic.character_name
      @character_hue = @page.graphic.character_hue
      if @original_direction != @page.graphic.direction
        @direction = @page.graphic.direction
        @original_direction = @direction
        @prelock_direction = 0
      end
      if @original_pattern != @page.graphic.pattern
        @pattern = @page.graphic.pattern
        @original_pattern = @pattern
      end
      @opacity = @page.graphic.opacity
      @blend_type = @page.graphic.blend_type
      @move_type = @page.move_type
      @move_speed = @page.move_speed
      @move_frequency = @page.move_frequency
      @move_route = @page.move_route
      @move_route_index = 0
      @move_route_forcing = false
      @walk_anime = @page.walk_anime
      @step_anime = @page.step_anime
      @direction_fix = @page.direction_fix
      @through = @page.through
      @always_on_top = @page.always_on_top
      @trigger = @page.trigger
      @list = @page.list
      @interpreter = nil
      @interpreter = Interpreter.new if @trigger == 4
      check_event_trigger_auto
    end
  end  
  
  def code_condition(page)
    code = ""
    page.list.each_with_index{|i, index|
    if i.code == 108 or i.code == 408
      code += i.parameters[0]
    else
      break
    end}
    if code.include?("【加强型事件出现条件】")
      code.delete!("【加强型事件出现条件】")
      return eval(code)
    else
      return true
    end
    return false
  end
  
  alias :new_start :start unless defined? new_start
  def start
    return if @list.all? {|i| [0, 108, 408].include?(i.code)}
    new_start
  end
end[/pre]
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

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

开拓者

发表于 2015-5-7 21:12:56 | 显示全部楼层
前排强插。。。不来张图吗?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2015-5-8 22:47:15 | 显示全部楼层
很厉害的样子。
或许能配合我这个
https://rpg.blue/thread-378375-1-2.html
回复

使用道具 举报

卑微的梦

梦石
0
星屑
547
在线时间
820 小时
注册时间
2013-2-23
回帖
1121

短篇九勇士组季军

发表于 2015-5-9 08:24:20 来自手机 | 显示全部楼层
前排支持聪聪┑( ̄Д  ̄)┍
回复

使用道具 举报

…あたしは天

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

开拓者贵宾

发表于 2015-5-9 08:54:09 | 显示全部楼层
http://taroxd.github.io/rgss/%E7 ... 8F%98%E9%87%8F.html

很久以前写的,能实时监测,功能也不只是事件的出现条件
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部