This commit is contained in:
aozhiwei 2024-01-16 13:48:27 +08:00
parent 4abe8e7f8b
commit f56448e17a
2 changed files with 20 additions and 14 deletions

View File

@ -2454,15 +2454,6 @@ void Creature::WinExp(int win_exp)
hero_exp_ = 0; hero_exp_ = 0;
GenLevelAttr(); GenLevelAttr();
} }
if (hero_grow_meta_->levelExp() <= 0) {
hero_exp_ = 0;
return;
}
if (hero_grow_meta_->IsFullLevel()) {
hero_exp_ = 0;
return;
}
hero_exp_ = std::max(hero_exp_ + add_exp, hero_grow_meta_->levelExp() - 1);
if (GetHeroLevel() > old_level) { if (GetHeroLevel() > old_level) {
room->frame_event.AddPropChgEx room->frame_event.AddPropChgEx
( (
@ -2474,6 +2465,15 @@ void Creature::WinExp(int win_exp)
0, 0,
false); false);
} }
if (hero_grow_meta_->levelExp() <= 0) {
hero_exp_ = 0;
return;
}
if (hero_grow_meta_->IsFullLevel()) {
hero_exp_ = 0;
return;
}
hero_exp_ = std::min(hero_exp_ + add_exp, hero_grow_meta_->levelExp() - 1);
} }
void Creature::RecalcDtoAttr() void Creature::RecalcDtoAttr()

View File

@ -1581,14 +1581,20 @@ void Human::OnDie()
SyncAroundPlayers(__FILE__, __LINE__, __func__); SyncAroundPlayers(__FILE__, __LINE__, __func__);
{ {
Creature* killer = room->GetCreatureByUniId(stats->killer_id); Creature* killer = room->GetCreatureByUniId(stats->killer_id);
if (killer && GetHeroGrowMeta() && killer->IsHuman() && if (killer && GetHeroGrowMeta() &&
GetHeroGrowMeta()->lootExp() > 0) { GetHeroGrowMeta()->lootExp() > 0) {
killer->WinExp(GetHeroGrowMeta()->lootExp() * mt::Param::s().battle_gain_exp_rate_killer); Human* real_killer = nullptr;
killer->AsHuman()->GetTeam()->TraverseMembers if (killer->IsHuman()) {
real_killer = killer->AsHuman();
} else if (killer->IsHero() && killer->master.Get() && killer->master.Get()->IsHuman()) {
real_killer = killer->master.Get()->AsHuman();
}
real_killer->WinExp(GetHeroGrowMeta()->lootExp() * mt::Param::s().battle_gain_exp_rate_killer);
real_killer->AsHuman()->GetTeam()->TraverseMembers
( (
[this, killer] (Human* hum) -> bool [this, real_killer] (Human* hum) -> bool
{ {
if (killer != hum) { if (real_killer != hum) {
if (GetPos().Distance2D2(hum->GetPos().ToGlmVec3()) < if (GetPos().Distance2D2(hum->GetPos().ToGlmVec3()) <
mt::Param::s().battle_gain_exp_radium) { mt::Param::s().battle_gain_exp_radium) {
hum->WinExp(GetHeroGrowMeta()->lootExp() * hum->WinExp(GetHeroGrowMeta()->lootExp() *