diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 0eac118..cd4f557 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1162,6 +1162,7 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) } } #endif + InternalAdOk(); } } @@ -1221,35 +1222,7 @@ void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg) if (GetBuffByEffectId(kBET_LordMode)) { return; } - if (GetBuffByEffectId(kBET_AdPlaying)) { - MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ADPLAY_BUFFID); - if (buff_meta) { - MetaData::Buff* lord_buff_meta = nullptr; - if (msg.param() == 1) { - lord_buff_meta = MetaMgr::Instance()->GetBuff(buff_meta->param1); - } else if (msg.param() == 2) { - 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, ':'); - for (auto& str : strings) { - int buff_id = a8::XValue(str); - MetaData::Buff* ext_buff_meta = MetaMgr::Instance()->GetBuff(buff_id); - if (ext_buff_meta) { - AddBuff(ext_buff_meta, 1); - } - } - } - } - RemoveBuffByEffectId(kBET_AdPlaying); - if (ad_timer_) { - room->xtimer.DeleteTimer(ad_timer_); - ad_timer_ = nullptr; - } - } + InternalAdOk(); } void Player::InternalAdCancel() @@ -1265,3 +1238,37 @@ void Player::InternalAdCancel() return; } } + +void Player::InternalAdOk() +{ + if (a8::HasBitFlag(status, HS_AlreadyLordMode)) { + return; + } + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ADPLAY_BUFFID); + if (buff_meta) { + MetaData::Buff* lord_buff_meta = nullptr; + if (rand() % 2 < 1) { + lord_buff_meta = MetaMgr::Instance()->GetBuff(buff_meta->param1); + } else { + 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, ':'); + for (auto& str : strings) { + int buff_id = a8::XValue(str); + MetaData::Buff* ext_buff_meta = MetaMgr::Instance()->GetBuff(buff_id); + if (ext_buff_meta) { + AddBuff(ext_buff_meta, 1); + } + } + } + } + RemoveBuffByEffectId(kBET_AdPlaying); + if (ad_timer_) { + room->xtimer.DeleteTimer(ad_timer_); + ad_timer_ = nullptr; + } +} diff --git a/server/gameserver/player.h b/server/gameserver/player.h index ef82265..40c18c1 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -101,4 +101,5 @@ class Player : public Human private: void InternalAdCancel(); + void InternalAdOk(); };