diff --git a/Lib/AeroMessages b/Lib/AeroMessages index 61de410..416a507 160000 --- a/Lib/AeroMessages +++ b/Lib/AeroMessages @@ -1 +1 @@ -Subproject commit 61de410c85ade361fd6dd20305c932e02302adfb +Subproject commit 416a50771977aeb23bae61a6a33996c9f24eff6b diff --git a/Lib/BepuPhysics2 b/Lib/BepuPhysics2 index ec5082f..bfb11dc 160000 --- a/Lib/BepuPhysics2 +++ b/Lib/BepuPhysics2 @@ -1 +1 @@ -Subproject commit ec5082f1839a50b8aff07354483994d6b4bad73b +Subproject commit bfb11dc2020555b09978c473d9655509e844032c diff --git a/UdpHosts/GameServer/Controllers/Vehicle/BaseController.cs b/UdpHosts/GameServer/Controllers/Vehicle/BaseController.cs index c4f627e..51f0a37 100644 --- a/UdpHosts/GameServer/Controllers/Vehicle/BaseController.cs +++ b/UdpHosts/GameServer/Controllers/Vehicle/BaseController.cs @@ -31,6 +31,20 @@ public void MovementInput(INetworkClient client, IPlayer player, ulong entityId, } } + [MessageID((byte)Commands.ReceiveCollisionDamage)] + public void ReceiveCollisionDamage(INetworkClient client, IPlayer player, ulong entityId, GamePacket packet) + { + var query = packet.Unpack(); + client.AssignedShard.Entities.TryGetValue(entityId & 0xffffffffffffff00, out IEntity entity); + if (entity == null) + { + return; + } + + var vehicle = entity as Entities.Vehicle.VehicleEntity; + vehicle.ReceiveCollisionDamage(query.ShortTime, query.HaveEntity, query.CollidedWithEntity); + } + [MessageID((byte)Commands.SetWaterLevelAndDesc)] public void SetWaterLevelAndDesc(INetworkClient client, IPlayer player, ulong entityId, GamePacket packet) { diff --git a/UdpHosts/GameServer/Entities/Character/CharacterEntity.cs b/UdpHosts/GameServer/Entities/Character/CharacterEntity.cs index a6feb49..7cd99a2 100644 --- a/UdpHosts/GameServer/Entities/Character/CharacterEntity.cs +++ b/UdpHosts/GameServer/Entities/Character/CharacterEntity.cs @@ -1217,7 +1217,7 @@ private void InitFields() AttributeCategories2 = Array.Empty() }; - EnergyParams = new EnergyParamsData { Max = 1000.0f, Delay = 500, Recharge = 156.0f, Time = Shard.CurrentTime }; + EnergyParams = new EnergyParamsData { Max = 10000.0f, Delay = 500, Recharge = 1560.0f, Time = Shard.CurrentTime }; ScopeBubble = new ScopeBubbleInfoData { Layer = 0, Unk2 = 0 }; SpawnPose = new CharacterSpawnPose { @@ -1376,11 +1376,11 @@ private void InitControllers() Character_CombatController = new CombatController { - RunSpeedMultProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, - FwdRunSpeedMultProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, - JumpHeightMultProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, + RunSpeedMultProp = new StatMultiplierData { Value = 3.0f, Time = Shard.CurrentTime }, + FwdRunSpeedMultProp = new StatMultiplierData { Value = 2.0f, Time = Shard.CurrentTime }, + JumpHeightMultProp = new StatMultiplierData { Value = 5.0f, Time = Shard.CurrentTime }, AirControlMultProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, - ThrustStrengthMultProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, + ThrustStrengthMultProp = new StatMultiplierData { Value = 5.0f, Time = Shard.CurrentTime }, ThrustAirControlProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, FrictionProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, AmmoConsumptionProp = new StatMultiplierData { Value = 1.0f, Time = Shard.CurrentTime }, diff --git a/UdpHosts/GameServer/Entities/Vehicle/VehicleEntity.cs b/UdpHosts/GameServer/Entities/Vehicle/VehicleEntity.cs index 8c31a3d..bfb5b4c 100644 --- a/UdpHosts/GameServer/Entities/Vehicle/VehicleEntity.cs +++ b/UdpHosts/GameServer/Entities/Vehicle/VehicleEntity.cs @@ -57,6 +57,7 @@ public VehicleEntity(IShard shard, ulong eid, CharacterEntity owner = null) InitFields(); InitViews(); InitControllers(); + /* InitCommand(); */ } public BaseController Vehicle_BaseController { get; set; } @@ -64,7 +65,7 @@ public VehicleEntity(IShard shard, ulong eid, CharacterEntity owner = null) public ObserverView Vehicle_ObserverView { get; set; } public CombatView Vehicle_CombatView { get; set; } public MovementView Vehicle_MovementView { get; set; } - + public ReceiveCollisionDamage Vehicle_ReceiveCollisionDamage { get; set; } = new ReceiveCollisionDamage(); public INetworkPlayer ControllingPlayer { get; set; } public bool IsPlayerControlled => ControllingPlayer != null; public INetworkPlayer OwningPlayer { get; set; } @@ -123,6 +124,7 @@ public VehicleEntity(IShard shard, ulong eid, CharacterEntity owner = null) { 8, 0 }, }; + // public EntityId WhoDid { get; set; } public SpawnPoseData SpawnPose { get; set; } public Vector3 SpawnVelocity { get; set; } = Vector3.Zero; public CurrentPoseData CurrentPose { get; set; } @@ -141,7 +143,9 @@ public VehicleEntity(IShard shard, ulong eid, CharacterEntity owner = null) public byte EffectsFlags { get; set; } public byte SinFlags { get; set; } public byte SinFlagsPrivate { get; set; } + // public byte Impact { get; set; } + // public ushort ImpactTime { get; set; } public ushort StatusEffectsChangeTime_0 { get; set; } public ushort StatusEffectsChangeTime_1 { get; set; } public ushort StatusEffectsChangeTime_2 { get; set; } @@ -346,6 +350,22 @@ public void SetSpawnVelocity(Vector3 newValue) } } + /* public void ReceiveCollisionDamage(ushort newShortTime, byte newHaveEntity, EntityId collidedWithEntity) + { + ImpactTime = newShortTime; + Impact = newHaveEntity; + WhoDid = collidedWithEntity; + Vehicle_ReceiveCollisionDamage.ShortTime = newShortTime; + Vehicle_ReceiveCollisionDamage.HaveEntity = newHaveEntity; + Vehicle_ReceiveCollisionDamage.CollidedWithEntity = collidedWithEntity; + if (Vehicle_ReceiveCollisionDamage != null) + { + Vehicle_ReceiveCollisionDamage.ShortTime = ImpactTime; + Vehicle_ReceiveCollisionDamage.HaveEntity = Impact; + Vehicle_ReceiveCollisionDamage.CollidedWithEntity = collidedWithEntity; + } + } */ + public void SetWaterLevelAndDesc(byte newValue) { WaterLevelAndDesc = newValue; @@ -593,6 +613,16 @@ private void InitFields() ScopeBubble = new ScopeBubbleInfoData { Layer = 0, Unk2 = 0 }; } + /* private void InitCommand() + { + Vehicle_ReceiveCollisionDamage = new ReceiveCollisionDamage() + { + ShortTime = 0, + HaveEntity = 0, + CollidedWithEntity = new EntityId { Backing = 0 } + }; + } */ + private void InitControllers() { Vehicle_BaseController = new BaseController() @@ -696,6 +726,9 @@ private void InitViews() SinFlagsProp = SinFlags, SinFactionsAcquiredByProp = null, SinTeamsAcquiredByProp = null, + /* ImpactProp = Impact, + ImpactTimeProp = ImpactTime, + ColliededWithEntityProp = WhoDid, */ WaterLevelAndDescProp = WaterLevelAndDesc, EffectsFlagsProp = EffectsFlags, SinCardTypeProp = 0, diff --git a/UdpHosts/GameServer/StaticDB/SDBUtils.cs b/UdpHosts/GameServer/StaticDB/SDBUtils.cs index 7de2ccd..266eaf2 100644 --- a/UdpHosts/GameServer/StaticDB/SDBUtils.cs +++ b/UdpHosts/GameServer/StaticDB/SDBUtils.cs @@ -611,6 +611,7 @@ public class VehicleInfoResult public uint DeathAbility; public float MaxHitPoints; public uint DamageResponse; + public List ReceiveCollisionDamage; public uint StatusFxId; public List Turrets; public List Deployables;