From 8decba0470004e5e4508839b4323062830969e65 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 27 Aug 2021 02:18:16 +0000 Subject: [PATCH] 1 --- server/gameserver/player.cc | 71 +++++++++++++++++++------------------ server/gameserver/player.h | 1 + 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 422cf7f..68cdbb1 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1199,11 +1199,7 @@ void Player::_CMExecCommand(f8::MsgHdr& hdr, const cs::CMExecCommand& msg) } else if (cmd == "infinite_bullet_mode") { room->SetInfiniteBulletMode(); } else if (cmd == "watchwar") { - Human* target = room->GetWatchWarTarget(this); - if (target) { - FollowTarget(target); - target->StartRefreshViewTimer(); - } + AsyncRequestWatchWar(false); } else if (cmd == "shuaguai" && cmds.size() >= 3) { int hero_id = a8::XValue(cmds[1]); int hero_num = a8::XValue(cmds[2]); @@ -1399,36 +1395,7 @@ void Player::_CMGameOver(f8::MsgHdr& hdr, const cs::CMGameOver& msg) void Player::_CMWatchWar(f8::MsgHdr& hdr, const cs::CMWatchWar& msg) { - if (watch_war_req_timer_) { - return; - } - auto cb = - [] (const a8::XParams& param) { - Player* hum = (Player*)param.sender.GetUserData(); - - cs::SMWatchWar respmsg; - Human* target = hum->room->GetWatchWarTarget(hum); - if (target) { - hum->SendNotifyMsg(respmsg); - hum->FollowTarget(target); - target->StartRefreshViewTimer(); - } else { - respmsg.set_error_code(1); - hum->SendNotifyMsg(respmsg); - } - }; - watch_war_req_timer_ = room->xtimer.AddDeadLineTimerAndAttach - ( - NEXT_FRAME_TIMER, - a8::XParams() - .SetSender(this), - cb, - &xtimer_attacher.timer_list_, - [] (const a8::XParams& param) - { - Player* hum = (Player*)param.sender.GetUserData(); - hum->watch_war_req_timer_ = nullptr; - }); + AsyncRequestWatchWar(true); } void Player::_CMLeave(f8::MsgHdr& hdr, const cs::CMLeave& msg) @@ -1798,3 +1765,37 @@ void Player::SetAttackDir(const a8::Vec2& attack_dir) { MoveableEntity::SetAttackDir(attack_dir); } + +void Player::AsyncRequestWatchWar(bool send_rsp_msg) +{ + if (watch_war_req_timer_) { + return; + } + auto cb = + [] (const a8::XParams& param) { + Player* hum = (Player*)param.sender.GetUserData(); + + cs::SMWatchWar respmsg; + Human* target = hum->room->GetWatchWarTarget(hum); + if (target) { + hum->SendNotifyMsg(respmsg); + hum->FollowTarget(target); + target->StartRefreshViewTimer(); + } else { + respmsg.set_error_code(1); + hum->SendNotifyMsg(respmsg); + } + }; + watch_war_req_timer_ = room->xtimer.AddDeadLineTimerAndAttach + ( + NEXT_FRAME_TIMER, + a8::XParams() + .SetSender(this), + cb, + &xtimer_attacher.timer_list_, + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->watch_war_req_timer_ = nullptr; + }); +} diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 5715217..3a85b69 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -130,6 +130,7 @@ private: void InternalUpdate(int delta_time); std::vector>* GetBox(int box_id); void CheckShotHoldState(Weapon* weapon); + void AsyncRequestWatchWar(bool send_rsp_msg); private: std::map>> box_hash_;