diff --git a/Game.Client/C_BaseCombatCharacter.cs b/Game.Client/C_BaseCombatCharacter.cs index 454c3706a..714f91db3 100644 --- a/Game.Client/C_BaseCombatCharacter.cs +++ b/Game.Client/C_BaseCombatCharacter.cs @@ -48,7 +48,7 @@ public partial class C_BaseCombatCharacter : C_BaseFlex public InlineArrayNewMaxWeapons> MyWeapons = new(); [NetworkName("m_iAmmo")] - [NetworkArraySize(MAX_AMMO_TYPES)] public readonly NetworkArray Ammo = new(MAX_AMMO_TYPES); + [NetworkVar] public partial NetworkArray, int> Ammo { get; } [NetworkName("m_bloodColor")] public Color BloodColor; diff --git a/Game.Client/C_BasePlayer.cs b/Game.Client/C_BasePlayer.cs index bb03eb054..d8641cb52 100644 --- a/Game.Client/C_BasePlayer.cs +++ b/Game.Client/C_BasePlayer.cs @@ -690,7 +690,7 @@ protected override bool ShouldInterpolate() { return base.ShouldInterpolate(); } - public ref readonly QAngle GetPunchAngle() => ref Local.PunchAngle; + public ref readonly QAngle GetPunchAngle() => ref Local.PunchAngleForModify(); public void SetPunchAngle(in QAngle angle) => Local.PunchAngle = angle; public override BaseCombatWeapon? GetActiveWeapon() { diff --git a/Game.Client/Game.Client.csproj b/Game.Client/Game.Client.csproj index 7dfa8affd..bde8a1f4a 100644 --- a/Game.Client/Game.Client.csproj +++ b/Game.Client/Game.Client.csproj @@ -35,5 +35,6 @@ + \ No newline at end of file diff --git a/Game.Client/PlayerLocalData.cs b/Game.Client/PlayerLocalData.cs index 3de05fdc3..920ca0b5f 100644 --- a/Game.Client/PlayerLocalData.cs +++ b/Game.Client/PlayerLocalData.cs @@ -10,7 +10,7 @@ namespace Game.Client; using DEFINE = Source.DEFINE; -public class PlayerLocalData +public partial class PlayerLocalData { public static readonly DataMap PredMap = new(typeof(PlayerLocalData), [ // DEFINE.FIELD( nameof(StepSide), FieldType.Integer ), @@ -146,10 +146,10 @@ public class PlayerLocalData public int OldButtons; public int OldForwardMove; [NetworkName("m_vecPunchAngle")] - public QAngle PunchAngle; + [NetworkVar] public partial QAngle PunchAngle { get; set; } public readonly InterpolatedVar iv_PunchAngle; [NetworkName("m_vecPunchAngleVel")] - public QAngle PunchAngleVel; + [NetworkVar] public partial QAngle PunchAngleVel { get; set; } public readonly InterpolatedVar iv_PunchAngleVel; [NetworkName("m_bDrawViewmodel")] public bool DrawViewmodel; diff --git a/Game.Client/PredictionCopy.cs b/Game.Client/PredictionCopy.cs index fddac3a77..fee4010ea 100644 --- a/Game.Client/PredictionCopy.cs +++ b/Game.Client/PredictionCopy.cs @@ -217,15 +217,6 @@ static bool AreLayoutCompatible(Type a, Type b) { return ManagedSizeOf(a) == ManagedSizeOf(b); } - static bool IsNetworkArray(Type fieldType, [NotNullWhen(true)] out Type? arrayElementType) { - if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(NetworkArray<>)) { - arrayElementType = fieldType.GetGenericArguments()[0]; - return true; - } - arrayElementType = null; - return false; - } - static void EmitConvertedReadOnlySpan(ILGenerator il, LocalBuilder typedObj, FieldInfo fieldInfo, Type actualType, Type elementType, int fieldSize) { if (fieldSize == 1) { LocalBuilder buf = il.DeclareLocal(elementType); @@ -282,18 +273,6 @@ static void EmitConversion(ILGenerator il, Type from, Type to) { static void EmitObjectFieldAsReadOnlySpan(ILGenerator il, LocalBuilder typedObj, FieldInfo fieldInfo, Type elementType, int fieldSize) { Type actualType = ResolveActualFieldType(fieldInfo, elementType); - if (IsNetworkArray(fieldInfo.FieldType, out Type? netArrayElemType)) { - FieldInfo valueField = fieldInfo.FieldType.GetField("Value")!; - il.LoggedEmit(OpCodes.Ldloc, typedObj); - il.LoggedEmit(OpCodes.Ldflda, fieldInfo); - il.LoggedEmit(OpCodes.Ldfld, valueField); - il.LoggedEmit(OpCodes.Newobj, typeof(ReadOnlySpan<>).MakeGenericType(netArrayElemType).GetConstructor([netArrayElemType.MakeArrayType()])!); - if (netArrayElemType != elementType) { - il.LoggedEmit(OpCodes.Call, castROSpanOpen.MakeGenericMethod(netArrayElemType, elementType)); - } - return; - } - if (actualType == elementType) { il.LoggedEmit(OpCodes.Ldloc, typedObj); il.LoggedEmit(OpCodes.Ldflda, fieldInfo); @@ -316,18 +295,6 @@ static void EmitObjectFieldAsSpan(ILGenerator il, LocalBuilder typedObj, FieldIn Type actualType = ResolveActualFieldType(fieldInfo, elementType); _pendingWriteBack = null; - if (IsNetworkArray(fieldInfo.FieldType, out Type? netArrayElemType)) { - FieldInfo valueField = fieldInfo.FieldType.GetField("Value")!; - il.LoggedEmit(OpCodes.Ldloc, typedObj); - il.LoggedEmit(OpCodes.Ldflda, fieldInfo); - il.LoggedEmit(OpCodes.Ldfld, valueField); - il.LoggedEmit(OpCodes.Newobj, typeof(Span<>).MakeGenericType(netArrayElemType).GetConstructor([netArrayElemType.MakeArrayType()])!); - if (netArrayElemType != elementType) { - il.LoggedEmit(OpCodes.Call, castSpanOpen.MakeGenericMethod(netArrayElemType, elementType)); - } - return; - } - if (actualType == elementType) { il.LoggedEmit(OpCodes.Ldloc, typedObj); il.LoggedEmit(OpCodes.Ldflda, fieldInfo); diff --git a/Game.Server/AI_BaseNPC.cs b/Game.Server/AI_BaseNPC.cs index 025184077..95e805093 100644 --- a/Game.Server/AI_BaseNPC.cs +++ b/Game.Server/AI_BaseNPC.cs @@ -39,7 +39,7 @@ public bool EnumEntity(IHandleEntity? handleEntity) { } [NetworkName("CAI_BaseNPC")] -public class AI_BaseNPC : BaseCombatCharacter +public partial class AI_BaseNPC : BaseCombatCharacter { public static ReadOnlySpan GetActivityName(Activity actID) { if (actID == Activity.ACT_INVALID) @@ -54,30 +54,30 @@ public static ReadOnlySpan GetActivityName(Activity actID) { } public static readonly SendTable DT_AI_BaseNPC = new(DT_BaseCombatCharacter, [ - SendPropInt(FIELD.OF(nameof(LifeState)), 3, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(PerformAvoidance))), - SendPropBool(FIELD.OF(nameof(IsMoving))), - SendPropBool(FIELD.OF(nameof(FadeCorpse))), - SendPropInt(FIELD.OF(nameof(DeathPose)), 12), - SendPropInt(FIELD.OF(nameof(DeathFrame)), 5), - SendPropBool(FIELD.OF(nameof(ImportantRagdoll))), + SendPropInt(BaseEntity.NetworkVarFields.LifeState, 3, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.PerformAvoidance), + SendPropBool(NetworkVarFields.IsMoving), + SendPropBool(NetworkVarFields.FadeCorpse), + SendPropInt(NetworkVarFields.DeathPose, 12), + SendPropInt(NetworkVarFields.DeathFrame, 5), + SendPropBool(NetworkVarFields.ImportantRagdoll), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_AI_BaseNPC); [NetworkName("m_bPerformAvoidance")] - public bool PerformAvoidance; + [NetworkVar] public partial bool PerformAvoidance { get; set; } [NetworkName("m_bIsMoving")] - public bool IsMoving; + [NetworkVar] public partial bool IsMoving { get; set; } [NetworkName("m_bFadeCorpse")] - public bool FadeCorpse; + [NetworkVar] public partial bool FadeCorpse { get; set; } [NetworkName("m_iDeathPose")] - public int DeathPose; + [NetworkVar] public partial int DeathPose { get; set; } [NetworkName("m_iDeathFrame")] - public int DeathFrame; + [NetworkVar] public partial int DeathFrame { get; set; } public bool SpeedModActive; public int SpeedModRadius; public int SpeedModSpeed; [NetworkName("m_bImportanRagdoll")] - public bool ImportantRagdoll; + [NetworkVar] public partial bool ImportantRagdoll { get; set; } public float TimePingEffect; } diff --git a/Game.Server/BaseAnimating.cs b/Game.Server/BaseAnimating.cs index 9e4722ebd..8953b78b8 100644 --- a/Game.Server/BaseAnimating.cs +++ b/Game.Server/BaseAnimating.cs @@ -20,16 +20,16 @@ namespace Game.Server; public partial class InfoLightingRelative : BaseEntity { public static readonly SendTable DT_InfoLightingRelative = new(DT_BaseEntity, [ - SendPropEHandle(FIELD_ILR.OF(nameof(LightingLandmark))) + SendPropEHandle(InfoLightingRelative.NetworkVarFields.LightingLandmark) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_InfoLightingRelative); [NetworkName("m_hLightingLandmark")] - public EHANDLE LightingLandmark = new(); + [NetworkVar] public partial NetworkHandle LightingLandmark { get; } } [NetworkName("CBaseAnimating")] -public class BaseAnimating : BaseEntity +public partial class BaseAnimating : BaseEntity { public const int ANIMATION_SKIN_BITS = 10; public const int ANIMATION_BODY_BITS = 32; @@ -38,25 +38,25 @@ public class BaseAnimating : BaseEntity public const int ANIMATION_PLAYBACKRATE_BITS = 8; public static readonly SendTable DT_ServerAnimationData = new(nameof(DT_ServerAnimationData), [ - SendPropFloat(FIELD.OF(nameof(Cycle)), ANIMATION_CYCLE_BITS, PropFlags.ChangesOften|PropFlags.RoundDown, -1.0f, 1.0f) + SendPropFloat(NetworkVarFields.Cycle, ANIMATION_CYCLE_BITS, PropFlags.ChangesOften|PropFlags.RoundDown, -1.0f, 1.0f) ]); public static readonly SendTable DT_BaseAnimating = new(DT_BaseEntity, [ - SendPropInt( FIELD.OF(nameof(ForceBone)), 8, 0 ), - SendPropVector( FIELD.OF(nameof(Force)), 0, PropFlags.NoScale ), + SendPropInt( NetworkVarFields.ForceBone, 8, 0 ), + SendPropVector( NetworkVarFields.Force, 0, PropFlags.NoScale ), - SendPropInt( FIELD.OF(nameof(Skin)), ANIMATION_SKIN_BITS), - SendPropInt( FIELD.OF(nameof(Body)), ANIMATION_BODY_BITS), + SendPropInt( NetworkVarFields.Skin, ANIMATION_SKIN_BITS), + SendPropInt( NetworkVarFields.Body, ANIMATION_BODY_BITS), - SendPropInt( FIELD.OF(nameof(HitboxSet)),ANIMATION_HITBOXSET_BITS, PropFlags.Unsigned ), + SendPropInt( NetworkVarFields.HitboxSet,ANIMATION_HITBOXSET_BITS, PropFlags.Unsigned ), - SendPropFloat( FIELD.OF(nameof(ModelScale)) ), + SendPropFloat( NetworkVarFields.ModelScale ), - SendPropArray3( FIELD.OF_ARRAY(nameof(PoseParameter)), SendPropFloat(null!, ANIMATION_POSEPARAMETER_BITS, 0, 0.0f, 1.0f ) ), + SendPropArray3( BaseAnimating.NetworkVarFields.PoseParameter, SendPropFloat(null!, ANIMATION_POSEPARAMETER_BITS, 0, 0.0f, 1.0f ) ), - SendPropInt( FIELD.OF(nameof(Sequence)), ANIMATION_SEQUENCE_BITS, PropFlags.Unsigned ), - SendPropFloat( FIELD.OF(nameof(PlaybackRate)), ANIMATION_PLAYBACKRATE_BITS, PropFlags.RoundUp, -4.0f, 12.0f ), + SendPropInt( NetworkVarFields.Sequence, ANIMATION_SEQUENCE_BITS, PropFlags.Unsigned ), + SendPropFloat( NetworkVarFields.PlaybackRate, ANIMATION_PLAYBACKRATE_BITS, PropFlags.RoundUp, -4.0f, 12.0f ), - SendPropArray3(FIELD.OF_ARRAY(nameof(EncodedController)), SendPropFloat(null!, 11, PropFlags.RoundDown, 0.0f, 1.0f ) ), + SendPropArray3(BaseAnimating.NetworkVarFields.EncodedController, SendPropFloat(null!, 11, PropFlags.RoundDown, 0.0f, 1.0f ) ), SendPropInt( FIELD.OF(nameof( ClientSideAnimation )), 1, PropFlags.Unsigned ), SendPropInt( FIELD.OF(nameof( ClientSideFrameReset )), 1, PropFlags.Unsigned ), @@ -70,70 +70,74 @@ public class BaseAnimating : BaseEntity SendPropDataTable( "serveranimdata", DT_ServerAnimationData, SendProxy_ClientSideAnimation ), - SendPropFloat( FIELD.OF(nameof(FadeMinDist) ), 0, PropFlags.NoScale ), + SendPropFloat( NetworkVarFields.FadeMinDist, 0, PropFlags.NoScale ), SendPropFloat( FIELD.OF(nameof(FadeMaxDist )), 0, PropFlags.NoScale ), SendPropFloat( FIELD.OF(nameof(FadeScale )), 0, PropFlags.NoScale ), // Gmod specific SendPropEHandle(FIELD.OF(nameof(BoneManipulator))), SendPropEHandle(FIELD.OF(nameof(FlexManipulator))), - SendPropVector(FIELD.OF(nameof(OverrideViewTarget)), 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.OverrideViewTarget, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BaseAnimating); [NetworkName("m_nForceBone")] - public int ForceBone; + [NetworkVar] public partial int ForceBone { get; set; } [NetworkName("m_vecForce")] - public Vector3 Force; + [NetworkVar] public partial Vector3 Force { get; set; } [NetworkName("m_nSkin")] - public int Skin; + [NetworkVar] public partial int Skin { get; set; } [NetworkName("m_nBody")] - public int Body; + [NetworkVar] public partial int Body { get; set; } [NetworkName("m_nHitboxSet")] - public int HitboxSet; + [NetworkVar] public partial int HitboxSet { get; set; } [NetworkName("m_flModelScale")] - public float ModelScale = 1.0f; + [NetworkVar] public partial float ModelScale { get; set; } + + public BaseAnimating() { + ModelScale = 1.0f; + } [NetworkName("m_flPoseParameter")] - public InlineArrayMaxStudioPoseParam PoseParameter; + [NetworkVar] public partial NetworkArray, float> PoseParameter { get; } public InlineArrayMaxStudioPoseParam OldPoseParameters; public float PrevEventCycle; public int EventSequence; [NetworkName("m_flEncodedController")] - public InlineArrayMaxStudioBoneCtrls EncodedController; + [NetworkVar] public partial NetworkArray, float> EncodedController { get; } public InlineArrayMaxStudioBoneCtrls OldEncodedController; [NetworkName("m_nSequence")] - public int Sequence; + [NetworkVar] public partial int Sequence { get; set; } [NetworkName("m_flPlaybackRate")] - public TimeUnit_t PlaybackRate; + [NetworkVar] public partial TimeUnit_t PlaybackRate { get; set; } [NetworkName("m_bClientSideAnimation")] - public bool ClientSideAnimation; + [NetworkVar] public partial bool ClientSideAnimation { get; set; } [NetworkName("m_bClientSideFrameReset")] - public bool ClientSideFrameReset; + [NetworkVar] public partial bool ClientSideFrameReset { get; set; } [NetworkName("m_nNewSequenceParity")] - public int NewSequenceParity; + [NetworkVar] public partial int NewSequenceParity { get; set; } [NetworkName("m_nResetEventsParity")] - public int ResetEventsParity; + [NetworkVar] public partial int ResetEventsParity { get; set; } [NetworkName("m_nMuzzleFlashParity")] - public int MuzzleFlashParity; + [NetworkVar] public partial int MuzzleFlashParity { get; set; } [NetworkName("m_hLightingOrigin")] - public EHANDLE LightingOrigin = new(); + [NetworkVar] public partial NetworkHandle LightingOrigin { get; } [NetworkName("m_hLightingOriginRelative")] - public EHANDLE LightingOriginRelative = new(); + [NetworkVar] public partial NetworkHandle LightingOriginRelative { get; } [NetworkName("m_pBoneManipulator")] public EHANDLE BoneManipulator = new(); [NetworkName("m_pFlexManipulator")] public EHANDLE FlexManipulator = new(); [NetworkName("m_fadeMinDist")] - public float FadeMinDist; + [NetworkVar] public partial float FadeMinDist { get; set; } [NetworkName("m_fadeMaxDist")] - public float FadeMaxDist; + [NetworkVar] public partial float FadeMaxDist { get; set; } [NetworkName("m_flFadeScale")] - public float FadeScale; + [NetworkVar] public partial float FadeScale { get; set; } [NetworkName("m_flCycle")] - public TimeUnit_t Cycle; + [NetworkVar] public partial TimeUnit_t Cycle { get; set; } [NetworkName("m_OverrideViewTarget")] - public Vector3 OverrideViewTarget; + [NetworkVar] public partial Vector3 OverrideViewTarget { get; set; } public override void SetModel(ReadOnlySpan modelName) { UnlockStudioHdr(); @@ -492,7 +496,7 @@ public float SetPoseParameter(StudioHdr? studioHdr, int parameter, float value) if (parameter >= 0) { value = BoneSetup.Studio_SetPoseParameter(studioHdr, parameter, value, out float newValue); - PoseParameter[parameter] = newValue; + PoseParameter.Set(parameter, newValue); } return value; diff --git a/Game.Server/BaseCombatCharacter.cs b/Game.Server/BaseCombatCharacter.cs index 1c39ffc05..8b901757f 100644 --- a/Game.Server/BaseCombatCharacter.cs +++ b/Game.Server/BaseCombatCharacter.cs @@ -40,32 +40,32 @@ public virtual Vector3 BodyDirection3D() { public virtual Vector3 EyeDirection3D() => HeadDirection3D(); // No eye motion so just return head dir public static readonly SendTable DT_BCCLocalPlayerExclusive = new(nameof(DT_BCCLocalPlayerExclusive), [ - SendPropTime64(FIELD.OF(nameof(NextAttack))), + SendPropTime64(NetworkVarFields.NextAttack), ]); public static readonly SendTable DT_BaseCombatCharacter = new(DT_BaseFlex, [ SendPropDataTable( "bcc_localdata", DT_BCCLocalPlayerExclusive, SendProxy_SendBaseCombatCharacterLocalDataTable ), - SendPropEHandle(FIELD.OF(nameof(ActiveWeapon))), - SendPropArray3(FIELD.OF_ARRAY(nameof(MyWeapons)), SendPropEHandle( FIELD.OF_ARRAY(nameof(MyWeapons)))), - SendPropInt(FIELD.OF(nameof(BloodColor)), 5, 0) + SendPropEHandle(BaseCombatCharacter.NetworkVarFields.ActiveWeapon), + SendPropArray3(BaseCombatCharacter.NetworkVarFields.MyWeapons, SendPropEHandle( BaseCombatCharacter.NetworkVarFields.MyWeapons)), + SendPropInt(NetworkVarFields.BloodColor, 5, 0) ]); public TimeUnit_t GetNextAttack() => NextAttack; public void SetNextAttack(TimeUnit_t wait) => NextAttack = wait; [NetworkName("m_flNextAttack")] - public TimeUnit_t NextAttack; + [NetworkVar] public partial TimeUnit_t NextAttack { get; set; } public float ImpactEnergyScale; [NetworkName("m_hLastWeapon")] public Handle LastWeapon = new(); [NetworkName("m_hActiveWeapon")] - public Handle ActiveWeapon = new(); + [NetworkVar] public partial NetworkHandle ActiveWeapon { get; } [NetworkName("m_hMyWeapons")] - public InlineArrayNewMaxWeapons> MyWeapons = new(); + [NetworkVar] public partial NetworkArray>, Handle> MyWeapons { get; } [NetworkName("m_iAmmo")] - [NetworkArraySize(MAX_AMMO_TYPES)] public readonly NetworkArray Ammo = new(MAX_AMMO_TYPES); + [NetworkVar] public partial NetworkArray, int> Ammo { get; } [NetworkName("m_bloodColor")] - public Color BloodColor; + [NetworkVar] public partial Color BloodColor { get; set; } private static object? SendProxy_SendBaseCombatCharacterLocalDataTable(SendProp prop, object instance, IFieldAccessor data, SendProxyRecipients recipients, int objectID) { recipients.ClearAllRecipients(); diff --git a/Game.Server/BaseEntity.cs b/Game.Server/BaseEntity.cs index d304cb6b0..4023125fb 100644 --- a/Game.Server/BaseEntity.cs +++ b/Game.Server/BaseEntity.cs @@ -674,7 +674,7 @@ private static void SendProxy_SimulationTime(SendProp prop, object instance, IFi } public static SendTable DT_AnimTimeMustBeFirst = new(nameof(DT_AnimTimeMustBeFirst), [ - SendPropInt (FIELD.OF(nameof(AnimTime)), 8, PropFlags.Unsigned|PropFlags.ChangesOften|PropFlags.EncodedAgainstTickCount, proxyFn: SendProxy_AnimTime), + SendPropInt (NetworkVarFields.AnimTime, 8, PropFlags.Unsigned|PropFlags.ChangesOften|PropFlags.EncodedAgainstTickCount, proxyFn: SendProxy_AnimTime), ]); public virtual int Save(ISave save) { throw new NotImplementedException(); } @@ -698,54 +698,54 @@ public virtual void OnRestore() { return null; } public static SendTable DT_PredictableId = new(nameof(DT_PredictableId), [ - SendPropPredictableId(FIELD.OF(nameof(PredictableId))), + SendPropPredictableId(NetworkVarFields.PredictableId), SendPropInt(FIELD.OF(nameof(b_IsPlayerSimulated)), 1, PropFlags.Unsigned) ]); public static SendTable DT_BaseEntity = new([ SendPropDataTable("AnimTimeMustBeFirst", DT_AnimTimeMustBeFirst, SendProxy_ClientSideAnimation), - SendPropInt(FIELD.OF(nameof(SimulationTime)), SIMULATION_TIME_WINDOW_BITS, PropFlags.Unsigned | PropFlags.ChangesOften | PropFlags.EncodedAgainstTickCount, proxyFn: SendProxy_SimulationTime /* todo */), + SendPropInt(NetworkVarFields.SimulationTime, SIMULATION_TIME_WINDOW_BITS, PropFlags.Unsigned | PropFlags.ChangesOften | PropFlags.EncodedAgainstTickCount, proxyFn: SendProxy_SimulationTime /* todo */), SendPropVector(NetworkVarFields.Origin, -1, PropFlags.Coord | PropFlags.ChangesOften, 0, Constants.HIGH_DEFAULT, SendProxy_Origin), - SendPropInt(FIELD.OF(nameof(InterpolationFrame)), NOINTERP_PARITY_MAX_BITS, PropFlags.Unsigned), - SendPropModelIndex(FIELD.OF(nameof(ModelIndex))), + SendPropInt(NetworkVarFields.InterpolationFrame, NOINTERP_PARITY_MAX_BITS, PropFlags.Unsigned), + SendPropModelIndex(NetworkVarFields.ModelIndex), SendPropDataTable("m_Collision", FIELD.OF(nameof(Collision)), CollisionProperty.DT_CollisionProperty), - SendPropInt(FIELD.OF(nameof(RenderFX)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(RenderMode)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Effects)), (int)EntityEffects.MaxBits, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(ColorRender)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(TeamNum)), TEAMNUM_NUM_BITS, 0), - SendPropInt(FIELD.OF(nameof(CollisionGroup)), 5, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(Elasticity)), 0, PropFlags.Coord | PropFlags.NoScale), + SendPropInt(NetworkVarFields.RenderFX, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.RenderMode, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Effects, (int)EntityEffects.MaxBits, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.ColorRender, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.TeamNum, TEAMNUM_NUM_BITS, 0), + SendPropInt(NetworkVarFields.CollisionGroup, 5, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Elasticity, 0, PropFlags.Coord | PropFlags.NoScale), SendPropFloat(NetworkVarFields.ShadowCastDistance, 12, PropFlags.Unsigned), - SendPropEHandle(FIELD.OF(nameof(OwnerEntity))), - SendPropEHandle(FIELD.OF(nameof(EffectEntity))), + SendPropEHandle(BaseEntity.NetworkVarFields.OwnerEntity), + SendPropEHandle(BaseEntity.NetworkVarFields.EffectEntity), SendPropEHandle(FIELD.OF(nameof(MoveParent))), - SendPropInt(FIELD.OF(nameof(ParentAttachment)), NUM_PARENTATTACHMENT_BITS, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(MoveType)), (int)Source.MoveType.MaxBits, PropFlags.Unsigned ), - SendPropInt(FIELD.OF(nameof(MoveCollide)), (int)Source.MoveCollide.MaxBits, PropFlags.Unsigned ), + SendPropInt(NetworkVarFields.ParentAttachment, NUM_PARENTATTACHMENT_BITS, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.MoveType, (int)Source.MoveType.MaxBits, PropFlags.Unsigned ), + SendPropInt(NetworkVarFields.MoveCollide, (int)Source.MoveCollide.MaxBits, PropFlags.Unsigned ), SendPropQAngles (NetworkVarFields.Rotation, 24, PropFlags.ChangesOften | PropFlags.RoundDown, SendProxy_Angles ), SendPropInt( FIELD.OF(nameof( TextureFrameIndex) ), 8, PropFlags.Unsigned ), SendPropDataTable( "predictable_id", DT_PredictableId, SendProxy_SendPredictableId ), - SendPropInt(FIELD.OF(nameof(SimulatedEveryTick)), 1, PropFlags.Unsigned ), - SendPropInt(FIELD.OF(nameof(AnimatedEveryTick)), 1, PropFlags.Unsigned ), + SendPropInt(NetworkVarFields.SimulatedEveryTick, 1, PropFlags.Unsigned ), + SendPropInt(NetworkVarFields.AnimatedEveryTick, 1, PropFlags.Unsigned ), SendPropBool( NetworkVarFields.AlternateSorting ), // The rest of this is Garry's Mod specific in order - SendPropInt(FIELD.OF(nameof(m_takedamage)), 8), - SendPropInt(FIELD.OF(nameof(RealClassName)), 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.m_takedamage, 8), + SendPropInt(NetworkVarFields.RealClassName, 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OverrideMaterial)), 16, PropFlags.Unsigned, SendProxy_OverrideMaterial), + SendPropInt(NetworkVarFields.OverrideMaterial, 16, PropFlags.Unsigned, SendProxy_OverrideMaterial), SendPropInt(FIELD.OF_SENDINFO_ARRAY(nameof(OverrideSubMaterials)), 16, PropFlags.Unsigned), SendPropArray2(null, 32, "m_OverrideSubMaterials"), - SendPropInt(FIELD.OF(nameof(Health)), 32, PropFlags.Normal | PropFlags.ChangesOften | PropFlags.VarInt), + SendPropInt(NetworkVarFields.Health, 32, PropFlags.Normal | PropFlags.ChangesOften | PropFlags.VarInt), SendPropInt(NetworkVarFields.MaxHealth, 32), - SendPropInt(FIELD.OF(nameof(SpawnFlags)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(GModFlags)), 7), - SendPropBool(FIELD.OF(nameof(OnFire))), - SendPropFloat(FIELD.OF(nameof(CreationTime)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.SpawnFlags, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.GModFlags, 7), + SendPropBool(NetworkVarFields.OnFire), + SendPropFloat(NetworkVarFields.CreationTime, 0, PropFlags.NoScale), SendPropFloat(FIELD.OF_VECTORELEM(nameof(Velocity), 0), 0, PropFlags.NoScale | PropFlags.ChangesOften), SendPropFloat(FIELD.OF_VECTORELEM(nameof(Velocity), 1), 0, PropFlags.NoScale | PropFlags.ChangesOften), @@ -766,8 +766,8 @@ public virtual void OnRestore() { SendPropString(FIELD.OF(nameof(GMOD_String3))), // Creation IDs - SendPropInt(FIELD.OF(nameof(CreationID)), 24), - SendPropInt(FIELD.OF(nameof(MapCreatedID)), 16), + SendPropInt(NetworkVarFields.CreationID, 24), + SendPropInt(NetworkVarFields.MapCreatedID, 16), ]); public BaseEntity(bool serverOnly = false) { @@ -925,7 +925,7 @@ public string GetDebugName() { } EHANDLE Parent; - public float Gravity; + [NetworkVar] public partial float Gravity { get; set; } public void SetPredictionEligible(bool canpredict) { } // nothing in game code public ref readonly Vector3 GetLocalOrigin() => ref __nv_Origin; public ref readonly QAngle GetLocalAngles() => ref __nv_Rotation; @@ -1281,28 +1281,28 @@ public bool IsFloating() { } [NetworkName("m_nRenderFX")] - public byte RenderFX; + [NetworkVar] public partial byte RenderFX { get; set; } [NetworkName("m_nRenderMode")] - public byte RenderMode; + [NetworkVar] public partial byte RenderMode { get; set; } public byte OldRenderMode; [NetworkName("m_fEffects")] - public int Effects; + [NetworkVar] public partial int Effects { get; set; } [NetworkName("m_clrRender")] - public Source.Color ColorRender; + [NetworkVar] public partial Source.Color ColorRender { get; set; } [NetworkName("m_iTeamNum")] - public int TeamNum; + [NetworkVar] public partial int TeamNum { get; set; } [NetworkName("m_CollisionGroup")] - public int CollisionGroup; + [NetworkVar] public partial int CollisionGroup { get; set; } [NetworkName("m_flElasticity")] - public float Elasticity; + [NetworkVar] public partial float Elasticity { get; set; } [NetworkName("m_flShadowCastDistance")] [NetworkVar] public partial float ShadowCastDistance { get; set; } [NetworkName("m_iParentAttachment")] - public byte ParentAttachment; + [NetworkVar] public partial byte ParentAttachment { get; set; } [NetworkName("movetype")] - public byte MoveType; + [NetworkVar] public partial byte MoveType { get; set; } [NetworkName("movecollide")] - public byte MoveCollide; + [NetworkVar] public partial byte MoveCollide { get; set; } public Vector3 AbsOrigin; public QAngle AbsRotation; [NetworkName("m_vecOrigin")] @@ -1310,73 +1310,73 @@ public bool IsFloating() { [NetworkName("m_angRotation")] [NetworkVar] public partial QAngle Rotation { get; set; } [NetworkName("m_iTextureFrameIndex")] - public bool TextureFrameIndex; + [NetworkVar] public partial bool TextureFrameIndex { get; set; } [NetworkName("m_bSimulatedEveryTick")] - public bool SimulatedEveryTick; + [NetworkVar] public partial bool SimulatedEveryTick { get; set; } [NetworkName("m_bAnimatedEveryTick")] - public bool AnimatedEveryTick; + [NetworkVar] public partial bool AnimatedEveryTick { get; set; } [NetworkName("m_bAlternateSorting")] [NetworkVar] public partial bool AlternateSorting { get; set; } - public byte m_takedamage; + [NetworkVar] public partial byte m_takedamage { get; set; } [NetworkName("m_RealClassName")] - public ushort RealClassName; + [NetworkVar] public partial ushort RealClassName { get; set; } [NetworkName("m_OverrideMaterial")] - public ushort OverrideMaterial; + [NetworkVar] public partial ushort OverrideMaterial { get; set; } [NetworkName("m_OverrideSubMaterials")] public InlineArray32 OverrideSubMaterials; [NetworkName("m_iHealth")] - public int Health; + [NetworkVar] public partial int Health { get; set; } [NetworkName("m_iMaxHealth")] [NetworkVar] public partial int MaxHealth { get; set; } [NetworkName("m_spawnflags")] - public int SpawnFlags; + [NetworkVar] public partial int SpawnFlags { get; set; } [NetworkName("m_iGModFlags")] - public int GModFlags; + [NetworkVar] public partial int GModFlags { get; set; } [NetworkName("m_bOnFire")] - public bool OnFire; + [NetworkVar] public partial bool OnFire { get; set; } [NetworkName("m_CreationTime")] - public float CreationTime; + [NetworkVar] public partial float CreationTime { get; set; } [NetworkName("m_vecVelocity")] - public Vector3 Velocity; + [NetworkVar] public partial Vector3 Velocity { get; set; } [NetworkName("m_iCreationID")] - public int CreationID; + [NetworkVar] public partial int CreationID { get; set; } [NetworkName("m_iMapCreatedID")] - public int MapCreatedID; + [NetworkVar] public partial int MapCreatedID { get; set; } public readonly List ThinkFunctions = []; public int CurrentThinkContext = NO_THINK_CONTEXT; [NetworkName("m_PredictableID")] - public readonly PredictableId PredictableId = new(); + [NetworkVar] public partial PredictableId PredictableId { get; set; } [NetworkName("m_GMOD_DataTable")] public readonly GModTable GMOD_DataTable = new(); - public float Speed; + [NetworkVar] public partial float Speed { get; set; } [NetworkName("m_hOwnerEntity")] - public EHANDLE OwnerEntity = new(); + [NetworkVar] public partial NetworkHandle OwnerEntity { get; } [NetworkName("m_hEffectEntity")] - public EHANDLE EffectEntity = new(); + [NetworkVar] public partial NetworkHandle EffectEntity { get; } [NetworkName("moveparent")] public EHANDLE MoveParent = new(); public EHANDLE MoveChild = new(); public EHANDLE MovePeer = new(); [NetworkName("m_hGroundEntity")] - public EHANDLE GroundEntity = new(); + [NetworkVar] public partial NetworkHandle GroundEntity { get; } public string? ModelName; [NetworkName("m_lifeState")] - public int LifeState; + [NetworkVar] public partial int LifeState { get; set; } [NetworkName("m_vecBaseVelocity")] - public Vector3 BaseVelocity; + [NetworkVar] public partial Vector3 BaseVelocity { get; set; } [NetworkName("m_nNextThinkTick")] - public int NextThinkTick; + [NetworkVar] public partial int NextThinkTick { get; set; } public int LastThinkTick; [NetworkName("m_nWaterLevel")] - public byte WaterLevel; + [NetworkVar] public partial byte WaterLevel { get; set; } public byte WaterType; [NetworkName("m_GMOD_bool")] @@ -1405,21 +1405,21 @@ public bool IsFloating() { public static readonly ServerClass ServerClass = new ServerClass(DT_BaseEntity); [NetworkName("m_flAnimTime")] - public TimeUnit_t AnimTime; + [NetworkVar] public partial TimeUnit_t AnimTime { get; set; } public TimeUnit_t PrevAnimTime; [NetworkName("m_flSimulationTime")] - public TimeUnit_t SimulationTime; + [NetworkVar] public partial TimeUnit_t SimulationTime { get; set; } [NetworkName("m_vecViewOffset")] - public Vector3 ViewOffset; + [NetworkVar] public partial Vector3 ViewOffset { get; set; } public Vector3 NetworkAngles; [NetworkName("m_ubInterpolationFrame")] - public byte InterpolationFrame; + [NetworkVar] public partial byte InterpolationFrame { get; set; } [NetworkName("m_nModelIndex")] - public int ModelIndex; + [NetworkVar] public partial int ModelIndex { get; set; } [NetworkName("m_Collision")] - public CollisionProperty Collision = new(); + [NetworkVarEmbedded] public partial CollisionProperty Collision { get; } [NetworkName("m_flFriction")] - public float Friction; + [NetworkVar] public partial float Friction { get; set; } public long SimulationTick; public virtual Vector3 BodyTarget(in Vector3 posSrc, bool noisy) => WorldSpaceCenter(); @@ -2403,12 +2403,12 @@ public void SetRefEHandle(in BaseHandle handle) { } [NetworkName("m_fFlags")] - protected int flags; + [NetworkVar] protected partial int flags { get; set; } EFL eflags; public Matrix3x4 CoordinateFrame; - public ref readonly Vector3 GetBaseVelocity() => ref BaseVelocity; + public ref readonly Vector3 GetBaseVelocity() => ref __nv_BaseVelocity; public void SetBaseVelocity(in Vector3 v) => BaseVelocity = v; public void SetAbsOrigin(Vector3 vector3) { @@ -2451,7 +2451,7 @@ public ref readonly Vector3 GetAbsOrigin() { return ref AbsOrigin; } - public ref readonly Vector3 GetViewOffset() => ref ViewOffset; + public ref readonly Vector3 GetViewOffset() => ref __nv_ViewOffset; public ref readonly QAngle GetAbsAngles() { Assert(BaseEntity.IsAbsQueriesValid()); @@ -2978,7 +2978,7 @@ public EdictFlags SetTransmitState(EdictFlags flag) { [LinkEntityToClass("info_player_start")] [LinkEntityToClass("info_landmark")] -public class PointEntity : BaseEntity +public partial class PointEntity : BaseEntity { public override void Spawn() { SetSolid(Source.SolidType.None); @@ -2987,17 +2987,17 @@ public override void Spawn() { public override EntityCapabilities ObjectCaps() => base.ObjectCaps() & ~EntityCapabilities.AcrossTransition; } -public class ServerOnlyEntity : BaseEntity +public partial class ServerOnlyEntity : BaseEntity { } -public class ServerOnlyPointEntity : ServerOnlyEntity +public partial class ServerOnlyPointEntity : ServerOnlyEntity { } -public class LogicalEntity : ServerOnlyEntity +public partial class LogicalEntity : ServerOnlyEntity { } diff --git a/Game.Server/BaseFlex.cs b/Game.Server/BaseFlex.cs index feecbca65..560184866 100644 --- a/Game.Server/BaseFlex.cs +++ b/Game.Server/BaseFlex.cs @@ -9,29 +9,29 @@ namespace Game.Server; using FIELD = Source.FIELD; [NetworkName("CBaseFlex")] -public class BaseFlex : BaseAnimatingOverlay { +public partial class BaseFlex : BaseAnimatingOverlay { public static readonly SendTable DT_BaseFlex = new(DT_BaseAnimatingOverlay, [ - SendPropArray3 (FIELD.OF_ARRAY(nameof(FlexWeight)), SendPropFloat(FIELD.OF_ARRAY(nameof(FlexWeight)), 12, PropFlags.RoundDown, 0.0f, 1.0f )), - SendPropInt (FIELD.OF(nameof(BlinkToggle)), 1, PropFlags.Unsigned ), - SendPropVector (FIELD.OF(nameof(ViewTarget)), -1, PropFlags.Coord), + SendPropArray3 (BaseFlex.NetworkVarFields.FlexWeight, SendPropFloat(BaseFlex.NetworkVarFields.FlexWeight, 12, PropFlags.RoundDown, 0.0f, 1.0f )), + SendPropInt (NetworkVarFields.BlinkToggle, 1, PropFlags.Unsigned ), + SendPropVector (NetworkVarFields.ViewTarget, -1, PropFlags.Coord), SendPropFloat ( FIELD.OF_VECTORELEM(nameof(ViewOffset), 0), 0, PropFlags.NoScale ), SendPropFloat ( FIELD.OF_VECTORELEM(nameof(ViewOffset), 1), 0, PropFlags.NoScale ), SendPropFloat ( FIELD.OF_VECTORELEM(nameof(ViewOffset), 2), 0, PropFlags.NoScale ), - SendPropVector ( FIELD.OF(nameof(Lean)), -1, PropFlags.Coord ), - SendPropVector ( FIELD.OF(nameof(Shift)), -1, PropFlags.Coord ), + SendPropVector ( NetworkVarFields.Lean, -1, PropFlags.Coord ), + SendPropVector ( NetworkVarFields.Shift, -1, PropFlags.Coord ), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BaseFlex); [NetworkName("m_flexWeight")] - public InlineArray96 FlexWeight; + [NetworkVar] public partial NetworkArray, float> FlexWeight { get; } [NetworkName("m_blinktoggle")] - public int BlinkToggle; + [NetworkVar] public partial int BlinkToggle { get; set; } [NetworkName("m_viewtarget")] - public Vector3 ViewTarget; + [NetworkVar] public partial Vector3 ViewTarget { get; set; } [NetworkName("m_vecLean")] - public Vector3 Lean; + [NetworkVar] public partial Vector3 Lean { get; set; } [NetworkName("m_vecShift")] - public Vector3 Shift; + [NetworkVar] public partial Vector3 Shift { get; set; } } diff --git a/Game.Server/BeamSpotlight.cs b/Game.Server/BeamSpotlight.cs index 383b7ebd4..c17e62f1a 100644 --- a/Game.Server/BeamSpotlight.cs +++ b/Game.Server/BeamSpotlight.cs @@ -5,34 +5,34 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CBeamSpotlight")] -public class BeamSpotlight : BaseEntity +public partial class BeamSpotlight : BaseEntity { public static readonly SendTable DT_BeamSpotlight = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(HaloIndex)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SpotlightOn)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(HasDynamicLight)), 1, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(SpotlightMaxLength)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpotlightGoalWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(HDRColorScale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(RotationSpeed)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(RotationAxis)), 2, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.HaloIndex, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.SpotlightOn, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.HasDynamicLight, 1, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.SpotlightMaxLength, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpotlightGoalWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.HDRColorScale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.RotationSpeed, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.RotationAxis, 2, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BeamSpotlight); [NetworkName("m_nHaloIndex")] - public int HaloIndex; + [NetworkVar] public partial int HaloIndex { get; set; } [NetworkName("m_bSpotlightOn")] - public int SpotlightOn; + [NetworkVar] public partial int SpotlightOn { get; set; } [NetworkName("m_bHasDynamicLight")] - public int HasDynamicLight; + [NetworkVar] public partial int HasDynamicLight { get; set; } [NetworkName("m_flSpotlightMaxLength")] - public float SpotlightMaxLength; + [NetworkVar] public partial float SpotlightMaxLength { get; set; } [NetworkName("m_flSpotlightGoalWidth")] - public float SpotlightGoalWidth; + [NetworkVar] public partial float SpotlightGoalWidth { get; set; } [NetworkName("m_flHDRColorScale")] - public float HDRColorScale; + [NetworkVar] public partial float HDRColorScale { get; set; } [NetworkName("m_flRotationSpeed")] - public float RotationSpeed; + [NetworkVar] public partial float RotationSpeed { get; set; } [NetworkName("m_nRotationAxis")] - public int RotationAxis; + [NetworkVar] public partial int RotationAxis { get; set; } } diff --git a/Game.Server/BoneFollower.cs b/Game.Server/BoneFollower.cs index 3ec1ed685..45f622d38 100644 --- a/Game.Server/BoneFollower.cs +++ b/Game.Server/BoneFollower.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CBoneFollower")] -public class BoneFollower : BaseEntity +public partial class BoneFollower : BaseEntity { public static readonly SendTable DT_BoneFollower = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(ModelIndex)), 14, 0), - SendPropInt(FIELD.OF(nameof(SolidIndex)), 6, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.ModelIndex, 14, 0), + SendPropInt(NetworkVarFields.SolidIndex, 6, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BoneFollower); [NetworkName("m_modelIndex")] - public new int ModelIndex; + [NetworkVar] public new partial int ModelIndex { get; set; } [NetworkName("m_solidIndex")] - public int SolidIndex; + [NetworkVar] public partial int SolidIndex { get; set; } } diff --git a/Game.Server/BreakableSurface.cs b/Game.Server/BreakableSurface.cs index 3b7b73c1b..cfa87b7ad 100644 --- a/Game.Server/BreakableSurface.cs +++ b/Game.Server/BreakableSurface.cs @@ -8,37 +8,37 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CBreakableSurface")] -public class BreakableSurface : BaseEntity +public partial class BreakableSurface : BaseEntity { public static readonly SendTable DT_BreakableSurface = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(NumWide)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(NumHigh)), 8, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(PanelWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(PanelHeight)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(VNormal)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(VCorner)), 0, PropFlags.Coord), - SendPropInt(FIELD.OF(nameof(IsBroken)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SurfaceType)), 2, PropFlags.Unsigned), - SendPropArray3(FIELD.OF_ARRAY(nameof(RawPanelBitVec)), SendPropInt((IFieldAccessor)null!, 1, PropFlags.Unsigned, sizeOfVar: sizeof(int))), + SendPropInt(NetworkVarFields.NumWide, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.NumHigh, 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.PanelWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.PanelHeight, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.VNormal, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.VCorner, 0, PropFlags.Coord), + SendPropInt(NetworkVarFields.IsBroken, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.SurfaceType, 2, PropFlags.Unsigned), + SendPropArray3(BreakableSurface.NetworkVarFields.RawPanelBitVec, SendPropInt((IFieldAccessor)null!, 1, PropFlags.Unsigned, sizeOfVar: sizeof(int))), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BreakableSurface); [NetworkName("m_nNumWide")] - public int NumWide; + [NetworkVar] public partial int NumWide { get; set; } [NetworkName("m_nNumHigh")] - public int NumHigh; + [NetworkVar] public partial int NumHigh { get; set; } [NetworkName("m_flPanelWidth")] - public float PanelWidth; + [NetworkVar] public partial float PanelWidth { get; set; } [NetworkName("m_flPanelHeight")] - public float PanelHeight; + [NetworkVar] public partial float PanelHeight { get; set; } [NetworkName("m_vNormal")] - public Vector3 VNormal; + [NetworkVar] public partial Vector3 VNormal { get; set; } [NetworkName("m_vCorner")] - public Vector3 VCorner; + [NetworkVar] public partial Vector3 VCorner { get; set; } [NetworkName("m_bIsBroken")] - public int IsBroken; + [NetworkVar] public partial int IsBroken { get; set; } [NetworkName("m_nSurfaceType")] - public int SurfaceType; + [NetworkVar] public partial int SurfaceType { get; set; } [NetworkName("m_RawPanelBitVec")] - public InlineArray256 RawPanelBitVec; + [NetworkVar] public partial NetworkArray, int> RawPanelBitVec { get; } } diff --git a/Game.Server/CitadelEnergyCore.cs b/Game.Server/CitadelEnergyCore.cs index c8494adbd..2f8adb70d 100644 --- a/Game.Server/CitadelEnergyCore.cs +++ b/Game.Server/CitadelEnergyCore.cs @@ -5,25 +5,25 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CCitadelEnergyCore")] -public class CitadelEnergyCore : BaseEntity +public partial class CitadelEnergyCore : BaseEntity { public static readonly SendTable DT_CitadelEnergyCore = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Scale)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(State)), 8, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(Duration)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Spawnflags)), 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Scale, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.State, 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Duration, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Spawnflags, 32, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_CitadelEnergyCore); [NetworkName("m_flScale")] - public float Scale; + [NetworkVar] public partial float Scale { get; set; } [NetworkName("m_nState")] - public int State; + [NetworkVar] public partial int State { get; set; } [NetworkName("m_flDuration")] - public float Duration; + [NetworkVar] public partial float Duration { get; set; } [NetworkName("m_flStartTime")] - public float StartTime; + [NetworkVar] public partial float StartTime { get; set; } [NetworkName("m_spawnflags")] - public int Spawnflags; + [NetworkVar] public partial int Spawnflags { get; set; } } diff --git a/Game.Server/ColorCorrection.cs b/Game.Server/ColorCorrection.cs index 29152265c..0ef565ca8 100644 --- a/Game.Server/ColorCorrection.cs +++ b/Game.Server/ColorCorrection.cs @@ -11,41 +11,41 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CColorCorrection")] -public class ColorCorrection : BaseEntity +public partial class ColorCorrection : BaseEntity { public static readonly SendTable DT_ColorCorrection = new([ - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinFalloff)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxFalloff)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(CurWeight)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxWeight)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeInDuration)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeOutDuration)), 0, PropFlags.NoScale), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinFalloff, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxFalloff, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.CurWeight, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxWeight, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeInDuration, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeOutDuration, 0, PropFlags.NoScale), SendPropString(FIELD.OF(nameof(NetLookupFilename))), - SendPropBool(FIELD.OF(nameof(Enabled))), - SendPropBool(FIELD.OF(nameof(ClientSide))), - SendPropBool(FIELD.OF(nameof(Exclusive))), + SendPropBool(NetworkVarFields.Enabled), + SendPropBool(NetworkVarFields.ClientSide), + SendPropBool(NetworkVarFields.Exclusive), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ColorCorrection); [NetworkName("m_MinFalloff")] - public float MinFalloff; + [NetworkVar] public partial float MinFalloff { get; set; } [NetworkName("m_MaxFalloff")] - public float MaxFalloff; + [NetworkVar] public partial float MaxFalloff { get; set; } [NetworkName("m_flCurWeight")] - public float CurWeight; + [NetworkVar] public partial float CurWeight { get; set; } [NetworkName("m_flMaxWeight")] - public float MaxWeight; + [NetworkVar] public partial float MaxWeight { get; set; } [NetworkName("m_flFadeInDuration")] - public float FadeInDuration; + [NetworkVar] public partial float FadeInDuration { get; set; } [NetworkName("m_flFadeOutDuration")] - public float FadeOutDuration; + [NetworkVar] public partial float FadeOutDuration { get; set; } [NetworkName("m_netlookupFilename")] public InlineArrayMaxPath NetLookupFilename; [NetworkName("m_bEnabled")] - public bool Enabled; + [NetworkVar] public partial bool Enabled { get; set; } [NetworkName("m_bClientSide")] - public bool ClientSide; + [NetworkVar] public partial bool ClientSide { get; set; } [NetworkName("m_bExclusive")] - public bool Exclusive; + [NetworkVar] public partial bool Exclusive { get; set; } } diff --git a/Game.Server/ColorCorrectionVolume.cs b/Game.Server/ColorCorrectionVolume.cs index fd25a3b9e..6397e642c 100644 --- a/Game.Server/ColorCorrectionVolume.cs +++ b/Game.Server/ColorCorrectionVolume.cs @@ -5,26 +5,26 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CColorCorrectionVolume")] -public class ColorCorrectionVolume : BaseEntity +public partial class ColorCorrectionVolume : BaseEntity { public static readonly SendTable DT_ColorCorrectionVolume = new([ - SendPropBool(FIELD.OF(nameof(Enabled))), - SendPropFloat(FIELD.OF(nameof(MaxWeight)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeDuration)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Weight)), 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Enabled), + SendPropFloat(NetworkVarFields.MaxWeight, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeDuration, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Weight, 0, PropFlags.NoScale), SendPropString(FIELD.OF(nameof(LookupFilename))), - SendPropInt(FIELD.OF(nameof(ModelIndex)), 14, 0), + SendPropInt(BaseEntity.NetworkVarFields.ModelIndex, 14, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ColorCorrectionVolume); [NetworkName("m_bEnabled")] - public bool Enabled; + [NetworkVar] public partial bool Enabled { get; set; } [NetworkName("m_MaxWeight")] - public float MaxWeight; + [NetworkVar] public partial float MaxWeight { get; set; } [NetworkName("m_FadeDuration")] - public float FadeDuration; + [NetworkVar] public partial float FadeDuration { get; set; } [NetworkName("m_Weight")] - public float Weight; + [NetworkVar] public partial float Weight { get; set; } [NetworkName("m_lookupFilename")] public InlineArrayMaxPath LookupFilename; } diff --git a/Game.Server/DustTrail.cs b/Game.Server/DustTrail.cs index 95a14d428..d4426f227 100644 --- a/Game.Server/DustTrail.cs +++ b/Game.Server/DustTrail.cs @@ -5,49 +5,49 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("DustTrail")] -public class DustTrail : BaseParticleEntity +public partial class DustTrail : BaseParticleEntity { public static readonly SendTable DT_DustTrail = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnRate)), 8, 0, 1, 1024), + SendPropFloat(NetworkVarFields.SpawnRate, 8, 0, 1, 1024), SendPropVector(FIELD.OF(nameof(Color)), 8, 0, 0, 1), - SendPropFloat(FIELD.OF(nameof(ParticleLifetime)), 16, PropFlags.RoundUp, 0.1f, 100), - SendPropFloat(FIELD.OF(nameof(StopEmitTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinDirectedSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxDirectedSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpawnRadius)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropFloat(FIELD.OF(nameof(Opacity)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ParticleLifetime, 16, PropFlags.RoundUp, 0.1f, 100), + SendPropFloat(NetworkVarFields.StopEmitTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinDirectedSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxDirectedSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRadius, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropFloat(NetworkVarFields.Opacity, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_DustTrail); [NetworkName("m_SpawnRate")] - public float SpawnRate; + [NetworkVar] public partial float SpawnRate { get; set; } [NetworkName("m_Color")] public Vector3 Color; [NetworkName("m_ParticleLifetime")] - public float ParticleLifetime; + [NetworkVar] public partial float ParticleLifetime { get; set; } [NetworkName("m_StopEmitTime")] - public float StopEmitTime; + [NetworkVar] public partial float StopEmitTime { get; set; } [NetworkName("m_MinSpeed")] - public float MinSpeed; + [NetworkVar] public partial float MinSpeed { get; set; } [NetworkName("m_MaxSpeed")] - public float MaxSpeed; + [NetworkVar] public partial float MaxSpeed { get; set; } [NetworkName("m_MinDirectedSpeed")] - public float MinDirectedSpeed; + [NetworkVar] public partial float MinDirectedSpeed { get; set; } [NetworkName("m_MaxDirectedSpeed")] - public float MaxDirectedSpeed; + [NetworkVar] public partial float MaxDirectedSpeed { get; set; } [NetworkName("m_StartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_EndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_SpawnRadius")] - public float SpawnRadius; + [NetworkVar] public partial float SpawnRadius { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_Opacity")] - public float Opacity; + [NetworkVar] public partial float Opacity { get; set; } } diff --git a/Game.Server/DynamicLight.cs b/Game.Server/DynamicLight.cs index efd3a75bc..eb9104c14 100644 --- a/Game.Server/DynamicLight.cs +++ b/Game.Server/DynamicLight.cs @@ -10,31 +10,31 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CDynamicLight")] -public class DynamicLight : BaseEntity +public partial class DynamicLight : BaseEntity { public static readonly SendTable DT_DynamicLight = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(Flags)), 4, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(LightStyle)), 4, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(Radius)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Exponent)), 8), - SendPropFloat(FIELD.OF(nameof(InnerAngle)), 8, 0, 0.0f, 360.0f), - SendPropFloat(FIELD.OF(nameof(OuterAngle)), 8, 0, 0.0f, 360.0f), - SendPropFloat(FIELD.OF(nameof(SpotRadius)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Flags, 4, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.LightStyle, 4, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Radius, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Exponent, 8), + SendPropFloat(NetworkVarFields.InnerAngle, 8, 0, 0.0f, 360.0f), + SendPropFloat(NetworkVarFields.OuterAngle, 8, 0, 0.0f, 360.0f), + SendPropFloat(NetworkVarFields.SpotRadius, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_DynamicLight); [NetworkName("m_Flags")] - public int Flags; + [NetworkVar] public partial int Flags { get; set; } [NetworkName("m_LightStyle")] - public int LightStyle; + [NetworkVar] public partial int LightStyle { get; set; } [NetworkName("m_Radius")] - public float Radius; + [NetworkVar] public partial float Radius { get; set; } [NetworkName("m_Exponent")] - public int Exponent; + [NetworkVar] public partial int Exponent { get; set; } [NetworkName("m_InnerAngle")] - public float InnerAngle; + [NetworkVar] public partial float InnerAngle { get; set; } [NetworkName("m_OuterAngle")] - public float OuterAngle; + [NetworkVar] public partial float OuterAngle { get; set; } [NetworkName("m_SpotRadius")] - public float SpotRadius; + [NetworkVar] public partial float SpotRadius { get; set; } } diff --git a/Game.Server/Embers.cs b/Game.Server/Embers.cs index f952661be..9d27f2796 100644 --- a/Game.Server/Embers.cs +++ b/Game.Server/Embers.cs @@ -5,22 +5,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEmbers")] -public class Embers : BaseEntity +public partial class Embers : BaseEntity { public static readonly SendTable DT_Embers = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(Density)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Lifetime)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Speed)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Emit)), 2, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Density, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Lifetime, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Speed, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Emit, 2, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Embers); [NetworkName("m_nDensity")] - public int Density; + [NetworkVar] public partial int Density { get; set; } [NetworkName("m_nLifetime")] - public int Lifetime; + [NetworkVar] public partial int Lifetime { get; set; } [NetworkName("m_nSpeed")] - public new int Speed; + [NetworkVar] public new partial int Speed { get; set; } [NetworkName("m_bEmit")] - public int Emit; + [NetworkVar] public partial int Emit { get; set; } } diff --git a/Game.Server/EntityDissolve.cs b/Game.Server/EntityDissolve.cs index 358b4594e..1dade3e9f 100644 --- a/Game.Server/EntityDissolve.cs +++ b/Game.Server/EntityDissolve.cs @@ -5,40 +5,40 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEntityDissolve")] -public class EntityDissolve : BaseEntity +public partial class EntityDissolve : BaseEntity { public static readonly SendTable DT_EntityDissolve = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeInStart)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeInLength)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeOutModelStart)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeOutModelLength)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeOutStart)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeOutLength)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(DissolveType)), 3, PropFlags.Unsigned), - SendPropVector(FIELD.OF(nameof(DissolverOrigin)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Magnitude)), 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeInStart, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeInLength, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeOutModelStart, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeOutModelLength, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeOutStart, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeOutLength, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.DissolveType, 3, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.DissolverOrigin, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Magnitude, 8, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EntityDissolve); [NetworkName("m_flStartTime")] - public float StartTime; + [NetworkVar] public partial float StartTime { get; set; } [NetworkName("m_flFadeInStart")] - public float FadeInStart; + [NetworkVar] public partial float FadeInStart { get; set; } [NetworkName("m_flFadeInLength")] - public float FadeInLength; + [NetworkVar] public partial float FadeInLength { get; set; } [NetworkName("m_flFadeOutModelStart")] - public float FadeOutModelStart; + [NetworkVar] public partial float FadeOutModelStart { get; set; } [NetworkName("m_flFadeOutModelLength")] - public float FadeOutModelLength; + [NetworkVar] public partial float FadeOutModelLength { get; set; } [NetworkName("m_flFadeOutStart")] - public float FadeOutStart; + [NetworkVar] public partial float FadeOutStart { get; set; } [NetworkName("m_flFadeOutLength")] - public float FadeOutLength; + [NetworkVar] public partial float FadeOutLength { get; set; } [NetworkName("m_nDissolveType")] - public int DissolveType; + [NetworkVar] public partial int DissolveType { get; set; } [NetworkName("m_vDissolverOrigin")] - public Vector3 DissolverOrigin; + [NetworkVar] public partial Vector3 DissolverOrigin { get; set; } [NetworkName("m_nMagnitude")] - public int Magnitude; + [NetworkVar] public partial int Magnitude { get; set; } } diff --git a/Game.Server/EntityFlame.cs b/Game.Server/EntityFlame.cs index 098d4e8e9..ba4824659 100644 --- a/Game.Server/EntityFlame.cs +++ b/Game.Server/EntityFlame.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEntityFlame")] -public class EntityFlame : BaseEntity +public partial class EntityFlame : BaseEntity { public static readonly SendTable DT_EntityFlame = new(DT_BaseEntity, [ - SendPropEHandle(FIELD.OF(nameof(EntAttached))), + SendPropEHandle(EntityFlame.NetworkVarFields.EntAttached), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EntityFlame); [NetworkName("m_hEntAttached")] - public EHANDLE EntAttached = new(); + [NetworkVar] public partial NetworkHandle EntAttached { get; } } diff --git a/Game.Server/EntityParticleTrail.cs b/Game.Server/EntityParticleTrail.cs index 73cbd6be9..b87ee1f6f 100644 --- a/Game.Server/EntityParticleTrail.cs +++ b/Game.Server/EntityParticleTrail.cs @@ -1,3 +1,4 @@ +using Game.Shared; using Source.Common; using Source; @@ -5,37 +6,37 @@ namespace Game.Server; using FIELD = FIELD; -public class EntityParticleTrailInfo +public partial class EntityParticleTrailInfo { [NetworkName("m_flLifetime")] - public float Lifetime; + [NetworkVar] public partial float Lifetime { get; set; } [NetworkName("m_flStartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_flEndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } public static readonly SendTable DT_EntityParticleTrailInfo = new("DT_EntityParticleTrailInfo", [ - SendPropFloat(Source.FIELD.OF(nameof(Lifetime)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Lifetime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), ]); } // Datatable-accurate stub (gmod DT_EntityParticleTrail, baseclass DT_BaseParticleEntity). [NetworkName("CEntityParticleTrail")] -public class EntityParticleTrail : BaseParticleEntity +public partial class EntityParticleTrail : BaseParticleEntity { [NetworkName("m_iMaterialName")] - public int MaterialName; + [NetworkVar] public partial int MaterialName { get; set; } [NetworkName("m_Info")] - public EntityParticleTrailInfo Info = new(); + [NetworkVarEmbedded] public partial EntityParticleTrailInfo Info { get; } [NetworkName("m_hConstraintEntity")] - public EHANDLE ConstraintEntity; + [NetworkVar] public partial NetworkHandle ConstraintEntity { get; } public static readonly SendTable DT_EntityParticleTrail = new(DT_BaseParticleEntity, [ - SendPropInt(FIELD.OF(nameof(MaterialName)), 10, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.MaterialName, 10, PropFlags.Unsigned), SendPropDataTable("m_Info", FIELD.OF(nameof(Info)), EntityParticleTrailInfo.DT_EntityParticleTrailInfo), - SendPropEHandle(FIELD.OF(nameof(ConstraintEntity))), + SendPropEHandle(NetworkVarFields.ConstraintEntity), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_EntityParticleTrail); } diff --git a/Game.Server/EnvDetailController.cs b/Game.Server/EnvDetailController.cs index e3073ee83..9484a2fd1 100644 --- a/Game.Server/EnvDetailController.cs +++ b/Game.Server/EnvDetailController.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvDetailController")] -public class EnvDetailController : BaseEntity +public partial class EnvDetailController : BaseEntity { public static readonly SendTable DT_DetailController = new([ - SendPropFloat(FIELD.OF(nameof(FadeStartDist)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeEndDist)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeStartDist, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeEndDist, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_DetailController); [NetworkName("m_flFadeStartDist")] - public float FadeStartDist; + [NetworkVar] public partial float FadeStartDist { get; set; } [NetworkName("m_flFadeEndDist")] - public float FadeEndDist; + [NetworkVar] public partial float FadeEndDist { get; set; } } diff --git a/Game.Server/EnvHeadcrabCanister.cs b/Game.Server/EnvHeadcrabCanister.cs index bc0786590..f81fab827 100644 --- a/Game.Server/EnvHeadcrabCanister.cs +++ b/Game.Server/EnvHeadcrabCanister.cs @@ -6,72 +6,72 @@ namespace Game.Server; using FIELD = FIELD; -public class EnvHeadcrabCanisterShared +public partial class EnvHeadcrabCanisterShared { [NetworkName("m_flFlightSpeed")] - public float FlightSpeed; + [NetworkVar] public partial float FlightSpeed { get; set; } [NetworkName("m_flLaunchTime")] - public TimeUnit_t LaunchTime; + [NetworkVar] public partial TimeUnit_t LaunchTime { get; set; } [NetworkName("m_vecParabolaDirection")] - public Vector3 ParabolaDirection; + [NetworkVar] public partial Vector3 ParabolaDirection { get; set; } [NetworkName("m_flFlightTime")] - public float FlightTime; + [NetworkVar] public partial float FlightTime { get; set; } [NetworkName("m_flWorldEnterTime")] - public float WorldEnterTime; + [NetworkVar] public partial float WorldEnterTime { get; set; } [NetworkName("m_flInitialZSpeed")] - public float InitialZSpeed; + [NetworkVar] public partial float InitialZSpeed { get; set; } [NetworkName("m_flZAcceleration")] - public float ZAcceleration; + [NetworkVar] public partial float ZAcceleration { get; set; } [NetworkName("m_flHorizSpeed")] - public float HorizSpeed; + [NetworkVar] public partial float HorizSpeed { get; set; } [NetworkName("m_bLaunchedFromWithinWorld")] - public bool LaunchedFromWithinWorld; + [NetworkVar] public partial bool LaunchedFromWithinWorld { get; set; } [NetworkName("m_vecStartPosition")] - public Vector3 StartPosition; + [NetworkVar] public partial Vector3 StartPosition { get; set; } [NetworkName("m_vecEnterWorldPosition")] - public Vector3 EnterWorldPosition; + [NetworkVar] public partial Vector3 EnterWorldPosition { get; set; } [NetworkName("m_vecDirection")] - public Vector3 Direction; + [NetworkVar] public partial Vector3 Direction { get; set; } [NetworkName("m_vecStartAngles")] - public Vector3 StartAngles; + [NetworkVar] public partial Vector3 StartAngles { get; set; } [NetworkName("m_vecSkyboxOrigin")] - public Vector3 SkyboxOrigin; + [NetworkVar] public partial Vector3 SkyboxOrigin { get; set; } [NetworkName("m_flSkyboxScale")] - public float SkyboxScale; + [NetworkVar] public partial float SkyboxScale { get; set; } [NetworkName("m_bInSkybox")] - public bool InSkybox; + [NetworkVar] public partial bool InSkybox { get; set; } public static readonly SendTable DT_EnvHeadcrabCanisterShared = new("DT_EnvHeadcrabCanisterShared", [ - SendPropFloat(Source.FIELD.OF(nameof(FlightSpeed)), 0, PropFlags.NoScale), - SendPropTime64(Source.FIELD.OF(nameof(LaunchTime))), - SendPropVector(Source.FIELD.OF(nameof(ParabolaDirection)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(FlightTime)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(WorldEnterTime)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(InitialZSpeed)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(ZAcceleration)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(HorizSpeed)), 0, PropFlags.NoScale), - SendPropBool(Source.FIELD.OF(nameof(LaunchedFromWithinWorld))), - SendPropVector(Source.FIELD.OF(nameof(StartPosition)), 0, PropFlags.NoScale), - SendPropVector(Source.FIELD.OF(nameof(EnterWorldPosition)), 0, PropFlags.NoScale), - SendPropVector(Source.FIELD.OF(nameof(Direction)), 0, PropFlags.NoScale), - SendPropVector(Source.FIELD.OF(nameof(StartAngles)), 0, PropFlags.NoScale), - SendPropVector(Source.FIELD.OF(nameof(SkyboxOrigin)), 0, PropFlags.NoScale), - SendPropFloat(Source.FIELD.OF(nameof(SkyboxScale)), 0, PropFlags.NoScale), - SendPropBool(Source.FIELD.OF(nameof(InSkybox))), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.FlightSpeed, 0, PropFlags.NoScale), + SendPropTime64(EnvHeadcrabCanisterShared.NetworkVarFields.LaunchTime), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.ParabolaDirection, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.FlightTime, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.WorldEnterTime, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.InitialZSpeed, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.ZAcceleration, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.HorizSpeed, 0, PropFlags.NoScale), + SendPropBool(EnvHeadcrabCanisterShared.NetworkVarFields.LaunchedFromWithinWorld), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.StartPosition, 0, PropFlags.NoScale), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.EnterWorldPosition, 0, PropFlags.NoScale), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.Direction, 0, PropFlags.NoScale), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.StartAngles, 0, PropFlags.NoScale), + SendPropVector(EnvHeadcrabCanisterShared.NetworkVarFields.SkyboxOrigin, 0, PropFlags.NoScale), + SendPropFloat(EnvHeadcrabCanisterShared.NetworkVarFields.SkyboxScale, 0, PropFlags.NoScale), + SendPropBool(EnvHeadcrabCanisterShared.NetworkVarFields.InSkybox), ]); } [NetworkName("CEnvHeadcrabCanister")] -public class EnvHeadcrabCanister : BaseAnimating +public partial class EnvHeadcrabCanister : BaseAnimating { [NetworkName("m_Shared")] - public EnvHeadcrabCanisterShared Shared = new(); + [NetworkVarEmbedded] public partial EnvHeadcrabCanisterShared Shared { get; } [NetworkName("m_bLanded")] - public bool Landed; + [NetworkVar] public partial bool Landed { get; set; } public static readonly SendTable DT_EnvHeadcrabCanister = new(DT_BaseAnimating, [ SendPropDataTable("m_Shared", FIELD.OF(nameof(Shared)), EnvHeadcrabCanisterShared.DT_EnvHeadcrabCanisterShared), - SendPropBool(FIELD.OF(nameof(Landed))), + SendPropBool(NetworkVarFields.Landed), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_EnvHeadcrabCanister); } diff --git a/Game.Server/EnvParticleScript.cs b/Game.Server/EnvParticleScript.cs index fd8d540ad..9f8533c93 100644 --- a/Game.Server/EnvParticleScript.cs +++ b/Game.Server/EnvParticleScript.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvParticleScript")] -public class EnvParticleScript : BaseAnimating +public partial class EnvParticleScript : BaseAnimating { public static readonly SendTable DT_EnvParticleScript = new(DT_BaseAnimating, [ - SendPropFloat(FIELD.OF(nameof(SequenceScale)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SequenceScale, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvParticleScript); [NetworkName("m_flSequenceScale")] - public float SequenceScale; + [NetworkVar] public partial float SequenceScale { get; set; } } diff --git a/Game.Server/EnvProjectedTexture.cs b/Game.Server/EnvProjectedTexture.cs index 3e417a6df..0538624ff 100644 --- a/Game.Server/EnvProjectedTexture.cs +++ b/Game.Server/EnvProjectedTexture.cs @@ -5,52 +5,52 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvProjectedTexture")] -public class EnvProjectedTexture : BaseEntity +public partial class EnvProjectedTexture : BaseEntity { public static readonly SendTable DT_EnvProjectedTexture = new(DT_BaseEntity, [ - SendPropEHandle(FIELD.OF(nameof(HTargetEntity))), - SendPropBool(FIELD.OF(nameof(State))), - SendPropFloat(FIELD.OF(nameof(LightFOV)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(EnableShadows))), - SendPropBool(FIELD.OF(nameof(LightOnlyTarget))), - SendPropBool(FIELD.OF(nameof(LightWorld))), - SendPropBool(FIELD.OF(nameof(CameraSpace))), - SendPropVector(FIELD.OF(nameof(LinearFloatLightColor)), 0, PropFlags.NoScale), + SendPropEHandle(EnvProjectedTexture.NetworkVarFields.HTargetEntity), + SendPropBool(NetworkVarFields.State), + SendPropFloat(NetworkVarFields.LightFOV, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.EnableShadows), + SendPropBool(NetworkVarFields.LightOnlyTarget), + SendPropBool(NetworkVarFields.LightWorld), + SendPropBool(NetworkVarFields.CameraSpace), + SendPropVector(NetworkVarFields.LinearFloatLightColor, 0, PropFlags.NoScale), SendPropString(FIELD.OF(nameof(SpotlightTextureName))), - SendPropInt(FIELD.OF(nameof(SpotlightTextureFrame)), 14, 0), - SendPropFloat(FIELD.OF(nameof(NearZ)), 16, PropFlags.RoundDown, 0.0f, 500.0f), - SendPropFloat(FIELD.OF(nameof(FarZ)), 18, PropFlags.RoundDown, 0.0f, 56756.0f), - SendPropBool(FIELD.OF(nameof(ShadowQuality))), - SendPropInt(FIELD.OF(nameof(Style)), 8, 0), + SendPropInt(NetworkVarFields.SpotlightTextureFrame, 14, 0), + SendPropFloat(NetworkVarFields.NearZ, 16, PropFlags.RoundDown, 0.0f, 500.0f), + SendPropFloat(NetworkVarFields.FarZ, 18, PropFlags.RoundDown, 0.0f, 56756.0f), + SendPropBool(NetworkVarFields.ShadowQuality), + SendPropInt(NetworkVarFields.Style, 8, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvProjectedTexture); [NetworkName("m_hTargetEntity")] - public EHANDLE HTargetEntity = new(); + [NetworkVar] public partial NetworkHandle HTargetEntity { get; } [NetworkName("m_bState")] - public bool State; + [NetworkVar] public partial bool State { get; set; } [NetworkName("m_flLightFOV")] - public float LightFOV; + [NetworkVar] public partial float LightFOV { get; set; } [NetworkName("m_bEnableShadows")] - public bool EnableShadows; + [NetworkVar] public partial bool EnableShadows { get; set; } [NetworkName("m_bLightOnlyTarget")] - public bool LightOnlyTarget; + [NetworkVar] public partial bool LightOnlyTarget { get; set; } [NetworkName("m_bLightWorld")] - public bool LightWorld; + [NetworkVar] public partial bool LightWorld { get; set; } [NetworkName("m_bCameraSpace")] - public bool CameraSpace; + [NetworkVar] public partial bool CameraSpace { get; set; } [NetworkName("m_LinearFloatLightColor")] - public Vector3 LinearFloatLightColor; + [NetworkVar] public partial Vector3 LinearFloatLightColor { get; set; } [NetworkName("m_SpotlightTextureName")] public InlineArrayMaxPath SpotlightTextureName; [NetworkName("m_nSpotlightTextureFrame")] - public int SpotlightTextureFrame; + [NetworkVar] public partial int SpotlightTextureFrame { get; set; } [NetworkName("m_flNearZ")] - public float NearZ; + [NetworkVar] public partial float NearZ { get; set; } [NetworkName("m_flFarZ")] - public float FarZ; + [NetworkVar] public partial float FarZ { get; set; } [NetworkName("m_nShadowQuality")] - public bool ShadowQuality; + [NetworkVar] public partial bool ShadowQuality { get; set; } [NetworkName("m_iStyle")] - public int Style; + [NetworkVar] public partial int Style { get; set; } } diff --git a/Game.Server/EnvQuadraticBeam.cs b/Game.Server/EnvQuadraticBeam.cs index 72746f710..d8e8e8e71 100644 --- a/Game.Server/EnvQuadraticBeam.cs +++ b/Game.Server/EnvQuadraticBeam.cs @@ -5,22 +5,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvQuadraticBeam")] -public class EnvQuadraticBeam : BaseEntity +public partial class EnvQuadraticBeam : BaseEntity { public static readonly SendTable DT_QuadraticBeam = new(DT_BaseEntity, [ - SendPropVector(FIELD.OF(nameof(TargetPosition)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(ControlPosition)), 0, PropFlags.Coord), - SendPropFloat(FIELD.OF(nameof(ScrollRate)), 8, 0, -4, 4), - SendPropFloat(FIELD.OF(nameof(Width)), 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.TargetPosition, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.ControlPosition, 0, PropFlags.Coord), + SendPropFloat(NetworkVarFields.ScrollRate, 8, 0, -4, 4), + SendPropFloat(NetworkVarFields.Width, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_QuadraticBeam); [NetworkName("m_targetPosition")] - public Vector3 TargetPosition; + [NetworkVar] public partial Vector3 TargetPosition { get; set; } [NetworkName("m_controlPosition")] - public Vector3 ControlPosition; + [NetworkVar] public partial Vector3 ControlPosition { get; set; } [NetworkName("m_scrollRate")] - public float ScrollRate; + [NetworkVar] public partial float ScrollRate { get; set; } [NetworkName("m_flWidth")] - public float Width; + [NetworkVar] public partial float Width { get; set; } } diff --git a/Game.Server/EnvScreenEffect.cs b/Game.Server/EnvScreenEffect.cs index 4cb328ce9..73dd1a56e 100644 --- a/Game.Server/EnvScreenEffect.cs +++ b/Game.Server/EnvScreenEffect.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvScreenEffect")] -public class EnvScreenEffect : BaseEntity +public partial class EnvScreenEffect : BaseEntity { public static readonly SendTable DT_EnvScreenEffect = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Duration)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Type)), 12, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Duration, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Type, 12, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvScreenEffect); [NetworkName("m_flDuration")] - public float Duration; + [NetworkVar] public partial float Duration { get; set; } [NetworkName("m_nType")] - public int Type; + [NetworkVar] public partial int Type { get; set; } } diff --git a/Game.Server/EnvScreenOverlay.cs b/Game.Server/EnvScreenOverlay.cs index 1c6d21054..7be0a3f77 100644 --- a/Game.Server/EnvScreenOverlay.cs +++ b/Game.Server/EnvScreenOverlay.cs @@ -6,29 +6,29 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvScreenOverlay")] -public class EnvScreenOverlay : BaseEntity +public partial class EnvScreenOverlay : BaseEntity { public const int MAX_SCREEN_OVERLAYS = 10; [NetworkName("m_iszOverlayNames")] - public InlineArray10> OverlayNames; + [NetworkVar] public partial NetworkArray, string?> OverlayNames { get; } [NetworkName("m_flOverlayTimes")] - public InlineArray10 OverlayTimes; + [NetworkVar] public partial NetworkArray, float> OverlayTimes { get; } [NetworkName("m_flStartTime")] - public float StartTime; + [NetworkVar] public partial float StartTime { get; set; } [NetworkName("m_iDesiredOverlay")] - public int DesiredOverlay; + [NetworkVar] public partial int DesiredOverlay { get; set; } [NetworkName("m_bIsActive")] - public bool IsActive; + [NetworkVar] public partial bool IsActive { get; set; } public static readonly SendTable DT_EnvScreenOverlay = new(DT_BaseEntity, [ - SendPropString(FIELD.OF_SENDINFO_ARRAY(nameof(OverlayNames))), - SendPropArray(FIELD.OF_ARRAY(nameof(OverlayNames))), - SendPropFloat(FIELD.OF_SENDINFO_ARRAY(nameof(OverlayTimes)), 11, PropFlags.RoundDown, -1.0f, 63.0f), - SendPropArray(FIELD.OF_ARRAY(nameof(OverlayTimes))), - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(DesiredOverlay)), 5), - SendPropBool(FIELD.OF(nameof(IsActive))), + SendPropStringT(FIELD.OF_SENDINFO_ARRAY(NetworkVarFields.OverlayNames)), + SendPropArray(NetworkVarFields.OverlayNames), + SendPropFloat(FIELD.OF_SENDINFO_ARRAY(NetworkVarFields.OverlayTimes), 11, PropFlags.RoundDown, -1.0f, 63.0f), + SendPropArray(NetworkVarFields.OverlayTimes), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.DesiredOverlay, 5), + SendPropBool(NetworkVarFields.IsActive), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_EnvScreenOverlay); } diff --git a/Game.Server/EnvStarfield.cs b/Game.Server/EnvStarfield.cs index 8fae2964a..f39208938 100644 --- a/Game.Server/EnvStarfield.cs +++ b/Game.Server/EnvStarfield.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CEnvStarfield")] -public class EnvStarfield : BaseEntity +public partial class EnvStarfield : BaseEntity { public static readonly SendTable DT_EnvStarfield = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(On))), - SendPropFloat(FIELD.OF(nameof(Density)), 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.On), + SendPropFloat(NetworkVarFields.Density, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvStarfield); [NetworkName("m_bOn")] - public bool On; + [NetworkVar] public partial bool On { get; set; } [NetworkName("m_flDensity")] - public float Density; + [NetworkVar] public partial float Density { get; set; } } diff --git a/Game.Server/EnvTonemapController.cs b/Game.Server/EnvTonemapController.cs index 4bdb94b15..89ca67e2a 100644 --- a/Game.Server/EnvTonemapController.cs +++ b/Game.Server/EnvTonemapController.cs @@ -13,16 +13,16 @@ [LinkEntityToClass("env_tonemap_controller")] [NetworkName("CEnvTonemapController")] -public class EnvTonemapController : PointEntity +public partial class EnvTonemapController : PointEntity { public static readonly SendTable DT_EnvTonemapController = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(UseCustomAutoExposureMin))), - SendPropBool(FIELD.OF(nameof(UseCustomAutoExposureMax))), - SendPropBool(FIELD.OF(nameof(UseCustomBloomScale))), - SendPropFloat(FIELD.OF(nameof(CustomAutoExposureMin)), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF(nameof(CustomAutoExposureMax)), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF(nameof(CustomBloomScale)), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF(nameof(CustomBloomScaleMinimum)), 0, PropFlags.NoScale, 0, 0), + SendPropBool(NetworkVarFields.UseCustomAutoExposureMin), + SendPropBool(NetworkVarFields.UseCustomAutoExposureMax), + SendPropBool(NetworkVarFields.UseCustomBloomScale), + SendPropFloat(NetworkVarFields.CustomAutoExposureMin, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.CustomAutoExposureMax, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.CustomBloomScale, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.CustomBloomScaleMinimum, 0, PropFlags.NoScale, 0, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvTonemapController); public static readonly ConVar mat_hdr_tonemapscale = new("1.0", FCvar.Cheat, "The HDR tonemap scale. 1 = Use autoexposure, 0 = eyes fully closed, 16 = eyes wide open."); @@ -30,22 +30,22 @@ public class EnvTonemapController : PointEntity float BlendTonemapStart; float BlendTonemapEnd; TimeUnit_t BlendEndTime; - TimeUnit_t BlendStartTime; + [NetworkVar] public partial TimeUnit_t BlendStartTime { get; set; } [NetworkName("m_bUseCustomAutoExposureMin")] - public bool UseCustomAutoExposureMin; + [NetworkVar] public partial bool UseCustomAutoExposureMin { get; set; } [NetworkName("m_bUseCustomAutoExposureMax")] - public bool UseCustomAutoExposureMax; + [NetworkVar] public partial bool UseCustomAutoExposureMax { get; set; } [NetworkName("m_bUseCustomBloomScale")] - public bool UseCustomBloomScale; + [NetworkVar] public partial bool UseCustomBloomScale { get; set; } [NetworkName("m_flCustomAutoExposureMin")] - public float CustomAutoExposureMin; + [NetworkVar] public partial float CustomAutoExposureMin { get; set; } [NetworkName("m_flCustomAutoExposureMax")] - public float CustomAutoExposureMax; + [NetworkVar] public partial float CustomAutoExposureMax { get; set; } [NetworkName("m_flCustomBloomScale")] - public float CustomBloomScale; + [NetworkVar] public partial float CustomBloomScale { get; set; } [NetworkName("m_flCustomBloomScaleMinimum")] - public float CustomBloomScaleMinimum; + [NetworkVar] public partial float CustomBloomScaleMinimum { get; set; } public static readonly new DataMap DataDesc = new(typeof(EnvTonemapController), PointEntity.DataDesc, [ DEFINE.FIELD(nameof(BlendTonemapStart), FieldType.Float), diff --git a/Game.Server/EnvWind.cs b/Game.Server/EnvWind.cs index 36ca38171..e75bc4f85 100644 --- a/Game.Server/EnvWind.cs +++ b/Game.Server/EnvWind.cs @@ -7,22 +7,22 @@ namespace Game.Server; using FIELD = FIELD; using FIELD_EWS = FIELD; [NetworkName("CEnvWind")] -public class EnvWind : BaseEntity +public partial class EnvWind : BaseEntity { public static readonly SendTable DT_EnvWindShared = new(nameof(DT_EnvWindShared), [ - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.MinWind)), 10, PropFlags.Unsigned), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.MaxWind)), 10, PropFlags.Unsigned), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.MinGust)), 10, PropFlags.Unsigned), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.MaxGust)), 10, PropFlags.Unsigned), - SendPropFloat(FIELD_EWS.OF(nameof(EnvWindShared.MinGustDelay))), - SendPropFloat(FIELD_EWS.OF(nameof(EnvWindShared.MaxGustDelay))), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.GustDirChange)), 9, PropFlags.Unsigned), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.WindSeed)), 32, PropFlags.Unsigned), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.InitialWindDir)), 9, PropFlags.Unsigned), - SendPropFloat(FIELD_EWS.OF(nameof(EnvWindShared.InitialWindSpeed))), - SendPropFloat(FIELD_EWS.OF(nameof(EnvWindShared.StartTime))), - SendPropFloat(FIELD_EWS.OF(nameof(EnvWindShared.GustDuration))), - SendPropInt(FIELD_EWS.OF(nameof(EnvWindShared.WindRadius)), 32, PropFlags.NoScale), + SendPropInt(EnvWindShared.NetworkVarFields.MinWind, 10, PropFlags.Unsigned), + SendPropInt(EnvWindShared.NetworkVarFields.MaxWind, 10, PropFlags.Unsigned), + SendPropInt(EnvWindShared.NetworkVarFields.MinGust, 10, PropFlags.Unsigned), + SendPropInt(EnvWindShared.NetworkVarFields.MaxGust, 10, PropFlags.Unsigned), + SendPropFloat(EnvWindShared.NetworkVarFields.MinGustDelay), + SendPropFloat(EnvWindShared.NetworkVarFields.MaxGustDelay), + SendPropInt(EnvWindShared.NetworkVarFields.GustDirChange, 9, PropFlags.Unsigned), + SendPropInt(EnvWindShared.NetworkVarFields.WindSeed, 32, PropFlags.Unsigned), + SendPropInt(EnvWindShared.NetworkVarFields.InitialWindDir, 9, PropFlags.Unsigned), + SendPropFloat(EnvWindShared.NetworkVarFields.InitialWindSpeed), + SendPropFloat(EnvWindShared.NetworkVarFields.StartTime), + SendPropFloat(EnvWindShared.NetworkVarFields.GustDuration), + SendPropInt(EnvWindShared.NetworkVarFields.WindRadius, 32, PropFlags.NoScale), ]); public static readonly SendTable DT_EnvWind = new([ @@ -31,5 +31,5 @@ public class EnvWind : BaseEntity public static readonly new ServerClass ServerClass = new ServerClass(DT_EnvWind); [NetworkName("m_EnvWindShared")] - public readonly EnvWindShared EnvWindShared = new(); + [NetworkVarEmbedded] public partial EnvWindShared EnvWindShared { get; } } diff --git a/Game.Server/Filters.cs b/Game.Server/Filters.cs index c810dfd32..831a77db9 100644 --- a/Game.Server/Filters.cs +++ b/Game.Server/Filters.cs @@ -259,9 +259,9 @@ protected override bool PassesFilterImpl(BaseEntity? caller, BaseEntity? entity) // > FilterDamageType // ################################################################### [LinkEntityToClass("filter_damage_type")] -public class FilterDamageType : BaseFilter +public partial class FilterDamageType : BaseFilter { - protected int DamageType; + [NetworkVar] public partial int DamageType { get; set; } public static readonly new DataMap DataDesc = new(typeof(FilterDamageType), BaseFilter.DataDesc, [ // Keyfields diff --git a/Game.Server/FireSmoke.cs b/Game.Server/FireSmoke.cs index f53fc9f36..d7201efd8 100644 --- a/Game.Server/FireSmoke.cs +++ b/Game.Server/FireSmoke.cs @@ -5,28 +5,28 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFireSmoke")] -public class FireSmoke : BaseEntity +public partial class FireSmoke : BaseEntity { public static readonly SendTable DT_FireSmoke = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(StartScale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Scale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScaleTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Flags)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(FlameModelIndex)), 14, 0), - SendPropInt(FIELD.OF(nameof(FlameFromAboveModelIndex)), 14, 0), + SendPropFloat(NetworkVarFields.StartScale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Scale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Flags, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.FlameModelIndex, 14, 0), + SendPropInt(NetworkVarFields.FlameFromAboveModelIndex, 14, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FireSmoke); [NetworkName("m_flStartScale")] - public float StartScale; + [NetworkVar] public partial float StartScale { get; set; } [NetworkName("m_flScale")] - public float Scale; + [NetworkVar] public partial float Scale { get; set; } [NetworkName("m_flScaleTime")] - public float ScaleTime; + [NetworkVar] public partial float ScaleTime { get; set; } [NetworkName("m_nFlags")] - public int Flags; + [NetworkVar] public partial int Flags { get; set; } [NetworkName("m_nFlameModelIndex")] - public int FlameModelIndex; + [NetworkVar] public partial int FlameModelIndex { get; set; } [NetworkName("m_nFlameFromAboveModelIndex")] - public int FlameFromAboveModelIndex; + [NetworkVar] public partial int FlameFromAboveModelIndex { get; set; } } diff --git a/Game.Server/FireTrail.cs b/Game.Server/FireTrail.cs index 7dedb6ad3..829609593 100644 --- a/Game.Server/FireTrail.cs +++ b/Game.Server/FireTrail.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFireTrail")] -public class FireTrail : BaseParticleEntity +public partial class FireTrail : BaseParticleEntity { public static readonly SendTable DT_FireTrail = new(DT_BaseParticleEntity, [ - SendPropInt(FIELD.OF(nameof(Attachment)), 32, 0), - SendPropFloat(FIELD.OF(nameof(Lifetime)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Attachment, 32, 0), + SendPropFloat(NetworkVarFields.Lifetime, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FireTrail); [NetworkName("m_nAttachment")] - public int Attachment; + [NetworkVar] public partial int Attachment { get; set; } [NetworkName("m_flLifetime")] - public float Lifetime; + [NetworkVar] public partial float Lifetime { get; set; } } diff --git a/Game.Server/Fish.cs b/Game.Server/Fish.cs index 14d29dd9a..86e052819 100644 --- a/Game.Server/Fish.cs +++ b/Game.Server/Fish.cs @@ -5,30 +5,30 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFish")] -public class Fish : BaseAnimating +public partial class Fish : BaseAnimating { public static readonly SendTable DT_CFish = new([ - SendPropVector(FIELD.OF(nameof(PoolOrigin)), 0, PropFlags.Coord), - SendPropFloat(FIELD.OF(nameof(Le)), 7, 0, 0.0f, 360.0f), - SendPropFloat(FIELD.OF(nameof(X)), 7, 0, -255.0f, 255.0f), - SendPropFloat(FIELD.OF(nameof(Y)), 7, 0, -255.0f, 255.0f), - SendPropFloat(FIELD.OF(nameof(Z)), 0, PropFlags.Coord | PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(ModelIndex)), 14, 0), - SendPropInt(FIELD.OF(nameof(LifeState)), 3, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(WaterLevel)), 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.PoolOrigin, 0, PropFlags.Coord), + SendPropFloat(NetworkVarFields.Le, 7, 0, 0.0f, 360.0f), + SendPropFloat(NetworkVarFields.X, 7, 0, -255.0f, 255.0f), + SendPropFloat(NetworkVarFields.Y, 7, 0, -255.0f, 255.0f), + SendPropFloat(NetworkVarFields.Z, 0, PropFlags.Coord | PropFlags.NoScale), + SendPropInt(BaseEntity.NetworkVarFields.ModelIndex, 14, 0), + SendPropInt(BaseEntity.NetworkVarFields.LifeState, 3, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.WaterLevel, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_CFish); [NetworkName("m_poolOrigin")] - public Vector3 PoolOrigin; + [NetworkVar] public partial Vector3 PoolOrigin { get; set; } [NetworkName("m_angle")] - public float Le; + [NetworkVar] public partial float Le { get; set; } [NetworkName("m_x")] - public float X; + [NetworkVar] public partial float X { get; set; } [NetworkName("m_y")] - public float Y; + [NetworkVar] public partial float Y { get; set; } [NetworkName("m_z")] - public float Z; + [NetworkVar] public partial float Z { get; set; } [NetworkName("m_waterLevel")] - public new float WaterLevel; + [NetworkVar] public new partial float WaterLevel { get; set; } } diff --git a/Game.Server/Flare.cs b/Game.Server/Flare.cs index 461b3fbba..d9d07440f 100644 --- a/Game.Server/Flare.cs +++ b/Game.Server/Flare.cs @@ -5,25 +5,25 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFlare")] -public class Flare : BaseCombatCharacter +public partial class Flare : BaseCombatCharacter { public static readonly SendTable DT_Flare = new(DT_BaseCombatCharacter, [ - SendPropFloat(FIELD.OF(nameof(TimeBurnOut)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Scale)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Light))), - SendPropBool(FIELD.OF(nameof(Smoke))), - SendPropBool(FIELD.OF(nameof(PropFlare))), + SendPropFloat(NetworkVarFields.TimeBurnOut, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Scale, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Light), + SendPropBool(NetworkVarFields.Smoke), + SendPropBool(NetworkVarFields.PropFlare), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Flare); [NetworkName("m_flTimeBurnOut")] - public float TimeBurnOut; + [NetworkVar] public partial float TimeBurnOut { get; set; } [NetworkName("m_flScale")] - public float Scale; + [NetworkVar] public partial float Scale { get; set; } [NetworkName("m_bLight")] - public bool Light; + [NetworkVar] public partial bool Light { get; set; } [NetworkName("m_bSmoke")] - public bool Smoke; + [NetworkVar] public partial bool Smoke { get; set; } [NetworkName("m_bPropFlare")] - public bool PropFlare; + [NetworkVar] public partial bool PropFlare { get; set; } } diff --git a/Game.Server/FleshEffectTarget.cs b/Game.Server/FleshEffectTarget.cs index a1686aad2..3342c7dd3 100644 --- a/Game.Server/FleshEffectTarget.cs +++ b/Game.Server/FleshEffectTarget.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFleshEffectTarget")] -public class FleshEffectTarget : BaseEntity +public partial class FleshEffectTarget : BaseEntity { public static readonly SendTable DT_FleshEffectTarget = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Radius)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScaleTime)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Radius, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleTime, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FleshEffectTarget); [NetworkName("m_flRadius")] - public float Radius; + [NetworkVar] public partial float Radius { get; set; } [NetworkName("m_flScaleTime")] - public float ScaleTime; + [NetworkVar] public partial float ScaleTime { get; set; } } diff --git a/Game.Server/FlexManipulate.cs b/Game.Server/FlexManipulate.cs index 4cd876579..d1ffdf96d 100644 --- a/Game.Server/FlexManipulate.cs +++ b/Game.Server/FlexManipulate.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFlexManipulate")] -public class FlexManipulate : BaseEntity +public partial class FlexManipulate : BaseEntity { public static readonly SendTable DT_FlexManipulate = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(ExScale)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(EyesLocalTarget)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ExScale, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.EyesLocalTarget, 0, PropFlags.NoScale), SendPropArray3(FIELD.OF_ARRAY(nameof(FlexWeights)), SendPropFloat(null!, 0, PropFlags.NoScale)), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FlexManipulate); [NetworkName("m_flexScale")] - public float ExScale; + [NetworkVar] public partial float ExScale { get; set; } [NetworkName("m_EyesLocalTarget")] - public Vector3 EyesLocalTarget; + [NetworkVar] public partial Vector3 EyesLocalTarget { get; set; } [NetworkName("m_iFlexWeights")] public InlineArray96 FlexWeights; } diff --git a/Game.Server/FogController.cs b/Game.Server/FogController.cs index a4f3b90dc..281ce0920 100644 --- a/Game.Server/FogController.cs +++ b/Game.Server/FogController.cs @@ -7,32 +7,32 @@ namespace Game.Server; [LinkEntityToClass("env_fog_controller")] [NetworkName("CFogController")] -public class FogController : BaseEntity +public partial class FogController : BaseEntity { [NetworkName("m_fog")] - public FogParams Fog; + [NetworkVarEmbedded] public partial FogParams.NetworkVar Fog { get; } public static readonly SendTable DT_FogController = new([ - SendPropInt(FIELD.OF("Fog.Enable"), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.Blend"), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.Radial"), 1, PropFlags.Unsigned), - SendPropVector(FIELD.OF("Fog.DirPrimary"), 0, PropFlags.Coord), - SendPropInt(FIELD.OF("Fog.ColorPrimary"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.ColorSecondary"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.ColorPrimaryHDR"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.ColorSecondaryHDR"), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF("Fog.Start"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Fog.End"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Fog.MaxDensity"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Fog.FarZ"), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Fog_Enable, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_Blend, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_Radial, 1, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.Fog_DirPrimary, 0, PropFlags.Coord), + SendPropInt(NetworkVarFields.Fog_ColorPrimary, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_ColorSecondary, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_ColorPrimaryHDR, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_ColorSecondaryHDR, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Fog_Start, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Fog_End, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Fog_MaxDensity, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Fog_FarZ, 0, PropFlags.NoScale), - SendPropInt(FIELD.OF("Fog.ColorPrimaryLerpTo"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Fog.ColorSecondaryLerpTo"), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF("Fog.StartLerpTo"), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF("Fog.EndLerpTo"), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF("Fog.MaxDensityLerpTo"), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF("Fog.LerpTime"), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF("Fog.Duration"), 0, PropFlags.NoScale, 0, 0), - SendPropFloat(FIELD.OF("Fog.HDRColorScale"), 0, PropFlags.NoScale, 0, 0), + SendPropInt(NetworkVarFields.Fog_ColorPrimaryLerpTo, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Fog_ColorSecondaryLerpTo, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Fog_StartLerpTo, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.Fog_EndLerpTo, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.Fog_MaxDensityLerpTo, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.Fog_LerpTime, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.Fog_Duration, 0, PropFlags.NoScale, 0, 0), + SendPropFloat(NetworkVarFields.Fog_HDRColorScale, 0, PropFlags.NoScale, 0, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FogController); } diff --git a/Game.Server/FuncAreaPortalWindow.cs b/Game.Server/FuncAreaPortalWindow.cs index d28f7a8da..84a9a8e4a 100644 --- a/Game.Server/FuncAreaPortalWindow.cs +++ b/Game.Server/FuncAreaPortalWindow.cs @@ -8,22 +8,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFuncAreaPortalWindow")] -public class FuncAreaPortalWindow : BaseEntity +public partial class FuncAreaPortalWindow : BaseEntity { public static readonly SendTable DT_FuncAreaPortalWindow = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(FadeDist)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeStartDist)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(TranslucencyLimit)), 0, PropFlags.NoScale), - SendPropModelIndex(FIELD.OF(nameof(BackgroundModelIndex))), + SendPropFloat(NetworkVarFields.FadeDist, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeStartDist, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.TranslucencyLimit, 0, PropFlags.NoScale), + SendPropModelIndex(NetworkVarFields.BackgroundModelIndex), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FuncAreaPortalWindow); [NetworkName("m_flFadeDist")] - public float FadeDist; + [NetworkVar] public partial float FadeDist { get; set; } [NetworkName("m_flFadeStartDist")] - public float FadeStartDist; + [NetworkVar] public partial float FadeStartDist { get; set; } [NetworkName("m_flTranslucencyLimit")] - public float TranslucencyLimit; + [NetworkVar] public partial float TranslucencyLimit { get; set; } [NetworkName("m_iBackgroundModelIndex")] - public int BackgroundModelIndex; + [NetworkVar] public partial int BackgroundModelIndex { get; set; } } diff --git a/Game.Server/FuncConveyor.cs b/Game.Server/FuncConveyor.cs index 86e78138b..2b6d7044b 100644 --- a/Game.Server/FuncConveyor.cs +++ b/Game.Server/FuncConveyor.cs @@ -8,13 +8,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFuncConveyor")] -public class FuncConveyor : FuncWall +public partial class FuncConveyor : FuncWall { public static readonly SendTable DT_FuncConveyor = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(ConveyorSpeed)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ConveyorSpeed, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FuncConveyor); [NetworkName("m_flConveyorSpeed")] - public float ConveyorSpeed; + [NetworkVar] public partial float ConveyorSpeed { get; set; } } diff --git a/Game.Server/FuncOccluder.cs b/Game.Server/FuncOccluder.cs index 49d1768cc..6844e593a 100644 --- a/Game.Server/FuncOccluder.cs +++ b/Game.Server/FuncOccluder.cs @@ -12,16 +12,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFuncOccluder")] -public class FuncOccluder : BaseEntity +public partial class FuncOccluder : BaseEntity { public static readonly SendTable DT_FuncOccluder = new([ - SendPropBool(FIELD.OF(nameof(Active))), - SendPropInt(FIELD.OF(nameof(OccluderIndex)), 10, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.Active), + SendPropInt(NetworkVarFields.OccluderIndex, 10, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FuncOccluder); [NetworkName("m_bActive")] - public bool Active; + [NetworkVar] public partial bool Active { get; set; } [NetworkName("m_nOccluderIndex")] - public int OccluderIndex; + [NetworkVar] public partial int OccluderIndex { get; set; } } diff --git a/Game.Server/FuncRotating.cs b/Game.Server/FuncRotating.cs index 964a210e9..df84455a4 100644 --- a/Game.Server/FuncRotating.cs +++ b/Game.Server/FuncRotating.cs @@ -20,7 +20,7 @@ public class FuncRotating : BaseEntity SendPropAngle(FIELD.OF_VECTORELEM(nameof(Rotation), 0), 13, PropFlags.RoundDown | PropFlags.ChangesOften, proxyFn: SendProxy_FuncRotatingAngle), SendPropAngle(FIELD.OF_VECTORELEM(nameof(Rotation), 1), 13, PropFlags.RoundDown | PropFlags.ChangesOften, proxyFn: SendProxy_FuncRotatingAngle), SendPropAngle(FIELD.OF_VECTORELEM(nameof(Rotation), 2), 13, PropFlags.RoundDown | PropFlags.ChangesOften, proxyFn: SendProxy_FuncRotatingAngle), - SendPropInt(FIELD.OF(nameof(SimulationTime)), SIMULATION_TIME_WINDOW_BITS, PropFlags.Unsigned | PropFlags.ChangesOften | PropFlags.EncodedAgainstTickCount, SendProxy_FuncRotatingSimulationTime) + SendPropInt(NetworkVarFields.SimulationTime, SIMULATION_TIME_WINDOW_BITS, PropFlags.Unsigned | PropFlags.ChangesOften | PropFlags.EncodedAgainstTickCount, SendProxy_FuncRotatingSimulationTime) ]); private static void SendProxy_FuncRotatingOrigin(SendProp prop, object instance, IFieldAccessor field, ref DVariant outData, int element, int objectID) { diff --git a/Game.Server/FuncSmokeVolume.cs b/Game.Server/FuncSmokeVolume.cs index 387a6a2a4..d6b6d749e 100644 --- a/Game.Server/FuncSmokeVolume.cs +++ b/Game.Server/FuncSmokeVolume.cs @@ -12,38 +12,38 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFuncSmokeVolume")] -public class FuncSmokeVolume : BaseParticleEntity +public partial class FuncSmokeVolume : BaseParticleEntity { public static readonly SendTable DT_FuncSmokeVolume = new(DT_BaseParticleEntity, [ - SendPropInt(FIELD.OF(nameof(Color1)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Color2)), 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Color1, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Color2, 32, PropFlags.Unsigned), SendPropString(FIELD.OF(nameof(MaterialName))), - SendPropFloat(FIELD.OF(nameof(ParticleDrawWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ParticleSpacingDistance)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(DensityRampSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(RotationSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MovementSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Density)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(SpawnFlags)), 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.ParticleDrawWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ParticleSpacingDistance, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.DensityRampSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.RotationSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MovementSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Density, 0, PropFlags.NoScale), + SendPropInt(BaseEntity.NetworkVarFields.SpawnFlags, 8, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_FuncSmokeVolume); [NetworkName("m_Color1")] - public Color Color1; + [NetworkVar] public partial Color Color1 { get; set; } [NetworkName("m_Color2")] - public Color Color2; + [NetworkVar] public partial Color Color2 { get; set; } [NetworkName("m_MaterialName")] public InlineArray255 MaterialName; [NetworkName("m_ParticleDrawWidth")] - public float ParticleDrawWidth; + [NetworkVar] public partial float ParticleDrawWidth { get; set; } [NetworkName("m_ParticleSpacingDistance")] - public float ParticleSpacingDistance; + [NetworkVar] public partial float ParticleSpacingDistance { get; set; } [NetworkName("m_DensityRampSpeed")] - public float DensityRampSpeed; + [NetworkVar] public partial float DensityRampSpeed { get; set; } [NetworkName("m_RotationSpeed")] - public float RotationSpeed; + [NetworkVar] public partial float RotationSpeed { get; set; } [NetworkName("m_MovementSpeed")] - public float MovementSpeed; + [NetworkVar] public partial float MovementSpeed { get; set; } [NetworkName("m_Density")] - public float Density; + [NetworkVar] public partial float Density { get; set; } } diff --git a/Game.Server/Func_Dust.cs b/Game.Server/Func_Dust.cs index 3608431d2..9f332d9c1 100644 --- a/Game.Server/Func_Dust.cs +++ b/Game.Server/Func_Dust.cs @@ -9,45 +9,45 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFunc_Dust")] -public class Func_Dust : BaseEntity +public partial class Func_Dust : BaseEntity { public static readonly SendTable DT_Func_Dust = new([ - SendPropInt(FIELD.OF(nameof(Color)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SpawnRate)), 12, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SpeedMax)), 12, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(SizeMin)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SizeMax)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(DistMax)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(LifetimeMin)), 4, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(LifetimeMax)), 4, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(DustFlags)), 3, PropFlags.Unsigned), - SendPropModelIndex(FIELD.OF(nameof(ModelIndex))), - SendPropFloat(FIELD.OF(nameof(FallSpeed)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(AffectedByWind))), + SendPropInt(NetworkVarFields.Color, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.SpawnRate, 12, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.SpeedMax, 12, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.SizeMin, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SizeMax, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.DistMax, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.LifetimeMin, 4, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.LifetimeMax, 4, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.DustFlags, 3, PropFlags.Unsigned), + SendPropModelIndex(BaseEntity.NetworkVarFields.ModelIndex), + SendPropFloat(NetworkVarFields.FallSpeed, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.AffectedByWind), SendPropDataTable("m_Collision", CollisionProperty.DT_CollisionProperty) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Func_Dust); [NetworkName("m_Color")] - public Color Color; + [NetworkVar] public partial Color Color { get; set; } [NetworkName("m_SpawnRate")] - public int SpawnRate; + [NetworkVar] public partial int SpawnRate { get; set; } [NetworkName("m_SpeedMax")] - public int SpeedMax; + [NetworkVar] public partial int SpeedMax { get; set; } [NetworkName("m_flSizeMin")] - public float SizeMin; + [NetworkVar] public partial float SizeMin { get; set; } [NetworkName("m_flSizeMax")] - public float SizeMax; + [NetworkVar] public partial float SizeMax { get; set; } [NetworkName("m_DistMax")] - public int DistMax; + [NetworkVar] public partial int DistMax { get; set; } [NetworkName("m_LifetimeMin")] - public int LifetimeMin; + [NetworkVar] public partial int LifetimeMin { get; set; } [NetworkName("m_LifetimeMax")] - public int LifetimeMax; + [NetworkVar] public partial int LifetimeMax { get; set; } [NetworkName("m_DustFlags")] - public int DustFlags; + [NetworkVar] public partial int DustFlags { get; set; } [NetworkName("m_FallSpeed")] - public float FallSpeed; + [NetworkVar] public partial float FallSpeed { get; set; } [NetworkName("m_bAffectedByWind")] - public bool AffectedByWind; + [NetworkVar] public partial bool AffectedByWind { get; set; } } diff --git a/Game.Server/Func_LOD.cs b/Game.Server/Func_LOD.cs index 98f8470ae..a0022c1b0 100644 --- a/Game.Server/Func_LOD.cs +++ b/Game.Server/Func_LOD.cs @@ -8,16 +8,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CFunc_LOD")] -public class Func_LOD : BaseEntity +public partial class Func_LOD : BaseEntity { public static readonly SendTable DT_Func_LOD = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(DisappearMinDist)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(DisappearMaxDist)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.DisappearMinDist, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.DisappearMaxDist, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Func_LOD); [NetworkName("m_fDisappearMinDist")] - public float DisappearMinDist; + [NetworkVar] public partial float DisappearMinDist { get; set; } [NetworkName("m_fDisappearMaxDist")] - public float DisappearMaxDist; + [NetworkVar] public partial float DisappearMaxDist { get; set; } } diff --git a/Game.Server/GarrysMod/GMOD_Player.cs b/Game.Server/GarrysMod/GMOD_Player.cs index 9925146b5..ceec9c4e3 100644 --- a/Game.Server/GarrysMod/GMOD_Player.cs +++ b/Game.Server/GarrysMod/GMOD_Player.cs @@ -31,27 +31,27 @@ public partial class GMOD_Player : HL2MP_Player return (GMOD_Player?)CreateEntityByName(classname); } public static readonly SendTable DT_GMOD_Player = new(DT_HL2MP_Player, [ - SendPropInt(FIELD.OF(nameof(GModPlayerFlags)), 5, 0), + SendPropInt(NetworkVarFields.GModPlayerFlags, 5, 0), SendPropEHandle(FIELD.OF(nameof(HoveredWidget))), SendPropEHandle(FIELD.OF(nameof(PressedWidget))), SendPropEHandle(FIELD.OF(nameof(Driving))), - SendPropInt(FIELD.OF(nameof(DrivingMode)), 15, 0), - SendPropInt(FIELD.OF(nameof(PlayerClass)), 15, 0), + SendPropInt(NetworkVarFields.DrivingMode, 15, 0), + SendPropInt(NetworkVarFields.PlayerClass, 15, 0), SendPropBool(FIELD.OF(nameof(CanZoom))), SendPropBool(FIELD.OF(nameof(CanWalk))), - SendPropBool(FIELD.OF(nameof(IsTyping))), + SendPropBool(NetworkVarFields.IsTyping), SendPropFloat(FIELD.OF(nameof(StepSize)), 0, PropFlags.NoScale), SendPropFloat(FIELD.OF(nameof(JumpPower)), 0, PropFlags.NoScale), SendPropVector(FIELD.OF_NAMED(nameof(ViewOffset), "m_ViewOffset"), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(ViewOffsetDucked)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(GestureEndTime)), 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.ViewOffsetDucked, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GestureEndTime, 0, PropFlags.NoScale), SendPropVector(FIELD.OF(nameof(PlayerColor)), 0, PropFlags.NoScale), SendPropVector(FIELD.OF(nameof(WeaponColor)), 0, PropFlags.NoScale), SendPropEHandle(FIELD.OF(nameof(Hands))), - SendPropInt(FIELD.OF(nameof(WaterLevel)), 2, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(MaxArmor)), 32, 0), - SendPropFloat(FIELD.OF(nameof(Gravity)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(SprintEnabled))), + SendPropInt(BaseEntity.NetworkVarFields.WaterLevel, 2, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.MaxArmor, 32, 0), + SendPropFloat(NetworkVarFields.Gravity, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.SprintEnabled), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_GMOD_Player); @@ -60,7 +60,7 @@ public override void InitialSpawn() { } [NetworkName("m_iGModPlayerFlags")] - public int GModPlayerFlags; + [NetworkVar] public partial int GModPlayerFlags { get; set; } [NetworkName("m_HoveredWidget")] public EHANDLE HoveredWidget = new(); [NetworkName("m_PressedWidget")] @@ -68,23 +68,23 @@ public override void InitialSpawn() { [NetworkName("m_Driving")] public EHANDLE Driving = new(); [NetworkName("m_DrivingMode")] - public int DrivingMode; + [NetworkVar] public partial int DrivingMode { get; set; } [NetworkName("m_PlayerClass")] - public int PlayerClass; + [NetworkVar] public partial int PlayerClass { get; set; } [NetworkName("m_bCanZoom")] public bool CanZoom = true; [NetworkName("m_bCanWalk")] public bool CanWalk = true; [NetworkName("m_bIsTyping")] - public bool IsTyping; + [NetworkVar] public partial bool IsTyping { get; set; } [NetworkName("m_StepSize")] public float StepSize = 18; [NetworkName("m_JumpPower")] public float JumpPower = 200; [NetworkName("m_ViewOffsetDucked")] - public Vector3 ViewOffsetDucked; + [NetworkVar] public partial Vector3 ViewOffsetDucked { get; set; } [NetworkName("m_fGestureEndTime")] - public float GestureEndTime; + [NetworkVar] public partial float GestureEndTime { get; set; } [NetworkName("m_PlayerColor")] public Vector3 PlayerColor = new(255, 255, 255); [NetworkName("m_WeaponColor")] @@ -92,11 +92,11 @@ public override void InitialSpawn() { [NetworkName("m_Hands")] public EHANDLE Hands = new(); [NetworkName("m_iMaxArmor")] - public int MaxArmor; + [NetworkVar] public partial int MaxArmor { get; set; } [NetworkName("m_flGravity")] - public float Gravity; + [NetworkVar] public partial float Gravity { get; set; } [NetworkName("m_bSprintEnabled")] - public bool SprintEnabled; + [NetworkVar] public partial bool SprintEnabled { get; set; } public override void PlayerRunCommand(UserCmd ucmd, IMoveHelper moveHelper) { base.PlayerRunCommand(ucmd, moveHelper); diff --git a/Game.Server/GarrysMod/LuaNextBot.cs b/Game.Server/GarrysMod/LuaNextBot.cs index 46c843803..ef8615d7f 100644 --- a/Game.Server/GarrysMod/LuaNextBot.cs +++ b/Game.Server/GarrysMod/LuaNextBot.cs @@ -11,7 +11,7 @@ public class LuaNextBot : NextBotCombatCharacter { public static readonly SendTable DT_LuaNextBot = new(DT_NextBot, [ SendPropDataTable("m_ScriptedEntity", DT_ScriptedEntity), - SendPropInt(FIELD.OF(nameof(LifeState)), 3, PropFlags.Unsigned) + SendPropInt(BaseEntity.NetworkVarFields.LifeState, 3, PropFlags.Unsigned) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_LuaNextBot); } diff --git a/Game.Server/HL2/AlyxEmpEffect.cs b/Game.Server/HL2/AlyxEmpEffect.cs index 98cdb9dbf..9b06de161 100644 --- a/Game.Server/HL2/AlyxEmpEffect.cs +++ b/Game.Server/HL2/AlyxEmpEffect.cs @@ -8,16 +8,16 @@ namespace Game.Server.HL2; public partial class AlyxEmpEffect : BaseEntity { public static readonly SendTable DT_AlyxEmpEffect = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(State)), 8, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(Duration)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.State, 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Duration, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_AlyxEmpEffect); [NetworkName("m_nState")] - public int State; + [NetworkVar] public partial int State { get; set; } [NetworkName("m_flDuration")] - public TimeUnit_t Duration; + [NetworkVar] public partial TimeUnit_t Duration { get; set; } [NetworkName("m_flStartTime")] - public TimeUnit_t StartTime; + [NetworkVar] public partial TimeUnit_t StartTime { get; set; } } diff --git a/Game.Server/HL2/BaseHelicopter.cs b/Game.Server/HL2/BaseHelicopter.cs index 0afe820d3..6967fcd6a 100644 --- a/Game.Server/HL2/BaseHelicopter.cs +++ b/Game.Server/HL2/BaseHelicopter.cs @@ -8,13 +8,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CBaseHelicopter")] -public class BaseHelicopter : AI_TrackPather +public partial class BaseHelicopter : AI_TrackPather { public static readonly SendTable DT_BaseHelicopter = new(DT_AI_BaseNPC, [ - SendPropFloat(FIELD.OF(nameof(StartupTime)), 0, PropFlags.NoScale) + SendPropFloat(NetworkVarFields.StartupTime, 0, PropFlags.NoScale) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BaseHelicopter); [NetworkName("m_flStartupTime")] - public TimeUnit_t StartupTime; + [NetworkVar] public partial TimeUnit_t StartupTime { get; set; } } diff --git a/Game.Server/HL2/HL2PlayerLocalData.cs b/Game.Server/HL2/HL2PlayerLocalData.cs index 1781b5ee6..f87596785 100644 --- a/Game.Server/HL2/HL2PlayerLocalData.cs +++ b/Game.Server/HL2/HL2PlayerLocalData.cs @@ -1,4 +1,5 @@ -namespace Game.Server.HL2; +using Game.Shared; +namespace Game.Server.HL2; using Game.Shared.HL2; @@ -8,40 +9,40 @@ using FIELD = Source.FIELD; -public class HL2PlayerLocalData { +public partial class HL2PlayerLocalData { public static readonly SendTable DT_HL2Local = new(nameof(DT_HL2Local), [ - SendPropFloat(FIELD.OF(nameof(SuitPower)), 10, PropFlags.Unsigned | PropFlags.RoundUp, 0.0f, 100.0f), - SendPropInt(FIELD.OF(nameof(Zooming)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(BitsActiveDevices)), MAX_SUIT_DEVICES, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SquadMemberCount)), 5, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SquadMedicCount)), 5, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(SquadInFollowMode))), - SendPropBool(FIELD.OF(nameof(WeaponLowered))), - SendPropEHandle(FIELD.OF(nameof(Ladder))), - SendPropBool(FIELD.OF(nameof(DisplayReticle))), + SendPropFloat(HL2PlayerLocalData.NetworkVarFields.SuitPower, 10, PropFlags.Unsigned | PropFlags.RoundUp, 0.0f, 100.0f), + SendPropInt(HL2PlayerLocalData.NetworkVarFields.Zooming, 1, PropFlags.Unsigned), + SendPropInt(HL2PlayerLocalData.NetworkVarFields.BitsActiveDevices, MAX_SUIT_DEVICES, PropFlags.Unsigned), + SendPropInt(HL2PlayerLocalData.NetworkVarFields.SquadMemberCount, 5, PropFlags.Unsigned), + SendPropInt(HL2PlayerLocalData.NetworkVarFields.SquadMedicCount, 5, PropFlags.Unsigned), + SendPropBool(HL2PlayerLocalData.NetworkVarFields.SquadInFollowMode), + SendPropBool(HL2PlayerLocalData.NetworkVarFields.WeaponLowered), + SendPropEHandle(HL2PlayerLocalData.NetworkVarFields.Ladder), + SendPropBool(HL2PlayerLocalData.NetworkVarFields.DisplayReticle), ]); [NetworkName("m_flSuitPower")] - public float SuitPower; + [NetworkVar] public partial float SuitPower { get; set; } [NetworkName("m_bZooming")] - public bool Zooming; + [NetworkVar] public partial bool Zooming { get; set; } [NetworkName("m_bitsActiveDevices")] - public int BitsActiveDevices; + [NetworkVar] public partial int BitsActiveDevices { get; set; } [NetworkName("m_iSquadMemberCount")] - public int SquadMemberCount; + [NetworkVar] public partial int SquadMemberCount { get; set; } [NetworkName("m_iSquadMedicCount")] - public int SquadMedicCount; + [NetworkVar] public partial int SquadMedicCount { get; set; } [NetworkName("m_fSquadInFollowMode")] - public bool SquadInFollowMode; + [NetworkVar] public partial bool SquadInFollowMode { get; set; } [NetworkName("m_bWeaponLowered")] - public bool WeaponLowered; + [NetworkVar] public partial bool WeaponLowered { get; set; } public EHANDLE AutoAimTargetHandle = new(); public Vector3 AutoAimPoint; [NetworkName("m_bDisplayReticle")] - public bool DisplayReticle; + [NetworkVar] public partial bool DisplayReticle { get; set; } public bool StickyAutoAim; public bool AutoAimTarget; [NetworkName("m_hLadder")] - public EHANDLE Ladder = new(); + [NetworkVar] public partial NetworkHandle Ladder { get; } public LadderMove LadderMove = new(); } diff --git a/Game.Server/HL2/HL2_Player.cs b/Game.Server/HL2/HL2_Player.cs index 21fc2fa08..ab8b4fed3 100644 --- a/Game.Server/HL2/HL2_Player.cs +++ b/Game.Server/HL2/HL2_Player.cs @@ -14,16 +14,16 @@ namespace Game.Server.HL2; [PrecacheRegister("player")] [NetworkName("CHL2_Player")] -public class HL2_Player : BaseMultiplayerPlayer +public partial class HL2_Player : BaseMultiplayerPlayer { public static readonly SendTable DT_HL2_Player = new(DT_BasePlayer, [ SendPropDataTable("m_HL2Local", FIELD.OF(nameof(HL2Local)), HL2PlayerLocalData.DT_HL2Local, SendProxy_SendLocalDataTable), - SendPropBool(FIELD.OF(nameof(m_bIsSprinting))) + SendPropBool(NetworkVarFields.m_bIsSprinting) ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_HL2_Player); [NetworkName("m_HL2Local")] - public readonly HL2PlayerLocalData HL2Local = new(); + [NetworkVarEmbedded] public partial HL2PlayerLocalData HL2Local { get; } #if HL2MP const int HL2_WALK_SPEED = 150; @@ -37,10 +37,10 @@ public class HL2_Player : BaseMultiplayerPlayer TimeUnit_t LastDamageTime; TimeUnit_t TargetFindTime; - bool SprintEnabled; + [NetworkVar] public partial bool SprintEnabled { get; set; } [NetworkName("m_fIsSprinting")] - public bool m_bIsSprinting; + [NetworkVar] public partial bool m_bIsSprinting { get; set; } public bool m_bIsWalking; public bool m_bPlayUseDenySound; diff --git a/Game.Server/HL2/InfoTeleporterCountdown.cs b/Game.Server/HL2/InfoTeleporterCountdown.cs index ddcfea4f5..3f65faee0 100644 --- a/Game.Server/HL2/InfoTeleporterCountdown.cs +++ b/Game.Server/HL2/InfoTeleporterCountdown.cs @@ -9,19 +9,19 @@ namespace Game.Server.HL2; public partial class InfoTeleporterCountdown : BaseEntity { public static readonly SendTable DT_InfoTeleporterCountdown = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(CountdownStarted))), - SendPropBool(FIELD.OF(nameof(Disabled))), - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(TimeRemaining)), 0, PropFlags.NoScale) + SendPropBool(NetworkVarFields.CountdownStarted), + SendPropBool(NetworkVarFields.Disabled), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.TimeRemaining, 0, PropFlags.NoScale) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_InfoTeleporterCountdown); [NetworkName("m_bCountdownStarted")] - public bool CountdownStarted; + [NetworkVar] public partial bool CountdownStarted { get; set; } [NetworkName("m_bDisabled")] - public bool Disabled; + [NetworkVar] public partial bool Disabled { get; set; } [NetworkName("m_flStartTime")] - public TimeUnit_t StartTime; + [NetworkVar] public partial TimeUnit_t StartTime { get; set; } [NetworkName("m_flTimeRemaining")] - public TimeUnit_t TimeRemaining; + [NetworkVar] public partial TimeUnit_t TimeRemaining { get; set; } } diff --git a/Game.Server/HL2/PropAirboat.cs b/Game.Server/HL2/PropAirboat.cs index e7af8e64b..4fb4603eb 100644 --- a/Game.Server/HL2/PropAirboat.cs +++ b/Game.Server/HL2/PropAirboat.cs @@ -8,23 +8,23 @@ namespace Game.Server.HL2; using FIELD = Source.FIELD; [NetworkName("CPropAirboat")] -public class PropAirboat : PropVehicleDriveable +public partial class PropAirboat : PropVehicleDriveable { public static readonly SendTable DT_PropAirboat = new(DT_PropVehicleDriveable, [ - SendPropBool(FIELD.OF(nameof(HeadlightIsOn))), - SendPropInt(FIELD.OF(nameof(AmmoCount)), 9), - SendPropInt(FIELD.OF(nameof(ExactWaterLevel)), 24), - SendPropInt(FIELD.OF(nameof(WaterLevel)), 2, PropFlags.Unsigned), - SendPropVector(FIELD.OF(nameof(PhysVelocity)), 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.HeadlightIsOn), + SendPropInt(NetworkVarFields.AmmoCount, 9), + SendPropInt(NetworkVarFields.ExactWaterLevel, 24), + SendPropInt(BaseEntity.NetworkVarFields.WaterLevel, 2, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.PhysVelocity, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropAirboat); [NetworkName("m_bHeadlightIsOn")] - public bool HeadlightIsOn; + [NetworkVar] public partial bool HeadlightIsOn { get; set; } [NetworkName("m_nAmmoCount")] - public int AmmoCount; + [NetworkVar] public partial int AmmoCount { get; set; } [NetworkName("m_nExactWaterLevel")] - public int ExactWaterLevel; + [NetworkVar] public partial int ExactWaterLevel { get; set; } [NetworkName("m_vecPhysVelocity")] - public Vector3 PhysVelocity; + [NetworkVar] public partial Vector3 PhysVelocity { get; set; } } diff --git a/Game.Server/HL2/PropCombineBall.cs b/Game.Server/HL2/PropCombineBall.cs index 6ad23b4d4..63498aba7 100644 --- a/Game.Server/HL2/PropCombineBall.cs +++ b/Game.Server/HL2/PropCombineBall.cs @@ -10,22 +10,22 @@ namespace Game.Server.HL2; [NetworkName("CPropCombineBall")] -public class PropCombineBall : BaseAnimating +public partial class PropCombineBall : BaseAnimating { public static readonly SendTable DT_PropCombineBall = new(DT_BaseAnimating, [ - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropFloat(FIELD.OF(nameof(Radius)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Held))), - SendPropBool(FIELD.OF(nameof(Launched))), + SendPropBool(NetworkVarFields.Emit), + SendPropFloat(NetworkVarFields.Radius, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Held), + SendPropBool(NetworkVarFields.Launched), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropCombineBall); [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_flRadius")] - public float Radius; + [NetworkVar] public partial float Radius { get; set; } [NetworkName("m_bHeld")] - public bool Held; + [NetworkVar] public partial bool Held { get; set; } [NetworkName("m_bLaunched")] - public bool Launched; + [NetworkVar] public partial bool Launched { get; set; } } diff --git a/Game.Server/HL2/PropVehiclePrisonerPod.cs b/Game.Server/HL2/PropVehiclePrisonerPod.cs index ca952fe5d..eca8693b2 100644 --- a/Game.Server/HL2/PropVehiclePrisonerPod.cs +++ b/Game.Server/HL2/PropVehiclePrisonerPod.cs @@ -8,28 +8,28 @@ namespace Game.Server.HL2; using FIELD = Source.FIELD; [NetworkName("CPropVehiclePrisonerPod")] -public class PropVehiclePrisonerPod : PhysicsProp +public partial class PropVehiclePrisonerPod : PhysicsProp { public static readonly SendTable DT_PropVehiclePrisonerPod = new(DT_PhysicsProp, [ - SendPropEHandle(FIELD.OF(nameof(Player))), - SendPropBool(FIELD.OF(nameof(EnterAnimOn))), - SendPropBool(FIELD.OF(nameof(ExitAnimOn))), - SendPropVector(FIELD.OF(nameof(EyeExitEndpoint)), 0, PropFlags.Coord), + SendPropEHandle(PropVehiclePrisonerPod.NetworkVarFields.Player), + SendPropBool(PropVehiclePrisonerPod.NetworkVarFields.EnterAnimOn), + SendPropBool(PropVehiclePrisonerPod.NetworkVarFields.ExitAnimOn), + SendPropVector(PropVehiclePrisonerPod.NetworkVarFields.EyeExitEndpoint, 0, PropFlags.Coord), SendPropBool(FIELD.OF(nameof(LimitView))), - SendPropBool(FIELD.OF(nameof(Locked))), + SendPropBool(NetworkVarFields.Locked), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropVehiclePrisonerPod); [NetworkName("m_hPlayer")] - public EHANDLE Player = new(); + [NetworkVar] public partial NetworkHandle Player { get; } [NetworkName("m_bEnterAnimOn")] - public bool EnterAnimOn = new(); + [NetworkVar] public partial bool EnterAnimOn { get; set; } [NetworkName("m_bExitAnimOn")] - public bool ExitAnimOn = new(); + [NetworkVar] public partial bool ExitAnimOn { get; set; } [NetworkName("m_vecEyeExitEndpoint")] - public Vector3 EyeExitEndpoint = new(); + [NetworkVar] public partial Vector3 EyeExitEndpoint { get; set; } [NetworkName("m_bLimitView")] public bool LimitView = new(); [NetworkName("m_bLocked")] - public bool Locked; + [NetworkVar] public partial bool Locked { get; set; } } diff --git a/Game.Server/HL2MP/HL2MP_Player.cs b/Game.Server/HL2MP/HL2MP_Player.cs index a55457e25..72fe44f65 100644 --- a/Game.Server/HL2MP/HL2MP_Player.cs +++ b/Game.Server/HL2MP/HL2MP_Player.cs @@ -19,14 +19,14 @@ namespace Game.Server.HL2MP; public partial class HL2MP_Player : HL2_Player { public static readonly SendTable DT_HL2MPLocalPlayerExclusive = new(nameof(DT_HL2MPLocalPlayerExclusive), [ - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.NoScale|PropFlags.ChangesOften, 0.0f, Constants.HIGH_DEFAULT), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.NoScale|PropFlags.ChangesOften, 0.0f, Constants.HIGH_DEFAULT), SendPropFloat(FIELD.OF_VECTORELEM(nameof(AngEyeAngles), 0), 11, PropFlags.ChangesOften | PropFlags.RoundDown, 0, 360f ), SendPropAngle(FIELD.OF_VECTORELEM(nameof(AngEyeAngles), 1), 11, PropFlags.ChangesOften | PropFlags.RoundDown, 0, 360f ), ]); public static readonly SendTable DT_HL2MPNonLocalPlayerExclusive = new(nameof(DT_HL2MPNonLocalPlayerExclusive), [ - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.CoordMPLowPrecision|PropFlags.ChangesOften, 0.0f, Constants.HIGH_DEFAULT), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.CoordMPLowPrecision|PropFlags.ChangesOften, 0.0f, Constants.HIGH_DEFAULT), SendPropFloat(FIELD.OF_VECTORELEM(nameof(AngEyeAngles), 0), 11, PropFlags.ChangesOften | PropFlags.RoundDown, 0, 360f), SendPropAngle(FIELD.OF_VECTORELEM(nameof(AngEyeAngles), 1), 11, PropFlags.ChangesOften | PropFlags.RoundDown, 0, 360f), @@ -50,9 +50,9 @@ public partial class HL2MP_Player : HL2_Player SendPropDataTable("hl2mplocaldata", DT_HL2MPLocalPlayerExclusive, SendProxy_SendLocalDataTable ), SendPropDataTable("hl2mpnonlocaldata", DT_HL2MPNonLocalPlayerExclusive, SendProxy_SendNonLocalDataTable ), - SendPropEHandle(FIELD.OF(nameof(Ragdoll))), - SendPropInt(FIELD.OF(nameof(SpawnInterpCounter)), 4), - SendPropBool(FIELD.OF(nameof(IsWalking))), + SendPropEHandle(HL2MP_Player.NetworkVarFields.Ragdoll), + SendPropInt(NetworkVarFields.SpawnInterpCounter, 4), + SendPropBool(NetworkVarFields.IsWalking), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_HL2MP_Player); @@ -93,14 +93,14 @@ public partial class HL2MP_Player : HL2_Player public int ModelType; [NetworkName("m_angEyeAngles")] - public QAngle AngEyeAngles; + [NetworkVar] public partial QAngle AngEyeAngles { get; set; } [NetworkName("m_hRagdoll")] - public EHANDLE Ragdoll = new(); + [NetworkVar] public partial NetworkHandle Ragdoll { get; } [NetworkName("m_iSpawnInterpCounter")] - public int SpawnInterpCounter; + [NetworkVar] public partial int SpawnInterpCounter { get; set; } public int PlayerSoundType; [NetworkName("m_fIsWalking")] - public bool IsWalking; + [NetworkVar] public partial bool IsWalking { get; set; } public readonly HL2MPPlayerAnimState PlayerAnimState; @@ -110,7 +110,7 @@ public partial class HL2MP_Player : HL2_Player public HL2MP_Player() { PlayerAnimState = HL2MPPlayerAnimState.CreateHL2MPPlayerAnimState(this); - AngEyeAngles.Init(); + AngEyeAnglesForModify().Init(); base.ChangeTeam(0); } @@ -706,22 +706,22 @@ void State_PreThink_ACTIVE() { } } [NetworkName("CHL2MPRagdoll")] -public class HL2MPRagdoll : BaseAnimatingOverlay +public partial class HL2MPRagdoll : BaseAnimatingOverlay { public static readonly SendTable DT_HL2MPRagdoll = new([ - SendPropVector(FIELD_RD.OF(nameof(RagdollOrigin)), 0, PropFlags.Coord), - SendPropEHandle(FIELD_RD.OF(nameof(Player))), - SendPropInt(FIELD_RD.OF(nameof(ModelIndex)), 14), - SendPropInt(FIELD_RD.OF(nameof(ForceBone)), 8), - SendPropVector(FIELD_RD.OF(nameof(Force)), 0, PropFlags.NoScale), - SendPropVector(FIELD_RD.OF(nameof(RagdollVelocity)), 0, PropFlags.NoScale) + SendPropVector(NetworkVarFields.RagdollOrigin, 0, PropFlags.Coord), + SendPropEHandle(HL2MPRagdoll.NetworkVarFields.Player), + SendPropInt(BaseEntity.NetworkVarFields.ModelIndex, 14), + SendPropInt(BaseAnimating.NetworkVarFields.ForceBone, 8), + SendPropVector(BaseAnimating.NetworkVarFields.Force, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.RagdollVelocity, 0, PropFlags.NoScale) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_HL2MPRagdoll); [NetworkName("m_vecRagdollOrigin")] - public Vector3 RagdollOrigin; + [NetworkVar] public partial Vector3 RagdollOrigin { get; set; } [NetworkName("m_hPlayer")] - public EHANDLE Player = new(); + [NetworkVar] public partial NetworkHandle Player { get; } [NetworkName("m_vecRagdollVelocity")] - public Vector3 RagdollVelocity; + [NetworkVar] public partial Vector3 RagdollVelocity { get; set; } } diff --git a/Game.Server/InfoOverlayAccessor.cs b/Game.Server/InfoOverlayAccessor.cs index 05c0c96ab..72f6f88e7 100644 --- a/Game.Server/InfoOverlayAccessor.cs +++ b/Game.Server/InfoOverlayAccessor.cs @@ -9,11 +9,11 @@ namespace Game.Server; public partial class InfoOverlayAccessor : BaseEntity { public static readonly SendTable DT_InfoOverlayAccessor = new([ - SendPropInt(FIELD.OF(nameof(TextureFrameIndex)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OverlayID)), 32, PropFlags.Unsigned) + SendPropInt(BaseEntity.NetworkVarFields.TextureFrameIndex, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.OverlayID, 32, PropFlags.Unsigned) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_InfoOverlayAccessor); [NetworkName("m_iOverlayID")] - public int OverlayID; + [NetworkVar] public partial int OverlayID { get; set; } } diff --git a/Game.Server/LightGlow.cs b/Game.Server/LightGlow.cs index 4cd326389..0c103cce2 100644 --- a/Game.Server/LightGlow.cs +++ b/Game.Server/LightGlow.cs @@ -11,37 +11,37 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CLightGlow")] -public class LightGlow : BaseEntity +public partial class LightGlow : BaseEntity { public static readonly SendTable DT_LightGlow = new([ - SendPropInt(FIELD.OF(nameof(RenderColor)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(HorizontalSize)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(VerticalSize)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(MinDist)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(MaxDist)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OuterMaxDist)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(SpawnFlags)), 8, PropFlags.Unsigned), - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.Coord), - SendPropQAngles(FIELD.OF(nameof(Rotation)), 13, PropFlags.RoundDown), + SendPropInt(NetworkVarFields.RenderColor, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.HorizontalSize, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.VerticalSize, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.MinDist, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.MaxDist, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.OuterMaxDist, 16, PropFlags.Unsigned), + SendPropInt(BaseEntity.NetworkVarFields.SpawnFlags, 8, PropFlags.Unsigned), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.Coord), + SendPropQAngles(BaseEntity.NetworkVarFields.Rotation, 13, PropFlags.RoundDown), SendPropEHandle(FIELD.OF(nameof(MoveParent))), - SendPropFloat(FIELD.OF(nameof(GlowProxySize)), 6, PropFlags.RoundUp, 0.0f, 64.0f), - SendPropFloat(FIELD.OF(nameof(HDRColorScale)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GlowProxySize, 6, PropFlags.RoundUp, 0.0f, 64.0f), + SendPropFloat(NetworkVarFields.HDRColorScale, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_LightGlow); [NetworkName("m_clrRender")] - public Color RenderColor; + [NetworkVar] public partial Color RenderColor { get; set; } [NetworkName("m_nHorizontalSize")] - public int HorizontalSize; + [NetworkVar] public partial int HorizontalSize { get; set; } [NetworkName("m_nVerticalSize")] - public int VerticalSize; + [NetworkVar] public partial int VerticalSize { get; set; } [NetworkName("m_nMinDist")] - public int MinDist; + [NetworkVar] public partial int MinDist { get; set; } [NetworkName("m_nMaxDist")] - public int MaxDist; + [NetworkVar] public partial int MaxDist { get; set; } [NetworkName("m_nOuterMaxDist")] - public int OuterMaxDist; + [NetworkVar] public partial int OuterMaxDist { get; set; } [NetworkName("m_flGlowProxySize")] - public float GlowProxySize; - public float HDRColorScale; + [NetworkVar] public partial float GlowProxySize { get; set; } + [NetworkVar] public partial float HDRColorScale { get; set; } } diff --git a/Game.Server/MaterialModifyControl.cs b/Game.Server/MaterialModifyControl.cs index f658356e7..e629c152d 100644 --- a/Game.Server/MaterialModifyControl.cs +++ b/Game.Server/MaterialModifyControl.cs @@ -5,21 +5,21 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CMaterialModifyControl")] -public class MaterialModifyControl : BaseEntity +public partial class MaterialModifyControl : BaseEntity { public static readonly SendTable DT_MaterialModifyControl = new(DT_BaseEntity, [ SendPropString(FIELD.OF(nameof(SzMaterialName))), SendPropString(FIELD.OF(nameof(SzMaterialVar))), SendPropString(FIELD.OF(nameof(SzMaterialVarValue))), - SendPropInt(FIELD.OF(nameof(FrameStart)), 8, 0), - SendPropInt(FIELD.OF(nameof(FrameEnd)), 8, 0), - SendPropBool(FIELD.OF(nameof(Wrap))), - SendPropFloat(FIELD.OF(nameof(Framerate)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(NewAnimCommandsSemaphore))), - SendPropFloat(FIELD.OF(nameof(FloatLerpStartValue)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FloatLerpEndValue)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FloatLerpTransitionTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(ModifyMode)), 2, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.FrameStart, 8, 0), + SendPropInt(NetworkVarFields.FrameEnd, 8, 0), + SendPropBool(NetworkVarFields.Wrap), + SendPropFloat(NetworkVarFields.Framerate, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.NewAnimCommandsSemaphore), + SendPropFloat(NetworkVarFields.FloatLerpStartValue, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FloatLerpEndValue, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FloatLerpTransitionTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.ModifyMode, 2, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_MaterialModifyControl); @@ -30,21 +30,21 @@ public class MaterialModifyControl : BaseEntity [NetworkName("m_szMaterialVarValue")] public InlineArray255 SzMaterialVarValue; [NetworkName("m_iFrameStart")] - public int FrameStart; + [NetworkVar] public partial int FrameStart { get; set; } [NetworkName("m_iFrameEnd")] - public int FrameEnd; + [NetworkVar] public partial int FrameEnd { get; set; } [NetworkName("m_bWrap")] - public bool Wrap; + [NetworkVar] public partial bool Wrap { get; set; } [NetworkName("m_flFramerate")] - public float Framerate; + [NetworkVar] public partial float Framerate { get; set; } [NetworkName("m_bNewAnimCommandsSemaphore")] - public bool NewAnimCommandsSemaphore; + [NetworkVar] public partial bool NewAnimCommandsSemaphore { get; set; } [NetworkName("m_flFloatLerpStartValue")] - public float FloatLerpStartValue; + [NetworkVar] public partial float FloatLerpStartValue { get; set; } [NetworkName("m_flFloatLerpEndValue")] - public float FloatLerpEndValue; + [NetworkVar] public partial float FloatLerpEndValue { get; set; } [NetworkName("m_flFloatLerpTransitionTime")] - public float FloatLerpTransitionTime; + [NetworkVar] public partial float FloatLerpTransitionTime { get; set; } [NetworkName("m_nModifyMode")] - public int ModifyMode; + [NetworkVar] public partial int ModifyMode { get; set; } } diff --git a/Game.Server/MortarShell.cs b/Game.Server/MortarShell.cs index cf02e0b61..710636025 100644 --- a/Game.Server/MortarShell.cs +++ b/Game.Server/MortarShell.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CMortarShell")] -public class MortarShell : BaseEntity +public partial class MortarShell : BaseEntity { public static readonly SendTable DT_MortarShell = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Lifespan)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Radius)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(SurfaceNormal)), 0, PropFlags.VarInt | PropFlags.VarInt), + SendPropFloat(NetworkVarFields.Lifespan, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Radius, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.SurfaceNormal, 0, PropFlags.VarInt | PropFlags.VarInt), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_MortarShell); [NetworkName("m_flLifespan")] - public float Lifespan; + [NetworkVar] public partial float Lifespan { get; set; } [NetworkName("m_flRadius")] - public float Radius; + [NetworkVar] public partial float Radius { get; set; } [NetworkName("m_vecSurfaceNormal")] - public Vector3 SurfaceNormal; + [NetworkVar] public partial Vector3 SurfaceNormal { get; set; } } diff --git a/Game.Server/NPC_AntlionGuard.cs b/Game.Server/NPC_AntlionGuard.cs index f79c691a7..68b9de960 100644 --- a/Game.Server/NPC_AntlionGuard.cs +++ b/Game.Server/NPC_AntlionGuard.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_AntlionGuard")] -public class NPC_AntlionGuard : AI_BaseNPC +public partial class NPC_AntlionGuard : AI_BaseNPC { public static readonly SendTable DT_NPC_AntlionGuard = new(DT_AI_BaseNPC, [ - SendPropBool(FIELD.OF(nameof(CavernBreed))), - SendPropBool(FIELD.OF(nameof(InCavern))), - SendPropInt(FIELD.OF(nameof(BleedingLevel)), 2, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.CavernBreed), + SendPropBool(NetworkVarFields.InCavern), + SendPropInt(NetworkVarFields.BleedingLevel, 2, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_AntlionGuard); [NetworkName("m_bCavernBreed")] - public bool CavernBreed; + [NetworkVar] public partial bool CavernBreed { get; set; } [NetworkName("m_bInCavern")] - public bool InCavern; + [NetworkVar] public partial bool InCavern { get; set; } [NetworkName("m_iBleedingLevel")] - public int BleedingLevel; + [NetworkVar] public partial int BleedingLevel { get; set; } } diff --git a/Game.Server/NPC_Barnacle.cs b/Game.Server/NPC_Barnacle.cs index 7fcadfe4a..38bb83c9d 100644 --- a/Game.Server/NPC_Barnacle.cs +++ b/Game.Server/NPC_Barnacle.cs @@ -5,22 +5,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Barnacle")] -public class NPC_Barnacle : AI_BaseNPC +public partial class NPC_Barnacle : AI_BaseNPC { public static readonly SendTable DT_Barnacle = new(DT_AI_BaseNPC, [ - SendPropFloat(FIELD.OF(nameof(Altitude)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(Root)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(Tip)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(TipDrawOffset)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Altitude, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.Root, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.Tip, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.TipDrawOffset, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Barnacle); [NetworkName("m_flAltitude")] - public float Altitude; + [NetworkVar] public partial float Altitude { get; set; } [NetworkName("m_vecRoot")] - public Vector3 Root; + [NetworkVar] public partial Vector3 Root { get; set; } [NetworkName("m_vecTip")] - public Vector3 Tip; + [NetworkVar] public partial Vector3 Tip { get; set; } [NetworkName("m_vecTipDrawOffset")] - public Vector3 TipDrawOffset; + [NetworkVar] public partial Vector3 TipDrawOffset { get; set; } } diff --git a/Game.Server/NPC_CombineGunship.cs b/Game.Server/NPC_CombineGunship.cs index 4bae0d28f..e3f3494a0 100644 --- a/Game.Server/NPC_CombineGunship.cs +++ b/Game.Server/NPC_CombineGunship.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_CombineGunship")] -public class NPC_CombineGunship : BaseHelicopter +public partial class NPC_CombineGunship : BaseHelicopter { public static readonly SendTable DT_CombineGunship = new(DT_BaseHelicopter, [ - SendPropVector(FIELD.OF(nameof(HitPos)), 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.HitPos, 0, PropFlags.Coord), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_CombineGunship); [NetworkName("m_vecHitPos")] - public Vector3 HitPos; + [NetworkVar] public partial Vector3 HitPos { get; set; } } diff --git a/Game.Server/NPC_Manhack.cs b/Game.Server/NPC_Manhack.cs index 2fa81f404..f4d92a559 100644 --- a/Game.Server/NPC_Manhack.cs +++ b/Game.Server/NPC_Manhack.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Manhack")] -public class NPC_Manhack : AI_BaseNPC +public partial class NPC_Manhack : AI_BaseNPC { public static readonly SendTable DT_NPC_Manhack = new(DT_AI_BaseNPC, [ - SendPropInt(FIELD.OF(nameof(EnginePitch1)), 8, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(EnginePitch1Time)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(EnginePitch2)), 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.EnginePitch1, 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.EnginePitch1Time, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.EnginePitch2, 8, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_Manhack); [NetworkName("m_nEnginePitch1")] - public int EnginePitch1; + [NetworkVar] public partial int EnginePitch1 { get; set; } [NetworkName("m_flEnginePitch1Time")] - public float EnginePitch1Time; + [NetworkVar] public partial float EnginePitch1Time { get; set; } [NetworkName("m_nEnginePitch2")] - public int EnginePitch2; + [NetworkVar] public partial int EnginePitch2 { get; set; } } diff --git a/Game.Server/NPC_Portal_FloorTurret.cs b/Game.Server/NPC_Portal_FloorTurret.cs index a0fee5a7d..69d6deb8e 100644 --- a/Game.Server/NPC_Portal_FloorTurret.cs +++ b/Game.Server/NPC_Portal_FloorTurret.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Portal_FloorTurret")] -public class NPC_Portal_FloorTurret : AI_BaseNPC +public partial class NPC_Portal_FloorTurret : AI_BaseNPC { public static readonly SendTable DT_NPC_Portal_FloorTurret = new(DT_AI_BaseNPC, [ - SendPropBool(FIELD.OF(nameof(OutOfAmmo))), - SendPropBool(FIELD.OF(nameof(LaserOn))), - SendPropInt(FIELD.OF(nameof(LaserHaloSprite)), 16, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.OutOfAmmo), + SendPropBool(NetworkVarFields.LaserOn), + SendPropInt(NetworkVarFields.LaserHaloSprite, 16, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_Portal_FloorTurret); [NetworkName("m_bOutOfAmmo")] - public bool OutOfAmmo; + [NetworkVar] public partial bool OutOfAmmo { get; set; } [NetworkName("m_bLaserOn")] - public bool LaserOn; + [NetworkVar] public partial bool LaserOn { get; set; } [NetworkName("m_sLaserHaloSprite")] - public int LaserHaloSprite; + [NetworkVar] public partial int LaserHaloSprite { get; set; } } diff --git a/Game.Server/NPC_Puppet.cs b/Game.Server/NPC_Puppet.cs index e09bb41ab..c3d27f821 100644 --- a/Game.Server/NPC_Puppet.cs +++ b/Game.Server/NPC_Puppet.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Puppet")] -public class NPC_Puppet : AI_BaseNPC +public partial class NPC_Puppet : AI_BaseNPC { public static readonly SendTable DT_NPC_Puppet = new(DT_AI_BaseNPC, [ - SendPropEHandle(FIELD.OF(nameof(AnimationTarget))), - SendPropInt(FIELD.OF(nameof(TargetAttachment)), 12, 0), + SendPropEHandle(NPC_Puppet.NetworkVarFields.AnimationTarget), + SendPropInt(NetworkVarFields.TargetAttachment, 12, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_Puppet); [NetworkName("m_hAnimationTarget")] - public EHANDLE AnimationTarget = new(); + [NetworkVar] public partial NetworkHandle AnimationTarget { get; } [NetworkName("m_nTargetAttachment")] - public int TargetAttachment; + [NetworkVar] public partial int TargetAttachment { get; set; } } diff --git a/Game.Server/NPC_RocketTurret.cs b/Game.Server/NPC_RocketTurret.cs index 8966503b8..06b070a98 100644 --- a/Game.Server/NPC_RocketTurret.cs +++ b/Game.Server/NPC_RocketTurret.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_RocketTurret")] -public class NPC_RocketTurret : AI_BaseNPC +public partial class NPC_RocketTurret : AI_BaseNPC { public static readonly SendTable DT_NPC_RocketTurret = new(DT_AI_BaseNPC, [ - SendPropInt(FIELD.OF(nameof(LaserState)), 2, 0), - SendPropInt(FIELD.OF(nameof(SiteHalo)), 16, PropFlags.Unsigned), - SendPropVector(FIELD.OF(nameof(CurrentAngles)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.LaserState, 2, 0), + SendPropInt(NetworkVarFields.SiteHalo, 16, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.CurrentAngles, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_RocketTurret); [NetworkName("m_iLaserState")] - public int LaserState; + [NetworkVar] public partial int LaserState { get; set; } [NetworkName("m_nSiteHalo")] - public int SiteHalo; + [NetworkVar] public partial int SiteHalo { get; set; } [NetworkName("m_vecCurrentAngles")] - public Vector3 CurrentAngles; + [NetworkVar] public partial Vector3 CurrentAngles { get; set; } } diff --git a/Game.Server/NPC_RollerMine.cs b/Game.Server/NPC_RollerMine.cs index 795ec50ee..5530158a3 100644 --- a/Game.Server/NPC_RollerMine.cs +++ b/Game.Server/NPC_RollerMine.cs @@ -5,22 +5,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_RollerMine")] -public class NPC_RollerMine : AI_BaseNPC +public partial class NPC_RollerMine : AI_BaseNPC { public static readonly SendTable DT_RollerMine = new(DT_AI_BaseNPC, [ - SendPropBool(FIELD.OF(nameof(IsOpen))), - SendPropFloat(FIELD.OF(nameof(ActiveTime)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(HackedByAlyx))), - SendPropBool(FIELD.OF(nameof(PowerDown))), + SendPropBool(NetworkVarFields.IsOpen), + SendPropFloat(NetworkVarFields.ActiveTime, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.HackedByAlyx), + SendPropBool(NetworkVarFields.PowerDown), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_RollerMine); [NetworkName("m_bIsOpen")] - public bool IsOpen; + [NetworkVar] public partial bool IsOpen { get; set; } [NetworkName("m_flActiveTime")] - public float ActiveTime; + [NetworkVar] public partial float ActiveTime { get; set; } [NetworkName("m_bHackedByAlyx")] - public bool HackedByAlyx; + [NetworkVar] public partial bool HackedByAlyx { get; set; } [NetworkName("m_bPowerDown")] - public bool PowerDown; + [NetworkVar] public partial bool PowerDown { get; set; } } diff --git a/Game.Server/NPC_Strider.cs b/Game.Server/NPC_Strider.cs index 3668cf33b..a3aec6e4a 100644 --- a/Game.Server/NPC_Strider.cs +++ b/Game.Server/NPC_Strider.cs @@ -5,10 +5,10 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Strider")] -public class NPC_Strider : AI_BaseNPC +public partial class NPC_Strider : AI_BaseNPC { public static readonly SendTable DT_NPC_Strider = new(DT_AI_BaseNPC, [ - SendPropVector(FIELD.OF(nameof(HitPos)), 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.HitPos, 0, PropFlags.Coord), SendPropVector(FIELD.OF_ARRAYINDEX(nameof(IKTarget), 0), 0, PropFlags.Coord), SendPropVector(FIELD.OF_ARRAYINDEX(nameof(IKTarget), 1), 0, PropFlags.Coord), SendPropVector(FIELD.OF_ARRAYINDEX(nameof(IKTarget), 2), 0, PropFlags.Coord), @@ -19,7 +19,7 @@ public class NPC_Strider : AI_BaseNPC public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_Strider); [NetworkName("m_vecHitPos")] - public Vector3 HitPos; + [NetworkVar] public partial Vector3 HitPos { get; set; } [NetworkName("m_vecIKTarget")] public InlineArray6 IKTarget; } diff --git a/Game.Server/NPC_Vortigaunt.cs b/Game.Server/NPC_Vortigaunt.cs index 43d13732a..5dff66554 100644 --- a/Game.Server/NPC_Vortigaunt.cs +++ b/Game.Server/NPC_Vortigaunt.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CNPC_Vortigaunt")] -public class NPC_Vortigaunt : AI_BaseNPC +public partial class NPC_Vortigaunt : AI_BaseNPC { public static readonly SendTable DT_NPC_Vortigaunt = new(DT_AI_BaseNPC, [ - SendPropFloat(FIELD.OF(nameof(BlueEndFadeTime)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(IsBlue))), - SendPropBool(FIELD.OF(nameof(IsBlack))), + SendPropFloat(NetworkVarFields.BlueEndFadeTime, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.IsBlue), + SendPropBool(NetworkVarFields.IsBlack), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_NPC_Vortigaunt); [NetworkName("m_flBlueEndFadeTime")] - public float BlueEndFadeTime; + [NetworkVar] public partial float BlueEndFadeTime { get; set; } [NetworkName("m_bIsBlue")] - public bool IsBlue; + [NetworkVar] public partial bool IsBlue { get; set; } [NetworkName("m_bIsBlack")] - public bool IsBlack; + [NetworkVar] public partial bool IsBlack { get; set; } } diff --git a/Game.Server/NavMesh/NavEntities.cs b/Game.Server/NavMesh/NavEntities.cs index 70ce3879e..61fc7b65a 100644 --- a/Game.Server/NavMesh/NavEntities.cs +++ b/Game.Server/NavMesh/NavEntities.cs @@ -29,13 +29,13 @@ public static bool CalculateBlocked(bool[] resultByTeam, Vector3 mins, Vector3 m } } -public class FuncNavObstruction : BaseEntity, INavAvoidanceObstacle +public partial class FuncNavObstruction : BaseEntity, INavAvoidanceObstacle { public static readonly SendTable DT_FuncNavObstruction = new([ // todo ]); - public bool Disabled; + [NetworkVar] public partial bool Disabled { get; set; } int DrawDebugTextOverlays() { throw new NotImplementedException(); diff --git a/Game.Server/NextBot/FuncNavPrerequisite.cs b/Game.Server/NextBot/FuncNavPrerequisite.cs index 47a79f090..24e73cfa0 100644 --- a/Game.Server/NextBot/FuncNavPrerequisite.cs +++ b/Game.Server/NextBot/FuncNavPrerequisite.cs @@ -6,11 +6,11 @@ namespace Game.Server.NextBot; [LinkEntityToClass("func_nav_prerequisite")] -class FuncNavPrerequisite : BaseTrigger +partial class FuncNavPrerequisite : BaseTrigger { int Task; string TaskEntityName; float TaskValue; - bool Disabled; + [NetworkVar] public partial bool Disabled { get; set; } EHANDLE TaskEntity; } \ No newline at end of file diff --git a/Game.Server/ParticlePerformanceMonitor.cs b/Game.Server/ParticlePerformanceMonitor.cs index 4a0da6425..0245e02b4 100644 --- a/Game.Server/ParticlePerformanceMonitor.cs +++ b/Game.Server/ParticlePerformanceMonitor.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CParticlePerformanceMonitor")] -public class ParticlePerformanceMonitor : PointEntity +public partial class ParticlePerformanceMonitor : PointEntity { public static readonly SendTable DT_ParticlePerformanceMonitor = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(DisplayPerf))), - SendPropBool(FIELD.OF(nameof(MeasurePerf))), + SendPropBool(NetworkVarFields.DisplayPerf), + SendPropBool(NetworkVarFields.MeasurePerf), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ParticlePerformanceMonitor); [NetworkName("m_bDisplayPerf")] - public bool DisplayPerf; + [NetworkVar] public partial bool DisplayPerf { get; set; } [NetworkName("m_bMeasurePerf")] - public bool MeasurePerf; + [NetworkVar] public partial bool MeasurePerf { get; set; } } diff --git a/Game.Server/ParticleSmokeGrenade.cs b/Game.Server/ParticleSmokeGrenade.cs index 0821a1ac1..e81868879 100644 --- a/Game.Server/ParticleSmokeGrenade.cs +++ b/Game.Server/ParticleSmokeGrenade.cs @@ -5,22 +5,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("ParticleSmokeGrenade")] -public class ParticleSmokeGrenade : BaseParticleEntity +public partial class ParticleSmokeGrenade : BaseParticleEntity { public static readonly SendTable DT_ParticleSmokeGrenade = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeStartTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeEndTime)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(CurrentStage))), + SendPropFloat(NetworkVarFields.SpawnTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeStartTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeEndTime, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.CurrentStage), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ParticleSmokeGrenade); [NetworkName("m_flSpawnTime")] - public float SpawnTime; + [NetworkVar] public partial float SpawnTime { get; set; } [NetworkName("m_FadeStartTime")] - public float FadeStartTime; + [NetworkVar] public partial float FadeStartTime { get; set; } [NetworkName("m_FadeEndTime")] - public float FadeEndTime; + [NetworkVar] public partial float FadeEndTime { get; set; } [NetworkName("m_CurrentStage")] - public bool CurrentStage; + [NetworkVar] public partial bool CurrentStage { get; set; } } diff --git a/Game.Server/ParticleSystem.cs b/Game.Server/ParticleSystem.cs index 7a0910b3d..459a6e87c 100644 --- a/Game.Server/ParticleSystem.cs +++ b/Game.Server/ParticleSystem.cs @@ -10,33 +10,33 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CParticleSystem")] -public class ParticleSystem : BaseEntity +public partial class ParticleSystem : BaseEntity { public static readonly SendTable DT_ParticleSystem = new([ - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.Coord | PropFlags.ChangesOften), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.Coord | PropFlags.ChangesOften), SendPropEHandle(FIELD.OF(nameof(OwnerEntity))), SendPropEHandle(FIELD.OF(nameof(MoveParent))), - SendPropInt(FIELD.OF(nameof(ParentAttachment)), 8, PropFlags.Unsigned), - SendPropQAngles(FIELD.OF(nameof(Rotation)), 13, PropFlags.RoundDown | PropFlags.ChangesOften), - SendPropInt(FIELD.OF(nameof(EffectIndex)), 12, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(Active))), - SendPropFloat(FIELD.OF(nameof(StartTime)), 0, PropFlags.NoScale), - SendPropArray3(FIELD.OF_ARRAY(nameof(ControlPointEnts)), SendPropEHandle(FIELD.OF_ARRAYINDEX(nameof(ControlPointEnts), 0))), - SendPropArray3(FIELD.OF_ARRAY(nameof(ControlPointParents)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(ControlPointParents), 0), 3, PropFlags.Unsigned)), - SendPropBool(FIELD.OF(nameof(WeatherEffect))), + SendPropInt(BaseEntity.NetworkVarFields.ParentAttachment, 8, PropFlags.Unsigned), + SendPropQAngles(BaseEntity.NetworkVarFields.Rotation, 13, PropFlags.RoundDown | PropFlags.ChangesOften), + SendPropInt(NetworkVarFields.EffectIndex, 12, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.Active), + SendPropFloat(NetworkVarFields.StartTime, 0, PropFlags.NoScale), + SendPropArray3(ParticleSystem.NetworkVarFields.ControlPointEnts, SendPropEHandle(ParticleSystem.NetworkVarFields.ControlPointEnts.AtIndex(0)!)), + SendPropArray3(ParticleSystem.NetworkVarFields.ControlPointParents, SendPropInt(ParticleSystem.NetworkVarFields.ControlPointParents.AtIndex(0)!, 3, PropFlags.Unsigned)), + SendPropBool(NetworkVarFields.WeatherEffect), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ParticleSystem); [NetworkName("m_iEffectIndex")] - public int EffectIndex; + [NetworkVar] public partial int EffectIndex { get; set; } [NetworkName("m_bActive")] - public bool Active; + [NetworkVar] public partial bool Active { get; set; } [NetworkName("m_flStartTime")] - public TimeUnit_t StartTime; + [NetworkVar] public partial TimeUnit_t StartTime { get; set; } [NetworkName("m_bWeatherEffect")] - public bool WeatherEffect; + [NetworkVar] public partial bool WeatherEffect { get; set; } [NetworkName("m_hControlPointEnts")] - public InlineArrayNewMaxControlPoints ControlPointEnts = new(); + [NetworkVar] public partial NetworkArray, EHANDLE> ControlPointEnts { get; } [NetworkName("m_iControlPointParents")] - public InlineArrayNewMaxControlPoints ControlPointParents = new(); + [NetworkVar] public partial NetworkArray, byte> ControlPointParents { get; } } diff --git a/Game.Server/Plasma.cs b/Game.Server/Plasma.cs index d831e7c8b..e5967add5 100644 --- a/Game.Server/Plasma.cs +++ b/Game.Server/Plasma.cs @@ -5,28 +5,28 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPlasma")] -public class Plasma : BaseEntity +public partial class Plasma : BaseEntity { public static readonly SendTable DT_Plasma = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Scale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScaleTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Flags)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(PlasmaModelIndex)), 14, 0), - SendPropInt(FIELD.OF(nameof(PlasmaModelIndex2)), 14, 0), - SendPropInt(FIELD.OF(nameof(GlowModelIndex)), 14, 0), + SendPropFloat(NetworkVarFields.Scale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Flags, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.PlasmaModelIndex, 14, 0), + SendPropInt(NetworkVarFields.PlasmaModelIndex2, 14, 0), + SendPropInt(NetworkVarFields.GlowModelIndex, 14, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Plasma); [NetworkName("m_flScale")] - public float Scale; + [NetworkVar] public partial float Scale { get; set; } [NetworkName("m_flScaleTime")] - public float ScaleTime; + [NetworkVar] public partial float ScaleTime { get; set; } [NetworkName("m_nFlags")] - public int Flags; + [NetworkVar] public partial int Flags { get; set; } [NetworkName("m_nPlasmaModelIndex")] - public int PlasmaModelIndex; + [NetworkVar] public partial int PlasmaModelIndex { get; set; } [NetworkName("m_nPlasmaModelIndex2")] - public int PlasmaModelIndex2; + [NetworkVar] public partial int PlasmaModelIndex2 { get; set; } [NetworkName("m_nGlowModelIndex")] - public int GlowModelIndex; + [NetworkVar] public partial int GlowModelIndex { get; set; } } diff --git a/Game.Server/Player.cs b/Game.Server/Player.cs index d5b898b10..50b7e1cfb 100644 --- a/Game.Server/Player.cs +++ b/Game.Server/Player.cs @@ -269,45 +269,45 @@ public partial class BasePlayer : BaseCombatCharacter public static readonly SendTable DT_LocalPlayerExclusive = new(nameof(DT_LocalPlayerExclusive), [ SendPropDataTable("m_Local", FIELD.OF(nameof(Local)), PlayerLocalData.DT_Local), - SendPropFloat(FIELD.OF(nameof(Friction)), 0, PropFlags.NoScale | PropFlags.RoundDown, 0.0f, 4.0f), - SendPropArray3(FIELD.OF_ARRAY(nameof(Ammo)), SendPropInt( FIELD.OF_ARRAYINDEX(nameof(Ammo)), 16, PropFlags.Unsigned)), - SendPropInt(FIELD.OF(nameof(TickBase)), -1, PropFlags.ChangesOften), - SendPropInt(FIELD.OF(nameof(NextThinkTick))), + SendPropFloat(BaseEntity.NetworkVarFields.Friction, 0, PropFlags.NoScale | PropFlags.RoundDown, 0.0f, 4.0f), + SendPropArray3(BaseCombatCharacter.NetworkVarFields.Ammo, SendPropInt(BaseCombatCharacter.NetworkVarFields.Ammo.AtIndex(0)!, 16, PropFlags.Unsigned)), + SendPropInt(NetworkVarFields.TickBase, -1, PropFlags.ChangesOften), + SendPropInt(BaseEntity.NetworkVarFields.NextThinkTick), SendPropEHandle(FIELD.OF(nameof(LastWeapon))), SendPropEHandle(FIELD.OF(nameof(GroundEntity)), PropFlags.ChangesOften), SendPropVector(FIELD.OF(nameof(BaseVelocity)), 0, PropFlags.NoScale), - SendPropEHandle(FIELD.OF(nameof(ConstraintEntity))), - SendPropVector(FIELD.OF(nameof(ConstraintCenter)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ConstraintRadius)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ConstraintWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ConstraintSpeedFactor)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(DeathTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(LaggedMovementValue)), 0, PropFlags.NoScale), + SendPropEHandle(BasePlayer.NetworkVarFields.ConstraintEntity), + SendPropVector(NetworkVarFields.ConstraintCenter, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ConstraintRadius, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ConstraintWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ConstraintSpeedFactor, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.DeathTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LaggedMovementValue, 0, PropFlags.NoScale), SendPropEHandle(FIELD.OF(nameof(TonemapController))), SendPropEHandle(FIELD.OF(nameof(ViewEntity))), - SendPropBool(FIELD.OF(nameof(DisableWorldClicking))), + SendPropBool(NetworkVarFields.DisableWorldClicking), ]); public static readonly SendTable DT_BasePlayer = new(DT_BaseCombatCharacter, [ SendPropDataTable(nameof(pl), FIELD.OF(nameof(pl)), DT_PlayerState, SendProxy_DataTableToDataTable), - SendPropEHandle(FIELD.OF(nameof(Vehicle))), - SendPropEHandle(FIELD.OF(nameof(UseEntity))), - SendPropInt(FIELD.OF(nameof(LifeState)), 3, PropFlags.Unsigned ), + SendPropEHandle(BasePlayer.NetworkVarFields.Vehicle), + SendPropEHandle(BasePlayer.NetworkVarFields.UseEntity), + SendPropInt(BaseEntity.NetworkVarFields.LifeState, 3, PropFlags.Unsigned ), SendPropEHandle(FIELD.OF(nameof(ColorCorrectionCtrl))), // << gmod specific - SendPropFloat(FIELD.OF(nameof(Maxspeed)), 12, PropFlags.RoundDown, 0.0f, 2048.0f ), + SendPropFloat(NetworkVarFields.Maxspeed, 12, PropFlags.RoundDown, 0.0f, 2048.0f ), SendPropInt(FIELD.OF("flags"), Constants.PLAYER_FLAG_BITS, PropFlags.Unsigned|PropFlags.ChangesOften, SendProxy_CropFlagsToPlayerFlagBitsLength), - SendPropInt(FIELD.OF(nameof(ObserverMode)), 3, PropFlags.Unsigned), - SendPropEHandle(FIELD.OF(nameof(ObserverTarget))), - SendPropFloat(FIELD.OF(nameof(FOV)), 16, PropFlags.Unsigned, 0, 65536), - SendPropFloat(FIELD.OF(nameof(FOVStart)), 16, PropFlags.Unsigned, 0, 65536), - SendPropTime64(FIELD.OF(nameof(FOVTime))), - SendPropFloat(FIELD.OF(nameof(DefaultFOV)), 16, PropFlags.Unsigned, 0, 65536), - SendPropEHandle(FIELD.OF(nameof(ZoomOwner))), - - SendPropEHandle(FIELD.OF_SENDINFO_ARRAY(nameof(ViewModel))), - SendPropArray(FIELD.OF_ARRAY(nameof(ViewModel))), - - SendPropBool(FIELD.OF(nameof(UseWeaponsInVehicle))), + SendPropInt(NetworkVarFields.ObserverMode, 3, PropFlags.Unsigned), + SendPropEHandle(BasePlayer.NetworkVarFields.ObserverTarget), + SendPropFloat(NetworkVarFields.FOV, 16, PropFlags.Unsigned, 0, 65536), + SendPropFloat(NetworkVarFields.FOVStart, 16, PropFlags.Unsigned, 0, 65536), + SendPropTime64(NetworkVarFields.FOVTime), + SendPropFloat(NetworkVarFields.DefaultFOV, 16, PropFlags.Unsigned, 0, 65536), + SendPropEHandle(BasePlayer.NetworkVarFields.ZoomOwner), + + SendPropEHandle(FIELD.OF_SENDINFO_ARRAY(BasePlayer.NetworkVarFields.ViewModel)), + SendPropArray(BasePlayer.NetworkVarFields.ViewModel), + + SendPropBool(NetworkVarFields.UseWeaponsInVehicle), SendPropDataTable( "localdata", DT_LocalPlayerExclusive, SendProxy_SendLocalDataTable), ]); @@ -480,9 +480,9 @@ public BasePlayer() { public readonly PlayerState pl = new(); [NetworkName("m_Local")] - public readonly PlayerLocalData Local = new(); + [NetworkVarEmbedded] public partial PlayerLocalData Local { get; } - public ref AudioParams GetAudioParams() => ref Local.Audio; + public AudioParams.NetworkVar GetAudioParams() => Local.Audio; // Used by env_soundscape_triggerable to manage when the player is touching multiple // soundscape triggers simultaneously. @@ -495,21 +495,21 @@ public void SetBodyPitch(float pitch) { } [NetworkName("m_hVehicle")] - public EHANDLE Vehicle = new(); + [NetworkVar] public partial NetworkHandle Vehicle { get; } [NetworkName("m_hUseEntity")] - public EHANDLE UseEntity = new(); + [NetworkVar] public partial NetworkHandle UseEntity { get; } [NetworkName("m_hObserverTarget")] - public EHANDLE ObserverTarget = new(); + [NetworkVar] public partial NetworkHandle ObserverTarget { get; } [NetworkName("m_hZoomOwner")] - public EHANDLE ZoomOwner = new(); + [NetworkVar] public partial NetworkHandle ZoomOwner { get; } [NetworkName("m_hConstraintEntity")] - public EHANDLE ConstraintEntity = new(); + [NetworkVar] public partial NetworkHandle ConstraintEntity { get; } [NetworkName("m_hTonemapController")] public EHANDLE TonemapController = new(); [NetworkName("m_hViewEntity")] public EHANDLE ViewEntity = new(); [NetworkName("m_hViewModel")] - InlineArrayNewMaxViewmodels> ViewModel = new(); + [NetworkVar] private partial NetworkArray>, Handle> ViewModel { get; } readonly List> SimulatedByThisPlayer = []; public IServerVehicle? GetVehicle() => Vehicle.Get()?.GetServerVehicle(); @@ -519,39 +519,39 @@ public void SetBodyPitch(float pitch) { bool HasHaptics; [NetworkName("m_bDisableWorldClicking")] - bool DisableWorldClicking; + [NetworkVar] public partial bool DisableWorldClicking { get; set; } [NetworkName("m_flMaxspeed")] - float Maxspeed; + [NetworkVar] public partial float Maxspeed { get; set; } [NetworkName("m_iObserverMode")] - int ObserverMode; + [NetworkVar] public partial int ObserverMode { get; set; } [NetworkName("m_iFOV")] - int FOV; + [NetworkVar] public partial int FOV { get; set; } [NetworkName("m_nTickBase")] - public int TickBase; + [NetworkVar] public partial int TickBase { get; set; } [NetworkName("m_iFOVStart")] - int FOVStart; + [NetworkVar] public partial int FOVStart { get; set; } [NetworkName("m_flFOVTime")] - TimeUnit_t FOVTime; + [NetworkVar] public partial TimeUnit_t FOVTime { get; set; } [NetworkName("m_iDefaultFOV")] - float DefaultFOV; + [NetworkVar] public partial float DefaultFOV { get; set; } [NetworkName("m_vecConstraintCenter")] - public Vector3 ConstraintCenter; + [NetworkVar] public partial Vector3 ConstraintCenter { get; set; } [NetworkName("m_flConstraintRadius")] - public float ConstraintRadius; + [NetworkVar] public partial float ConstraintRadius { get; set; } [NetworkName("m_flConstraintWidth")] - public float ConstraintWidth; + [NetworkVar] public partial float ConstraintWidth { get; set; } [NetworkName("m_flConstraintSpeedFactor")] - public float ConstraintSpeedFactor; + [NetworkVar] public partial float ConstraintSpeedFactor { get; set; } InlineArray18 LastPlaceName; [NetworkName("m_hColorCorrectionCtrl")] EHANDLE ColorCorrectionCtrl = new(); [NetworkName("m_bUseWeaponsInVehicle")] - bool UseWeaponsInVehicle; + [NetworkVar] public partial bool UseWeaponsInVehicle { get; set; } public bool OnTarget; [NetworkName("m_flDeathTime")] - public TimeUnit_t DeathTime; + [NetworkVar] public partial TimeUnit_t DeathTime { get; set; } [NetworkName("m_flLaggedMovementValue")] - public double LaggedMovementValue; + [NetworkVar] public partial double LaggedMovementValue { get; set; } public TimeUnit_t StepSoundTime; InlineArray32 AnimExtension; @@ -564,7 +564,7 @@ public void SetBodyPitch(float pitch) { TimeUnit_t AirFinished; TimeUnit_t PainFinished; public int NumCrouches; - public bool DuckToggled; + [NetworkVar] public partial bool DuckToggled { get; set; } public bool PhysicsWasFrozen; public bool AutoKickDisabled; public bool IsObserver() => GetObserverMode() != Shared.ObserverMode.None; @@ -607,7 +607,7 @@ public virtual void RemoveSuit() { public Vector3 VehicleViewOrigin; public QAngle VehicleViewAngles; - public float VehicleViewFOV; + [NetworkVar] public partial float VehicleViewFOV { get; set; } public int VehicleViewSavedFrame; public int GetFOVForNetworking() { diff --git a/Game.Server/PlayerLocalData.cs b/Game.Server/PlayerLocalData.cs index 81ac1a2da..1775e5fb0 100644 --- a/Game.Server/PlayerLocalData.cs +++ b/Game.Server/PlayerLocalData.cs @@ -8,57 +8,57 @@ namespace Game.Server; using FIELD = FIELD; -public class PlayerLocalData +public partial class PlayerLocalData { public static readonly SendTable DT_Local = new(nameof(DT_Local), [ - SendPropArray3(FIELD.OF_ARRAY(nameof(AreaBits)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(AreaBits)), 8, PropFlags.Unsigned)), - SendPropArray3(FIELD.OF_ARRAY(nameof(AreaPortalBits)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(AreaPortalBits)), 8, PropFlags.Unsigned)), - SendPropInt(FIELD.OF(nameof(HideHUD)), (int)HideHudBits.BitCount, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(FOVRate)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Ducked)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Ducking)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(InDuckJump)), 1, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(DuckTime)), 12, PropFlags.RoundDown | PropFlags.ChangesOften, 0.0f, 2048.0f), - SendPropFloat(FIELD.OF(nameof(DuckJumpTime)), 12, PropFlags.RoundDown, 0.0f, 2048.0f), - SendPropFloat(FIELD.OF(nameof(JumpTime)), 12, PropFlags.RoundDown, 0.0f, 2048.0f), - SendPropFloat(FIELD.OF(nameof(FallVelocity)), 32, PropFlags.NoScale | PropFlags.ChangesOften, -4096.0f, 4096.0f), - SendPropVector(FIELD.OF(nameof(PunchAngle)), -1, PropFlags.NoScale|PropFlags.ChangesOften), - SendPropVector(FIELD.OF(nameof(PunchAngleVel)), -1, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(DrawViewmodel)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(WearingSuit)), 1, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(Poisoned))), - SendPropFloat(FIELD.OF(nameof(StepSize)), 16, PropFlags.RoundUp, 0.0f, 512.0f), - SendPropInt(FIELD.OF(nameof(AllowAutoMovement)),1, PropFlags.Unsigned), + SendPropArray3(PlayerLocalData.NetworkVarFields.AreaBits, SendPropInt(PlayerLocalData.NetworkVarFields.AreaBits.AtIndex(0)!, 8, PropFlags.Unsigned)), + SendPropArray3(PlayerLocalData.NetworkVarFields.AreaPortalBits, SendPropInt(PlayerLocalData.NetworkVarFields.AreaPortalBits.AtIndex(0)!, 8, PropFlags.Unsigned)), + SendPropInt(PlayerLocalData.NetworkVarFields.HideHUD, (int)HideHudBits.BitCount, PropFlags.Unsigned), + SendPropFloat(PlayerLocalData.NetworkVarFields.FOVRate, 0, PropFlags.NoScale), + SendPropInt(PlayerLocalData.NetworkVarFields.Ducked, 1, PropFlags.Unsigned), + SendPropInt(PlayerLocalData.NetworkVarFields.Ducking, 1, PropFlags.Unsigned), + SendPropInt(PlayerLocalData.NetworkVarFields.InDuckJump, 1, PropFlags.Unsigned), + SendPropFloat(PlayerLocalData.NetworkVarFields.DuckTime, 12, PropFlags.RoundDown | PropFlags.ChangesOften, 0.0f, 2048.0f), + SendPropFloat(PlayerLocalData.NetworkVarFields.DuckJumpTime, 12, PropFlags.RoundDown, 0.0f, 2048.0f), + SendPropFloat(PlayerLocalData.NetworkVarFields.JumpTime, 12, PropFlags.RoundDown, 0.0f, 2048.0f), + SendPropFloat(PlayerLocalData.NetworkVarFields.FallVelocity, 32, PropFlags.NoScale | PropFlags.ChangesOften, -4096.0f, 4096.0f), + SendPropVector(PlayerLocalData.NetworkVarFields.PunchAngle, -1, PropFlags.NoScale|PropFlags.ChangesOften), + SendPropVector(PlayerLocalData.NetworkVarFields.PunchAngleVel, -1, PropFlags.NoScale), + SendPropInt(PlayerLocalData.NetworkVarFields.DrawViewmodel, 1, PropFlags.Unsigned), + SendPropInt(PlayerLocalData.NetworkVarFields.WearingSuit, 1, PropFlags.Unsigned), + SendPropBool(PlayerLocalData.NetworkVarFields.Poisoned), + SendPropFloat(PlayerLocalData.NetworkVarFields.StepSize, 16, PropFlags.RoundUp, 0.0f, 512.0f), + SendPropInt(PlayerLocalData.NetworkVarFields.AllowAutoMovement,1, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Scale"), 12), - SendPropVector(FIELD.OF("Skybox3D.Origin"), -1, PropFlags.Coord), - SendPropInt(FIELD.OF("Skybox3D.Area"), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.Enable"), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.Blend"), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.Radial"), 1, PropFlags.Unsigned), - SendPropVector(FIELD.OF("Skybox3D.Fog.DirPrimary"), -1, PropFlags.Coord), - SendPropInt(FIELD.OF("Skybox3D.Fog.ColorPrimary"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.ColorSecondary"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.ColorPrimaryHDR"), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF("Skybox3D.Fog.ColorSecondaryHDR"), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF("Skybox3D.Fog.Start"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Skybox3D.Fog.End"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Skybox3D.Fog.MaxDensity"), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF("Skybox3D.Fog.HDRColorScale"), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Skybox3D_Scale, 12), + SendPropVector(NetworkVarFields.Skybox3D_Origin, -1, PropFlags.Coord), + SendPropInt(NetworkVarFields.Skybox3D_Area, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_Enable, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_Blend, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_Radial, 1, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.Skybox3D_Fog_DirPrimary, -1, PropFlags.Coord), + SendPropInt(NetworkVarFields.Skybox3D_Fog_ColorPrimary, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_ColorSecondary, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_ColorPrimaryHDR, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Skybox3D_Fog_ColorSecondaryHDR, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Skybox3D_Fog_Start, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Skybox3D_Fog_End, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Skybox3D_Fog_MaxDensity, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Skybox3D_Fog_HDRColorScale, 0, PropFlags.NoScale), - SendPropEHandle( FIELD.OF("PlayerFog.Ctrl") ), + SendPropEHandle( NetworkVarFields.PlayerFog_Ctrl ), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 0), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 1), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 2), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 3), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 4), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 5), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 6), -1, PropFlags.Coord), - SendPropVector(FIELD.OF_ARRAYINDEX("Audio.LocalSound", 7), -1, PropFlags.Coord), - SendPropInt(FIELD.OF("Audio.SoundscapeIndex"), 17, 0), - SendPropInt(FIELD.OF("Audio.LocalBits"), NUM_AUDIO_LOCAL_SOUNDS, PropFlags.Unsigned), - SendPropEHandle(FIELD.OF("Audio.Ent")), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(0)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(1)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(2)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(3)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(4)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(5)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(6)!, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.Audio_LocalSound.AtIndex(7)!, -1, PropFlags.Coord), + SendPropInt(NetworkVarFields.Audio_SoundscapeIndex, 17, 0), + SendPropInt(NetworkVarFields.Audio_LocalBits, NUM_AUDIO_LOCAL_SOUNDS, PropFlags.Unsigned), + SendPropEHandle(NetworkVarFields.Audio_Ent), SendPropFloat(FIELD.OF(nameof(SprintSpeed))), SendPropFloat(FIELD.OF(nameof(WalkSpeed))), @@ -89,52 +89,52 @@ public class PlayerLocalData // TODO: NETWORK VARS!!!!! [NetworkName("m_chAreaBits")] - public InlineArrayMaxAreaStateBytes AreaBits; + [NetworkVar] public partial NetworkArray, byte> AreaBits { get; } [NetworkName("m_chAreaPortalBits")] - public InlineArrayMaxAreaPortalStateBytes AreaPortalBits; + [NetworkVar] public partial NetworkArray, byte> AreaPortalBits { get; } [NetworkName("m_iHideHUD")] - public bool HideHUD; + [NetworkVar] public partial bool HideHUD { get; set; } [NetworkName("m_flFOVRate")] - public float FOVRate; + [NetworkVar] public partial float FOVRate { get; set; } [NetworkName("m_bDucked")] - public bool Ducked; + [NetworkVar] public partial bool Ducked { get; set; } [NetworkName("m_bDucking")] - public bool Ducking; + [NetworkVar] public partial bool Ducking { get; set; } [NetworkName("m_bInDuckJump")] - public bool InDuckJump; + [NetworkVar] public partial bool InDuckJump { get; set; } [NetworkName("m_flDucktime")] - public double DuckTime; + [NetworkVar] public partial double DuckTime { get; set; } [NetworkName("m_flDuckJumpTime")] - public double DuckJumpTime; + [NetworkVar] public partial double DuckJumpTime { get; set; } [NetworkName("m_flJumpTime")] - public double JumpTime; + [NetworkVar] public partial double JumpTime { get; set; } public int StepSide; [NetworkName("m_flFallVelocity")] - public float FallVelocity; + [NetworkVar] public partial float FallVelocity { get; set; } public int OldButtons; public int OldForwardMove; [NetworkName("m_vecPunchAngle")] - public QAngle PunchAngle; + [NetworkVar] public partial QAngle PunchAngle { get; set; } [NetworkName("m_vecPunchAngleVel")] - public QAngle PunchAngleVel; + [NetworkVar] public partial QAngle PunchAngleVel { get; set; } [NetworkName("m_bDrawViewmodel")] - public bool DrawViewmodel; + [NetworkVar] public partial bool DrawViewmodel { get; set; } [NetworkName("m_bWearingSuit")] - public bool WearingSuit; + [NetworkVar] public partial bool WearingSuit { get; set; } [NetworkName("m_bPoisoned")] - public bool Poisoned; + [NetworkVar] public partial bool Poisoned { get; set; } [NetworkName("m_flStepSize")] - public float StepSize; + [NetworkVar] public partial float StepSize { get; set; } [NetworkName("m_bAllowAutoMovement")] - public bool AllowAutoMovement; + [NetworkVar] public partial bool AllowAutoMovement { get; set; } public bool SlowMovement; [NetworkName("m_skybox3d")] - public Sky3DParams Skybox3D = new(); + [NetworkVarEmbedded] public partial Sky3DParams.NetworkVar Skybox3D { get; } [NetworkName("m_PlayerFog")] - public FogPlayerParams PlayerFog = new(); + [NetworkVarEmbedded] public partial FogPlayerParams.NetworkVar PlayerFog { get; } [NetworkName("m_audio")] - public AudioParams Audio = new(); + [NetworkVarEmbedded] public partial AudioParams.NetworkVar Audio { get; } public static void ClientData_Update(BasePlayer pl) { // TODO! @@ -144,7 +144,8 @@ public static void ClientData_Update(BasePlayer pl) { // pl.Local.Skybox3D.CopyFrom(skyCamera.SkyboxData); // } // else if (skyCamera == null) - pl.Local.Skybox3D.Area = 255; + Sky3DParams.NetworkVar skybox3d = pl.Local.Skybox3D; + skybox3d.Area = 255; } public static void UpdateAllClientData() { diff --git a/Game.Server/PlayerResource.cs b/Game.Server/PlayerResource.cs index 84328518d..88763032f 100644 --- a/Game.Server/PlayerResource.cs +++ b/Game.Server/PlayerResource.cs @@ -14,35 +14,35 @@ public static class PlayerResourceGlobals{ [LinkEntityToClass("player_manager")] [NetworkName("CPlayerResource")] -public class PlayerResource : BaseEntity +public partial class PlayerResource : BaseEntity { public static readonly SendTable DT_PlayerResource = new([ - SendPropArray3(FIELD.OF_ARRAY(nameof(Ping)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Ping), 0), 12, PropFlags.Unsigned ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Score)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Score), 0), 32 ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Deaths)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Deaths), 0), 32 ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Connected)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Connected), 0), 1, PropFlags.Unsigned ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Team)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Team), 0), 16 ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Alive)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Alive), 0), 1, PropFlags.Unsigned ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Health)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Health), 0), 32, PropFlags.VarInt | PropFlags.Unsigned | PropFlags.Normal ) ), - SendPropArray3(FIELD.OF_ARRAY(nameof(Armor)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(Health), 0), 32, PropFlags.Unsigned) ), + SendPropArray3(PlayerResource.NetworkVarFields.Ping, SendPropInt(PlayerResource.NetworkVarFields.Ping.AtIndex(0)!, 12, PropFlags.Unsigned ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Score, SendPropInt(PlayerResource.NetworkVarFields.Score.AtIndex(0)!, 32 ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Deaths, SendPropInt(PlayerResource.NetworkVarFields.Deaths.AtIndex(0)!, 32 ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Connected, SendPropInt(PlayerResource.NetworkVarFields.Connected.AtIndex(0)!, 1, PropFlags.Unsigned ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Team, SendPropInt(PlayerResource.NetworkVarFields.Team.AtIndex(0)!, 16 ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Alive, SendPropInt(PlayerResource.NetworkVarFields.Alive.AtIndex(0)!, 1, PropFlags.Unsigned ) ), + SendPropArray3(PlayerResource.NetworkVarFields.Health, SendPropInt(PlayerResource.NetworkVarFields.Health.AtIndex(0)!, 32, PropFlags.VarInt | PropFlags.Unsigned | PropFlags.Normal ) ), + SendPropArray3(FIELD.OF_ARRAY(nameof(Armor)), SendPropInt(PlayerResource.NetworkVarFields.Health.AtIndex(0)!, 32, PropFlags.Unsigned) ), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PlayerResource); [NetworkName("m_iPing")] - InlineArrayMaxPlayersPlusOne Ping = new(); + [NetworkVar] private partial NetworkArray, int> Ping { get; } [NetworkName("m_iScore")] - InlineArrayMaxPlayersPlusOne Score = new(); + [NetworkVar] private partial NetworkArray, int> Score { get; } [NetworkName("m_iDeaths")] - InlineArrayMaxPlayersPlusOne Deaths = new(); + [NetworkVar] private partial NetworkArray, int> Deaths { get; } [NetworkName("m_bConnected")] - InlineArrayMaxPlayersPlusOne Connected = new(); + [NetworkVar] private partial NetworkArray, bool> Connected { get; } [NetworkName("m_iTeam")] - InlineArrayMaxPlayersPlusOne Team = new(); + [NetworkVar] private partial NetworkArray, int> Team { get; } [NetworkName("m_bAlive")] - InlineArrayMaxPlayersPlusOne Alive = new(); + [NetworkVar] private partial NetworkArray, bool> Alive { get; } [NetworkName("m_iHealth")] - new InlineArrayMaxPlayersPlusOne Health = new(); + [NetworkVar] private new partial NetworkArray, int> Health { get; } [NetworkName("m_iArmor")] InlineArrayMaxPlayersPlusOne Armor = new(); } diff --git a/Game.Server/PointCamera.cs b/Game.Server/PointCamera.cs index e8d017d33..fd419dec2 100644 --- a/Game.Server/PointCamera.cs +++ b/Game.Server/PointCamera.cs @@ -5,46 +5,46 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPointCamera")] -public class PointCamera : BaseEntity +public partial class PointCamera : BaseEntity { public static readonly SendTable DT_PointCamera = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(FOV)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Resolution)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(FogEnable))), - SendPropInt(FIELD.OF(nameof(FogColor)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(FogColorHDR)), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(FogStart)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FogEnd)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FogMaxDensity)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(FogRadial))), - SendPropBool(FIELD.OF(nameof(Active))), - SendPropBool(FIELD.OF(nameof(UseScreenAspectRatio))), - SendPropBool(FIELD.OF(nameof(GlobalOverride))), + SendPropFloat(NetworkVarFields.FOV, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Resolution, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.FogEnable), + SendPropInt(NetworkVarFields.FogColor, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.FogColorHDR, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.FogStart, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FogEnd, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FogMaxDensity, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.FogRadial), + SendPropBool(NetworkVarFields.Active), + SendPropBool(NetworkVarFields.UseScreenAspectRatio), + SendPropBool(NetworkVarFields.GlobalOverride), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PointCamera); [NetworkName("m_FOV")] - public float FOV; + [NetworkVar] public partial float FOV { get; set; } [NetworkName("m_Resolution")] - public float Resolution; + [NetworkVar] public partial float Resolution { get; set; } [NetworkName("m_bFogEnable")] - public bool FogEnable; + [NetworkVar] public partial bool FogEnable { get; set; } [NetworkName("m_FogColor")] - public int FogColor; + [NetworkVar] public partial int FogColor { get; set; } [NetworkName("m_FogColorHDR")] - public int FogColorHDR; + [NetworkVar] public partial int FogColorHDR { get; set; } [NetworkName("m_flFogStart")] - public float FogStart; + [NetworkVar] public partial float FogStart { get; set; } [NetworkName("m_flFogEnd")] - public float FogEnd; + [NetworkVar] public partial float FogEnd { get; set; } [NetworkName("m_flFogMaxDensity")] - public float FogMaxDensity; + [NetworkVar] public partial float FogMaxDensity { get; set; } [NetworkName("m_bFogRadial")] - public bool FogRadial; + [NetworkVar] public partial bool FogRadial { get; set; } [NetworkName("m_bActive")] - public bool Active; + [NetworkVar] public partial bool Active { get; set; } [NetworkName("m_bUseScreenAspectRatio")] - public bool UseScreenAspectRatio; + [NetworkVar] public partial bool UseScreenAspectRatio { get; set; } [NetworkName("m_bGlobalOverride")] - public bool GlobalOverride; + [NetworkVar] public partial bool GlobalOverride { get; set; } } diff --git a/Game.Server/PointWorldText.cs b/Game.Server/PointWorldText.cs index a8858abd3..6ae5a70ab 100644 --- a/Game.Server/PointWorldText.cs +++ b/Game.Server/PointWorldText.cs @@ -5,34 +5,34 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPointWorldText")] -public class PointWorldText : BaseEntity +public partial class PointWorldText : BaseEntity { public static readonly SendTable DT_PointWorldText = new(DT_BaseEntity, [ SendPropString(FIELD.OF(nameof(SzText))), - SendPropInt(FIELD.OF(nameof(ColTextColor)), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(TextSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(TextSpacingX)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(TextSpacingY)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Orientation)), 3, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(Rainbow))), - SendPropBool(FIELD.OF(nameof(TextEnabled))), + SendPropInt(NetworkVarFields.ColTextColor, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.TextSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.TextSpacingX, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.TextSpacingY, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.Orientation, 3, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.Rainbow), + SendPropBool(NetworkVarFields.TextEnabled), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PointWorldText); [NetworkName("m_szText")] public InlineArray512 SzText; [NetworkName("m_colTextColor")] - public int ColTextColor; + [NetworkVar] public partial int ColTextColor { get; set; } [NetworkName("m_flTextSize")] - public float TextSize; + [NetworkVar] public partial float TextSize { get; set; } [NetworkName("m_flTextSpacingX")] - public float TextSpacingX; + [NetworkVar] public partial float TextSpacingX { get; set; } [NetworkName("m_flTextSpacingY")] - public float TextSpacingY; + [NetworkVar] public partial float TextSpacingY { get; set; } [NetworkName("m_nOrientation")] - public int Orientation; + [NetworkVar] public partial int Orientation { get; set; } [NetworkName("m_bRainbow")] - public bool Rainbow; + [NetworkVar] public partial bool Rainbow { get; set; } [NetworkName("m_bTextEnabled")] - public bool TextEnabled; + [NetworkVar] public partial bool TextEnabled { get; set; } } diff --git a/Game.Server/PoseController.cs b/Game.Server/PoseController.cs index e6f2466c9..9d7833728 100644 --- a/Game.Server/PoseController.cs +++ b/Game.Server/PoseController.cs @@ -5,44 +5,44 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPoseController")] -public class PoseController : BaseEntity +public partial class PoseController : BaseEntity { public static readonly SendTable DT_PoseController = new(DT_BaseEntity, [ - SendPropArray3(FIELD.OF_ARRAY(nameof(HProps)), SendPropEHandle(FIELD.OF_ARRAYINDEX(nameof(HProps), 0))), - SendPropArray3(FIELD.OF_ARRAY(nameof(ChPoseIndex)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(ChPoseIndex), 0), 5, PropFlags.Unsigned)), - SendPropBool(FIELD.OF(nameof(PoseValueParity))), - SendPropFloat(FIELD.OF(nameof(PoseValue)), 11, 0, 0.0f, 1.0f), - SendPropFloat(FIELD.OF(nameof(InterpolationTime)), 11, 0, 0.0f, 10.0f), - SendPropBool(FIELD.OF(nameof(InterpolationWrap))), - SendPropFloat(FIELD.OF(nameof(CycleFrequency)), 11, 0, -10.0f, 10.0f), - SendPropInt(FIELD.OF(nameof(FModType)), 3, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(FModTimeOffset)), 11, 0, -1.0f, 1.0f), - SendPropFloat(FIELD.OF(nameof(FModRate)), 11, 0, -10.0f, 10.0f), - SendPropFloat(FIELD.OF(nameof(FModAmplitude)), 11, 0, 0.0f, 10.0f), + SendPropArray3(PoseController.NetworkVarFields.HProps, SendPropEHandle(PoseController.NetworkVarFields.HProps.AtIndex(0)!)), + SendPropArray3(PoseController.NetworkVarFields.ChPoseIndex, SendPropInt(PoseController.NetworkVarFields.ChPoseIndex.AtIndex(0)!, 5, PropFlags.Unsigned)), + SendPropBool(NetworkVarFields.PoseValueParity), + SendPropFloat(NetworkVarFields.PoseValue, 11, 0, 0.0f, 1.0f), + SendPropFloat(NetworkVarFields.InterpolationTime, 11, 0, 0.0f, 10.0f), + SendPropBool(NetworkVarFields.InterpolationWrap), + SendPropFloat(NetworkVarFields.CycleFrequency, 11, 0, -10.0f, 10.0f), + SendPropInt(NetworkVarFields.FModType, 3, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.FModTimeOffset, 11, 0, -1.0f, 1.0f), + SendPropFloat(NetworkVarFields.FModRate, 11, 0, -10.0f, 10.0f), + SendPropFloat(NetworkVarFields.FModAmplitude, 11, 0, 0.0f, 10.0f), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PoseController); public const int MAX_POSE_CONTROLLED_PROPS = 4; [NetworkName("m_hProps")] - public InlineArray4 HProps; + [NetworkVar] public partial NetworkArray, EHANDLE> HProps { get; } [NetworkName("m_chPoseIndex")] - public InlineArray4 ChPoseIndex; + [NetworkVar] public partial NetworkArray, byte> ChPoseIndex { get; } [NetworkName("m_bPoseValueParity")] - public bool PoseValueParity; + [NetworkVar] public partial bool PoseValueParity { get; set; } [NetworkName("m_fPoseValue")] - public float PoseValue; + [NetworkVar] public partial float PoseValue { get; set; } [NetworkName("m_fInterpolationTime")] - public float InterpolationTime; + [NetworkVar] public partial float InterpolationTime { get; set; } [NetworkName("m_bInterpolationWrap")] - public bool InterpolationWrap; + [NetworkVar] public partial bool InterpolationWrap { get; set; } [NetworkName("m_fCycleFrequency")] - public float CycleFrequency; + [NetworkVar] public partial float CycleFrequency { get; set; } [NetworkName("m_nFModType")] - public int FModType; + [NetworkVar] public partial int FModType { get; set; } [NetworkName("m_fFModTimeOffset")] - public float FModTimeOffset; + [NetworkVar] public partial float FModTimeOffset { get; set; } [NetworkName("m_fFModRate")] - public float FModRate; + [NetworkVar] public partial float FModRate { get; set; } [NetworkName("m_fFModAmplitude")] - public float FModAmplitude; + [NetworkVar] public partial float FModAmplitude { get; set; } } diff --git a/Game.Server/Precipitation.cs b/Game.Server/Precipitation.cs index 93e916ff7..61d5a3fea 100644 --- a/Game.Server/Precipitation.cs +++ b/Game.Server/Precipitation.cs @@ -5,19 +5,19 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPrecipitation")] -public class Precipitation : BaseEntity +public partial class Precipitation : BaseEntity { public static readonly SendTable DT_Precipitation = new(DT_BaseEntity, [ - SendPropInt(FIELD.OF(nameof(PrecipType)), 4, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.PrecipType, 4, PropFlags.Unsigned), SendPropString(FIELD.OF(nameof(ParticleNameClose))), SendPropString(FIELD.OF(nameof(ParticleNameInner))), SendPropString(FIELD.OF(nameof(ParticleNameOuter))), - SendPropFloat(FIELD.OF(nameof(ParticleDist)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ParticleDist, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Precipitation); [NetworkName("m_nPrecipType")] - public int PrecipType; + [NetworkVar] public partial int PrecipType { get; set; } [NetworkName("m_sParticleNameClose")] public InlineArray512 ParticleNameClose; [NetworkName("m_sParticleNameInner")] @@ -25,5 +25,5 @@ public class Precipitation : BaseEntity [NetworkName("m_sParticleNameOuter")] public InlineArray512 ParticleNameOuter; [NetworkName("m_flParticleDist")] - public float ParticleDist; + [NetworkVar] public partial float ParticleDist { get; set; } } diff --git a/Game.Server/PropCrane.cs b/Game.Server/PropCrane.cs index 05889f35a..3274fc320 100644 --- a/Game.Server/PropCrane.cs +++ b/Game.Server/PropCrane.cs @@ -5,25 +5,25 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPropCrane")] -public class PropCrane : BaseAnimating +public partial class PropCrane : BaseAnimating { public static readonly SendTable DT_PropCrane = new(DT_BaseAnimating, [ - SendPropEHandle(FIELD.OF(nameof(Player))), - SendPropBool(FIELD.OF(nameof(MagnetOn))), - SendPropBool(FIELD.OF(nameof(EnterAnimOn))), - SendPropBool(FIELD.OF(nameof(ExitAnimOn))), - SendPropVector(FIELD.OF(nameof(EyeExitEndpoint)), 0, PropFlags.Coord), + SendPropEHandle(PropCrane.NetworkVarFields.Player), + SendPropBool(NetworkVarFields.MagnetOn), + SendPropBool(NetworkVarFields.EnterAnimOn), + SendPropBool(NetworkVarFields.ExitAnimOn), + SendPropVector(NetworkVarFields.EyeExitEndpoint, 0, PropFlags.Coord), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropCrane); [NetworkName("m_hPlayer")] - public EHANDLE Player = new(); + [NetworkVar] public partial NetworkHandle Player { get; } [NetworkName("m_bMagnetOn")] - public bool MagnetOn; + [NetworkVar] public partial bool MagnetOn { get; set; } [NetworkName("m_bEnterAnimOn")] - public bool EnterAnimOn; + [NetworkVar] public partial bool EnterAnimOn { get; set; } [NetworkName("m_bExitAnimOn")] - public bool ExitAnimOn; + [NetworkVar] public partial bool ExitAnimOn { get; set; } [NetworkName("m_vecEyeExitEndpoint")] - public Vector3 EyeExitEndpoint; + [NetworkVar] public partial Vector3 EyeExitEndpoint { get; set; } } diff --git a/Game.Server/PropEnergyBall.cs b/Game.Server/PropEnergyBall.cs index 0214fc4a5..0fef7b6b0 100644 --- a/Game.Server/PropEnergyBall.cs +++ b/Game.Server/PropEnergyBall.cs @@ -6,16 +6,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPropEnergyBall")] -public class PropEnergyBall : PropCombineBall +public partial class PropEnergyBall : PropCombineBall { public static readonly SendTable DT_PropEnergyBall = new(DT_PropCombineBall, [ - SendPropBool(FIELD.OF(nameof(IsInfiniteLife))), - SendPropFloat(FIELD.OF(nameof(TimeTillDeath)), 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.IsInfiniteLife), + SendPropFloat(NetworkVarFields.TimeTillDeath, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropEnergyBall); [NetworkName("m_bIsInfiniteLife")] - public bool IsInfiniteLife; + [NetworkVar] public partial bool IsInfiniteLife { get; set; } [NetworkName("m_fTimeTillDeath")] - public float TimeTillDeath; + [NetworkVar] public partial float TimeTillDeath { get; set; } } diff --git a/Game.Server/PropJeep.cs b/Game.Server/PropJeep.cs index 67b9b3326..fa9f514ca 100644 --- a/Game.Server/PropJeep.cs +++ b/Game.Server/PropJeep.cs @@ -9,35 +9,35 @@ namespace Game.Server; using FIELD_PJ = Source.FIELD; using FIELD_PJE = Source.FIELD; [NetworkName("CPropJeep")] -public class PropJeep : PropVehicleDriveable +public partial class PropJeep : PropVehicleDriveable { public static readonly SendTable DT_PropJeep = new(DT_PropVehicleDriveable, [ - SendPropBool(FIELD_PJ.OF(nameof(HeadlightIsOn))) + SendPropBool(NetworkVarFields.HeadlightIsOn) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropJeep); [NetworkName("m_bHeadlightIsOn")] - public bool HeadlightIsOn; + [NetworkVar] public partial bool HeadlightIsOn { get; set; } } [NetworkName("CPropJeepEpisodic")] -public class PropJeepEpisodic : PropJeep +public partial class PropJeepEpisodic : PropJeep { public static readonly SendTable DT_CPropJeepEpisodic = new(DT_PropJeep, [ - SendPropInt(FIELD_PJE.OF(nameof(NumRadarContacts)), 8), + SendPropInt(NetworkVarFields.NumRadarContacts, 8), - SendPropVector(FIELD_PJE.OF_SENDINFO_ARRAY(nameof(RadarContactPos)), 0, PropFlags.Coord), + SendPropVector(FIELD_PJE.OF_SENDINFO_ARRAY(PropJeepEpisodic.NetworkVarFields.RadarContactPos), 0, PropFlags.Coord), SendPropArray2(null!, 24, "m_vecRadarContactPos"), - SendPropInt(FIELD_PJE.OF_SENDINFO_ARRAY(nameof(RadarContactType)), 4), + SendPropInt(FIELD_PJE.OF_SENDINFO_ARRAY(PropJeepEpisodic.NetworkVarFields.RadarContactType), 4), SendPropArray2(null!, 24, "m_iRadarContactType"), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_CPropJeepEpisodic); [NetworkName("m_iNumRadarContacts")] - public int NumRadarContacts; + [NetworkVar] public partial int NumRadarContacts { get; set; } [NetworkName("m_vecRadarContactPos")] - public InlineArray24 RadarContactPos; + [NetworkVar] public partial NetworkArray, Vector3> RadarContactPos { get; } [NetworkName("m_iRadarContactType")] - public InlineArray24 RadarContactType; + [NetworkVar] public partial NetworkArray, int> RadarContactType { get; } } diff --git a/Game.Server/PropScalable.cs b/Game.Server/PropScalable.cs index b79776b02..f6460bebb 100644 --- a/Game.Server/PropScalable.cs +++ b/Game.Server/PropScalable.cs @@ -5,37 +5,37 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPropScalable")] -public class PropScalable : BaseAnimating +public partial class PropScalable : BaseAnimating { public static readonly SendTable DT_PropScalable = new(DT_BaseAnimating, [ - SendPropFloat(FIELD.OF(nameof(ScaleX)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScaleY)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScaleZ)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(LerpTimeX)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(LerpTimeY)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(LerpTimeZ)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(GoalTimeX)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(GoalTimeY)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(GoalTimeZ)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleX, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleY, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScaleZ, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LerpTimeX, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LerpTimeY, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LerpTimeZ, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GoalTimeX, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GoalTimeY, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GoalTimeZ, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropScalable); [NetworkName("m_flScaleX")] - public float ScaleX; + [NetworkVar] public partial float ScaleX { get; set; } [NetworkName("m_flScaleY")] - public float ScaleY; + [NetworkVar] public partial float ScaleY { get; set; } [NetworkName("m_flScaleZ")] - public float ScaleZ; + [NetworkVar] public partial float ScaleZ { get; set; } [NetworkName("m_flLerpTimeX")] - public float LerpTimeX; + [NetworkVar] public partial float LerpTimeX { get; set; } [NetworkName("m_flLerpTimeY")] - public float LerpTimeY; + [NetworkVar] public partial float LerpTimeY { get; set; } [NetworkName("m_flLerpTimeZ")] - public float LerpTimeZ; + [NetworkVar] public partial float LerpTimeZ { get; set; } [NetworkName("m_flGoalTimeX")] - public float GoalTimeX; + [NetworkVar] public partial float GoalTimeX { get; set; } [NetworkName("m_flGoalTimeY")] - public float GoalTimeY; + [NetworkVar] public partial float GoalTimeY { get; set; } [NetworkName("m_flGoalTimeZ")] - public float GoalTimeZ; + [NetworkVar] public partial float GoalTimeZ { get; set; } } diff --git a/Game.Server/PropVehicleChoreoGeneric.cs b/Game.Server/PropVehicleChoreoGeneric.cs index bfd6234ca..e01b965ac 100644 --- a/Game.Server/PropVehicleChoreoGeneric.cs +++ b/Game.Server/PropVehicleChoreoGeneric.cs @@ -1,3 +1,4 @@ +using Game.Shared; using Source.Common; using Source; using System.Numerics; @@ -7,18 +8,18 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CPropVehicleChoreoGeneric")] -public class PropVehicleChoreoGeneric : DynamicProp +public partial class PropVehicleChoreoGeneric : DynamicProp { [NetworkName("m_hPlayer")] - public EHANDLE Player; + [NetworkVar] public partial NetworkHandle Player { get; } [NetworkName("m_bEnterAnimOn")] - public bool EnterAnimOn; + [NetworkVar] public partial bool EnterAnimOn { get; set; } [NetworkName("m_bExitAnimOn")] - public bool ExitAnimOn; + [NetworkVar] public partial bool ExitAnimOn { get; set; } [NetworkName("m_bForceEyesToAttachment")] - public bool ForceEyesToAttachment; + [NetworkVar] public partial bool ForceEyesToAttachment { get; set; } [NetworkName("m_vecEyeExitEndpoint")] - public Vector3 EyeExitEndpoint; + [NetworkVar] public partial Vector3 EyeExitEndpoint { get; set; } [NetworkName("m_vehicleView.bClampEyeAngles")] public bool VehicleViewClampEyeAngles; [NetworkName("m_vehicleView.flPitchCurveZero")] @@ -41,11 +42,11 @@ public class PropVehicleChoreoGeneric : DynamicProp public float VehicleViewPitchMax; public static readonly SendTable DT_PropVehicleChoreoGeneric = new(DT_DynamicProp, [ - SendPropEHandle(FIELD.OF(nameof(Player))), - SendPropBool(FIELD.OF(nameof(EnterAnimOn))), - SendPropBool(FIELD.OF(nameof(ExitAnimOn))), - SendPropBool(FIELD.OF(nameof(ForceEyesToAttachment))), - SendPropVector(FIELD.OF(nameof(EyeExitEndpoint)), 0, PropFlags.Coord), + SendPropEHandle(NetworkVarFields.Player), + SendPropBool(NetworkVarFields.EnterAnimOn), + SendPropBool(NetworkVarFields.ExitAnimOn), + SendPropBool(NetworkVarFields.ForceEyesToAttachment), + SendPropVector(NetworkVarFields.EyeExitEndpoint, 0, PropFlags.Coord), SendPropBool(FIELD.OF(nameof(VehicleViewClampEyeAngles))), SendPropFloat(FIELD.OF(nameof(VehicleViewPitchCurveZero)), 0, PropFlags.NoScale), SendPropFloat(FIELD.OF(nameof(VehicleViewPitchCurveLinear)), 0, PropFlags.NoScale), diff --git a/Game.Server/PropVehicleDriveable.cs b/Game.Server/PropVehicleDriveable.cs index f43dda10a..6f265d2a1 100644 --- a/Game.Server/PropVehicleDriveable.cs +++ b/Game.Server/PropVehicleDriveable.cs @@ -8,51 +8,51 @@ namespace Game.Server; using FIELD = Source.FIELD; [NetworkName("CPropVehicleDriveable")] -public class PropVehicleDriveable : BaseAnimating +public partial class PropVehicleDriveable : BaseAnimating { public static readonly SendTable DT_PropVehicleDriveable = new(DT_BaseAnimating, [ - SendPropEHandle(FIELD.OF(nameof(Player))), - SendPropInt(FIELD.OF(nameof(Speed)), 8), - SendPropInt(FIELD.OF(nameof(RPM)), 13), - SendPropFloat(FIELD.OF(nameof(Throttle)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(BoostTimeLeft)), 8), - SendPropBool(FIELD.OF(nameof(HasBoost))), - SendPropBool(FIELD.OF(nameof(EnterAnimOn))), - SendPropBool(FIELD.OF(nameof(ExitAnimOn))), - SendPropBool(FIELD.OF(nameof(UnableToFire))), - SendPropVector(FIELD.OF(nameof(EyeExitEndpoint)), 0, PropFlags.Coord), - SendPropBool(FIELD.OF(nameof(HasGun))), - SendPropVector(FIELD.OF(nameof(GunCrosshair)), 0, PropFlags.Coord), - SendPropBool(FIELD.OF(nameof(Locked))), + SendPropEHandle(PropVehicleDriveable.NetworkVarFields.Player), + SendPropInt(NetworkVarFields.Speed, 8), + SendPropInt(NetworkVarFields.RPM, 13), + SendPropFloat(NetworkVarFields.Throttle, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.BoostTimeLeft, 8), + SendPropBool(NetworkVarFields.HasBoost), + SendPropBool(NetworkVarFields.EnterAnimOn), + SendPropBool(NetworkVarFields.ExitAnimOn), + SendPropBool(NetworkVarFields.UnableToFire), + SendPropVector(NetworkVarFields.EyeExitEndpoint, 0, PropFlags.Coord), + SendPropBool(NetworkVarFields.HasGun), + SendPropVector(NetworkVarFields.GunCrosshair, 0, PropFlags.Coord), + SendPropBool(NetworkVarFields.Locked), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PropVehicleDriveable); [NetworkName("m_hPlayer")] - public EHANDLE Player = new(); + [NetworkVar] public partial NetworkHandle Player { get; } [NetworkName("m_nSpeed")] - public new int Speed; + [NetworkVar] public new partial int Speed { get; set; } [NetworkName("m_nRPM")] - public int RPM; + [NetworkVar] public partial int RPM { get; set; } [NetworkName("m_flThrottle")] - public float Throttle; + [NetworkVar] public partial float Throttle { get; set; } [NetworkName("m_nBoostTimeLeft")] - public int BoostTimeLeft; + [NetworkVar] public partial int BoostTimeLeft { get; set; } [NetworkName("m_nHasBoost")] - public bool HasBoost; + [NetworkVar] public partial bool HasBoost { get; set; } public bool ScannerDisabledWeapons; public bool ScannerDisabledVehicle; [NetworkName("m_bEnterAnimOn")] - public bool EnterAnimOn; + [NetworkVar] public partial bool EnterAnimOn { get; set; } [NetworkName("m_bExitAnimOn")] - public bool ExitAnimOn; + [NetworkVar] public partial bool ExitAnimOn { get; set; } [NetworkName("m_bUnableToFire")] - public bool UnableToFire; + [NetworkVar] public partial bool UnableToFire { get; set; } [NetworkName("m_vecEyeExitEndpoint")] - public Vector3 EyeExitEndpoint; + [NetworkVar] public partial Vector3 EyeExitEndpoint { get; set; } [NetworkName("m_bHasGun")] - public bool HasGun; + [NetworkVar] public partial bool HasGun { get; set; } [NetworkName("m_vecGunCrosshair")] - public Vector3 GunCrosshair; + [NetworkVar] public partial Vector3 GunCrosshair { get; set; } [NetworkName("m_bLocked")] - public bool Locked; + [NetworkVar] public partial bool Locked { get; set; } } diff --git a/Game.Server/Props.cs b/Game.Server/Props.cs index ccea754f1..4e34ed0a7 100644 --- a/Game.Server/Props.cs +++ b/Game.Server/Props.cs @@ -65,31 +65,31 @@ public class BreakableProp : BaseProp [LinkEntityToClass("func_physbox_multiplayer")] [NetworkName("CPhysBoxMultiplayer")] -public class PhysBoxMultiplayer : PhysBox, IMultiplayerPhysics +public partial class PhysBoxMultiplayer : PhysBox, IMultiplayerPhysics { public static readonly SendTable DT_PhysBoxMultiplayer = new(DT_PhysBox, [ - SendPropInt(FIELD_PBM.OF(nameof(PhysicsMode)), 1, PropFlags.Unsigned), - SendPropFloat(FIELD_PBM.OF(nameof(Mass)), 0, PropFlags.NoScale) + SendPropInt(NetworkVarFields.PhysicsMode, 1, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Mass, 0, PropFlags.NoScale) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PhysBoxMultiplayer); [NetworkName("m_iPhysicsMode")] - public int PhysicsMode; + [NetworkVar] public partial int PhysicsMode { get; set; } [NetworkName("m_fMass")] - public float Mass; + [NetworkVar] public partial float Mass { get; set; } } [LinkEntityToClass("physics_prop")] [LinkEntityToClass("prop_physics")] [LinkEntityToClass("prop_physics_override")] [NetworkName("CPhysicsProp")] -public class PhysicsProp : BreakableProp +public partial class PhysicsProp : BreakableProp { public static readonly SendTable DT_PhysicsProp = new(DT_BreakableProp, [ - SendPropBool(FIELD_PP.OF(nameof(Awake))) + SendPropBool(NetworkVarFields.Awake) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PhysicsProp); [NetworkName("m_bAwake")] - public bool Awake; + [NetworkVar] public partial bool Awake { get; set; } public override void Spawn() { // Condense classnames to one, except for "prop_physics_override" @@ -130,49 +130,49 @@ public virtual bool CreateVPhysics() { [LinkEntityToClass("prop_dynamic")] [LinkEntityToClass("prop_dynamic_override")] [NetworkName("CDynamicProp")] -public class DynamicProp : BreakableProp +public partial class DynamicProp : BreakableProp { public static readonly SendTable DT_DynamicProp = new(DT_BreakableProp, [ - SendPropBool(FIELD_DP.OF(nameof(UseHitboxesForRenderBox))) + SendPropBool(NetworkVarFields.UseHitboxesForRenderBox) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_DynamicProp); [NetworkName("m_bUseHitboxesForRenderBox")] - public bool UseHitboxesForRenderBox; + [NetworkVar] public partial bool UseHitboxesForRenderBox { get; set; } } [LinkEntityToClass("prop_physics_multiplayer")] [NetworkName("CPhysicsPropMultiplayer")] -public class PhysicsPropMultiplayer : PhysicsProp +public partial class PhysicsPropMultiplayer : PhysicsProp { public static readonly SendTable DT_PhysicsPropMultiplayer = new(DT_PhysicsProp, [ - SendPropInt(FIELD_PPM.OF(nameof(PhysicsMode)), 2, PropFlags.Unsigned), - SendPropFloat(FIELD_PPM.OF(nameof(Mass)), 0, PropFlags.NoScale), - SendPropVector(FIELD_PPM.OF(nameof(CollisionMins)), 0, PropFlags.NoScale), - SendPropVector(FIELD_PPM.OF(nameof(CollisionMaxs)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.PhysicsMode, 2, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.Mass, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.CollisionMins, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.CollisionMaxs, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_PhysicsPropMultiplayer); [NetworkName("m_iPhysicsMode")] - public int PhysicsMode; + [NetworkVar] public partial int PhysicsMode { get; set; } [NetworkName("m_fMass")] - public float Mass; + [NetworkVar] public partial float Mass { get; set; } [NetworkName("m_collisionMins")] - public Vector3 CollisionMins; + [NetworkVar] public partial Vector3 CollisionMins { get; set; } [NetworkName("m_collisionMaxs")] - public Vector3 CollisionMaxs; + [NetworkVar] public partial Vector3 CollisionMaxs { get; set; } } [NetworkName("CBasePropDoor")] -public class BasePropDoor : DynamicProp +public partial class BasePropDoor : DynamicProp { [NetworkName("m_bLocked")] - bool Locked; + [NetworkVar] public partial bool Locked { get; set; } [NetworkName("m_eDoorState")] - int DoorState; + [NetworkVar] public partial int DoorState { get; set; } public static readonly SendTable DT_BasePropDoor = new(DT_DynamicProp, [ - SendPropBool(FIELD_BPD.OF(nameof(Locked))), - SendPropInt(FIELD_BPD.OF(nameof(DoorState)), 3, PropFlags.Unsigned) + SendPropBool(NetworkVarFields.Locked), + SendPropInt(NetworkVarFields.DoorState, 3, PropFlags.Unsigned) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BasePropDoor); } diff --git a/Game.Server/RagdollManager.cs b/Game.Server/RagdollManager.cs index 5abf0ebee..5eee00a76 100644 --- a/Game.Server/RagdollManager.cs +++ b/Game.Server/RagdollManager.cs @@ -6,13 +6,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CRagdollManager")] -public class RagdollManager : BaseEntity +public partial class RagdollManager : BaseEntity { [NetworkName("m_iCurrentMaxRagdollCount")] - public int CurrentMaxRagdollCount; + [NetworkVar] public partial int CurrentMaxRagdollCount { get; set; } public static readonly SendTable DT_RagdollManager = new([ - SendPropInt(FIELD.OF(nameof(CurrentMaxRagdollCount)), 6), + SendPropInt(NetworkVarFields.CurrentMaxRagdollCount, 6), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_RagdollManager); } diff --git a/Game.Server/RagdollProp.cs b/Game.Server/RagdollProp.cs index c08e8376a..6e348364b 100644 --- a/Game.Server/RagdollProp.cs +++ b/Game.Server/RagdollProp.cs @@ -8,16 +8,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CRagdollProp")] -public class RagdollProp : BaseAnimating +public partial class RagdollProp : BaseAnimating { const int RAGDOLL_MAX_ELEMENTS = 32; public static readonly SendTable DT_Ragdoll = new(DT_BaseAnimating, [ .. Enumerable.Range(0, RAGDOLL_MAX_ELEMENTS).Select(i => SendPropVector(FIELD.OF_ARRAYINDEX(nameof(RagPos), i), -1, PropFlags.Coord)), .. Enumerable.Range(0, RAGDOLL_MAX_ELEMENTS).Select(i => SendPropQAngles(FIELD.OF_ARRAYINDEX(nameof(RagAngles), i), 13, PropFlags.RoundDown)), - SendPropEHandle(FIELD.OF(nameof(HUnragdoll))), - SendPropFloat(FIELD.OF(nameof(BlendWeight)), 8, PropFlags.RoundDown, 0.0f, 1.0f), - SendPropInt(FIELD.OF(nameof(OverlaySequence)), 11, 0), + SendPropEHandle(RagdollProp.NetworkVarFields.HUnragdoll), + SendPropFloat(NetworkVarFields.BlendWeight, 8, PropFlags.RoundDown, 0.0f, 1.0f), + SendPropInt(NetworkVarFields.OverlaySequence, 11, 0), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Ragdoll); @@ -26,9 +26,9 @@ .. Enumerable.Range(0, RAGDOLL_MAX_ELEMENTS).Select(i => SendPropQAngles(FIELD.O [NetworkName("m_ragAngles[ {0} ]")] public InlineArray32 RagAngles; [NetworkName("m_hUnragdoll")] - public EHANDLE HUnragdoll = new(); + [NetworkVar] public partial NetworkHandle HUnragdoll { get; } [NetworkName("m_flBlendWeight")] - public float BlendWeight; + [NetworkVar] public partial float BlendWeight { get; set; } [NetworkName("m_nOverlaySequence")] - public int OverlaySequence; + [NetworkVar] public partial int OverlaySequence { get; set; } } diff --git a/Game.Server/RagdollPropAttached.cs b/Game.Server/RagdollPropAttached.cs index beef84b75..bdedb60a0 100644 --- a/Game.Server/RagdollPropAttached.cs +++ b/Game.Server/RagdollPropAttached.cs @@ -7,22 +7,22 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CRagdollPropAttached")] -public class RagdollPropAttached : RagdollProp +public partial class RagdollPropAttached : RagdollProp { [NetworkName("m_boneIndexAttached")] - public int BoneIndexAttached; + [NetworkVar] public partial int BoneIndexAttached { get; set; } [NetworkName("m_ragdollAttachedObjectIndex")] - public int RagdollAttachedObjectIndex; + [NetworkVar] public partial int RagdollAttachedObjectIndex { get; set; } [NetworkName("m_attachmentPointBoneSpace")] - public Vector3 AttachmentPointBoneSpace; + [NetworkVar] public partial Vector3 AttachmentPointBoneSpace { get; set; } [NetworkName("m_attachmentPointRagdollSpace")] - public Vector3 AttachmentPointRagdollSpace; + [NetworkVar] public partial Vector3 AttachmentPointRagdollSpace { get; set; } public static readonly SendTable DT_Ragdoll_Attached = new(DT_Ragdoll, [ - SendPropInt(FIELD.OF(nameof(BoneIndexAttached)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(RagdollAttachedObjectIndex)), 6, PropFlags.Unsigned), - SendPropVector(FIELD.OF(nameof(AttachmentPointBoneSpace)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(AttachmentPointRagdollSpace)), 0, PropFlags.Coord), + SendPropInt(NetworkVarFields.BoneIndexAttached, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.RagdollAttachedObjectIndex, 6, PropFlags.Unsigned), + SendPropVector(NetworkVarFields.AttachmentPointBoneSpace, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.AttachmentPointRagdollSpace, 0, PropFlags.Coord), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_Ragdoll_Attached); } diff --git a/Game.Server/RocketTrail.cs b/Game.Server/RocketTrail.cs index 71f839cbd..c2b02d011 100644 --- a/Game.Server/RocketTrail.cs +++ b/Game.Server/RocketTrail.cs @@ -5,55 +5,55 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("RocketTrail")] -public class RocketTrail : BaseParticleEntity +public partial class RocketTrail : BaseParticleEntity { public static readonly SendTable DT_RocketTrail = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnRate)), 8, 0, 1, 1024), - SendPropVector(FIELD.OF(nameof(StartColor)), 8, 0, 0, 1), - SendPropVector(FIELD.OF(nameof(EndColor)), 8, 0, 0, 1), - SendPropFloat(FIELD.OF(nameof(ParticleLifetime)), 16, PropFlags.RoundUp, 0.1f, 100), - SendPropFloat(FIELD.OF(nameof(StopEmitTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpawnRadius)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropInt(FIELD.OF(nameof(Attachment)), 12, 0), - SendPropFloat(FIELD.OF(nameof(Opacity)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Damaged))), - SendPropFloat(FIELD.OF(nameof(FlareScale)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRate, 8, 0, 1, 1024), + SendPropVector(NetworkVarFields.StartColor, 8, 0, 0, 1), + SendPropVector(NetworkVarFields.EndColor, 8, 0, 0, 1), + SendPropFloat(NetworkVarFields.ParticleLifetime, 16, PropFlags.RoundUp, 0.1f, 100), + SendPropFloat(NetworkVarFields.StopEmitTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRadius, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropInt(NetworkVarFields.Attachment, 12, 0), + SendPropFloat(NetworkVarFields.Opacity, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Damaged), + SendPropFloat(NetworkVarFields.FlareScale, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_RocketTrail); [NetworkName("m_SpawnRate")] - public float SpawnRate; + [NetworkVar] public partial float SpawnRate { get; set; } [NetworkName("m_StartColor")] - public Vector3 StartColor; + [NetworkVar] public partial Vector3 StartColor { get; set; } [NetworkName("m_EndColor")] - public Vector3 EndColor; + [NetworkVar] public partial Vector3 EndColor { get; set; } [NetworkName("m_ParticleLifetime")] - public float ParticleLifetime; + [NetworkVar] public partial float ParticleLifetime { get; set; } [NetworkName("m_StopEmitTime")] - public float StopEmitTime; + [NetworkVar] public partial float StopEmitTime { get; set; } [NetworkName("m_MinSpeed")] - public float MinSpeed; + [NetworkVar] public partial float MinSpeed { get; set; } [NetworkName("m_MaxSpeed")] - public float MaxSpeed; + [NetworkVar] public partial float MaxSpeed { get; set; } [NetworkName("m_StartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_EndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_SpawnRadius")] - public float SpawnRadius; + [NetworkVar] public partial float SpawnRadius { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_nAttachment")] - public int Attachment; + [NetworkVar] public partial int Attachment { get; set; } [NetworkName("m_Opacity")] - public float Opacity; + [NetworkVar] public partial float Opacity { get; set; } [NetworkName("m_bDamaged")] - public bool Damaged; + [NetworkVar] public partial bool Damaged { get; set; } [NetworkName("m_flFlareScale")] - public float FlareScale; + [NetworkVar] public partial float FlareScale { get; set; } } diff --git a/Game.Server/Rope.cs b/Game.Server/Rope.cs index 624b48c84..dd9f7a763 100644 --- a/Game.Server/Rope.cs +++ b/Game.Server/Rope.cs @@ -11,72 +11,72 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CRopeKeyframe")] -public class RopeKeyframe : BaseEntity +public partial class RopeKeyframe : BaseEntity { public static readonly SendTable DT_RopeKeyframe = new([ - SendPropEHandle(FIELD.OF(nameof(StartPoint))), - SendPropEHandle(FIELD.OF(nameof(EndPoint))), - SendPropInt(FIELD.OF(nameof(StartAttachment)), 5), - SendPropInt(FIELD.OF(nameof(EndAttachment)), 5), - SendPropInt(FIELD.OF(nameof(StartBone)), 5), - SendPropInt(FIELD.OF(nameof(EndBone)), 5), - SendPropVector(FIELD.OF(nameof(StartOffset)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(EndOffset)), 0, PropFlags.Coord), - SendPropInt(FIELD.OF(nameof(RenderColor)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Slack)), 12), - SendPropInt(FIELD.OF(nameof(RopeLength)), 15), - SendPropInt(FIELD.OF(nameof(LockedPoints)), 4, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(RopeFlags)), 9, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Segments)), 4, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(ConstrainBetweenEndpoints))), - SendPropInt(FIELD.OF(nameof(RopeMaterialModelIndex)), 16, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Subdiv)), 4, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(TextureScale)), 10, 0, 0.1f, 10.0f), - SendPropFloat(FIELD.OF(nameof(Width)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ScrollSpeed)), 0, PropFlags.NoScale), - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.Coord), + SendPropEHandle(RopeKeyframe.NetworkVarFields.StartPoint), + SendPropEHandle(RopeKeyframe.NetworkVarFields.EndPoint), + SendPropInt(NetworkVarFields.StartAttachment, 5), + SendPropInt(NetworkVarFields.EndAttachment, 5), + SendPropInt(NetworkVarFields.StartBone, 5), + SendPropInt(NetworkVarFields.EndBone, 5), + SendPropVector(NetworkVarFields.StartOffset, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.EndOffset, 0, PropFlags.Coord), + SendPropInt(NetworkVarFields.RenderColor, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Slack, 12), + SendPropInt(NetworkVarFields.RopeLength, 15), + SendPropInt(NetworkVarFields.LockedPoints, 4, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.RopeFlags, 9, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Segments, 4, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.ConstrainBetweenEndpoints), + SendPropInt(NetworkVarFields.RopeMaterialModelIndex, 16, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Subdiv, 4, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.TextureScale, 10, 0, 0.1f, 10.0f), + SendPropFloat(NetworkVarFields.Width, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ScrollSpeed, 0, PropFlags.NoScale), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.Coord), SendPropEHandle(FIELD.OF(nameof(MoveParent))), - SendPropInt(FIELD.OF(nameof(ParentAttachment)), 8, PropFlags.Unsigned), + SendPropInt(BaseEntity.NetworkVarFields.ParentAttachment, 8, PropFlags.Unsigned), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_RopeKeyframe); [NetworkName("m_hStartPoint")] - public EHANDLE StartPoint = new(); + [NetworkVar] public partial NetworkHandle StartPoint { get; } [NetworkName("m_hEndPoint")] - public EHANDLE EndPoint = new(); + [NetworkVar] public partial NetworkHandle EndPoint { get; } [NetworkName("m_iStartAttachment")] - public int StartAttachment; + [NetworkVar] public partial int StartAttachment { get; set; } [NetworkName("m_iEndAttachment")] - public int EndAttachment; + [NetworkVar] public partial int EndAttachment { get; set; } [NetworkName("m_iStartBone")] - public int StartBone; + [NetworkVar] public partial int StartBone { get; set; } [NetworkName("m_iEndBone")] - public int EndBone; + [NetworkVar] public partial int EndBone { get; set; } [NetworkName("m_vecStartOffset")] - public Vector3 StartOffset; + [NetworkVar] public partial Vector3 StartOffset { get; set; } [NetworkName("m_vecEndOffset")] - public Vector3 EndOffset; + [NetworkVar] public partial Vector3 EndOffset { get; set; } [NetworkName("m_clrRender")] - public Color RenderColor; + [NetworkVar] public partial Color RenderColor { get; set; } [NetworkName("m_Slack")] - public int Slack; + [NetworkVar] public partial int Slack { get; set; } [NetworkName("m_RopeLength")] - public int RopeLength; + [NetworkVar] public partial int RopeLength { get; set; } [NetworkName("m_fLockedPoints")] - public int LockedPoints; + [NetworkVar] public partial int LockedPoints { get; set; } [NetworkName("m_RopeFlags")] - public int RopeFlags; + [NetworkVar] public partial int RopeFlags { get; set; } [NetworkName("m_nSegments")] - public int Segments; + [NetworkVar] public partial int Segments { get; set; } [NetworkName("m_bConstrainBetweenEndpoints")] - public bool ConstrainBetweenEndpoints; + [NetworkVar] public partial bool ConstrainBetweenEndpoints { get; set; } [NetworkName("m_iRopeMaterialModelIndex")] - public int RopeMaterialModelIndex; + [NetworkVar] public partial int RopeMaterialModelIndex { get; set; } [NetworkName("m_Subdiv")] - public int Subdiv; + [NetworkVar] public partial int Subdiv { get; set; } [NetworkName("m_TextureScale")] - public float TextureScale; + [NetworkVar] public partial float TextureScale { get; set; } [NetworkName("m_Width")] - public float Width; + [NetworkVar] public partial float Width { get; set; } [NetworkName("m_flScrollSpeed")] - public float ScrollSpeed; + [NetworkVar] public partial float ScrollSpeed { get; set; } } diff --git a/Game.Server/RotorWashEmitter.cs b/Game.Server/RotorWashEmitter.cs index f1d5179bf..89b916e7d 100644 --- a/Game.Server/RotorWashEmitter.cs +++ b/Game.Server/RotorWashEmitter.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CRotorWashEmitter")] -public class RotorWashEmitter : BaseEntity +public partial class RotorWashEmitter : BaseEntity { public static readonly SendTable DT_RotorWashEmitter = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Altitude)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Altitude, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_RotorWashEmitter); [NetworkName("m_flAltitude")] - public float Altitude; + [NetworkVar] public partial float Altitude { get; set; } } diff --git a/Game.Server/SceneEntity.cs b/Game.Server/SceneEntity.cs index ff50975d5..1821f6061 100644 --- a/Game.Server/SceneEntity.cs +++ b/Game.Server/SceneEntity.cs @@ -6,29 +6,29 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CSceneEntity")] -public class SceneEntity : BaseEntity +public partial class SceneEntity : BaseEntity { public const int MAX_ACTORS_IN_SCENE = 16; [NetworkName("m_nSceneStringIndex")] - public int SceneStringIndex; + [NetworkVar] public partial int SceneStringIndex { get; set; } [NetworkName("m_bIsPlayingBack")] - public bool IsPlayingBack; + [NetworkVar] public partial bool IsPlayingBack { get; set; } [NetworkName("m_bPaused")] - public bool Paused; + [NetworkVar] public partial bool Paused { get; set; } [NetworkName("m_bMultiplayer")] - public bool Multiplayer; + [NetworkVar] public partial bool Multiplayer { get; set; } [NetworkName("m_flForceClientTime")] - public float ForceClientTime; + [NetworkVar] public partial float ForceClientTime { get; set; } [NetworkName("m_hActorList")] readonly List ActorList = []; public static readonly SendTable DT_SceneEntity = new([ - SendPropInt(FIELD.OF(nameof(SceneStringIndex)), 12, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(IsPlayingBack))), - SendPropBool(FIELD.OF(nameof(Paused))), - SendPropBool(FIELD.OF(nameof(Multiplayer))), - SendPropFloat(FIELD.OF(nameof(ForceClientTime)), 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.SceneStringIndex, 12, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.IsPlayingBack), + SendPropBool(NetworkVarFields.Paused), + SendPropBool(NetworkVarFields.Multiplayer), + SendPropFloat(NetworkVarFields.ForceClientTime, 0, PropFlags.NoScale), SendPropList(FIELD.OF(nameof(ActorList)), MAX_ACTORS_IN_SCENE, SendPropEHandle()), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_SceneEntity); diff --git a/Game.Server/ScriptIntro.cs b/Game.Server/ScriptIntro.cs index 8aff84277..e22c0227d 100644 --- a/Game.Server/ScriptIntro.cs +++ b/Game.Server/ScriptIntro.cs @@ -1,3 +1,4 @@ +using Game.Shared; using Source.Common; using Source; using System.Numerics; @@ -7,62 +8,62 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CScriptIntro")] -public class ScriptIntro : BaseEntity +public partial class ScriptIntro : BaseEntity { [NetworkName("m_vecCameraView")] - public Vector3 CameraView; + [NetworkVar] public partial Vector3 CameraView { get; set; } [NetworkName("m_vecCameraViewAngles")] - public Vector3 CameraViewAngles; + [NetworkVar] public partial Vector3 CameraViewAngles { get; set; } [NetworkName("m_iBlendMode")] - public int BlendMode; + [NetworkVar] public partial int BlendMode { get; set; } [NetworkName("m_iNextBlendMode")] - public int NextBlendMode; + [NetworkVar] public partial int NextBlendMode { get; set; } [NetworkName("m_flNextBlendTime")] - public Vector3 NextBlendTime; + [NetworkVar] public partial Vector3 NextBlendTime { get; set; } [NetworkName("m_flBlendStartTime")] - public Vector3 BlendStartTime; + [NetworkVar] public partial Vector3 BlendStartTime { get; set; } [NetworkName("m_bActive")] - public bool Active; + [NetworkVar] public partial bool Active { get; set; } [NetworkName("m_iFOV")] - public int FOV; + [NetworkVar] public partial int FOV { get; set; } [NetworkName("m_iNextFOV")] - public int NextFOV; + [NetworkVar] public partial int NextFOV { get; set; } [NetworkName("m_iStartFOV")] - public int StartFOV; + [NetworkVar] public partial int StartFOV { get; set; } [NetworkName("m_flNextFOVBlendTime")] - public Vector3 NextFOVBlendTime; + [NetworkVar] public partial Vector3 NextFOVBlendTime { get; set; } [NetworkName("m_flFOVBlendStartTime")] - public Vector3 FOVBlendStartTime; + [NetworkVar] public partial Vector3 FOVBlendStartTime { get; set; } [NetworkName("m_bAlternateFOV")] - public bool AlternateFOV; + [NetworkVar] public partial bool AlternateFOV { get; set; } [NetworkName("m_flFadeAlpha")] - public float FadeAlpha; + [NetworkVar] public partial float FadeAlpha { get; set; } [NetworkName("m_flFadeColor")] - public InlineArray3 FadeColor; + [NetworkVar] public partial NetworkArray, float> FadeColor { get; } [NetworkName("m_flFadeDuration")] - public float FadeDuration; + [NetworkVar] public partial float FadeDuration { get; set; } [NetworkName("m_hCameraEntity")] - public EHANDLE CameraEntity; + [NetworkVar] public partial NetworkHandle CameraEntity { get; } public static readonly SendTable DT_ScriptIntro = new(DT_BaseEntity, [ - SendPropVector(FIELD.OF(nameof(CameraView)), 0, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(CameraViewAngles)), 0, PropFlags.Coord), - SendPropInt(FIELD.OF(nameof(BlendMode)), 5), - SendPropInt(FIELD.OF(nameof(NextBlendMode)), 5), - SendPropVectorXY(FIELD.OF(nameof(NextBlendTime)), 0, PropFlags.NoScale), - SendPropVectorXY(FIELD.OF(nameof(BlendStartTime)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Active))), - SendPropInt(FIELD.OF(nameof(FOV)), 9), - SendPropInt(FIELD.OF(nameof(NextFOV)), 9), - SendPropInt(FIELD.OF(nameof(StartFOV)), 9), - SendPropVectorXY(FIELD.OF(nameof(NextFOVBlendTime)), 0, PropFlags.NoScale), - SendPropVectorXY(FIELD.OF(nameof(FOVBlendStartTime)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(AlternateFOV))), - SendPropFloat(FIELD.OF(nameof(FadeAlpha)), 10), - SendPropFloat(FIELD.OF_SENDINFO_ARRAY(nameof(FadeColor)), 0, PropFlags.NoScale), - SendPropArray(FIELD.OF_ARRAY(nameof(FadeColor))), - SendPropFloat(FIELD.OF(nameof(FadeDuration)), 10, PropFlags.RoundDown, 0.0f, 255.0f), - SendPropEHandle(FIELD.OF(nameof(CameraEntity))), + SendPropVector(NetworkVarFields.CameraView, 0, PropFlags.Coord), + SendPropVector(NetworkVarFields.CameraViewAngles, 0, PropFlags.Coord), + SendPropInt(NetworkVarFields.BlendMode, 5), + SendPropInt(NetworkVarFields.NextBlendMode, 5), + SendPropVectorXY(NetworkVarFields.NextBlendTime, 0, PropFlags.NoScale), + SendPropVectorXY(NetworkVarFields.BlendStartTime, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Active), + SendPropInt(NetworkVarFields.FOV, 9), + SendPropInt(NetworkVarFields.NextFOV, 9), + SendPropInt(NetworkVarFields.StartFOV, 9), + SendPropVectorXY(NetworkVarFields.NextFOVBlendTime, 0, PropFlags.NoScale), + SendPropVectorXY(NetworkVarFields.FOVBlendStartTime, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.AlternateFOV), + SendPropFloat(NetworkVarFields.FadeAlpha, 10), + SendPropFloat(FIELD.OF_SENDINFO_ARRAY(ScriptIntro.NetworkVarFields.FadeColor), 0, PropFlags.NoScale), + SendPropArray(ScriptIntro.NetworkVarFields.FadeColor), + SendPropFloat(NetworkVarFields.FadeDuration, 10, PropFlags.RoundDown, 0.0f, 255.0f), + SendPropEHandle(NetworkVarFields.CameraEntity), ]); public static new readonly ServerClass ServerClass = new ServerClass(DT_ScriptIntro); } diff --git a/Game.Server/ShadowControl.cs b/Game.Server/ShadowControl.cs index ed9d1a847..717506732 100644 --- a/Game.Server/ShadowControl.cs +++ b/Game.Server/ShadowControl.cs @@ -9,25 +9,25 @@ namespace Game.Server; using FIELD = Source.FIELD; [NetworkName("CShadowControl")] -public class ShadowControl : BaseEntity +public partial class ShadowControl : BaseEntity { public static readonly SendTable DT_ShadowControl = new([ - SendPropVector(FIELD.OF(nameof(ShadowDirection)), -1, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(ShadowColor)), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(ShadowMaxDist)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(DisableShadows))), - SendPropBool(FIELD.OF(nameof(EnableLocalLightShadows))), + SendPropVector(NetworkVarFields.ShadowDirection, -1, PropFlags.NoScale), + SendPropInt(NetworkVarFields.ShadowColor, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.ShadowMaxDist, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.DisableShadows), + SendPropBool(NetworkVarFields.EnableLocalLightShadows), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_ShadowControl); [NetworkName("m_shadowDirection")] - public Vector3 ShadowDirection; + [NetworkVar] public partial Vector3 ShadowDirection { get; set; } [NetworkName("m_shadowColor")] - public Color ShadowColor; + [NetworkVar] public partial Color ShadowColor { get; set; } [NetworkName("m_flShadowMaxDist")] - public float ShadowMaxDist; + [NetworkVar] public partial float ShadowMaxDist { get; set; } [NetworkName("m_bDisableShadows")] - public bool DisableShadows; + [NetworkVar] public partial bool DisableShadows { get; set; } [NetworkName("m_bEnableLocalLightShadows")] - public bool EnableLocalLightShadows; + [NetworkVar] public partial bool EnableLocalLightShadows { get; set; } } \ No newline at end of file diff --git a/Game.Server/SlideshowDisplay.cs b/Game.Server/SlideshowDisplay.cs index 4719c44bd..326842d4c 100644 --- a/Game.Server/SlideshowDisplay.cs +++ b/Game.Server/SlideshowDisplay.cs @@ -5,34 +5,34 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CSlideshowDisplay")] -public class SlideshowDisplay : BaseEntity +public partial class SlideshowDisplay : BaseEntity { public static readonly SendTable DT_SlideshowDisplay = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(Enabled))), + SendPropBool(NetworkVarFields.Enabled), SendPropString(FIELD.OF(nameof(DisplayText))), SendPropString(FIELD.OF(nameof(SlideshowDirectory))), - SendPropArray3(FIELD.OF_ARRAY(nameof(ChCurrentSlideLists)), SendPropInt(FIELD.OF_ARRAYINDEX(nameof(ChCurrentSlideLists), 0), 8, PropFlags.Unsigned)), - SendPropFloat(FIELD.OF(nameof(MinSlideTime)), 11, 0, 0.0f, 20.0f), - SendPropFloat(FIELD.OF(nameof(MaxSlideTime)), 11, 0, 0.0f, 20.0f), - SendPropInt(FIELD.OF(nameof(CycleType)), 2, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(NoListRepeats))), + SendPropArray3(SlideshowDisplay.NetworkVarFields.ChCurrentSlideLists, SendPropInt(SlideshowDisplay.NetworkVarFields.ChCurrentSlideLists.AtIndex(0)!, 8, PropFlags.Unsigned)), + SendPropFloat(NetworkVarFields.MinSlideTime, 11, 0, 0.0f, 20.0f), + SendPropFloat(NetworkVarFields.MaxSlideTime, 11, 0, 0.0f, 20.0f), + SendPropInt(NetworkVarFields.CycleType, 2, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.NoListRepeats), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SlideshowDisplay); [NetworkName("m_bEnabled")] - public bool Enabled; + [NetworkVar] public partial bool Enabled { get; set; } [NetworkName("m_szDisplayText")] public InlineArray128 DisplayText; [NetworkName("m_szSlideshowDirectory")] public InlineArray128 SlideshowDirectory; [NetworkName("m_chCurrentSlideLists")] - public InlineArray16 ChCurrentSlideLists; + [NetworkVar] public partial NetworkArray, byte> ChCurrentSlideLists { get; } [NetworkName("m_fMinSlideTime")] - public float MinSlideTime; + [NetworkVar] public partial float MinSlideTime { get; set; } [NetworkName("m_fMaxSlideTime")] - public float MaxSlideTime; + [NetworkVar] public partial float MaxSlideTime { get; set; } [NetworkName("m_iCycleType")] - public int CycleType; + [NetworkVar] public partial int CycleType { get; set; } [NetworkName("m_bNoListRepeats")] - public bool NoListRepeats; + [NetworkVar] public partial bool NoListRepeats { get; set; } } diff --git a/Game.Server/SmokeStack.cs b/Game.Server/SmokeStack.cs index aa87cdd97..49b8d2970 100644 --- a/Game.Server/SmokeStack.cs +++ b/Game.Server/SmokeStack.cs @@ -15,48 +15,48 @@ public struct SmokeStackLightInfo{ } [NetworkName("CSmokeStack")] -public class SmokeStack : BaseParticleEntity +public partial class SmokeStack : BaseParticleEntity { public static readonly SendTable DT_SmokeStack = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpreadSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Speed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Rate)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(JetLength)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropFloat(FIELD.OF(nameof(BaseSpread)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(RollSpeed)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpreadSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Speed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Rate, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.JetLength, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropFloat(NetworkVarFields.BaseSpread, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.RollSpeed, 0, PropFlags.NoScale), SendPropVector(FIELD.OF("DirLight.Pos"), 0, PropFlags.NoScale), SendPropVector(FIELD.OF("DirLight.Color"), 0, PropFlags.NoScale), SendPropFloat(FIELD.OF("DirLight.Intensity"), 0, PropFlags.NoScale), SendPropVector(FIELD.OF("AmbientLight.Pos"), 0, PropFlags.NoScale), SendPropVector(FIELD.OF("AmbientLight.Color"), 0, PropFlags.NoScale), SendPropFloat(FIELD.OF("AmbientLight.Intensity"), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(Wind)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Twist)), 0, PropFlags.NoScale), - SendPropIntWithMinusOneFlag(FIELD.OF(nameof(MaterialModel)), 16), + SendPropVector(NetworkVarFields.Wind, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Twist, 0, PropFlags.NoScale), + SendPropIntWithMinusOneFlag(NetworkVarFields.MaterialModel, 16), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SmokeStack); [NetworkName("m_SpreadSpeed")] - public float SpreadSpeed; + [NetworkVar] public partial float SpreadSpeed { get; set; } [NetworkName("m_Speed")] - public new float Speed; + [NetworkVar] public new partial float Speed { get; set; } [NetworkName("m_StartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_EndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_Rate")] - public float Rate; + [NetworkVar] public partial float Rate { get; set; } [NetworkName("m_JetLength")] - public float JetLength; + [NetworkVar] public partial float JetLength { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_flBaseSpread")] - public float BaseSpread; + [NetworkVar] public partial float BaseSpread { get; set; } [NetworkName("m_flRollSpeed")] - public float RollSpeed; + [NetworkVar] public partial float RollSpeed { get; set; } [NetworkName("m_AmbientLight")] public SmokeStackLightInfo AmbientLight; @@ -64,9 +64,9 @@ public class SmokeStack : BaseParticleEntity public SmokeStackLightInfo DirLight; [NetworkName("m_vWind")] - public Vector3 Wind; + [NetworkVar] public partial Vector3 Wind { get; set; } [NetworkName("m_flTwist")] - public float Twist; + [NetworkVar] public partial float Twist { get; set; } [NetworkName("m_iMaterialModel")] - public int MaterialModel; + [NetworkVar] public partial int MaterialModel { get; set; } } diff --git a/Game.Server/SmokeTrail.cs b/Game.Server/SmokeTrail.cs index 3a7cc2c9b..2199c4298 100644 --- a/Game.Server/SmokeTrail.cs +++ b/Game.Server/SmokeTrail.cs @@ -5,55 +5,55 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("SmokeTrail")] -public class SmokeTrail : BaseParticleEntity +public partial class SmokeTrail : BaseParticleEntity { public static readonly SendTable DT_SmokeTrail = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnRate)), 8, 0, 1, 1024), - SendPropVector(FIELD.OF(nameof(StartColor)), 8, 0, 0, 1), - SendPropVector(FIELD.OF(nameof(EndColor)), 8, 0, 0, 1), - SendPropFloat(FIELD.OF(nameof(ParticleLifetime)), 16, PropFlags.RoundUp, 0.1f, 100), - SendPropFloat(FIELD.OF(nameof(StopEmitTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinDirectedSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxDirectedSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpawnRadius)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropInt(FIELD.OF(nameof(Attachment)), 12, 0), - SendPropFloat(FIELD.OF(nameof(Opacity)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRate, 8, 0, 1, 1024), + SendPropVector(NetworkVarFields.StartColor, 8, 0, 0, 1), + SendPropVector(NetworkVarFields.EndColor, 8, 0, 0, 1), + SendPropFloat(NetworkVarFields.ParticleLifetime, 16, PropFlags.RoundUp, 0.1f, 100), + SendPropFloat(NetworkVarFields.StopEmitTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinDirectedSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxDirectedSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRadius, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropInt(NetworkVarFields.Attachment, 12, 0), + SendPropFloat(NetworkVarFields.Opacity, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SmokeTrail); [NetworkName("m_SpawnRate")] - public float SpawnRate; + [NetworkVar] public partial float SpawnRate { get; set; } [NetworkName("m_StartColor")] - public Vector3 StartColor; + [NetworkVar] public partial Vector3 StartColor { get; set; } [NetworkName("m_EndColor")] - public Vector3 EndColor; + [NetworkVar] public partial Vector3 EndColor { get; set; } [NetworkName("m_ParticleLifetime")] - public float ParticleLifetime; + [NetworkVar] public partial float ParticleLifetime { get; set; } [NetworkName("m_StopEmitTime")] - public float StopEmitTime; + [NetworkVar] public partial float StopEmitTime { get; set; } [NetworkName("m_MinSpeed")] - public float MinSpeed; + [NetworkVar] public partial float MinSpeed { get; set; } [NetworkName("m_MaxSpeed")] - public float MaxSpeed; + [NetworkVar] public partial float MaxSpeed { get; set; } [NetworkName("m_MinDirectedSpeed")] - public float MinDirectedSpeed; + [NetworkVar] public partial float MinDirectedSpeed { get; set; } [NetworkName("m_MaxDirectedSpeed")] - public float MaxDirectedSpeed; + [NetworkVar] public partial float MaxDirectedSpeed { get; set; } [NetworkName("m_StartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_EndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_SpawnRadius")] - public float SpawnRadius; + [NetworkVar] public partial float SpawnRadius { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_nAttachment")] - public int Attachment; + [NetworkVar] public partial int Attachment { get; set; } [NetworkName("m_Opacity")] - public float Opacity; + [NetworkVar] public partial float Opacity { get; set; } } diff --git a/Game.Server/Sound.cs b/Game.Server/Sound.cs index 3fe2092a0..faf51c636 100644 --- a/Game.Server/Sound.cs +++ b/Game.Server/Sound.cs @@ -302,13 +302,13 @@ public static void UTIL_RestartAmbientSounds() { } [LinkEntityToClass("ambient_generic")] -public class AmbientGeneric : PointEntity +public partial class AmbientGeneric : PointEntity { public const int SF_AMBIENT_SOUND_EVERYWHERE = 1; public const int SF_AMBIENT_SOUND_START_SILENT = 16; public const int SF_AMBIENT_SOUND_NOT_LOOPING = 32; - public float Radius; + [NetworkVar] public partial float Radius { get; set; } public float MaxRadius; public SoundLevel SoundLevel; // dB value public DynPitchVol Dpv; diff --git a/Game.Server/Soundscape.cs b/Game.Server/Soundscape.cs index 98178d971..e20594573 100644 --- a/Game.Server/Soundscape.cs +++ b/Game.Server/Soundscape.cs @@ -25,12 +25,12 @@ public struct SoundscapeUpdate // ----------------------------------------------------------------------------- // [LinkEntityToClass("env_soundscape")] -public class EnvSoundscape : PointEntity +public partial class EnvSoundscape : PointEntity { public static readonly ConVar soundscape_debug = new("soundscape_debug", "0", FCvar.Cheat, "When on, draws lines to all env_soundscape entities. Green lines show the active soundscape, red lines show soundscapes that aren't in range, and white lines show soundscapes that are in range, but not the active soundscape."); public OutputEvent OnPlay = new(); - public float Radius; + [NetworkVar] public partial float Radius { get; set; } public string? SoundscapeName; public int SoundscapeIndex; public int SoundscapeEntityId; @@ -40,7 +40,7 @@ public class EnvSoundscape : PointEntity // those of this soundscape. public Handle ProxySoundscape = new(); - bool Disabled; + [NetworkVar] public partial bool Disabled { get; set; } public static readonly new DataMap DataDesc = new(typeof(EnvSoundscape), PointEntity.DataDesc, [ DEFINE.KEYFIELD(nameof(Radius), FieldType.Float, "radius"), @@ -152,7 +152,7 @@ public override EdictFlags UpdateTransmitState() { return SetTransmitState(EdictFlags.Always); } - public void WriteAudioParamsTo(ref AudioParams audio) { + public void WriteAudioParamsTo(AudioParams.NetworkVar audio) { audio.Ent.Set(this); audio.SoundscapeIndex = SoundscapeIndex; audio.LocalBits = 0; @@ -162,7 +162,7 @@ public void WriteAudioParamsTo(ref AudioParams audio) { BaseEntity? entity = gEntList.FindEntityByName(null, PositionNames[i], this, this); if (entity != null) { audio.LocalBits |= 1 << i; - audio.LocalSound[i] = entity.GetAbsOrigin(); + audio.LocalSound.Set(i, entity.GetAbsOrigin()); } } } @@ -210,8 +210,8 @@ public void UpdateForPlayer(ref SoundscapeUpdate update) { Util.TraceLine(target, update.PlayerPosition, Mask.SolidBrushOnly | Mask.Water, update.Player, Source.CollisionGroup.None, out Trace tr); if (tr.Fraction == 1 && !tr.StartSolid) { - ref AudioParams audio = ref update.Player!.GetAudioParams(); - WriteAudioParamsTo(ref audio); + AudioParams.NetworkVar audio = update.Player!.GetAudioParams(); + WriteAudioParamsTo(audio); update.CurrentSoundscape = this; update.InRange = true; update.CurrentDistance = range; @@ -226,7 +226,7 @@ public void UpdateForPlayer(ref SoundscapeUpdate update) { DebugOverlay.Box(GetAbsOrigin(), new(-10, -10, -10), new(10, 10, 10), 255, 0, 255, 64, persist); if (update.Player != null) { - ref AudioParams audio = ref update.Player.GetAudioParams(); + AudioParams.NetworkVar audio = update.Player.GetAudioParams(); if (audio.Ent.Get() != this) { if (InRangeOfPlayer(update.Player)) DebugOverlay.Line(GetAbsOrigin(), update.Player.WorldSpaceCenter(), 255, 255, 255, true, persist); @@ -345,7 +345,7 @@ public void DelegateStartTouch(BaseEntity ent) { // Add us to the player's list of soundscapes and player.TriggerSoundscapeList.Insert(0, new EHANDLE().Set(this)); - WriteAudioParamsTo(ref player.GetAudioParams()); + WriteAudioParamsTo(player.GetAudioParams()); } public void DelegateEndTouch(BaseEntity ent) { @@ -357,7 +357,7 @@ public void DelegateEndTouch(BaseEntity ent) { while (player.TriggerSoundscapeList.Count > 0) { if (player.TriggerSoundscapeList[0].Get() is EnvSoundscapeTriggerable ss) { // Make this one current. - ss.WriteAudioParamsTo(ref player.GetAudioParams()); + ss.WriteAudioParamsTo(player.GetAudioParams()); return; } else diff --git a/Game.Server/SoundscapeSystem.cs b/Game.Server/SoundscapeSystem.cs index 9075c6789..f180c5aba 100644 --- a/Game.Server/SoundscapeSystem.cs +++ b/Game.Server/SoundscapeSystem.cs @@ -315,7 +315,7 @@ public override void FrameUpdatePostEntityThink() { if (player != null && player.IsNetClient()) { // check to see if this is the sound entity that is // currently affecting this player - ref AudioParams audio = ref player.GetAudioParams(); + AudioParams.NetworkVar audio = player.GetAudioParams(); // if we got this far, we're looking at an entity that is contending // for current player sound. the closest entity to player wins. diff --git a/Game.Server/SpatialEntity.cs b/Game.Server/SpatialEntity.cs index ffdb3271e..52f89d802 100644 --- a/Game.Server/SpatialEntity.cs +++ b/Game.Server/SpatialEntity.cs @@ -5,23 +5,23 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CSpatialEntity")] -public class SpatialEntity : BaseEntity +public partial class SpatialEntity : BaseEntity { public static readonly SendTable DT_SpatialEntity = new([ - SendPropVector(NetworkVarFields.Origin, 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinFalloff)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxFalloff)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(CurWeight)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Enabled))), + SendPropVector(BaseEntity.NetworkVarFields.Origin, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinFalloff, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxFalloff, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.CurWeight, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Enabled), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SpatialEntity); [NetworkName("m_MinFalloff")] - public float MinFalloff; + [NetworkVar] public partial float MinFalloff { get; set; } [NetworkName("m_MaxFalloff")] - public float MaxFalloff; + [NetworkVar] public partial float MaxFalloff { get; set; } [NetworkName("m_flCurWeight")] - public float CurWeight; + [NetworkVar] public partial float CurWeight { get; set; } [NetworkName("m_bEnabled")] - public bool Enabled; + [NetworkVar] public partial bool Enabled { get; set; } } diff --git a/Game.Server/SporeExplosion.cs b/Game.Server/SporeExplosion.cs index c00ae245b..316cafeeb 100644 --- a/Game.Server/SporeExplosion.cs +++ b/Game.Server/SporeExplosion.cs @@ -5,31 +5,31 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("SporeExplosion")] -public class SporeExplosion : BaseParticleEntity +public partial class SporeExplosion : BaseParticleEntity { public static readonly SendTable DT_SporeExplosion = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnRate)), 8, 0, 1, 1024), - SendPropFloat(FIELD.OF(nameof(ParticleLifetime)), 16, PropFlags.RoundUp, 0.1f, 100), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpawnRadius)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropBool(FIELD.OF(nameof(DontRemove))), + SendPropFloat(NetworkVarFields.SpawnRate, 8, 0, 1, 1024), + SendPropFloat(NetworkVarFields.ParticleLifetime, 16, PropFlags.RoundUp, 0.1f, 100), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRadius, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropBool(NetworkVarFields.DontRemove), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SporeExplosion); [NetworkName("m_flSpawnRate")] - public float SpawnRate; + [NetworkVar] public partial float SpawnRate { get; set; } [NetworkName("m_flParticleLifetime")] - public float ParticleLifetime; + [NetworkVar] public partial float ParticleLifetime { get; set; } [NetworkName("m_flStartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_flEndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_flSpawnRadius")] - public float SpawnRadius; + [NetworkVar] public partial float SpawnRadius { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_bDontRemove")] - public bool DontRemove; + [NetworkVar] public partial bool DontRemove { get; set; } } diff --git a/Game.Server/SporeTrail.cs b/Game.Server/SporeTrail.cs index cd321332e..f41d4aa73 100644 --- a/Game.Server/SporeTrail.cs +++ b/Game.Server/SporeTrail.cs @@ -6,31 +6,31 @@ namespace Game.Server; using FIELD = FIELD; [LinkEntityToClass("env_sporetrail")] [NetworkName("SporeTrail")] -public class SporeTrail : BaseParticleEntity +public partial class SporeTrail : BaseParticleEntity { public static readonly SendTable DT_SporeTrail = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpawnRate)), 8, 0, 1, 1024), - SendPropVector(FIELD.OF(nameof(EndColor)), 8, 0, 0, 1), - SendPropFloat(FIELD.OF(nameof(ParticleLifetime)), 16, PropFlags.RoundUp, 0.1f, 100), - SendPropFloat(FIELD.OF(nameof(StartSize)), -1, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), -1, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpawnRadius)), -1, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), + SendPropFloat(NetworkVarFields.SpawnRate, 8, 0, 1, 1024), + SendPropVector(NetworkVarFields.EndColor, 8, 0, 0, 1), + SendPropFloat(NetworkVarFields.ParticleLifetime, 16, PropFlags.RoundUp, 0.1f, 100), + SendPropFloat(NetworkVarFields.StartSize, -1, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, -1, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpawnRadius, -1, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SporeTrail); [NetworkName("m_flSpawnRate")] - public float SpawnRate; + [NetworkVar] public partial float SpawnRate { get; set; } [NetworkName("m_vecEndColor")] - public Vector3 EndColor; + [NetworkVar] public partial Vector3 EndColor { get; set; } [NetworkName("m_flParticleLifetime")] - public float ParticleLifetime; + [NetworkVar] public partial float ParticleLifetime { get; set; } [NetworkName("m_flStartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_flEndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_flSpawnRadius")] - public float SpawnRadius; + [NetworkVar] public partial float SpawnRadius { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } } diff --git a/Game.Server/SpotlightEnd.cs b/Game.Server/SpotlightEnd.cs index bfe98d010..191677ca7 100644 --- a/Game.Server/SpotlightEnd.cs +++ b/Game.Server/SpotlightEnd.cs @@ -9,16 +9,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CSpotlightEnd")] -public class SpotlightEnd : BaseEntity +public partial class SpotlightEnd : BaseEntity { public static readonly SendTable DT_SpotlightEnd = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(LightScale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Radius)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LightScale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Radius, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SpotlightEnd); [NetworkName("m_flLightScale")] - public float LightScale; + [NetworkVar] public partial float LightScale { get; set; } [NetworkName("m_Radius")] - public float Radius; + [NetworkVar] public partial float Radius { get; set; } } diff --git a/Game.Server/SteamJet.cs b/Game.Server/SteamJet.cs index b6d0beebd..38fdad258 100644 --- a/Game.Server/SteamJet.cs +++ b/Game.Server/SteamJet.cs @@ -5,43 +5,43 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CSteamJet")] -public class SteamJet : BaseParticleEntity +public partial class SteamJet : BaseParticleEntity { public static readonly SendTable DT_SteamJet = new(DT_BaseParticleEntity, [ - SendPropFloat(FIELD.OF(nameof(SpreadSpeed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Speed)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndSize)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Rate)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(JetLength)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(Emit))), - SendPropBool(FIELD.OF(nameof(FaceLeft))), - SendPropInt(FIELD.OF(nameof(Type)), 2, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Spawnflags)), 8, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(RollSpeed)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpreadSpeed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Speed, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndSize, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Rate, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.JetLength, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.Emit), + SendPropBool(NetworkVarFields.FaceLeft), + SendPropInt(NetworkVarFields.Type, 2, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Spawnflags, 8, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.RollSpeed, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_SteamJet); [NetworkName("m_SpreadSpeed")] - public float SpreadSpeed; + [NetworkVar] public partial float SpreadSpeed { get; set; } [NetworkName("m_Speed")] - public new float Speed; + [NetworkVar] public new partial float Speed { get; set; } [NetworkName("m_StartSize")] - public float StartSize; + [NetworkVar] public partial float StartSize { get; set; } [NetworkName("m_EndSize")] - public float EndSize; + [NetworkVar] public partial float EndSize { get; set; } [NetworkName("m_Rate")] - public float Rate; + [NetworkVar] public partial float Rate { get; set; } [NetworkName("m_JetLength")] - public float JetLength; + [NetworkVar] public partial float JetLength { get; set; } [NetworkName("m_bEmit")] - public bool Emit; + [NetworkVar] public partial bool Emit { get; set; } [NetworkName("m_bFaceLeft")] - public bool FaceLeft; + [NetworkVar] public partial bool FaceLeft { get; set; } [NetworkName("m_nType")] - public int Type; + [NetworkVar] public partial int Type { get; set; } [NetworkName("m_spawnflags")] - public int Spawnflags; + [NetworkVar] public partial int Spawnflags { get; set; } [NetworkName("m_flRollSpeed")] - public float RollSpeed; + [NetworkVar] public partial float RollSpeed { get; set; } } diff --git a/Game.Server/Sun.cs b/Game.Server/Sun.cs index 93a275930..54728df66 100644 --- a/Game.Server/Sun.cs +++ b/Game.Server/Sun.cs @@ -10,36 +10,36 @@ namespace Game.Server; [LinkEntityToClass("env_sun")] [NetworkName("CSun")] -public class Sun : BaseEntity +public partial class Sun : BaseEntity { public static readonly SendTable DT_Sun = new([ - SendPropInt(FIELD.OF(nameof(Render)), 32, PropFlags.Unsigned, SendProxy_Color32ToInt), - SendPropInt(FIELD.OF(nameof(Overlay)), 32, PropFlags.Unsigned, SendProxy_Color32ToInt), - SendPropVector(FIELD.OF(nameof(Direction)), 0, PropFlags.Normal), - SendPropInt(FIELD.OF(nameof(On)), 1, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Size)), 10, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OverlaySize)), 10, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(Material)), 32, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OverlayMaterial)), 32, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(HDRColorScale)), 0, PropFlags.NoScale, 0.0f, 100.0f), + SendPropInt(NetworkVarFields.Render, 32, PropFlags.Unsigned, SendProxy_Color32ToInt), + SendPropInt(NetworkVarFields.Overlay, 32, PropFlags.Unsigned, SendProxy_Color32ToInt), + SendPropVector(NetworkVarFields.Direction, 0, PropFlags.Normal), + SendPropInt(NetworkVarFields.On, 1, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Size, 10, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.OverlaySize, 10, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.Material, 32, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.OverlayMaterial, 32, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.HDRColorScale, 0, PropFlags.NoScale, 0.0f, 100.0f), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Sun); [NetworkName("m_clrRender")] - public Color Render; + [NetworkVar] public partial Color Render { get; set; } [NetworkName("m_clrOverlay")] - public Color Overlay; + [NetworkVar] public partial Color Overlay { get; set; } [NetworkName("m_vDirection")] - public Vector3 Direction; + [NetworkVar] public partial Vector3 Direction { get; set; } [NetworkName("m_bOn")] - public bool On; + [NetworkVar] public partial bool On { get; set; } [NetworkName("m_nSize")] - public int Size; + [NetworkVar] public partial int Size { get; set; } [NetworkName("m_nOverlaySize")] - public int OverlaySize; + [NetworkVar] public partial int OverlaySize { get; set; } [NetworkName("m_nMaterial")] - public int Material; + [NetworkVar] public partial int Material { get; set; } [NetworkName("m_nOverlayMaterial")] - public int OverlayMaterial; - public int HDRColorScale; + [NetworkVar] public partial int OverlayMaterial { get; set; } + [NetworkVar] public partial int HDRColorScale { get; set; } } diff --git a/Game.Server/Team.cs b/Game.Server/Team.cs index 3af72c0ab..9128cc58e 100644 --- a/Game.Server/Team.cs +++ b/Game.Server/Team.cs @@ -22,12 +22,12 @@ public static class TeamGlobals } [NetworkName("CTeam")] -public class Team : BaseEntity +public partial class Team : BaseEntity { public static readonly SendTable DT_Team = new([ SendPropInt(FIELD.OF(nameof(TeamNum)), 5), - SendPropInt(FIELD.OF(nameof(Score)), 0), - SendPropInt(FIELD.OF(nameof(RoundsWon)), 8), + SendPropInt(NetworkVarFields.Score, 0), + SendPropInt(NetworkVarFields.RoundsWon, 8), SendPropString(FIELD.OF(nameof(Teamname))), SendPropInt("player_array_element", 10, PropFlags.Unsigned, SendProxy_PlayerList, 4), @@ -65,9 +65,9 @@ public void RemovePlayer(BasePlayer player) { [NetworkName("m_szTeamname")] public InlineArray32 Teamname; [NetworkName("m_iScore")] - public int Score; + [NetworkVar] public partial int Score { get; set; } [NetworkName("m_iRoundsWon")] - public int RoundsWon; + [NetworkVar] public partial int RoundsWon { get; set; } public int Deaths; public int LastSpawn; [NetworkName("m_iTeamNum")] diff --git a/Game.Server/Tesla.cs b/Game.Server/Tesla.cs index c74e7cbcc..9b8315345 100644 --- a/Game.Server/Tesla.cs +++ b/Game.Server/Tesla.cs @@ -5,16 +5,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CTesla")] -public class Tesla : BaseEntity +public partial class Tesla : BaseEntity { public static readonly SendTable DT_Tesla = new(DT_BaseEntity, [ - SendPropString(FIELD.OF(nameof(SoundName))), - SendPropString(FIELD.OF(nameof(SpriteName))), + SendPropStringT(NetworkVarFields.SoundName), + SendPropStringT(NetworkVarFields.SpriteName) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_Tesla); [NetworkName("m_SoundName")] - public InlineArray64 SoundName; + [NetworkVar] public partial string? SoundName { get; set; } [NetworkName("m_iszSpriteName")] - public InlineArray256 SpriteName; + [NetworkVar] public partial string? SpriteName { get; set; } } diff --git a/Game.Server/Triggers.cs b/Game.Server/Triggers.cs index e5ff317d0..7af32604f 100644 --- a/Game.Server/Triggers.cs +++ b/Game.Server/Triggers.cs @@ -88,17 +88,17 @@ public static bool IsTakingTriggerHurtDamageAtPoint(in Vector3 vecPoint) { [LinkEntityToClass("trigger")] [NetworkName("CBaseTrigger")] -public class BaseTrigger : BaseToggle +public partial class BaseTrigger : BaseToggle { public static readonly SendTable DT_BaseTrigger = new(DT_BaseToggle, [ - SendPropBool(FIELD_BT.OF(nameof(ClientSidePredicted))), - SendPropInt(FIELD_BT.OF(nameof(SpawnFlags)), 32, PropFlags.NoScale) + SendPropBool(NetworkVarFields.ClientSidePredicted), + SendPropInt(BaseEntity.NetworkVarFields.SpawnFlags, 32, PropFlags.NoScale) ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_BaseTrigger); [NetworkName("m_bClientSidePredicted")] - public bool ClientSidePredicted; + [NetworkVar] public partial bool ClientSidePredicted { get; set; } - public bool Disabled; + [NetworkVar] public partial bool Disabled { get; set; } public string? FilterName; public Handle Filter = new(); @@ -1616,7 +1616,7 @@ void MeasureThink() { } [LinkEntityToClass("logic_proximity")] -public class LogicProximity : PointEntity; +public partial class LogicProximity : PointEntity; // ################################################################################## // >> TriggerImpact @@ -1625,12 +1625,12 @@ public class LogicProximity : PointEntity; // // ################################################################################## [LinkEntityToClass("trigger_impact")] -public class TriggerImpact : TriggerMultiple +public partial class TriggerImpact : TriggerMultiple { const float TRIGGERIMPACT_VIEWKICK_SCALE = 0.1f; - float Magnitude; - float Noise; + [NetworkVar] public partial float Magnitude { get; set; } + [NetworkVar] public partial float Noise { get; set; } float Viewkick; // Outputs @@ -1739,10 +1739,10 @@ public override void EndTouch(BaseEntity? other) { // Purpose: A trigger that adds impulse to touching entities //----------------------------------------------------------------------------- [LinkEntityToClass("trigger_apply_impulse")] -public class TriggerApplyImpulse : BaseTrigger +public partial class TriggerApplyImpulse : BaseTrigger { Vector3 ImpulseDir; - float Force; + [NetworkVar] public partial float Force { get; set; } public static readonly new DataMap DataDesc = new(typeof(TriggerApplyImpulse), BaseTrigger.DataDesc, [ DEFINE.KEYFIELD(nameof(ImpulseDir), FieldType.Vector, "impulse_dir"), diff --git a/Game.Server/VGuiScreen.cs b/Game.Server/VGuiScreen.cs index be15d62bc..f20220750 100644 --- a/Game.Server/VGuiScreen.cs +++ b/Game.Server/VGuiScreen.cs @@ -5,31 +5,31 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CVGuiScreen")] -public class VGuiScreen : BaseEntity +public partial class VGuiScreen : BaseEntity { public static readonly SendTable DT_VGuiScreen = new(DT_BaseEntity, [ - SendPropFloat(FIELD.OF(nameof(Width)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(Height)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(AttachmentIndex)), 5, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(PanelName)), 8, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(ScreenFlags)), 5, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(OverlayMaterial)), 10, PropFlags.Unsigned), - SendPropEHandle(FIELD.OF(nameof(HPlayerOwner))), + SendPropFloat(NetworkVarFields.Width, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.Height, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.AttachmentIndex, 5, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.PanelName, 8, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.ScreenFlags, 5, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.OverlayMaterial, 10, PropFlags.Unsigned), + SendPropEHandle(VGuiScreen.NetworkVarFields.HPlayerOwner), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_VGuiScreen); [NetworkName("m_flWidth")] - public float Width; + [NetworkVar] public partial float Width { get; set; } [NetworkName("m_flHeight")] - public float Height; + [NetworkVar] public partial float Height { get; set; } [NetworkName("m_nAttachmentIndex")] - public int AttachmentIndex; + [NetworkVar] public partial int AttachmentIndex { get; set; } [NetworkName("m_nPanelName")] - public int PanelName; + [NetworkVar] public partial int PanelName { get; set; } [NetworkName("m_fScreenFlags")] - public int ScreenFlags; + [NetworkVar] public partial int ScreenFlags { get; set; } [NetworkName("m_nOverlayMaterial")] - public int OverlayMaterial; + [NetworkVar] public partial int OverlayMaterial { get; set; } [NetworkName("m_hPlayerOwner")] - public EHANDLE HPlayerOwner = new(); + [NetworkVar] public partial NetworkHandle HPlayerOwner { get; } } diff --git a/Game.Server/VortigauntChargeToken.cs b/Game.Server/VortigauntChargeToken.cs index 2d37e1f0e..05dae1ff5 100644 --- a/Game.Server/VortigauntChargeToken.cs +++ b/Game.Server/VortigauntChargeToken.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CVortigauntChargeToken")] -public class VortigauntChargeToken : BaseEntity +public partial class VortigauntChargeToken : BaseEntity { public static readonly SendTable DT_VortigauntChargeToken = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(FadeOut))), + SendPropBool(NetworkVarFields.FadeOut), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_VortigauntChargeToken); [NetworkName("m_bFadeOut")] - public bool FadeOut; + [NetworkVar] public partial bool FadeOut { get; set; } } diff --git a/Game.Server/VortigauntEffectDispel.cs b/Game.Server/VortigauntEffectDispel.cs index 6e8360427..b542809f3 100644 --- a/Game.Server/VortigauntEffectDispel.cs +++ b/Game.Server/VortigauntEffectDispel.cs @@ -5,13 +5,13 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CVortigauntEffectDispel")] -public class VortigauntEffectDispel : BaseEntity +public partial class VortigauntEffectDispel : BaseEntity { public static readonly SendTable DT_VortigauntEffectDispel = new(DT_BaseEntity, [ - SendPropBool(FIELD.OF(nameof(FadeOut))), + SendPropBool(NetworkVarFields.FadeOut), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_VortigauntEffectDispel); [NetworkName("m_bFadeOut")] - public bool FadeOut; + [NetworkVar] public partial bool FadeOut { get; set; } } diff --git a/Game.Server/WaterLODControl.cs b/Game.Server/WaterLODControl.cs index 064fbdea0..03de286b1 100644 --- a/Game.Server/WaterLODControl.cs +++ b/Game.Server/WaterLODControl.cs @@ -8,16 +8,16 @@ namespace Game.Server; using FIELD = FIELD; [NetworkName("CWaterLODControl")] -public class WaterLODControl : BaseEntity +public partial class WaterLODControl : BaseEntity { public static readonly SendTable DT_WaterLODControl = new([ - SendPropFloat(FIELD.OF(nameof(CheapWaterStartDistance)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(CheapWaterEndDistance)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.CheapWaterStartDistance, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.CheapWaterEndDistance, 0, PropFlags.NoScale), ]); public static readonly new ServerClass ServerClass = new ServerClass(DT_WaterLODControl); [NetworkName("m_flCheapWaterStartDistance")] - public float CheapWaterStartDistance; + [NetworkVar] public partial float CheapWaterStartDistance { get; set; } [NetworkName("m_flCheapWaterEndDistance")] - public float CheapWaterEndDistance; + [NetworkVar] public partial float CheapWaterEndDistance { get; set; } } diff --git a/Game.Server/World.cs b/Game.Server/World.cs index bf9e8824f..7e0c0260b 100644 --- a/Game.Server/World.cs +++ b/Game.Server/World.cs @@ -20,21 +20,21 @@ public static class WorldGlobals [LinkEntityToClass("worldspawn")] [NetworkName("CWorld")] -public class World : BaseEntity +public partial class World : BaseEntity { public static World? g_WorldEntity { get; private set; } public override int RequiredEdictIndex() => 0; public static SendTable DT_WORLD = new([ SendPropDataTable("baseclass", DT_BaseEntity), - SendPropVector(FIELD.OF(nameof(WorldMins)), -1, PropFlags.Coord), - SendPropVector(FIELD.OF(nameof(WorldMaxs)), -1, PropFlags.Coord), - SendPropInt(FIELD.OF(nameof(StartDark)), 1, PropFlags.Unsigned), - SendPropFloat(FIELD.OF(nameof(MaxOccludeeArea)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinOccluderArea)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MaxPropScreenSpaceWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(MinPropScreenSpaceWidth)), 0, PropFlags.NoScale), - SendPropStringT(FIELD.OF(nameof(DetailSpriteMaterial))), + SendPropVector(NetworkVarFields.WorldMins, -1, PropFlags.Coord), + SendPropVector(NetworkVarFields.WorldMaxs, -1, PropFlags.Coord), + SendPropInt(NetworkVarFields.StartDark, 1, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.MaxOccludeeArea, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinOccluderArea, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MaxPropScreenSpaceWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.MinPropScreenSpaceWidth, 0, PropFlags.NoScale), + SendPropStringT(NetworkVarFields.DetailSpriteMaterial), ]); public World() { @@ -149,20 +149,20 @@ public override void Spawn() { public static readonly new ServerClass ServerClass = new ServerClass(DT_WORLD); float WaveHeight; [NetworkName("m_WorldMins")] - Vector3 WorldMins; + [NetworkVar] public partial Vector3 WorldMins { get; set; } [NetworkName("m_WorldMaxs")] - Vector3 WorldMaxs; + [NetworkVar] public partial Vector3 WorldMaxs { get; set; } [NetworkName("m_bStartDark")] - bool StartDark; + [NetworkVar] public partial bool StartDark { get; set; } [NetworkName("m_flMaxOccludeeArea")] - float MaxOccludeeArea; + [NetworkVar] public partial float MaxOccludeeArea { get; set; } [NetworkName("m_flMinOccluderArea")] - float MinOccluderArea; + [NetworkVar] public partial float MinOccluderArea { get; set; } [NetworkName("m_flMaxPropScreenSpaceWidth")] - float MaxPropScreenSpaceWidth; + [NetworkVar] public partial float MaxPropScreenSpaceWidth { get; set; } [NetworkName("m_flMinPropScreenSpaceWidth")] - float MinPropScreenSpaceWidth; + [NetworkVar] public partial float MinPropScreenSpaceWidth { get; set; } [NetworkName("m_iszDetailSpriteMaterial")] - string? DetailSpriteMaterial; + [NetworkVar] public partial string? DetailSpriteMaterial { get; set; } bool ColdWorld; } diff --git a/Game.Shared/BaseGrenade.cs b/Game.Shared/BaseGrenade.cs index 4383a9c3e..c849c2aef 100644 --- a/Game.Shared/BaseGrenade.cs +++ b/Game.Shared/BaseGrenade.cs @@ -27,12 +27,12 @@ public static readonly RecvPropVector(FIELD.OF(nameof(Velocity))), RecvPropInt(FIELD.OF(nameof(Flags))) #else - SendPropFloat(FIELD.OF(nameof(Damage)), 10, PropFlags.RoundDown, 0, 256), - SendPropFloat(FIELD.OF(nameof(DmgRadius)), 10, PropFlags.RoundDown, 0, 1024), - SendPropBool(FIELD.OF(nameof(IsLive))), - SendPropEHandle(FIELD.OF(nameof(Thrower))), + SendPropFloat(NetworkVarFields.Damage, 10, PropFlags.RoundDown, 0, 256), + SendPropFloat(NetworkVarFields.DmgRadius, 10, PropFlags.RoundDown, 0, 1024), + SendPropBool(NetworkVarFields.IsLive), + SendPropEHandle(BaseGrenade.NetworkVarFields.Thrower), SendPropVector(FIELD.OF(nameof(Velocity)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(Flags)), 16, PropFlags.Unsigned) + SendPropInt(NetworkVarFields.Flags, 16, PropFlags.Unsigned) #endif ]); #if CLIENT_DLL @@ -41,14 +41,14 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_BaseGrenade); #endif [NetworkName("m_flDamage")] - public float Damage; + [NetworkVar] public partial float Damage { get; set; } [NetworkName("m_DmgRadius")] - public float DmgRadius; + [NetworkVar] public partial float DmgRadius { get; set; } [NetworkName("m_bIsLive")] - public bool IsLive; + [NetworkVar] public partial bool IsLive { get; set; } [NetworkName("m_hThrower")] - public EHANDLE Thrower = new(); + [NetworkVar] public partial NetworkHandle Thrower { get; } [NetworkName("m_fFlags")] - public int Flags; + [NetworkVar] public partial int Flags { get; set; } } #endif diff --git a/Game.Shared/BasePlayerShared.cs b/Game.Shared/BasePlayerShared.cs index 6b2c849fd..f22d81b95 100644 --- a/Game.Shared/BasePlayerShared.cs +++ b/Game.Shared/BasePlayerShared.cs @@ -260,7 +260,11 @@ protected void CacheVehicleView() { PassengerRole role = vehicle.GetPassengerRole(this); // Get our view for this frame +#if CLIENT_DLL vehicle.GetVehicleViewPosition(role, out VehicleViewOrigin, out VehicleViewAngles, out VehicleViewFOV); +#else + vehicle.GetVehicleViewPosition(role, out VehicleViewOrigin, out VehicleViewAngles, out VehicleViewFOVForModify()); +#endif VehicleViewSavedFrame = (int)gpGlobals.FrameCount; #if CLIENT_DLL diff --git a/Game.Shared/Beam.cs b/Game.Shared/Beam.cs index 8f4ab3018..c036d4503 100644 --- a/Game.Shared/Beam.cs +++ b/Game.Shared/Beam.cs @@ -49,7 +49,7 @@ public static readonly RecvPropPredictableId(FIELD.OF(nameof(PredictableID))), RecvPropBool(FIELD.OF(nameof(b_IsPlayerSimulated))) #else - SendPropPredictableId(FIELD.OF(nameof(PredictableId))), + SendPropPredictableId(BaseEntity.NetworkVarFields.PredictableId), SendPropBool(FIELD.OF(nameof(b_IsPlayerSimulated))) #endif ]); diff --git a/Game.Shared/CollisionProperty.cs b/Game.Shared/CollisionProperty.cs index 6d9d4ea5e..528140b10 100644 --- a/Game.Shared/CollisionProperty.cs +++ b/Game.Shared/CollisionProperty.cs @@ -161,7 +161,7 @@ public void UnlockPartitionForRead() { readonly ThreadLocal ReadLockCount = new(); } -public class CollisionProperty : ICollideable +public partial class CollisionProperty : ICollideable { #if CLIENT_DLL public static readonly DataMap PredMap = new(typeof(CollisionProperty), [ @@ -220,35 +220,35 @@ private static void SendProxy_Solid(SendProp prop, object instance, IFieldAccess #endif [NetworkName("m_vecMinsPreScaled")] - public Vector3 MinsPreScaled; + [NetworkVar] public partial Vector3 MinsPreScaled { get; set; } [NetworkName("m_vecMaxsPreScaled")] - public Vector3 MaxsPreScaled; + [NetworkVar] public partial Vector3 MaxsPreScaled { get; set; } [NetworkName("m_vecMins")] - public Vector3 Mins; + [NetworkVar] public partial Vector3 Mins { get; set; } [NetworkName("m_vecMaxs")] - public Vector3 Maxs; + [NetworkVar] public partial Vector3 Maxs { get; set; } public Vector3 Size; float Radius; [NetworkName("m_usSolidFlags")] - public ushort SolidFlags; + [NetworkVar] public partial ushort SolidFlags { get; set; } SpatialPartitionHandle_t Partition = PARTITION_INVALID_HANDLE; [NetworkName("m_nSurroundType")] - byte SurroundType; + [NetworkVar] private partial byte SurroundType { get; set; } [NetworkName("m_nSolidType")] - public byte SolidType; + [NetworkVar] public partial byte SolidType { get; set; } [NetworkName("m_triggerBloat")] - public byte TriggerBloat; + [NetworkVar] public partial byte TriggerBloat { get; set; } Vector3 SurroundingMins; Vector3 SurroundingMaxs; [NetworkName("m_vecSpecifiedSurroundingMinsPreScaled")] - Vector3 SpecifiedSurroundingMinsPreScaled; + [NetworkVar] private partial Vector3 SpecifiedSurroundingMinsPreScaled { get; set; } [NetworkName("m_vecSpecifiedSurroundingMaxsPreScaled")] - Vector3 SpecifiedSurroundingMaxsPreScaled; + [NetworkVar] private partial Vector3 SpecifiedSurroundingMaxsPreScaled { get; set; } [NetworkName("m_vecSpecifiedSurroundingMins")] - Vector3 SpecifiedSurroundingMins; + [NetworkVar] private partial Vector3 SpecifiedSurroundingMins { get; set; } [NetworkName("m_vecSpecifiedSurroundingMaxs")] - Vector3 SpecifiedSurroundingMaxs; + [NetworkVar] private partial Vector3 SpecifiedSurroundingMaxs { get; set; } public void UseTriggerBounds(bool enable, float bloat) { Assert(bloat <= 127.0f); @@ -456,8 +456,8 @@ void ComputeSurroundingBox(out Vector3 vecWorldMins, out Vector3 vecWorldMaxs) { break; case SurroundingBoundsType.UseSpecifiedBounds: - MathLib.VectorAdd(in GetCollisionOrigin(), in SpecifiedSurroundingMins, out vecWorldMins); - MathLib.VectorAdd(in GetCollisionOrigin(), in SpecifiedSurroundingMaxs, out vecWorldMaxs); + MathLib.VectorAdd(in GetCollisionOrigin(), in __nv_SpecifiedSurroundingMins, out vecWorldMins); + MathLib.VectorAdd(in GetCollisionOrigin(), in __nv_SpecifiedSurroundingMaxs, out vecWorldMaxs); break; case SurroundingBoundsType.UseGameCode: @@ -487,12 +487,12 @@ public void MarkSurroundingBoundsDirty() { public IHandleEntity? GetEntityHandle() => Outer; - public ref readonly Vector3 OBBMinsPreScaled() => ref MinsPreScaled; + public ref readonly Vector3 OBBMinsPreScaled() => ref __nv_MinsPreScaled; - public ref readonly Vector3 OBBMaxsPreScaled() => ref MaxsPreScaled; + public ref readonly Vector3 OBBMaxsPreScaled() => ref __nv_MaxsPreScaled; - public ref readonly Vector3 OBBMins() => ref Mins; - public ref readonly Vector3 OBBMaxs() => ref Maxs; + public ref readonly Vector3 OBBMins() => ref __nv_Mins; + public ref readonly Vector3 OBBMaxs() => ref __nv_Maxs; //----------------------------------------------------------------------------- // Returns the center in OBB space @@ -607,7 +607,7 @@ public void CollisionAABBToWorldAABB(in Vector3 entityMins, in Vector3 entityMax MathLib.TransformAABB(in CollisionToWorldTransform(), in entityMins, in entityMaxs, out worldMins, out worldMaxs); } - public void WorldSpaceAABB(out Vector3 worldMins, out Vector3 worldMaxs) => CollisionAABBToWorldAABB(in Mins, in Maxs, out worldMins, out worldMaxs); + public void WorldSpaceAABB(out Vector3 worldMins, out Vector3 worldMaxs) => CollisionAABBToWorldAABB(in __nv_Mins, in __nv_Maxs, out worldMins, out worldMaxs); public SolidType GetSolid() => (SolidType)SolidType; @@ -843,10 +843,10 @@ internal void UpdatePartition() { public void Init(BaseEntity entity) { Outer = entity; - MinsPreScaled.Init(); - MaxsPreScaled.Init(); - Mins.Init(); - Maxs.Init(); + MinsPreScaledForModify().Init(); + MaxsPreScaledForModify().Init(); + MinsForModify().Init(); + MaxsForModify().Init(); Radius = 0.0f; TriggerBloat = 0; SolidFlags = 0; @@ -855,10 +855,10 @@ public void Init(BaseEntity entity) { SurroundType = (int)SurroundingBoundsType.UseOBBCollisionBounds; SurroundingMins = vec3_origin; SurroundingMaxs = vec3_origin; - SpecifiedSurroundingMinsPreScaled.Init(); - SpecifiedSurroundingMaxsPreScaled.Init(); - SpecifiedSurroundingMins.Init(); - SpecifiedSurroundingMaxs.Init(); + SpecifiedSurroundingMinsPreScaledForModify().Init(); + SpecifiedSurroundingMaxsPreScaledForModify().Init(); + SpecifiedSurroundingMinsForModify().Init(); + SpecifiedSurroundingMaxsForModify().Init(); } BaseEntity Outer = null!; @@ -882,18 +882,18 @@ public void Init(BaseEntity entity) { #else public static SendTable DT_CollisionProperty = new(nameof(DT_CollisionProperty), [ - SendPropVector(FIELD.OF(nameof(MinsPreScaled)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(MaxsPreScaled)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(Mins)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(Maxs)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(SolidType)), 3, PropFlags.Unsigned, SendProxy_Solid), - SendPropInt(FIELD.OF(nameof(SolidFlags)), (int)Source.SolidFlags.MaxBits, PropFlags.Unsigned, SendProxy_SolidFlags), - SendPropInt(FIELD.OF(nameof(SurroundType)), (int)SurroundingBoundsType.BitCount, PropFlags.Unsigned), - SendPropInt(FIELD.OF(nameof(TriggerBloat)), 0, PropFlags.Unsigned), - SendPropVector(FIELD.OF(nameof(SpecifiedSurroundingMinsPreScaled)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(SpecifiedSurroundingMaxsPreScaled)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(SpecifiedSurroundingMins)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(SpecifiedSurroundingMaxs)), 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.MinsPreScaled, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.MaxsPreScaled, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.Mins, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.Maxs, 0, PropFlags.NoScale), + SendPropInt(CollisionProperty.NetworkVarFields.SolidType, 3, PropFlags.Unsigned, SendProxy_Solid), + SendPropInt(CollisionProperty.NetworkVarFields.SolidFlags, (int)Source.SolidFlags.MaxBits, PropFlags.Unsigned, SendProxy_SolidFlags), + SendPropInt(CollisionProperty.NetworkVarFields.SurroundType, (int)SurroundingBoundsType.BitCount, PropFlags.Unsigned), + SendPropInt(CollisionProperty.NetworkVarFields.TriggerBloat, 0, PropFlags.Unsigned), + SendPropVector(CollisionProperty.NetworkVarFields.SpecifiedSurroundingMinsPreScaled, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.SpecifiedSurroundingMaxsPreScaled, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.SpecifiedSurroundingMins, 0, PropFlags.NoScale), + SendPropVector(CollisionProperty.NetworkVarFields.SpecifiedSurroundingMaxs, 0, PropFlags.NoScale), ]); diff --git a/Game.Shared/EHandle.cs b/Game.Shared/EHandle.cs index 132594676..9de824808 100644 --- a/Game.Shared/EHandle.cs +++ b/Game.Shared/EHandle.cs @@ -25,3 +25,40 @@ public static void Set(this Handle handle, Handle entity) where T : IHa handle.Index = entity.Index; } } + +public readonly ref struct NetworkHandle where T : IHandleEntity +{ + readonly ref Handle Value; + readonly INetworkStateChanged? Outer; + readonly IFieldAccessor Field; + + public NetworkHandle(ref Handle value, INetworkStateChanged? outer, IFieldAccessor field) { + Value = ref value; + Outer = outer; + Field = field; + } + + public T? Get() => Value.Get(); + public uint Index => Value.Index; + public bool IsValid() => Value.IsValid(); + public int GetEntryIndex() => Value.GetEntryIndex(); + public int GetSerialNumber() => Value.GetSerialNumber(); + + public Handle Set(IHandleEntity? entity) => Set(new Handle().Set(entity)); + + public Handle Set(Handle other) { + if (Value.Index != other.Index) { + Outer?.NetworkStateChanged(Field); + Value.Index = other.Index; + } + return Value; + } + + public ref Handle GetForModify() { + Outer?.NetworkStateChanged(Field); + return ref Value; + } + + public static implicit operator Handle(NetworkHandle handle) => handle.Value; + public static implicit operator BaseHandle(NetworkHandle handle) => handle.Value; +} diff --git a/Game.Shared/EnvWindShared.cs b/Game.Shared/EnvWindShared.cs index c948ede68..78da0d37d 100644 --- a/Game.Shared/EnvWindShared.cs +++ b/Game.Shared/EnvWindShared.cs @@ -5,37 +5,37 @@ namespace Game.Shared; -public class EnvWindShared +public partial class EnvWindShared { [NetworkName("m_flStartTime")] - public float StartTime; + [NetworkVar] public partial float StartTime { get; set; } [NetworkName("m_iWindSeed")] - public int WindSeed; + [NetworkVar] public partial int WindSeed { get; set; } [NetworkName("m_iMinWind")] - public int MinWind; + [NetworkVar] public partial int MinWind { get; set; } [NetworkName("m_iMaxWind")] - public int MaxWind; + [NetworkVar] public partial int MaxWind { get; set; } [NetworkName("m_iMinGust")] - public int MinGust; + [NetworkVar] public partial int MinGust { get; set; } [NetworkName("m_iMaxGust")] - public int MaxGust; + [NetworkVar] public partial int MaxGust { get; set; } [NetworkName("m_flMinGustDelay")] - public float MinGustDelay; + [NetworkVar] public partial float MinGustDelay { get; set; } [NetworkName("m_flMaxGustDelay")] - public float MaxGustDelay; + [NetworkVar] public partial float MaxGustDelay { get; set; } [NetworkName("m_flGustDuration")] - public float GustDuration; + [NetworkVar] public partial float GustDuration { get; set; } [NetworkName("m_iGustDirChange")] - public int GustDirChange; + [NetworkVar] public partial int GustDirChange { get; set; } public int GustSound; public int WindDir; public float WindSpeed; [NetworkName("m_iInitialWindDir")] - public int InitialWindDir; + [NetworkVar] public partial int InitialWindDir { get; set; } [NetworkName("m_flInitialWindSpeed")] - public float InitialWindSpeed; + [NetworkVar] public partial float InitialWindSpeed { get; set; } [NetworkName("m_windRadius")] - public int WindRadius; + [NetworkVar] public partial int WindRadius { get; set; } #if !CLIENT_DLL // todo: onguststart/ongustend diff --git a/Game.Shared/FuncLadder.cs b/Game.Shared/FuncLadder.cs index 2db12cc3d..410632220 100644 --- a/Game.Shared/FuncLadder.cs +++ b/Game.Shared/FuncLadder.cs @@ -45,10 +45,10 @@ public static readonly RecvPropVector(FIELD.OF(nameof(LadderDir))), RecvPropBool(FIELD.OF(nameof(FakeLadder))), #else - SendPropVector(FIELD.OF(nameof(PlayerMountPositionTop)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(PlayerMountPositionBottom)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(LadderDir)), 0, PropFlags.NoScale), - SendPropBool(FIELD.OF(nameof(FakeLadder))), + SendPropVector(NetworkVarFields.PlayerMountPositionTop, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.PlayerMountPositionBottom, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.LadderDir, 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.FakeLadder), #endif ]); #if CLIENT_DLL @@ -58,14 +58,14 @@ public static readonly #endif [NetworkName("m_vecPlayerMountPositionTop")] - public Vector3 PlayerMountPositionTop; + [NetworkVar] public partial Vector3 PlayerMountPositionTop { get; set; } [NetworkName("m_vecPlayerMountPositionBottom")] - public Vector3 PlayerMountPositionBottom; + [NetworkVar] public partial Vector3 PlayerMountPositionBottom { get; set; } [NetworkName("m_vecLadderDir")] - public Vector3 LadderDir; + [NetworkVar] public partial Vector3 LadderDir { get; set; } readonly List Dismounts = []; [NetworkName("m_bFakeLadder")] - public bool FakeLadder; + [NetworkVar] public partial bool FakeLadder { get; set; } public bool Disabled; public void InputEnable(ref InputData inputdata) { diff --git a/Game.Shared/GameMovement.cs b/Game.Shared/GameMovement.cs index f19bd6c93..efc98f98b 100644 --- a/Game.Shared/GameMovement.cs +++ b/Game.Shared/GameMovement.cs @@ -260,14 +260,14 @@ protected virtual void DecayPunchAngle() { Player.Local.PunchAngleVel -= Player.Local.PunchAngle * springForceMagnitude; // don't wrap around - Player.Local.PunchAngle.Init( + Player.Local.PunchAngleForModify().Init( Math.Clamp(Player.Local.PunchAngle.X, -89f, 89f), Math.Clamp(Player.Local.PunchAngle.Y, -179f, 179f), Math.Clamp(Player.Local.PunchAngle.Z, -89f, 89f)); } else { - Player.Local.PunchAngle.Init(0, 0, 0); - Player.Local.PunchAngleVel.Init(0, 0, 0); + Player.Local.PunchAngleForModify().Init(0, 0, 0); + Player.Local.PunchAngleVelForModify().Init(0, 0, 0); } } @@ -2415,10 +2415,10 @@ protected virtual void PlayerRoughLandingEffects(float fvol) { Player.PlayStepSound(mv!.GetAbsOrigin(), Player.SurfaceData, fvol, true); // Knock the screen around a little bit, temporary effect. - Player.Local.PunchAngle[ROLL] = Player.Local.FallVelocity * 0.013f; + Player.Local.PunchAngleForModify()[ROLL] = Player.Local.FallVelocity * 0.013f; if (Player.Local.PunchAngle[PITCH] > 8) - Player.Local.PunchAngle[PITCH] = 8; + Player.Local.PunchAngleForModify()[PITCH] = 8; } } protected void ResetGetPointContentsCache() { diff --git a/Game.Shared/GarrysMod/WeaponCrossbow.cs b/Game.Shared/GarrysMod/WeaponCrossbow.cs index fb1bc6113..e56dd4129 100644 --- a/Game.Shared/GarrysMod/WeaponCrossbow.cs +++ b/Game.Shared/GarrysMod/WeaponCrossbow.cs @@ -18,7 +18,7 @@ public class CrossbowBolt : BaseCombatCharacter { [LinkEntityToClass("weapon_crossbow")] [PrecacheWeaponRegister("weapon_crossbow")] [NetworkName("CWeaponCrossbow")] -public class WeaponCrossbow : BaseHL2MPCombatWeapon +public partial class WeaponCrossbow : BaseHL2MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -31,8 +31,8 @@ public static readonly RecvPropBool(FIELD.OF(nameof(InZoom))), RecvPropBool(FIELD.OF(nameof(MustReload))) #else - SendPropBool(FIELD.OF(nameof(InZoom))), - SendPropBool(FIELD.OF(nameof(MustReload))) + SendPropBool(NetworkVarFields.InZoom), + SendPropBool(NetworkVarFields.MustReload) #endif ]); #if CLIENT_DLL @@ -42,8 +42,8 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponCrossbow); #endif [NetworkName("m_bInZoom")] - public bool InZoom; + [NetworkVar] public partial bool InZoom { get; set; } [NetworkName("m_bMustReload")] - public bool MustReload; + [NetworkVar] public partial bool MustReload { get; set; } } #endif diff --git a/Game.Shared/GarrysMod/WeaponFrag.cs b/Game.Shared/GarrysMod/WeaponFrag.cs index 8fcdf0d69..42258cb28 100644 --- a/Game.Shared/GarrysMod/WeaponFrag.cs +++ b/Game.Shared/GarrysMod/WeaponFrag.cs @@ -6,7 +6,7 @@ namespace Game.Shared.GarrysMod; [LinkEntityToClass("weapon_frag")] [PrecacheWeaponRegister("weapon_frag")] [NetworkName("CWeaponFrag")] -public class WeaponFrag : BaseHL2MPCombatWeapon +public partial class WeaponFrag : BaseHL2MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -20,9 +20,9 @@ public static readonly RecvPropBool(FIELD.OF(nameof(DrawbackFinished))), RecvPropInt(FIELD.OF(nameof(AttackPaused))) #else - SendPropBool(FIELD.OF(nameof(Redraw))), - SendPropBool(FIELD.OF(nameof(DrawbackFinished))), - SendPropInt(FIELD.OF(nameof(AttackPaused)), 4) + SendPropBool(NetworkVarFields.Redraw), + SendPropBool(NetworkVarFields.DrawbackFinished), + SendPropInt(NetworkVarFields.AttackPaused, 4) #endif ]); #if CLIENT_DLL @@ -33,10 +33,10 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponFrag); #endif [NetworkName("m_bRedraw")] - public bool Redraw; + [NetworkVar] public partial bool Redraw { get; set; } [NetworkName("m_fDrawbackFinished")] - public bool DrawbackFinished; + [NetworkVar] public partial bool DrawbackFinished { get; set; } [NetworkName("m_AttackPaused")] - public int AttackPaused; + [NetworkVar] public partial int AttackPaused { get; set; } } #endif diff --git a/Game.Shared/GarrysMod/WeaponPistol.cs b/Game.Shared/GarrysMod/WeaponPistol.cs index 8cb2a8212..501585201 100644 --- a/Game.Shared/GarrysMod/WeaponPistol.cs +++ b/Game.Shared/GarrysMod/WeaponPistol.cs @@ -8,7 +8,7 @@ namespace Game.Shared.GarrysMod; [LinkEntityToClass("weapon_pistol")] [PrecacheWeaponRegister("weapon_pistol")] [NetworkName("CWeaponPistol")] -public class WeaponPistol : HL2MPMachineGun +public partial class WeaponPistol : HL2MPMachineGun { public static readonly #if CLIENT_DLL @@ -23,10 +23,10 @@ public static readonly RecvPropFloat(FIELD.OF(nameof(AccuracyPenalty))), RecvPropInt(FIELD.OF(nameof(NumShotsFired))), #else - SendPropTime64(FIELD.OF(nameof(SoonestPrimaryAttack))), - SendPropTime64(FIELD.OF(nameof(LastAttackTime))), - SendPropFloat(FIELD.OF(nameof(AccuracyPenalty)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(NumShotsFired)), 16), + SendPropTime64(NetworkVarFields.SoonestPrimaryAttack), + SendPropTime64(NetworkVarFields.LastAttackTime), + SendPropFloat(NetworkVarFields.AccuracyPenalty, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.NumShotsFired, 16), #endif ]); #if CLIENT_DLL @@ -36,13 +36,13 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponPistol); #endif [NetworkName("m_flSoonestPrimaryAttack")] - public TimeUnit_t SoonestPrimaryAttack; + [NetworkVar] public partial TimeUnit_t SoonestPrimaryAttack { get; set; } [NetworkName("m_flLastAttackTime")] - public TimeUnit_t LastAttackTime; + [NetworkVar] public partial TimeUnit_t LastAttackTime { get; set; } [NetworkName("m_flAccuracyPenalty")] - public TimeUnit_t AccuracyPenalty; + [NetworkVar] public partial TimeUnit_t AccuracyPenalty { get; set; } [NetworkName("m_nNumShotsFired")] - public int NumShotsFired; + [NetworkVar] public partial int NumShotsFired { get; set; } public override float GetFireRate() => 0.5f; public const TimeUnit_t PISTOL_FASTEST_REFIRE_TIME = 0.1; public const TimeUnit_t PISTOL_FASTEST_DRY_REFIRE_TIME = 0.2; diff --git a/Game.Shared/GarrysMod/WeaponRPG.cs b/Game.Shared/GarrysMod/WeaponRPG.cs index b676f2ac5..816a11cb4 100644 --- a/Game.Shared/GarrysMod/WeaponRPG.cs +++ b/Game.Shared/GarrysMod/WeaponRPG.cs @@ -9,7 +9,7 @@ namespace Game.Shared.GarrysMod; [LinkEntityToClass("weapon_rpg")] [PrecacheWeaponRegister("weapon_rpg")] [NetworkName("CWeaponRPG")] -public class WeaponRPG : BaseHL2MPCombatWeapon +public partial class WeaponRPG : BaseHL2MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -26,11 +26,11 @@ public static readonly RecvPropEHandle(FIELD.OF(nameof(Missile))), RecvPropVector(FIELD.OF(nameof(LaserDot))), #else - SendPropBool(FIELD.OF(nameof(InitialStateUpdate))), - SendPropBool(FIELD.OF(nameof(Guiding))), - SendPropBool(FIELD.OF(nameof(HideGuiding))), - SendPropEHandle(FIELD.OF(nameof(Missile))), - SendPropVector(FIELD.OF(nameof(LaserDot)), 0, PropFlags.NoScale), + SendPropBool(NetworkVarFields.InitialStateUpdate), + SendPropBool(NetworkVarFields.Guiding), + SendPropBool(NetworkVarFields.HideGuiding), + SendPropEHandle(WeaponRPG.NetworkVarFields.Missile), + SendPropVector(NetworkVarFields.LaserDot, 0, PropFlags.NoScale), #endif ]); #if CLIENT_DLL @@ -40,15 +40,15 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponRPG); #endif [NetworkName("m_bInitialStateUpdate")] - public bool InitialStateUpdate; + [NetworkVar] public partial bool InitialStateUpdate { get; set; } [NetworkName("m_bGuiding")] - public bool Guiding; + [NetworkVar] public partial bool Guiding { get; set; } [NetworkName("m_bHideGuiding")] - public bool HideGuiding; + [NetworkVar] public partial bool HideGuiding { get; set; } [NetworkName("m_hMissile")] - public EHANDLE Missile = new(); + [NetworkVar] public partial NetworkHandle Missile { get; } [NetworkName("m_vecLaserDot")] - public Vector3 LaserDot; + [NetworkVar] public partial Vector3 LaserDot { get; set; } public override float GetFireRate() => 1f; } diff --git a/Game.Shared/GarrysMod/WeaponShotgun.cs b/Game.Shared/GarrysMod/WeaponShotgun.cs index 841b9cc5a..50a2cc5d6 100644 --- a/Game.Shared/GarrysMod/WeaponShotgun.cs +++ b/Game.Shared/GarrysMod/WeaponShotgun.cs @@ -10,7 +10,7 @@ namespace Game.Shared.GarrysMod; [LinkEntityToClass("weapon_shotgun")] [PrecacheWeaponRegister("weapon_shotgun")] [NetworkName("CWeaponShotgun")] -public class WeaponShotgun : BaseHL2MPCombatWeapon +public partial class WeaponShotgun : BaseHL2MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -25,10 +25,10 @@ public static readonly RecvPropBool(FIELD.OF(nameof(DelayedFire2))), RecvPropBool(FIELD.OF(nameof(DelayedReload))), #else - SendPropBool(FIELD.OF(nameof(NeedPump))), - SendPropBool(FIELD.OF(nameof(DelayedFire1))), - SendPropBool(FIELD.OF(nameof(DelayedFire2))), - SendPropBool(FIELD.OF(nameof(DelayedReload))), + SendPropBool(NetworkVarFields.NeedPump), + SendPropBool(NetworkVarFields.DelayedFire1), + SendPropBool(NetworkVarFields.DelayedFire2), + SendPropBool(NetworkVarFields.DelayedReload), #endif ]); #if CLIENT_DLL @@ -38,13 +38,13 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponShotgun); #endif [NetworkName("m_bNeedPump")] - public bool NeedPump; + [NetworkVar] public partial bool NeedPump { get; set; } [NetworkName("m_bDelayedFire1")] - public bool DelayedFire1; + [NetworkVar] public partial bool DelayedFire1 { get; set; } [NetworkName("m_bDelayedFire2")] - public bool DelayedFire2; + [NetworkVar] public partial bool DelayedFire2 { get; set; } [NetworkName("m_bDelayedReload")] - public bool DelayedReload; + [NetworkVar] public partial bool DelayedReload { get; set; } public WeaponShotgun() { ReloadsSingly = true; diff --git a/Game.Shared/GarrysMod/WeaponStunStick.cs b/Game.Shared/GarrysMod/WeaponStunStick.cs index ce4e00e13..1082c1300 100644 --- a/Game.Shared/GarrysMod/WeaponStunStick.cs +++ b/Game.Shared/GarrysMod/WeaponStunStick.cs @@ -6,7 +6,7 @@ namespace Game.Shared.GarrysMod; [LinkEntityToClass("weapon_stunstick")] [PrecacheWeaponRegister("weapon_stunstick")] [NetworkName("CWeaponStunStick")] -public class WeaponStunStick : BaseHL2MPBludgeonWeapon +public partial class WeaponStunStick : BaseHL2MPBludgeonWeapon { public static readonly #if CLIENT_DLL @@ -18,7 +18,7 @@ public static readonly #if CLIENT_DLL RecvPropBool(FIELD.OF(nameof(Active))) #else - SendPropBool(FIELD.OF(nameof(Active))) + SendPropBool(NetworkVarFields.Active) #endif ]); #if CLIENT_DLL @@ -28,7 +28,7 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponStunStick); #endif [NetworkName("m_bActive")] - public bool Active; + [NetworkVar] public partial bool Active { get; set; } public override float GetFireRate() => 0.2f; } #endif diff --git a/Game.Shared/HL1/WeaponGauss.cs b/Game.Shared/HL1/WeaponGauss.cs index 7b661d161..6ecf15ec4 100644 --- a/Game.Shared/HL1/WeaponGauss.cs +++ b/Game.Shared/HL1/WeaponGauss.cs @@ -3,7 +3,7 @@ namespace Game.Shared.HL1; using FIELD = Source.FIELD; [NetworkName("CWeaponGauss")] -public class WeaponGauss : BaseHL1MPCombatWeapon +public partial class WeaponGauss : BaseHL1MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -20,8 +20,8 @@ public static readonly RecvPropTime64(FIELD.OF(nameof(PlayAftershock))), RecvPropTime64(FIELD.OF(nameof(NextAmmoBurn))) #else - SendPropInt(FIELD.OF(nameof(AttackState)), 2, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(PrimaryFire))), + SendPropInt(NetworkVarFields.AttackState, 2, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.PrimaryFire), SendPropFloat(FIELD.OF(nameof(StartCharge)), 0, PropFlags.NoScale), SendPropFloat(FIELD.OF(nameof(AmmoStartCharge)), 0, PropFlags.NoScale), SendPropTime64(FIELD.OF(nameof(PlayAftershock))), @@ -34,9 +34,9 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponGauss); #endif [NetworkName("m_nAttackState")] - public int AttackState; + [NetworkVar] public partial int AttackState { get; set; } [NetworkName("m_bPrimaryFire")] - public bool PrimaryFire; + [NetworkVar] public partial bool PrimaryFire { get; set; } [NetworkName("m_flStartCharge")] public TimeUnit_t StartCharge; [NetworkName("m_flAmmoStartCharge")] diff --git a/Game.Shared/HL1/WeaponHandGrenade.cs b/Game.Shared/HL1/WeaponHandGrenade.cs index 50e345af1..e10def02d 100644 --- a/Game.Shared/HL1/WeaponHandGrenade.cs +++ b/Game.Shared/HL1/WeaponHandGrenade.cs @@ -3,7 +3,7 @@ namespace Game.Shared.HL1; using FIELD = Source.FIELD; [NetworkName("CWeaponHandGrenade")] -public class WeaponHandGrenade : BaseHL1MPCombatWeapon +public partial class WeaponHandGrenade : BaseHL1MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -16,8 +16,8 @@ public static readonly RecvPropFloat(FIELD.OF(nameof(StartThrow))), RecvPropFloat(FIELD.OF(nameof(ReleaseThrow))), #else - SendPropFloat(FIELD.OF(nameof(StartThrow)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(ReleaseThrow)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartThrow, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.ReleaseThrow, 0, PropFlags.NoScale), #endif ]); #if CLIENT_DLL @@ -26,8 +26,8 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponHandGrenade); #endif [NetworkName("m_flStartThrow")] - public TimeUnit_t StartThrow; + [NetworkVar] public partial TimeUnit_t StartThrow { get; set; } [NetworkName("m_flReleaseThrow")] - public TimeUnit_t ReleaseThrow; + [NetworkVar] public partial TimeUnit_t ReleaseThrow { get; set; } } #endif diff --git a/Game.Shared/HL1/WeaponHgun.cs b/Game.Shared/HL1/WeaponHgun.cs index 4b90843b1..cb7cdab2f 100644 --- a/Game.Shared/HL1/WeaponHgun.cs +++ b/Game.Shared/HL1/WeaponHgun.cs @@ -3,7 +3,7 @@ namespace Game.Shared.HL1; using FIELD = Source.FIELD; [NetworkName("CWeaponHgun")] -public class WeaponHgun : BaseHL1MPCombatWeapon +public partial class WeaponHgun : BaseHL1MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -16,8 +16,8 @@ public static readonly RecvPropFloat(FIELD.OF(nameof(RechargeTime))), RecvPropInt(FIELD.OF(nameof(FirePhase))), #else - SendPropFloat(FIELD.OF(nameof(RechargeTime)), 0, PropFlags.NoScale), - SendPropInt(FIELD.OF(nameof(FirePhase)), 4, PropFlags.Unsigned), + SendPropFloat(NetworkVarFields.RechargeTime, 0, PropFlags.NoScale), + SendPropInt(NetworkVarFields.FirePhase, 4, PropFlags.Unsigned), #endif ]); #if CLIENT_DLL @@ -26,8 +26,8 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponHgun); #endif [NetworkName("m_flRechargeTime")] - public TimeUnit_t RechargeTime; + [NetworkVar] public partial TimeUnit_t RechargeTime { get; set; } [NetworkName("m_iFirePhase")] - public int FirePhase; + [NetworkVar] public partial int FirePhase { get; set; } } #endif diff --git a/Game.Shared/HL1/WeaponSatchel.cs b/Game.Shared/HL1/WeaponSatchel.cs index d597034ae..feb227388 100644 --- a/Game.Shared/HL1/WeaponSatchel.cs +++ b/Game.Shared/HL1/WeaponSatchel.cs @@ -3,7 +3,7 @@ namespace Game.Shared.HL1; using FIELD = Source.FIELD; [NetworkName("CWeaponSatchel")] -public class WeaponSatchel : BaseHL1MPCombatWeapon +public partial class WeaponSatchel : BaseHL1MPCombatWeapon { public static readonly #if CLIENT_DLL @@ -19,11 +19,11 @@ public static readonly RecvPropInt(FIELD.OF(nameof(SatchelWorldIndex))), RecvPropInt(FIELD.OF(nameof(ChargeReady))), #else - SendPropInt(FIELD.OF(nameof(RadioViewIndex)), 14), - SendPropInt(FIELD.OF(nameof(RadioWorldIndex)), 14), - SendPropInt(FIELD.OF(nameof(SatchelViewIndex)), 14), - SendPropInt(FIELD.OF(nameof(SatchelWorldIndex)), 14), - SendPropInt(FIELD.OF(nameof(ChargeReady)), 3, PropFlags.Unsigned), + SendPropInt(NetworkVarFields.RadioViewIndex, 14), + SendPropInt(NetworkVarFields.RadioWorldIndex, 14), + SendPropInt(NetworkVarFields.SatchelViewIndex, 14), + SendPropInt(NetworkVarFields.SatchelWorldIndex, 14), + SendPropInt(NetworkVarFields.ChargeReady, 3, PropFlags.Unsigned), #endif ]); #if CLIENT_DLL @@ -32,14 +32,14 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_WeaponSatchel); #endif [NetworkName("m_iRadioViewIndex")] - public int RadioViewIndex; + [NetworkVar] public partial int RadioViewIndex { get; set; } [NetworkName("m_iRadioWorldIndex")] - public float RadioWorldIndex; + [NetworkVar] public partial float RadioWorldIndex { get; set; } [NetworkName("m_iSatchelViewIndex")] - public float SatchelViewIndex; + [NetworkVar] public partial float SatchelViewIndex { get; set; } [NetworkName("m_iSatchelWorldIndex")] - public float SatchelWorldIndex; + [NetworkVar] public partial float SatchelWorldIndex { get; set; } [NetworkName("m_iChargeReady")] - public float ChargeReady; + [NetworkVar] public partial float ChargeReady { get; set; } } #endif diff --git a/Game.Shared/PlayerNetVars.cs b/Game.Shared/PlayerNetVars.cs index 0d8c2b158..7c0d002a9 100644 --- a/Game.Shared/PlayerNetVars.cs +++ b/Game.Shared/PlayerNetVars.cs @@ -10,57 +10,57 @@ public static class PlayerNetVars } -public struct FogParams() +public partial struct FogParams() { [NetworkName("dirPrimary")] - public Vector3 DirPrimary; + [NetworkVar] public Vector3 DirPrimary; [NetworkName("colorPrimary")] - public Color ColorPrimary; + [NetworkVar] public Color ColorPrimary; [NetworkName("colorSecondary")] - public Color ColorSecondary; + [NetworkVar] public Color ColorSecondary; [NetworkName("colorPrimaryHDR")] - public Color ColorPrimaryHDR; + [NetworkVar] public Color ColorPrimaryHDR; [NetworkName("colorSecondaryHDR")] - public Color ColorSecondaryHDR; + [NetworkVar] public Color ColorSecondaryHDR; [NetworkName("colorPrimaryLerpTo")] - public Color ColorPrimaryLerpTo; + [NetworkVar] public Color ColorPrimaryLerpTo; [NetworkName("colorSecondaryLerpTo")] - public Color ColorSecondaryLerpTo; + [NetworkVar] public Color ColorSecondaryLerpTo; [NetworkName("start")] - public float Start; + [NetworkVar] public float Start; [NetworkName("end")] - public float End; + [NetworkVar] public float End; [NetworkName("farz")] - public float FarZ; + [NetworkVar] public float FarZ; [NetworkName("maxdensity")] - public float MaxDensity; + [NetworkVar] public float MaxDensity; [NetworkName("startLerpTo")] - public float StartLerpTo; + [NetworkVar] public float StartLerpTo; [NetworkName("endLerpTo")] - public float EndLerpTo; + [NetworkVar] public float EndLerpTo; [NetworkName("maxdensityLerpTo")] - public float MaxDensityLerpTo; + [NetworkVar] public float MaxDensityLerpTo; [NetworkName("lerptime")] - public TimeUnit_t LerpTime; + [NetworkVar] public TimeUnit_t LerpTime; [NetworkName("duration")] - public TimeUnit_t Duration; + [NetworkVar] public TimeUnit_t Duration; [NetworkName("enable")] - public bool Enable; + [NetworkVar] public bool Enable; [NetworkName("blend")] - public bool Blend; + [NetworkVar] public bool Blend; [NetworkName("radial")] - public bool Radial; + [NetworkVar] public bool Radial; [NetworkName("HDRColorScale")] - public float HDRColorScale; + [NetworkVar] public float HDRColorScale; } -public struct FogPlayerParams() +public partial struct FogPlayerParams() { #if CLIENT_DLL || GAME_DLL [NetworkName("m_hCtrl")] - public Handle Ctrl = new(); - #endif + [NetworkVar] public Handle Ctrl = new(); +#endif public float TransitionTime; public Color OldColor; @@ -74,27 +74,27 @@ public struct FogPlayerParams() -public struct Sky3DParams() +public partial struct Sky3DParams() { [NetworkName("scale")] - public int Scale; + [NetworkVar] public int Scale; [NetworkName("origin")] - public Vector3 Origin; + [NetworkVar] public Vector3 Origin; [NetworkName("area")] - public int Area; + [NetworkVar] public int Area; [NetworkName("fog")] - public FogParams Fog = new(); + [NetworkVarEmbedded] public FogParams Fog = new(); } -public struct AudioParams() +public partial struct AudioParams() { [NetworkName("localSound")] - public InlineArrayNumLocalAudioSounds LocalSound; + [NetworkVar] public InlineArrayNumLocalAudioSounds LocalSound; [NetworkName("soundscapeIndex")] - public int SoundscapeIndex; + [NetworkVar] public int SoundscapeIndex; [NetworkName("localBits")] - public int LocalBits; + [NetworkVar] public int LocalBits; [NetworkName("ent")] - public EHANDLE Ent = new(); + [NetworkVar] public EHANDLE Ent = new(); } diff --git a/Game.Shared/Sprite.cs b/Game.Shared/Sprite.cs index 12150b40f..c9565da60 100644 --- a/Game.Shared/Sprite.cs +++ b/Game.Shared/Sprite.cs @@ -5,7 +5,7 @@ namespace Game.Shared; using FIELD = Source.FIELD; [NetworkName("CSprite")] -public class Sprite : BaseEntity +public partial class Sprite : BaseEntity { public static readonly #if CLIENT_DLL @@ -28,17 +28,17 @@ public static readonly RecvPropInt(FIELD.OF(nameof(Brightness))), RecvPropBool(FIELD.OF(nameof(WorldSpaceScale))) #else - SendPropEHandle(FIELD.OF(nameof(AttachedToEntity))), - SendPropInt(FIELD.OF(nameof(Attachment)), 8), - SendPropFloat(FIELD.OF(nameof(ScaleTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpriteScale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(GlowProxySize)), 6, PropFlags.RoundUp, 0.0f, 64.0f), - SendPropFloat(FIELD.OF(nameof(HDRColorScale)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SpriteFramerate)), 8, PropFlags.RoundUp, 0, 60.0f), - SendPropFloat(FIELD.OF(nameof(Frame)), 20, PropFlags.RoundDown, 0, 256), - SendPropFloat(FIELD.OF(nameof(BrightnessTime)), 0, PropFlags.NoScale, 0, 0), - SendPropInt(FIELD.OF(nameof(Brightness)), 8, PropFlags.Unsigned), - SendPropBool(FIELD.OF(nameof(WorldSpaceScale))) + SendPropEHandle(Sprite.NetworkVarFields.AttachedToEntity), + SendPropInt(NetworkVarFields.Attachment, 8), + SendPropFloat(NetworkVarFields.ScaleTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpriteScale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.GlowProxySize, 6, PropFlags.RoundUp, 0.0f, 64.0f), + SendPropFloat(NetworkVarFields.HDRColorScale, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SpriteFramerate, 8, PropFlags.RoundUp, 0, 60.0f), + SendPropFloat(NetworkVarFields.Frame, 20, PropFlags.RoundDown, 0, 256), + SendPropFloat(NetworkVarFields.BrightnessTime, 0, PropFlags.NoScale, 0, 0), + SendPropInt(NetworkVarFields.Brightness, 8, PropFlags.Unsigned), + SendPropBool(NetworkVarFields.WorldSpaceScale) #endif ]); #if CLIENT_DLL @@ -47,27 +47,27 @@ public static readonly public static readonly new ServerClass ServerClass = new ServerClass(DT_Sprite); #endif [NetworkName("m_hAttachedToEntity")] - public EHANDLE AttachedToEntity = new(); + [NetworkVar] public partial NetworkHandle AttachedToEntity { get; } [NetworkName("m_nAttachment")] - public int Attachment; + [NetworkVar] public partial int Attachment { get; set; } [NetworkName("m_flScaleTime")] - public TimeUnit_t ScaleTime; + [NetworkVar] public partial TimeUnit_t ScaleTime { get; set; } [NetworkName("m_flSpriteScale")] - public float SpriteScale; + [NetworkVar] public partial float SpriteScale { get; set; } [NetworkName("m_flGlowProxySize")] - public float GlowProxySize; + [NetworkVar] public partial float GlowProxySize { get; set; } [NetworkName("m_flHDRColorScale")] - public float HDRColorScale; + [NetworkVar] public partial float HDRColorScale { get; set; } [NetworkName("m_flSpriteFramerate")] - public TimeUnit_t SpriteFramerate; + [NetworkVar] public partial TimeUnit_t SpriteFramerate { get; set; } [NetworkName("m_flFrame")] - public TimeUnit_t Frame; + [NetworkVar] public partial TimeUnit_t Frame { get; set; } [NetworkName("m_flBrightnessTime")] - public TimeUnit_t BrightnessTime; + [NetworkVar] public partial TimeUnit_t BrightnessTime { get; set; } [NetworkName("m_nBrightness")] - public int Brightness; + [NetworkVar] public partial int Brightness { get; set; } [NetworkName("m_bWorldSpaceScale")] - public bool WorldSpaceScale; + [NetworkVar] public partial bool WorldSpaceScale { get; set; } } [NetworkName("CSpriteOriented")] public class SpriteOriented : Sprite diff --git a/Game.Shared/SpriteTrail.cs b/Game.Shared/SpriteTrail.cs index ee0650dde..fa88113c4 100644 --- a/Game.Shared/SpriteTrail.cs +++ b/Game.Shared/SpriteTrail.cs @@ -5,7 +5,7 @@ namespace Game.Shared; using FIELD = Source.FIELD; [NetworkName("CSpriteTrail")] -public class SpriteTrail : Sprite +public partial class SpriteTrail : Sprite { public static readonly #if CLIENT_DLL @@ -24,14 +24,14 @@ public static readonly RecvPropVector(FIELD.OF(nameof(SkyboxOrigin))), RecvPropFloat(FIELD.OF(nameof(SkyboxScale))), #else - SendPropFloat(FIELD.OF(nameof(LifeTime)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(EndWidth)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(StartWidthVariance)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(TextureRes)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(FadeLength)), 0, PropFlags.NoScale), - SendPropVector(FIELD.OF(nameof(SkyboxOrigin)), 0, PropFlags.NoScale), - SendPropFloat(FIELD.OF(nameof(SkyboxScale)), 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.LifeTime, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.EndWidth, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.StartWidthVariance, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.TextureRes, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.FadeLength, 0, PropFlags.NoScale), + SendPropVector(NetworkVarFields.SkyboxOrigin, 0, PropFlags.NoScale), + SendPropFloat(NetworkVarFields.SkyboxScale, 0, PropFlags.NoScale), #endif ]); #if CLIENT_DLL @@ -41,20 +41,20 @@ public static readonly #endif [NetworkName("m_flLifeTime")] - public TimeUnit_t LifeTime; + [NetworkVar] public partial TimeUnit_t LifeTime { get; set; } [NetworkName("m_flStartWidth")] - public float StartWidth; + [NetworkVar] public partial float StartWidth { get; set; } [NetworkName("m_flEndWidth")] - public float EndWidth; + [NetworkVar] public partial float EndWidth { get; set; } [NetworkName("m_flStartWidthVariance")] - public float StartWidthVariance; + [NetworkVar] public partial float StartWidthVariance { get; set; } [NetworkName("m_flTextureRes")] - public float TextureRes; + [NetworkVar] public partial float TextureRes { get; set; } [NetworkName("m_flMinFadeLength")] - public float FadeLength; + [NetworkVar] public partial float FadeLength { get; set; } [NetworkName("m_vecSkyboxOrigin")] - public Vector3 SkyboxOrigin; + [NetworkVar] public partial Vector3 SkyboxOrigin { get; set; } [NetworkName("m_flSkyboxScale")] - public float SkyboxScale; + [NetworkVar] public partial float SkyboxScale { get; set; } } #endif diff --git a/Source.CodeAnalysis.NetworkVars/NetworkVarEmbeddedGenerator.cs b/Source.CodeAnalysis.NetworkVars/NetworkVarEmbeddedGenerator.cs new file mode 100644 index 000000000..cf1fc6fc0 --- /dev/null +++ b/Source.CodeAnalysis.NetworkVars/NetworkVarEmbeddedGenerator.cs @@ -0,0 +1,393 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Text; + +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Text; + +namespace Source.CodeAnalysis.NetworkVars +{ + [Generator(LanguageNames.CSharp)] + public sealed class NetworkVarEmbeddedGenerator : IIncrementalGenerator + { + private const string AttributeMetadataName = "Source.Common.NetworkVarEmbeddedAttribute"; + private const string NetworkVarMetadataName = "Source.Common.NetworkVarAttribute"; + + private static readonly DiagnosticDescriptor BadDeclaration = new DiagnosticDescriptor( + id: "NETVAR010", + title: "[NetworkVarEmbedded] requires a partial property typed as T.NetworkVar", + messageFormat: "'{0}' must be declared as 'partial T.NetworkVar {0} {{ get; }}' inside a top-level partial class, where T is a top-level partial struct", + category: "NetworkVars", + defaultSeverity: DiagnosticSeverity.Error, + isEnabledByDefault: true); + + public void Initialize(IncrementalGeneratorInitializationContext context) { + context.RegisterPostInitializationOutput(ctx => + ctx.AddSource("NetworkVarEmbeddedAttribute.g.cs", SourceText.From(AttributeSource, Encoding.UTF8))); + + IncrementalValuesProvider owners = context.SyntaxProvider + .ForAttributeWithMetadataName( + AttributeMetadataName, + predicate: static (node, _) => node is PropertyDeclarationSyntax, + transform: static (ctx, _) => GetModel(ctx)) + .Where(static m => m != null); + + IncrementalValueProvider clientDll = context.ParseOptionsProvider.Select(static (o, _) => o.PreprocessorSymbolNames.Contains("CLIENT_DLL")); + + context.RegisterSourceOutput(owners.Collect().Combine(clientDll), static (spc, input) => Emit(spc, input.Left, input.Right)); + } + + private static OwnerModel? GetModel(GeneratorAttributeSyntaxContext ctx) { + var propSyntax = (PropertyDeclarationSyntax)ctx.TargetNode; + var prop = (IPropertySymbol)ctx.TargetSymbol; + INamedTypeSymbol owner = prop.ContainingType; + + INamedTypeSymbol? embedded = null; + bool isClass = prop.Type is INamedTypeSymbol pt && pt.TypeKind == TypeKind.Class; + if (isClass) + embedded = (INamedTypeSymbol)prop.Type; + else if (propSyntax.Type is QualifiedNameSyntax q && q.Right.Identifier.Text == "NetworkVar") + embedded = ctx.SemanticModel.GetSymbolInfo(q.Left).Symbol as INamedTypeSymbol; + + bool ok = embedded != null && (isClass || embedded.TypeKind == TypeKind.Struct) && embedded.ContainingType == null && !embedded.IsGenericType + && owner.ContainingType == null && !owner.IsGenericType + && propSyntax.Modifiers.Any(m => m.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword)) + && IsPartial(owner) && IsPartial(embedded); + + return new OwnerModel( + propertyName: prop.Name, + modifiers: string.Join(" ", propSyntax.Modifiers.Where(m => !m.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword)).Select(m => m.Text)), + @namespace: owner.ContainingNamespace.IsGlobalNamespace ? null : owner.ContainingNamespace.ToDisplayString(), + typeName: owner.Name, + typeFullyQualified: owner.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat), + embedded: ok ? (isClass ? new StructModel(embedded!.ContainingNamespace.IsGlobalNamespace ? null : embedded.ContainingNamespace.ToDisplayString(), embedded.Name, embedded.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat), new List(), true) : BuildStruct(embedded!)) : null, + location: propSyntax.Identifier.GetLocation()); + } + + private static bool IsPartial(INamedTypeSymbol type) => type.DeclaringSyntaxReferences + .Select(r => r.GetSyntax()) + .OfType() + .Any(t => t.Modifiers.Any(m => m.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword))); + + private static StructModel BuildStruct(INamedTypeSymbol type) { + var members = new List(); + foreach (IFieldSymbol field in type.GetMembers().OfType()) { + if (field.IsStatic || field.IsImplicitlyDeclared) + continue; + bool isVar = field.GetAttributes().Any(a => a.AttributeClass?.ToDisplayString() == NetworkVarMetadataName); + bool isEmbedded = field.GetAttributes().Any(a => a.AttributeClass?.ToDisplayString() == AttributeMetadataName); + if (field.DeclaredAccessibility != Accessibility.Public && !isVar && !isEmbedded) + continue; + StructModel? nested = isEmbedded && field.Type is INamedTypeSymbol nt && nt.TypeKind == TypeKind.Struct ? BuildStruct(nt) : null; + string? arrayElement = null; + if (isVar && field.Type.GetAttributes().Any(a => a.AttributeClass?.ToDisplayString() == "System.Runtime.CompilerServices.InlineArrayAttribute")) + arrayElement = field.Type.GetMembers().OfType().First(f => !f.IsStatic).Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat); + string? handleEntity = isVar && field.Type is INamedTypeSymbol ht && ht.Name == "Handle" && ht.TypeArguments.Length == 1 && ht.ContainingNamespace.ToDisplayString() == "Source.Common" + ? ht.TypeArguments[0].ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat) : null; + members.Add(new MemberModel(field.Name, field.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat), nested, !isVar && !isEmbedded, arrayElement) { HandleEntity = handleEntity }); + } + return new StructModel( + type.ContainingNamespace.IsGlobalNamespace ? null : type.ContainingNamespace.ToDisplayString(), + type.Name, + type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat), + members); + } + + private static void Emit(SourceProductionContext spc, ImmutableArray models, bool clientDll) { + var structs = new Dictionary(); + + foreach (var group in models.Where(m => m != null).Select(m => m!).GroupBy(m => m.TypeFullyQualified)) { + var valid = new List(); + foreach (OwnerModel model in group) { + if (model.Embedded == null) { + spc.ReportDiagnostic(Diagnostic.Create(BadDeclaration, model.Location, model.PropertyName)); + continue; + } + valid.Add(model); + Collect(model.Embedded, structs); + } + if (valid.Count == 0) + continue; + + OwnerModel first = valid[0]; + spc.AddSource((first.Namespace == null ? "" : first.Namespace + ".") + first.TypeName + ".NetworkVarsEmbedded.g.cs", SourceText.From(BuildOwner(first, valid, clientDll), Encoding.UTF8)); + } + + foreach (StructModel s in structs.Values) + spc.AddSource((s.Namespace == null ? "" : s.Namespace + ".") + s.TypeName + ".NetworkVar.g.cs", SourceText.From(s.IsClass ? BuildClass(s, clientDll) : BuildStruct(s, clientDll), Encoding.UTF8)); + } + + private static void Collect(StructModel s, Dictionary structs) { + if (structs.ContainsKey(s.TypeFullyQualified)) + return; + structs[s.TypeFullyQualified] = s; + foreach (MemberModel m in s.Members) + if (m.Nested != null) + Collect(m.Nested, structs); + } + + private static void Leaves(StructModel s, string path, List<(string Path, bool Array)> output) { + foreach (MemberModel m in s.Members) { + if (m.Plain) + continue; + if (m.Nested != null) + Leaves(m.Nested, path + "." + m.Name, output); + else + output.Add((path + "." + m.Name, m.ArrayElement != null)); + } + } + + private static string BuildOwner(OwnerModel type, List props, bool clientDll) { + var sb = new StringBuilder(); + sb.AppendLine("// "); + sb.AppendLine("#nullable enable"); + sb.AppendLine(); + + bool hasNamespace = type.Namespace != null; + string classIndent = hasNamespace ? "\t" : ""; + string indent = classIndent + "\t"; + + if (hasNamespace) { + sb.Append("namespace ").AppendLine(type.Namespace); + sb.AppendLine("{"); + } + + sb.Append(classIndent).Append("partial class ").Append(type.TypeName).AppendLine(" : global::Source.Common.INetworkStateChanged"); + sb.Append(classIndent).AppendLine("{"); + + foreach (OwnerModel p in props) { + string t = p.Embedded!.TypeFullyQualified; + string backing = "__nv_" + p.PropertyName; + if (p.Embedded.IsClass) { + sb.Append(indent).Append("private readonly ").Append(t).Append(' ').Append(backing).AppendLine(" = new();"); + if (clientDll) + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(' ').Append(p.PropertyName).Append(" => ").Append(backing).AppendLine(";"); + else { + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(' ').Append(p.PropertyName).AppendLine(" {"); + sb.Append(indent).AppendLine(" get {"); + sb.Append(indent).Append(" ").Append(backing).AppendLine(".__nv_Outer ??= this;"); + sb.Append(indent).Append(" return ").Append(backing).AppendLine(";"); + sb.Append(indent).AppendLine(" }"); + sb.Append(indent).AppendLine("}"); + } + sb.AppendLine(); + continue; + } + sb.Append(indent).Append("private ").Append(t).Append(' ').Append(backing).Append(" = new();").AppendLine(); + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(".NetworkVar ").Append(p.PropertyName) + .Append(" => new(ref ").Append(backing).Append(", this, NetworkVarFields.").Append(p.PropertyName).AppendLine(", 0);"); + sb.AppendLine(); + } + + if (clientDll) + sb.Append(indent).AppendLine("void global::Source.Common.INetworkStateChanged.NetworkStateChanged(global::Source.Common.IFieldAccessor accessor) { }"); + + sb.Append(indent).AppendLine("internal static partial class NetworkVarFields"); + sb.Append(indent).AppendLine("{"); + foreach (OwnerModel p in props) { + if (p.Embedded!.IsClass) + continue; + var leaves = new List<(string Path, bool Array)>(); + Leaves(p.Embedded!, p.PropertyName, leaves); + foreach (var (leaf, array) in leaves) + if (array) + sb.Append(indent).Append("\tpublic static readonly global::Source.Common.DynamicArrayAccessor ").Append(leaf.Replace('.', '_')) + .Append(" = new(typeof(").Append(type.TypeFullyQualified).Append("), \"__nv_").Append(leaf).AppendLine("\");"); + else sb.Append(indent).Append("\tpublic static readonly global::Source.Common.IFieldAccessor ").Append(leaf.Replace('.', '_')) + .Append(" = new global::Source.Common.DynamicAccessor(typeof(").Append(type.TypeFullyQualified).Append("), \"__nv_").Append(leaf).Append("\", \"").Append(leaf).AppendLine("\");"); + sb.Append(indent).Append("\tpublic static readonly global::Source.Common.IFieldAccessor[] ").Append(p.PropertyName).Append(" = [") + .Append(string.Join(", ", leaves.Select(l => l.Path.Replace('.', '_')))).AppendLine("];"); + } + sb.Append(indent).AppendLine("}"); + + sb.Append(classIndent).AppendLine("}"); + if (hasNamespace) + sb.AppendLine("}"); + return sb.ToString(); + } + + private static string BuildClass(StructModel s, bool clientDll) { + var sb = new StringBuilder(); + sb.AppendLine("// "); + sb.AppendLine("#nullable enable"); + sb.AppendLine(); + + bool hasNamespace = s.Namespace != null; + string typeIndent = hasNamespace ? " " : ""; + string indent = typeIndent + " "; + + if (hasNamespace) { + sb.Append("namespace ").AppendLine(s.Namespace); + sb.AppendLine("{"); + } + + sb.Append(typeIndent).Append("partial class ").Append(s.TypeName).AppendLine(" : global::Source.Common.INetworkStateChanged"); + sb.Append(typeIndent).AppendLine("{"); + sb.Append(indent).AppendLine("internal global::Source.Common.INetworkStateChanged? __nv_Outer;"); + if (clientDll) + sb.Append(indent).AppendLine("public void NetworkStateChanged(global::Source.Common.IFieldAccessor accessor) { }"); + else + sb.Append(indent).AppendLine("public void NetworkStateChanged(global::Source.Common.IFieldAccessor accessor) => __nv_Outer?.NetworkStateChanged(accessor);"); + sb.Append(typeIndent).AppendLine("}"); + if (hasNamespace) + sb.AppendLine("}"); + return sb.ToString(); + } + + private static int LeafCount(StructModel s) => s.Members.Sum(m => m.Plain ? 0 : m.Nested != null ? LeafCount(m.Nested) : 1); + + private static string BuildStruct(StructModel s, bool clientDll) { + var sb = new StringBuilder(); + sb.AppendLine("// "); + sb.AppendLine("#nullable enable"); + sb.AppendLine(); + + bool hasNamespace = s.Namespace != null; + string typeIndent = hasNamespace ? "\t" : ""; + string indent = typeIndent + "\t"; + string body = indent + "\t"; + + if (hasNamespace) { + sb.Append("namespace ").AppendLine(s.Namespace); + sb.AppendLine("{"); + } + + sb.Append(typeIndent).Append("partial struct ").AppendLine(s.TypeName); + sb.Append(typeIndent).AppendLine("{"); + sb.Append(indent).AppendLine("public ref struct NetworkVar"); + sb.Append(indent).AppendLine("{"); + sb.Append(body).Append("readonly ref ").Append(s.TypeFullyQualified).AppendLine(" Value;"); + sb.Append(body).AppendLine("readonly global::Source.Common.INetworkStateChanged Outer;"); + sb.Append(body).AppendLine("readonly global::Source.Common.IFieldAccessor[] Fields;"); + sb.Append(body).AppendLine("readonly int Offset;"); + sb.AppendLine(); + sb.Append(body).Append("public NetworkVar(ref ").Append(s.TypeFullyQualified).AppendLine(" value, global::Source.Common.INetworkStateChanged outer, global::Source.Common.IFieldAccessor[] fields, int offset) {"); + sb.Append(body).AppendLine("\tValue = ref value;"); + sb.Append(body).AppendLine("\tOuter = outer;"); + sb.Append(body).AppendLine("\tFields = fields;"); + sb.Append(body).AppendLine("\tOffset = offset;"); + sb.Append(body).AppendLine("}"); + sb.AppendLine(); + sb.Append(body).Append("public readonly ref readonly ").Append(s.TypeFullyQualified).AppendLine(" Get() => ref Value;"); + sb.Append(body).Append("public static implicit operator ").Append(s.TypeFullyQualified).AppendLine("(NetworkVar v) => v.Value;"); + + int index = 0; + foreach (MemberModel m in s.Members) { + sb.AppendLine(); + if (m.Plain) { + sb.Append(body).Append("public readonly ref ").Append(m.Type).Append(' ').Append(m.Name).Append(" => ref Value.").Append(m.Name).AppendLine(";"); + continue; + } + if (m.HandleEntity != null) { + sb.Append(body).Append("public readonly global::Game.Shared.NetworkHandle<").Append(m.HandleEntity).Append("> ").Append(m.Name) + .Append(" => new(ref Value.").Append(m.Name).Append(", Outer, Fields[Offset + ").Append(index).AppendLine("]);"); + index++; + continue; + } + if (m.ArrayElement != null) { + sb.Append(body).Append("public readonly global::Source.Common.NetworkArray<").Append(m.Type).Append(", ").Append(m.ArrayElement).Append("> ").Append(m.Name) + .Append(" => new(Value.").Append(m.Name).Append(", Outer, (global::Source.Common.DynamicArrayAccessor)Fields[Offset + ").Append(index).AppendLine("]);"); + index++; + continue; + } + if (m.Nested != null) { + sb.Append(body).Append("public readonly ").Append(m.Type).Append(".NetworkVar ").Append(m.Name) + .Append(" => new(ref Value.").Append(m.Name).Append(", Outer, Fields, Offset + ").Append(index).AppendLine(");"); + index += LeafCount(m.Nested); + continue; + } + sb.Append(body).Append("public readonly ").Append(m.Type).Append(' ').Append(m.Name).AppendLine(" {"); + sb.Append(body).Append("\tget => Value.").Append(m.Name).AppendLine(";"); + if (clientDll) + sb.Append(body).Append("\tset => Value.").Append(m.Name).AppendLine(" = value;"); + else { + sb.Append(body).AppendLine("\tset {"); + sb.Append(body).Append("\t\tif (!global::System.Collections.Generic.EqualityComparer<").Append(m.Type).Append(">.Default.Equals(Value.").Append(m.Name).AppendLine(", value)) {"); + sb.Append(body).Append("\t\t\tValue.").Append(m.Name).AppendLine(" = value;"); + sb.Append(body).Append("\t\t\tOuter.NetworkStateChanged(Fields[Offset + ").Append(index).AppendLine("]);"); + sb.Append(body).AppendLine("\t\t}"); + sb.Append(body).AppendLine("\t}"); + } + sb.Append(body).AppendLine("}"); + sb.Append(body).Append("public readonly ref ").Append(m.Type).Append(' ').Append(m.Name).AppendLine("ForModify() {"); + if (!clientDll) + sb.Append(body).Append("\tOuter.NetworkStateChanged(Fields[Offset + ").Append(index).AppendLine("]);"); + sb.Append(body).Append("\treturn ref Value.").Append(m.Name).AppendLine(";"); + sb.Append(body).AppendLine("}"); + index++; + } + + sb.Append(indent).AppendLine("}"); + sb.Append(typeIndent).AppendLine("}"); + if (hasNamespace) + sb.AppendLine("}"); + return sb.ToString(); + } + + private const string AttributeSource = +@"// +#nullable enable +namespace Source.Common +{ + [global::System.AttributeUsage(global::System.AttributeTargets.Property | global::System.AttributeTargets.Field, AllowMultiple = false, Inherited = false)] + internal sealed class NetworkVarEmbeddedAttribute : global::System.Attribute + { + } +}"; + + private sealed class MemberModel + { + public MemberModel(string name, string type, StructModel? nested, bool plain, string? arrayElement) { + ArrayElement = arrayElement; + Plain = plain; + Name = name; + Type = type; + Nested = nested; + } + public string Name { get; } + public string Type { get; } + public StructModel? Nested { get; } + public bool Plain { get; } + public string? ArrayElement { get; } + public string? HandleEntity { get; set; } + } + + private sealed class StructModel + { + public StructModel(string? @namespace, string typeName, string typeFullyQualified, List members, bool isClass = false) { + IsClass = isClass; + Namespace = @namespace; + TypeName = typeName; + TypeFullyQualified = typeFullyQualified; + Members = members; + } + public string? Namespace { get; } + public string TypeName { get; } + public string TypeFullyQualified { get; } + public List Members { get; } + public bool IsClass { get; } + } + + private sealed class OwnerModel + { + public OwnerModel(string propertyName, string modifiers, string? @namespace, string typeName, string typeFullyQualified, StructModel? embedded, Location location) { + PropertyName = propertyName; + Modifiers = modifiers; + Namespace = @namespace; + TypeName = typeName; + TypeFullyQualified = typeFullyQualified; + Embedded = embedded; + Location = location; + } + public string PropertyName { get; } + public string Modifiers { get; } + public string? Namespace { get; } + public string TypeName { get; } + public string TypeFullyQualified { get; } + public StructModel? Embedded { get; } + public Location Location { get; } + } + } +} diff --git a/Source.CodeAnalysis.NetworkVars/NetworkVarGenerator.cs b/Source.CodeAnalysis.NetworkVars/NetworkVarGenerator.cs index 43f733e7d..4e4e32d9a 100644 --- a/Source.CodeAnalysis.NetworkVars/NetworkVarGenerator.cs +++ b/Source.CodeAnalysis.NetworkVars/NetworkVarGenerator.cs @@ -50,8 +50,9 @@ public void Initialize(IncrementalGeneratorInitializationContext context) { .Where(static m => m != null); IncrementalValueProvider> collected = properties.Collect(); + IncrementalValueProvider clientDll = context.ParseOptionsProvider.Select(static (o, _) => o.PreprocessorSymbolNames.Contains("CLIENT_DLL")); - context.RegisterSourceOutput(collected, static (spc, models) => Emit(spc, models)); + context.RegisterSourceOutput(collected.Combine(clientDll), static (spc, input) => Emit(spc, input.Left, input.Right)); } private static PropertyModel? GetModel(GeneratorAttributeSyntaxContext ctx) { @@ -70,8 +71,21 @@ public void Initialize(IncrementalGeneratorInitializationContext context) { bool unsupported = containingType.ContainingType != null || containingType.IsGenericType; + string? arrayStorage = null; + if (prop.Type is INamedTypeSymbol arr && arr.Name == "NetworkArray" && arr.TypeArguments.Length == 2 && arr.ContainingNamespace.ToDisplayString() == "Source.Common") + arrayStorage = arr.TypeArguments[0].ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat); + string? handleStorage = null; + if (prop.Type is INamedTypeSymbol hnd && hnd.Name == "NetworkHandle" && hnd.TypeArguments.Length == 1) + handleStorage = "global::Source.Common.Handle<" + hnd.TypeArguments[0].ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat) + ">"; + + string modifiers = string.Join(" ", propSyntax.Modifiers.Where(m => !m.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword)).Select(m => m.Text)); + return new PropertyModel( propertyName: prop.Name, + modifiers: modifiers, + arrayStorage: arrayStorage, + handleStorage: handleStorage, + newBacking: prop.Type.IsReferenceType && prop.NullableAnnotation != NullableAnnotation.Annotated && prop.Type is INamedTypeSymbol rt && rt.InstanceConstructors.Any(c => c.Parameters.Length == 0 && c.DeclaredAccessibility == Accessibility.Public), typeDisplay: prop.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat), @namespace: containingType.ContainingNamespace.IsGlobalNamespace ? null @@ -84,7 +98,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context) { location: propSyntax.Identifier.GetLocation()); } - private static void Emit(SourceProductionContext spc, ImmutableArray models) { + private static void Emit(SourceProductionContext spc, ImmutableArray models, bool clientDll) { foreach (var group in models .Where(m => m != null) .Select(m => m!) @@ -112,13 +126,13 @@ private static void Emit(SourceProductionContext spc, ImmutableArray props) { + private static string BuildSource(PropertyModel type, List props, bool clientDll) { var sb = new StringBuilder(); sb.AppendLine("// "); sb.AppendLine("#nullable enable"); @@ -133,7 +147,10 @@ private static string BuildSource(PropertyModel type, List props) } string classIndent = hasNamespace ? "\t" : ""; - sb.Append(classIndent).Append("partial class ").AppendLine(type.TypeName); + sb.Append(classIndent).Append("partial class ").Append(type.TypeName); + if (!clientDll && props.Any(p => p.ArrayStorage != null || p.HandleStorage != null)) + sb.Append(" : global::Source.Common.INetworkStateChanged"); + sb.AppendLine(); sb.Append(classIndent).AppendLine("{"); foreach (PropertyModel p in props) { @@ -141,26 +158,51 @@ private static string BuildSource(PropertyModel type, List props) string name = p.PropertyName; string backing = "__nv_" + name; - sb.Append(indent).Append("private ").Append(t).Append(' ').Append(backing).AppendLine(";"); - sb.Append(indent).Append("public partial ").Append(t).Append(' ').Append(name).AppendLine(" {"); + if (p.HandleStorage != null) { + sb.Append(indent).Append("private ").Append(p.HandleStorage).Append(' ').Append(backing).AppendLine(" = new();"); + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(' ').Append(name).Append(" => new(ref ").Append(backing) + .Append(clientDll ? ", null" : ", this").Append(", NetworkVarFields.").Append(name).AppendLine(");"); + sb.AppendLine(); + continue; + } + if (p.ArrayStorage != null) { + sb.Append(indent).Append("private ").Append(p.ArrayStorage).Append(' ').Append(backing).AppendLine(";"); + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(' ').Append(name).Append(" => new(").Append(backing) + .Append(clientDll ? ", null" : ", this").Append(", NetworkVarFields.").Append(name).AppendLine(");"); + sb.AppendLine(); + continue; + } + + sb.Append(indent).Append("private ").Append(t).Append(' ').Append(backing).AppendLine(p.NewBacking ? " = new();" : ";"); + sb.Append(indent).Append(p.Modifiers).Append(" partial ").Append(t).Append(' ').Append(name).AppendLine(" {"); sb.Append(indent).Append("\tget => ").Append(backing).AppendLine(";"); - sb.Append(indent).AppendLine("\tset {"); - sb.Append(indent).Append("\t\tif (!global::System.Collections.Generic.EqualityComparer<").Append(t).Append(">.Default.Equals(").Append(backing).AppendLine(", value)) {"); - sb.Append(indent).Append("\t\t\t").Append(backing).AppendLine(" = value;"); - sb.Append(indent).Append("\t\t\tNetworkStateChanged(NetworkVarFields.").Append(name).AppendLine(");"); - sb.Append(indent).AppendLine("\t\t}"); - sb.Append(indent).AppendLine("\t}"); + if (clientDll) + sb.Append(indent).Append("\tset => ").Append(backing).AppendLine(" = value;"); + else { + sb.Append(indent).AppendLine("\tset {"); + sb.Append(indent).Append("\t\tif (!global::System.Collections.Generic.EqualityComparer<").Append(t).Append(">.Default.Equals(").Append(backing).AppendLine(", value)) {"); + sb.Append(indent).Append("\t\t\t").Append(backing).AppendLine(" = value;"); + sb.Append(indent).Append("\t\t\tNetworkStateChanged(NetworkVarFields.").Append(name).AppendLine(");"); + sb.Append(indent).AppendLine("\t\t}"); + sb.Append(indent).AppendLine("\t}"); + } sb.Append(indent).AppendLine("}"); - sb.Append(indent).Append("public ref ").Append(t).Append(' ').Append(name).AppendLine("ForModify() {"); - sb.Append(indent).Append("\tNetworkStateChanged(NetworkVarFields.").Append(name).AppendLine(");"); + sb.Append(indent).Append(p.Modifiers.Split(' ').Contains("new") ? "public new ref " : "public ref ").Append(t).Append(' ').Append(name).AppendLine("ForModify() {"); + if (!clientDll) + sb.Append(indent).Append("\tNetworkStateChanged(NetworkVarFields.").Append(name).AppendLine(");"); sb.Append(indent).Append("\treturn ref ").Append(backing).AppendLine(";"); sb.Append(indent).AppendLine("}"); sb.AppendLine(); } - sb.Append(indent).AppendLine("internal static class NetworkVarFields"); + sb.Append(indent).AppendLine("internal static partial class NetworkVarFields"); sb.Append(indent).AppendLine("{"); foreach (PropertyModel p in props) { + if (p.ArrayStorage != null) { + sb.Append(indent).Append("\tpublic static readonly global::Source.Common.DynamicArrayAccessor ").Append(p.PropertyName) + .Append(" = new(typeof(").Append(type.TypeFullyQualified).Append("), \"__nv_").Append(p.PropertyName).AppendLine("\");"); + continue; + } sb.Append(indent).Append("\tpublic static readonly global::Source.Common.IFieldAccessor ").Append(p.PropertyName) .Append(" = new global::Source.Common.DynamicAccessor(typeof(").Append(type.TypeFullyQualified).Append("), \"__nv_").Append(p.PropertyName).Append("\", \"").Append(p.PropertyName).AppendLine("\");"); } @@ -184,7 +226,7 @@ namespace Source.Common /// backing field, a change-checked setter that calls NetworkStateChanged, and a shared /// IFieldAccessor (exposed via the nested NetworkVarFields class) for the send table to use. /// - [global::System.AttributeUsage(global::System.AttributeTargets.Property, AllowMultiple = false, Inherited = false)] + [global::System.AttributeUsage(global::System.AttributeTargets.Property | global::System.AttributeTargets.Field, AllowMultiple = false, Inherited = false)] internal sealed class NetworkVarAttribute : global::System.Attribute { } @@ -192,9 +234,13 @@ internal sealed class NetworkVarAttribute : global::System.Attribute private sealed class PropertyModel { - public PropertyModel(string propertyName, string typeDisplay, string? @namespace, string typeName, + public PropertyModel(string propertyName, string modifiers, string? arrayStorage, string? handleStorage, bool newBacking, string typeDisplay, string? @namespace, string typeName, string typeFullyQualified, bool propertyIsPartial, bool typeIsPartial, bool unsupported, Location location) { PropertyName = propertyName; + Modifiers = modifiers; + ArrayStorage = arrayStorage; + HandleStorage = handleStorage; + NewBacking = newBacking; TypeDisplay = typeDisplay; Namespace = @namespace; TypeName = typeName; @@ -206,6 +252,10 @@ public PropertyModel(string propertyName, string typeDisplay, string? @namespace } public string PropertyName { get; } + public string Modifiers { get; } + public string? ArrayStorage { get; } + public string? HandleStorage { get; } + public bool NewBacking { get; } public string TypeDisplay { get; } public string? Namespace { get; } public string TypeName { get; } diff --git a/Source.Common/DataMap.cs b/Source.Common/DataMap.cs index 8de887ba6..583c032a0 100644 --- a/Source.Common/DataMap.cs +++ b/Source.Common/DataMap.cs @@ -745,7 +745,7 @@ namespace Source public static class DEFINE { static int SIZE_OF_ARRAY(ReadOnlySpan fieldName) { - var field = typeof(T).GetField(new(fieldName), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + var field = GetField_R(typeof(T), new(fieldName)); if (field == null) throw new NullReferenceException(); @@ -757,7 +757,7 @@ static int SIZE_OF_ARRAY(ReadOnlySpan fieldName) { } public static FieldInfo GetField_R(Type t, string name){ - var f = t.GetField(name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var f = t.GetField(name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) ?? t.GetField("__nv_" + name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly); if (f != null) return f; diff --git a/Source.Common/DtSend.cs b/Source.Common/DtSend.cs index 0247ef778..4fce41faa 100644 --- a/Source.Common/DtSend.cs +++ b/Source.Common/DtSend.cs @@ -200,7 +200,7 @@ public static SendProp SendPropArray3(DynamicArrayAccessor field, SendProp array for (int i = 0; i < elements; i++) { props[i] = arrayProp.Copy(); - props[i].FieldInfo = new DynamicArrayIndexAccessor(field, i); + props[i].FieldInfo = field.AtIndex(i)!; props[i].NameOverride = ElementNames[i]; props[i].SetParentArrayPropName(((field as DynamicAccessor)?.NetworkName ?? field.Name)); } diff --git a/Source.Common/FieldAccessIL.cs b/Source.Common/FieldAccessIL.cs index 10cbbf820..ac4be7122 100644 --- a/Source.Common/FieldAccessIL.cs +++ b/Source.Common/FieldAccessIL.cs @@ -134,32 +134,6 @@ public static GetFn Get(DynamicAccessor accessor) { else il.LoggedEmit(OpCodes.Call, getter); break; - case IndexInfoBehavior.NetworkArray: - il.LoggedEmit(OpCodes.Ldfld, (accessor.Members[^2] as FieldInfo)!.FieldType!.GetField("Value")!); - il.LoggedEmit(OpCodes.Ldc_I4, index.Index); - - if (index.ElementType.IsValueType && !index.ElementType.IsPrimitive) { - il.LoggedEmit(OpCodes.Ldelema, index.ElementType); - - il.LoggedEmit(OpCodes.Ldobj, index.ElementType); - } - else { - if (index.ElementType == typeof(bool)) il.LoggedEmit(OpCodes.Ldelem_I1); - else if (index.ElementType == typeof(sbyte)) il.LoggedEmit(OpCodes.Ldelem_I1); - else if (index.ElementType == typeof(byte)) il.LoggedEmit(OpCodes.Ldelem_I1); - else if (index.ElementType == typeof(short)) il.LoggedEmit(OpCodes.Ldelem_I2); - else if (index.ElementType == typeof(ushort)) il.LoggedEmit(OpCodes.Ldelem_I2); - else if (index.ElementType == typeof(char)) il.LoggedEmit(OpCodes.Ldelem_I2); - else if (index.ElementType == typeof(int)) il.LoggedEmit(OpCodes.Ldelem_I4); - else if (index.ElementType == typeof(uint)) il.LoggedEmit(OpCodes.Ldelem_I4); - else if (index.ElementType == typeof(ulong)) il.LoggedEmit(OpCodes.Ldelem_I8); - else if (index.ElementType == typeof(long)) il.LoggedEmit(OpCodes.Ldelem_I8); - else if (index.ElementType == typeof(float)) il.LoggedEmit(OpCodes.Ldelem_R4); - else if (index.ElementType == typeof(double)) il.LoggedEmit(OpCodes.Ldelem_R8); - else if (index.ElementType.IsClass) il.LoggedEmit(OpCodes.Ldelem_Ref); - else throw new NotSupportedException($"Unsupported element type: {index.ElementType}"); - } - break; case IndexInfoBehavior.InlineArray: if (index.Index > 0) { // Push the index @@ -301,39 +275,6 @@ public static GetFn Get(DynamicAccessor accessor) { break; case IndexInfo index: switch (index.Behavior) { - case IndexInfoBehavior.NetworkArray: - il.LoggedEmit(OpCodes.Ldfld, (accessor.Members[^2] as FieldInfo)!.FieldType!.GetField("Value")!); - il.LoggedEmit(OpCodes.Ldc_I4, index.Index); - - - if (index.ElementType.IsValueType && !index.ElementType.IsPrimitive) { - il.LoggedEmit(OpCodes.Ldelema, index.ElementType); - - LoadValue(accessor, il); - PerformAutocast(accessor, il); - - il.LoggedEmit(OpCodes.Stobj, index.ElementType); - } - else { - LoadValue(accessor, il); - PerformAutocast(accessor, il); - - if (index.ElementType == typeof(bool)) il.LoggedEmit(OpCodes.Stelem_I1); - else if (index.ElementType == typeof(sbyte)) il.LoggedEmit(OpCodes.Stelem_I1); - else if (index.ElementType == typeof(byte)) il.LoggedEmit(OpCodes.Stelem_I1); - else if (index.ElementType == typeof(short)) il.LoggedEmit(OpCodes.Stelem_I2); - else if (index.ElementType == typeof(ushort)) il.LoggedEmit(OpCodes.Stelem_I2); - else if (index.ElementType == typeof(char)) il.LoggedEmit(OpCodes.Stelem_I2); - else if (index.ElementType == typeof(int)) il.LoggedEmit(OpCodes.Stelem_I4); - else if (index.ElementType == typeof(uint)) il.LoggedEmit(OpCodes.Stelem_I4); - else if (index.ElementType == typeof(ulong)) il.LoggedEmit(OpCodes.Stelem_I8); - else if (index.ElementType == typeof(long)) il.LoggedEmit(OpCodes.Stelem_I8); - else if (index.ElementType == typeof(float)) il.LoggedEmit(OpCodes.Stelem_R4); - else if (index.ElementType == typeof(double)) il.LoggedEmit(OpCodes.Stelem_R8); - else if (index.ElementType.IsClass) il.LoggedEmit(OpCodes.Stelem_Ref); - else throw new NotSupportedException($"Unsupported element type: {index.ElementType}"); - } - break; case IndexInfoBehavior.InlineArray: if (index.Index > 0) { // Push the index @@ -438,7 +379,6 @@ public override void CopyTo(object instanceFrom, Span target) { target[i] = AtIndex(i)!.GetValue(instanceFrom); } const int IS_LIST = -1; - const int IS_NETWORK_ARRAY = -2; public DynamicArrayAccessor(Type targetType, ReadOnlySpan expression, int isList = IS_LIST) : base(targetType, expression) { var arrayAttr = StoringType.GetCustomAttribute(); @@ -449,12 +389,7 @@ public DynamicArrayAccessor(Type targetType, ReadOnlySpan expression, int Info = new(StoringType.GetGenericArguments()[0], () => isList, true); } else { - var lastType = Members.Last(); - NetworkArraySizeAttribute? netArraySize; - if (lastType is FieldInfo field && StoringType.IsGenericType && StoringType.GetGenericTypeDefinition() == typeof(NetworkArray<>) && (netArraySize = field.GetCustomAttribute()) != null) { - Info = new(StoringType.GetGenericArguments()[0], () => netArraySize.Size); - } - else if (!DynamicArrayHelp.AcceptableTypes.TryGetValue(StoringType, out Info!)) + if (!DynamicArrayHelp.AcceptableTypes.TryGetValue(StoringType, out Info!)) throw new Exception("Uh oh, we need a type def override"); } @@ -490,8 +425,7 @@ public enum IndexInfoBehavior { DirectElement, InlineArray, - GenericArrayType, - NetworkArray + GenericArrayType } public sealed class IndexInfo : MemberInfo @@ -533,10 +467,7 @@ void Process() { insideType = container.GetGenericArguments().FirstOrDefault(); if (insideType != null) { - if (container.GetGenericTypeDefinition() == typeof(NetworkArray<>)) - behavior = IndexInfoBehavior.NetworkArray; - else - behavior = IndexInfoBehavior.GenericArrayType; + behavior = IndexInfoBehavior.GenericArrayType; return; } @@ -602,7 +533,7 @@ string BuildNetworkName() { foreach (MemberInfo member in Members) { if (member is IndexInfo) continue; - MemberInfo target = member.Name.StartsWith("__nv_") ? member.DeclaringType!.GetProperty(member.Name[5..], BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) ?? member : member; + MemberInfo target = member.Name.StartsWith("__nv_") ? member.DeclaringType!.GetProperty(member.Name[5..], BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly) ?? member : member; if (target is not IndexInfo && target.GetCustomAttribute() != null) anyNamed = true; } @@ -618,7 +549,7 @@ string BuildNetworkName() { } if (member.Name.StartsWith("__nv_")) - member = member.DeclaringType!.GetProperty(member.Name[5..], BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) ?? member; + member = member.DeclaringType!.GetProperty(member.Name[5..], BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly) ?? member; string memberName = member.GetCustomAttribute()?.Name ?? member.Name; if (i + 1 < Members.Count && Members[i + 1] is IndexInfo next && memberName.Contains("{0}")) { @@ -644,21 +575,29 @@ void HandleFieldProp(ReadOnlySpan index) { if (index.IsEmpty) return; - MemberInfo[] memberInfos = buildingTargetType!.GetMember(new string(index), BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic); - foreach (var member in memberInfos) { - switch (member) { - case FieldInfo field: - Members.Add(field); - buildingTargetType = field.FieldType; - return; - case PropertyInfo prop: - Members.Add(prop); - buildingTargetType = prop.PropertyType; - return; + string name = new(index); + for (Type? type = buildingTargetType; type != null; type = type.BaseType) { + FieldInfo? storage = type.GetField("__nv_" + name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); + if (storage != null) { + Members.Add(storage); + buildingTargetType = storage.FieldType; + return; + } + foreach (var member in type.GetMember(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)) { + switch (member) { + case FieldInfo field: + Members.Add(field); + buildingTargetType = field.FieldType; + return; + case PropertyInfo prop: + Members.Add(prop); + buildingTargetType = prop.PropertyType; + return; + } } } - throw new KeyNotFoundException($"Cannot find an appropriate member named '{index}' in the current target type '{buildingTargetType.Name}'. Ensure naming is correct."); + throw new KeyNotFoundException($"Cannot find an appropriate member named '{index}' in the current target type '{buildingTargetType!.Name}'. Ensure naming is correct."); } public DynamicAccessor(Type targetType, ReadOnlySpan expression, ReadOnlySpan name) : this(targetType, expression) { Name = new(name); @@ -884,10 +823,8 @@ public static class FIELD public static DynamicAccessor OF_NAMED(ReadOnlySpan expression, ReadOnlySpan name) => new(typeof(T), expression, name) { NetworkNameOverride = new(name) }; public static DynamicArrayAccessor OF_ARRAY(ReadOnlySpan expression) => new(typeof(T), expression); public static DynamicArrayIndexAccessor OF_ARRAYINDEX(ReadOnlySpan expression, int index = 0) => new(OF_ARRAY(expression), index); - public static DynamicArrayIndexAccessor OF_SENDINFO_ARRAY(ReadOnlySpan expression) { - DynamicArrayAccessor array = OF_ARRAY(expression); - return new(array, 0) { NetworkNameOverride = array.NetworkName }; - } + public static DynamicArrayIndexAccessor OF_SENDINFO_ARRAY(ReadOnlySpan expression) => OF_SENDINFO_ARRAY(OF_ARRAY(expression)); + public static DynamicArrayIndexAccessor OF_SENDINFO_ARRAY(DynamicArrayAccessor array) => new(array, 0) { NetworkNameOverride = array.NetworkName }; public static DynamicArrayIndexAccessor OF_VECTORELEM(ReadOnlySpan expression, int index) => new(OF_ARRAY(expression), index, isVectorElem: true); public static DynamicArrayAccessor OF_LIST(ReadOnlySpan expression, int max) => new(typeof(T), expression, isList: max); } diff --git a/Source.Common/NetworkVar.cs b/Source.Common/NetworkVar.cs index 65bd59216..9cfcbe12c 100644 --- a/Source.Common/NetworkVar.cs +++ b/Source.Common/NetworkVar.cs @@ -2,54 +2,54 @@ public delegate void NetworkVarChanged(ref T newValue); -public struct NetworkVarBase +public interface INetworkStateChanged { - public Type Value; - public NetworkVarChanged? VarChanged; -} - -// TODO: Can we make this a source generator of some kind. It is ridiculous I have to double define the count. -[AttributeUsage(AttributeTargets.Field)] -public class NetworkArraySizeAttribute(int size) : Attribute{ - public int Size => size; + void NetworkStateChanged(IFieldAccessor accessor); } -public struct NetworkArray(int count) where Type : unmanaged +public readonly ref struct NetworkArray where TArray : struct { - public readonly Type[] Value = new Type[count]; - public NetworkVarChanged? VarChanged; - - public static implicit operator Type[](NetworkArray netArray) => netArray.Value; + readonly Span Value; + readonly INetworkStateChanged? Outer; + readonly DynamicArrayAccessor Field; + + public NetworkArray(Span value, INetworkStateChanged? outer, DynamicArrayAccessor field) { + Value = value; + Outer = outer; + Field = field; + } - public readonly ref readonly Type this[int i] => ref Get(i); + public ref readonly Type this[int i] => ref Get(i); - public readonly ref readonly Type Get(int i) { - Assert(i >= 0 && i < count); + public ref readonly Type Get(int i) { + Assert(i >= 0 && i < Value.Length); return ref Value[i]; } - public readonly ref Type GetForModify(int i) { - Assert(i >= 0 && i < count); + public ref Type GetForModify(int i) { + Assert(i >= 0 && i < Value.Length); NetworkStateChanged(i); return ref Value[i]; } - public readonly unsafe void Set(int i, in Type val) { - Assert(i >= 0 && i < count); - if (memcmp(in Value[i], in val) != 0) { + public void Set(int i, in Type val) { + Assert(i >= 0 && i < Value.Length); + if (!EqualityComparer.Default.Equals(Value[i], val)) { NetworkStateChanged(i); Value[i] = val; } } - public readonly Type[] Base => Value; - public readonly int Count() => count; + public ReadOnlySpan Base => Value; + public int Count() => Value.Length; - public void Hook(NetworkVarChanged fn) => VarChanged = fn; + public static implicit operator ReadOnlySpan(NetworkArray netArray) => netArray.Value; - private readonly void NetworkStateChanged(int changeIndex) { - if (VarChanged == null) - return; - VarChanged(ref Value[changeIndex]); - } + void NetworkStateChanged(int changeIndex) => Outer?.NetworkStateChanged(Field.AtIndex(changeIndex)!); +} + +public struct NetworkVarBase +{ + public Type Value; + public NetworkVarChanged? VarChanged; } diff --git a/Source.Engine/DtLocalTransfer.cs b/Source.Engine/DtLocalTransfer.cs index e694f3c83..3cca86e46 100644 --- a/Source.Engine/DtLocalTransfer.cs +++ b/Source.Engine/DtLocalTransfer.cs @@ -162,6 +162,7 @@ public static void BuildPropOffsetToIndexMap(SendTablePrecalc precalc, StandardS IFieldAccessor? field = prop.FieldInfo; int elementCount = 1; + bool isArray = false; if (prop.GetPropType() == SendPropType.Array) { SendProp? arrayProp = prop.GetArrayProp(); @@ -170,6 +171,7 @@ public static void BuildPropOffsetToIndexMap(SendTablePrecalc precalc, StandardS field = arrayProp.FieldInfo; elementCount = prop.GetNumElements(); + isArray = true; } if (field == null) @@ -178,7 +180,7 @@ public static void BuildPropOffsetToIndexMap(SendTablePrecalc precalc, StandardS bool isVectorElem = (prop.GetFlags() & PropFlags.IsAVectorElem) != 0; for (int j = 0; j < elementCount; j++) { - IFieldAccessor elementField = field is IFieldAccessorIndexable indexable ? indexable.AtIndex(j) : field; + IFieldAccessor elementField = isArray && field is DynamicArrayIndexAccessor element ? element.BaseArrayAccessor.AtIndex(j)! : field is IFieldAccessorIndexable indexable ? indexable.AtIndex(j) : field; if (isVectorElem) AddPropOffsetToMap(precalc, i | PROP_INDEX_VECTOR_ELEM_MARKER, elementField); diff --git a/Source.ShaderAPI.Gl46/ShaderSystem.cs b/Source.ShaderAPI.Gl46/ShaderSystem.cs index c37fddb68..27179625e 100644 --- a/Source.ShaderAPI.Gl46/ShaderSystem.cs +++ b/Source.ShaderAPI.Gl46/ShaderSystem.cs @@ -496,7 +496,7 @@ private unsafe uint CompileShader(int glType, ReadOnlySpan name, ReadOnlyS if (combos.IsEmpty) Msg($"Compiled shader: {name} ({typeName})\n"); else - Msg($"Compiled shader: {name} ({typeName}) [{combos}]\n"); + Msg($"Compiled shader: {name} ({typeName}) [{string.Join(';', combos.ToString().Split(';').Where(x => !x.EndsWith(" 0")))}]\n"); } return pShader;