查看: 78|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2024-5-10 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月九日(秋) | 显示全部楼层 |阅读模式
      emmm, 以前的版本使用不方便, 要用一个事件定义不同范围做不到, 所以推翻重来,

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

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

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


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


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


    范围内每一步都触发


    范围内判定朝向后触发

    RUBY 代码
    1. # 范围触发2.1 by 灯笼菜刀君 2018.12.16
    2. #
    3. # 使用方法: 事件触发条件改为"接触事件", 然后用注释写下
    4. #
    5. # [范围]起始点x,y,终点x,y,朝向(可省略),要重复触发(省略为不触发)
    6. # [范围]的触发范围为起始点到终点的圈起来的矩形,朝向写2468,省略或者0为全方向触发
    7. # 栗子: [范围]0,0,19,14,0,yes  #=> 宽20,高15的触发范围,全方向,每步触发
    8. #
    9. # [身旁]x轴距离,y轴距离,要重复触发(省略为不触发)
    10. # [身旁]的触发范围为自身为中心 x轴距离和y轴距离圈起来的矩形
    11. # 栗子: [身旁]5,5         #=> 以事件为中心,5格范围内的范围,不重复触发
    12. #
    13. # [视野]有效距离,要重复触发(省略为不触发)
    14. # [视野]的触发范围为事件面朝方向N格距离的三角形
    15. # 栗子: [视野]2,yes       #=> 视野2格范围内,重复触发
    16. # □□■□
    17. # □■■□
    18. # →■■□
    19. # □■■□
    20. # □□■□
    21. #-----------------------------------------------------------
    22. # 注意: 以上触发条件都为"主角移动",主角不移动的话进入范围也不会触发,
    23. #       需要以事件移动为刷新条件, 打开下面的开关(打开开关后,触发范围重叠的话
    24. #       可能会引起判断异常,非必要别开开关)
    25. CAIDAO_EVENT_FANWEI = 1   #允许以事件移动来触发范围的开关ID
    26. #-----------------------------------------------------------
    27.   def 范围触发
    28.     for event in$game_map.events.values
    29.       nextif event.list.nil?
    30.       for i in event.list
    31.         if i.code == 108or i.code == 408
    32.           if i.parameters[0] =~ /[范围]/
    33.             b = i.parameters[0].gsub("[范围]", "").split(/,/)
    34.             if b.size > 3and$game_player.x >= b[0].to_iand \
    35.             $game_player.x = b[1].to_iand \
    36.             $game_player.y  1and($game_player.x - event.x).abs  event.yand \
    37.                 $game_player.y = ($game_player.x - event.x).abs
    38.                    return[-event.id,[event.x,event.y,2]]
    39.                 end
    40.               when8
    41.                 if$game_player.y < event.yand \
    42.                 $game_player.y >= event.y - b[0].to_iand \
    43.                 ($game_player.y - event.y).abs >= ($game_player.x - event.x).abs
    44.                    return[-event.id,[event.x,event.y,8]]
    45.                 end
    46.               when4
    47.                 if$game_player.x < event.xand \
    48.                 $game_player.x >= event.x - b[0].to_iand \
    49.                 ($game_player.y - event.y).abs  event.xand \
    50.                 $game_player.x  CENTER_Y
    51.       # 画面向下卷动
    52.       $game_map.scroll_down(@real_y - last_real_y)
    53.     end
    54.     # 角色向左移动、画面上的位置在中央左方的情况下
    55.     if@real_x < last_real_x and@real_x - $game_map.display_x < CENTER_X
    56.       # 画面向左卷动
    57.       $game_map.scroll_left(last_real_x - @real_x)
    58.     end
    59.     # 角色向右移动、画面上的位置在中央右方的情况下
    60.     if@real_x > last_real_x and@real_x - $game_map.display_x > CENTER_X
    61.       # 画面向右卷动
    62.       $game_map.scroll_right(@real_x - last_real_x)
    63.     end
    64.     # 角色向上移动、画面上的位置在中央上方的情况下
    65.     if@real_y < last_real_y and@real_y - $game_map.display_y < CENTER_Y
    66.       # 画面向上卷动
    67.       $game_map.scroll_up(last_real_y - @real_y)
    68.     end
    69.     #-菜刀王到此一游----------------------------------------------
    70.     if @触范[0] != f[0]or(f[0] < 0and @触范[1] != f[1])
    71.       if f[0] == 0
    72.         @触范 = f
    73.       else
    74.         event = $game_map.events[f[0].abs]
    75.         if event != niland event.trigger == 1and !event.jumping?
    76.           event.start
    77.           @触范 = f
    78.           return
    79.         end
    80.       end
    81.     end
    82.     #-------------------------------------------------------------
    83.     # 不在移动中的情况下
    84.     unless moving?
    85.       # 上次主角移动中的情况
    86.       if last_moving
    87.         # 与同位置的事件接触就判定为事件启动
    88.         result = check_event_trigger_here([1,2])
    89.         # 没有可以启动的事件的情况下
    90.         if result == false
    91.           # 调试模式为 ON 并且按下 CTRL 键的情况下除外
    92.           unless$DEBUGand Input.press?(Input::CTRL)
    93.             # 遇敌计数下降
    94.             if@encounter_count > 0
    95.               @encounter_count -= 1
    96.             end
    97.           end
    98.         end
    99.       end
    100.       # 按下 C 键的情况下
    101.       if Input.trigger?(Input::C)
    102.         # 判定为同位置以及正面的事件启动
    103.         check_event_trigger_here([0])
    104.         check_event_trigger_there([0,1,2])
    105.       end
    106.     end
    107.   end
    108. end
    109. class Game_Event < Game_Character
    110.   alias oxox_initialize initialize
    111.   def initialize(map_id, event)
    112.     oxox_initialize(map_id,event)
    113.     @范触 = []
    114.   end
    115.   alias oxox_check_event_trigger_auto check_event_trigger_auto
    116.   def check_event_trigger_auto
    117.     oxox_check_event_trigger_auto
    118.     if@trigger == 1and$game_switches[CAIDAO_EVENT_FANWEI]
    119.       f = 范围触发
    120.       if f[0] == -@id and @范触 != f[1]
    121.         start
    122.         @范触 = f[1]
    123.       end
    124.     end
    125.   end
    126. end
    复制代码


    饭粒一个

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

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-21 01:53 , Processed in 0.050385 second(s), 42 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表