ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/map.C
(Generate patch)

Comparing deliantra/server/common/map.C (file contents):
Revision 1.124 by root, Tue Sep 4 05:43:20 2007 UTC vs.
Revision 1.128 by root, Sun Sep 9 06:25:45 2007 UTC

778 * Remove and free all objects in the given map. 778 * Remove and free all objects in the given map.
779 */ 779 */
780void 780void
781maptile::clear () 781maptile::clear ()
782{ 782{
783 sfree (regions, size ()); regions = 0;
784 delete [] regionmap; regionmap = 0;
785
786 if (spaces) 783 if (spaces)
787 { 784 {
788 for (mapspace *ms = spaces + size (); ms-- > spaces; ) 785 for (mapspace *ms = spaces + size (); ms-- > spaces; )
789 while (object *op = ms->bot) 786 while (object *op = ms->bot)
790 { 787 {
788 // manually remove, as to not trigger anything
789 if (ms->bot = op->above)
790 ms->bot->below = 0;
791
792 op->flag [FLAG_REMOVED] = true;
793
791 op = op->head_ (); 794 object *head = op->head_ ();
795 if (op == head)
796 {
792 op->destroy_inv (false); 797 op->destroy_inv (false);
793 op->destroy (); 798 op->destroy ();
799 }
800 else if (head->map != op->map)
801 {
802 LOG (llevDebug, "bad luck for object crossing map borders: %s", head->debug_desc ());
803 head->destroy ();
804 }
794 } 805 }
795 806
796 sfree (spaces, size ()), spaces = 0; 807 sfree (spaces, size ()), spaces = 0;
797 } 808 }
798 809
799 if (buttons) 810 if (buttons)
800 free_objectlinkpt (buttons), buttons = 0; 811 free_objectlinkpt (buttons), buttons = 0;
812
813 sfree (regions, size ()); regions = 0;
814 delete [] regionmap; regionmap = 0;
801} 815}
802 816
803void 817void
804maptile::clear_header () 818maptile::clear_header ()
805{ 819{
1596{ 1610{
1597 if (!sound) 1611 if (!sound)
1598 return; 1612 return;
1599 1613
1600 for_all_players (pl) 1614 for_all_players (pl)
1601 if (pl->ob->map == this) 1615 if (pl->observe->map == this)
1602 if (client *ns = pl->ns) 1616 if (client *ns = pl->ns)
1603 { 1617 {
1604 int dx = x - pl->ob->x; 1618 int dx = x - pl->observe->x;
1605 int dy = y - pl->ob->y; 1619 int dy = y - pl->observe->y;
1606 1620
1607 int distance = idistance (dx, dy); 1621 int distance = idistance (dx, dy);
1608 1622
1609 if (distance <= MAX_SOUND_DISTANCE) 1623 if (distance <= MAX_SOUND_DISTANCE)
1610 ns->play_sound (sound, dx, dy); 1624 ns->play_sound (sound, dx, dy);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines