--- deliantra/server/socket/request.C 2007/08/24 01:03:09 1.121 +++ deliantra/server/socket/request.C 2008/05/06 16:55:26 1.128 @@ -1,11 +1,11 @@ /* - * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. + * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team + * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2001,2007 Mark Wedel * Copyright (©) 1992,2007 Frank Tore Johansen * - * Crossfire TRT is free software: you can redistribute it and/or modify + * Deliantra is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * The authors can be reached via e-mail to + * The authors can be reached via e-mail to */ /** @@ -265,9 +265,9 @@ buf += strlen (buf) + 9; // initial map and its origin - maptile *map = pl->ob->map; - int mapx = pl->ns->mapx / 2 - pl->ob->x; - int mapy = pl->ns->mapy / 2 - pl->ob->y; + maptile *map = pl->observe->map; + int mapx = pl->ns->mapx / 2 - pl->observe->x; + int mapy = pl->ns->mapy / 2 - pl->observe->y; int max_distance = 8; // limit maximum path length to something generous while (*buf && map && max_distance) @@ -888,8 +888,10 @@ * Tells the client that here is a player it should start using. */ void -esrv_new_player (player *pl, uint32 weight) +esrv_new_player (player *pl) { + sint32 weight = pl->ob->client_weight (); + packet sl ("player"); sl << uint32 (pl->ob->count) @@ -1033,7 +1035,7 @@ * can get swapped out. If so, don't try to send them a map. All will * be OK once they really log in. */ - if (!plmap || plmap->in_memory != MAP_IN_MEMORY) + if (!plmap || plmap->in_memory != MAP_ACTIVE) return; int x, y, ax, ay, startlen, max_x, max_y, oldlen; @@ -1244,25 +1246,24 @@ // send hp information, if applicable if (object *op = ms.faces_obj [0]) - { - if (op->head || op->invisible) - ; // do not show - else if (op->type == PLAYER - || QUERY_FLAG (op, FLAG_MONSTER) || QUERY_FLAG (op, FLAG_ALIVE) || QUERY_FLAG (op, FLAG_GENERATOR)) - { - if (op->stats.maxhp > 0 && (unsigned) op->stats.maxhp > (unsigned) op->stats.hp) - { - stat_hp = 255 - (op->stats.hp * 255 + 254) / op->stats.maxhp; - stat_width = op->arch->max_x - op->arch->x; //TODO: should be upper-left edge - } - } - - if (op->msg && op->msg[0] == '@') - flags |= 1; - - if (op->type == PLAYER && op != ob) - player = op->count; - } + if (op->is_head () && !op->invisible) + { + if (op->stats.maxhp > op->stats.hp + && op->stats.maxhp > 0 + && (op->type == PLAYER + || op->type == DOOR // does not work, have maxhp 0 + || QUERY_FLAG (op, FLAG_MONSTER) || QUERY_FLAG (op, FLAG_ALIVE) || QUERY_FLAG (op, FLAG_GENERATOR))) + { + stat_hp = 255 - (op->stats.hp * 255 + 254) / op->stats.maxhp; + stat_width = op->arch->max_x - op->arch->x; //TODO: should be upper-left edge + } + + if (op->msg && op->msg[0] == '@') + flags |= 1; + + if (op->type == PLAYER && op != ob) + player = op->count; + } if (lastcell.stat_hp != stat_hp) {