diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 8208238..6591964 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -52,7 +52,7 @@ void Bullet::OnHit(std::set& objects) } Human* hum = (Human*)target; if (hum->HasBuffEffect(kBET_Invincible) || - hum->HasBuffEffect(kBET_LordMode)) { + hum->HasBuffEffect(kBET_AdPlaying)) { continue; } #if 1 @@ -62,8 +62,8 @@ void Bullet::OnHit(std::set& objects) (hum->team_id == 0 || player->team_id != hum->team_id)) { #endif #if 1 - float dmg = gun_meta->i->atk() * (1 + hum->GetBuffAttrRate(kHAT_Atk)) + - hum->GetBuffAttrAbs(kHAT_Atk); + float dmg = gun_meta->i->atk() * (1 + player->GetBuffAttrRate(kHAT_Atk)) + + player->GetBuffAttrAbs(kHAT_Atk); #else float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add + player->atk_add); #endif @@ -92,7 +92,8 @@ void Bullet::OnHit(std::set& objects) Obstacle* obstacle = (Obstacle*)target; if (!obstacle->dead && obstacle->meta->i->attack_type() == 1) { #if 1 - float dmg = gun_meta->i->atk() * (1 + player->atk_add); + float dmg = gun_meta->i->atk() * (1 + player->GetBuffAttrRate(kHAT_Atk)) + + player->GetBuffAttrAbs(kHAT_Atk); #else float dmg = gun_meta->i->atk() * (1 + player->buff.damage_add + player->atk_add); #endif diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index ac503c4..442bba9 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -883,6 +883,9 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) if (HasBuffEffect(kBET_Camouflage)) { RemoveBuffByEffectId(kBET_Camouflage); } + if (GetBuffByEffectId(kBET_LordMode)) { + RemoveBuffByEffectId(kBET_LordMode); + } int max_revive_times = MetaMgr::Instance()->GetSysParamAsInt("max_revive_times", 1); if (weapon_id != VW_Spectate && dead_times <= max_revive_times && diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 50d2ada..f6a3abf 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -21,6 +21,7 @@ enum HumanStatus HS_Jump = 3, HS_AtkAdd = 11, HS_Assaulting = 12, + HS_AlreadyLordMode = 13, HS_End }; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 7156e2c..d833c59 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1228,6 +1228,9 @@ void Player::_CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg) if (GetBuffByEffectId(kBET_AdPlaying)) { return; } + if (a8::HasBitFlag(status, HS_AlreadyLordMode)) { + return; + } if (ad_timer_) { room->xtimer.DeleteTimer(ad_timer_); ad_timer_ = nullptr; @@ -1275,6 +1278,7 @@ void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg) lord_buff_meta = MetaMgr::Instance()->GetBuff(buff_meta->param2); } if (lord_buff_meta) { + a8::SetBitFlag(status, HS_AlreadyLordMode); AddBuff(lord_buff_meta, 1); std::vector strings; a8::Split(lord_buff_meta->i->buff_param1(), strings, ':');