From d0b378e17ded49b1eab08332623b613b1453a8c1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Mar 2021 13:50:02 +0800 Subject: [PATCH] 1 --- server/gameserver/player.cc | 38 +++++++++++++++++++++++++++++++++++++ server/gameserver/player.h | 3 +++ server/gameserver/room.cc | 4 ++-- server/gameserver/room.h | 2 +- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 6d2954e..2b7a664 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -96,6 +96,9 @@ void Player::InternalUpdate(int delta_time) if (emote) { UpdateEmote(); } + if (jump) { + UpdateJump(); + } if (get_down) { UpdateGetDown(); } @@ -327,6 +330,41 @@ void Player::UpdateEmote() emote_id = 0; } +void Player::UpdateJump() +{ + if (HasBuffEffect(kBET_Fly)) { + DoJump(); + if (GetPos().Distance(room->last_player_jump_pos) > 64 * 4) { + size_t num = 2 + rand() % 2; + for (size_t i = 0; i < num; ++i){ + room->xtimer.AddDeadLineTimerAndAttach + (SERVER_FRAME_RATE / 10, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Human* hum = (Human*)param.sender.GetUserData(); + hum->room->TouchHumanList + ( + a8::XParams() + .SetSender(hum), + [] (Human* hum, a8::XParams& param) -> bool + { + if (hum->HasBuffEffect(kBET_Fly) && hum->IsAndroid()) { + hum->DoJump(); + return false; + } + return true; + }); + }, + &xtimer_attacher.timer_list_); + } + } + room->last_player_jump_pos = GetPos(); + } + jump = false; +} + void Player::UpdateGetDown() { DoGetDown(); diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 4d86f00..00b7ec0 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -55,6 +55,8 @@ class Player : public Human bool emote = false; int emote_id = 0; + bool jump = false; + bool use_skill = false; bool get_down = false; @@ -75,6 +77,7 @@ class Player : public Human void UpdateUseItemId(); void UpdateSpectate(); void UpdateEmote(); + void UpdateJump(); void UpdateGetDown(); void UpdateUseSkill(); void Shot(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 9cb96de..1ad1ec9 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1068,7 +1068,7 @@ void Room::UpdateGasInactive() int auto_jump_min_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_min_num"); int auto_jump_max_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_max_num"); int jump_num = a8::RandEx(auto_jump_min_num, auto_jump_max_num); - if (room->last_player_jump_pos_.Distance(room->plane.curr_pos) < 64 * 8) { + if (room->last_player_jump_pos.Distance(room->plane.curr_pos) < 64 * 8) { jump_num = 1 + rand() % 2; } for (int i = 0; i < jump_num; ++i) { @@ -1598,7 +1598,7 @@ void Room::ShuaPlane() plane.dir = plane.end_point - plane.start_point; plane.dir.Normalize(); plane.curr_pos = plane.start_point; - last_player_jump_pos_ = plane.curr_pos; + last_player_jump_pos = plane.curr_pos; for (auto& pair : human_hash_) { pair.second->MustBeAddBuff(pair.second, FLY_BUFFID); diff --git a/server/gameserver/room.h b/server/gameserver/room.h index e11b75b..5ae4cf3 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -45,6 +45,7 @@ public: MapService* map_service = nullptr; bool debug_trace = false; bool added_to_over_room = false; + a8::Vec2 last_player_jump_pos; ~Room(); void InitData(RoomInitInfo& init_info); @@ -301,5 +302,4 @@ private: std::vector obstacle_datas_; xtimer_list* auto_jump_timer_ = nullptr; - a8::Vec2 last_player_jump_pos_; };