From 1ac96fa95f8dc84df85aba6ec0859f652d36d4ab Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 27 May 2020 20:57:18 +0800 Subject: [PATCH] 1 --- server/gameserver/player.cc | 65 ++++++++++++++++++++----------------- server/gameserver/player.h | 1 + 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index b4ff4c1..6c06ab0 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1180,6 +1180,7 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) } } #endif + InternalAdOk(); } } @@ -1239,35 +1240,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() @@ -1283,3 +1256,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 a3a5c5b..448722c 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -98,4 +98,5 @@ class Player : public Human private: void InternalAdCancel(); + void InternalAdOk(); };