This commit is contained in:
aozhiwei 2022-04-07 13:51:51 +08:00
parent 84dc871ad5
commit 174f9255f0
9 changed files with 111 additions and 2 deletions

View File

@ -178,6 +178,7 @@ enum HumanAttrType_e
kHAT_RecoverHpAdd = 31,
kHAT_SkillTime = 32,
kHAT_WeaponThrowRange = 33,
kHAT_LUCKY = 34,
kHAT_End
};

View File

@ -35,3 +35,39 @@ bool IsValidBuffOpt(int opt)
{
return opt >= 0 && opt < kBuffOptEnd;
}
float GetAttrAbsFromXObject(std::shared_ptr<a8::XObject> obj, int attr_id)
{
if (obj->IsArray()) {
for (int i = 0; i < obj->Size(); ++i) {
auto attr = obj->At(i);
if (attr->IsObject()){
int tmp_attr_id = attr->Get("attr_id", 0);
int tmp_type = attr->Get("type", 0);
int tmp_val = attr->Get("val", 0);
if (tmp_attr_id == attr_id && tmp_type == 1) {
return tmp_val;
}
}
}
}
return 0;
}
float GetAttrRateFromXObject(std::shared_ptr<a8::XObject> obj,int attr_id)
{
if (obj->IsArray()) {
for (int i = 0; i < obj->Size(); ++i) {
auto attr = obj->At(i);
if (attr->IsObject()){
int tmp_attr_id = attr->Get("attr_id", 0);
int tmp_type = attr->Get("type", 0);
int tmp_val = attr->Get("val", 0);
if (tmp_attr_id == attr_id && tmp_type == 2) {
return tmp_val;
}
}
}
}
return 0;
}

View File

@ -21,3 +21,5 @@ bool IsValidHumanAttr(int attr_type);
bool IsValidCondBuff(int cond);
bool IsValidWeaponOpt(int opt);
bool IsValidBuffOpt(int opt);
float GetAttrAbsFromXObject(std::shared_ptr<a8::XObject> obj, int attr_id);
float GetAttrRateFromXObject(std::shared_ptr<a8::XObject> obj,int attr_id);

View File

@ -92,11 +92,45 @@ void PlayerStats::SetHeroWeaponLv(int hero_id, int weapon_lv)
MustBeHero(hero_id).weapon_lv = std::max(MustBeHero(hero_id).weapon_lv, weapon_lv);
}
void PlayerStats::CalcReward(int ranked, int kills)
void PlayerStats::CalcReward(Human* hum, int ranked, int kills)
{
int gold = MetaMgr::Instance()->GetRankRewardParam(ranked);
gold += MetaMgr::Instance()->GetKillRewardParam(kills);
int add_gold = std::floor(gold / 3);
if (add_gold > 0) {
if (hum->hero_dto) {
MetaData::HeroQuality* quality_meta = MetaMgr::Instance()->GetHeroQuality
(hum->hero_dto->Get("quality", 1));
if (quality_meta) {
int gold_limit = quality_meta->i->gold_limit();
int gold_lucky = 0;
if (hum->hero_dto->HasKey("attr")) {
gold_lucky = GetAttrAbsFromXObject(hum->hero_dto->At("attr"), kHAT_LUCKY);
}
int new_gold = std::min(gold_limit,
hum->hero_dto->Get("today_get_gold", 0).GetInt() + add_gold);
over_reward.hero.uniid = hum->hero_dto->Get("hero_uniid", "").GetString();
over_reward.hero.gold_limit = gold_limit + gold_lucky;
over_reward.hero.obtain_gold = over_reward.hero.gold_limit - new_gold;
}
}
if (hum->weapon_dto1) {
MetaData::GunQuality* quality_meta = MetaMgr::Instance()->GetGunQuality
(hum->weapon_dto1->Get("quality", 1));
if (quality_meta){
int gold_limit = quality_meta->i->gold_limit();
int gold_lucky = 0;
if (hum->weapon_dto1->HasKey("attr")) {
gold_lucky = GetAttrAbsFromXObject(hum->weapon_dto1->At("attr"), kHAT_LUCKY);
}
int new_gold = std::min(gold_limit,
hum->weapon_dto1->Get("today_get_gold", 0).GetInt() + add_gold);
over_reward.weapon1.uniid = hum->weapon_dto1->Get("gun_uniid", "").GetString();
over_reward.weapon1.gold_limit = gold_limit + gold_lucky;
over_reward.weapon1.obtain_gold = over_reward.weapon1.gold_limit - new_gold;
}
}
}
}
Human::Human():Creature()

View File

@ -109,7 +109,7 @@ struct PlayerStats
HeroStats& MustBeHero(int hero_id);
void SetHeroSkillLv(int hero_id, int skill_lv);
void SetHeroWeaponLv(int hero_id, int weapon_lv);
void CalcReward(int ranked, int kills);
void CalcReward(Human* hum, int ranked, int kills);
};
struct xtimer_list;

View File

@ -332,6 +332,16 @@ namespace MetaData
void Init();
};
struct HeroQuality
{
const metatable::HeroQuality* i = nullptr;
};
struct GunQuality
{
const metatable::GunQuality* i = nullptr;
};
struct AI
{
const metatable::AI* i = nullptr;

View File

@ -1237,3 +1237,13 @@ MetaData::Item* MetaMgr::GetHeroSkin(int hero_id)
auto itr = loader_->item_heroskin_hash.find(hero_id);
return itr != loader_->item_heroskin_hash.end() ? itr->second : nullptr;
}
MetaData::HeroQuality* MetaMgr::GetHeroQuality(int quality)
{
}
MetaData::GunQuality* MetaMgr::GetGunQuality(int quality)
{
}

View File

@ -63,6 +63,8 @@ class MetaMgr : public a8::Singleton<MetaMgr>
MetaData::Robot* RandRobot(std::set<int>& refreshed_robot_set);
MetaData::AI* GetAndroidAI(int ai_level, int ai_mode);
MetaData::AI* GetHeroAI(int id);
MetaData::HeroQuality* GetHeroQuality(int quality);
MetaData::GunQuality* GetGunQuality(int quality);
std::string GetText(const std::string& textid, const std::string& def_text="");
bool HasText(const std::string& textid);
std::vector<std::tuple<int, std::string>>* GetTextElements(const std::string& textid);

View File

@ -428,6 +428,20 @@ message GunTalentGrow
optional string addattr = 5;
}
message HeroQuality
{
optional int32 id = 1;
optional int32 quality = 2;
optional int32 gold_limit = 3;
}
message GunQuality
{
optional int32 id = 1;
optional int32 quality = 2;
optional int32 gold_limit = 3;
}
//end
message DoorObjJson