This commit is contained in:
aozhiwei 2024-01-15 14:21:54 +08:00
parent 8cfc78be90
commit a556db9d7f
2 changed files with 50 additions and 20 deletions

View File

@ -2429,11 +2429,35 @@ void Creature::DoRecoilForce(int distance)
}
}
void Creature::WinSkillExp(int win_exp)
void Creature::WinExp(int win_exp)
{
if (win_exp <= 0) {
return;
}
if (!IsHuman()) {
return;
}
if (!hero_grow_meta_) {
return;
}
if (hero_grow_meta_->levelExp() <= 0) {
return;
}
if (hero_grow_meta_->IsFullLevel()) {
return;
}
int add_exp = win_exp;
while (
hero_grow_meta_->GetNextMeta() &&
hero_grow_meta_->levelExp() > 0 &&
!hero_grow_meta_->IsFullLevel() &&
GetHeroExp() + add_exp >= hero_grow_meta_->levelExp()
) {
add_exp -= hero_grow_meta_->levelExp();
hero_grow_meta_ = hero_grow_meta_->GetNextMeta();
hero_level_ = hero_grow_meta_->level();
GenLevelAttr();
}
}
void Creature::RecalcDtoAttr()
@ -3935,6 +3959,29 @@ void Creature::SetHeroLevel(int level, int exp, const mt::BattleHeroGrow* grow_m
hero_level_ = level;
hero_exp_ = exp;
hero_grow_meta_ = grow_meta;
GenLevelAttr();
}
int Creature::GetHeroLevel()
{
return hero_level_;
}
int Creature::GetHeroExp()
{
return hero_exp_;
}
int Creature::GetHeroMaxExp()
{
if (hero_grow_meta_) {
return hero_grow_meta_->levelExp();
}
return -1;
}
void Creature::GenLevelAttr()
{
if (hero_grow_meta_) {
{
auto attrs = hero_grow_meta_->GetLevelAttrs();
@ -3973,21 +4020,3 @@ void Creature::SetHeroLevel(int level, int exp, const mt::BattleHeroGrow* grow_m
}
}
}
int Creature::GetHeroLevel()
{
return hero_level_;
}
int Creature::GetHeroExp()
{
return hero_exp_;
}
int Creature::GetHeroMaxExp()
{
if (hero_grow_meta_) {
return hero_grow_meta_->levelExp();
}
return -1;
}

View File

@ -360,7 +360,7 @@ class Creature : public MoveableEntity
int GetHeroLevel();
int GetHeroExp();
int GetHeroMaxExp();
void WinSkillExp(int win_exp);
void WinExp(int win_exp);
void RecalcDtoAttr();
void AutoNavigation(const glm::vec3& target_pos, float speed,
std::function<void (Creature*)> cb);
@ -435,6 +435,7 @@ private:
void CheckLoadingBullet();
bool InternalCanUseSkill(Skill* skill);
void InternalUseSkill();
void GenLevelAttr();
protected:
bool need_sync_active_player_ = false;