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

Project1

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

[讨论] RGSS1的事件自动触发bug

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22452
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

跳转到指定楼层
1
发表于 2022-12-5 14:24:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
bug现象:
1. 某地图左上角(0,0)有一个“与事件接触”的事件,开始位置在这张图上,那末new game后,该事件会被自动触发。
2. 某地图坐标(x,y)有一个“与事件接触”的事件,在其他地图的(x,y)有一个场所移动事件,使主角移动到这张地图的另外一个不是(x,y)的坐标,当移动完成后,该事件会被自动触发。

bug原因:
1. 新游戏开始时,$game_player的x和y会被初始化为(0,0),然后引擎加载初始地图
2. 在调用transfer_player转移主角时,引擎会首先加载新的地图,然后再将角色移动到该地图的指定坐标处。在加载新地图时,角色的x和y坐标仍然是原来的值。
3. 在“加载新地图”这个动作中有如下代码(Game_Map 73-77行):
  1.     # 设置地图事件数据
  2.     @events = {}
  3.     for i in @map.events.keys
  4.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  5.     end
复制代码

而在Game_Event#initialize中有如下代码(Game_Event 30行):
  1.     refresh
复制代码

而在Game_Event#refersh中有如下代码(Game_Event 171-172行):
  1.     # 自动事件启动判定
  2.     check_event_trigger_auto
复制代码

而在Game_Event#check_event_trigger_auto长这样(Game_Event 190-205行):
  1.   #--------------------------------------------------------------------------
  2.   # ● 自动事件启动判定
  3.   #--------------------------------------------------------------------------
  4.   def check_event_trigger_auto
  5.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  6.     if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
  7.       # 除跳跃中以外的情况、启动判定就是同位置的事件
  8.       if not jumping? and over_trigger?
  9.         start
  10.       end
  11.     end
  12.     # 目标是 [自动执行] 的情况下
  13.     if @trigger == 3
  14.       start
  15.     end
  16.   end
复制代码

前面说过了,此时的$game_player.x和.y是不正确的数值,要么是0,0,要么是一个和本地图无关的数值,所以才能触发事件的启动判定。

修改方法:
理论上可以改上述任何一个环节,但改的越多,出新错的可能越大,查引用可得,Game_Map#setup的调用一共有3处,分别是new game时,读存档后和场所移动后,而Game_Event#initialize的调用全引擎一共只有1处,在Game_Map#setup的内部。
考虑到"读存档后"有可能会重新加载地图(主要是在debug时),但此时游戏信息未发生变化,主角的x,y值 含义有效,因此不能粗暴的改Game_Map#setup,而是需要改调用$game_map.setup(...)的地方(三处改动其中两处)。
已在SEP Core中修改完毕。

评分

参与人数 1+1 收起 理由
我为鱼肉 + 1 精品文章

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
发表于 2022-12-6 01:06:09 | 只看该作者
所以我左上角固定放一个自动事件或者并行事件了……

点评

一般人的习惯都是这样,所以很难触发,我是因为不小心触发了2这个情况,才探索出来还有1这个情况  发表于 2022-12-6 02:03
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 00:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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