Project1

标题: 能不能做仿公共事件的子母事件 [打印本页]

作者: 纯属小虫    时间: 2022-11-6 17:10
标题: 能不能做仿公共事件的子母事件
本帖最后由 纯属小虫 于 2022-11-7 16:51 编辑

想要实现一个效果:
在任意地图任意地点制作一个母事件,并且为其做一个标记(也可以用地图ID和事件坐标作为标记)
然后触发了其他位置的子事件能够执行跟母事件一样的效果,包括触发方式和事件页也一样。
这样一来,相同的事件一次只用编辑一次就好了

例子有:
随游戏而变化商店内容以及事件图像的旅行商人,会存在于游戏多个地图上,但是内容在同一游戏阶段是相同的
母事件A  触发了子事件BCDEFG...等时,都会执行母事件A


其实跟公共事件有点相似
只是不想把母事件写在数据库的公共事件中,而是想直接写在地图上,方便编辑调控

比如地图上走动的怪物,制作遇敌作战的事件时通常会多个复制,而且种类很多
如果做成公共事件的话,公共事件数据库怕是会非常乱;如果不做链接,若是某一个出了BUG,那么复制过的事件全得重做了

以及若是想要制作一些范围而非点位触发的事件时,子母事件也会方便编辑调试,而不用每调一次都要 ctrl C  ctrl V 了
作者: 无忧谷主幻    时间: 2022-11-6 23:03
直接把母事件复制一份,然后粘贴在各个子事件不就好了吗
虽然这样会搞不懂哪个才是母事件

至于随游戏而变化商店内容,用变量来进行条件分歧就好
作者: 百里_飞柳    时间: 2022-11-7 09:00
你找个事件拷贝或者呼叫任意事件之类的脚本咯,我就写过va的
https://github.com/OneEyedEagle/ ... 6%8B%B7%E8%B4%9D.rb
https://github.com/OneEyedEagle/ ... 4%BA%8B%E4%BB%B6.rb
作者: asukalin    时间: 2022-11-7 13:22
本帖最后由 asukalin 于 2022-11-7 13:35 编辑



地图界外,放母事件
图像“无”,优先级“在人物下方”
事件页的每一页触发条件都是“自动执行”
第一页出现条件“开关:召唤母事件001”
第一页内容第一行是“开关操作:召唤母事件001 = OFF”
第二页出现条件“开关:召唤母事件002”
第二页内容第一行是“开关操作:召唤母事件002 = OFF”
……
母事件内容如果需要区分你访问的是哪个子事件,就检查变量“当前子事件”的值

地图上,每个“子事件”的内容都是只有两行
“开关操作:召唤母事件XXX = ON
变量操作:当前子事件 = XXX”

这样子?
作者: RPGzh500223    时间: 2022-11-7 15:10
本帖最后由 RPGzh500223 于 2022-11-7 15:21 编辑

既然都有子事件了,那不是得操作……,子母与否,是否公共事件差别不大吧

直接修改地图文件中关于事件的数据,就算全地图设置事件都行,不可视
————分割线———————
下面的2个方法 ——— 替换成其他事件(切换地图就恢复原来的)和 执行其他事件,可能会有用
理论上适用于普通的事件

RUBY 代码复制
  1. class Interpreter
  2.  
  3.   def replace_this_event(nEventID, nMapID = $game_map.map_id)
  4.  
  5.     return true if $game_temp.in_battle == true
  6.  
  7.     if nMapID != $game_map.map_id
  8.       return true if load_data("Data/MapInfos.rxdata")[nMapID] == nil
  9.  
  10.       map = load_data(sprintf("Data/Map%03d.rxdata", nMapID))
  11.       event_data = map.events[nEventID]
  12.       return true if event_data == nil
  13.     else
  14.       return true if nEventID == @event_id
  15.  
  16.       that_event = $game_map.events[nEventID]
  17.       return true if that_event == nil
  18.       event_data = that_event.instance_variable_get("@event").clone
  19.     end
  20.  
  21.     this_event = $game_map.events[@event_id]   
  22.     event_data.x = this_event.x
  23.     event_data.y = this_event.y
  24.     event_data.id = this_event.id
  25.     this_event.instance_variable_set("@event", event_data)
  26.     this_event.refresh
  27.  
  28.     return true
  29.   end
  30.  
  31.   # 别搞2个都是 类似replace_list 的事件反复套娃 (⊙﹏⊙)
  32.   def replace_list(nEventID, nMapID = $game_map.map_id)
  33.     return true if $game_temp.in_battle == true
  34.  
  35.     if nMapID == $game_map.map_id
  36.       return if @event_id == nEventID
  37.  
  38.       event = $game_map.events[nEventID]
  39.       return true if event == nil
  40.       the_list = event.list
  41.     else
  42.       return true if load_data("Data/MapInfos.rxdata")[nMapID] == nil
  43.  
  44.       map = load_data(sprintf("Data/Map%03d.rxdata", nMapID))
  45.       event_data = map.events[nEventID]
  46.       return true if event_data == nil
  47.       pages = event_data.pages
  48.       return true if pages.empty?
  49.  
  50.       the_page = nil
  51.       pages.reverse.each do |page|
  52.         c = page.condition
  53.         if c.switch1_valid
  54.           next if $game_switched[c.switch1_id] == false
  55.         end
  56.         if c.switch2_valid
  57.           next if $game_switched[c.switch2_id] == false
  58.         end
  59.         if c.variable_valid
  60.           next if $game_variables[c.variable_id] < c.variable_value
  61.         end
  62.         if c.self_switch_valid
  63.           key = [nMapID, nEventID, c.self_switch_ch]
  64.           next if $game_self_switches[key] != true
  65.         end
  66.         the_page = page
  67.         break
  68.       end  
  69.  
  70.       return true if the_page == nil
  71.       the_list = the_page.list
  72.     end
  73.  
  74.     if the_list != nil      
  75.       @list = the_list
  76.       @index = -1
  77.  
  78.       #@message_waiting = false     
  79.       #@move_route_waiting = false  
  80.       #@button_input_variable_id = 0
  81.       #@wait_count = 0              
  82.       #@child_interpreter = nil     
  83.       #@branch = {}                 
  84.     end
  85.  
  86.     return true
  87.   end
  88. end





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