#==============================================================================
# ■ 加强型事件出现条件(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