じ☆ve冰风 发表于 2024-4-19 23:06:33

转到事件的某事件页

额,看起来好像没有这种功能的脚本。。。
然后又被设置事件的开关弄迷糊了。所以有了这个。
如果本脚本涉嫌侵权啊,抄袭啊,或者有bug啊,请告知。{:8_459:}
额,不要在意奇特的变量名,不要在意奇特的方法名。请随便更改成更好的命名
RUBY 代码
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader   :trigger                  # 目标
attr_reader   :list                     # 执行内容
attr_reader   :starting               # 启动中标志
attr_accessor :pagenum          #事件页的编号
attr_accessor :startpage         #要转到的事件页编号

#--------------------------------------------------------------------------
# ● 初始化对像
#   map_id : 地图 ID
#   event: 事件 (RPG::Event)
#--------------------------------------------------------------------------
def initialize(map_id, event)
    super()
    @map_id = map_id
    @event = event
    @id = @event.id
    @erased = false
    @starting = false
    @through = true
    # 初期位置的移动
    moveto(@event.x, @event.y)
    @pagenum = nil
    @startpage = 0
    refresh
end
#--------------------------------------------------------------------------
# ● 启动事件
#--------------------------------------------------------------------------
# 启动事件的某事件页
def start(num = nil)
    @startpage = num if num != nil
    refresh if num != nil
    # 执行内容不为空的情况下
    if@list != niland@list.size > 1
      @starting = true
    end
end
# 变成事件的某事件页
def stpage(num = nil)
    @startpage = num if num != nil
    refresh if num != nil
end

#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
    # 初始化本地变量 new_page
    new_page = nil
    # 无法暂时消失的情况下
    unless@erased
      # 从编号大的事件页按顺序调查
      @pagenum = @event.pages.size + 1
      for page in@event.pages.reverse
      @pagenum -= 1
      new_page = page if@startpage == @pagenum
      breakif@startpage == @pagenum
      nextif@startpage != 0
      # 可以参考事件条件 c
      c = page.condition
      # 确认开关条件 1
      if c.switch1_valid
          if$game_switches == false
            next
          end
      end
      # 确认开关条件 2
      if c.switch2_valid
          if$game_switches == false
            next
          end
      end
      # 确认变量条件
      if c.variable_valid
          if$game_variables < c.variable_value
            next
          end
      end
      # 确认独立开关条件
      if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if$game_self_switches != true
            next
          end
      end
      # 设置本地变量 new_page
      new_page = page
      # 跳出循环
      break
      end
    end
    # 与上次同一事件页的情况下
    if new_page == @page
      # 过程结束
      return
    end
    # @page 设置为现在的事件页
    @page = new_page
    # 清除启动中标志
    clear_starting
    # 没有满足条件的页面的时候
    if@page == nil
      # 设置各实例变量
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      # 过程结束
      return
    end
    # 设置各实例变量
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if@original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if@original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_speed = @page.move_speed
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    # 目标是 [并行处理] 的情况下
    if@trigger == 4
      # 生成并行处理用解释器
      @interpreter = Interpreter.new
    end
    # 自动事件启动判定
    check_event_trigger_auto
end
end



新人求关照。
{:8_457:}
             本帖来自P1论坛作者汪汪,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=378375若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 转到事件的某事件页