From b2bf05246ede6782f8f06ddbdffa527fbb09525a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2019 15:29:17 +0800 Subject: [PATCH 1/4] 1 --- server/gameserver/room.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 9ef2e29..cd6fb3b 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -464,8 +464,8 @@ void Room::UpdateGas() (gas_data.pos_old - gas_data.pos_new).Norm(); float distance = gas_data.old_area_meta->i->shrink_speed() * ((frame_no - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE)); - gas_data.gas_progress = std::min(distance, total_distance); - if (std::abs(total_distance-distance) >= 0.001f) { + gas_data.gas_progress = std::min(total_distance - distance, 0.0f); + if (distance >= total_distance) { int pre_area_id = gas_data.new_area_meta->i->id(); Vector2D pre_pos = gas_data.pos_new; if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) { @@ -503,6 +503,9 @@ bool Room::GenSmallCircle(Vector2D big_circle_pos, float big_circle_rad, float s Vector2D dir = Vector2D::UP; dir.Rotate(a8::RandAngle()); float rad = rand() % (int)(big_circle_rad - small_circle_rad); + if (rad <= 0.001f){ + rad = 0.001f; + } out_pos = big_circle_pos + dir * rad; return true; } From dd19a2b4029065233c3bdc130e48a528208cf125 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2019 16:18:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=AF=92=E5=9C=88?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/room.cc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index cd6fb3b..b98ede1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -431,7 +431,7 @@ void Room::UpdateGas() gas_data.gas_mode = GasWaiting; gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); - gas_data.gas_progress = 0.0f; + gas_data.gas_progress = gas_data.old_area_meta->i->rad(); gas_data.gas_start_frameno = frame_no; gas_data.pos_old = Vector2D(map_meta->i->width() / 2.0f, map_meta->i->height() / 2.0f); @@ -452,7 +452,6 @@ void Room::UpdateGas() if (frame_no - gas_data.gas_start_frameno >= gas_data.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) { gas_data.gas_mode = GasMoving; - gas_data.gas_progress = 0.0f; gas_data.gas_start_frameno = frame_no;; } } @@ -460,12 +459,10 @@ void Room::UpdateGas() case GasMoving: { if (frame_no - gas_data.gas_start_frameno > 0 && !gas_data.is_last_gas) { - float total_distance = gas_data.rad_old - gas_data.rad_new + - (gas_data.pos_old - gas_data.pos_new).Norm(); float distance = gas_data.old_area_meta->i->shrink_speed() * ((frame_no - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE)); - gas_data.gas_progress = std::min(total_distance - distance, 0.0f); - if (distance >= total_distance) { + gas_data.gas_progress = std::max(gas_data.rad_old - distance, gas_data.rad_new); + if (std::abs(gas_data.gas_progress - gas_data.rad_new) <= 0.001f) { int pre_area_id = gas_data.new_area_meta->i->id(); Vector2D pre_pos = gas_data.pos_new; if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) { @@ -475,7 +472,7 @@ void Room::UpdateGas() gas_data.gas_mode = GasWaiting; gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id); gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1); - gas_data.gas_progress = 0.0f; + gas_data.gas_progress = gas_data.old_area_meta->i->rad(); gas_data.gas_start_frameno = frame_no; gas_data.pos_old = pre_pos; { From 5fbbbd6bc1e955d9375a214044a2d477783d7409 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2019 17:12:18 +0800 Subject: [PATCH 3/4] 1 --- server/gameserver/constant.h | 2 +- server/gameserver/player.cc | 1 + server/gameserver/room.cc | 14 +++++++++++++- server/gameserver/types.h | 1 + server/tools/protobuild/cs_proto.proto | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 258c495..a46e19b 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -68,6 +68,6 @@ const int DEF_HELMET_ID = 12404; const int DEF_CHEST_ID = 12401; const int DEF_WEAPON_ID = 12103; -const int GAS_INACTIVE_TIME = 10; +const int GAS_INACTIVE_TIME = 1; const int SERVER_FRAME_RATE = 20; const int SYNC_FRAME_RATE = 10; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 4dbcb72..93b9f2b 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -354,6 +354,7 @@ void Player::MakeUpdateMsg() } if (room->gas_data.gas_mode == GasMoving) { update_msg->set_gas_progress(room->gas_data.gas_progress); + room->gas_data.pos_old.ToPB(update_msg->mutable_gas_pos_old()); } update_msg->set_alive_count(room->AliveCount()); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index b98ede1..d144e9a 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -427,7 +427,7 @@ void Room::UpdateGas() switch (gas_data.gas_mode) { case GasInactive: { - if (frame_no - gas_data.gas_start_frameno >= 30 * SERVER_FRAME_RATE) { + if (frame_no - gas_data.gas_start_frameno >= GAS_INACTIVE_TIME * SERVER_FRAME_RATE) { gas_data.gas_mode = GasWaiting; gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001); gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); @@ -435,6 +435,7 @@ void Room::UpdateGas() gas_data.gas_start_frameno = frame_no; gas_data.pos_old = Vector2D(map_meta->i->width() / 2.0f, map_meta->i->height() / 2.0f); + gas_data.pos_old_bk = gas_data.pos_old; { bool gen_ok = GenSmallCircle(gas_data.pos_old, gas_data.old_area_meta->i->rad(), @@ -462,6 +463,16 @@ void Room::UpdateGas() float distance = gas_data.old_area_meta->i->shrink_speed() * ((frame_no - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE)); gas_data.gas_progress = std::max(gas_data.rad_old - distance, gas_data.rad_new); + if (!(gas_data.pos_new == gas_data.pos_old)) { + Vector2D p1 = gas_data.pos_old_bk - gas_data.pos_new; + if (std::abs(p1.Norm() - distance) <= 0.01f) { + gas_data.pos_old = gas_data.pos_new; + } else { + Vector2D dir = p1; + dir.Normalize(); + gas_data.pos_old = gas_data.pos_old_bk + dir * distance; + } + } if (std::abs(gas_data.gas_progress - gas_data.rad_new) <= 0.001f) { int pre_area_id = gas_data.new_area_meta->i->id(); Vector2D pre_pos = gas_data.pos_new; @@ -475,6 +486,7 @@ void Room::UpdateGas() gas_data.gas_progress = gas_data.old_area_meta->i->rad(); gas_data.gas_start_frameno = frame_no; gas_data.pos_old = pre_pos; + gas_data.pos_old_bk = gas_data.pos_old; { bool gen_ok = GenSmallCircle(gas_data.pos_old, gas_data.old_area_meta->i->rad(), diff --git a/server/gameserver/types.h b/server/gameserver/types.h index c67fdf7..6c24a31 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -50,6 +50,7 @@ struct GasData { GasMode_e gas_mode = GasInactive; Vector2D pos_old; + Vector2D pos_old_bk; Vector2D pos_new; float rad_old = 0.0f; float rad_new = 0.0f; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 55964f2..6dfce06 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -606,6 +606,7 @@ message SMUpdate optional MFActivePlayerData active_player_data = 6; //活跃玩家数据(如果玩家死亡后是观战对象的数据) optional int32 alive_count = 15; //存活数量 optional int32 gas_progress = 16; //毒圈进度,表示缩进的像素数(只有当gas_data.mode == moving时才会发进度) + optional MFVector2D gas_pos_old = 30; //毒圈当前圆心坐标 optional MFGasData gas_data = 17; //毒圈数据 repeated MFTeamData team_data = 18; repeated MFTeammateInfo teams = 19; //同队队友数据 From 8222456eab4ed5c5e5a1575b17a9338da6c4f88d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Apr 2019 17:26:26 +0800 Subject: [PATCH 4/4] 1 --- server/gameserver/room.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d144e9a..b10b2c0 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -464,7 +464,7 @@ void Room::UpdateGas() ((frame_no - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE)); gas_data.gas_progress = std::max(gas_data.rad_old - distance, gas_data.rad_new); if (!(gas_data.pos_new == gas_data.pos_old)) { - Vector2D p1 = gas_data.pos_old_bk - gas_data.pos_new; + Vector2D p1 = gas_data.pos_new - gas_data.pos_old_bk; if (std::abs(p1.Norm() - distance) <= 0.01f) { gas_data.pos_old = gas_data.pos_new; } else {