From 91f5a5813f71356adb33e7b95a83d7909ef97030 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 22 Dec 2023 15:57:33 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 23 ++++++++++++++--------- server/gameserver/player.cc | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index b07ace18..93faa13f 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -3890,13 +3890,18 @@ float Creature::GetHeightOffset() void Creature::SpecShot(const glm::vec3& pos, int max_bullet) { - room->frame_event.AddPropChgEx - ( - GetWeakPtrRef(), - kPropSpecShot, - 0, - pos.x, - pos.y, - pos.z - ); + if (!GlmHelper::IsEqual2D(pos, GetPos().ToGlmVec3())) { + glm::vec3 dir = pos - GetPos().ToGlmVec3(); + GlmHelper::Normalize(dir); + SetAttackDir(dir); + room->frame_event.AddPropChgEx + ( + GetWeakPtrRef(), + kPropSpecShot, + 0, + pos.x, + pos.y, + pos.z + ); + } } diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d02cd83d..271b7334 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1828,6 +1828,20 @@ void Player::_CMReportHookHitPos(f8::MsgHdr* hdr, const cs::CMReportHookHitPos& void Player::_CMReportSpecShotHitPos(f8::MsgHdr* hdr, const cs::CMReportSpecShotHitPos& msg) { + #if 1 + for (int target_uniid : msg.target_list()) { + Creature* target = room->GetCreatureByUniId(target_uniid); + if (target && IsProperTarget(target)) { + glm::vec3 pos; + TypeConvert::FromPb(pos, &msg.bullet_pos()); + if (target->GetPos().Distance2D2(pos) < 200) { + float real_dmg_out = 0.0f; + target->DecHP(100, GetUniId(), GetName(), VW_Weapon, + GetUniId(), GetName(), real_dmg_out); + } + } + } + #else Buff* buff = GetBuffByEffectId(kBET_Floating); if (buff && buff->meta->GetBuffParam4(buff) > 0) { if (buff->GetV(0) < buff->meta->GetBuffParam5(buff)) { @@ -1846,6 +1860,7 @@ void Player::_CMReportSpecShotHitPos(f8::MsgHdr* hdr, const cs::CMReportSpecShot buff->IncV(0, 1); } } + #endif } void Player::SetShotHold(bool hold)