查看: 4236|回复: 5

[已经解决] 请问如何事件接触事件来触发动作

[复制链接]
梦石
0
星屑
50
在线时间
137 小时
注册时间
2012-8-27
回帖
86
发表于 2013-6-8 18:00:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 liminglun 于 2013-6-8 18:10 编辑

谢谢各位了,在做事健
补充:事件过多,所以用判断x,y会累死的
从某处扒来了个脚本思路
用矩形数组加循环加下标读取所有事件的横,纵坐标。然后编写函数运算x,y的距离值,返回真假
再用一个循环将所有数组带入函数运算一遍,返回真的话就倒出当前数组下标••••然后运行排列为倒出数的时间就行了= =


梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-6-9 20:44:07 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
50
在线时间
137 小时
注册时间
2012-8-27
回帖
86
 楼主| 发表于 2013-6-10 14:39:30 | 显示全部楼层
喵呜喵5 发表于 2013-6-9 20:44
http://himeworks.wordpress.com/2013/04/05/custom-event-triggers/

(需要翻墙)

能帮忙贴过来吗,实在是懒得弄apn了。。。谢谢大神


回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-6-10 15:11:48 | 显示全部楼层
liminglun 发表于 2013-6-10 14:39
能帮忙贴过来吗,实在是懒得弄apn了。。。谢谢大神

用法说明:
[pre lang="ruby" line="1"]To specify a custom page trigger, create a comment of the form

<page trigger: trigger_name>
Where `trigger_name` is one of the available custom event triggers. The reference section lists all of the available custom triggers.

Extended Trigger Data

This script adds “extended data” to the trigger.
Certain triggers may use this data to determine how to run.

The general format for extended trigger data is

<page trigger: trigger_name ext_data>
Where ext_data is any string. Check the reference to see what kinds of
extended data may be required for each trigger.

Parallel Triggers

A custom trigger can be used as a condition for starting a parallel process. If the activation condition is met, then the event will begin running as a parallel process. This will not stop until the page changes.



Reference

Here is a list of available triggers and a description about them.

Player_Leave

Triggered when the player steps off an event. Note that this means the
event must have below-character priority.



Timer Expire

Triggered when the game timer counts down to zero. The timer must be counting down in order for these events to trigger.

Event_On_Event

Triggered when an event comes into contact with another event (using the
“event touch” rules).  Takes a list of event ID’s for extended data. Only the specified event ID’s can trigger this event. When no ext data is specified, then any event can trigger this event. Use -1 if you want the player to trigger it as well



Region_Enter

Triggered when the player enters a region. This is not checked if you are already in the region. It takes a list of region ID’s as extended data.



Region_Leave

Triggered when the player leaves a region. It takes a list of region ID’s as extended data.[/pre]

脚本:
[pre lang="ruby" line="1"]=begin
#===============================================================================
Title: Custom Event Triggers
Author: Tsukihime
Date: Apr 9, 2013
--------------------------------------------------------------------------------
** Change log
Apr 9
   - implemented parallel processing for all custom triggers
Apr 8
   - added "region enter" trigger
   - added "region leave" trigger
Apr 5
   - added "event_to_event" trigger
Apr 4, 2013
   - added "timer_expire" trigger
   - Initial release
--------------------------------------------------------------------------------   
** Terms of Use
* Free to use in commercial/non-commercial projects
* No real support. The script is provided as-is
* Will do bug fixes, but no compatibility patches
* Features may be requested but no guarantees, especially if it is non-trivial
* Credits to Tsukihime in your project
* Preserve this header
--------------------------------------------------------------------------------
** Description

This script provides additional event triggers.
The built-in event triggers include

   Action Trigger
   Player Touch
   Event Touch
   Autorun
   Parallel Process
   
This script provides additional triggers.
   
--------------------------------------------------------------------------------
** Installation

Place this below Materials and above Main

--------------------------------------------------------------------------------
** Usage

To specify a custom page trigger, create a comment of the form

   <page trigger: trigger_name>
   
Where `trigger_name` is one of the available custom event triggers.

-- Extended trigger data --

This script adds "extended data" to the trigger.
Certain triggers may use this data to determine how to run.

The general format for extended trigger data is

   <page trigger: trigger_name ext_data>
   
Where ext_data is any string. Check the reference to see what kinds of
extended data may be required for each trigger.

-- Parallel Triggers --

All event pages using custom triggers can be set as parallel processes if
you set the trigger to Parallel Process. However, the difference is that
rather than running constantly, they will begin to run only when their
activation condition is met. However, after they begin running they will
continue to run until the page is changed.

--------------------------------------------------------------------------------
** Reference

Here is a list of available triggers and their trigger timing. The timing
indicates when the page will be checked.

Name: Player_Leave
Time: Triggered when the player steps off an event. Note that this means the
       event must have below-character priority.
  Ext: None
   
Name: Timer_Expire
Time: Triggered when the game timer expires (eg: it goes to zero)
  Ext: None

Name: Event_To_Event
Time: Triggered when an event comes into contact with another event (using the
       "event touch" rules)
  Ext: Takes a list of event ID's. Only the specified event ID's can trigger
       this event. When no ext data is specified, then any event can
       trigger this event. Use -1 if you want the player to trigger it as well
     
Name: Region_Enter
Time: Triggered when a player enters a particular region. Does not check if
       the player is already in the region
  Ext: Takes a list of region ID's
  
Name: Region_Leave
Time: Triggered when a player leaves a particular region
  Ext: Takes a list of region ID's
   
#===============================================================================
=end
$imported = {} if $imported.nil?
$imported["TH_CustomEventTriggers"] = true
#===============================================================================
# ** Configuration
#===============================================================================
module TH
  module Custom_Event_Triggers
   
#===============================================================================
# ** Rest of script
#===============================================================================
    Trigger_Table = {
      # default triggers
      :action_trigger    => 0,
      :player_touch      => 1,
      :event_touch       => 2,
      :autorun           => 3,
      :parallel_process  => 4,
      
      # custom triggers
      :player_leave      => 5,
      :timer_expire      => 6,
      :event_to_event    => 7,
      :region_enter      => 8,
      :region_leave      => 9
    }
   
    Regex = /<page trigger:\s*(\w+)\s*(.*)>/i
  end
end

#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
module RPG
  class Event::Page
   
    def parallel_process?
      return @old_trigger == 4
    end
   
    #---------------------------------------------------------------------------
    # Load any custom triggers, if necessary
    #---------------------------------------------------------------------------
    alias :th_custom_event_triggers_trigger :trigger
    def trigger
      parse_event_triggers unless @custom_event_triggers_checked
      th_custom_event_triggers_trigger
    end
   
    #---------------------------------------------------------------------------
    # Extended trigger data. Use depends on the trigger type
    #---------------------------------------------------------------------------
    def trigger_ext
      return @trigger_ext unless @trigger_ext.nil?
      parse_event_triggers unless @custom_event_triggers_checked
      return @trigger_ext
    end
   
    #---------------------------------------------------------------------------
    # Returns a symbol representing the trigger type. These are the keys in
    # the trigger table above
    #---------------------------------------------------------------------------
    def trigger_type
      return @trigger_type unless @trigger_type.nil?
      parse_event_triggers unless @custom_event_triggers_checked
      return @trigger_type
    end
   
    #---------------------------------------------------------------------------
    # Search for a page trigger comment
    #---------------------------------------------------------------------------
    def parse_event_triggers
      @old_trigger = @trigger
      @trigger_ext = ""
      @list.each do |cmd|
        if cmd.code == 108 && cmd.parameters[0] =~ TH::Custom_Event_Triggers::Regex
          @trigger_type = $1.downcase.to_sym
          @trigger = TH::Custom_Event_Triggers::Trigger_Table[@trigger_type]
          @trigger_ext = parse_extended_trigger($2)
        end
      end
      @custom_event_triggers_checked = true
    end
   
    #---------------------------------------------------------------------------
    # Parse the extended data according to the trigger type. Different triggers
    # may expect different input
    #---------------------------------------------------------------------------
    def parse_extended_trigger(data)
      case @trigger_type
      when :event_to_event, :region_enter, :region_leave
        @trigger_ext = data.split.map{|val| val.to_i}
      else
        @trigger_ext = data
      end
    end
  end
end

#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
class Game_Timer
  
  #-----------------------------------------------------------------------------
  # Check map events for any events that trigger on time expiry
  #-----------------------------------------------------------------------------
  alias :th_custom_event_triggers_on_expire :on_expire
  def on_expire
    th_custom_event_triggers_on_expire
    $game_map.events.each_value do |event|
      event.check_event_trigger_on_timer_expire([6])
    end
  end
end

#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
class Game_Player < Game_Character
  
  attr_reader :last_region_id
  attr_reader :last_x
  attr_reader :last_y
  
  alias :th_custom_event_triggers_update :update
  def update
    store_previous_position unless moving?
    th_custom_event_triggers_update
  end
  
  alias :th_custom_event_triggers_update_nonmoving :update_nonmoving
  def update_nonmoving(last_moving)
    th_custom_event_triggers_update_nonmoving(last_moving)
    return if $game_map.interpreter.running?
    if last_moving
      check_player_leave_event
      if @last_region_id != self.region_id
        check_player_region_enter_events
        check_player_region_leave_events
      end
    end
  end
  
  #-----------------------------------------------------------------------------
  # Check for events with event-to-event trigger as well, in case the player
  # also triggers it
  #-----------------------------------------------------------------------------
  alias :th_custom_event_triggers_check_event_trigger_touch :check_event_trigger_touch
  def check_event_trigger_touch(x, y)
    th_custom_event_triggers_check_event_trigger_touch(x, y)
    return if $game_map.interpreter.running?
    start_map_event(x, y, [7], true)
  end
  
  #-----------------------------------------------------------------------------
  # New. Keep track of most recent position
  #-----------------------------------------------------------------------------
  def store_previous_position
    @last_real_x = @real_x
    @last_real_y = @real_y
    @last_x = @x
    @last_y = @y
    @last_region_id = self.region_id
  end
  
  #-----------------------------------------------------------------------------
  # New. Determines if any events at the player's previous position should be
  # triggered
  #-----------------------------------------------------------------------------
  def check_player_leave_event
    check_event_trigger_before([5])
  end
  
  #-----------------------------------------------------------------------------
  # New. Check any events in the player's previous position
  #-----------------------------------------------------------------------------
  def check_event_trigger_before(triggers)
    start_map_event(@last_x, @last_y, triggers, false)
  end
  
  #-----------------------------------------------------------------------------
  # New. Check any events in the player's previous position
  #-----------------------------------------------------------------------------
  def check_player_region_enter_events
    $game_map.events.each_value do |event|
      event.check_event_trigger_on_region_enter
    end
  end
  
  def check_player_region_leave_events
    $game_map.events.each_value do |event|
      event.check_event_trigger_on_region_leave
    end
  end
end

class Game_Event < Game_Character
  
  alias :th_custom_event_triggers_start :start
  def start
    return if empty?
    p 'here'
    if @page.parallel_process?
      @interpreter = Game_Interpreter.new
    else
      th_custom_event_triggers_start
    end
  end
  
  #-----------------------------------------------------------------------------
  # New. Returns the extended trigger data
  #-----------------------------------------------------------------------------
  def trigger_ext
    @page.nil? ? [] : @page.trigger_ext
  end
  
  #-----------------------------------------------------------------------------
  # Start an event if timer expires
  #-----------------------------------------------------------------------------
  def check_event_trigger_on_timer_expire(triggers)
    start if trigger_in?(triggers)
  end
  
  #-----------------------------------------------------------------------------
  # First check event touch with player, then event touch with event
  #-----------------------------------------------------------------------------
  alias :th_custom_event_triggers_check_event_trigger_touch :check_event_trigger_touch
  def check_event_trigger_touch(x, y)
    th_custom_event_triggers_check_event_trigger_touch(x, y)
    return if $game_map.interpreter.running?
    check_event_to_event_touch(x, y, [7])
  end
  
  #-----------------------------------------------------------------------------
  # Check whether events coming into contact should trigger
  #-----------------------------------------------------------------------------
  def check_event_to_event_touch(x, y, triggers)
    $game_map.events_xy(x, y).each do |event|
      next unless event.trigger_in?(triggers)
      event.start if event.trigger_ext.empty? || event.trigger_ext.include?(@id)
    end
  end
  
  #-----------------------------------------------------------------------------
  # Check whether events should run due to player entering a region
  #-----------------------------------------------------------------------------
  def check_event_trigger_on_region_enter
    start if @trigger == 8 && trigger_ext.include?($game_player.region_id)
  end
  
  #-----------------------------------------------------------------------------
  # Check whether events should run due to player leaving a region
  #-----------------------------------------------------------------------------
  def check_event_trigger_on_region_leave
    start if @trigger == 9 && trigger_ext.include?($game_player.last_region_id)
  end
end[/pre]

点评

谢谢。。不过英文说明研究了半天。。。。。。  发表于 2013-6-11 10:19
回复

使用道具 举报

梦石
0
星屑
50
在线时间
137 小时
注册时间
2012-8-27
回帖
86
 楼主| 发表于 2013-6-11 10:40:21 | 显示全部楼层
喵呜喵5 发表于 2013-6-10 15:11
用法说明:
To specify a custom page trigger, create a comment of the form

大神啊,某无赖想要一个范例=、=。。。研究很久不明白怎么用A!。。。


回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-6-11 12:03:12 | 显示全部楼层
liminglun 发表于 2013-6-11 10:40
大神啊,某无赖想要一个范例=、=。。。研究很久不明白怎么用A!。。。

Data.zip (211.39 KB, 下载次数: 198)

新建一个工程,替换掉那个工程的data文件夹

点评

感谢您耐心的回答! 认可答案  发表于 2013-6-11 12:30

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部