--- deliantra/server/socket/request.C 2006/12/23 09:41:55 1.52 +++ deliantra/server/socket/request.C 2007/01/04 16:19:32 1.58 @@ -178,7 +178,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 +292,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 +336,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 +916,6 @@ } /** client wants the map resent */ - void MapRedrawCmd (char *buf, int len, player *pl) { @@ -1013,6 +1012,9 @@ char buf[MAX_BUF]; uint16 flags; + if (!pl->ns) + return; + packet sl ("stats"); if (pl->ob) @@ -1505,7 +1507,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 || MAP_NOSMOOTH (mp)) + if (!ob || ob->face == blank_face) smoothlevel = 0; else { @@ -1588,6 +1590,9 @@ client &socket = *pl->contr->ns; + if (!pl->active ()) + return; + check_map_change (pl->contr); packet sl (socket.mapmode == Map1Cmd ? "map1" : "map1a"); @@ -1717,6 +1722,8 @@ } else if (d > 3) { + m->touch (); + int need_send = 0, count; /* This block deals with spaces that are not visible for whatever @@ -1759,6 +1766,8 @@ } else { + m->touch (); + /* In this block, the space is visible or there are head objects * we need to send. */ @@ -2083,6 +2092,9 @@ void esrv_update_spells (player *pl) { + if (!pl->ns) + return; + if (!pl->ns->monitor_spells) return;