Hello. Here is the background:
I have had mobs make better use of weapons and armor they
find/acquire through their life spans. If they aren't wearing any armor, and
they can wear a piece of it in their inventory they do. If they aren't
wielding any weapon and they have on in their inventory they can, they do.
This works fine. So then I thought, what if they are wielding a dagger and
they pick up a long sword. The long sword is better and they should switch
weapons. This works too. Kind of.
End of background. Now the problem is that if a mob has two weapons that do
the same damage they keep switching. I noticed this with a mob who had a
long sword and a battle axe. Both do 1d8 damage. I will include the suspect
part of the code as follows:
if (IS_WIELDING(ch) && !(mob_index[GET_MOB_RNUM(ch)].func == shop_keeper) )
{
max = 1;
/* best_obj = NULL; */
best_obj = ch->equipment[WEAR_WIELD];
wield_obj = ch->equipment[WEAR_WIELD];
max = (((GET_OBJ_VAL(wield_obj, 2) + 1) / 2.0) * GET_OBJ_VAL(wield_obj,
1));
for ( obj = ch->carrying; obj; obj = obj->next_content) {
if (GET_OBJ_TYPE(obj) == ITEM_WEAPON) {
if ( ((((GET_OBJ_VAL(obj,2)+1) / 2.0) * GET_OBJ_VAL(obj, 1)) > max)
&& (!invalid_align(ch, obj) && !invalid_class(ch, obj)) ) {
if (GET_OBJ_VNUM(obj) != GET_OBJ_VNUM(best_obj)) {
best_obj = obj;
max = (((GET_OBJ_VAL(best_obj,2)+1)/ 2.0) *
GET_OBJ_VAL(best_obj, 1))
It seems like when it check the damage value of the obj if it is > max
should be the correct logic because even if both weapons are 1d8 this
evaluates to 4.5 > 4.5 which is not true so they should keep what the have.
Anyone have any insight? (Besides this is ugly code :)
Thanks!
Mark Garringer
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/03/01 PST