private static int optimize_actor_weapon_value(InventoryOptimizePasses pass, Game_Actor actor, Data_Weapon weapon, List <WeaponType> weapon_types) { int value = 0; switch (pass) { case InventoryOptimizePasses.VanillaWeapon: value = weapon.vanilla_value(); break; case InventoryOptimizePasses.RangedWeapon: value = weapon.ranged_value(); break; case InventoryOptimizePasses.EffectWeapon: value = weapon.effect_value(); break; case InventoryOptimizePasses.BackupWeapon: value = weapon.effect_value(); if (weapon.main_type() == weapon_types[0]) { value += 10; } break; case InventoryOptimizePasses.HealingStaff: value = weapon.healing_value(); break; case InventoryOptimizePasses.StatusStaff: value = weapon.status_value(); break; case InventoryOptimizePasses.UtilityStaff: value = weapon.utility_value(); break; } // Add a small bonus if it's the actor's best weapon type if (weapon.main_type() == weapon_types[0]) { value += 3; } // Penalize AS loss value -= actor.wgt_penalty(weapon); // Bonus for Prfs if (weapon.is_prf) { value += 5; } return(value); }