--- deliantra/server/socket/request.C 2009/11/06 12:49:19 1.156 +++ deliantra/server/socket/request.C 2009/11/09 18:47:56 1.160 @@ -222,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. @@ -533,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 / fabs (pl->ob->speed)) + : MAX_TIME * 100; /* Send confirmation of command execution now */ packet sl ("comc"); @@ -795,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; @@ -810,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) { @@ -1223,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 @@ -1289,6 +1275,8 @@ if (!pl->ns) return; + pl->ns->update_spells = false; + if (!pl->ns->monitor_spells) return;