@@ -512,7 +512,7 @@ float npc::evaluate_character( const Character &candidate, bool my_gun, bool ene
512
512
bool candidate_gun = candidate.get_wielded_item () && candidate.get_wielded_item ()->is_gun ();
513
513
const item &candidate_weap = candidate.get_wielded_item () ? *candidate.get_wielded_item () :
514
514
null_item_reference ();
515
- double candidate_weap_val = candidate.weapon_value ( candidate_weap );
515
+ double candidate_weap_val = candidate.evaluate_weapon ( candidate_weap );
516
516
float candidate_health = candidate.hp_percentage () / 100 .0f ;
517
517
float armour = estimate_armour ( candidate );
518
518
float speed = std::max ( 0 .25f , candidate.get_speed () / 100 .0f );
@@ -1317,7 +1317,7 @@ void npc::regen_ai_cache()
1317
1317
ai_cache.danger = 0 .0f ;
1318
1318
ai_cache.total_danger = 0 .0f ;
1319
1319
item &weapon = get_wielded_item () ? *get_wielded_item () : null_item_reference ();
1320
- ai_cache.my_weapon_value = weapon_value ( weapon );
1320
+ ai_cache.my_weapon_value = evaluate_weapon ( weapon );
1321
1321
ai_cache.dangerous_explosives = find_dangerous_explosives ();
1322
1322
mem_combat.formation_distance = -1 ;
1323
1323
@@ -3897,7 +3897,7 @@ bool npc::wants_take_that( const item &it )
3897
3897
3898
3898
item &weap = get_wielded_item () ? *get_wielded_item () : null_item_reference ();
3899
3899
if ( ( ( !whitelisting && value ( it ) > min_value ) || item_whitelisted ( it ) ) ||
3900
- weapon_value ( it ) > weapon_value ( weap ) ) {
3900
+ evaluate_weapon ( it ) > evaluate_weapon ( weap ) ) {
3901
3901
good = true ;
3902
3902
}
3903
3903
@@ -4133,62 +4133,36 @@ bool npc::do_player_activity()
4133
4133
return moves != old_moves;
4134
4134
}
4135
4135
4136
- double npc::evaluate_weapon ( item &maybe_weapon, bool can_use_gun, bool use_silent ) const
4137
- {
4138
- // Needed because evaluation includes electricity via linked cables.
4139
- const map &here = get_map ();
4140
-
4141
- bool allowed = can_use_gun && maybe_weapon.is_gun () && ( !use_silent || maybe_weapon.is_silent () );
4142
- // According to unmodified evaluation score, NPCs almost always prioritize wielding guns if they have one.
4143
- // This is relatively reasonable, as players can issue commands to NPCs when we do not want them to use ranged weapons.
4144
- // Conversely, we cannot directly issue commands when we want NPCs to prioritize ranged weapons.
4145
- // Note that the scoring method here is different from the 'weapon_value' used elsewhere.
4146
- double val_gun = allowed ? gun_value ( maybe_weapon, maybe_weapon.shots_remaining ( here,
4147
- this ) ) : 0 ;
4148
- add_msg_debug ( debugmode::DF_NPC_ITEMAI,
4149
- " %s %s valued at <color_light_cyan>%1.2f as a ranged weapon to wield</color>." ,
4150
- disp_name ( true ), maybe_weapon.type ->get_id ().str (), val_gun );
4151
- double val_melee = melee_value ( maybe_weapon );
4152
- add_msg_debug ( debugmode::DF_NPC_ITEMAI,
4153
- " %s %s valued at <color_light_cyan>%1.2f as a melee weapon to wield</color>." , disp_name ( true ),
4154
- maybe_weapon.type ->get_id ().str (), val_melee );
4155
- double val = std::max ( val_gun, val_melee );
4156
- return val;
4157
- }
4158
-
4159
4136
item *npc::evaluate_best_weapon () const
4160
4137
{
4161
- bool can_use_gun = !is_player_ally () || rules.has_flag ( ally_rule::use_guns );
4162
- bool use_silent = is_player_ally () && rules.has_flag ( ally_rule::use_silent );
4163
-
4164
4138
item_location weapon = get_wielded_item ();
4165
4139
item &weap = weapon ? *weapon : null_item_reference ();
4166
4140
4167
4141
// Check if there's something better to wield
4168
4142
item *best = &weap;
4169
- double best_value = evaluate_weapon ( weap, can_use_gun, use_silent );
4143
+ double best_value = evaluate_weapon ( weap );
4170
4144
4171
4145
// To prevent changing to barely better stuff
4172
4146
best_value *= std::max<float >( 1 .0f , ai_cache.danger_assessment / 10 .0f );
4173
4147
4174
4148
// Fists aren't checked below
4175
- double fist_value = evaluate_weapon ( null_item_reference (), can_use_gun, use_silent );
4149
+ double fist_value = evaluate_weapon ( null_item_reference () );
4176
4150
4177
4151
if ( fist_value > best_value ) {
4178
4152
best = &null_item_reference ();
4179
4153
best_value = fist_value;
4180
4154
}
4181
4155
4182
4156
// Now check through the NPC's inventory for melee weapons, guns, or holstered items
4183
- visit_items ( [this , can_use_gun, use_silent, &weap, &best_value, &best]( item * node, item * ) {
4157
+ visit_items ( [this , &weap, &best_value, &best]( item * node, item * ) {
4184
4158
if ( can_wield ( *node ).success () ) {
4185
4159
double weapon_value = 0.0 ;
4186
4160
bool using_same_type_bionic_weapon = is_using_bionic_weapon ()
4187
4161
&& node != &weap
4188
4162
&& node->type ->get_id () == weap.type ->get_id ();
4189
4163
4190
4164
if ( node->is_melee () || node->is_gun () ) {
4191
- weapon_value = evaluate_weapon ( *node, can_use_gun, use_silent );
4165
+ weapon_value = evaluate_weapon ( *node );
4192
4166
if ( weapon_value > best_value && !using_same_type_bionic_weapon ) {
4193
4167
best = const_cast <item *>( node );
4194
4168
best_value = weapon_value;
@@ -4207,10 +4181,6 @@ item *npc::evaluate_best_weapon() const
4207
4181
4208
4182
bool npc::wield_better_weapon ()
4209
4183
{
4210
- // These are also assigned here so npc::evaluate_best_weapon() can be called by itself
4211
- bool can_use_gun = !is_player_ally () || rules.has_flag ( ally_rule::use_guns );
4212
- bool use_silent = is_player_ally () && rules.has_flag ( ally_rule::use_silent );
4213
-
4214
4184
item_location weapon = get_wielded_item ();
4215
4185
item &weap = weapon ? *weapon : null_item_reference ();
4216
4186
item *best = &weap;
@@ -4220,12 +4190,12 @@ bool npc::wield_better_weapon()
4220
4190
if ( best == better_weapon ) {
4221
4191
add_msg_debug ( debugmode::DF_NPC, " Wielded %s is best at %.1f, not switching" ,
4222
4192
best->type ->get_id ().str (),
4223
- evaluate_weapon ( *better_weapon, can_use_gun, use_silent ) );
4193
+ evaluate_weapon ( *better_weapon ) );
4224
4194
return false ;
4225
4195
}
4226
4196
4227
4197
add_msg_debug ( debugmode::DF_NPC, " Wielding %s at value %.1f" , better_weapon->type ->get_id ().str (),
4228
- evaluate_weapon ( *better_weapon, can_use_gun, use_silent ) );
4198
+ evaluate_weapon ( *better_weapon ) );
4229
4199
4230
4200
// Always returns true, but future proof
4231
4201
bool wield_success = wield ( *better_weapon );
0 commit comments