--- deliantra/server/socket/request.C 2007/11/08 19:43:30 1.123 +++ deliantra/server/socket/request.C 2008/04/22 07:28:05 1.127 @@ -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) {