じ☆ve冰风 发表于 2024-4-20 02:29:35

小插件: 任意定义事件触发范围2.1版(12,.21更新)

emmm, 以前的版本使用不方便, 要用一个事件定义不同范围做不到, 所以推翻重来,

~~ 不过这次有改动到 game player的update, 所以冲突可能性大大增加, 会和一些常用的按键加速什么的冲突...

嘛有冲突的话,把脚本里备注"菜刀王到此一游"的部分塞到对方身体...脚本对应位置就可以了

-------------------------------------------------------------------------------------------------
2.1 更新内容
1, 因为之前只能是主角移动才会触发, 不移动被动进入范围不会触发, 增加了一个由NPC移动来判定触发的开关
2, 追加新的[视野]设置,根据NPC朝向变化的锥形范围, 进入视野范围内触发
--------------------------------------------------------------------------------------------------
2.0 更新内容:
1, 设置改为用注释设置, 可以用切换页面改变原本范围
2, 追加固定坐标范围触发, 可以代替需要判断坐标的并列处理
3, 优化判断方法, 确实等角色走到位再触发,(以前是一碰范围就触发)
4, 不用手动关闭重复开关了
5, 追加朝向判定
6, 追加每步触发判定
-------------------------------------------------------------------------------------------------
能用来干嘛?省去设置用来判定坐标的并行处理咯


固定范围触发, 事件随意移动不影响


事件周围触发, 可以随着事件移动范围


范围内每一步都触发


范围内判定朝向后触发

RUBY 代码
# 范围触发2.1 by 灯笼菜刀君 2018.12.16
#
# 使用方法: 事件触发条件改为"接触事件", 然后用注释写下
#
# [范围]起始点x,y,终点x,y,朝向(可省略),要重复触发(省略为不触发)
# [范围]的触发范围为起始点到终点的圈起来的矩形,朝向写2468,省略或者0为全方向触发
# 栗子: [范围]0,0,19,14,0,yes#=> 宽20,高15的触发范围,全方向,每步触发
#
# [身旁]x轴距离,y轴距离,要重复触发(省略为不触发)
# [身旁]的触发范围为自身为中心 x轴距离和y轴距离圈起来的矩形
# 栗子: [身旁]5,5         #=> 以事件为中心,5格范围内的范围,不重复触发
#
# [视野]有效距离,要重复触发(省略为不触发)
# [视野]的触发范围为事件面朝方向N格距离的三角形
# 栗子: [视野]2,yes       #=> 视野2格范围内,重复触发
# □□■□
# □■■□
# →■■□
# □■■□
# □□■□
#-----------------------------------------------------------
# 注意: 以上触发条件都为"主角移动",主角不移动的话进入范围也不会触发,
#       需要以事件移动为刷新条件, 打开下面的开关(打开开关后,触发范围重叠的话
#       可能会引起判断异常,非必要别开开关)

CAIDAO_EVENT_FANWEI = 1   #允许以事件移动来触发范围的开关ID
#-----------------------------------------------------------
def 范围触发
    for event in$game_map.events.values
      nextif event.list.nil?
      for i in event.list
      if i.code == 108or i.code == 408
          if i.parameters =~ /[范围]/
            b = i.parameters.gsub("[范围]", "").split(/,/)
            if b.size > 3and$game_player.x >= b.to_iand \
            $game_player.x = b.to_iand \
            $game_player.y1and($game_player.x - event.x).absevent.yand \
                $game_player.y = ($game_player.x - event.x).abs
                   return[-event.id,]
                end
            when8
                if$game_player.y < event.yand \
                $game_player.y >= event.y - b.to_iand \
                ($game_player.y - event.y).abs >= ($game_player.x - event.x).abs
                   return[-event.id,]
                end
            when4
                if$game_player.x < event.xand \
                $game_player.x >= event.x - b.to_iand \
                ($game_player.y - event.y).absevent.xand \
                $game_player.xCENTER_Y
      # 画面向下卷动
      $game_map.scroll_down(@real_y - last_real_y)
    end
    # 角色向左移动、画面上的位置在中央左方的情况下
    if@real_x < last_real_x and@real_x - $game_map.display_x < CENTER_X
      # 画面向左卷动
      $game_map.scroll_left(last_real_x - @real_x)
    end
    # 角色向右移动、画面上的位置在中央右方的情况下
    if@real_x > last_real_x and@real_x - $game_map.display_x > CENTER_X
      # 画面向右卷动
      $game_map.scroll_right(@real_x - last_real_x)
    end
    # 角色向上移动、画面上的位置在中央上方的情况下
    if@real_y < last_real_y and@real_y - $game_map.display_y < CENTER_Y
      # 画面向上卷动
      $game_map.scroll_up(last_real_y - @real_y)
    end
    #-菜刀王到此一游----------------------------------------------
    if @触范 != for(f < 0and @触范 != f)
      if f == 0
      @触范 = f
      else
      event = $game_map.events.abs]
      if event != niland event.trigger == 1and !event.jumping?
          event.start
          @触范 = f
          return
      end
      end
    end

    #-------------------------------------------------------------
    # 不在移动中的情况下
    unless moving?
      # 上次主角移动中的情况
      if last_moving
      # 与同位置的事件接触就判定为事件启动
      result = check_event_trigger_here()
      # 没有可以启动的事件的情况下
      if result == false
          # 调试模式为 ON 并且按下 CTRL 键的情况下除外
          unless$DEBUGand Input.press?(Input::CTRL)
            # 遇敌计数下降
            if@encounter_count > 0
            @encounter_count -= 1
            end
          end
      end
      end
      # 按下 C 键的情况下
      if Input.trigger?(Input::C)
      # 判定为同位置以及正面的事件启动
      check_event_trigger_here()
      check_event_trigger_there()
      end
    end
end
end

class Game_Event < Game_Character
alias oxox_initialize initialize
def initialize(map_id, event)
    oxox_initialize(map_id,event)
    @范触 = []
end
alias oxox_check_event_trigger_auto check_event_trigger_auto
def check_event_trigger_auto
    oxox_check_event_trigger_auto
    if@trigger == 1and$game_switches
      f = 范围触发
      if f == -@id and @范触 != f
      start
      @范触 = f
      end
    end
end
end


饭粒一个

             本帖来自P1论坛作者灯笼菜刀王,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=408703若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 小插件: 任意定义事件触发范围2.1版(12,.21更新)