--- deliantra/server/socket/request.C 2008/12/27 08:41:44 1.147 +++ deliantra/server/socket/request.C 2009/11/04 17:24:00 1.154 @@ -5,18 +5,19 @@ * Copyright (©) 2001,2007 Mark Wedel * Copyright (©) 1992,2007 Frank Tore Johansen * - * 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. + * Deliantra is free software: you can redistribute it and/or modify it under + * the terms of the Affero GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * You should have received a copy of the Affero GNU General Public License + * and the GNU General Public License along with this program. If not, see + * . * * The authors can be reached via e-mail to */ @@ -143,7 +144,7 @@ send_map_info (player *pl) { client &socket = *pl->ns; - object *ob = pl->observe; + object *ob = pl->viewpoint; if (socket.mapinfocmd) { @@ -170,7 +171,7 @@ check_map_change (player *pl) { client &socket = *pl->ns; - object *ob = pl->observe; + object *ob = pl->viewpoint; region *reg = ob->region (); if (socket.current_region != reg) @@ -238,11 +239,7 @@ break; } - if (!strcmp (buf, "image_info")) - send_image_info (ns, params); - else if (!strcmp (buf, "image_sums")) - send_image_sums (ns, params); - else if (!strcmp (buf, "skill_info")) + if (!strcmp (buf, "skill_info")) send_skill_info (ns, params); else if (!strcmp (buf, "spell_paths")) send_spell_paths (ns, params); @@ -284,9 +281,9 @@ buf += strlen (buf) + 9; // initial map and its origin - maptile *map = pl->observe->map; - int mapx = pl->ns->mapx / 2 - pl->observe->x; - int mapy = pl->ns->mapy / 2 - pl->observe->y; + maptile *map = pl->viewpoint->map; + int mapx = pl->ns->mapx / 2 - pl->viewpoint->x; + int mapy = pl->ns->mapy / 2 - pl->viewpoint->y; int max_distance = 8; // limit maximum path length to something generous while (*buf && map && max_distance) @@ -426,7 +423,7 @@ /* 1. Extract an info */ info = nextinfo; - while ((info < len) && (buf[info] == ' ')) + while ((info < len) && (buf [info] == ' ')) info++; if (info >= len) @@ -434,14 +431,15 @@ nextinfo = info + 1; - while ((nextinfo < len) && (buf[nextinfo] != ' ')) + while ((nextinfo < len) && (buf [nextinfo] != ' ')) nextinfo++; if (nextinfo - info >= 49) /*Erroneous info asked */ continue; - strncpy (command, &(buf[info]), nextinfo - info); - command[nextinfo - info] = '\0'; + memcpy (command, buf + info, nextinfo - info); + command [nextinfo - info] = 0; + /* 2. Interpret info */ i = sscanf (command, "%d", &flag); @@ -485,7 +483,7 @@ buf++; } - execute_newserver_command (pl->ob, (char *) buf); + execute_newserver_command (pl->ob, (char *)buf); /* Perhaps something better should be done with a left over count. * Cleaning up the input should probably be done first - all actions @@ -687,7 +685,7 @@ static void rangetostring (player *pl, char *obuf) { - dynbuf_text buf; + dynbuf_text &buf = msg_dynbuf; buf.clear (); if (pl->ranged_ob) buf << " Range" << (pl->ob->current_weapon == pl->ranged_ob ? "*" : "") << ": " << pl->ranged_ob->name; @@ -956,8 +954,8 @@ void draw_client_map (player *pl) { - object *ob = pl->observe; - if (!ob->active) + object *ob = pl->viewpoint; + if (!pl->observe->active) return; /* If player is just joining the game, he isn't here yet, so the map @@ -974,7 +972,7 @@ /* do LOS after calls to update_position */ /* unfortunately, we need to udpate los when observing, currently */ - if (pl->do_los || pl->observe != pl->ob) + if (pl->do_los || pl->viewpoint != pl->ob) { pl->do_los = 0; pl->update_los (); @@ -1083,14 +1081,9 @@ { mask |= 0x8; - if (socket.extmap) - { - *last_ext |= 0x80; - last_ext = &sl[sl.length ()]; - sl << uint8 (d); - } - else - sl << uint8 (255 - 64 * d); + *last_ext |= 0x80; + last_ext = &sl[sl.length ()]; + sl << uint8 (d); } lastcell.count = d; @@ -1098,80 +1091,80 @@ mapspace &ms = m->at (nx, ny); ms.update (); - if (expect_true (socket.extmap)) - { - uint8 stat_hp = 0; - uint8 stat_width = 0; - uint8 flags = 0; - tag_t player = 0; - - // send hp information, if applicable - if (object *op = ms.faces_obj [0]) - if (op->is_head () && !op->invisible) + // extmap handling + uint8 stat_hp = 0; + uint8 stat_width = 0; + uint8 flags = 0; + tag_t player = 0; + + // send hp information, if applicable + if (object *op = ms.faces_obj [0]) + 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))) { - 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 (expect_false (op->has_dialogue ())) - flags |= 1; - - if (expect_false (op->type == PLAYER)) - player = op == ob ? pl->ob->count - : op == pl->ob ? ob->count - : op->count; + 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 (expect_false (lastcell.stat_hp != stat_hp)) - { - lastcell.stat_hp = stat_hp; + if (expect_false (op->has_dialogue ())) + flags |= 1; - mask |= 0x8; - *last_ext |= 0x80; - last_ext = &sl[sl.length ()]; + if (expect_false (op->type == PLAYER)) + player = op == ob ? pl->ob->count + : op == pl->ob ? ob->count + : op->count; + } - sl << uint8 (5) << uint8 (stat_hp); + if (expect_false (lastcell.stat_hp != stat_hp)) + { + lastcell.stat_hp = stat_hp; - if (stat_width > 1) - { - *last_ext |= 0x80; - last_ext = &sl[sl.length ()]; + mask |= 0x8; + *last_ext |= 0x80; + last_ext = &sl[sl.length ()]; - sl << uint8 (6) << uint8 (stat_width); - } - } + sl << uint8 (5) << uint8 (stat_hp); - if (expect_false (lastcell.player != player)) + if (stat_width > 1) { - lastcell.player = player; - - mask |= 0x8; *last_ext |= 0x80; last_ext = &sl[sl.length ()]; - sl << uint8 (0x47) << uint8 (4) << (uint32)player; + sl << uint8 (6) << uint8 (stat_width); } + } - if (expect_false (lastcell.flags != flags)) - { - lastcell.flags = flags; + if (expect_false (lastcell.player != player)) + { + lastcell.player = player; - mask |= 0x8; - *last_ext |= 0x80; - last_ext = &sl[sl.length ()]; + mask |= 0x8; + *last_ext |= 0x80; + last_ext = &sl[sl.length ()]; - sl << uint8 (8) << uint8 (flags); - } + sl << uint8 (0x47) << uint8 (4) << (uint32)player; + } + + if (expect_false (lastcell.flags != flags)) + { + lastcell.flags = flags; + + mask |= 0x8; + *last_ext |= 0x80; + last_ext = &sl[sl.length ()]; + + sl << uint8 (8) << uint8 (flags); } + // faces + /* Floor face */ if (update_space (sl, socket, ms, lastcell, 2)) mask |= 0x4;