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; }
+ }
+}