查看: 4103|回复: 4

[原创发布] 转到事件的某事件页

[复制链接]
梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2015-4-18 16:31:43 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 汪汪 于 2015-4-18 16:51 编辑

额,看起来好像没有这种功能的脚本。。。
然后又被设置事件的开关弄迷糊了。所以有了这个。
如果本脚本涉嫌侵权啊,抄袭啊,或者有bug啊,请告知。{:8_459:}
额,不要在意奇特的变量名,不要在意奇特的方法名。请随便更改成更好的命名
[pre lang="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 != nil and @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
        break if @startpage == @pagenum
        next if @startpage != 0
        # 可以参考事件条件 c
        c = page.condition
        # 确认开关条件 1
        if c.switch1_valid
          if $game_switches[c.switch1_id] == false
            next
          end
        end
        # 确认开关条件 2
        if c.switch2_valid
          if $game_switches[c.switch2_id] == false
            next
          end
        end
        # 确认变量条件
        if c.variable_valid
          if $game_variables[c.variable_id] < c.variable_value
            next
          end
        end
        # 确认独立开关条件
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          if $game_self_switches[key] != 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[/pre]


新人求关照。
{:8_457:}

例子.zip

202.42 KB, 下载次数: 114

例子

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2015-4-18 20:58:39 | 显示全部楼层
这个···实际用途是什么呢···

点评

额,事件页一个个设置条件好复杂,而且判断条件很少,所以就做了个这个,想要第一页就第一页,想要第二页就第二页。  发表于 2015-4-18 21:15
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
94
在线时间
648 小时
注册时间
2009-2-3
回帖
208
发表于 2015-4-21 22:19:58 | 显示全部楼层
非常有用的功能啊
这样ARPG的BOSS的AI控制就有好多页可以玩了

点评

谢谢支持。  发表于 2015-4-22 07:55
回复

使用道具 举报

梦石
0
星屑
2283
在线时间
1376 小时
注册时间
2011-2-10
回帖
565

开拓者

发表于 2015-4-22 12:51:12 | 显示全部楼层
我看到过类似功能的,因为是解密出来的,就不说出处了,ARPG的确比较有用

点评

谢谢支持。其实只是太懒不想设置开关而已……  发表于 2015-4-23 00:41
回复

使用道具 举报

梦石
0
星屑
8026
在线时间
1051 小时
注册时间
2012-4-3
回帖
1270

开拓者

发表于 2015-4-23 01:24:43 来自手机 | 显示全部楼层
虽然事件页依靠开关与变量已经无忧无虑了,但至少在开关的使用方面可以大大的减少浪费。算得上是一种帮助,特别是在装满的“水”的“瓶子”中。

点评

`(*∩_∩*)′  发表于 2015-4-23 20:25
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部