Project1

标题: [AI生成]事件增大触发范围 [打印本页]

作者: muffethb    时间: 2023-4-22 13:49
标题: [AI生成]事件增大触发范围
本帖最后由 muffethb 于 2023-4-22 14:00 编辑

)搜了半天没找到这样的脚本于是让chatgpt生了一个比较简单的,总之打算分享给xdm用,不出意外的话应该是没啥bug了(,,)
以及下面的<rpgm_trigger_range: 2>的效果展示(图片的黑边是录制问题。。懒得修了反正就这么看吧
RUBY 代码复制
  1. #==============================================================================
  2. # ** 事件触发范围脚本
  3. #------------------------------------------------------------------------------
  4. # 该脚本可以给事件定义一个可调整的触发范围,如果玩家进入该范围,
  5. # 则打开该事件的独立开关D。
  6. #
  7. # 使用方法:
  8. # 在事件页的注释栏中输入:
  9. # <rpgm_trigger_range: range>
  10. # 其中 range 为触发范围,可以为任意正整数,代表以该事件为中心的正方形边长。
  11. # 如果不输入该注释,则默认触发范围为0(仅事件本格)。
  12.  
  13. #
  14. # By ChatGPT/润色 Smallgeeser
  15. #==============================================================================
  16.  
  17. class Game_Event < Game_Character
  18.   #--------------------------------------------------------------------------
  19.   # ● 定义常量
  20.   #--------------------------------------------------------------------------
  21.   TRIGGER_RANGE_REGEX = /<rpgm_trigger_range:\s*(\d+)\s*>/i
  22.   #--------------------------------------------------------------------------
  23.   # ● 初始化对象
  24.   #--------------------------------------------------------------------------
  25.   alias rpgm_trigger_range_initialize initialize
  26.   def initialize(map_id, event)
  27.     rpgm_trigger_range_initialize(map_id, event)
  28.     @trigger_range = 0 # 默认触发范围为0
  29.     set_trigger_range_from_comment # 从事件页注释中获取触发范围
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 获取触发范围
  33.   #--------------------------------------------------------------------------
  34.   def trigger_range
  35.     return @trigger_range
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 更新事件
  39.   #--------------------------------------------------------------------------
  40.   alias rpgm_trigger_range_update update
  41.   def update
  42.     rpgm_trigger_range_update
  43.     if @trigger_range >= 1 # 只有触发范围大于等于1的事件才需要检测玩家位置
  44.       check_player_position # 检测玩家位置是否在触发范围内
  45.     else
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 检测玩家位置是否在触发范围内
  50.   #--------------------------------------------------------------------------
  51. #--------------------------------------------------------------------------
  52.   def check_player_position
  53.     sx = [self.x - @trigger_range, 0].max
  54.     sy = [self.y - @trigger_range, 0].max
  55.     ex = [self.x + @trigger_range, $game_map.width - 1].min
  56.     ey = [self.y + @trigger_range, $game_map.height - 1].min
  57.     for x in sx..ex
  58.       for y in sy..ey
  59.         if $game_player.pos?(x, y)
  60.           $game_self_switches[[@map_id, @id, "D"]] = true # 玩家位置在触发范围内,打开独立开关D
  61.           return
  62.         end
  63.       end
  64.     end
  65.     $game_self_switches[[@map_id, @id, "D"]] = false # 玩家位置离开触发范围,关闭独立开关D
  66.   end
  67. #--------------------------------------------------------------------------
  68.   #--------------------------------------------------------------------------
  69.   # ● 从注释中设置触发范围
  70.   #--------------------------------------------------------------------------
  71. def set_trigger_range_from_comment
  72.   if @list != nil && @list[0] != nil # 如果 @list 不为空且第一个命令不为空
  73.     if @list[0].code == 108 || @list[0].code == 408 # 只检测第一个注释
  74.       comment = @list[0].parameters[0]
  75.       match = TRIGGER_RANGE_REGEX.match(comment)
  76.       if match != nil
  77.         @trigger_range = match[1].to_i
  78.       end
  79.     end
  80.   end
  81. end
  82. end

ceshi.gif (755.46 KB, 下载次数: 32)

测试

测试





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1