查看: 2063|回复: 6

[已经解决] 请问这个脚本的“踩踏/置物判断”要如何判断事件的?

[复制链接]
梦石
0
星屑
1428
在线时间
1705 小时
注册时间
2011-8-17
回帖
651
发表于 2015-9-18 19:43:20 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 黑舞嗜 于 2015-9-18 20:46 编辑

https://rpg.blue/thread-366532-1-1.html
这个“踩踏/置物判断”脚本要如何判断事件的呢?
只能弄出判断主角的效果,事件的怎么试都试不出来
roguelike求生RPG研发中....
梦石
0
星屑
1314
在线时间
904 小时
注册时间
2014-12-4
回帖
349
发表于 2015-9-18 20:21:59 | 显示全部楼层
  1. #==============================================================================

  2. # ☆ Custom Adventure 踩踏/置物判断

  3. # -- Last Updated: 2014.6.3

  4. # -- by Moy

  5. # -- 转载请保留以上信息

  6. #==============================================================================

  7. #   本脚本判断一个在人物下层的事件是否被其他事件/角色踩踏

  8. #   对本事件使用只需要在分歧脚本中使用get_character(0).stepped_on?即可。

  9. #   判断别的事件请自行获取实例后使用。

  10. #==============================================================================

  11. # ■ Game_Event

  12. #==============================================================================

  13. class Game_Event < Game_Character

  14.   #--------------------------------------------------------------------------

  15.   # ● 判断本事件是否被其他事件/角色踩踏

  16.   #--------------------------------------------------------------------------

  17.   def stepped_on?#被事件踩踏

  18.     stepped_by_events?(@x,@y) #|| stepped_by_player_characters?(@x, @y)

  19.   end
  20.   
  21.   def stepped_on1?#被主角踩踏

  22.     stepped_by_player_characters?(@x, @y)

  23.   end
  24.   def stepped_on2?#被主角和事件踩踏

  25.     stepped_by_events?(@x,@y) || stepped_by_player_characters?(@x, @y)

  26.   end


  27.   #--------------------------------------------------------------------------

  28.   # ● 判断某位置是否被其他事件踩踏

  29.   #--------------------------------------------------------------------------

  30.   def stepped_by_events?(x, y)

  31.     $game_map.events_xy_nt(x, y).any? do |event|

  32.       event.normal_priority?

  33.     end

  34.   end

  35.   #--------------------------------------------------------------------------

  36.   # ● 判断某位置是否被主控角色踩踏

  37.   #--------------------------------------------------------------------------

  38.   def stepped_by_player_characters?(x, y)

  39.     @priority_type == 0 && $game_player.collide?(x, y)

  40.   end

  41. end
复制代码
看29行-48行
回复

使用道具 举报

梦石
0
星屑
1428
在线时间
1705 小时
注册时间
2011-8-17
回帖
651
 楼主| 发表于 2015-9-18 20:46:07 | 显示全部楼层
翻滚牛宝宝 发表于 2015-9-18 20:21
看29行-48行

还是试不出来啊,事件脚本里面填get_event(3).stepped_on1?或者get_character(3).stepped_on1?都不行,到底怎么判断

点评

get_character(0).stepped_on?  发表于 2015-9-18 20:47
roguelike求生RPG研发中....
回复

使用道具 举报

梦石
0
星屑
1314
在线时间
904 小时
注册时间
2014-12-4
回帖
349
发表于 2015-9-18 20:51:53 | 显示全部楼层
就这样用的 要放在条件分歧里
QQ截图20150918204550.png
回复

使用道具 举报

梦石
0
星屑
1428
在线时间
1705 小时
注册时间
2011-8-17
回帖
651
 楼主| 发表于 2015-9-18 22:02:53 | 显示全部楼层
翻滚牛宝宝 发表于 2015-9-18 20:51
就这样用的 要放在条件分歧里

这不还是主角踩踏时触发么..主角踩踏没意义,本身编辑器就能实现,我要的是事件踩踏上去触发啊

点评

判断事件 是否被踩踏 如果踩踏 打开踩踏的事件独立开关 就实现了嘛………  发表于 2015-9-19 07:58
并行判断不就好了…… 有必要那么纠结么?  发表于 2015-9-19 07:56
脚本功能只有「判断」,没有「触发」  发表于 2015-9-19 06:10
所以说脚本里“判断某位置是否被其他事件踩踏”是骗人的么..  发表于 2015-9-18 22:41
「触发事件」不在这个脚本的功能范围之内  发表于 2015-9-18 22:08
roguelike求生RPG研发中....
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-9-18 22:31:26 | 显示全部楼层
使用方法:
check_region_events_size(區域ID, 關鍵字)
例:捉猫
check_region_events_size(1,"grab")
返回區域1中有關鍵字grab的事件数目
Image004.png
Image003.png
Image002.png
Image001.png

掴めるイベント.rar (1.46 MB, 下载次数: 63)

掴めるイベント[pre lang="ruby"]=begin

  掴めるイベント ver0.90
  
  特定の文字列をイベント名に含むイベントを掴んで運搬できるようになります。
  イベントは離すと指定したセルフスイッチがオンになります。

  付記
  
  ※現在掴んでいるイベントのIDを変数に入れる
   掴んでいなければ、変数の値は0になる
  変数の操作→スクリプト:$game_player.grab
  
  ※特定のリージョンIDにいる特定のキーワードを含むイベントの数を変数に入れる
  変数の操作→スクリプト:check_region_events_size(リージョンID, キーワード)
  
  
  ver0.90:公開
  
=end

module GrabEvent
  # 掴めるイベントとして認識するためのタグ
  # この文字列がイベント名に入っているイベントは掴めるようになります
  Keyword = "grab"
  # イベントをリリースした時にオンにするセルフスイッチ
  OnSelfSwitch = 'A'
end

class Game_Map
  alias __grab_event_setup setup
  def setup(map_id)
    __grab_event_setup(map_id)
    $game_player.grab = nil
  end
  
  alias __grab_event_update_events update_events
  def update_events
    __grab_event_update_events
    @events.each{|event|
      if event[0] == $game_player.grab
        event[1].moveto($game_player.x,$game_player.y)
        event[1].real_x = $game_player.real_x
        event[1].real_y = $game_player.real_y
        event[1].set_direction($game_player.direction)
      end
    }
  end
  
  def id_event(event_id)
    @events.find{|event| event[0] == event_id }[1]
  end
end

class Game_CharacterBase
  def grabed?
    false
  end
  
  alias __grab_event_screen_x screen_x
  def screen_x
    dir = $game_player.direction
    sup = self.is_a?(Game_Event) && grabed? && dir == 4 ? -10 : 0
    sup = self.is_a?(Game_Event) && grabed? && dir == 6 ?  10 : sup
    __grab_event_screen_x + sup
  end
  alias __grab_event_screen_y screen_y
  def screen_y
    dir = $game_player.direction
    sup = self.is_a?(Game_Event) && grabed? && dir == 8 ? -16 : 0
    sup = self.is_a?(Game_Event) && grabed? && dir == 2 ?   8 : sup
    sup = self.is_a?(Game_Event) && grabed? && dir == 4 ?  -2 : sup
    sup = self.is_a?(Game_Event) && grabed? && dir == 6 ?  -2 : sup
    __grab_event_screen_y + sup
  end
  alias __grab_event_screen_z screen_z
  def screen_z
    dir = $game_player.direction
    sup = self.is_a?(Game_Event) && grabed? && dir == 2 ?  1 : 0
    sup = self.is_a?(Game_Event) && grabed? && dir == 4 ?  1 : sup
    sup = self.is_a?(Game_Event) && grabed? && dir == 6 ?  1 : sup
    __grab_event_screen_z + sup
  end
end

class Game_Event
  attr_writer :real_x
  attr_writer :real_y
  
  def name
    @event.name
  end
  
  def grabed?
    $game_player.grab == self.id
  end
end

class Game_Player
  attr_accessor :grab
  #--------------------------------------------------------------------------
  # ● 正面のイベント起動判定
  #--------------------------------------------------------------------------
  alias __grab_event_cett check_event_trigger_there
  def check_event_trigger_there(triggers)
    __grab_event_cett(triggers)
    grab_event_there
  end
  
  def grab_event_there
    x2 = $game_map.round_x_with_direction(@x, @direction)
    y2 = $game_map.round_y_with_direction(@y, @direction)
    if grabed?
      event = $game_map.id_event(@grab)
      if event.passable?(@x,@y,@direction)
        event.moveto(x2,y2)
        $game_self_switches[[$game_map.map_id,event.id,GrabEvent::OnSelfSwitch]] = true
        @grab = nil
      end
    else
      $game_map.events_xy(x2,y2).each{|event|
        @grab = event.id if event.is_a?(Game_Event) && event.name.include?(GrabEvent::Keyword)
      }
    end
  end
  
  def grabed?
    @grab
  end
end

class Game_Interpreter
  # 指定したIDのリージョン内に指定したキーワードを含むイベントを検出する
  def check_region_events(region_id, keyword)
    result = []
    $game_map.events.each{|event|
      if event[1].region_id == region_id && event[1].name.include?(keyword)
        result.push(event[1])
      end
    }
    result
  end
  # 指定したIDのリージョン内に指定したキーワードを含むイベントの数を取得する
  def check_region_events_size(region_id, keyword)
    check_region_events(region_id, keyword).size
  end
end[/pre]

点评

比较麻烦,但也是个不错的脚本,虽然用不上但还是谢谢  发表于 2015-9-19 18:26

评分

参与人数 1星屑 +40 收起 理由
黑舞嗜 + 40 谢谢

查看全部评分

回复

使用道具 举报

梦石
0
星屑
1314
在线时间
904 小时
注册时间
2014-12-4
回帖
349
发表于 2015-9-19 08:19:49 | 显示全部楼层
黑舞嗜 发表于 2015-9-18 22:02
这不还是主角踩踏时触发么..主角踩踏没意义,本身编辑器就能实现,我要的是事件踩踏上去触发啊 ...

做了简单做了个范例,你看一下吧,主角踩踏触发 事件踩踏触发 和事件踩踏触发踩踏事件都有,没有RGSS3.00 自己复制一个

Project8.rar

300.02 KB, 下载次数: 68

点评

原来是on2额....可以用了,谢谢  发表于 2015-9-19 18:25

评分

参与人数 2星屑 +245 收起 理由
taroxd + 200 认可答案
黑舞嗜 + 45 谢谢

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部