From 4d2995935d9a4a192b11fc5fdba6351962edcbee Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 26 Sep 2022 15:20:39 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 57 +++++++++++++++++++------------------ server/gameserver/bullet.h | 1 + 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 50da50d4..69e9b8df 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -76,34 +76,7 @@ void Bullet::OnHit(std::set& objects) if (gun_meta->i->equip_subtype() == GUN_SUB_EQUIP_TYPE_FLY_HOOk) { if (sender.Get() && !sender.Get()->dead) { for (auto& target : objects) { - float distance = sender.Get()->GetPos().Distance(GetPos()); - if (distance > 0.001f) { - a8::Vec2 new_dir = GetPos() - sender.Get()->GetPos(); - new_dir.Normalize(); - if (target->IsCreature(room)) { - Creature* c = (Creature*)target; - a8::Vec2 old_dir = c->GetMoveDir(); - new_dir.x = -new_dir.x; - new_dir.y = -new_dir.y; - c->SetMoveDir(new_dir); - c->_UpdateMove(distance); - c->SetMoveDir(old_dir); - room->frame_event.AddPropChg(c->GetWeakPtrRef(), kPropBeHook, 0, sender.Get()->GetUniId()); - } else { - a8::Vec2 old_dir = sender.Get()->GetMoveDir(); - sender.Get()->SetMoveDir(new_dir); - sender.Get()->_UpdateMove(distance); - sender.Get()->SetMoveDir(old_dir); -#ifdef DEBUG - a8::XPrintf("new_dir:%f,%f distance:%d\n", - { - new_dir.x, - new_dir.y, - distance - }); -#endif - } - } + ProcFlyHook(target); break; } } @@ -798,3 +771,31 @@ void Bullet::ClearBuffList() } } } + + +void Bullet::ProcFlyHook(Entity* target) +{ + float distance = sender.Get()->GetPos().Distance(GetPos()); + if (distance < 0.001f) { + return; + } + + a8::Vec2 new_dir = GetPos() - sender.Get()->GetPos(); + new_dir.Normalize(); + if (target->IsCreature(room)) { + Creature* c = (Creature*)target; + a8::Vec2 old_dir = c->GetMoveDir(); + new_dir.x = -new_dir.x; + new_dir.y = -new_dir.y; + c->SetMoveDir(new_dir); + c->_UpdateMove(distance); + c->SetMoveDir(old_dir); + room->frame_event.AddPropChg(c->GetWeakPtrRef(), kPropBeHook, 0, sender.Get()->GetUniId()); + } else { + a8::Vec2 old_dir = sender.Get()->GetMoveDir(); + sender.Get()->SetMoveDir(new_dir); + sender.Get()->_UpdateMove(distance); + sender.Get()->SetMoveDir(old_dir); + } + +} diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index bd332b63..52d716a1 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -58,6 +58,7 @@ protected: void ProcSignalGunBomb(int delay_time); void ProcShieldWallBomb(int delay_time); void ProcOilBucketBomb(int delay_time); + void ProcFlyHook(Entity* target); inline void MapServiceUpdate(); void Check(float distance); void AddGunBuff();