Bug: wear_obj is still being an evil little bitch
Danger: Low - Inconsistent handling of wielding/wearing items
Found by: Remcon
Fixed by: Remcon
---
act_obj.c, wear_obj
Locate:
case ITEM_WEAR_SHIELD:
if( get_eq_char( ch, WEAR_DUAL_WIELD )
|| ( get_eq_char( ch, WEAR_WIELD ) && get_eq_char( ch, WEAR_MISSILE_WIELD ) )
|| ( get_eq_char( ch, WEAR_WIELD ) && get_eq_char( ch, WEAR_HOLD ) ) )
{
send_to_char( "You can't use a shield AND two weapons!\n\r", ch );
return;
}
Change to:
case ITEM_WEAR_SHIELD:
if( get_eq_char( ch, WEAR_DUAL_WIELD )
|| ( get_eq_char( ch, WEAR_WIELD ) && get_eq_char( ch, WEAR_MISSILE_WIELD ) )
|| ( get_eq_char( ch, WEAR_WIELD ) && get_eq_char( ch, WEAR_HOLD ) ) )
{
if( get_eq_char( ch, WEAR_HOLD ) )
send_to_char( "You can't use a shield while using a weapon and holding something!\n\r", ch );
else
send_to_char( "You can't use a shield AND two weapons!\n\r", ch );
return;
}
Locate:
case ITEM_HOLD:
if( get_eq_char( ch, WEAR_DUAL_WIELD )
|| ( get_eq_char( ch, WEAR_WIELD ) && get_eq_char( ch, WEAR_MISSILE_WIELD ) ) )
{
send_to_char( "You cannot hold something AND two weapons!\n\r", ch );
return;
}
Chaneg to:
case ITEM_HOLD:
if( get_eq_char( ch, WEAR_DUAL_WIELD )
|| ( get_eq_char( ch, WEAR_WIELD )
&& ( get_eq_char( ch, WEAR_MISSILE_WIELD ) || get_eq_char( ch, WEAR_SHIELD ) ) ) )
{
if( get_eq_char( ch, WEAR_SHIELD ) )
send_to_char( "You cannot hold something while using a weapon and a shield!\n\r", ch );
else
send_to_char( "You cannot hold something AND two weapons!\n\r", ch );
return;
}
Locate:
OBJ_DATA *mw, *dw, *hd, *sd;
tmpobj = get_eq_char( ch, WEAR_WIELD );
mw = get_eq_char( ch, WEAR_MISSILE_WIELD );
dw = get_eq_char( ch, WEAR_DUAL_WIELD );
hd = get_eq_char( ch, WEAR_HOLD );
sd = get_eq_char( ch, WEAR_SHIELD );
Below that, add:
if( hd && sd )
{
send_to_char( "You are already holding something and wearing a shield.\n\r", ch );
return;
}
Some bugs just refuse to die. This is rapidly becoming one of them. Hopefully this will be the last time this one needs to be fixed after having been fixed after having been fixed......