F4MP/codigos originales/tiltedcode/Code/server/Services/CombatService.cpp
2026-01-06 18:53:59 +01:00

56 lines
1.8 KiB
C++

#include <Services/CombatService.h>
#include <Components.h>
#include <GameServer.h>
#include <World.h>
#include <Messages/ProjectileLaunchRequest.h>
#include <Messages/NotifyProjectileLaunch.h>
CombatService::CombatService(World& aWorld, entt::dispatcher& aDispatcher) noexcept
: m_world(aWorld)
{
m_projectileLaunchConnection = aDispatcher.sink<PacketEvent<ProjectileLaunchRequest>>().connect<&CombatService::OnProjectileLaunchRequest>(this);
}
void CombatService::OnProjectileLaunchRequest(const PacketEvent<ProjectileLaunchRequest>& acMessage) const noexcept
{
auto& packet = acMessage.Packet;
NotifyProjectileLaunch notify{};
notify.ShooterID = packet.ShooterID;
notify.OriginX = packet.OriginX;
notify.OriginY = packet.OriginY;
notify.OriginZ = packet.OriginZ;
notify.ProjectileBaseID = packet.ProjectileBaseID;
notify.WeaponID = packet.WeaponID;
notify.AmmoID = packet.AmmoID;
notify.ZAngle = packet.ZAngle;
notify.XAngle = packet.XAngle;
notify.YAngle = packet.YAngle;
notify.ParentCellID = packet.ParentCellID;
notify.SpellID = packet.SpellID;
notify.CastingSource = packet.CastingSource;
notify.Area = packet.Area;
notify.Power = packet.Power;
notify.Scale = packet.Scale;
notify.AlwaysHit = packet.AlwaysHit;
notify.NoDamageOutsideCombat = packet.NoDamageOutsideCombat;
notify.AutoAim = packet.AutoAim;
notify.DeferInitialization = packet.DeferInitialization;
notify.ForceConeOfFire = packet.ForceConeOfFire;
notify.UnkBool1 = packet.UnkBool1;
notify.UnkBool2 = packet.UnkBool2;
const auto cShooterEntity = static_cast<entt::entity>(packet.ShooterID);
if (!GameServer::Get()->SendToPlayersInRange(notify, cShooterEntity, acMessage.GetSender()))
spdlog::error("{}: SendToPlayersInRange failed", __FUNCTION__);
}