[CF-Devel] Flying monster stealing patch

crossfire-devel at archives.real-time.com crossfire-devel at archives.real-time.com
Fri Dec 5 09:18:22 CST 2003


On Tue, Nov 18, 2003 at 11:56:25PM -0800, Mark Wedel wrote:
>
     
      H. S. Teoh wrote:
     
     >
     
      >On Mon, Nov 17, 2003 at 11:40:39PM -0800, Mark Wedel wrote:
     
     >
     
     
     >
     
      >>Check to see if tmp->env changes - if so, the object was stolen.
     
     >
     
      >>This means storing the old ->env field away.  If that succeeds, then
     
     >
     
      >>send the esrv_del_item with the tag that was stored away.
     
     >
     
      >
     
     >
     
      >
     
     >
     
      >Given that I've changed pick_up() to return a true/false value indicating
     
     >
     
      >whether the pickup was successful, I probably don't need this anymore,
     
     >
     
      >right?
     
     >
     
     
     >
     
       Correct.
     
     >
     
     
     >
     
      >
     
     >
     
      >Also, do you think it makes more sense to send esrv_del_item *inside*
     
     >
     
      >pick_up() or pick_up_item() instead? It would seem that fixing it once in
     
     >
     
      >pick_up() will save us the headache of fixing the 50 other places where
     
     >
     
      >pick_up() is called, which might have to do the same thing. (I don't know
     
     >
     
      >if there's any other place which needs to do this right now, but it's
     
     >
     
      >conceivable to happen in the future.)
     
     >
     
     
     >
     
       Well, using pick_up in the stealing code is really a pretty bad hack.
     
     >
     
     
     >
     
       pick_up was obviously originally designed/coded to pick up items off the 
     
     >
     
       floor and move it to a creatures inventory.  Thus, things like checking for 
     
     >
     
      fly, no_pick, etc.  And for that case, it seems to work fine.
     
     >
     
     
     >
     
       The expectation for pick_up() that the object may be in another creatures 
     
     >
     
      inventory is odd
     
     
OK, so should pick_up() check to see if the object is in another
creature's inventory, and do something different in that case?

>
     
       I suppose it wouldn't hurt for pick_up to send the appropriate 
     
     >
     
       client/server command.
     
     
If it detects that the object happens to be in another creature's
inventory, I suppose.

[snip]
>
     
      >Hmm, that's true. So then the question is, is it possible to have a flying
     
     >
     
      >monster that steals, and how would I do it? 
     
     >
     
     
     >
     
       Well, as said above, pick_up was originally designed for picking things up 
     
     >
     
      from the ground, where such a change made sense.
     
     >
     
     
     >
     
       The best solution would be to pass another flag into pick_up() which could 
     
     >
     
       say to let flying creatures pick up the object.  Or the simpler, but 
     
     >
     
      slightly more dangerous way, would be to clear the flag_flying before 
     
     >
     
      calling pick_up, and then re-setting it afterwards.  But calling pick_up() 
     
     >
     
      may call fix_player() or otherwise update stats, which makes that not quite 
     
     >
     
      such a good method.
     
     [snip]

Perhaps the most correct way would be for pick_up() to behave differently
(eg. skip the is_flying check) if the object being picked up is in another
creature's inventory?


T

-- 
Mediocrity has been pushed to extremes.

_______________________________________________
crossfire-devel mailing list
     
     crossfire-devel at lists.real-time.com
     
     
     https://mailman.real-time.com/mailman/listinfo/crossfire-devel
     
     
    


More information about the crossfire mailing list