diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index d134acd..19c5259 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -121,6 +121,7 @@ enum BuffEffectType_e kBET_Invincible = 4, //无敌 kBET_Camouflage = 5, //伪装 kBET_AdPlaying = 6, //看广告中 + kBET_LordMode = 7, //上帝模式 kBET_OnceChgAttr = 11, //一次性buff kBET_End }; @@ -293,3 +294,5 @@ const int MAX_ALL_HTTP_NUM = MAX_SYS_HTTP_NUM + MAX_USER_HTTP_NUM; const int DEFAULT_BORN_POINT_X = 3000; const int DEFAULT_BORN_POINT_Y = 3000; +const int ADPLAY_BUFFID = 1006; + diff --git a/server/gameserver/handlermgr.cc b/server/gameserver/handlermgr.cc index dcf4192..9c20a58 100644 --- a/server/gameserver/handlermgr.cc +++ b/server/gameserver/handlermgr.cc @@ -93,6 +93,9 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&ggmsghandler, &Player::_CMLeave); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMRevive); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMCancelRevive); + RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdStart); + RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdCancel); + RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdEnd); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/gameserver/human.h b/server/gameserver/human.h index bdc86c0..6d7accd 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -307,6 +307,7 @@ protected: HumanCar car_; MetaData::Skill* skill_meta_ = nullptr; + xtimer_list* ad_timer_ = nullptr; private: CircleCollider* self_collider_ = nullptr; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index b5a6c77..bd218ee 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1216,3 +1216,63 @@ void Player::_CMCancelRevive(f8::MsgHdr& hdr, const cs::CMCancelRevive& msg) { CancelRevive(); } + +void Player::_CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg) +{ + if (downed || dead) { + return; + } + if (GetBuffByEffectId(kBET_LordMode)) { + return; + } + if (GetBuffByEffectId(kBET_AdPlaying)) { + return; + } + MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ADPLAY_BUFFID); + if (buff_meta) { + AddBuff(buff_meta, 1); + room->xtimer. + AddDeadLineTimerAndAttach( + buff_meta->i->duration_time() * SYNC_FRAME_RATE + 2, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + + }, + &xtimer_attacher.timer_list, + [] (const a8::XParams& param) + { + + } + ); + } +} + +void Player::_CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg) +{ + if (GetBuffByEffectId(kBET_LordMode)) { + return; + } + if (GetBuffByEffectId(kBET_AdPlaying)) { + RemoveBuffByEffectId(kBET_AdPlaying); + if (ad_timer_) { + room->xtimer.DeleteTimer(ad_timer_); + ad_timer_ = nullptr; + } + } +} + +void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg) +{ + if (GetBuffByEffectId(kBET_LordMode)) { + return; + } + if (GetBuffByEffectId(kBET_AdPlaying)) { + 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 e2bd5b8..0501d98 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -95,5 +95,8 @@ class Player : public Human void _CMLeave(f8::MsgHdr& hdr, const cs::CMLeave& msg); void _CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg); void _CMCancelRevive(f8::MsgHdr& hdr, const cs::CMCancelRevive& msg); + void _CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg); + void _CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg); + void _CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg); }; diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index d583841..774d470 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -14,6 +14,9 @@ enum CMMessageId_e _CMLeave = 209; _CMRevive = 210; _CMCancelRevive = 211; + _CMAdStart = 212; + _CMAdCancel = 213; + _CMAdEnd = 214; } enum SMMessageId_e diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 5e1c2ea..6ce889a 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -782,6 +782,7 @@ message CMAdCancel //广告播放完毕(玩家看完广告) message CMAdEnd { + optional int32 param = 1; //1:屠夫 2:南瓜 } //endcmmsg