--- deliantra/server/socket/request.C 2009/11/04 13:46:37 1.153 +++ 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. @@ -265,6 +312,8 @@ INVOKE_CLIENT (EXTICMD, ns, ARG_DATA (buf, len)); } +//-GPL + void client::mapinfo_queue_clear () { @@ -281,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) @@ -398,6 +447,8 @@ INVOKE_CLIENT (ADDME, ns, ARG_DATA (buf, len)); } +//+GPL + /* #define MSG_TYPE_BOOK 1 #define MSG_TYPE_CARD 2 @@ -527,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"); @@ -789,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; @@ -804,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) { @@ -926,6 +974,8 @@ return 0; } +//-GPL + // prefetch (and touch) all maps within a specific distancd static void prefetch_surrounding_maps (maptile *map, int distance) @@ -948,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 @@ -972,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 (); @@ -1213,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 @@ -1279,6 +1275,8 @@ if (!pl->ns) return; + pl->ns->update_spells = false; + if (!pl->ns->monitor_spells) return; @@ -1458,3 +1456,5 @@ pl->ns->send_packet (sl); } +//-GPL +