diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 29b878e..aec0a7b 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -40,34 +40,56 @@ const int kReviveTimeAdd = 12; const int kSkinNum = 4; -void PlayerStats::IncWeaponTypeKills(int weapon_id, int val) +WeaponStats& PlayerStats::MustBeWeapon(int weapon_id) { - + auto itr = weapon_stats.find(weapon_id); + if (itr == weapon_stats.end()){ + WeaponStats weapon; + weapon_stats[weapon_id] = weapon; + itr = weapon_stats.find(weapon_id); + } + return itr->second; } -void PlayerStats::IncWeaponTypeDamageOut(int weapon_id, int val) +void PlayerStats::IncWeaponKills(int weapon_id, int val) { - + MustBeWeapon(weapon_id).kills += val; } -void PlayerStats::IncWeaponTypeObtainCount(int weapon_id, int val) +void PlayerStats::IncWeaponDamageOut(int weapon_id, int val) { - + MustBeWeapon(weapon_id).damage_out += val; } -void PlayerStats::IncWeaponSlotUseTimes(int weapon_id, int val) +void PlayerStats::IncWeaponObtainCount(int weapon_id, int val) { - + MustBeWeapon(weapon_id).obtain_count += val; } -void PlayerStats::SetHeroSkillLv(int weapon_id, int skill_lv) +void PlayerStats::IncWeaponUseTimes(int weapon_id, int val) { - + MustBeWeapon(weapon_id).use_times += val; } -void PlayerStats::SetHeroWeaponLv(int weapon_id, int weapon_lv) +HeroStats& PlayerStats::MustBeHero(int hero_id) { + auto itr = hero_stats.find(hero_id); + if (itr == hero_stats.end()){ + HeroStats hero; + hero_stats[hero_id] = hero; + itr = hero_stats.find(hero_id); + } + return itr->second; +} +void PlayerStats::SetHeroSkillLv(int hero_id, int skill_lv) +{ + MustBeHero(hero_id).skill_lv = std::max(MustBeHero(hero_id).skill_lv, skill_lv); +} + +void PlayerStats::SetHeroWeaponLv(int hero_id, int weapon_lv) +{ + MustBeHero(hero_id).weapon_lv = std::max(MustBeHero(hero_id).weapon_lv, weapon_lv); } Human::Human():Creature() diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 3b2faa9..702098f 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -22,17 +22,12 @@ struct HumanBehavior int total_destory_box_times = 0; }; -struct WeaponTypeStats +struct WeaponStats { int weapon_id = 0; int kills = 0; int damage_out = 0; int obtain_count = 0; -}; - -struct WeaponSlotStats -{ - int slot = 0; int use_times = 0; }; @@ -68,8 +63,7 @@ struct PlayerStats int ride_car_kills = 0; int max_hero_skill_lv = 0; - std::map weapon_type_stats; - std::map weapon_slot_stats; + std::map weapon_stats; std::map hero_stats; int gold = 0; @@ -89,12 +83,14 @@ struct PlayerStats int dead_times = 0; - void IncWeaponTypeKills(int weapon_id, int val); - void IncWeaponTypeDamageOut(int weapon_id, int val); - void IncWeaponTypeObtainCount(int weapon_id, int val); - void IncWeaponSlotUseTimes(int weapon_id, int val); - void SetHeroSkillLv(int weapon_id, int skill_lv); - void SetHeroWeaponLv(int weapon_id, int weapon_lv); + WeaponStats& MustBeWeapon(int weapon_id); + void IncWeaponKills(int weapon_id, int val); + void IncWeaponDamageOut(int weapon_id, int val); + void IncWeaponObtainCount(int weapon_id, int val); + void IncWeaponUseTimes(int weapon_id, int val); + HeroStats& MustBeHero(int hero_id); + void SetHeroSkillLv(int hero_id, int skill_lv); + void SetHeroWeaponLv(int hero_id, int weapon_lv); }; struct xtimer_list;