[CF-Devel] Arrow, thrown object and generic attack fixes

Jan Echternach echter at informatik.uni-rostock.de
Tue Oct 31 15:37:00 CST 2000


Hi,

I started working on a proper fix for the arrow/thrown object problem:
Flying items couldn't be picked up, and save_throw_object() did nasty
things like putting active cone objects into ice cubes.  There are only
workarounds implemented for this problem right now.

The real solution in this patch is the new stop_item() function that
stops arrows and thrown objects or tells the caller that cones can't be
stopped.  It is used in pick_up_object() and save_throw_object().

While I was working at this problem, I rewrote the arrow handling in
server/time.c and noticed a bug there:  Arrows attacked while they were
in the process of being moved, and not on any map.  This could cause
server crashes when attacking a door with a rune.

Then I noticed that this is a very general problem:  Many things attack
while being removed, and only some code could handle this.  So I
changed attack_ob() and hit_player() to insist on that either both
attacker and victim are on the same map, or that one is in the other's
inventory.  The latter case is a "simple" attack that skips most parts
of attack_ob() and some parts of hit_player().

Now I had to change many move_<spell>() functions because most of them
did attack with removed attackers.  I found other possible server
crashes here:  move_fired_arch() already had an ugly workaround for
some server crashes (it removed AT_GHOSTHIT before attacking, because
this would lead to removing an removed object in hit_player()), but
this workaround was broken with the advent of FLAG_ONE_HIT.  And
check_fired_arch() didn't have such a workaround in the first place,
even though it had the same problem.

The result is the attached patch.  It probably needs some more testing
as it touches many basic parts of crossfire, but it already looks very
promising (i.e. no new server crashes on the MwizardG map ;-).  Please
tell me if you have any comments on it.  I'd like to apply this patch
to the CVS tree once it got a bit more testing.

-- 
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch37b.gz
Type: application/x-gunzip
Size: 15095 bytes
Desc: not available
Url : 
     
     http://shadowknight.real-time.com/pipermail/crossfire/attachments/20001031/01cef932/patch37b.bin
     
     
    


More information about the crossfire mailing list