查看: 1853|回复: 0

[转载发布] [AI生成]事件增大触发范围

[复制链接]
梦石
0
星屑
667
在线时间
90 小时
注册时间
2019-4-14
回帖
5
发表于 2023-4-22 13:49:59 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 muffethb 于 2023-4-22 14:00 编辑

)搜了半天没找到这样的脚本于是让chatgpt生了一个比较简单的,总之打算分享给xdm用,不出意外的话应该是没啥bug了(,,)
以及下面的<rpgm_trigger_range: 2>的效果展示(图片的黑边是录制问题。。懒得修了反正就这么看吧
[pre lang="ruby"]#==============================================================================
# ** 事件触发范围脚本
#------------------------------------------------------------------------------
# 该脚本可以给事件定义一个可调整的触发范围,如果玩家进入该范围,
# 则打开该事件的独立开关D。
#
# 使用方法:
# 在事件页的注释栏中输入:
# <rpgm_trigger_range: range>
# 其中 range 为触发范围,可以为任意正整数,代表以该事件为中心的正方形边长。
# 如果不输入该注释,则默认触发范围为0(仅事件本格)。

#
# By ChatGPT/润色 Smallgeeser
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 定义常量
  #--------------------------------------------------------------------------
  TRIGGER_RANGE_REGEX = /<rpgm_trigger_range:\s*(\d+)\s*>/i
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias rpgm_trigger_range_initialize initialize
  def initialize(map_id, event)
    rpgm_trigger_range_initialize(map_id, event)
    @trigger_range = 0 # 默认触发范围为0
    set_trigger_range_from_comment # 从事件页注释中获取触发范围
  end
  #--------------------------------------------------------------------------
  # ● 获取触发范围
  #--------------------------------------------------------------------------
  def trigger_range
    return @trigger_range
  end
  #--------------------------------------------------------------------------
  # ● 更新事件
  #--------------------------------------------------------------------------
  alias rpgm_trigger_range_update update
  def update
    rpgm_trigger_range_update
    if @trigger_range >= 1 # 只有触发范围大于等于1的事件才需要检测玩家位置
      check_player_position # 检测玩家位置是否在触发范围内
    else
    end
  end
  #--------------------------------------------------------------------------
  # ● 检测玩家位置是否在触发范围内
  #--------------------------------------------------------------------------
#--------------------------------------------------------------------------
  def check_player_position
    sx = [self.x - @trigger_range, 0].max
    sy = [self.y - @trigger_range, 0].max
    ex = [self.x + @trigger_range, $game_map.width - 1].min
    ey = [self.y + @trigger_range, $game_map.height - 1].min
    for x in sx..ex
      for y in sy..ey
        if $game_player.pos?(x, y)
          $game_self_switches[[@map_id, @id, "D"]] = true # 玩家位置在触发范围内,打开独立开关D
          return
        end
      end
    end
    $game_self_switches[[@map_id, @id, "D"]] = false # 玩家位置离开触发范围,关闭独立开关D
  end
#--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● 从注释中设置触发范围
  #--------------------------------------------------------------------------
def set_trigger_range_from_comment
  if @list != nil && @list[0] != nil # 如果 @list 不为空且第一个命令不为空
    if @list[0].code == 108 || @list[0].code == 408 # 只检测第一个注释
      comment = @list[0].parameters[0]
      match = TRIGGER_RANGE_REGEX.match(comment)
      if match != nil
        @trigger_range = match[1].to_i
      end
    end
  end
end
end
[/pre]

测试

测试

评分

参与人数 1赞 +1 收起 理由
alexncf125 + 1 我可以说现成的脚本早有一二个了嘛23333333.

查看全部评分

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

本版积分规则

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

在本版发帖返回顶部