--- deliantra/server/socket/request.C 2009/10/12 14:00:59 1.150 +++ deliantra/server/socket/request.C 2009/11/29 09:41:28 1.161 @@ -22,6 +22,8 @@ * The authors can be reached via e-mail to */ +//+GPL + /** * \file * Client handling. @@ -66,7 +68,7 @@ * client. If a value is -1, then we don't send that to the * client. */ -short atnr_cs_stat[NROFATTACKS] = { CS_STAT_RES_PHYS, +static short atnr_cs_stat[NROFATTACKS] = { CS_STAT_RES_PHYS, CS_STAT_RES_MAG, CS_STAT_RES_FIRE, CS_STAT_RES_ELEC, CS_STAT_RES_COLD, CS_STAT_RES_CONF, CS_STAT_RES_ACID, CS_STAT_RES_DRAIN, -1 /* weaponmagic */ , @@ -144,7 +146,7 @@ send_map_info (player *pl) { client &socket = *pl->ns; - object *ob = pl->observe; + object *ob = pl->viewpoint; if (socket.mapinfocmd) { @@ -171,7 +173,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) @@ -220,6 +222,51 @@ } /** + * This sends the skill number to name mapping. We ignore + * the params - we always send the same info no matter what. + */ +static void +send_skill_info (client *ns, char *params) +{ + packet sl; + sl << "replyinfo skill_info\n"; + + for (int i = 1; i < NUM_SKILLS; i++) + sl.printf ("%d:%s\n", i + CS_STAT_SKILLINFO, &skill_names [i]); + + if (sl.length () > MAXSOCKBUF) + { + LOG (llevError, "Buffer overflow in send_skill_info!\n"); + fatal (0); + } + + ns->send_packet (sl); +} + +/** + * This sends the spell path to name mapping. We ignore + * the params - we always send the same info no matter what. + */ +static void +send_spell_paths (client * ns, char *params) +{ + packet sl; + + sl << "replyinfo spell_paths\n"; + + for (int i = 0; i < NRSPELLPATHS; i++) + sl.printf ("%d:%s\n", 1 << i, spellpathnames[i]); + + if (sl.length () > MAXSOCKBUF) + { + LOG (llevError, "Buffer overflow in send_spell_paths!\n"); + fatal (0); + } + + ns->send_packet (sl); +} + +/** * RequestInfo is sort of a meta command. There is some specific * request of information, but we call other functions to provide * that information. @@ -239,11 +286,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); @@ -269,6 +312,8 @@ INVOKE_CLIENT (EXTICMD, ns, ARG_DATA (buf, len)); } +//-GPL + void client::mapinfo_queue_clear () { @@ -285,9 +330,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) @@ -402,6 +447,8 @@ INVOKE_CLIENT (ADDME, ns, ARG_DATA (buf, len)); } +//+GPL + /* #define MSG_TYPE_BOOK 1 #define MSG_TYPE_CARD 2 @@ -427,7 +474,7 @@ /* 1. Extract an info */ info = nextinfo; - while ((info < len) && (buf[info] == ' ')) + while ((info < len) && (buf [info] == ' ')) info++; if (info >= len) @@ -435,14 +482,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); @@ -486,7 +534,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 @@ -530,9 +578,9 @@ pl->count = 0; //TODO: schmorp thinks whatever this calculates, it makes no sense at all - int time = fabs (pl->ob->speed) < 0.001 - ? time = MAX_TIME * 100 - : time = (int) (MAX_TIME / fabs (pl->ob->speed)); + int time = pl->ob->has_active_speed () + ? (int) (MAX_TIME / pl->ob->speed) + : MAX_TIME * 100; /* Send confirmation of command execution now */ packet sl ("comc"); @@ -792,9 +840,9 @@ AddIfShort (ns->last_stats.wc, ob->stats.wc, CS_STAT_WC); AddIfShort (ns->last_stats.ac, ob->stats.ac, CS_STAT_AC); AddIfShort (ns->last_stats.dam, ob->stats.dam, CS_STAT_DAM); - AddIfFloat (ns->last_speed, ob->speed, CS_STAT_SPEED, 1.f/TICK); + AddIfFloat (ns->last_speed, ob->speed, CS_STAT_SPEED, 1.f / TICK); AddIfShort (ns->last_stats.food, ob->stats.food, CS_STAT_FOOD); - AddIfFloat (ns->last_weapon_sp, pl->weapon_sp, CS_STAT_WEAP_SP, 1.f/TICK); + AddIfFloat (ns->last_weapon_sp, pl->weapon_sp, CS_STAT_WEAP_SP, 1.f / TICK); AddIfInt (ns->last_weight_limit, weight_limit[ob->stats.Str], CS_STAT_WEIGHT_LIM); flags = 0; @@ -807,17 +855,14 @@ AddIfShort (ns->last_flags, flags, CS_STAT_FLAGS); - if (ns->sc_version < 1025) - { AddIfShort (ns->last_resist[ATNR_PHYSICAL], ob->resist[ATNR_PHYSICAL], CS_STAT_ARMOUR) } - else - for (int i = 0; i < NROFATTACKS; i++) - { - /* Skip ones we won't send */ - if (atnr_cs_stat[i] == -1) - continue; + for (int i = 0; i < NROFATTACKS; i++) + { + /* Skip ones we won't send */ + if (atnr_cs_stat[i] == -1) + continue; - AddIfShort (ns->last_resist[i], ob->resist[i], atnr_cs_stat[i]); - } + AddIfShort (ns->last_resist[i], ob->resist[i], atnr_cs_stat[i]); + } if (pl->ns->monitor_spells) { @@ -929,6 +974,8 @@ return 0; } +//-GPL + // prefetch (and touch) all maps within a specific distancd static void prefetch_surrounding_maps (maptile *map, int distance) @@ -951,14 +998,16 @@ prefetch_surrounding_maps (op->map, 3); } +//+GPL + /** * Draws client map. */ 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 @@ -975,7 +1024,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 (); @@ -1216,62 +1265,6 @@ } } -/*****************************************************************************/ -/* GROS: The following one is used to allow a plugin to send a generic cmd to*/ -/* a player. Of course, the client need to know the command to be able to */ -/* manage it ! */ -/*****************************************************************************/ -void -send_plugin_custom_message (object *pl, char *buf) -{ - pl->contr->ns->send_packet (buf); -} - -/** - * This sends the skill number to name mapping. We ignore - * the params - we always send the same info no matter what. - */ -void -send_skill_info (client *ns, char *params) -{ - packet sl; - sl << "replyinfo skill_info\n"; - - for (int i = 1; i < NUM_SKILLS; i++) - sl.printf ("%d:%s\n", i + CS_STAT_SKILLINFO, &skill_names [i]); - - if (sl.length () > MAXSOCKBUF) - { - LOG (llevError, "Buffer overflow in send_skill_info!\n"); - fatal (0); - } - - ns->send_packet (sl); -} - -/** - * This sends the spell path to name mapping. We ignore - * the params - we always send the same info no matter what. - */ -void -send_spell_paths (client * ns, char *params) -{ - packet sl; - - sl << "replyinfo spell_paths\n"; - - for (int i = 0; i < NRSPELLPATHS; i++) - sl.printf ("%d:%s\n", 1 << i, spellpathnames[i]); - - if (sl.length () > MAXSOCKBUF) - { - LOG (llevError, "Buffer overflow in send_spell_paths!\n"); - fatal (0); - } - - ns->send_packet (sl); -} - /** * This looks for any spells the player may have that have changed their stats. * it then sends an updspell packet for each spell that has changed in this way @@ -1282,6 +1275,8 @@ if (!pl->ns) return; + pl->ns->update_spells = false; + if (!pl->ns->monitor_spells) return; @@ -1461,3 +1456,5 @@ pl->ns->send_packet (sl); } +//-GPL +