#============================================================================== # ** 事件触发范围脚本 #------------------------------------------------------------------------------ # 该脚本可以给事件定义一个可调整的触发范围,如果玩家进入该范围, # 则打开该事件的独立开关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
ceshi.gif (755.46 KB, 下载次数: 32)
测试
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |