--- deliantra/server/socket/request.C 2008/05/20 13:25:55 1.131 +++ deliantra/server/socket/request.C 2008/09/25 22:58:13 1.139 @@ -835,7 +835,7 @@ AddIfShort (ns->last_stats.Cha, ob->stats.Cha, CS_STAT_CHA); for (int s = 0; s < NUM_SKILLS; s++) - if (object *skill = opl->last_skill_ob[s]) + if (object *skill = opl->last_skill_ob [s]) if (skill->stats.exp != ns->last_skill_exp [s]) { ns->last_skill_exp [s] = skill->stats.exp; @@ -914,7 +914,6 @@ pl->ns->last_weight = weight; pl->ns->send_packet (sl); - SET_FLAG (pl->ob, FLAG_CLIENT_SENT); } /****************************************************************************** @@ -1179,7 +1178,6 @@ if (d > 3) { - int need_send = 0, count; /* This block deals with spaces that are not visible for whatever @@ -1195,11 +1193,11 @@ count = -1; - /* properly clear a previously sent big face */ if (lastcell.faces[0] || lastcell.faces[1] || lastcell.faces[2] || lastcell.stat_hp || lastcell.flags || lastcell.player) need_send = 1; + /* properly clear a previously sent big face */ map_clearcell (&lastcell, count); if ((mask & 0xf) || need_send) @@ -1265,17 +1263,21 @@ && 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))) + || 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] == '@') + if (op->has_dialogue ()) flags |= 1; - if (op->type == PLAYER && op != ob) - player = op->count; + if (op->type == PLAYER) + player = op == ob ? pl->ob->count + : op == pl->ob ? ob->count + : op->count; } if (lastcell.stat_hp != stat_hp) @@ -1435,7 +1437,7 @@ 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]); + sl.printf ("%d:%s\n", i + CS_STAT_SKILLINFO, &skill_names [i]); if (sl.length () > MAXSOCKBUF) { @@ -1489,21 +1491,21 @@ int flags = 0; /* check if we need to update it */ - if (spell->last_sp != SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA)) + if (spell->cached_sp != SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA)) { - spell->last_sp = SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA); + spell->cached_sp = SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA); flags |= UPD_SP_MANA; } - if (spell->last_grace != SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE)) + if (spell->cached_grace != SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE)) { - spell->last_grace = SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE); + spell->cached_grace = SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE); flags |= UPD_SP_GRACE; } - if (spell->last_eat != spell->stats.dam + SP_level_dam_adjust (pl->ob, spell)) + if (spell->cached_eat != spell->stats.dam + SP_level_dam_adjust (pl->ob, spell)) { - spell->last_eat = spell->stats.dam + SP_level_dam_adjust (pl->ob, spell); + spell->cached_eat = spell->stats.dam + SP_level_dam_adjust (pl->ob, spell); flags |= UPD_SP_DAMAGE; } @@ -1515,9 +1517,9 @@ << uint8 (flags) << uint32 (spell->count); - if (flags & UPD_SP_MANA ) sl << uint16 (spell->last_sp); - if (flags & UPD_SP_GRACE ) sl << uint16 (spell->last_grace); - if (flags & UPD_SP_DAMAGE) sl << uint16 (spell->last_eat); + if (flags & UPD_SP_MANA ) sl << uint16 (spell->cached_sp); + if (flags & UPD_SP_GRACE ) sl << uint16 (spell->cached_grace); + if (flags & UPD_SP_DAMAGE) sl << uint16 (spell->cached_eat); pl->ns->send_packet (sl); } @@ -1557,20 +1559,14 @@ } /* store costs and damage in the object struct, to compare to later */ - spell->last_sp = SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA); - spell->last_grace = SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE); - spell->last_eat = spell->stats.dam + SP_level_dam_adjust (pl->ob, spell); + spell->cached_sp = SP_level_spellpoint_cost (pl->ob, spell, SPELL_MANA); + spell->cached_grace = SP_level_spellpoint_cost (pl->ob, spell, SPELL_GRACE); + spell->cached_eat = spell->stats.dam + SP_level_dam_adjust (pl->ob, spell); /* figure out which skill it uses, if it uses one */ if (spell->skill) - { - for (i = 1; i < NUM_SKILLS; i++) - if (!strcmp (spell->skill, skill_names[i])) - { - skill = i + CS_STAT_SKILLINFO; - break; - } - } + if (object *tmp = pl->find_skill (spell->skill)) + skill = tmp->subtype + CS_STAT_SKILLINFO; // spells better have a face if (!spell->face) @@ -1585,9 +1581,9 @@ sl << uint32 (spell->count) << uint16 (spell->level) << uint16 (spell->casting_time) - << uint16 (spell->last_sp) - << uint16 (spell->last_grace) - << uint16 (spell->last_eat) + << uint16 (spell->cached_sp) + << uint16 (spell->cached_grace) + << uint16 (spell->cached_eat) << uint8 (skill) << uint32 (spell->path_attuned) << uint32 (spell->face)