1
This commit is contained in:
parent
84dc871ad5
commit
174f9255f0
@ -178,6 +178,7 @@ enum HumanAttrType_e
|
||||
kHAT_RecoverHpAdd = 31,
|
||||
kHAT_SkillTime = 32,
|
||||
kHAT_WeaponThrowRange = 33,
|
||||
kHAT_LUCKY = 34,
|
||||
kHAT_End
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user