From e98712930708e4a43fe29222380a7c2618e2afdc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 15 Jun 2021 14:45:45 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.h | 1 + server/gameserver/human.cc | 15 ++++++++++++++- server/gameserver/room.cc | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 905c89f..420e0c7 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -27,6 +27,7 @@ enum CreatureStatus { CS_AlreadyLordMode = 1, CS_Disable = 2, + CS_Collisioning = 3, CS_DisableAttack = 8, CS_End }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index b805603..d52466f 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1775,11 +1775,12 @@ void Human::_UpdateSpecMove() void Human::_UpdateMove(int speed) { if (!HasBuffEffect(kBET_Vertigo)) { + a8::UnSetBitFlag(status, CS_Collisioning); do { int distance = std::min(5, speed); _InternalUpdateMove(distance); speed -= distance; - } while (speed > 0); + } while (speed > 0 && !a8::HasBitFlag(status, CS_Collisioning)); CheckSpecObject(); } } @@ -1918,9 +1919,17 @@ void Human::_InternalUpdateMove(float speed) } } #endif + if (a8::HasBitFlag(status, CS_Collisioning)) { + SetPos(old_pos); + return; + } SetPos(old_pos + a8::Vec2(nx, 0)); if (IsCollisionInMapService()) { + if (a8::HasBitFlag(status, CS_Collisioning)) { + SetPos(old_pos); + return; + } if (on_move_collision && !on_move_collision()) { SetPos(old_pos); return; @@ -1930,6 +1939,10 @@ void Human::_InternalUpdateMove(float speed) SetPos(old_pos + a8::Vec2(nx, ny)); if (IsCollisionInMapService()) { + if (a8::HasBitFlag(status, CS_Collisioning)) { + SetPos(old_pos); + return; + } if (on_move_collision && !on_move_collision()) { SetPos(old_pos); return; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 725064d..4f1d481 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3946,7 +3946,7 @@ void Room::AirRaid(int airraid_id) (SERVER_FRAME_RATE * raid_meta->i->appear_time() / 1000.f, a8::XParams() .SetSender(this) - .SetParam2(raid_meta) + .SetParam1(raid_meta) .SetParam2(center.x) .SetParam3(center.y), raid_cb,