Project1

标题: 转到事件的某事件页 [打印本页]

作者: 汪汪    时间: 2015-4-18 16:31
标题: 转到事件的某事件页
本帖最后由 汪汪 于 2015-4-18 16:51 编辑

额,看起来好像没有这种功能的脚本。。。
然后又被设置事件的开关弄迷糊了。所以有了这个。
如果本脚本涉嫌侵权啊,抄袭啊,或者有bug啊,请告知。{:8_459:}
额,不要在意奇特的变量名,不要在意奇特的方法名。请随便更改成更好的命名
RUBY 代码复制
  1. class Game_Event < Game_Character
  2.   #--------------------------------------------------------------------------
  3.   # ● 定义实例变量
  4.   #--------------------------------------------------------------------------
  5.   attr_reader   :trigger                  # 目标
  6.   attr_reader   :list                     # 执行内容
  7.   attr_reader   :starting                 # 启动中标志
  8.   attr_accessor :pagenum          #事件页的编号
  9.   attr_accessor :startpage           #要转到的事件页编号
  10.  
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化对像
  13.   #     map_id : 地图 ID
  14.   #     event  : 事件 (RPG::Event)
  15.   #--------------------------------------------------------------------------
  16.   def initialize(map_id, event)
  17.     super()
  18.     @map_id = map_id
  19.     @event = event
  20.     @id = @event.id
  21.     @erased = false
  22.     @starting = false
  23.     @through = true
  24.     # 初期位置的移动
  25.     moveto(@event.x, @event.y)
  26.     @pagenum = nil
  27.     @startpage = 0
  28.     refresh
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 启动事件
  32.   #--------------------------------------------------------------------------
  33.   # 启动事件的某事件页
  34.   def start(num = nil)
  35.     @startpage = num if num != nil
  36.     refresh if num != nil
  37.     # 执行内容不为空的情况下
  38.     if @list != nil and @list.size > 1
  39.       @starting = true
  40.     end
  41.   end
  42.   # 变成事件的某事件页
  43.   def stpage(num = nil)
  44.     @startpage = num if num != nil
  45.     refresh if num != nil
  46.   end
  47.  
  48.   #--------------------------------------------------------------------------
  49.   # ● 刷新
  50.   #--------------------------------------------------------------------------
  51.   def refresh
  52.     # 初始化本地变量 new_page
  53.     new_page = nil
  54.     # 无法暂时消失的情况下
  55.     unless @erased
  56.       # 从编号大的事件页按顺序调查
  57.       @pagenum = @event.pages.size + 1
  58.       for page in @event.pages.reverse
  59.         @pagenum -= 1
  60.         new_page = page if @startpage == @pagenum
  61.         break if @startpage == @pagenum
  62.         next if @startpage != 0
  63.         # 可以参考事件条件 c
  64.         c = page.condition
  65.         # 确认开关条件 1
  66.         if c.switch1_valid
  67.           if $game_switches[c.switch1_id] == false
  68.             next
  69.           end
  70.         end
  71.         # 确认开关条件 2
  72.         if c.switch2_valid
  73.           if $game_switches[c.switch2_id] == false
  74.             next
  75.           end
  76.         end
  77.         # 确认变量条件
  78.         if c.variable_valid
  79.           if $game_variables[c.variable_id] < c.variable_value
  80.             next
  81.           end
  82.         end
  83.         # 确认独立开关条件
  84.         if c.self_switch_valid
  85.           key = [@map_id, @event.id, c.self_switch_ch]
  86.           if $game_self_switches[key] != true
  87.             next
  88.           end
  89.         end
  90.         # 设置本地变量 new_page
  91.         new_page = page
  92.         # 跳出循环
  93.         break
  94.       end
  95.     end
  96.     # 与上次同一事件页的情况下
  97.     if new_page == @page
  98.       # 过程结束
  99.       return
  100.     end
  101.     # @page 设置为现在的事件页
  102.     @page = new_page
  103.     # 清除启动中标志
  104.     clear_starting
  105.     # 没有满足条件的页面的时候
  106.     if @page == nil
  107.       # 设置各实例变量
  108.       @tile_id = 0
  109.       @character_name = ""
  110.       @character_hue = 0
  111.       @move_type = 0
  112.       @through = true
  113.       @trigger = nil
  114.       @list = nil
  115.       @interpreter = nil
  116.       # 过程结束
  117.       return
  118.     end
  119.     # 设置各实例变量
  120.     @tile_id = @page.graphic.tile_id
  121.     @character_name = @page.graphic.character_name
  122.     @character_hue = @page.graphic.character_hue
  123.     if @original_direction != @page.graphic.direction
  124.       @direction = @page.graphic.direction
  125.       @original_direction = @direction
  126.       @prelock_direction = 0
  127.     end
  128.     if @original_pattern != @page.graphic.pattern
  129.       @pattern = @page.graphic.pattern
  130.       @original_pattern = @pattern
  131.     end
  132.     @opacity = @page.graphic.opacity
  133.     @blend_type = @page.graphic.blend_type
  134.     @move_type = @page.move_type
  135.     @move_speed = @page.move_speed
  136.     @move_frequency = @page.move_frequency
  137.     @move_route = @page.move_route
  138.     @move_route_index = 0
  139.     @move_route_forcing = false
  140.     @walk_anime = @page.walk_anime
  141.     @step_anime = @page.step_anime
  142.     @direction_fix = @page.direction_fix
  143.     @through = @page.through
  144.     @always_on_top = @page.always_on_top
  145.     @trigger = @page.trigger
  146.     @list = @page.list
  147.     @interpreter = nil
  148.     # 目标是 [并行处理] 的情况下
  149.     if @trigger == 4
  150.       # 生成并行处理用解释器
  151.       @interpreter = Interpreter.new
  152.     end
  153.     # 自动事件启动判定
  154.     check_event_trigger_auto
  155.   end
  156. end



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

例子.zip

202.42 KB, 下载次数: 114

例子


作者: chd114    时间: 2015-4-18 20:58
这个···实际用途是什么呢···
作者: lanyaolove    时间: 2015-4-21 22:19
非常有用的功能啊
这样ARPG的BOSS的AI控制就有好多页可以玩了
作者: sirenke    时间: 2015-4-22 12:51
我看到过类似功能的,因为是解密出来的,就不说出处了,ARPG的确比较有用
作者: Im剑侠客    时间: 2015-4-23 01:24
虽然事件页依靠开关与变量已经无忧无虑了,但至少在开关的使用方面可以大大的减少浪费。算得上是一种帮助,特别是在装满的“水”的“瓶子”中。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1