Hello. I noticed that I was getting an issue where events with the same event ID would be erased on the map immediately after setting up the Following Pokemon event.
Example:
I set up the Following Pokemon event on Map A.
I would then transfer to Map B
I noticed that Event ID 3 disappeared after the transfer. I had to enter Map C (Map ID: 3) then enter Map B (Map ID: 2) to get the erased event to appear.
I figured something was wrong with the plugin as it wasn't supposed to do this. I looked into Event Sprint.rb and found the following:
#-------------------------------------------------------------------------------
# Refresh Following Pokemon sprites whenever the map is refreshed
#-------------------------------------------------------------------------------
EventHandlers.add(:on_enter_map, :erase_following_pkmn, proc { |_old_map_id|
event = FollowingPkmn.get_data
next if !event
FollowingPkmn.refresh(false)
$map_factory.maps.each { |map|
map.events[event.event_id]&.erase if event.original_map_id == event.current_map_id
}
See the issue with event.original_map_id == event.current_map_id ? I believe that when the EventHandler was triggered, event.current_map_id is using map id where the EventHandler was triggered instead of the map the player is transferring to. This causes the event with the same ID on another map to be erased.
The workaround/solution to this issue was to change
#-------------------------------------------------------------------------------
# Refresh Following Pokemon sprites whenever the map is refreshed
#-------------------------------------------------------------------------------
EventHandlers.add(:on_enter_map, :erase_following_pkmn, proc { |_old_map_id|
event = FollowingPkmn.get_data
next if !event
FollowingPkmn.refresh(false)
$map_factory.maps.each { |map|
map.events[event.event_id]&.erase if event.original_map_id == event.current_map_id
}
to
#-------------------------------------------------------------------------------
# Refresh Following Pokemon sprites whenever the map is refreshed
#-------------------------------------------------------------------------------
EventHandlers.add(:on_enter_map, :erase_following_pkmn, proc { |_old_map_id|
event = FollowingPkmn.get_data
next if !event
FollowingPkmn.refresh(false)
$map_factory.maps.each { |map|
map.events[event.event_id]&.erase if event.original_map_id == map.events[event.event_id]&.map_id
}
and
#-----------------------------------------------------------------------------
# Updating the refresh method to allow clearing of base event in all maps,
# add reflections and prevent crash when base map/event is deleted
#-----------------------------------------------------------------------------
alias __followingpkmn__refresh refresh unless method_defined?(:__followingpkmn__refresh)
def refresh(*args)
ret = __followingpkmn__refresh(*args)
return ret if !FollowingPkmn.can_check?
event = FollowingPkmn.get_event
@sprites.each do |spr|
next if !FollowingPkmn.get_data&.following_pkmn?
spr.set_reflection(@viewport, event)
end
data = FollowingPkmn.get_data
$map_factory.maps.each { |map|
map&.events&.[](data.event_id)&.erase if data && data.original_map_id == data.current_map_id
}
FollowingPkmn.refresh(false)
end
to
#-----------------------------------------------------------------------------
# Updating the refresh method to allow clearing of base event in all maps,
# add reflections and prevent crash when base map/event is deleted
#-----------------------------------------------------------------------------
alias __followingpkmn__refresh refresh unless method_defined?(:__followingpkmn__refresh)
def refresh(*args)
ret = __followingpkmn__refresh(*args)
return ret if !FollowingPkmn.can_check?
event = FollowingPkmn.get_event
@sprites.each do |spr|
next if !FollowingPkmn.get_data&.following_pkmn?
spr.set_reflection(@viewport, event)
end
data = FollowingPkmn.get_data
$map_factory.maps.each { |map|
map&.events&.[](data.event_id)&.erase if data && data.original_map_id == map&.events&.[](data.event_id)&.map_id
}
FollowingPkmn.refresh(false)
end
After doing the above, the event on Map B was no longer getting erased. It works for now, but I don't know if any issues will result from this quick fix.