--- deliantra/server/socket/request.C 2006/12/25 14:54:44 1.54 +++ deliantra/server/socket/request.C 2007/01/06 14:42:31 1.59 @@ -1,6 +1,7 @@ /* CrossFire, A Multiplayer game for X-windows + Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team Copyright (C) 2001 Mark Wedel Copyright (C) 1992 Frank Tore Johansen @@ -178,7 +179,7 @@ flags |= 8; snprintf (buf, MAX_BUF, "mapinfo - spatial %d %d %d %d %d %s", - flags, socket.mapx / 2 - ob->x, socket.mapy / 2 - ob->y, ob->map->width, ob->map->height, ob->map->path); + flags, socket.mapx / 2 - ob->x, socket.mapy / 2 - ob->y, ob->map->width, ob->map->height, &ob->map->path); } else snprintf (buf, MAX_BUF, "mapinfo current"); @@ -292,30 +293,30 @@ switch (dir) { - case '1': - dx = 0; - dy = -1; - map = get_map_from_coord (map, &dx, &dy); - map && (mapy -= map->height); - break; - case '2': - mapx += map->width; - dx = map->width; - dy = 0; - map = get_map_from_coord (map, &dx, &dy); - break; - case '3': - mapy += map->height; - dx = 0; - dy = map->height; - map = get_map_from_coord (map, &dx, &dy); - break; - case '4': - dx = -1; - dy = 0; - map = get_map_from_coord (map, &dx, &dy); - map && (mapx -= map->width); - break; + case '1': + dx = 0; + dy = -1; + map = map->xy_find (dx, dy); + map && (mapy -= map->height); + break; + case '2': + mapx += map->width; + dx = map->width; + dy = 0; + map = map->xy_find (dx, dy); + break; + case '3': + mapy += map->height; + dx = 0; + dy = map->height; + map = map->xy_find (dx, dy); + break; + case '4': + dx = -1; + dy = 0; + map = map->xy_find (dx, dy); + map && (mapx -= map->width); + break; } --max_distance; @@ -336,7 +337,7 @@ if (map->tile_path[3]) flags |= 8; - snprintf (bigbuf, MAX_BUF, "mapinfo %s spatial %d %d %d %d %d %s", token, flags, mapx, mapy, map->width, map->height, map->path); + snprintf (bigbuf, MAX_BUF, "mapinfo %s spatial %d %d %d %d %d %s", token, flags, mapx, mapy, map->width, map->height, &map->path); } else snprintf (bigbuf, MAX_BUF, "mapinfo %s nomap", token); @@ -916,7 +917,6 @@ } /** client wants the map resent */ - void MapRedrawCmd (char *buf, int len, player *pl) { @@ -1508,7 +1508,7 @@ /* If there is no object for this space, or if the face for the object * is the blank face, set the smoothlevel to zero. */ - if (!ob || ob->face == blank_face || mp->nosmooth) + if (!ob || ob->face == blank_face) smoothlevel = 0; else { @@ -1591,6 +1591,9 @@ client &socket = *pl->contr->ns; + if (!pl->active ()) + return; + check_map_change (pl->contr); packet sl (socket.mapmode == Map1Cmd ? "map1" : "map1a"); @@ -1720,6 +1723,8 @@ } else if (d > 3) { + m->touch (); + int need_send = 0, count; /* This block deals with spaces that are not visible for whatever @@ -1762,6 +1767,8 @@ } else { + m->touch (); + /* In this block, the space is visible or there are head objects * we need to send. */