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

Project1

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

[已经过期] 【求助】关于野生类ARPG榴弹无法正常运作--

[复制链接]

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
跳转到指定楼层
1
发表于 2022-5-19 14:22:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
最近在做野生类的ARPG,正在搞榴弹事件时,发现了一个问题。


如这张事件中,貌似榴弹一出现在地图上,就满足了【命中ID】不等于0的条件,但其实并没有命中任何事件
(显示文字为测试)

并且,那一段脚本为
$game_map.events[$game_variables[20]].instance_variable_get(:@event).name.include?("[T]")
是确认 命中ID 的名字,其中是否带 [T] ,如果有就会开启开关,但是貌似这个脚本有些问题,或者是我库里少加了脚本
总之这段脚本要么无法判断名字,要么就是其他问题。而这段脚本,通常运行不会报错。

而命中了地形标签为1(墙壁)时则会开启开关。如果单纯发射是会直直的穿过敌人而非命中。

我一直在想是不是运动太快导致漏掉了赋予x,y坐标(在敌人那一格),但速度也不是问题。



这是我加的脚本,有没有可能是和这里面的冲突了?

所以,到底怎样修改才能让榴弹命中敌人并开始判定呢?





↑↑↑这是攻击判定的页面(引用事件的页面1则是受伤)除了榴弹这类用别的事件来做攻击判定的,其他攻击都没有问题
普通攻击的
$game_map.events[$game_variables[20]].instance_variable_get(:@event).name.include?("[T]")
则不会失效

所以究竟是什么问题?求大佬解答下

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
2
 楼主| 发表于 2022-5-23 15:28:18 | 只看该作者
本帖最后由 我是神空 于 2022-5-23 17:13 编辑


目前找出了原因:当火箭代入自己的坐标时,获得的事件ID是此事件,而非命中的事件(即同一格的另一事件)
当我把判定往前移了一格后,攻击判定事件又出了问题。因为受到伤害是引用事件的第一个页面
而此时火箭正好也在那里,于是就会引用火箭的空页面,而不是同一格的另一个事件的第一个页面
我也尝试过引用事件ID第10个页面(火箭没有页面10),但还是无法触发所设置的第十个页面
顺带一提,我去看了下ID版,和我的几乎一模一样,除了敌人的攻击、受到伤害格式不同
所以有没有大佬帮我想想怎么解决?
而且像这种

执行多个公共事件是有延迟,我想让他和ID一样同时运行或者延迟尽量小
有什么方法可以解决吗

RGAO@(}]RF)FI2ZLSC36LKU.png (119.78 KB, 下载次数: 27)

RGAO@(}]RF)FI2ZLSC36LKU.png

评分

参与人数 1星屑 +1 收起 理由
alexncf125 + 1 没有

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1623
在线时间
311 小时
注册时间
2019-7-25
帖子
12
3
发表于 2022-6-12 20:22:59 | 只看该作者
我看了一下,是应为获取事件ID是有优先级的,因此会先读取数字最小的事件ID。证据就是ID版中每张地图的子弹事件的ID都是最大的。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
4
 楼主| 发表于 2022-6-18 20:37:04 | 只看该作者
新之梦 发表于 2022-6-12 20:22
我看了一下,是应为获取事件ID是有优先级的,因此会先读取数字最小的事件ID。证据就是ID版中每张地图的子弹 ...

这个我没试,但是我看ID版那,所有攻击判定都是用的一个公共事件,通过增减变量来处理不同位置的攻击。但是我看他好像没有加任何(有帮助的)脚本,执行这一坨事件都不带延迟的。现在我的问题主要是这个(
获取ID现在就通过转变读取的x,y位置解决了(
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
5
 楼主| 发表于 2022-6-18 22:30:19 | 只看该作者
新之梦 发表于 2022-6-12 20:22
我看了一下,是应为获取事件ID是有优先级的,因此会先读取数字最小的事件ID。证据就是ID版中每张地图的子弹 ...

另外SionEventManager_plus v1.1的复制事件脚本,复制过来的脚本怎么感觉独立开关是不起总用的,里面只说了开关源独立开关的方法,有没有可能我开关错了?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1623
在线时间
311 小时
注册时间
2019-7-25
帖子
12
6
发表于 2022-6-22 15:11:42 | 只看该作者
本帖最后由 新之梦 于 2022-6-22 15:15 编辑
我是神空 发表于 2022-6-18 22:30
另外SionEventManager_plus v1.1的复制事件脚本,复制过来的脚本怎么感觉独立开关是不起总用的,里面只说 ...


复制脚本是有复制的事件不能使用独立开关的BUG,所以要用1.1版本的复制脚本
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ 在游戏运行中复制事件 V1.1
  4. #------------------------------------------------------------------------------
  5. #  V1.1 修正复制事件无法开启独立开关的错误
  6. #
  7. #  使用说明:
  8. #   copy_map_event(map_id, event_id, x, y)
  9. #     复制特定地图的特定事件 到坐标 x y
  10. #     如果x, y坐标不填,事件就复制到原本的坐标
  11. #     示例 copy_map_event(2, 1) # 复制地图2的事件1
  12. #          copy_map_event(3, 2, 0, 0) # 复制地图3的事件2到坐标(0,0)
  13. #   
  14. #   remove_copy_event(map_id, event_id)
  15. #     移除从特定地图复制过来的事件,如果复制了多个则全部移除
  16. #     需要一个一个移除使用下面的方法
  17. #   
  18. #   remove_map_event(事件id)
  19. #     移除指定id的事件
  20. #     复制过来的事件id为 当前地图事件id最大值 + 1
  21. #==============================================================================

  22. class Game_Interpreter
  23.   def copy_map_event(map_id, event_id, x = nil, y = nil)
  24.     map_filename = sprintf("Data/Map%03d.rvdata2", map_id)
  25.     if true
  26.       event = load_data(map_filename).events[event_id]
  27.       if event
  28.         event = Game_Event.new($game_map.map_id, event)
  29.         event_id = $game_map.events.keys.max + 1
  30.         event_id += $game_map.copy_map_events.size if $game_map.copy_map_events
  31.         event.event_copy_setup(event_id, x, y)
  32.         $game_map.prepare_copy_event(event)
  33.       end
  34.     end
  35.   end
  36.   def remove_copy_event(map_id, event_id)
  37.     $game_map.events.each_value {|event|
  38.       if event.copy_id == event_id && event.map_id == map_id
  39.         $game_map.prepare_remove_event(event)
  40.       end
  41.     }
  42.   end
  43.   def remove_map_event(event_id)
  44.     event = $game_map.events[event_id]
  45.     $game_map.prepare_remove_event(event) if event
  46.   end

  47.   alias_method :copy_map_event_command_123, :command_123
  48.   def process_copy_self_switch(event)
  49.     event.copy_self_switch ||= {}
  50.     event.copy_self_switch[@params[0]] = (@params[1] == 0)
  51.     all_off = true
  52.     event.copy_self_switch.each_value {|key| break all_off = false if key}
  53.     event.copy_self_switch = nil if all_off
  54.     $game_map.need_refresh = true
  55.   end
  56. end

  57. class Spriteset_Map
  58.   def add_copy_event(event)
  59.     @character_sprites.push(Sprite_Character.new(@viewport1, event))
  60.   end
  61.   def remove_copy_event(event)
  62.     @character_sprites.each {|sprite|
  63.       if sprite.character == event
  64.         @character_sprites.delete(sprite)
  65.         sprite.dispose
  66.         return
  67.       end
  68.     }
  69.   end
  70. end

  71. class Scene_Map
  72.   attr(:spriteset)
  73. end
  74. class Game_Map
  75.   attr(:copy_map_events)
  76.   def prepare_copy_event(event)
  77.     @copy_map_events ||= {}
  78.     @tile_events.push(event) if event.tile?
  79.     @copy_map_events[event] = true
  80.   end
  81.   def prepare_remove_event(event)
  82.     @copy_map_events ||= {}
  83.     @tile_events.delete(event) if event.tile?
  84.     @copy_map_events[event] = false
  85.   end
  86.   alias_method :copy_map_events_update_events, :update_events
  87.   def update_events
  88.     copy_map_events_update_events
  89.     if @copy_map_events
  90.       delete_ids = []
  91.       in_map = SceneManager.scene_is?(Scene_Map)
  92.       @copy_map_events.each {|event, copy|
  93.         if copy
  94.           @events[event.id] = event
  95.           SceneManager.scene.spriteset.add_copy_event(event) if in_map
  96.         else
  97.           delete_ids.push(event.id)
  98.           SceneManager.scene.spriteset.remove_copy_event(event) if in_map
  99.         end
  100.       }
  101.       delete_ids.each {|id| @events.delete(id)}
  102.       @copy_map_events = nil
  103.     end
  104.   end
  105. end
  106. class Game_Event
  107.   attr(:copy_id, :map_id)
  108.   attr_accessor :copy_self_switch
  109.   def event_copy_setup(id, x, y)
  110.     @copy_id = @id
  111.     @id = id
  112.     moveto(x, y) if x && y
  113.   end
  114.   def update #注意:方法覆盖
  115.     super
  116.     check_event_trigger_auto
  117.     return unless @interpreter
  118.     @interpreter.setup(@list, @id) unless @interpreter.running?
  119.     @interpreter.update
  120.   end
  121.   def conditions_met?(page) #注意:方法覆盖
  122.     c = page.condition
  123.    
  124.     if c.switch1_valid
  125.       if c.switch1_id == 3
  126.         return false unless $game_e[[@id,"found"]] == true
  127.       else
  128.         return false unless $game_switches[c.switch1_id]
  129.       end
  130.     end
  131.     if c.switch2_valid
  132.       if c.switch2_id == 3
  133.         return false unless $game_e[[@id,"found"]] == true
  134.       else
  135.         return false unless $game_switches[c.switch2_id]
  136.       end
  137.     end
  138.    
  139.     if c.variable_valid
  140.       return false if $game_variables[c.variable_id] < c.variable_value
  141.     end
  142.     if c.self_switch_valid
  143.       return false unless @copy_self_switch ?
  144.         @copy_self_switch[c.self_switch_ch] :
  145.         $game_self_switches[[map_id, @id, c.self_switch_ch]]
  146.     end
  147.     if c.item_valid
  148.       item = $data_items[c.item_id]
  149.       return false unless $game_party.has_item?(item)
  150.     end
  151.     if c.actor_valid
  152.       actor = $game_actors[c.actor_id]
  153.       return false unless $game_party.members.include?(actor)
  154.     end
  155.     return true
  156.   end
  157. end
复制代码

这个我试过,复制过来的事件,可以正常使用独立开关。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1623
在线时间
311 小时
注册时间
2019-7-25
帖子
12
7
发表于 2022-6-22 16:04:07 | 只看该作者
我是神空 发表于 2022-6-18 20:37
这个我没试,但是我看ID版那,所有攻击判定都是用的一个公共事件,通过增减变量来处理不同位置的攻击。但 ...

是怎样的延迟,延迟时游戏卡不卡?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
8
 楼主| 发表于 2022-6-25 14:17:22 | 只看该作者
新之梦 发表于 2022-6-22 16:04
是怎样的延迟,延迟时游戏卡不卡?

是事件执行(判定的公共事件)循环时会有延迟,并不是那种延迟
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
9
 楼主| 发表于 2022-6-25 14:32:19 | 只看该作者
新之梦 发表于 2022-6-22 15:11
复制脚本是有复制的事件不能使用独立开关的BUG,所以要用1.1版本的复制脚本
这个我试过,复制过来的事件 ...

这个脚本和我用的另一个脚本有冲突,而且我的复制事件版本是1.2
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
298
在线时间
33 小时
注册时间
2022-5-7
帖子
15
10
 楼主| 发表于 2022-7-12 21:32:33 | 只看该作者
没有人吗
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 11:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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