fix/stuckdoors: handle prone units + items too

develop
jj 2013-04-21 11:27:35 +02:00
parent fce4a2d21a
commit d7f5f06d18
1 changed files with 12 additions and 7 deletions

@ -1,7 +1,7 @@
# fix doors that are frozen in 'open' state # fix doors that are frozen in 'open' state
# door is stuck in open state if the map occupancy flag incorrectly indicates # this may happen after people mess with the game by (incorrectly) teleporting units or items
# that an unit is present (and creatures will prone to pass through) # a door may stick open if the map occupancy flags are wrong
count = 0 count = 0
df.world.buildings.all.each { |bld| df.world.buildings.all.each { |bld|
@ -11,10 +11,15 @@ df.world.buildings.all.each { |bld|
next if bld.close_timer == 0 next if bld.close_timer == 0
# check if occupancy is set # check if occupancy is set
occ = df.map_occupancy_at(bld.x1, bld.y1, bld.z) occ = df.map_occupancy_at(bld.x1, bld.y1, bld.z)
next if not occ.unit if (occ.unit or occ.unit_grounded) and not
# check if an unit is present # check if an unit is present
next if df.world.units.active.find { |u| u.pos.x == bld.x1 and u.pos.y == bld.y1 and u.pos.z == bld.z } df.world.units.active.find { |u| u.pos.x == bld.x1 and u.pos.y == bld.y1 and u.pos.z == bld.z }
count += 1 count += 1
occ.unit = false occ.unit = occ.unit_grounded = false
end
if occ.item and not df.world.items.all.find { |i| i.pos.x == bld.x1 and i.pos.y == bld.y1 and u.pos.z == bld.z }
count += 1
occ.item = false
end
} }
puts "unstuck #{count} doors" puts "unstuck #{count} doors"