Skip to content

Commit

Permalink
Rectify missing code from uoscrobj which prevented assignment on mobi…
Browse files Browse the repository at this point in the history
…les.

Changed range logic from weapons to include some sanity checks.
  • Loading branch information
Jonathan Morland-Barrett committed Mar 12, 2023
1 parent 30229c4 commit 6d3782e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 8 deletions.
22 changes: 15 additions & 7 deletions pol-core/pol/item/weapon.cpp
Expand Up @@ -461,16 +461,24 @@ bool UWeapon::in_range( const Mobile::Character* wielder, const Mobile::Characte
unsigned short dist = pol_distance( wielder, target );
signed short min_dist_mod = wielder->min_attack_range_increase().sum();
signed short max_dist_mod = wielder->max_attack_range_increase().sum();
INFO_PRINT_TRACE( 22 ) << "in_range(0x" << fmt::hexu( wielder->serial ) << ",0x"
signed short min_dist = WEAPON_TMPL->minrange + min_dist_mod;
signed short max_dist = WEAPON_TMPL->maxrange + max_dist_mod;
min_dist = std::max( min_dist, (short)0 );
max_dist = std::max( max_dist, (short)0 );
min_dist = std::min( max_dist, min_dist );
max_dist = std::max( max_dist, min_dist );

INFO_PRINT_TRACE( 1 ) << "in_range(0x" << fmt::hexu( wielder->serial ) << ",0x"
<< fmt::hexu( target->serial ) << "):\n"
<< "dist: " << dist << "\n"
<< "minrange: " << WEAPON_TMPL->minrange << "\n"
<< "minrangemod: " << min_dist_mod << "\n"
<< "maxrange: " << WEAPON_TMPL->maxrange << "\n"
<< "maxrangemod: " << max_dist_mod << "\n"
<< "weap_minrange: " << WEAPON_TMPL->minrange << "\n"
<< "mod_minrange: " << min_dist_mod << "\n"
<< "weap_maxrange: " << WEAPON_TMPL->maxrange << "\n"
<< "mod_maxrange: " << max_dist_mod << "\n"
<< "calc_min: " << min_dist << "\n"
<< "calc_max: " << max_dist << "\n"
<< "has_los: " << wielder->realm()->has_los( *wielder, *target ) << "\n";
return ( dist >= (WEAPON_TMPL->minrange+min_dist_mod)&&
dist <= (WEAPON_TMPL->maxrange+max_dist_mod) &&
return ( dist >= min_dist && dist <= max_dist &&
wielder->realm()->has_los( *wielder, *target ) );
}

Expand Down
27 changes: 26 additions & 1 deletion pol-core/pol/uoscrobj.cpp
Expand Up @@ -1545,7 +1545,8 @@ BObjectImp* Item::set_script_member_id( const int id, int value )
return new BLong( swing_speed_increase().mod );
break;
case MBR_MIN_ATTACK_RANGE_INCREASE_MOD:
min_attack_range_increase( min_attack_range_increase().setAsMod( static_cast<short>( value ) ) );
min_attack_range_increase(
min_attack_range_increase().setAsMod( static_cast<short>( value ) ) );
if ( container != nullptr )
{
if ( Core::IsCharacter( container->serial ) )
Expand Down Expand Up @@ -2341,6 +2342,18 @@ BObjectImp* Character::get_script_member_id( const int id ) const
case MBR_SWING_SPEED_INCREASE_MOD:
return new BLong( swing_speed_increase().mod );
break;
case MBR_MIN_ATTACK_RANGE_INCREASE:
return new BLong( min_attack_range_increase().sum() );
break;
case MBR_MIN_ATTACK_RANGE_INCREASE_MOD:
return new BLong( min_attack_range_increase().mod );
break;
case MBR_MAX_ATTACK_RANGE_INCREASE:
return new BLong( max_attack_range_increase().sum() );
break;
case MBR_MAX_ATTACK_RANGE_INCREASE_MOD:
return new BLong( max_attack_range_increase().mod );
break;
case MBR_FOLLOWERSMAX:
return new BLong( followers().followers_max );
break;
Expand Down Expand Up @@ -2686,6 +2699,18 @@ BObjectImp* Character::set_script_member_id( const int id, int value )
refresh_ar();
return new BLong( swing_speed_increase().mod );
break;
case MBR_MIN_ATTACK_RANGE_INCREASE_MOD:
min_attack_range_increase(
min_attack_range_increase().setAsMod( static_cast<short>( value ) ) );
refresh_ar();
return new BLong( min_attack_range_increase().mod );
break;
case MBR_MAX_ATTACK_RANGE_INCREASE_MOD:
max_attack_range_increase(
max_attack_range_increase().setAsMod( static_cast<short>( value ) ) );
refresh_ar();
return new BLong( max_attack_range_increase().mod );
break;
case MBR_STATCAP:
{
auto val = skillstatcap();
Expand Down

0 comments on commit 6d3782e

Please sign in to comment.