From 1062dfb6fbd31f9ab213b076829788a7397ad8b7 Mon Sep 17 00:00:00 2001 From: "sebajura1234@gmail.com" Date: Sun, 19 Mar 2023 21:13:30 +0100 Subject: [PATCH 1/3] fix color --- SlipeServer.Console/Logic/ServerTestLogic.cs | 21 +++++++++++++++++++ .../Vehicle/SetVehicleColorRpcPacket.cs | 2 +- SlipeServer.Server/ElementConcepts/Colors.cs | 8 +++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SlipeServer.Console/Logic/ServerTestLogic.cs b/SlipeServer.Console/Logic/ServerTestLogic.cs index d5bcf1e2..feae786d 100644 --- a/SlipeServer.Console/Logic/ServerTestLogic.cs +++ b/SlipeServer.Console/Logic/ServerTestLogic.cs @@ -1275,6 +1275,27 @@ private void SetupTestCommands() testobj2.AreCollisionsEnabled = true; }; + this.commandService.AddCommand("perennial").Triggered += (source, args) => + { + new Vehicle(404, args.Player.Position).AssociateWith(server); + }; + + this.commandService.AddCommand("randomizecolor").Triggered += (source, args) => + { + var rnd = new Random(); + var veh = args.Player.Vehicle; + veh.Colors.Primary = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + veh.Colors.Secondary = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + veh.Colors.Color3 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + veh.Colors.Color4 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + }; + + this.commandService.AddCommand("vehgreen").Triggered += (source, args) => + { + var veh = args.Player.Vehicle; + veh.Colors.Primary = Color.GreenYellow; + veh.Colors.Secondary = Color.GreenYellow; + }; } private void OnPlayerJoin(CustomPlayer player) diff --git a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs index 08302062..22ac5b49 100644 --- a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs +++ b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs @@ -31,7 +31,7 @@ public override byte[] Write() var builder = new PacketBuilder(); builder.Write((byte)ElementRPCFunction.SET_VEHICLE_COLOR); builder.Write(this.ElementId); - builder.WriteCapped((byte)this.Colors.Length, 2); + builder.WriteCapped((byte)Array.IndexOf(this.Colors, Color.Black), 2); foreach (var color in this.Colors) builder.Write(color); diff --git a/SlipeServer.Server/ElementConcepts/Colors.cs b/SlipeServer.Server/ElementConcepts/Colors.cs index 2104bcbe..086a5796 100644 --- a/SlipeServer.Server/ElementConcepts/Colors.cs +++ b/SlipeServer.Server/ElementConcepts/Colors.cs @@ -65,10 +65,10 @@ public Color Color4 public Colors(Vehicle vehicle, Color? primary = null, Color? secondary = null, Color? color3 = null, Color? color4 = null) { this.vehicle = vehicle; - this.primary = primary ?? Color.White; - this.secondary = secondary ?? Color.White; - this.color3 = color3 ?? Color.White; - this.color4 = color4 ?? Color.White; + this.primary = primary ?? Color.Black; + this.secondary = secondary ?? Color.Black; + this.color3 = color3 ?? Color.Black; + this.color4 = color4 ?? Color.Black; } public event ElementEventHandler? ColorChanged; From 8e60e56b63dc185337ec88e0197f667a1bccd457 Mon Sep 17 00:00:00 2001 From: "sebajura1234@gmail.com" Date: Sat, 1 Apr 2023 16:03:19 +0200 Subject: [PATCH 2/3] make color3 and 4 nullable --- SlipeServer.Console/Logic/ServerTestLogic.cs | 18 +++++-- .../Definitions/Entities/AddEntityPacket.cs | 7 ++- .../Vehicle/SetVehicleColorRpcPacket.cs | 9 ++-- .../ElementRpc/Vehicle/VehicleSpawnPacket.cs | 2 +- .../Definitions/Lua/VehicleSpawnInfo.cs | 2 +- SlipeServer.Server/ElementConcepts/Colors.cs | 50 ++++++++++++------- .../Events/VehicleColorChangedEventsArgs.cs | 4 +- 7 files changed, 58 insertions(+), 34 deletions(-) diff --git a/SlipeServer.Console/Logic/ServerTestLogic.cs b/SlipeServer.Console/Logic/ServerTestLogic.cs index feae786d..e6f30433 100644 --- a/SlipeServer.Console/Logic/ServerTestLogic.cs +++ b/SlipeServer.Console/Logic/ServerTestLogic.cs @@ -1280,14 +1280,26 @@ private void SetupTestCommands() new Vehicle(404, args.Player.Position).AssociateWith(server); }; - this.commandService.AddCommand("randomizecolor").Triggered += (source, args) => + this.commandService.AddCommand("randomizecolor").Triggered += async (source, args) => { var rnd = new Random(); var veh = args.Player.Vehicle; + if (veh == null) + return; + veh.Colors.Primary = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); veh.Colors.Secondary = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); - veh.Colors.Color3 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); - veh.Colors.Color4 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + bool a = false; + if (a) + { + veh.Colors.Color3 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + veh.Colors.Color4 = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); + } + else + { + veh.Colors.Color3 = null; + veh.Colors.Color4 = null; + } }; this.commandService.AddCommand("vehgreen").Triggered += (source, args) => diff --git a/SlipeServer.Packets/Definitions/Entities/AddEntityPacket.cs b/SlipeServer.Packets/Definitions/Entities/AddEntityPacket.cs index 19eb90ed..e8767f68 100644 --- a/SlipeServer.Packets/Definitions/Entities/AddEntityPacket.cs +++ b/SlipeServer.Packets/Definitions/Entities/AddEntityPacket.cs @@ -276,7 +276,7 @@ public void AddVehicle( ushort dimension, ElementAttachment? attachment, bool areCollisionsEnabled, bool isCallPropagationEnabled, CustomData customData, string name, byte timeContext, Vector3 position, Vector3 rotation, ushort model, - float health, byte blownState, Color[] colors, byte paintJob, VehicleDamage damage, + float health, byte blownState, Color?[] colors, byte paintJob, VehicleDamage damage, byte variant1, byte variant2, Vector2? turret, ushort? adjustableProperty, float[] doorRatios, byte[] upgrades, string plateText, byte overrideLights, bool isLandingGearDown, bool isSirenActive, bool isFuelTankExplodable, @@ -301,9 +301,8 @@ public void AddVehicle( this.builder.WriteCapped((byte)colors.Length - 1, 2); foreach (var color in colors) - { - this.builder.Write(color); - } + this.builder.Write(color ?? Color.Black); + this.builder.WriteCapped(paintJob, 2); WriteVehicleDamage(damage.Doors, 3); diff --git a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs index 22ac5b49..814c120b 100644 --- a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs +++ b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/SetVehicleColorRpcPacket.cs @@ -13,9 +13,9 @@ public class SetVehicleColorRpcPacket : Packet public override PacketPriority Priority => PacketPriority.High; public ElementId ElementId { get; set; } - public Color[] Colors { get; set; } + public Color?[] Colors { get; set; } - public SetVehicleColorRpcPacket(ElementId elementId, Color[] colors) + public SetVehicleColorRpcPacket(ElementId elementId, Color?[] colors) { this.ElementId = elementId; this.Colors = colors; @@ -31,9 +31,10 @@ public override byte[] Write() var builder = new PacketBuilder(); builder.Write((byte)ElementRPCFunction.SET_VEHICLE_COLOR); builder.Write(this.ElementId); - builder.WriteCapped((byte)Array.IndexOf(this.Colors, Color.Black), 2); + var number = Math.Min((byte)Array.IndexOf(this.Colors, null), this.Colors.Length); + builder.WriteCapped(number, 2); foreach (var color in this.Colors) - builder.Write(color); + builder.Write(color ?? Color.Black); return builder.Build(); } diff --git a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/VehicleSpawnPacket.cs b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/VehicleSpawnPacket.cs index cac2d29c..fe6b0153 100644 --- a/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/VehicleSpawnPacket.cs +++ b/SlipeServer.Packets/Definitions/Lua/ElementRpc/Vehicle/VehicleSpawnPacket.cs @@ -34,7 +34,7 @@ public override byte[] Write() builder.Write(vehicleToSpawn.Rotation); builder.WriteCapped(vehicleToSpawn.Colors.Length, 2); foreach (var color in vehicleToSpawn.Colors) - builder.Write(color); + builder.Write(color ?? System.Drawing.Color.White); } return builder.Build(); } diff --git a/SlipeServer.Packets/Definitions/Lua/VehicleSpawnInfo.cs b/SlipeServer.Packets/Definitions/Lua/VehicleSpawnInfo.cs index ed5b0b29..a07caf97 100644 --- a/SlipeServer.Packets/Definitions/Lua/VehicleSpawnInfo.cs +++ b/SlipeServer.Packets/Definitions/Lua/VehicleSpawnInfo.cs @@ -12,5 +12,5 @@ public class VehicleSpawnInfo public ushort VehicleId { get; set; } public Vector3 Position { get; set; } public Vector3 Rotation { get; set; } - public Color[] Colors { get; set; } = Array.Empty(); + public Color?[] Colors { get; set; } = Array.Empty(); } diff --git a/SlipeServer.Server/ElementConcepts/Colors.cs b/SlipeServer.Server/ElementConcepts/Colors.cs index 086a5796..f74d5b9b 100644 --- a/SlipeServer.Server/ElementConcepts/Colors.cs +++ b/SlipeServer.Server/ElementConcepts/Colors.cs @@ -18,9 +18,12 @@ public Color Primary get => this.primary; set { - var args = new VehicleColorChangedEventsArgs(this.vehicle, 0, value); - this.primary = value; - ColorChanged?.Invoke(this.vehicle, args); + if(this.primary != value) + { + var args = new VehicleColorChangedEventsArgs(this.vehicle, 0, value); + this.primary = value; + ColorChanged?.Invoke(this.vehicle, args); + } } } @@ -30,45 +33,54 @@ public Color Secondary get => this.secondary; set { - var args = new VehicleColorChangedEventsArgs(this.vehicle, 1, value); - this.secondary = value; - ColorChanged?.Invoke(this.vehicle, args); + if(this.secondary != value) + { + var args = new VehicleColorChangedEventsArgs(this.vehicle, 1, value); + this.secondary = value; + ColorChanged?.Invoke(this.vehicle, args); + } } } - private Color color3; - public Color Color3 + private Color? color3; + public Color? Color3 { get => this.color3; set { - var args = new VehicleColorChangedEventsArgs(this.vehicle, 2, value); - this.color3 = value; - ColorChanged?.Invoke(this.vehicle, args); + if(this.color3 != value) + { + var args = new VehicleColorChangedEventsArgs(this.vehicle, 2, value); + this.color3 = value; + ColorChanged?.Invoke(this.vehicle, args); + } } } - private Color color4; - public Color Color4 + private Color? color4; + public Color? Color4 { get => this.color4; set { - var args = new VehicleColorChangedEventsArgs(this.vehicle, 3, value); - this.color4 = value; - ColorChanged?.Invoke(this.vehicle, args); + if(this.color4 != value) + { + var args = new VehicleColorChangedEventsArgs(this.vehicle, 3, value); + this.color4 = value; + ColorChanged?.Invoke(this.vehicle, args); + } } } - public Color[] AsArray() => new Color[] { this.Primary, this.Secondary, this.Color3, this.Color4 }; + public Color?[] AsArray() => new Color?[] { this.Primary, this.Secondary, this.Color3, this.Color4 }; public Colors(Vehicle vehicle, Color? primary = null, Color? secondary = null, Color? color3 = null, Color? color4 = null) { this.vehicle = vehicle; this.primary = primary ?? Color.Black; this.secondary = secondary ?? Color.Black; - this.color3 = color3 ?? Color.Black; - this.color4 = color4 ?? Color.Black; + this.color3 = color3; + this.color4 = color4; } public event ElementEventHandler? ColorChanged; diff --git a/SlipeServer.Server/Elements/Events/VehicleColorChangedEventsArgs.cs b/SlipeServer.Server/Elements/Events/VehicleColorChangedEventsArgs.cs index c96b27ed..eec7891a 100644 --- a/SlipeServer.Server/Elements/Events/VehicleColorChangedEventsArgs.cs +++ b/SlipeServer.Server/Elements/Events/VehicleColorChangedEventsArgs.cs @@ -7,9 +7,9 @@ public sealed class VehicleColorChangedEventsArgs : EventArgs { public Vehicle Vehicle { get; } public byte Index { get; } - public Color NewColor { get; } + public Color? NewColor { get; } - public VehicleColorChangedEventsArgs(Vehicle vehicle, byte index, Color newColor) + public VehicleColorChangedEventsArgs(Vehicle vehicle, byte index, Color? newColor) { this.Vehicle = vehicle; this.Index = index; From 87364538d3a0b295745b72568a2f46e18746436d Mon Sep 17 00:00:00 2001 From: "sebajura1234@gmail.com" Date: Sat, 1 Apr 2023 16:48:11 +0200 Subject: [PATCH 3/3] fix --- SlipeServer.Packets.Tests/Packets/AddEntityPacketTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SlipeServer.Packets.Tests/Packets/AddEntityPacketTests.cs b/SlipeServer.Packets.Tests/Packets/AddEntityPacketTests.cs index 58b5d808..c7486cf2 100644 --- a/SlipeServer.Packets.Tests/Packets/AddEntityPacketTests.cs +++ b/SlipeServer.Packets.Tests/Packets/AddEntityPacketTests.cs @@ -72,7 +72,7 @@ public void WritePacket_MatchesExpectedByteArray() true, true, true, (byte)0, 1000, 50, (ElementId)666); packet.AddVehicle((ElementId)675, (byte)2, null, 0, 0, null, true, true, new CustomData(), "Test vehicle", - 0, new Vector3(-10, 5, 3), Vector3.Zero, 602, 1000, 0, new Color[] { + 0, new Vector3(-10, 5, 3), Vector3.Zero, 602, 1000, 0, new Color?[] { Color.Red, Color.Blue }, 0, new VehicleDamage() {