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.127 by root, Fri Sep 7 18:03:31 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 if (op == op->head_ ())
795 {
792 op->destroy_inv (false); 796 op->destroy_inv (false);
793 op->destroy (); 797 op->destroy ();
798 }
794 } 799 }
795 800
796 sfree (spaces, size ()), spaces = 0; 801 sfree (spaces, size ()), spaces = 0;
797 } 802 }
798 803
799 if (buttons) 804 if (buttons)
800 free_objectlinkpt (buttons), buttons = 0; 805 free_objectlinkpt (buttons), buttons = 0;
806
807 sfree (regions, size ()); regions = 0;
808 delete [] regionmap; regionmap = 0;
801} 809}
802 810
803void 811void
804maptile::clear_header () 812maptile::clear_header ()
805{ 813{
1596{ 1604{
1597 if (!sound) 1605 if (!sound)
1598 return; 1606 return;
1599 1607
1600 for_all_players (pl) 1608 for_all_players (pl)
1601 if (pl->ob->map == this) 1609 if (pl->observe->map == this)
1602 if (client *ns = pl->ns) 1610 if (client *ns = pl->ns)
1603 { 1611 {
1604 int dx = x - pl->ob->x; 1612 int dx = x - pl->observe->x;
1605 int dy = y - pl->ob->y; 1613 int dy = y - pl->observe->y;
1606 1614
1607 int distance = idistance (dx, dy); 1615 int distance = idistance (dx, dy);
1608 1616
1609 if (distance <= MAX_SOUND_DISTANCE) 1617 if (distance <= MAX_SOUND_DISTANCE)
1610 ns->play_sound (sound, dx, dy); 1618 ns->play_sound (sound, dx, dy);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines