From 31f66897ef10be1c0f991ea8b3574a867fdfcc32 Mon Sep 17 00:00:00 2001 From: TacByte Date: Sat, 17 Aug 2019 03:27:23 +0200 Subject: [PATCH] Refactor Appearance, added documentation, rebuild migration --- Characters.Client/Characters.Client.csproj | 8 +- Characters.Client/CharactersService.cs | 18 +- Characters.Client/Models/Apparel.cs | 35 -- Characters.Client/Models/Appearance.cs | 25 -- Characters.Client/Models/Character.cs | 325 ++++++------------ .../Models/CharacterFacialTrait.cs | 54 +++ Characters.Client/Models/CharacterHeritage.cs | 24 ++ Characters.Client/Models/CharacterStyle.cs | 174 ++++++++++ Characters.Client/Models/CharacterTrait.cs | 73 ++++ Characters.Client/Models/FaceShape.cs | 29 -- Characters.Client/Models/Heritage.cs | 16 - Characters.Server/Characters.Server.csproj | 13 +- Characters.Server/CharactersController.cs | 120 ++++++- .../Migrations/201903230015160_Init.cs | 298 ---------------- .../201904122043530_AddSessionFk.cs | 34 -- .../201908030133090_AddCharacterInventory.cs | 48 --- .../Migrations/201908170055570_Init.cs | 310 +++++++++++++++++ Characters.Server/Models/Apparel.cs | 63 ---- Characters.Server/Models/Appearance.cs | 43 --- Characters.Server/Models/Character.cs | 26 +- .../Models/CharacterFacialTrait.cs | 221 ++++++++++++ Characters.Server/Models/CharacterHeritage.cs | 60 ++++ Characters.Server/Models/CharacterStyle.cs | 222 ++++++++++++ Characters.Server/Models/CharacterTrait.cs | 170 +++++++++ Characters.Server/Models/FaceShape.cs | 35 -- Characters.Server/Models/Heritage.cs | 20 -- Characters.Server/Storage/StorageContext.cs | 2 - Characters.Shared/CharacterEvents.cs | 6 + Characters.Shared/Characters.Shared.csproj | 21 +- Characters.Shared/Models/Apparel/Component.cs | 9 - Characters.Shared/Models/Apparel/Prop.cs | 9 - .../Models/Appearance/Feature.cs | 17 - .../Models/Appearance/FeatureColorTypes.cs | 19 - .../Models/Appearance/FeatureTypes.cs | 17 - Characters.Shared/Models/IApparel.cs | 34 -- Characters.Shared/Models/IAppearance.cs | 24 -- Characters.Shared/Models/ICharacter.cs | 2 +- .../Models/ICharacterFacialTrait.cs | 170 +++++++++ .../Models/ICharacterHeritage.cs | 43 +++ Characters.Shared/Models/ICharacterStyle.cs | 189 ++++++++++ Characters.Shared/Models/ICharacterTrait.cs | 140 ++++++++ Characters.Shared/Models/IFaceShape.cs | 33 -- Characters.Shared/Models/IHeritage.cs | 12 - Characters.Shared/Models/Style/Component.cs | 37 ++ .../{Apparel => Style}/ComponentTypes.cs | 2 +- Characters.Shared/Models/Style/Prop.cs | 37 ++ .../Models/{Apparel => Style}/PropTypes.cs | 2 +- Characters.Shared/Models/Trait/Feature.cs | 50 +++ 48 files changed, 2252 insertions(+), 1087 deletions(-) delete mode 100644 Characters.Client/Models/Apparel.cs delete mode 100644 Characters.Client/Models/Appearance.cs create mode 100644 Characters.Client/Models/CharacterFacialTrait.cs create mode 100644 Characters.Client/Models/CharacterHeritage.cs create mode 100644 Characters.Client/Models/CharacterStyle.cs create mode 100644 Characters.Client/Models/CharacterTrait.cs delete mode 100644 Characters.Client/Models/FaceShape.cs delete mode 100644 Characters.Client/Models/Heritage.cs delete mode 100644 Characters.Server/Migrations/201903230015160_Init.cs delete mode 100644 Characters.Server/Migrations/201904122043530_AddSessionFk.cs delete mode 100644 Characters.Server/Migrations/201908030133090_AddCharacterInventory.cs create mode 100644 Characters.Server/Migrations/201908170055570_Init.cs delete mode 100644 Characters.Server/Models/Apparel.cs delete mode 100644 Characters.Server/Models/Appearance.cs create mode 100644 Characters.Server/Models/CharacterFacialTrait.cs create mode 100644 Characters.Server/Models/CharacterHeritage.cs create mode 100644 Characters.Server/Models/CharacterStyle.cs create mode 100644 Characters.Server/Models/CharacterTrait.cs delete mode 100644 Characters.Server/Models/FaceShape.cs delete mode 100644 Characters.Server/Models/Heritage.cs delete mode 100644 Characters.Shared/Models/Apparel/Component.cs delete mode 100644 Characters.Shared/Models/Apparel/Prop.cs delete mode 100644 Characters.Shared/Models/Appearance/Feature.cs delete mode 100644 Characters.Shared/Models/Appearance/FeatureColorTypes.cs delete mode 100644 Characters.Shared/Models/Appearance/FeatureTypes.cs delete mode 100644 Characters.Shared/Models/IApparel.cs delete mode 100644 Characters.Shared/Models/IAppearance.cs create mode 100644 Characters.Shared/Models/ICharacterFacialTrait.cs create mode 100644 Characters.Shared/Models/ICharacterHeritage.cs create mode 100644 Characters.Shared/Models/ICharacterStyle.cs create mode 100644 Characters.Shared/Models/ICharacterTrait.cs delete mode 100644 Characters.Shared/Models/IFaceShape.cs delete mode 100644 Characters.Shared/Models/IHeritage.cs create mode 100644 Characters.Shared/Models/Style/Component.cs rename Characters.Shared/Models/{Apparel => Style}/ComponentTypes.cs (80%) create mode 100644 Characters.Shared/Models/Style/Prop.cs rename Characters.Shared/Models/{Apparel => Style}/PropTypes.cs (78%) create mode 100644 Characters.Shared/Models/Trait/Feature.cs diff --git a/Characters.Client/Characters.Client.csproj b/Characters.Client/Characters.Client.csproj index 580ddd4..47f4df7 100644 --- a/Characters.Client/Characters.Client.csproj +++ b/Characters.Client/Characters.Client.csproj @@ -61,12 +61,12 @@ - - + + - - + + diff --git a/Characters.Client/CharactersService.cs b/Characters.Client/CharactersService.cs index 722db5a..413adfa 100644 --- a/Characters.Client/CharactersService.cs +++ b/Characters.Client/CharactersService.cs @@ -100,7 +100,7 @@ private async void OnCreate(object sender, CreateOverlayEventArgs e) { if (string.IsNullOrWhiteSpace(e.Character.Middlename)) e.Character.Middlename = null; - e.Character.WalkingStyle = "move_m@drunk@verydrunk"; + e.Character.WalkingStyle = (e.Character.Gender == 0 ? "move_m@generic" : "move_f@generic"); e.Character.Model = ((uint)(e.Character.Gender == 0 ? PedHash.FreemodeMale01 : PedHash.FreemodeFemale01)).ToString(); // Send new character @@ -238,8 +238,22 @@ private void SaveCharacter() { if (!this.isPlaying) return; - this.activeCharacter.Position = Game.Player.Character.Position.ToVector3().ToPosition(); + var player = Game.PlayerPed; + + this.activeCharacter.Position = player.Position.ToVector3().ToPosition(); + this.activeCharacter.Model = ((uint)player.Model.Hash).ToString(); + this.Rpc.Event(CharacterEvents.SaveCharacter).Trigger(this.activeCharacter); + + this.Rpc.Event(CharacterEvents.SaveStyle).Trigger(this.activeCharacter.Id, CharacterStyle.ConvertStyle(player.Style, this.activeCharacter.Id)); + + // FreeMode Models only + if (!(this.activeCharacter.ModelHash == PedHash.FreemodeMale01 || + this.activeCharacter.ModelHash == PedHash.FreemodeFemale01)) return; + + this.Rpc.Event(CharacterEvents.SaveFacialTrait).Trigger(this.activeCharacter.Id, CharacterFacialTrait.ConvertFacialTrait(player.Handle)); + this.Rpc.Event(CharacterEvents.SaveHeritage).Trigger(this.activeCharacter.Id, CharacterHeritage.ConvertHeritage(player.GetHeadBlendData(), this.activeCharacter.Created)); + this.Rpc.Event(CharacterEvents.SaveTrait).Trigger(this.activeCharacter.Id, CharacterTrait.ConvertTrait(player)); } private void SavePosition() diff --git a/Characters.Client/Models/Apparel.cs b/Characters.Client/Models/Apparel.cs deleted file mode 100644 index 357d9d3..0000000 --- a/Characters.Client/Models/Apparel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using System; -using IgiCore.Characters.Shared.Models.Apparel; - -namespace IgiCore.Characters.Client.Models -{ - public class Apparel : IApparel - { - public Guid Id { get; set; } - public DateTime Created { get; set; } - public DateTime? Deleted { get; set; } - public Component Face { get; set; } - public Component Head { get; set; } - public Component Hair { get; set; } - public Component Torso { get; set; } - public Component Torso2 { get; set; } - public Component Legs { get; set; } - public Component Hands { get; set; } - public Component Shoes { get; set; } - public Component Special1 { get; set; } - public Component Special2 { get; set; } - public Component Special3 { get; set; } - public Component Textures { get; set; } - public Prop Hat { get; set; } - public Prop Glasses { get; set; } - public Prop EarPiece { get; set; } - public Prop Unknown3 { get; set; } - public Prop Unknown4 { get; set; } - public Prop Unknown5 { get; set; } - public Prop Watch { get; set; } - public Prop Wristband { get; set; } - public Prop Unknown8 { get; set; } - public Prop Unknown9 { get; set; } - } -} diff --git a/Characters.Client/Models/Appearance.cs b/Characters.Client/Models/Appearance.cs deleted file mode 100644 index b5b8b58..0000000 --- a/Characters.Client/Models/Appearance.cs +++ /dev/null @@ -1,25 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using IgiCore.Characters.Shared.Models.Appearance; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Client.Models -{ - public class Appearance : IdentityModel, IAppearance - { - public int EyeColorId { get; set; } - public int HairColorId { get; set; } - public int HairHighlightColor { get; set; } - - public Feature Aging { get; set; } - public Feature Beard { get; set; } - public Feature Blush { get; set; } - public Feature Blemishes { get; set; } - public Feature Chest { get; set; } - public Feature Complexion { get; set; } - public Feature Eyebrows { get; set; } - public Feature Lipstick { get; set; } - public Feature Makeup { get; set; } - public Feature MolesAndFreckles { get; set; } - public Feature SunDamage { get; set; } - } -} diff --git a/Characters.Client/Models/Character.cs b/Characters.Client/Models/Character.cs index 15a679a..2acfd3a 100644 --- a/Characters.Client/Models/Character.cs +++ b/Characters.Client/Models/Character.cs @@ -1,16 +1,11 @@ using CitizenFX.Core; using CitizenFX.Core.Native; using IgiCore.Characters.Shared.Models; -using IgiCore.Characters.Shared.Models.Apparel; -using IgiCore.Characters.Shared.Models.Appearance; using Newtonsoft.Json; -using NFive.SDK.Client.Extensions; using NFive.SDK.Core.Diagnostics; -using NFive.SDK.Core.Helpers; using NFive.SDK.Core.Models; using System; using System.Threading.Tasks; -using Prop = IgiCore.Characters.Shared.Models.Apparel.Prop; namespace IgiCore.Characters.Client.Models { @@ -28,25 +23,26 @@ public class Character : IdentityModel, ICharacter public Position Position { get; set; } public string Model { get; set; } public string WalkingStyle { get; set; } - public Guid ApparelId { get; set; } - public Apparel Apparel { get; set; } - public Guid AppearanceId { get; set; } - public Appearance Appearance { get; set; } - public Guid FaceShapeId { get; set; } - public FaceShape FaceShape { get; set; } + public Guid FacialTraitId { get; set; } + public CharacterFacialTrait FacialTrait { get; set; } public Guid HeritageId { get; set; } - public Heritage Heritage { get; set; } + public CharacterHeritage Heritage { get; set; } + public Guid StyleId { get; set; } + public CharacterStyle Style { get; set; } + public Guid TraitId { get; set; } + public CharacterTrait Trait { get; set; } public DateTime? LastPlayed { get; set; } public Guid UserId { get; set; } [JsonIgnore] public string FullName => $"{this.Forename} {this.Middlename} {this.Surname}".Replace(" ", " "); [JsonIgnore] public PedHash ModelHash => (PedHash)Convert.ToUInt32(this.Model); - + public void RenderCustom(ILogger logger) { - // Only for free mode models - if (this.ModelHash != PedHash.FreemodeMale01 && this.ModelHash != PedHash.FreemodeFemale01) return; + // Only for FreeMode models + if (!(this.ModelHash == PedHash.FreemodeMale01 || + this.ModelHash == PedHash.FreemodeFemale01)) return; var player = Game.Player.Character.Handle; @@ -54,48 +50,78 @@ public void RenderCustom(ILogger logger) // https://wiki.gt-mp.net/index.php/Character_Components // https://wiki.gt-mp.net/index.php?title=Hair_Colors + // Heritage API.SetPedHeadBlendData(player, this.Heritage.Parent1, this.Heritage.Parent2, 0, this.Heritage.Parent1, this.Heritage.Parent2, 0, this.Heritage.Resemblance, this.Heritage.SkinTone, 0f, true); - API.SetPedHairColor(player, this.Appearance.HairColorId, this.Appearance.HairHighlightColor); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Age, this.Appearance.Aging.Index, this.Appearance.Aging.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Beard, this.Appearance.Beard.Index, this.Appearance.Beard.Opacity); - API.SetPedEyeColor(player, this.Appearance.EyeColorId); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Eyebrows, this.Appearance.Eyebrows.Index, this.Appearance.Eyebrows.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Makeup, this.Appearance.Makeup.Index, this.Appearance.Makeup.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Lipstick, this.Appearance.Lipstick.Index, this.Appearance.Lipstick.Opacity); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Beard, (int)this.Appearance.Beard.ColorType, this.Appearance.Beard.ColorId, this.Appearance.Beard.SecondColorId); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Eyebrows, (int)this.Appearance.Eyebrows.ColorType, this.Appearance.Eyebrows.ColorId, this.Appearance.Eyebrows.SecondColorId); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Makeup, (int)this.Appearance.Makeup.ColorType, this.Appearance.Makeup.ColorId, this.Appearance.Makeup.SecondColorId); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Lipstick, (int)this.Appearance.Lipstick.ColorType, this.Appearance.Lipstick.ColorId, this.Appearance.Lipstick.SecondColorId); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Blush, this.Appearance.Blush.Index, this.Appearance.Blush.Opacity); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Blush, (int)this.Appearance.Blush.ColorType, this.Appearance.Blush.ColorId, this.Appearance.Blush.SecondColorId); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Complexion, this.Appearance.Complexion.Index, this.Appearance.Complexion.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.SunDamage, this.Appearance.SunDamage.Index, this.Appearance.SunDamage.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.MolesAndFreckles, this.Appearance.MolesAndFreckles.Index, this.Appearance.MolesAndFreckles.Opacity); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Chest, this.Appearance.Chest.Index, this.Appearance.Chest.Opacity); - API.SetPedHeadOverlayColor(player, (int)FeatureTypes.Chest, (int)this.Appearance.Chest.ColorType, this.Appearance.Chest.ColorId, this.Appearance.Chest.SecondColorId); - API.SetPedHeadOverlay(player, (int)FeatureTypes.Blemishes, this.Appearance.Blemishes.Index, this.Appearance.Blemishes.Opacity); - - API.SetPedFaceFeature(player, 0, this.FaceShape.NoseWidth); - API.SetPedFaceFeature(player, 1, this.FaceShape.NosePeakHeight); - API.SetPedFaceFeature(player, 2, this.FaceShape.NosePeakLength); - API.SetPedFaceFeature(player, 3, this.FaceShape.NoseBoneHeight); - API.SetPedFaceFeature(player, 4, this.FaceShape.NosePeakLowering); - API.SetPedFaceFeature(player, 5, this.FaceShape.NoseBoneTwist); - API.SetPedFaceFeature(player, 6, this.FaceShape.EyeBrowHeight); - API.SetPedFaceFeature(player, 7, this.FaceShape.EyeBrowLength); - API.SetPedFaceFeature(player, 8, this.FaceShape.CheekBoneHeight); - API.SetPedFaceFeature(player, 9, this.FaceShape.CheekBoneWidth); - API.SetPedFaceFeature(player, 10, this.FaceShape.CheekWidth); - API.SetPedFaceFeature(player, 11, this.FaceShape.EyeOpenings); - API.SetPedFaceFeature(player, 12, this.FaceShape.LipThickness); - API.SetPedFaceFeature(player, 13, this.FaceShape.JawBoneWidth); - API.SetPedFaceFeature(player, 14, this.FaceShape.JawBoneLength); - API.SetPedFaceFeature(player, 15, this.FaceShape.ChinBoneLowering); - API.SetPedFaceFeature(player, 16, this.FaceShape.ChinBoneLength); - API.SetPedFaceFeature(player, 17, this.FaceShape.ChinBoneWidth); - API.SetPedFaceFeature(player, 18, this.FaceShape.ChinDimple); - API.SetPedFaceFeature(player, 19, this.FaceShape.NeckThickness); + // Eye Color + API.SetPedEyeColor(player, this.Trait.EyeColorId); + + // Hair Color + API.SetPedHairColor(player, this.Trait.HairColorId, this.Trait.HairHighlightColor); + + // 0 Blemishes + API.SetPedHeadOverlay(player, 0, this.Trait.Blemishes.Index, this.Trait.Blemishes.Opacity); + + // 1 Beard + API.SetPedHeadOverlay(player, 1, this.Trait.Beard.Index, this.Trait.Beard.Opacity); + API.SetPedHeadOverlayColor(player, 1, 1, this.Trait.Beard.ColorId, this.Trait.Beard.SecondColorId); + + // 2 EyeBrows + API.SetPedHeadOverlay(player, 2, this.Trait.Eyebrows.Index, this.Trait.Eyebrows.Opacity); + API.SetPedHeadOverlayColor(player, 2, 1, this.Trait.Eyebrows.ColorId, this.Trait.Eyebrows.SecondColorId); + + // 3 Aging + API.SetPedHeadOverlay(player, 3, this.Trait.Aging.Index, this.Trait.Aging.Opacity); + + // 4 MakeUp + API.SetPedHeadOverlay(player, 4, this.Trait.Makeup.Index, this.Trait.Makeup.Opacity); + API.SetPedHeadOverlayColor(player, 4, 2, this.Trait.Makeup.ColorId, this.Trait.Makeup.SecondColorId); + + // 5 Blush + API.SetPedHeadOverlay(player, 5, this.Trait.Blush.Index, this.Trait.Blush.Opacity); + API.SetPedHeadOverlayColor(player, 5, 2, this.Trait.Blush.ColorId, this.Trait.Blush.SecondColorId); + + // 6 Complexion + API.SetPedHeadOverlay(player, 6, this.Trait.Complexion.Index, this.Trait.Complexion.Opacity); + + // 7 Sun Damage + API.SetPedHeadOverlay(player, 7, this.Trait.SunDamage.Index, this.Trait.SunDamage.Opacity); + + // 8 Lipstick + API.SetPedHeadOverlay(player, 8, this.Trait.Lipstick.Index, this.Trait.Lipstick.Opacity); + API.SetPedHeadOverlayColor(player, 8, 2, this.Trait.Lipstick.ColorId, this.Trait.Lipstick.SecondColorId); + + // 9 Moles And Freckles + API.SetPedHeadOverlay(player, 9, this.Trait.MolesAndFreckles.Index, this.Trait.MolesAndFreckles.Opacity); + + // 10 Chest Hair + API.SetPedHeadOverlay(player, 10, this.Trait.ChestHair.Index, this.Trait.ChestHair.Opacity); + API.SetPedHeadOverlayColor(player, 10, 1, this.Trait.ChestHair.ColorId, this.Trait.ChestHair.SecondColorId); + + // 11 Body Blemishes + API.SetPedHeadOverlay(player, 11, this.Trait.BodyBlemishes.Index, this.Trait.BodyBlemishes.Opacity); + + // Facial Traits + API.SetPedFaceFeature(player, 0, this.FacialTrait.NoseWidth); + API.SetPedFaceFeature(player, 1, this.FacialTrait.NosePeakHeight); + API.SetPedFaceFeature(player, 2, this.FacialTrait.NosePeakLength); + API.SetPedFaceFeature(player, 3, this.FacialTrait.NoseBoneHeight); + API.SetPedFaceFeature(player, 4, this.FacialTrait.NosePeakLowering); + API.SetPedFaceFeature(player, 5, this.FacialTrait.NoseBoneTwist); + API.SetPedFaceFeature(player, 6, this.FacialTrait.EyeBrowHeight); + API.SetPedFaceFeature(player, 7, this.FacialTrait.EyeBrowLength); + API.SetPedFaceFeature(player, 8, this.FacialTrait.CheekBoneHeight); + API.SetPedFaceFeature(player, 9, this.FacialTrait.CheekBoneWidth); + API.SetPedFaceFeature(player, 10, this.FacialTrait.CheekWidth); + API.SetPedFaceFeature(player, 11, this.FacialTrait.EyeOpenings); + API.SetPedFaceFeature(player, 12, this.FacialTrait.LipThickness); + API.SetPedFaceFeature(player, 13, this.FacialTrait.JawBoneWidth); + API.SetPedFaceFeature(player, 14, this.FacialTrait.JawBoneLength); + API.SetPedFaceFeature(player, 15, this.FacialTrait.ChinBoneLowering); + API.SetPedFaceFeature(player, 16, this.FacialTrait.ChinBoneLength); + API.SetPedFaceFeature(player, 17, this.FacialTrait.ChinBoneWidth); + API.SetPedFaceFeature(player, 18, this.FacialTrait.ChinDimple); + API.SetPedFaceFeature(player, 19, this.FacialTrait.NeckThickness); } public async Task Render(ILogger logger) @@ -103,179 +129,42 @@ public async Task Render(ILogger logger) // Apparently this _must_ be called Game.Player.Character.Style.SetDefaultClothes(); - Game.Player.Character.Position = this.Position.ToVector3().ToCitVector3(); + //Game.Player.Character.Position = this.Position.ToVector3(); + Game.Player.Character.Position = new CitizenFX.Core.Vector3(this.Position.X, this.Position.Y, this.Position.Z); Game.Player.Character.Armor = this.Armor; API.RequestClipSet(this.WalkingStyle); await BaseScript.Delay(100); // Required to load Game.Player.Character.MovementAnimationSet = this.WalkingStyle; - Game.Player.Character.Style[PedComponents.Face].SetVariation(this.Apparel.Face.Index, this.Apparel.Face.Texture); - Game.Player.Character.Style[PedComponents.Head].SetVariation(this.Apparel.Head.Index, this.Apparel.Head.Texture); + Game.Player.Character.Style[PedComponents.Face].SetVariation(this.Style.Face.Index, this.Style.Face.Texture); + Game.Player.Character.Style[PedComponents.Head].SetVariation(this.Style.Head.Index, this.Style.Head.Texture); // Temporary network visibility fix workaround Game.Player.Character.Style[PedComponents.Hair].SetVariation(1, 1); - Game.Player.Character.Style[PedComponents.Hair].SetVariation(this.Apparel.Hair.Index, this.Apparel.Hair.Texture); - - Game.Player.Character.Style[PedComponents.Torso].SetVariation(this.Apparel.Torso.Index, this.Apparel.Torso.Texture); - Game.Player.Character.Style[PedComponents.Legs].SetVariation(this.Apparel.Legs.Index, this.Apparel.Legs.Texture); - Game.Player.Character.Style[PedComponents.Hands].SetVariation(this.Apparel.Hands.Index, this.Apparel.Hands.Texture); - Game.Player.Character.Style[PedComponents.Shoes].SetVariation(this.Apparel.Shoes.Index, this.Apparel.Shoes.Texture); - Game.Player.Character.Style[PedComponents.Special1].SetVariation(this.Apparel.Special1.Index, this.Apparel.Special1.Texture); - Game.Player.Character.Style[PedComponents.Special2].SetVariation(this.Apparel.Special2.Index, this.Apparel.Special2.Texture); - Game.Player.Character.Style[PedComponents.Special3].SetVariation(this.Apparel.Special3.Index, this.Apparel.Special3.Texture); - Game.Player.Character.Style[PedComponents.Textures].SetVariation(this.Apparel.Textures.Index, this.Apparel.Textures.Texture); - Game.Player.Character.Style[PedComponents.Torso2].SetVariation(this.Apparel.Torso2.Index, this.Apparel.Torso2.Texture); - - Game.Player.Character.Style[PedProps.Hats].SetVariation(this.Apparel.Hat.Index, this.Apparel.Hat.Texture); - Game.Player.Character.Style[PedProps.Glasses].SetVariation(this.Apparel.Glasses.Index, this.Apparel.Glasses.Texture); - Game.Player.Character.Style[PedProps.EarPieces].SetVariation(this.Apparel.EarPiece.Index, this.Apparel.EarPiece.Texture); - Game.Player.Character.Style[PedProps.Unknown3].SetVariation(this.Apparel.Unknown3.Index, this.Apparel.Unknown3.Texture); - Game.Player.Character.Style[PedProps.Unknown4].SetVariation(this.Apparel.Unknown4.Index, this.Apparel.Unknown4.Texture); - Game.Player.Character.Style[PedProps.Unknown5].SetVariation(this.Apparel.Unknown5.Index, this.Apparel.Unknown5.Texture); - Game.Player.Character.Style[PedProps.Watches].SetVariation(this.Apparel.Watch.Index, this.Apparel.Watch.Texture); - Game.Player.Character.Style[PedProps.Wristbands].SetVariation(this.Apparel.Wristband.Index, this.Apparel.Wristband.Texture); - Game.Player.Character.Style[PedProps.Unknown8].SetVariation(this.Apparel.Unknown8.Index, this.Apparel.Unknown8.Texture); - Game.Player.Character.Style[PedProps.Unknown9].SetVariation(this.Apparel.Unknown9.Index, this.Apparel.Unknown9.Texture); + Game.Player.Character.Style[PedComponents.Hair].SetVariation(this.Style.Hair.Index, this.Style.Hair.Texture); + + Game.Player.Character.Style[PedComponents.Torso].SetVariation(this.Style.Torso.Index, this.Style.Torso.Texture); + Game.Player.Character.Style[PedComponents.Legs].SetVariation(this.Style.Legs.Index, this.Style.Legs.Texture); + Game.Player.Character.Style[PedComponents.Hands].SetVariation(this.Style.Hands.Index, this.Style.Hands.Texture); + Game.Player.Character.Style[PedComponents.Shoes].SetVariation(this.Style.Shoes.Index, this.Style.Shoes.Texture); + Game.Player.Character.Style[PedComponents.Special1].SetVariation(this.Style.Special1.Index, this.Style.Special1.Texture); + Game.Player.Character.Style[PedComponents.Special2].SetVariation(this.Style.Special2.Index, this.Style.Special2.Texture); + Game.Player.Character.Style[PedComponents.Special3].SetVariation(this.Style.Special3.Index, this.Style.Special3.Texture); + Game.Player.Character.Style[PedComponents.Textures].SetVariation(this.Style.Textures.Index, this.Style.Textures.Texture); + Game.Player.Character.Style[PedComponents.Torso2].SetVariation(this.Style.Torso2.Index, this.Style.Torso2.Texture); + + Game.Player.Character.Style[PedProps.Hats].SetVariation(this.Style.Hat.Index, this.Style.Hat.Texture); + Game.Player.Character.Style[PedProps.Glasses].SetVariation(this.Style.Glasses.Index, this.Style.Glasses.Texture); + Game.Player.Character.Style[PedProps.EarPieces].SetVariation(this.Style.EarPiece.Index, this.Style.EarPiece.Texture); + Game.Player.Character.Style[PedProps.Unknown3].SetVariation(this.Style.Unknown3.Index, this.Style.Unknown3.Texture); + Game.Player.Character.Style[PedProps.Unknown4].SetVariation(this.Style.Unknown4.Index, this.Style.Unknown4.Texture); + Game.Player.Character.Style[PedProps.Unknown5].SetVariation(this.Style.Unknown5.Index, this.Style.Unknown5.Texture); + Game.Player.Character.Style[PedProps.Watches].SetVariation(this.Style.Watch.Index, this.Style.Watch.Texture); + Game.Player.Character.Style[PedProps.Wristbands].SetVariation(this.Style.Wristband.Index, this.Style.Wristband.Texture); + Game.Player.Character.Style[PedProps.Unknown8].SetVariation(this.Style.Unknown8.Index, this.Style.Unknown8.Texture); + Game.Player.Character.Style[PedProps.Unknown9].SetVariation(this.Style.Unknown9.Index, this.Style.Unknown9.Texture); } - - protected static Apparel ConvertStyle(Style style, Guid? id = null) => new Apparel - { - Id = id ?? GuidGenerator.GenerateTimeBasedGuid(), - Face = new Component - { - Type = ComponentTypes.Face, - Index = style[PedComponents.Face].Index, - Texture = style[PedComponents.Face].TextureIndex - }, - Head = new Component - { - Type = ComponentTypes.Head, - Index = style[PedComponents.Head].Index, - Texture = style[PedComponents.Head].TextureIndex - }, - Hair = new Component - { - Type = ComponentTypes.Hair, - Index = style[PedComponents.Hair].Index, - Texture = style[PedComponents.Hair].TextureIndex - }, - Torso = new Component - { - Type = ComponentTypes.Torso, - Index = style[PedComponents.Torso].Index, - Texture = style[PedComponents.Torso].TextureIndex - }, - Legs = new Component - { - Type = ComponentTypes.Legs, - Index = style[PedComponents.Legs].Index, - Texture = style[PedComponents.Legs].TextureIndex - }, - Hands = new Component - { - Type = ComponentTypes.Hands, - Index = style[PedComponents.Hands].Index, - Texture = style[PedComponents.Hands].TextureIndex - }, - Shoes = new Component - { - Type = ComponentTypes.Shoes, - Index = style[PedComponents.Shoes].Index, - Texture = style[PedComponents.Shoes].TextureIndex - }, - Special1 = new Component - { - Type = ComponentTypes.Special1, - Index = style[PedComponents.Special1].Index, - Texture = style[PedComponents.Special1].TextureIndex - }, - Special2 = new Component - { - Type = ComponentTypes.Special2, - Index = style[PedComponents.Special2].Index, - Texture = style[PedComponents.Special2].TextureIndex - }, - Special3 = new Component - { - Type = ComponentTypes.Special3, - Index = style[PedComponents.Special3].Index, - Texture = style[PedComponents.Special3].TextureIndex - }, - Textures = new Component - { - Type = ComponentTypes.Textures, - Index = style[PedComponents.Textures].Index, - Texture = style[PedComponents.Textures].TextureIndex - }, - Torso2 = new Component - { - Type = ComponentTypes.Torso2, - Index = style[PedComponents.Torso2].Index, - Texture = style[PedComponents.Torso2].TextureIndex - }, - - Hat = new Prop - { - Type = PropTypes.Hats, - Index = style[PedProps.Hats].Index, - Texture = style[PedProps.Hats].TextureIndex - }, - Glasses = new Prop - { - Type = PropTypes.Glasses, - Index = style[PedProps.Glasses].Index, - Texture = style[PedProps.Glasses].TextureIndex - }, - EarPiece = new Prop - { - Type = PropTypes.EarPieces, - Index = style[PedProps.EarPieces].Index, - Texture = style[PedProps.EarPieces].TextureIndex - }, - Unknown3 = new Prop - { - Type = PropTypes.Unknown3, - Index = style[PedProps.Unknown3].Index, - Texture = style[PedProps.Unknown3].TextureIndex - }, - Unknown4 = new Prop - { - Type = PropTypes.Unknown4, - Index = style[PedProps.Unknown4].Index, - Texture = style[PedProps.Unknown4].TextureIndex - }, - Unknown5 = new Prop - { - Type = PropTypes.Unknown5, - Index = style[PedProps.Unknown5].Index, - Texture = style[PedProps.Unknown5].TextureIndex - }, - Watch = new Prop - { - Type = PropTypes.Watches, - Index = style[PedProps.Watches].Index, - Texture = style[PedProps.Watches].TextureIndex - }, - Wristband = new Prop - { - Type = PropTypes.Wristbands, - Index = style[PedProps.Wristbands].Index, - Texture = style[PedProps.Wristbands].TextureIndex - }, - Unknown8 = new Prop - { - Type = PropTypes.Unknown8, - Index = style[PedProps.Unknown8].Index, - Texture = style[PedProps.Unknown8].TextureIndex - }, - Unknown9 = new Prop - { - Type = PropTypes.Unknown9, - Index = style[PedProps.Unknown9].Index, - Texture = style[PedProps.Unknown9].TextureIndex - } - }; } } diff --git a/Characters.Client/Models/CharacterFacialTrait.cs b/Characters.Client/Models/CharacterFacialTrait.cs new file mode 100644 index 0000000..4784017 --- /dev/null +++ b/Characters.Client/Models/CharacterFacialTrait.cs @@ -0,0 +1,54 @@ +using CitizenFX.Core.Native; +using IgiCore.Characters.Shared.Models; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Client.Models +{ + public class CharacterFacialTrait : IdentityModel, ICharacterFacialTrait + { + public float NoseWidth { get; set; } + public float NosePeakHeight { get; set; } + public float NosePeakLength { get; set; } + public float NoseBoneHeight { get; set; } + public float NosePeakLowering { get; set; } + public float NoseBoneTwist { get; set; } + public float EyeBrowHeight { get; set; } + public float EyeBrowLength { get; set; } + public float CheekBoneHeight { get; set; } + public float CheekBoneWidth { get; set; } + public float CheekWidth { get; set; } + public float EyeOpenings { get; set; } + public float LipThickness { get; set; } + public float JawBoneWidth { get; set; } + public float JawBoneLength { get; set; } + public float ChinBoneLowering { get; set; } + public float ChinBoneLength { get; set; } + public float ChinBoneWidth { get; set; } + public float ChinDimple { get; set; } + public float NeckThickness { get; set; } + + public static CharacterFacialTrait ConvertFacialTrait(int playerHandle) => new CharacterFacialTrait + { + NoseWidth = API.GetPedFaceFeature(playerHandle, 0), + NosePeakHeight = API.GetPedFaceFeature(playerHandle, 1), + NosePeakLength = API.GetPedFaceFeature(playerHandle, 2), + NoseBoneHeight = API.GetPedFaceFeature(playerHandle, 3), + NosePeakLowering = API.GetPedFaceFeature(playerHandle, 4), + NoseBoneTwist = API.GetPedFaceFeature(playerHandle, 5), + EyeBrowHeight = API.GetPedFaceFeature(playerHandle, 6), + EyeBrowLength = API.GetPedFaceFeature(playerHandle, 7), + CheekBoneHeight = API.GetPedFaceFeature(playerHandle, 8), + CheekBoneWidth = API.GetPedFaceFeature(playerHandle, 9), + CheekWidth = API.GetPedFaceFeature(playerHandle, 10), + EyeOpenings = API.GetPedFaceFeature(playerHandle, 11), + LipThickness = API.GetPedFaceFeature(playerHandle, 12), + JawBoneWidth = API.GetPedFaceFeature(playerHandle, 13), + JawBoneLength = API.GetPedFaceFeature(playerHandle, 14), + ChinBoneLowering = API.GetPedFaceFeature(playerHandle, 15), + ChinBoneLength = API.GetPedFaceFeature(playerHandle, 16), + ChinBoneWidth = API.GetPedFaceFeature(playerHandle, 17), + ChinDimple = API.GetPedFaceFeature(playerHandle, 18), + NeckThickness = API.GetPedFaceFeature(playerHandle, 19), + }; + } +} diff --git a/Characters.Client/Models/CharacterHeritage.cs b/Characters.Client/Models/CharacterHeritage.cs new file mode 100644 index 0000000..3fc3e0c --- /dev/null +++ b/Characters.Client/Models/CharacterHeritage.cs @@ -0,0 +1,24 @@ +using CitizenFX.Core; +using IgiCore.Characters.Shared.Models; +using NFive.SDK.Core.Models; +using System; + +namespace IgiCore.Characters.Client.Models +{ + public class CharacterHeritage : IdentityModel, ICharacterHeritage + { + public int Parent1 { get; set; } + public int Parent2 { get; set; } + public float Resemblance { get; set; } + public float SkinTone { get; set; } + + public static CharacterHeritage ConvertHeritage(PedHeadBlendData headBlendData, DateTime created) => new CharacterHeritage + { + Created = created, + Parent1 = headBlendData.FirstFaceShape, + Parent2 = headBlendData.SecondFaceShape, + Resemblance = headBlendData.ParentFaceShapePercent, + SkinTone = headBlendData.ParentSkinTonePercent + }; + } +} diff --git a/Characters.Client/Models/CharacterStyle.cs b/Characters.Client/Models/CharacterStyle.cs new file mode 100644 index 0000000..6cfe8af --- /dev/null +++ b/Characters.Client/Models/CharacterStyle.cs @@ -0,0 +1,174 @@ +using CitizenFX.Core; +using IgiCore.Characters.Shared.Models; +using IgiCore.Characters.Shared.Models.Style; +using NFive.SDK.Core.Helpers; +using NFive.SDK.Core.Models; +using System; +using Prop = IgiCore.Characters.Shared.Models.Style.Prop; + +namespace IgiCore.Characters.Client.Models +{ + public class CharacterStyle : IdentityModel, ICharacterStyle + { + public Component Face { get; set; } + public Component Head { get; set; } + public Component Hair { get; set; } + public Component Torso { get; set; } + public Component Torso2 { get; set; } + public Component Legs { get; set; } + public Component Hands { get; set; } + public Component Shoes { get; set; } + public Component Special1 { get; set; } + public Component Special2 { get; set; } + public Component Special3 { get; set; } + public Component Textures { get; set; } + public Prop Hat { get; set; } + public Prop Glasses { get; set; } + public Prop EarPiece { get; set; } + public Prop Unknown3 { get; set; } + public Prop Unknown4 { get; set; } + public Prop Unknown5 { get; set; } + public Prop Watch { get; set; } + public Prop Wristband { get; set; } + public Prop Unknown8 { get; set; } + public Prop Unknown9 { get; set; } + + public static CharacterStyle ConvertStyle(CitizenFX.Core.Style style, Guid? id = null) => new CharacterStyle + { + Id = id ?? GuidGenerator.GenerateTimeBasedGuid(), + Face = new Component + { + Type = ComponentTypes.Face, + Index = style[PedComponents.Face].Index, + Texture = style[PedComponents.Face].TextureIndex + }, + Head = new Component + { + Type = ComponentTypes.Head, + Index = style[PedComponents.Head].Index, + Texture = style[PedComponents.Head].TextureIndex + }, + Hair = new Component + { + Type = ComponentTypes.Hair, + Index = style[PedComponents.Hair].Index, + Texture = style[PedComponents.Hair].TextureIndex + }, + Torso = new Component + { + Type = ComponentTypes.Torso, + Index = style[PedComponents.Torso].Index, + Texture = style[PedComponents.Torso].TextureIndex + }, + Legs = new Component + { + Type = ComponentTypes.Legs, + Index = style[PedComponents.Legs].Index, + Texture = style[PedComponents.Legs].TextureIndex + }, + Hands = new Component + { + Type = ComponentTypes.Hands, + Index = style[PedComponents.Hands].Index, + Texture = style[PedComponents.Hands].TextureIndex + }, + Shoes = new Component + { + Type = ComponentTypes.Shoes, + Index = style[PedComponents.Shoes].Index, + Texture = style[PedComponents.Shoes].TextureIndex + }, + Special1 = new Component + { + Type = ComponentTypes.Special1, + Index = style[PedComponents.Special1].Index, + Texture = style[PedComponents.Special1].TextureIndex + }, + Special2 = new Component + { + Type = ComponentTypes.Special2, + Index = style[PedComponents.Special2].Index, + Texture = style[PedComponents.Special2].TextureIndex + }, + Special3 = new Component + { + Type = ComponentTypes.Special3, + Index = style[PedComponents.Special3].Index, + Texture = style[PedComponents.Special3].TextureIndex + }, + Textures = new Component + { + Type = ComponentTypes.Textures, + Index = style[PedComponents.Textures].Index, + Texture = style[PedComponents.Textures].TextureIndex + }, + Torso2 = new Component + { + Type = ComponentTypes.Torso2, + Index = style[PedComponents.Torso2].Index, + Texture = style[PedComponents.Torso2].TextureIndex + }, + + Hat = new Prop + { + Type = PropTypes.Hats, + Index = style[PedProps.Hats].Index, + Texture = style[PedProps.Hats].TextureIndex + }, + Glasses = new Prop + { + Type = PropTypes.Glasses, + Index = style[PedProps.Glasses].Index, + Texture = style[PedProps.Glasses].TextureIndex + }, + EarPiece = new Prop + { + Type = PropTypes.EarPieces, + Index = style[PedProps.EarPieces].Index, + Texture = style[PedProps.EarPieces].TextureIndex + }, + Unknown3 = new Prop + { + Type = PropTypes.Unknown3, + Index = style[PedProps.Unknown3].Index, + Texture = style[PedProps.Unknown3].TextureIndex + }, + Unknown4 = new Prop + { + Type = PropTypes.Unknown4, + Index = style[PedProps.Unknown4].Index, + Texture = style[PedProps.Unknown4].TextureIndex + }, + Unknown5 = new Prop + { + Type = PropTypes.Unknown5, + Index = style[PedProps.Unknown5].Index, + Texture = style[PedProps.Unknown5].TextureIndex + }, + Watch = new Prop + { + Type = PropTypes.Watches, + Index = style[PedProps.Watches].Index, + Texture = style[PedProps.Watches].TextureIndex + }, + Wristband = new Prop + { + Type = PropTypes.Wristbands, + Index = style[PedProps.Wristbands].Index, + Texture = style[PedProps.Wristbands].TextureIndex + }, + Unknown8 = new Prop + { + Type = PropTypes.Unknown8, + Index = style[PedProps.Unknown8].Index, + Texture = style[PedProps.Unknown8].TextureIndex + }, + Unknown9 = new Prop + { + Type = PropTypes.Unknown9, + Index = style[PedProps.Unknown9].Index, + Texture = style[PedProps.Unknown9].TextureIndex + } + }; + } +} diff --git a/Characters.Client/Models/CharacterTrait.cs b/Characters.Client/Models/CharacterTrait.cs new file mode 100644 index 0000000..b07ef07 --- /dev/null +++ b/Characters.Client/Models/CharacterTrait.cs @@ -0,0 +1,73 @@ +using CitizenFX.Core; +using CitizenFX.Core.Native; +using IgiCore.Characters.Shared.Models; +using IgiCore.Characters.Shared.Models.Trait; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Client.Models +{ + public class CharacterTrait : IdentityModel, ICharacterTrait + { + public int EyeColorId { get; set; } + public int HairColorId { get; set; } + public int HairHighlightColor { get; set; } + + public Feature Blemishes { get; set; } + public Feature Beard { get; set; } + public Feature Eyebrows { get; set; } + public Feature Aging { get; set; } + public Feature Makeup { get; set; } + public Feature Blush { get; set; } + public Feature Complexion { get; set; } + public Feature SunDamage { get; set; } + public Feature Lipstick { get; set; } + public Feature MolesAndFreckles { get; set; } + public Feature ChestHair { get; set; } + public Feature BodyBlemishes { get; set; } + public Feature AddBodyBlemishes { get; set; } + + + public static CharacterTrait ConvertTrait(Ped player) => new CharacterTrait + { + EyeColorId = API.GetPedEyeColor(player.Handle), + HairColorId = API.GetPedHairColor(player.Handle), + HairHighlightColor = API.GetPedHairHighlightColor(player.Handle), + + Blemishes = PedTrait(player, 0), + Beard = PedTrait(player, 1), + Eyebrows = PedTrait(player, 2), + Aging = PedTrait(player, 3), + Makeup = PedTrait(player, 4), + Blush = PedTrait(player, 5), + Complexion = PedTrait(player, 6), + SunDamage = PedTrait(player, 7), + Lipstick = PedTrait(player, 8), + MolesAndFreckles = PedTrait(player, 9), + ChestHair = PedTrait(player, 10), + BodyBlemishes = PedTrait(player, 11), + AddBodyBlemishes = PedTrait(player, 12) + }; + + + private static Feature PedTrait(Ped ped, int index) + { + var overlayValue = 0; + var colorType = 0; + var firstColor = 0; + var secondColor = 0; + var opacity = 0.0f; + + API.GetPedHeadOverlayData(ped.Handle, index, ref overlayValue, ref colorType, ref firstColor, ref secondColor, ref opacity); + + var feature = new Feature + { + Index = overlayValue, + Opacity = opacity, + ColorId = firstColor, + SecondColorId = secondColor + }; + + return feature; + } + } +} diff --git a/Characters.Client/Models/FaceShape.cs b/Characters.Client/Models/FaceShape.cs deleted file mode 100644 index 6e3fba0..0000000 --- a/Characters.Client/Models/FaceShape.cs +++ /dev/null @@ -1,29 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Client.Models -{ - public class FaceShape : IdentityModel, IFaceShape - { - public float NoseWidth { get; set; } - public float NosePeakHeight { get; set; } - public float NosePeakLength { get; set; } - public float NoseBoneHeight { get; set; } - public float NosePeakLowering { get; set; } - public float NoseBoneTwist { get; set; } - public float EyeBrowHeight { get; set; } - public float EyeBrowLength { get; set; } - public float CheekBoneHeight { get; set; } - public float CheekBoneWidth { get; set; } - public float CheekWidth { get; set; } - public float EyeOpenings { get; set; } - public float LipThickness { get; set; } - public float JawBoneWidth { get; set; } - public float JawBoneLength { get; set; } - public float ChinBoneLowering { get; set; } - public float ChinBoneLength { get; set; } - public float ChinBoneWidth { get; set; } - public float ChinDimple { get; set; } - public float NeckThickness { get; set; } - } -} diff --git a/Characters.Client/Models/Heritage.cs b/Characters.Client/Models/Heritage.cs deleted file mode 100644 index 1840f86..0000000 --- a/Characters.Client/Models/Heritage.cs +++ /dev/null @@ -1,16 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using System; - -namespace IgiCore.Characters.Client.Models -{ - public class Heritage : IHeritage - { - public Guid Id { get; set; } - public DateTime Created { get; set; } - public DateTime? Deleted { get; set; } - public int Parent1 { get; set; } - public int Parent2 { get; set; } - public float Resemblance { get; set; } - public float SkinTone { get; set; } - } -} diff --git a/Characters.Server/Characters.Server.csproj b/Characters.Server/Characters.Server.csproj index 1cdf2f9..78b88be 100644 --- a/Characters.Server/Characters.Server.csproj +++ b/Characters.Server/Characters.Server.csproj @@ -106,6 +106,7 @@ False + ..\packages\Z.EntityFramework.Plus.EF6.1.10.1\lib\net45\Z.EntityFramework.Plus.EF6.dll False @@ -115,17 +116,15 @@ - - - + - - + + - - + + diff --git a/Characters.Server/CharactersController.cs b/Characters.Server/CharactersController.cs index a6d99c5..c146fb1 100644 --- a/Characters.Server/CharactersController.cs +++ b/Characters.Server/CharactersController.cs @@ -1,10 +1,13 @@ using IgiCore.Characters.Server.Models; using IgiCore.Characters.Server.Storage; using IgiCore.Characters.Shared; +using IgiCore.Inventory.Server; +using IgiCore.Inventory.Server.Models; using JetBrains.Annotations; using NFive.SDK.Core.Diagnostics; using NFive.SDK.Core.Helpers; using NFive.SDK.Core.Models; +using NFive.SDK.Core.Rpc; using NFive.SDK.Server.Controllers; using NFive.SDK.Server.Events; using NFive.SDK.Server.Rcon; @@ -14,11 +17,9 @@ using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Migrations; +using System.Data.Entity.Validation; using System.Linq; using System.Threading.Tasks; -using IgiCore.Inventory.Server; -using IgiCore.Inventory.Server.Models; -using NFive.SDK.Core.Rpc; using Configuration = IgiCore.Characters.Shared.Configuration; namespace IgiCore.Characters.Server @@ -40,8 +41,13 @@ public CharactersController(ILogger logger, IEventManager events, IRpcHandler rp this.Rpc.Event(CharacterEvents.Create).On(Create); this.Rpc.Event(CharacterEvents.Delete).On(Delete); this.Rpc.Event(CharacterEvents.Select).On(Select); + this.Rpc.Event(CharacterEvents.SaveCharacter).On(SaveCharacter); this.Rpc.Event(CharacterEvents.SavePosition).On(SavePosition); + this.Rpc.Event(CharacterEvents.SaveHeritage).On(SaveHeritage); + this.Rpc.Event(CharacterEvents.SaveFacialTrait).On(SaveFacialTrait); + this.Rpc.Event(CharacterEvents.SaveTrait).On(SaveTrait); + this.Rpc.Event(CharacterEvents.SaveStyle).On(SaveStyle); this.Events.OnRequest(CharacterEvents.GetActive, () => this.characterSessions); @@ -188,10 +194,10 @@ public async void Create(IRpcEvent e, Character character) character.Ssn = Character.GenerateSsn(); character.LastPlayed = DateTime.UtcNow; character.Position = new Position(0f, 0f, 71f); - character.Apparel = new Apparel(); - character.Appearance = new Appearance(); - character.FaceShape = new FaceShape(); - character.Heritage = new Heritage(); + character.FacialTrait = new CharacterFacialTrait(); + character.Heritage = new CharacterHeritage(); + character.Style = new CharacterStyle(); + character.Trait = new CharacterTrait(); // Save character using (var context = new StorageContext()) @@ -305,5 +311,105 @@ public async void SavePosition(IRpcEvent e, Guid characterGuid, Position positio activeSession.Character.Position = position; } } + + private async void SaveFacialTrait(IRpcEvent e, Guid characterId, CharacterFacialTrait facialTrait) + { + using (var context = new StorageContext()) + using (var transaction = context.Database.BeginTransaction()) + { + try + { + var save = context.Characters.Include(c => c.FacialTrait).Single(c => c.Id == characterId); + + facialTrait.Id = save.FacialTrait.Id; + + context.Entry(save.FacialTrait).CurrentValues.SetValues(facialTrait); + + await context.SaveChangesAsync(); + transaction.Commit(); + } + catch (Exception ex) + { + this.Logger.Error(ex, "Character Facial Features Save"); + + transaction.Rollback(); + } + } + } + + private async void SaveHeritage(IRpcEvent e, Guid characterId, CharacterHeritage heritage) + { + using (var context = new StorageContext()) + using (var transaction = context.Database.BeginTransaction()) + { + try + { + var save = context.Characters.Include(c => c.Heritage).Single(c => c.Id == characterId); + + heritage.Id = save.HeritageId; + + context.Entry(save.Heritage).CurrentValues.SetValues(heritage); + + await context.SaveChangesAsync(); + transaction.Commit(); + } + catch (Exception ex) + { + this.Logger.Error(ex, "Character Heritage Save"); + + transaction.Rollback(); + } + } + } + + private async void SaveStyle(IRpcEvent e, Guid characterId, CharacterStyle style) + { + using (var context = new StorageContext()) + using (var transaction = context.Database.BeginTransaction()) + { + try + { + var save = context.Characters.Include(c => c.Style).Single(c => c.Id == characterId); + + style.Id = save.StyleId; + + context.Entry(save.Style).CurrentValues.SetValues(style); + + await context.SaveChangesAsync(); + transaction.Commit(); + } + catch (Exception ex) + { + this.Logger.Error(ex, "Character Style Save"); + + transaction.Rollback(); + } + } + } + + private async void SaveTrait(IRpcEvent e, Guid characterId, CharacterTrait trait) + { + using (var context = new StorageContext()) + using (var transaction = context.Database.BeginTransaction()) + { + try + { + var save = context.Characters.Include(c => c.Trait).Single(c => c.Id == characterId); + + trait.Id = save.TraitId; + + context.Entry(save.Trait).CurrentValues.SetValues(trait); + + await context.SaveChangesAsync(); + transaction.Commit(); + } + catch (Exception ex) + { + this.Logger.Error(ex, "Character Trait Save"); + + transaction.Rollback(); + } + } + } } } diff --git a/Characters.Server/Migrations/201903230015160_Init.cs b/Characters.Server/Migrations/201903230015160_Init.cs deleted file mode 100644 index 042f311..0000000 --- a/Characters.Server/Migrations/201903230015160_Init.cs +++ /dev/null @@ -1,298 +0,0 @@ -// -// ReSharper disable all - -using System; -using System.Data.Entity.Migrations; -using System.CodeDom.Compiler; -using System.Data.Entity.Migrations.Infrastructure; - -namespace IgiCore.Characters.Server.Migrations -{ - [GeneratedCode("NFive.Migration", "0.3 Alpha Build 152")] - public class Init : DbMigration, IMigrationMetadata - { - string IMigrationMetadata.Id => "201903230015160_Init"; - - string IMigrationMetadata.Source => null; - - string IMigrationMetadata.Target => "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"; - - public override void Up() - { - CreateTable( - "dbo.Apparels", - c => new - { - Id = c.Guid(nullable: false), - Face_Type = c.Int(nullable: false), - Face_Index = c.Int(nullable: false), - Face_Texture = c.Int(nullable: false), - Head_Type = c.Int(nullable: false), - Head_Index = c.Int(nullable: false), - Head_Texture = c.Int(nullable: false), - Hair_Type = c.Int(nullable: false), - Hair_Index = c.Int(nullable: false), - Hair_Texture = c.Int(nullable: false), - Torso_Type = c.Int(nullable: false), - Torso_Index = c.Int(nullable: false), - Torso_Texture = c.Int(nullable: false), - Torso2_Type = c.Int(nullable: false), - Torso2_Index = c.Int(nullable: false), - Torso2_Texture = c.Int(nullable: false), - Legs_Type = c.Int(nullable: false), - Legs_Index = c.Int(nullable: false), - Legs_Texture = c.Int(nullable: false), - Hands_Type = c.Int(nullable: false), - Hands_Index = c.Int(nullable: false), - Hands_Texture = c.Int(nullable: false), - Shoes_Type = c.Int(nullable: false), - Shoes_Index = c.Int(nullable: false), - Shoes_Texture = c.Int(nullable: false), - Special1_Type = c.Int(nullable: false), - Special1_Index = c.Int(nullable: false), - Special1_Texture = c.Int(nullable: false), - Special2_Type = c.Int(nullable: false), - Special2_Index = c.Int(nullable: false), - Special2_Texture = c.Int(nullable: false), - Special3_Type = c.Int(nullable: false), - Special3_Index = c.Int(nullable: false), - Special3_Texture = c.Int(nullable: false), - Textures_Type = c.Int(nullable: false), - Textures_Index = c.Int(nullable: false), - Textures_Texture = c.Int(nullable: false), - Hat_Type = c.Int(nullable: false), - Hat_Index = c.Int(nullable: false), - Hat_Texture = c.Int(nullable: false), - Glasses_Type = c.Int(nullable: false), - Glasses_Index = c.Int(nullable: false), - Glasses_Texture = c.Int(nullable: false), - EarPiece_Type = c.Int(nullable: false), - EarPiece_Index = c.Int(nullable: false), - EarPiece_Texture = c.Int(nullable: false), - Unknown3_Type = c.Int(nullable: false), - Unknown3_Index = c.Int(nullable: false), - Unknown3_Texture = c.Int(nullable: false), - Unknown4_Type = c.Int(nullable: false), - Unknown4_Index = c.Int(nullable: false), - Unknown4_Texture = c.Int(nullable: false), - Unknown5_Type = c.Int(nullable: false), - Unknown5_Index = c.Int(nullable: false), - Unknown5_Texture = c.Int(nullable: false), - Watch_Type = c.Int(nullable: false), - Watch_Index = c.Int(nullable: false), - Watch_Texture = c.Int(nullable: false), - Wristband_Type = c.Int(nullable: false), - Wristband_Index = c.Int(nullable: false), - Wristband_Texture = c.Int(nullable: false), - Unknown8_Type = c.Int(nullable: false), - Unknown8_Index = c.Int(nullable: false), - Unknown8_Texture = c.Int(nullable: false), - Unknown9_Type = c.Int(nullable: false), - Unknown9_Index = c.Int(nullable: false), - Unknown9_Texture = c.Int(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id); - - CreateTable( - "dbo.Characters", - c => new - { - Id = c.Guid(nullable: false), - Forename = c.String(nullable: false, maxLength: 100, unicode: false), - Middlename = c.String(maxLength: 100, unicode: false), - Surname = c.String(nullable: false, maxLength: 100, unicode: false), - DateOfBirth = c.DateTime(nullable: false, precision: 0), - Gender = c.Short(nullable: false), - Alive = c.Boolean(nullable: false, storeType: "bit"), - Health = c.Int(nullable: false), - Armor = c.Int(nullable: false), - Ssn = c.Int(nullable: false), - Position_X = c.Single(nullable: false), - Position_Y = c.Single(nullable: false), - Position_Z = c.Single(nullable: false), - Model = c.String(nullable: false, maxLength: 200, unicode: false), - WalkingStyle = c.String(nullable: false, maxLength: 200, unicode: false), - ApparelId = c.Guid(nullable: false), - AppearanceId = c.Guid(nullable: false), - FaceShapeId = c.Guid(nullable: false), - HeritageId = c.Guid(nullable: false), - LastPlayed = c.DateTime(precision: 0), - UserId = c.Guid(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id) - .ForeignKey("dbo.Apparels", t => t.ApparelId, cascadeDelete: true) - .ForeignKey("dbo.Appearances", t => t.AppearanceId, cascadeDelete: true) - .ForeignKey("dbo.FaceShapes", t => t.FaceShapeId, cascadeDelete: true) - .ForeignKey("dbo.Heritages", t => t.HeritageId, cascadeDelete: true) - .ForeignKey("dbo.Users", t => t.UserId, cascadeDelete: true) - .Index(t => t.ApparelId) - .Index(t => t.AppearanceId) - .Index(t => t.FaceShapeId) - .Index(t => t.HeritageId) - .Index(t => t.UserId); - - CreateTable( - "dbo.Appearances", - c => new - { - Id = c.Guid(nullable: false), - EyeColorId = c.Int(nullable: false), - HairColorId = c.Int(nullable: false), - HairHighlightColor = c.Int(nullable: false), - Aging_Type = c.Int(nullable: false), - Aging_Index = c.Int(nullable: false), - Aging_Opacity = c.Single(nullable: false), - Aging_ColorType = c.Int(nullable: false), - Aging_ColorId = c.Int(nullable: false), - Aging_SecondColorId = c.Int(nullable: false), - Beard_Type = c.Int(nullable: false), - Beard_Index = c.Int(nullable: false), - Beard_Opacity = c.Single(nullable: false), - Beard_ColorType = c.Int(nullable: false), - Beard_ColorId = c.Int(nullable: false), - Beard_SecondColorId = c.Int(nullable: false), - Blush_Type = c.Int(nullable: false), - Blush_Index = c.Int(nullable: false), - Blush_Opacity = c.Single(nullable: false), - Blush_ColorType = c.Int(nullable: false), - Blush_ColorId = c.Int(nullable: false), - Blush_SecondColorId = c.Int(nullable: false), - Blemishes_Type = c.Int(nullable: false), - Blemishes_Index = c.Int(nullable: false), - Blemishes_Opacity = c.Single(nullable: false), - Blemishes_ColorType = c.Int(nullable: false), - Blemishes_ColorId = c.Int(nullable: false), - Blemishes_SecondColorId = c.Int(nullable: false), - Chest_Type = c.Int(nullable: false), - Chest_Index = c.Int(nullable: false), - Chest_Opacity = c.Single(nullable: false), - Chest_ColorType = c.Int(nullable: false), - Chest_ColorId = c.Int(nullable: false), - Chest_SecondColorId = c.Int(nullable: false), - Complexion_Type = c.Int(nullable: false), - Complexion_Index = c.Int(nullable: false), - Complexion_Opacity = c.Single(nullable: false), - Complexion_ColorType = c.Int(nullable: false), - Complexion_ColorId = c.Int(nullable: false), - Complexion_SecondColorId = c.Int(nullable: false), - Eyebrows_Type = c.Int(nullable: false), - Eyebrows_Index = c.Int(nullable: false), - Eyebrows_Opacity = c.Single(nullable: false), - Eyebrows_ColorType = c.Int(nullable: false), - Eyebrows_ColorId = c.Int(nullable: false), - Eyebrows_SecondColorId = c.Int(nullable: false), - Lipstick_Type = c.Int(nullable: false), - Lipstick_Index = c.Int(nullable: false), - Lipstick_Opacity = c.Single(nullable: false), - Lipstick_ColorType = c.Int(nullable: false), - Lipstick_ColorId = c.Int(nullable: false), - Lipstick_SecondColorId = c.Int(nullable: false), - Makeup_Type = c.Int(nullable: false), - Makeup_Index = c.Int(nullable: false), - Makeup_Opacity = c.Single(nullable: false), - Makeup_ColorType = c.Int(nullable: false), - Makeup_ColorId = c.Int(nullable: false), - Makeup_SecondColorId = c.Int(nullable: false), - MolesAndFreckles_Type = c.Int(nullable: false), - MolesAndFreckles_Index = c.Int(nullable: false), - MolesAndFreckles_Opacity = c.Single(nullable: false), - MolesAndFreckles_ColorType = c.Int(nullable: false), - MolesAndFreckles_ColorId = c.Int(nullable: false), - MolesAndFreckles_SecondColorId = c.Int(nullable: false), - SunDamage_Type = c.Int(nullable: false), - SunDamage_Index = c.Int(nullable: false), - SunDamage_Opacity = c.Single(nullable: false), - SunDamage_ColorType = c.Int(nullable: false), - SunDamage_ColorId = c.Int(nullable: false), - SunDamage_SecondColorId = c.Int(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id); - - CreateTable( - "dbo.FaceShapes", - c => new - { - Id = c.Guid(nullable: false), - NoseWidth = c.Single(nullable: false), - NosePeakHeight = c.Single(nullable: false), - NosePeakLength = c.Single(nullable: false), - NoseBoneHeight = c.Single(nullable: false), - NosePeakLowering = c.Single(nullable: false), - NoseBoneTwist = c.Single(nullable: false), - EyeBrowHeight = c.Single(nullable: false), - EyeBrowLength = c.Single(nullable: false), - CheekBoneHeight = c.Single(nullable: false), - CheekBoneWidth = c.Single(nullable: false), - CheekWidth = c.Single(nullable: false), - EyeOpenings = c.Single(nullable: false), - LipThickness = c.Single(nullable: false), - JawBoneWidth = c.Single(nullable: false), - JawBoneLength = c.Single(nullable: false), - ChinBoneLowering = c.Single(nullable: false), - ChinBoneLength = c.Single(nullable: false), - ChinBoneWidth = c.Single(nullable: false), - ChinDimple = c.Single(nullable: false), - NeckThickness = c.Single(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id); - - CreateTable( - "dbo.Heritages", - c => new - { - Id = c.Guid(nullable: false), - Parent1 = c.Int(nullable: false), - Parent2 = c.Int(nullable: false), - Resemblance = c.Single(nullable: false), - SkinTone = c.Single(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id); - - CreateTable( - "dbo.CharacterSessions", - c => new - { - Id = c.Guid(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Connected = c.DateTime(precision: 0), - Disconnected = c.DateTime(precision: 0), - CharacterId = c.Guid(nullable: false), - }) - .PrimaryKey(t => t.Id) - .ForeignKey("dbo.Characters", t => t.CharacterId, cascadeDelete: true) - .Index(t => t.CharacterId); - } - - public override void Down() - { - DropForeignKey("dbo.CharacterSessions", "CharacterId", "dbo.Characters"); - DropForeignKey("dbo.Characters", "UserId", "dbo.Users"); - DropForeignKey("dbo.Characters", "HeritageId", "dbo.Heritages"); - DropForeignKey("dbo.Characters", "FaceShapeId", "dbo.FaceShapes"); - DropForeignKey("dbo.Characters", "AppearanceId", "dbo.Appearances"); - DropForeignKey("dbo.Characters", "ApparelId", "dbo.Apparels"); - DropIndex("dbo.CharacterSessions", new[] { "CharacterId" }); - DropIndex("dbo.Characters", new[] { "UserId" }); - DropIndex("dbo.Characters", new[] { "HeritageId" }); - DropIndex("dbo.Characters", new[] { "FaceShapeId" }); - DropIndex("dbo.Characters", new[] { "AppearanceId" }); - DropIndex("dbo.Characters", new[] { "ApparelId" }); - DropTable("dbo.CharacterSessions"); - DropTable("dbo.Heritages"); - DropTable("dbo.FaceShapes"); - DropTable("dbo.Appearances"); - DropTable("dbo.Characters"); - DropTable("dbo.Apparels"); - } - } -} diff --git a/Characters.Server/Migrations/201904122043530_AddSessionFk.cs b/Characters.Server/Migrations/201904122043530_AddSessionFk.cs deleted file mode 100644 index 6345616..0000000 --- a/Characters.Server/Migrations/201904122043530_AddSessionFk.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// ReSharper disable all - -using System; -using System.Data.Entity.Migrations; -using System.CodeDom.Compiler; -using System.Data.Entity.Migrations.Infrastructure; - -namespace IgiCore.Characters.Server.Migrations -{ - [GeneratedCode("NFive.Migration", "0.3 Alpha Build 169")] - public class AddSessionFk : DbMigration, IMigrationMetadata - { - string IMigrationMetadata.Id => "201904122043530_AddSessionFk"; - - string IMigrationMetadata.Source => null; - - string IMigrationMetadata.Target => "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"; - - public override void Up() - { - AddColumn("dbo.CharacterSessions", "SessionId", c => c.Guid(nullable: false)); - CreateIndex("dbo.CharacterSessions", "SessionId"); - AddForeignKey("dbo.CharacterSessions", "SessionId", "dbo.Sessions", "Id", cascadeDelete: true); - } - - public override void Down() - { - DropForeignKey("dbo.CharacterSessions", "SessionId", "dbo.Sessions"); - DropIndex("dbo.CharacterSessions", new[] { "SessionId" }); - DropColumn("dbo.CharacterSessions", "SessionId"); - } - } -} diff --git a/Characters.Server/Migrations/201908030133090_AddCharacterInventory.cs b/Characters.Server/Migrations/201908030133090_AddCharacterInventory.cs deleted file mode 100644 index a00f027..0000000 --- a/Characters.Server/Migrations/201908030133090_AddCharacterInventory.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// ReSharper disable all - -using System; -using System.Data.Entity.Migrations; -using System.CodeDom.Compiler; -using System.Data.Entity.Migrations.Infrastructure; - -namespace IgiCore.Characters.Server.Migrations -{ - [GeneratedCode("NFive.Migration", "0.3 Alpha Build 183")] - public class AddCharacterInventory : DbMigration, IMigrationMetadata - { - string IMigrationMetadata.Id => "201908030133090_AddCharacterInventory"; - - string IMigrationMetadata.Source => null; - - string IMigrationMetadata.Target => "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"; - - public override void Up() - { - CreateTable( - "dbo.CharacterInventories", - c => new - { - Id = c.Guid(nullable: false), - CharacterId = c.Guid(nullable: false), - ContainerId = c.Guid(nullable: false), - Created = c.DateTime(nullable: false, precision: 0), - Deleted = c.DateTime(precision: 0), - }) - .PrimaryKey(t => t.Id) - .ForeignKey("dbo.Characters", t => t.CharacterId, cascadeDelete: true) - .ForeignKey("dbo.Containers", t => t.ContainerId, cascadeDelete: true) - .Index(t => t.CharacterId) - .Index(t => t.ContainerId); - } - - public override void Down() - { - DropForeignKey("dbo.CharacterInventories", "ContainerId", "dbo.Containers"); - DropForeignKey("dbo.CharacterInventories", "CharacterId", "dbo.Characters"); - DropIndex("dbo.CharacterInventories", new[] { "ContainerId" }); - DropIndex("dbo.CharacterInventories", new[] { "CharacterId" }); - DropTable("dbo.CharacterInventories"); - } - } -} diff --git a/Characters.Server/Migrations/201908170055570_Init.cs b/Characters.Server/Migrations/201908170055570_Init.cs new file mode 100644 index 0000000..08dba59 --- /dev/null +++ b/Characters.Server/Migrations/201908170055570_Init.cs @@ -0,0 +1,310 @@ +// +// ReSharper disable all + +using System; +using System.Data.Entity.Migrations; +using System.CodeDom.Compiler; +using System.Data.Entity.Migrations.Infrastructure; + +namespace IgiCore.Characters.Server.Migrations +{ + [GeneratedCode("NFive.Migration", "0.3 Alpha Build 183")] + public class Init : DbMigration, IMigrationMetadata + { + string IMigrationMetadata.Id => "201908170055570_Init"; + + string IMigrationMetadata.Source => null; + + string IMigrationMetadata.Target => "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"; + + public override void Up() + { + CreateTable( + "dbo.CharacterInventories", + c => new + { + Id = c.Guid(nullable: false), + CharacterId = c.Guid(nullable: false), + ContainerId = c.Guid(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id) + .ForeignKey("dbo.Characters", t => t.CharacterId, cascadeDelete: true) + .ForeignKey("dbo.Containers", t => t.ContainerId, cascadeDelete: true) + .Index(t => t.CharacterId) + .Index(t => t.ContainerId); + + CreateTable( + "dbo.Characters", + c => new + { + Id = c.Guid(nullable: false), + Forename = c.String(nullable: false, maxLength: 100, unicode: false), + Middlename = c.String(maxLength: 100, unicode: false), + Surname = c.String(nullable: false, maxLength: 100, unicode: false), + DateOfBirth = c.DateTime(nullable: false, precision: 0), + Gender = c.Short(nullable: false), + Alive = c.Boolean(nullable: false, storeType: "bit"), + Health = c.Int(nullable: false), + Armor = c.Int(nullable: false), + Ssn = c.Int(nullable: false), + Position_X = c.Single(nullable: false), + Position_Y = c.Single(nullable: false), + Position_Z = c.Single(nullable: false), + Model = c.String(nullable: false, maxLength: 200, unicode: false), + WalkingStyle = c.String(nullable: false, maxLength: 200, unicode: false), + FacialTraitId = c.Guid(nullable: false), + HeritageId = c.Guid(nullable: false), + StyleId = c.Guid(nullable: false), + TraitId = c.Guid(nullable: false), + LastPlayed = c.DateTime(precision: 0), + UserId = c.Guid(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id) + .ForeignKey("dbo.CharacterFacialTraits", t => t.FacialTraitId, cascadeDelete: true) + .ForeignKey("dbo.CharacterHeritages", t => t.HeritageId, cascadeDelete: true) + .ForeignKey("dbo.CharacterStyles", t => t.StyleId, cascadeDelete: true) + .ForeignKey("dbo.CharacterTraits", t => t.TraitId, cascadeDelete: true) + .ForeignKey("dbo.Users", t => t.UserId, cascadeDelete: true) + .Index(t => t.FacialTraitId) + .Index(t => t.HeritageId) + .Index(t => t.StyleId) + .Index(t => t.TraitId) + .Index(t => t.UserId); + + CreateTable( + "dbo.CharacterFacialTraits", + c => new + { + Id = c.Guid(nullable: false), + NoseWidth = c.Single(nullable: false), + NosePeakHeight = c.Single(nullable: false), + NosePeakLength = c.Single(nullable: false), + NoseBoneHeight = c.Single(nullable: false), + NosePeakLowering = c.Single(nullable: false), + NoseBoneTwist = c.Single(nullable: false), + EyeBrowHeight = c.Single(nullable: false), + EyeBrowLength = c.Single(nullable: false), + CheekBoneHeight = c.Single(nullable: false), + CheekBoneWidth = c.Single(nullable: false), + CheekWidth = c.Single(nullable: false), + EyeOpenings = c.Single(nullable: false), + LipThickness = c.Single(nullable: false), + JawBoneWidth = c.Single(nullable: false), + JawBoneLength = c.Single(nullable: false), + ChinBoneLowering = c.Single(nullable: false), + ChinBoneLength = c.Single(nullable: false), + ChinBoneWidth = c.Single(nullable: false), + ChinDimple = c.Single(nullable: false), + NeckThickness = c.Single(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id); + + CreateTable( + "dbo.CharacterHeritages", + c => new + { + Id = c.Guid(nullable: false), + Parent1 = c.Int(nullable: false), + Parent2 = c.Int(nullable: false), + Resemblance = c.Single(nullable: false), + SkinTone = c.Single(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id); + + CreateTable( + "dbo.CharacterStyles", + c => new + { + Id = c.Guid(nullable: false), + Face_Type = c.Int(nullable: false), + Face_Index = c.Int(nullable: false), + Face_Texture = c.Int(nullable: false), + Head_Type = c.Int(nullable: false), + Head_Index = c.Int(nullable: false), + Head_Texture = c.Int(nullable: false), + Hair_Type = c.Int(nullable: false), + Hair_Index = c.Int(nullable: false), + Hair_Texture = c.Int(nullable: false), + Torso_Type = c.Int(nullable: false), + Torso_Index = c.Int(nullable: false), + Torso_Texture = c.Int(nullable: false), + Torso2_Type = c.Int(nullable: false), + Torso2_Index = c.Int(nullable: false), + Torso2_Texture = c.Int(nullable: false), + Legs_Type = c.Int(nullable: false), + Legs_Index = c.Int(nullable: false), + Legs_Texture = c.Int(nullable: false), + Hands_Type = c.Int(nullable: false), + Hands_Index = c.Int(nullable: false), + Hands_Texture = c.Int(nullable: false), + Shoes_Type = c.Int(nullable: false), + Shoes_Index = c.Int(nullable: false), + Shoes_Texture = c.Int(nullable: false), + Special1_Type = c.Int(nullable: false), + Special1_Index = c.Int(nullable: false), + Special1_Texture = c.Int(nullable: false), + Special2_Type = c.Int(nullable: false), + Special2_Index = c.Int(nullable: false), + Special2_Texture = c.Int(nullable: false), + Special3_Type = c.Int(nullable: false), + Special3_Index = c.Int(nullable: false), + Special3_Texture = c.Int(nullable: false), + Textures_Type = c.Int(nullable: false), + Textures_Index = c.Int(nullable: false), + Textures_Texture = c.Int(nullable: false), + Hat_Type = c.Int(nullable: false), + Hat_Index = c.Int(nullable: false), + Hat_Texture = c.Int(nullable: false), + Glasses_Type = c.Int(nullable: false), + Glasses_Index = c.Int(nullable: false), + Glasses_Texture = c.Int(nullable: false), + EarPiece_Type = c.Int(nullable: false), + EarPiece_Index = c.Int(nullable: false), + EarPiece_Texture = c.Int(nullable: false), + Unknown3_Type = c.Int(nullable: false), + Unknown3_Index = c.Int(nullable: false), + Unknown3_Texture = c.Int(nullable: false), + Unknown4_Type = c.Int(nullable: false), + Unknown4_Index = c.Int(nullable: false), + Unknown4_Texture = c.Int(nullable: false), + Unknown5_Type = c.Int(nullable: false), + Unknown5_Index = c.Int(nullable: false), + Unknown5_Texture = c.Int(nullable: false), + Watch_Type = c.Int(nullable: false), + Watch_Index = c.Int(nullable: false), + Watch_Texture = c.Int(nullable: false), + Wristband_Type = c.Int(nullable: false), + Wristband_Index = c.Int(nullable: false), + Wristband_Texture = c.Int(nullable: false), + Unknown8_Type = c.Int(nullable: false), + Unknown8_Index = c.Int(nullable: false), + Unknown8_Texture = c.Int(nullable: false), + Unknown9_Type = c.Int(nullable: false), + Unknown9_Index = c.Int(nullable: false), + Unknown9_Texture = c.Int(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id); + + CreateTable( + "dbo.CharacterTraits", + c => new + { + Id = c.Guid(nullable: false), + EyeColorId = c.Int(nullable: false), + HairColorId = c.Int(nullable: false), + HairHighlightColor = c.Int(nullable: false), + Blemishes_Index = c.Int(nullable: false), + Blemishes_Opacity = c.Single(nullable: false), + Blemishes_ColorId = c.Int(nullable: false), + Blemishes_SecondColorId = c.Int(nullable: false), + Beard_Index = c.Int(nullable: false), + Beard_Opacity = c.Single(nullable: false), + Beard_ColorId = c.Int(nullable: false), + Beard_SecondColorId = c.Int(nullable: false), + Eyebrows_Index = c.Int(nullable: false), + Eyebrows_Opacity = c.Single(nullable: false), + Eyebrows_ColorId = c.Int(nullable: false), + Eyebrows_SecondColorId = c.Int(nullable: false), + Aging_Index = c.Int(nullable: false), + Aging_Opacity = c.Single(nullable: false), + Aging_ColorId = c.Int(nullable: false), + Aging_SecondColorId = c.Int(nullable: false), + Makeup_Index = c.Int(nullable: false), + Makeup_Opacity = c.Single(nullable: false), + Makeup_ColorId = c.Int(nullable: false), + Makeup_SecondColorId = c.Int(nullable: false), + Blush_Index = c.Int(nullable: false), + Blush_Opacity = c.Single(nullable: false), + Blush_ColorId = c.Int(nullable: false), + Blush_SecondColorId = c.Int(nullable: false), + Complexion_Index = c.Int(nullable: false), + Complexion_Opacity = c.Single(nullable: false), + Complexion_ColorId = c.Int(nullable: false), + Complexion_SecondColorId = c.Int(nullable: false), + SunDamage_Index = c.Int(nullable: false), + SunDamage_Opacity = c.Single(nullable: false), + SunDamage_ColorId = c.Int(nullable: false), + SunDamage_SecondColorId = c.Int(nullable: false), + Lipstick_Index = c.Int(nullable: false), + Lipstick_Opacity = c.Single(nullable: false), + Lipstick_ColorId = c.Int(nullable: false), + Lipstick_SecondColorId = c.Int(nullable: false), + MolesAndFreckles_Index = c.Int(nullable: false), + MolesAndFreckles_Opacity = c.Single(nullable: false), + MolesAndFreckles_ColorId = c.Int(nullable: false), + MolesAndFreckles_SecondColorId = c.Int(nullable: false), + ChestHair_Index = c.Int(nullable: false), + ChestHair_Opacity = c.Single(nullable: false), + ChestHair_ColorId = c.Int(nullable: false), + ChestHair_SecondColorId = c.Int(nullable: false), + BodyBlemishes_Index = c.Int(nullable: false), + BodyBlemishes_Opacity = c.Single(nullable: false), + BodyBlemishes_ColorId = c.Int(nullable: false), + BodyBlemishes_SecondColorId = c.Int(nullable: false), + AddBodyBlemishes_Index = c.Int(nullable: false), + AddBodyBlemishes_Opacity = c.Single(nullable: false), + AddBodyBlemishes_ColorId = c.Int(nullable: false), + AddBodyBlemishes_SecondColorId = c.Int(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Deleted = c.DateTime(precision: 0), + }) + .PrimaryKey(t => t.Id); + + CreateTable( + "dbo.CharacterSessions", + c => new + { + Id = c.Guid(nullable: false), + Created = c.DateTime(nullable: false, precision: 0), + Connected = c.DateTime(precision: 0), + Disconnected = c.DateTime(precision: 0), + CharacterId = c.Guid(nullable: false), + SessionId = c.Guid(nullable: false), + }) + .PrimaryKey(t => t.Id) + .ForeignKey("dbo.Characters", t => t.CharacterId, cascadeDelete: true) + .ForeignKey("dbo.Sessions", t => t.SessionId, cascadeDelete: true) + .Index(t => t.CharacterId) + .Index(t => t.SessionId); + } + + public override void Down() + { + DropForeignKey("dbo.CharacterSessions", "SessionId", "dbo.Sessions"); + DropForeignKey("dbo.CharacterSessions", "CharacterId", "dbo.Characters"); + DropForeignKey("dbo.CharacterInventories", "ContainerId", "dbo.Containers"); + DropForeignKey("dbo.CharacterInventories", "CharacterId", "dbo.Characters"); + DropForeignKey("dbo.Characters", "UserId", "dbo.Users"); + DropForeignKey("dbo.Characters", "TraitId", "dbo.CharacterTraits"); + DropForeignKey("dbo.Characters", "StyleId", "dbo.CharacterStyles"); + DropForeignKey("dbo.Characters", "HeritageId", "dbo.CharacterHeritages"); + DropForeignKey("dbo.Characters", "FacialTraitId", "dbo.CharacterFacialTraits"); + DropIndex("dbo.CharacterSessions", new[] { "SessionId" }); + DropIndex("dbo.CharacterSessions", new[] { "CharacterId" }); + DropIndex("dbo.Characters", new[] { "UserId" }); + DropIndex("dbo.Characters", new[] { "TraitId" }); + DropIndex("dbo.Characters", new[] { "StyleId" }); + DropIndex("dbo.Characters", new[] { "HeritageId" }); + DropIndex("dbo.Characters", new[] { "FacialTraitId" }); + DropIndex("dbo.CharacterInventories", new[] { "ContainerId" }); + DropIndex("dbo.CharacterInventories", new[] { "CharacterId" }); + DropTable("dbo.CharacterSessions"); + DropTable("dbo.CharacterTraits"); + DropTable("dbo.CharacterStyles"); + DropTable("dbo.CharacterHeritages"); + DropTable("dbo.CharacterFacialTraits"); + DropTable("dbo.Characters"); + DropTable("dbo.CharacterInventories"); + } + } +} diff --git a/Characters.Server/Models/Apparel.cs b/Characters.Server/Models/Apparel.cs deleted file mode 100644 index 2dbba1d..0000000 --- a/Characters.Server/Models/Apparel.cs +++ /dev/null @@ -1,63 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using IgiCore.Characters.Shared.Models.Apparel; -using NFive.SDK.Core.Helpers; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Server.Models -{ - public class Apparel : IdentityModel, IApparel - { - public Component Face { get; set; } - public Component Head { get; set; } - public Component Hair { get; set; } - public Component Torso { get; set; } - public Component Torso2 { get; set; } - public Component Legs { get; set; } - public Component Hands { get; set; } - public Component Shoes { get; set; } - public Component Special1 { get; set; } - public Component Special2 { get; set; } - public Component Special3 { get; set; } - public Component Textures { get; set; } - - public Prop Hat { get; set; } - public Prop Glasses { get; set; } - public Prop EarPiece { get; set; } - public Prop Unknown3 { get; set; } - public Prop Unknown4 { get; set; } - public Prop Unknown5 { get; set; } - public Prop Watch { get; set; } - public Prop Wristband { get; set; } - public Prop Unknown8 { get; set; } - public Prop Unknown9 { get; set; } - - public Apparel() - { - this.Id = GuidGenerator.GenerateTimeBasedGuid(); - - this.Face = new Component(); - this.Head = new Component(); - this.Hair = new Component(); - this.Torso = new Component(); - this.Torso2 = new Component(); - this.Legs = new Component(); - this.Hands = new Component(); - this.Shoes = new Component(); - this.Special1 = new Component(); - this.Special2 = new Component(); - this.Special3 = new Component(); - this.Textures = new Component(); - - this.Hat = new Prop(); - this.Glasses = new Prop(); - this.EarPiece = new Prop(); - this.Unknown3 = new Prop(); - this.Unknown4 = new Prop(); - this.Unknown5 = new Prop(); - this.Watch = new Prop(); - this.Wristband = new Prop(); - this.Unknown8 = new Prop(); - this.Unknown9 = new Prop(); - } - } -} diff --git a/Characters.Server/Models/Appearance.cs b/Characters.Server/Models/Appearance.cs deleted file mode 100644 index e9c6e57..0000000 --- a/Characters.Server/Models/Appearance.cs +++ /dev/null @@ -1,43 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using IgiCore.Characters.Shared.Models.Appearance; -using NFive.SDK.Core.Helpers; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Server.Models -{ - public class Appearance : IdentityModel, IAppearance - { - public int EyeColorId { get; set; } - public int HairColorId { get; set; } - public int HairHighlightColor { get; set; } - - public Feature Aging { get; set; } - public Feature Beard { get; set; } - public Feature Blush { get; set; } - public Feature Blemishes { get; set; } - public Feature Chest { get; set; } - public Feature Complexion { get; set; } - public Feature Eyebrows { get; set; } - public Feature Lipstick { get; set; } - public Feature Makeup { get; set; } - public Feature MolesAndFreckles { get; set; } - public Feature SunDamage { get; set; } - - public Appearance() - { - this.Id = GuidGenerator.GenerateTimeBasedGuid(); - - this.Aging = new Feature(); - this.Beard = new Feature(); - this.Blemishes = new Feature(); - this.Blush = new Feature(); - this.Chest = new Feature(); - this.Complexion = new Feature(); - this.Eyebrows = new Feature(); - this.Lipstick = new Feature(); - this.Makeup = new Feature(); - this.MolesAndFreckles = new Feature(); - this.SunDamage = new Feature(); - } - } -} diff --git a/Characters.Server/Models/Character.cs b/Characters.Server/Models/Character.cs index 369075c..66810cc 100644 --- a/Characters.Server/Models/Character.cs +++ b/Characters.Server/Models/Character.cs @@ -147,29 +147,29 @@ public class Character : IdentityModel, ICharacter public string WalkingStyle { get; set; } [Required] - [ForeignKey("Apparel")] - public Guid ApparelId { get; set; } + [ForeignKey("FacialTrait")] + public Guid FacialTraitId { get; set; } + + public virtual CharacterFacialTrait FacialTrait { get; set; } - public virtual Apparel Apparel { get; set; } [Required] - [ForeignKey("Appearance")] - public Guid AppearanceId { get; set; } + [ForeignKey("Heritage")] + public Guid HeritageId { get; set; } - public virtual Appearance Appearance { get; set; } + public virtual CharacterHeritage Heritage { get; set; } [Required] - [ForeignKey("FaceShape")] - public Guid FaceShapeId { get; set; } - - public virtual FaceShape FaceShape { get; set; } + [ForeignKey("Style")] + public Guid StyleId { get; set; } + public virtual CharacterStyle Style { get; set; } [Required] - [ForeignKey("Heritage")] - public Guid HeritageId { get; set; } + [ForeignKey("Trait")] + public Guid TraitId { get; set; } - public virtual Heritage Heritage { get; set; } + public virtual CharacterTrait Trait { get; set; } /// /// diff --git a/Characters.Server/Models/CharacterFacialTrait.cs b/Characters.Server/Models/CharacterFacialTrait.cs new file mode 100644 index 0000000..d04de4e --- /dev/null +++ b/Characters.Server/Models/CharacterFacialTrait.cs @@ -0,0 +1,221 @@ +using System.ComponentModel.DataAnnotations; +using Google.Protobuf.WellKnownTypes; +using IgiCore.Characters.Shared.Models; +using NFive.SDK.Core.Helpers; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Server.Models +{ + /// + /// + /// Represents a game character's facial traits + /// + /// + /// + public class CharacterFacialTrait : IdentityModel, ICharacterFacialTrait + { + /// + /// Gets or sets the width of the nose. + /// + /// + /// The width of the nose. + /// + [Required] + [Range(-1f, 1f)] + public float NoseWidth { get; set; } + + /// + /// Gets or sets the height of the nose peak. + /// + /// + /// The height of the nose peak. + /// + [Required] + [Range(-1f, 1f)] + public float NosePeakHeight { get; set; } + + /// + /// Gets or sets the length of the nose peak. + /// + /// + /// The length of the nose peak. + /// + [Required] + [Range(-1f, 1f)] + public float NosePeakLength { get; set; } + + /// + /// Gets or sets the height of the nose bone. + /// + /// + /// The height of the nose bone. + /// + [Required] + [Range(-1f, 1f)] + public float NoseBoneHeight { get; set; } + + /// + /// Gets or sets the nose peak lowering. + /// + /// + /// The nose peak lowering. + /// + [Required] + [Range(-1f, 1f)] + public float NosePeakLowering { get; set; } + + /// + /// Gets or sets the nose bone twist. + /// + /// + /// The nose bone twist. + /// + [Required] + [Range(-1f, 1f)] + public float NoseBoneTwist { get; set; } + + /// + /// Gets or sets the height of the eye brow. + /// + /// + /// The height of the eye brow. + /// + [Required] + [Range(-1f, 1f)] + public float EyeBrowHeight { get; set; } + + /// + /// Gets or sets the length of the eye brow. + /// + /// + /// The length of the eye brow. + /// + [Required] + [Range(-1f, 1f)] + public float EyeBrowLength { get; set; } + + /// + /// Gets or sets the height of the cheek bone. + /// + /// + /// The height of the cheek bone. + /// + [Required] + [Range(-1f, 1f)] + public float CheekBoneHeight { get; set; } + + /// + /// Gets or sets the width of the cheek bone. + /// + /// + /// The width of the cheek bone. + /// + [Required] + [Range(-1f, 1f)] + public float CheekBoneWidth { get; set; } + + /// + /// Gets or sets the width of the cheek. + /// + /// + /// The width of the cheek. + /// + [Required] + [Range(-1f, 1f)] + public float CheekWidth { get; set; } + + /// + /// Gets or sets the eye openings. + /// + /// + /// The eye openings. + /// + [Required] + [Range(-1f, 1f)] + public float EyeOpenings { get; set; } + + /// + /// Gets or sets the lip thickness. + /// + /// + /// The lip thickness. + /// + [Required] + [Range(-1f, 1f)] + public float LipThickness { get; set; } + + /// + /// Gets or sets the width of the jaw bone. + /// + /// + /// The width of the jaw bone. + /// + [Required] + [Range(-1f, 1f)] + public float JawBoneWidth { get; set; } + + /// + /// Gets or sets the length of the jaw bone. + /// + /// + /// The length of the jaw bone. + /// + [Required] + [Range(-1f, 1f)] + public float JawBoneLength { get; set; } + + /// + /// Gets or sets the chin bone lowering. + /// + /// + /// The chin bone lowering. + /// + [Required] + [Range(-1f, 1f)] + public float ChinBoneLowering { get; set; } + + /// + /// Gets or sets the length of the chin bone. + /// + /// + /// The length of the chin bone. + /// + [Required] + [Range(-1f, 1f)] + public float ChinBoneLength { get; set; } + + /// + /// Gets or sets the width of the chin bone. + /// + /// + /// The width of the chin bone. + /// + [Required] + [Range(-1f, 1f)] + public float ChinBoneWidth { get; set; } + + /// + /// Gets or sets the chin dimple. + /// + /// + /// The chin dimple. + [Required] + [Range(-1f, 1f)] + public float ChinDimple { get; set; } + + /// + /// Gets or sets the neck thickness. + /// + /// + /// The neck thickness. + /// + [Required] + [Range(-1f, 1f)] + public float NeckThickness { get; set; } + + public CharacterFacialTrait() + { + this.Id = GuidGenerator.GenerateTimeBasedGuid(); + } + } +} diff --git a/Characters.Server/Models/CharacterHeritage.cs b/Characters.Server/Models/CharacterHeritage.cs new file mode 100644 index 0000000..bd8c86b --- /dev/null +++ b/Characters.Server/Models/CharacterHeritage.cs @@ -0,0 +1,60 @@ +using System.ComponentModel.DataAnnotations; +using IgiCore.Characters.Shared.Models; +using NFive.SDK.Core.Helpers; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Server.Models +{ + /// + /// Represents a game character's heritage. + /// + /// + /// + public class CharacterHeritage : IdentityModel, ICharacterHeritage + { + /// + /// Gets or sets the first parent. + /// + /// + /// The first parent. + /// + [Required] + [Range(0, 255)] + public int Parent1 { get; set; } + + /// + /// Gets or sets the second parent. + /// + /// + /// The second parent. + /// + [Required] + [Range(0, 255)] + public int Parent2 { get; set; } + + /// + /// Gets or sets the parent resemblance. + /// + /// + /// The parent resemblance percentage. + /// + [Required] + [Range(0f, 1f)] + public float Resemblance { get; set; } + + /// + /// Gets or sets the skin tone. + /// + /// + /// The skin tone percentage. + /// + [Required] + [Range(0f, 1f)] + public float SkinTone { get; set; } + + public CharacterHeritage() + { + this.Id = GuidGenerator.GenerateTimeBasedGuid(); + } + } +} diff --git a/Characters.Server/Models/CharacterStyle.cs b/Characters.Server/Models/CharacterStyle.cs new file mode 100644 index 0000000..20ae8ad --- /dev/null +++ b/Characters.Server/Models/CharacterStyle.cs @@ -0,0 +1,222 @@ +using System.ComponentModel.DataAnnotations; +using IgiCore.Characters.Shared.Models; +using IgiCore.Characters.Shared.Models.Style; +using NFive.SDK.Core.Helpers; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Server.Models +{ + /// + /// Represents a game character's clothing and props. + /// + /// + /// + public class CharacterStyle : IdentityModel, ICharacterStyle + { + /// + /// Gets or sets the face component. + /// + /// + /// The face component. + /// + public Component Face { get; set; } + + /// + /// Gets or sets the head component. + /// + /// + /// The head component. + /// + public Component Head { get; set; } + + /// + /// Gets or sets the hair component. + /// + /// + /// The hair component. + /// + public Component Hair { get; set; } + + /// + /// Gets or sets the torso component. + /// + /// + /// The torso component. + /// + public Component Torso { get; set; } + + /// + /// Gets or sets the torso2 component. + /// + /// + /// The torso2 component. + /// + public Component Torso2 { get; set; } + + /// + /// Gets or sets the legs component. + /// + /// + /// The legs component. + /// + public Component Legs { get; set; } + + /// + /// Gets or sets the hands component. + /// + /// + /// The hands component. + /// + public Component Hands { get; set; } + + /// + /// Gets or sets the shoes component. + /// + /// + /// The shoes component. + /// + public Component Shoes { get; set; } + + /// + /// Gets or sets the special1 component. + /// + /// + /// The special1 component. + /// + public Component Special1 { get; set; } + + /// + /// Gets or sets the special2 component. + /// + /// + /// The special2 component. + /// + public Component Special2 { get; set; } + + /// + /// Gets or sets the special3 component. + /// + /// + /// The special3 component. + /// + public Component Special3 { get; set; } + + /// + /// Gets or sets the textures component. + /// + /// + /// The textures component. + /// + public Component Textures { get; set; } + + + /// + /// Gets or sets the hat prop. + /// + /// + /// The hat prop. + /// + public Prop Hat { get; set; } + + /// + /// Gets or sets the glasses prop. + /// + /// + /// The glasses prop. + /// + public Prop Glasses { get; set; } + + /// + /// Gets or sets the ear piece prop. + /// + /// + /// The ear piece prop. + /// + public Prop EarPiece { get; set; } + + /// + /// Gets or sets the unknown3 prop. + /// + /// + /// The unknown3 prop. + /// + public Prop Unknown3 { get; set; } + + /// + /// Gets or sets the unknown4 prop. + /// + /// + /// The unknown4 prop. + /// + public Prop Unknown4 { get; set; } + + /// + /// Gets or sets the unknown5 prop. + /// + /// + /// The unknown5 prop. + /// + public Prop Unknown5 { get; set; } + + /// + /// Gets or sets the watch prop. + /// + /// + /// The watch prop. + /// + public Prop Watch { get; set; } + + /// + /// Gets or sets the wristband prop. + /// + /// + /// The wristband prop. + /// + public Prop Wristband { get; set; } + + /// + /// Gets or sets the unknown8 prop. + /// + /// + /// The unknown8 prop. + /// + public Prop Unknown8 { get; set; } + + /// + /// Gets or sets the unknown9 prop. + /// + /// + /// The unknown9 prop. + /// + public Prop Unknown9 { get; set; } + + public CharacterStyle() + { + this.Id = GuidGenerator.GenerateTimeBasedGuid(); + + this.Face = new Component(); + this.Head = new Component(); + this.Hair = new Component(); + this.Torso = new Component(); + this.Torso2 = new Component(); + this.Legs = new Component(); + this.Hands = new Component(); + this.Shoes = new Component(); + this.Special1 = new Component(); + this.Special2 = new Component(); + this.Special3 = new Component(); + this.Textures = new Component(); + + this.Hat = new Prop(); + this.Glasses = new Prop(); + this.EarPiece = new Prop(); + this.Unknown3 = new Prop(); + this.Unknown4 = new Prop(); + this.Unknown5 = new Prop(); + this.Watch = new Prop(); + this.Wristband = new Prop(); + this.Unknown8 = new Prop(); + this.Unknown9 = new Prop(); + } + } +} diff --git a/Characters.Server/Models/CharacterTrait.cs b/Characters.Server/Models/CharacterTrait.cs new file mode 100644 index 0000000..bd27bd2 --- /dev/null +++ b/Characters.Server/Models/CharacterTrait.cs @@ -0,0 +1,170 @@ +using System; +using System.ComponentModel.DataAnnotations; +using IgiCore.Characters.Shared.Models; +using IgiCore.Characters.Shared.Models.Trait; +using NFive.SDK.Core.Helpers; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Server.Models +{ + /// + /// Represents a game character's appearance traits. + /// + /// + /// + public class CharacterTrait : IdentityModel, ICharacterTrait + { + /// + /// Gets or sets the eye color identifier. + /// + /// + /// The eye color identifier. + /// + [Required] + [Range(0, 255)] + public int EyeColorId { get; set; } + + /// + /// Gets or sets the hair color identifier. + /// + /// + /// The hair color identifier. + /// + [Required] + [Range(0, 255)] + public int HairColorId { get; set; } + + /// + /// Gets or sets the hair highlight color identifier. + /// + /// + /// The hair highlight color identifier. + /// + [Required] + [Range(0, 255)] + public int HairHighlightColor { get; set; } + + /// + /// Gets or sets the blemishes trait. + /// + /// + /// The blemishes trait. + /// + public Feature Blemishes { get; set; } + + /// + /// Gets or sets the beard trait. + /// + /// + /// The beard trait. + /// + public Feature Beard { get; set; } + + /// + /// Gets or sets the eyebrows trait. + /// + /// + /// The eyebrows trait. + /// + public Feature Eyebrows { get; set; } + + /// + /// Gets or sets the aging trait. + /// + /// + /// The aging trait. + /// + public Feature Aging { get; set; } + + /// + /// Gets or sets the makeup trait. + /// + /// + /// The makeup trait. + /// + public Feature Makeup { get; set; } + + /// + /// Gets or sets the blush trait. + /// + /// + /// The blush trait. + /// + public Feature Blush { get; set; } + + /// + /// Gets or sets the complexion trait. + /// + /// + /// The complexion trait. + /// + public Feature Complexion { get; set; } + + /// + /// Gets or sets the sun damage trait. + /// + /// + /// The sun damage trait. + /// + public Feature SunDamage { get; set; } + + /// + /// Gets or sets the lipstick trait. + /// + /// + /// The lipstick trait. + /// + public Feature Lipstick { get; set; } + + /// + /// Gets or sets the moles and freckles trait. + /// + /// + /// The moles and freckles trait. + /// + public Feature MolesAndFreckles { get; set; } + + /// + /// Gets or sets the chest hair trait. + /// + /// + /// The chest hair trait. + /// + public Feature ChestHair { get; set; } + + /// + /// Gets or sets the body blemishes trait. + /// + /// + /// The body blemishes trait. + /// + public Feature BodyBlemishes { get; set; } + + /// + /// Gets or sets the add body blemishes trait. + /// + /// + /// The add body blemishes trait. + /// + public Feature AddBodyBlemishes { get; set; } + + public CharacterTrait() + { + this.Id = GuidGenerator.GenerateTimeBasedGuid(); + + this.Blemishes = new Feature(); + this.Beard = new Feature(); + this.Eyebrows = new Feature(); + this.Aging = new Feature(); + this.Makeup = new Feature(); + this.Blush = new Feature(); + this.Complexion = new Feature(); + this.SunDamage = new Feature(); + this.Lipstick = new Feature(); + this.MolesAndFreckles = new Feature(); + this.ChestHair = new Feature(); + this.BodyBlemishes = new Feature(); + this.AddBodyBlemishes = new Feature(); + } + } +} diff --git a/Characters.Server/Models/FaceShape.cs b/Characters.Server/Models/FaceShape.cs deleted file mode 100644 index 923ba3c..0000000 --- a/Characters.Server/Models/FaceShape.cs +++ /dev/null @@ -1,35 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using NFive.SDK.Core.Helpers; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Server.Models -{ - public class FaceShape : IdentityModel, IFaceShape - { - public float NoseWidth { get; set; } - public float NosePeakHeight { get; set; } - public float NosePeakLength { get; set; } - public float NoseBoneHeight { get; set; } - public float NosePeakLowering { get; set; } - public float NoseBoneTwist { get; set; } - public float EyeBrowHeight { get; set; } - public float EyeBrowLength { get; set; } - public float CheekBoneHeight { get; set; } - public float CheekBoneWidth { get; set; } - public float CheekWidth { get; set; } - public float EyeOpenings { get; set; } - public float LipThickness { get; set; } - public float JawBoneWidth { get; set; } - public float JawBoneLength { get; set; } - public float ChinBoneLowering { get; set; } - public float ChinBoneLength { get; set; } - public float ChinBoneWidth { get; set; } - public float ChinDimple { get; set; } - public float NeckThickness { get; set; } - - public FaceShape() - { - this.Id = GuidGenerator.GenerateTimeBasedGuid(); - } - } -} diff --git a/Characters.Server/Models/Heritage.cs b/Characters.Server/Models/Heritage.cs deleted file mode 100644 index 7d0c99a..0000000 --- a/Characters.Server/Models/Heritage.cs +++ /dev/null @@ -1,20 +0,0 @@ -using IgiCore.Characters.Shared.Models; -using NFive.SDK.Core.Helpers; -using System; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Server.Models -{ - public class Heritage : IdentityModel, IHeritage - { - public int Parent1 { get; set; } - public int Parent2 { get; set; } - public float Resemblance { get; set; } - public float SkinTone { get; set; } - - public Heritage() - { - this.Id = GuidGenerator.GenerateTimeBasedGuid(); - } - } -} diff --git a/Characters.Server/Storage/StorageContext.cs b/Characters.Server/Storage/StorageContext.cs index 274fa6f..381249b 100644 --- a/Characters.Server/Storage/StorageContext.cs +++ b/Characters.Server/Storage/StorageContext.cs @@ -8,8 +8,6 @@ public class StorageContext : EFContext { public DbSet Characters { get; set; } - public DbSet Appearances { get; set; } - public DbSet CharacterInventories { get; set; } public DbSet CharacterSessions { get; set; } diff --git a/Characters.Shared/CharacterEvents.cs b/Characters.Shared/CharacterEvents.cs index 63d74ea..a97807d 100644 --- a/Characters.Shared/CharacterEvents.cs +++ b/Characters.Shared/CharacterEvents.cs @@ -9,9 +9,15 @@ public static class CharacterEvents public const string Delete = "igicore:character:delete"; public const string Select = "igicore:character:select"; public const string DeselectAll = "igicore:character:deselectall"; + public const string SaveCharacter = "igicore:character:save:character"; public const string SavePosition = "igicore:character:save:position"; + public const string SaveHeritage = "igicore:characters:save:heritage"; + public const string SaveFacialTrait = "igicore:characters:save:facialtrait"; + public const string SaveStyle = "igicore:characters:save:style"; + public const string SaveTrait = "igicore:characters:save:trait"; + public const string Selecting = "igicore:character:selecting"; public const string Selected = "igicore:character:selected"; public const string Deselecting = "igicore:character:deselecting"; diff --git a/Characters.Shared/Characters.Shared.csproj b/Characters.Shared/Characters.Shared.csproj index 6db5460..3230f30 100644 --- a/Characters.Shared/Characters.Shared.csproj +++ b/Characters.Shared/Characters.Shared.csproj @@ -50,24 +50,23 @@ False + - - - - + + - - - - - - - + + + + + + + diff --git a/Characters.Shared/Models/Apparel/Component.cs b/Characters.Shared/Models/Apparel/Component.cs deleted file mode 100644 index bb555b7..0000000 --- a/Characters.Shared/Models/Apparel/Component.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace IgiCore.Characters.Shared.Models.Apparel -{ - public class Component - { - public ComponentTypes Type { get; set; } - public int Index { get; set; } - public int Texture { get; set; } - } -} diff --git a/Characters.Shared/Models/Apparel/Prop.cs b/Characters.Shared/Models/Apparel/Prop.cs deleted file mode 100644 index 20f22eb..0000000 --- a/Characters.Shared/Models/Apparel/Prop.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace IgiCore.Characters.Shared.Models.Apparel -{ - public class Prop - { - public PropTypes Type { get; set; } - public int Index { get; set; } - public int Texture { get; set; } - } -} diff --git a/Characters.Shared/Models/Appearance/Feature.cs b/Characters.Shared/Models/Appearance/Feature.cs deleted file mode 100644 index 12a6463..0000000 --- a/Characters.Shared/Models/Appearance/Feature.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace IgiCore.Characters.Shared.Models.Appearance -{ - public class Feature - { - public FeatureTypes Type { get; set; } - - public int Index { get; set; } - - public float Opacity { get; set; } - - public FeatureColorTypes ColorType { get; set; } - - public int ColorId { get; set; } - - public int SecondColorId { get; set; } - } -} diff --git a/Characters.Shared/Models/Appearance/FeatureColorTypes.cs b/Characters.Shared/Models/Appearance/FeatureColorTypes.cs deleted file mode 100644 index 2117e6b..0000000 --- a/Characters.Shared/Models/Appearance/FeatureColorTypes.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace IgiCore.Characters.Shared.Models.Appearance -{ - /// - /// Used for freemode(online) characters. - /// ColorType is 1 for eyebrows, beards, and chest hair; 2 for blush and lipstick; and 0 otherwise, though not called in those cases. - /// Called after SET_PED_HEAD_OVERLAY(). - /// - public enum FeatureColorTypes - { - Beards = 1, - Chest = 1, - EyeBrows = 1, - Blush = 2, - Lipstick = 2, - Misc = 0 - } - - -} diff --git a/Characters.Shared/Models/Appearance/FeatureTypes.cs b/Characters.Shared/Models/Appearance/FeatureTypes.cs deleted file mode 100644 index 99dc77b..0000000 --- a/Characters.Shared/Models/Appearance/FeatureTypes.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace IgiCore.Characters.Shared.Models.Appearance -{ - public enum FeatureTypes - { - Beard = 1, - Eyebrows = 2, - Age = 3, - Makeup = 4, - Blush = 5, - Complexion = 6, - SunDamage = 7, - Lipstick = 8, - MolesAndFreckles = 9, - Chest = 10, - Blemishes = 11 - } -} diff --git a/Characters.Shared/Models/IApparel.cs b/Characters.Shared/Models/IApparel.cs deleted file mode 100644 index 818a8de..0000000 --- a/Characters.Shared/Models/IApparel.cs +++ /dev/null @@ -1,34 +0,0 @@ -using IgiCore.Characters.Shared.Models.Apparel; -using JetBrains.Annotations; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Shared.Models -{ - [PublicAPI] - public interface IApparel : IIdentityModel - { - Component Face { get; set; } - Component Head { get; set; } - Component Hair { get; set; } - Component Torso { get; set; } - Component Torso2 { get; set; } - Component Legs { get; set; } - Component Hands { get; set; } - Component Shoes { get; set; } - Component Special1 { get; set; } - Component Special2 { get; set; } - Component Special3 { get; set; } - Component Textures { get; set; } - - Prop Hat { get; set; } - Prop Glasses { get; set; } - Prop EarPiece { get; set; } - Prop Unknown3 { get; set; } - Prop Unknown4 { get; set; } - Prop Unknown5 { get; set; } - Prop Watch { get; set; } - Prop Wristband { get; set; } - Prop Unknown8 { get; set; } - Prop Unknown9 { get; set; } - } -} diff --git a/Characters.Shared/Models/IAppearance.cs b/Characters.Shared/Models/IAppearance.cs deleted file mode 100644 index 25520b0..0000000 --- a/Characters.Shared/Models/IAppearance.cs +++ /dev/null @@ -1,24 +0,0 @@ -using IgiCore.Characters.Shared.Models.Appearance; -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Shared.Models -{ - public interface IAppearance : IIdentityModel - { - int EyeColorId { get; set; } - int HairColorId { get; set; } - int HairHighlightColor { get; set; } - - Feature Aging { get; set; } - Feature Beard { get; set; } - Feature Blush { get; set; } - Feature Blemishes { get; set; } - Feature Chest { get; set; } - Feature Complexion { get; set; } - Feature Eyebrows { get; set; } - Feature Lipstick { get; set; } - Feature Makeup { get; set; } - Feature MolesAndFreckles { get; set; } - Feature SunDamage { get; set; } - } -} diff --git a/Characters.Shared/Models/ICharacter.cs b/Characters.Shared/Models/ICharacter.cs index 910fe65..e1d96f1 100644 --- a/Characters.Shared/Models/ICharacter.cs +++ b/Characters.Shared/Models/ICharacter.cs @@ -1,6 +1,6 @@ -using System; using JetBrains.Annotations; using NFive.SDK.Core.Models; +using System; namespace IgiCore.Characters.Shared.Models { diff --git a/Characters.Shared/Models/ICharacterFacialTrait.cs b/Characters.Shared/Models/ICharacterFacialTrait.cs new file mode 100644 index 0000000..bb0c454 --- /dev/null +++ b/Characters.Shared/Models/ICharacterFacialTrait.cs @@ -0,0 +1,170 @@ +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Shared.Models +{ + /// + /// Represents a game character's facial traits + /// + public interface ICharacterFacialTrait : IIdentityModel + { + /// + /// Gets or sets the width of the nose. + /// + /// + /// The width of the nose. + /// + float NoseWidth { get; set; } + + /// + /// Gets or sets the height of the nose peak. + /// + /// + /// The height of the nose peak. + /// + float NosePeakHeight { get; set; } + + /// + /// Gets or sets the length of the nose peak. + /// + /// + /// The length of the nose peak. + /// + float NosePeakLength { get; set; } + + /// + /// Gets or sets the height of the nose bone. + /// + /// + /// The height of the nose bone. + /// + float NoseBoneHeight { get; set; } + + /// + /// Gets or sets the nose peak lowering. + /// + /// + /// The nose peak lowering. + /// + float NosePeakLowering { get; set; } + + /// + /// Gets or sets the nose bone twist. + /// + /// + /// The nose bone twist. + /// + float NoseBoneTwist { get; set; } + + /// + /// Gets or sets the height of the eye brow. + /// + /// + /// The height of the eye brow. + /// + float EyeBrowHeight { get; set; } + + /// + /// Gets or sets the length of the eye brow. + /// + /// + /// The length of the eye brow. + /// + float EyeBrowLength { get; set; } + + /// + /// Gets or sets the height of the cheek bone. + /// + /// + /// The height of the cheek bone. + /// + float CheekBoneHeight { get; set; } + + /// + /// Gets or sets the width of the cheek bone. + /// + /// + /// The width of the cheek bone. + /// + float CheekBoneWidth { get; set; } + + /// + /// Gets or sets the width of the cheek. + /// + /// + /// The width of the cheek. + /// + float CheekWidth { get; set; } + + /// + /// Gets or sets the eye openings. + /// + /// + /// The eye openings. + /// + float EyeOpenings { get; set; } + + /// + /// Gets or sets the lip thickness. + /// + /// + /// The lip thickness. + /// + float LipThickness { get; set; } + + /// + /// Gets or sets the width of the jaw bone. + /// + /// + /// The width of the jaw bone. + /// + float JawBoneWidth { get; set; } + + /// + /// Gets or sets the length of the jaw bone. + /// + /// + /// The length of the jaw bone. + /// + float JawBoneLength { get; set; } + + /// + /// Gets or sets the chin bone lowering. + /// + /// + /// The chin bone lowering. + /// + float ChinBoneLowering { get; set; } + + /// + /// Gets or sets the length of the chin bone. + /// + /// + /// The length of the chin bone. + /// + float ChinBoneLength { get; set; } + + /// + /// Gets or sets the width of the chin bone. + /// + /// + /// The width of the chin bone. + /// + float ChinBoneWidth { get; set; } + + /// + /// Gets or sets the chin dimple. + /// + /// + /// The chin dimple. + /// + float ChinDimple { get; set; } + + /// + /// Gets or sets the neck thickness. + /// + /// + /// The neck thickness. + /// + float NeckThickness { get; set; } + } +} diff --git a/Characters.Shared/Models/ICharacterHeritage.cs b/Characters.Shared/Models/ICharacterHeritage.cs new file mode 100644 index 0000000..251a1dd --- /dev/null +++ b/Characters.Shared/Models/ICharacterHeritage.cs @@ -0,0 +1,43 @@ +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Shared.Models +{ + /// + /// Represents a game character's heritage. + /// + /// + public interface ICharacterHeritage : IIdentityModel + { + /// + /// Gets or sets the first parent. + /// + /// + /// The first parent. + /// + int Parent1 { get; set; } + + /// + /// Gets or sets the second parent. + /// + /// + /// The second parent. + /// + int Parent2 { get; set; } + + /// + /// Gets or sets the parent resemblance. + /// + /// + /// The parent resemblance percentage. + /// + float Resemblance { get; set; } + + /// + /// Gets or sets the skin tone. + /// + /// + /// The skin tone percentage. + /// + float SkinTone { get; set; } + } +} diff --git a/Characters.Shared/Models/ICharacterStyle.cs b/Characters.Shared/Models/ICharacterStyle.cs new file mode 100644 index 0000000..8718aef --- /dev/null +++ b/Characters.Shared/Models/ICharacterStyle.cs @@ -0,0 +1,189 @@ +using IgiCore.Characters.Shared.Models.Style; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Shared.Models +{ + /// + /// Represents a game character's clothing and props. + /// + /// + public interface ICharacterStyle : IIdentityModel + { + /// + /// Gets or sets the face component. + /// + /// + /// The face component. + /// + Component Face { get; set; } + + /// + /// Gets or sets the head component. + /// + /// + /// The head component. + /// + Component Head { get; set; } + + /// + /// Gets or sets the hair component. + /// + /// + /// The hair component. + /// + Component Hair { get; set; } + + /// + /// Gets or sets the torso component. + /// + /// + /// The torso component. + /// + Component Torso { get; set; } + + /// + /// Gets or sets the torso2 component. + /// + /// + /// The torso2 component. + /// + Component Torso2 { get; set; } + + /// + /// Gets or sets the legs component. + /// + /// + /// The legs component. + /// + Component Legs { get; set; } + + /// + /// Gets or sets the hands component. + /// + /// + /// The hands component. + /// + Component Hands { get; set; } + + /// + /// Gets or sets the shoes component. + /// + /// + /// The shoes component. + /// + Component Shoes { get; set; } + + /// + /// Gets or sets the special1 component. + /// + /// + /// The special1 component. + /// + Component Special1 { get; set; } + + /// + /// Gets or sets the special2 component. + /// + /// + /// The special2 component. + /// + Component Special2 { get; set; } + + /// + /// Gets or sets the special3 component. + /// + /// + /// The special3 component. + /// + Component Special3 { get; set; } + + /// + /// Gets or sets the textures component. + /// + /// + /// The textures component. + /// + Component Textures { get; set; } + + + /// + /// Gets or sets the hat prop. + /// + /// + /// The hat prop. + /// + Prop Hat { get; set; } + + /// + /// Gets or sets the glasses prop. + /// + /// + /// The glasses prop. + /// + Prop Glasses { get; set; } + + /// + /// Gets or sets the ear piece prop. + /// + /// + /// The ear piece prop. + /// + Prop EarPiece { get; set; } + + /// + /// Gets or sets the unknown3 prop. + /// + /// + /// The unknown3 prop. + /// + Prop Unknown3 { get; set; } + + /// + /// Gets or sets the unknown4 prop. + /// + /// + /// The unknown4 prop. + /// + Prop Unknown4 { get; set; } + + /// + /// Gets or sets the unknown5 prop. + /// + /// + /// The unknown5 prop. + /// + Prop Unknown5 { get; set; } + + /// + /// Gets or sets the watch prop. + /// + /// + /// The watch prop. + /// + Prop Watch { get; set; } + + /// + /// Gets or sets the wristband prop. + /// + /// + /// The wristband prop. + /// + Prop Wristband { get; set; } + + /// + /// Gets or sets the unknown8 prop. + /// + /// + /// The unknown8 prop. + /// + Prop Unknown8 { get; set; } + + /// + /// Gets or sets the unknown9 prop. + /// + /// + /// The unknown9 prop. + /// + Prop Unknown9 { get; set; } + } +} diff --git a/Characters.Shared/Models/ICharacterTrait.cs b/Characters.Shared/Models/ICharacterTrait.cs new file mode 100644 index 0000000..f27ebef --- /dev/null +++ b/Characters.Shared/Models/ICharacterTrait.cs @@ -0,0 +1,140 @@ +using IgiCore.Characters.Shared.Models.Trait; +using NFive.SDK.Core.Models; + +namespace IgiCore.Characters.Shared.Models +{ + /// + /// Represents a game character's appearance traits. + /// + /// + public interface ICharacterTrait : IIdentityModel + { + /// + /// Gets or sets the eye color identifier. + /// + /// + /// The eye color identifier. + /// + int EyeColorId { get; set; } + + /// + /// Gets or sets the hair color identifier. + /// + /// + /// The hair color identifier. + /// + int HairColorId { get; set; } + + /// + /// Gets or sets the hair highlight color identifier. + /// + /// + /// The hair highlight color identifier. + /// + int HairHighlightColor { get; set; } + + /// + /// Gets or sets the blemishes trait. + /// + /// + /// The blemishes trait. + /// + Feature Blemishes { get; set; } + + /// + /// Gets or sets the beard trait. + /// + /// + /// The beard trait. + /// + Feature Beard { get; set; } + + /// + /// Gets or sets the eyebrows trait. + /// + /// + /// The eyebrows trait. + /// + Feature Eyebrows { get; set; } + + /// + /// Gets or sets the aging trait. + /// + /// + /// The aging trait. + /// + Feature Aging { get; set; } + + /// + /// Gets or sets the makeup trait. + /// + /// + /// The makeup trait. + /// + Feature Makeup { get; set; } + + /// + /// Gets or sets the blush trait. + /// + /// + /// The blush trait. + /// + Feature Blush { get; set; } + + /// + /// Gets or sets the complexion trait. + /// + /// + /// The complexion trait. + /// + Feature Complexion { get; set; } + + /// + /// Gets or sets the sun damage trait. + /// + /// + /// The sun damage trait. + /// + Feature SunDamage { get; set; } + + /// + /// Gets or sets the lipstick trait. + /// + /// + /// The lipstick trait. + /// + Feature Lipstick { get; set; } + + /// + /// Gets or sets the moles and freckles trait. + /// + /// + /// The moles and freckles trait. + /// + Feature MolesAndFreckles { get; set; } + + /// + /// Gets or sets the chest hair trait. + /// + /// + /// The chest hair trait. + /// + Feature ChestHair { get; set; } + + /// + /// Gets or sets the body blemishes trait. + /// + /// + /// The body blemishes trait. + /// + Feature BodyBlemishes { get; set; } + + /// + /// Gets or sets the add body blemishes trait. + /// + /// + /// The add body blemishes trait. + /// + Feature AddBodyBlemishes { get; set; } + } +} diff --git a/Characters.Shared/Models/IFaceShape.cs b/Characters.Shared/Models/IFaceShape.cs deleted file mode 100644 index f4fcf87..0000000 --- a/Characters.Shared/Models/IFaceShape.cs +++ /dev/null @@ -1,33 +0,0 @@ -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Shared.Models -{ - public interface IFaceShape : IIdentityModel - { - float NoseWidth { get; set; } - float NosePeakHeight { get; set; } - float NosePeakLength { get; set; } - float NoseBoneHeight { get; set; } - float NosePeakLowering { get; set; } - float NoseBoneTwist { get; set; } - - float EyeBrowHeight { get; set; } - float EyeBrowLength { get; set; } - - float CheekBoneHeight { get; set; } - float CheekBoneWidth { get; set; } - float CheekWidth { get; set; } - - float EyeOpenings { get; set; } - float LipThickness { get; set; } - - float JawBoneWidth { get; set; } - float JawBoneLength { get; set; } - - float ChinBoneLowering { get; set; } - float ChinBoneLength { get; set; } - float ChinBoneWidth { get; set; } - float ChinDimple { get; set; } - float NeckThickness { get; set; } - } -} diff --git a/Characters.Shared/Models/IHeritage.cs b/Characters.Shared/Models/IHeritage.cs deleted file mode 100644 index 4ce5f49..0000000 --- a/Characters.Shared/Models/IHeritage.cs +++ /dev/null @@ -1,12 +0,0 @@ -using NFive.SDK.Core.Models; - -namespace IgiCore.Characters.Shared.Models -{ - public interface IHeritage : IIdentityModel - { - int Parent1 { get; set; } - int Parent2 { get; set; } - float Resemblance { get; set; } - float SkinTone { get; set; } - } -} diff --git a/Characters.Shared/Models/Style/Component.cs b/Characters.Shared/Models/Style/Component.cs new file mode 100644 index 0000000..614f137 --- /dev/null +++ b/Characters.Shared/Models/Style/Component.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace IgiCore.Characters.Shared.Models.Style +{ + /// + /// Represents a game character's style component + /// + public class Component + { + /// + /// Gets or sets the component type. + /// + /// + /// The component type. + /// + [Required] + public ComponentTypes Type { get; set; } + + /// + /// Gets or sets the component index. + /// + /// + /// The component index. + /// + [Required] + public int Index { get; set; } + + /// + /// Gets or sets the component texture. + /// + /// + /// The component texture. + /// + [Required] + public int Texture { get; set; } + } +} diff --git a/Characters.Shared/Models/Apparel/ComponentTypes.cs b/Characters.Shared/Models/Style/ComponentTypes.cs similarity index 80% rename from Characters.Shared/Models/Apparel/ComponentTypes.cs rename to Characters.Shared/Models/Style/ComponentTypes.cs index 0004819..8dd4cea 100644 --- a/Characters.Shared/Models/Apparel/ComponentTypes.cs +++ b/Characters.Shared/Models/Style/ComponentTypes.cs @@ -1,4 +1,4 @@ -namespace IgiCore.Characters.Shared.Models.Apparel +namespace IgiCore.Characters.Shared.Models.Style { public enum ComponentTypes { diff --git a/Characters.Shared/Models/Style/Prop.cs b/Characters.Shared/Models/Style/Prop.cs new file mode 100644 index 0000000..73ac216 --- /dev/null +++ b/Characters.Shared/Models/Style/Prop.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace IgiCore.Characters.Shared.Models.Style +{ + /// + /// Represents a game character's style prop + /// + public class Prop + { + /// + /// Gets or sets the prop type. + /// + /// + /// The prop type. + /// + [Required] + public PropTypes Type { get; set; } + + /// + /// Gets or sets the prop index. + /// + /// + /// The prop index. + /// + [Required] + public int Index { get; set; } + + /// + /// Gets or sets the prop texture. + /// + /// + /// The prop texture. + /// + [Required] + public int Texture { get; set; } + } +} diff --git a/Characters.Shared/Models/Apparel/PropTypes.cs b/Characters.Shared/Models/Style/PropTypes.cs similarity index 78% rename from Characters.Shared/Models/Apparel/PropTypes.cs rename to Characters.Shared/Models/Style/PropTypes.cs index df5ecf0..11c2ecb 100644 --- a/Characters.Shared/Models/Apparel/PropTypes.cs +++ b/Characters.Shared/Models/Style/PropTypes.cs @@ -1,4 +1,4 @@ -namespace IgiCore.Characters.Shared.Models.Apparel +namespace IgiCore.Characters.Shared.Models.Style { public enum PropTypes { diff --git a/Characters.Shared/Models/Trait/Feature.cs b/Characters.Shared/Models/Trait/Feature.cs new file mode 100644 index 0000000..fae4cfb --- /dev/null +++ b/Characters.Shared/Models/Trait/Feature.cs @@ -0,0 +1,50 @@ +using System.ComponentModel.DataAnnotations; + +namespace IgiCore.Characters.Shared.Models.Trait +{ + /// + /// Represents a game character's trait feature + /// + public class Feature + { + /// + /// Gets or sets the index identifier. + /// + /// + /// The index identifier. + /// + [Required] + [Range(0, 255)] + public int Index { get; set; } + + /// + /// Gets or sets the opacity. + /// + /// + /// The opacity. + /// + [Required] + [Range(0f, 1f)] + public float Opacity { get; set; } + + /// + /// Gets or sets the color identifier. + /// + /// + /// The color identifier. + /// + [Required] + [Range(0, 255)] + public int ColorId { get; set; } + + /// + /// Gets or sets the second color identifier. + /// + /// + /// The second color identifier. + /// + [Required] + [Range(0, 255)] + public int SecondColorId { get; set; } + } +}