设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1495|回复: 10
打印 上一主题 下一主题

[已经解决] 能不能做仿公共事件的子母事件

[复制链接]

Lv5.捕梦者

梦石
24
星屑
7027
在线时间
247 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

跳转到指定楼层
1
发表于 2022-11-6 17:10:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 纯属小虫 于 2022-11-7 16:51 编辑

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

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


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

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

以及若是想要制作一些范围而非点位触发的事件时,子母事件也会方便编辑调试,而不用每调一次都要 ctrl C  ctrl V 了

Lv4.逐梦者

素材区好人

梦石
3
星屑
6802
在线时间
3462 小时
注册时间
2011-7-21
帖子
2254

极短24参与极短23参与极短22参与极短21参与

2
发表于 2022-11-6 23:03:14 | 只看该作者
直接把母事件复制一份,然后粘贴在各个子事件不就好了吗
虽然这样会搞不懂哪个才是母事件

至于随游戏而变化商店内容,用变量来进行条件分歧就好

点评

就是说,如果公共事件中途有场所移动,而且移动前后都有引用地图事件,会出现混乱  发表于 2022-11-7 13:43
我的话主要是担心跨地图触发公共事件时,地图事件的部分会出现混乱;例如地图01的01号事件和地图02的01号事件,在公共事件看来是同一个东西  发表于 2022-11-7 13:42
确定准确无误后再粘贴不迟,虽然我不明白你为什么不想用公共事件。很多需要粘贴的内容我都会公共事件的,为的就是有朝一日能统一修改  发表于 2022-11-7 02:05
难在调试,一旦发生错误,得重新再黏贴一遍  发表于 2022-11-7 01:01
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
33422
在线时间
6553 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

3
发表于 2022-11-7 09:00:56 | 只看该作者
你找个事件拷贝或者呼叫任意事件之类的脚本咯,我就写过va的
https://github.com/OneEyedEagle/ ... 6%8B%B7%E8%B4%9D.rb
https://github.com/OneEyedEagle/ ... 4%BA%8B%E4%BB%B6.rb
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1928
在线时间
318 小时
注册时间
2021-8-13
帖子
398
4
发表于 2022-11-7 13:22:47 | 只看该作者
本帖最后由 asukalin 于 2022-11-7 13:35 编辑



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

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

这样子?

点评

嗯嗯,感觉效果那个意思上了;但是需要添加开关,以及不支持跨图操作;如果能一行脚本执行指定母事件就好了~~  发表于 2022-11-7 16:45
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
5
发表于 2022-11-7 15:10:35 | 只看该作者
本帖最后由 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

点评

这个跨图执行其他事件很妙啊!这样一来是不是子事件只要一行脚本就可以执行母事件内容了?  发表于 2022-11-7 17:04

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
纯属小虫 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-2 13:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表