查看: 1455|回复: 1

[原创发布] 修改原生脚本功能地图自动执行僅执行一次

[复制链接]
梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2024-1-11 09:22:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 soulsaga 于 2024-1-11 12:59 编辑

地图事件名称包含一次结束触发条件为自动执行的情況下只会执行一次

另一个是公共事件名称包含无条件为无视开关条件执行並行公共事件或自动事件

[pre lang="ruby"]class Game_CommonEvent
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 建立必须的处理并行事件用的解释器
    if self.trigger == 2 and $game_switches[self.switch_id] == true or self.trigger == 2 and name.include?("无条件")
      if @interpreter == nil
        @interpreter = Interpreter.new
      end
    else
      @interpreter = nil
    end
  end
end

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor   :starting                 # 启动中标志

  class Interpreter
  #--------------------------------------------------------------------------
  # ● 设置启动中事件
  #--------------------------------------------------------------------------
  def setup_starting_event
    # 刷新必要的地图
    if $game_map.need_refresh
      $game_map.refresh
    end
    # 如果调用的公共事件被预约的情况下
    if $game_temp.common_event_id > 0
      # 设置事件
      setup($data_common_events[$game_temp.common_event_id].list, 0)
      # 解除预约
      $game_temp.common_event_id = 0
      return
    end
      # 更改独立开关
    # 循环 (地图事件)
    for event in $game_map.events.values
      # 生成独立开关
      key = [$game_map.map_id, event.id, "1"]
      event.starting=false if $game_self_switches[key]
      # 如果找到了启动中的事件
      if event.starting
        # 如果不是自动执行
        if event.trigger < 3
          # 清除启动中标志
          event.clear_starting
          # 锁定
          event.lock
        end
        map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id))
        # 设置事件
        setup(event.list, event.id)
        $game_self_switches[key]=map.events[event.id].name.include?("一次结束")
        return
      end
    end
    # 循环(公共事件)
    for common_event in $data_common_events.compact
      # 目标的自动执行开关为 ON 的情况下
      if common_event.trigger == 1 and
         $game_switches[common_event.switch_id] == true  or common_event.trigger == 1 and common_event.name.include?("无条件")
        # 设置事件
        setup(common_event.list, 0)
        return
      end
    end
  end
end
[/pre]
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

在本版发帖返回顶部