using System.Linq; using GTANetworkAPI; using Newtonsoft.Json.Linq; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; namespace ReallifeGamemode.Server.Managers { public class CharacterCreator : Script { [RemoteEvent("creator_GenderChange")] public void changeGender(Player player, int gender) { if (gender == 0) player.SetSkin(PedHash.FreemodeMale01); else player.SetSkin(PedHash.FreemodeFemale01); } [RemoteEvent("creatorSave")] public void CreatorSave(Player player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData) { var jParentData = JObject.Parse(parentData); var jFeatureData = JArray.Parse(featureData); var jAppearanceData = JArray.Parse(appearanceData); var jHairAndColorData = JArray.Parse(hairAndColorData); byte father = jParentData.Value("Father"); byte mother = jParentData.Value("Mother"); float similarity = jParentData.Value("Similarity"); float skinSimilarity = jParentData.Value("SkinSimilarity"); float noseWidth = jFeatureData.Value(0); float noseBottomHeight = jFeatureData.Value(1); float noseTipLength = jFeatureData.Value(2); float noseBridgeDepth = jFeatureData.Value(3); float noseTipHeight = jFeatureData.Value(4); float noseBroken = jFeatureData.Value(5); float browHeight = jFeatureData.Value(6); float browDepth = jFeatureData.Value(7); float cheekboneHeight = jFeatureData.Value(8); float cheekboneWidth = jFeatureData.Value(9); float cheekDepth = jFeatureData.Value(10); float eyeSize = jFeatureData.Value(11); float lipThickness = jFeatureData.Value(12); float jawWidth = jFeatureData.Value(13); float jawShape = jFeatureData.Value(14); float chinHeight = jFeatureData.Value(15); float chinDepth = jFeatureData.Value(16); float chinWidth = jFeatureData.Value(17); float chinIndent = jFeatureData.Value(18); float neckWidth = jFeatureData.Value(19); byte blemishes = jAppearanceData[0].Value("Value"); float blemishesOpacity = jAppearanceData[0].Value("Opacity"); byte facialHair = jAppearanceData[1].Value("Value"); float facialHairOpacity = jAppearanceData[1].Value("Opacity"); byte eyebrows = jAppearanceData[2].Value("Value"); float eyebrowsOpacity = jAppearanceData[2].Value("Opacity"); byte ageing = jAppearanceData[3].Value("Value"); float ageingOpacity = jAppearanceData[3].Value("Opacity"); byte makeup = jAppearanceData[4].Value("Value"); float makeupOpacity = jAppearanceData[4].Value("Opacity"); byte blush = jAppearanceData[5].Value("Value"); float blushOpacity = jAppearanceData[5].Value("Opacity"); byte complexion = jAppearanceData[6].Value("Value"); float complexionOpacity = jAppearanceData[6].Value("Opacity"); byte sunDamage = jAppearanceData[7].Value("Value"); float sunDamageOpacity = jAppearanceData[7].Value("Opacity"); byte lipstick = jAppearanceData[8].Value("Value"); float lipstickOpacity = jAppearanceData[8].Value("Opacity"); byte freckles = jAppearanceData[9].Value("Value"); float frecklesOpacity = jAppearanceData[9].Value("Opacity"); byte chestHair = jAppearanceData[10].Value("Value"); float chestHairOpacity = jAppearanceData[10].Value("Opacity"); byte hair = jHairAndColorData.Value(0); byte hairColor = jHairAndColorData.Value(1); byte hairHighlightColor = jHairAndColorData.Value(2); byte eyebrowColor = jHairAndColorData.Value(3); byte beardColor = jHairAndColorData.Value(4); byte eyeColor = jHairAndColorData.Value(5); byte blushColor = jHairAndColorData.Value(6); byte lipstickColor = jHairAndColorData.Value(7); byte chestHairColor = jHairAndColorData.Value(8); using (var saveCharacter = new DatabaseContext()) { var character = new Database.Entities.Character { UserId = player.GetUser().Id, Gender = gender, Father = father, Mother = mother, Similarity = similarity, SkinSimilarity = skinSimilarity, NoseWidth = noseWidth, NoseBottomHeight = noseBottomHeight, NoseTipLength = noseTipLength, NoseBridgeDepth = noseBridgeDepth, NoseTipHeight = noseTipHeight, NoseBroken = noseBroken, BrowHeight = browHeight, BrowDepth = browDepth, CheekboneHeight = cheekboneHeight, CheekboneWidth = cheekboneWidth, CheekDepth = cheekDepth, EyeSize = eyeSize, LipThickness = lipThickness, JawWidth = jawWidth, JawShape = jawShape, ChinHeight = chinHeight, ChinDepth = chinDepth, ChinWidth = chinWidth, ChinIndent = chinIndent, NeckWidth = neckWidth, Blemishes = blemishes, BlemishesOpacity = blemishesOpacity, FacialHair = facialHair, FacialHairOpacity = facialHairOpacity, Eyebrows = eyebrows, EyebrowsOpacity = eyebrowsOpacity, Ageing = ageing, AgeingOpacity = ageingOpacity, Makeup = makeup, MakeupOpacity = makeupOpacity, Blush = blush, BlushOpacity = blushOpacity, Complexion = complexion, ComplexionOpacity = complexionOpacity, SunDamage = sunDamage, SunDamageOpacity = sunDamageOpacity, Lipstick = lipstick, LipstickOpacity = lipstickOpacity, Freckles = freckles, FrecklesOpacity = frecklesOpacity, ChestHair = chestHair, ChestHairOpacity = chestHairOpacity, Hair = hair, HairColor = hairColor, HairHighlightColor = hairHighlightColor, EyebrowColor = eyebrowColor, BeardColor = beardColor, EyeColor = eyeColor, BlushColor = blushColor, LipstickColor = lipstickColor, ChestHairColor = chestHairColor }; saveCharacter.Characters.Add(character); saveCharacter.SaveChanges(); var userId = player.GetUser().Id; var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId); user.CharacterId = character.Id; saveCharacter.SaveChanges(); } //HeadOverlay makeupHo = new HeadOverlay() //{ // Index = 0, // Opacity = 0.0f, // Color = 0, // SecondaryColor = 0 //}; //HeadOverlay blushHo = new HeadOverlay() //{ // Index = 0, // Opacity = 0.0f, // Color = 0, // SecondaryColor = 0 //}; //player.SetHeadOverlay(4, makeupHo); //player.SetHeadOverlay(5, blushHo); NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING); player.TriggerEvent("draw", player.Name, player.Handle.Value); player.Dimension = 0; } /// /// Wendet den Character eines Spielers auf diesen an /// /// Der Player, dessen Aussehen man setzen will public static void ApplyCharacter(Player player) { var user = player.GetUser(); using (var loadCharacter = new DatabaseContext()) { var character = loadCharacter.Characters.SingleOrDefault(c => c.Id == user.CharacterId); if (character == null) return; //Männlich / Weiblich if (character.Gender == false) { player.SetSkin(PedHash.FreemodeMale01); } else { player.SetSkin(PedHash.FreemodeFemale01); } //Gesichtszüge float[] faceFeatures = new float[] { character.NoseWidth, character.NoseBottomHeight, character.NoseTipLength, character.NoseBridgeDepth, character.NoseTipHeight, character.NoseBroken, character.BrowHeight, character.BrowDepth, character.CheekboneHeight, character.CheekboneWidth, character.CheekboneWidth, character.CheekDepth, character.EyeSize, character.LipThickness, character.JawWidth, character.JawShape, character.ChinHeight, character.ChinDepth, character.ChinWidth, character.ChinIndent, character.NeckWidth }; for (var i = 0; i < faceFeatures.Length; i++) { player.SetFaceFeature(i, faceFeatures[i]); } //Gesichtsmerkmale HeadOverlay blemishes = new HeadOverlay() { Index = character.Blemishes, Opacity = character.BlemishesOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay facialHair = new HeadOverlay() { Index = character.FacialHair, Opacity = character.FacialHairOpacity, Color = character.BeardColor, SecondaryColor = 255 }; HeadOverlay eyebrows = new HeadOverlay() { Index = character.Eyebrows, Opacity = character.EyebrowsOpacity, Color = character.EyebrowColor, SecondaryColor = 255 }; HeadOverlay ageing = new HeadOverlay() { Index = character.Ageing, Opacity = character.AgeingOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay makeup = new HeadOverlay() { Index = character.Makeup, Opacity = character.MakeupOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay blush = new HeadOverlay() { Index = character.Blush, Opacity = character.BlushOpacity, Color = character.BlushColor, SecondaryColor = 255 }; HeadOverlay complexion = new HeadOverlay() { Index = character.Complexion, Opacity = character.ComplexionOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay sunDamage = new HeadOverlay() { Index = character.SunDamage, Opacity = character.SunDamageOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay lipstick = new HeadOverlay() { Index = character.Lipstick, Opacity = character.LipstickOpacity, Color = character.LipstickColor, SecondaryColor = 255 }; HeadOverlay freckles = new HeadOverlay() { Index = character.Freckles, Opacity = character.FrecklesOpacity, Color = 255, SecondaryColor = 255 }; HeadOverlay chestHair = new HeadOverlay() { Index = character.ChestHair, Opacity = character.ChestHairOpacity, Color = character.ChestHairColor, SecondaryColor = 255 }; player.SetHeadOverlay(0, blemishes); player.SetHeadOverlay(1, facialHair); player.SetHeadOverlay(2, eyebrows); player.SetHeadOverlay(3, ageing); player.SetHeadOverlay(4, makeup); player.SetHeadOverlay(5, blush); player.SetHeadOverlay(6, complexion); player.SetHeadOverlay(7, sunDamage); player.SetHeadOverlay(8, lipstick); player.SetHeadOverlay(9, freckles); player.SetHeadOverlay(10, chestHair); player.SetHeadOverlay(11, blemishes); player.SetHeadOverlay(12, blemishes); //Gesicht (Vererbung durch Mutter / Vater) HeadBlend headBlend = new HeadBlend() { ShapeFirst = character.Mother, ShapeSecond = character.Father, ShapeThird = 0, SkinFirst = character.Mother, SkinSecond = character.Father, SkinThird = 0, ShapeMix = character.Similarity, SkinMix = character.SkinSimilarity, ThirdMix = 0.0f }; NAPI.Player.SetPlayerHeadBlend(player, headBlend); //Haare und Haarfarbe player.SetClothes(2, character.Hair, 0); NAPI.Player.SetPlayerHairColor(player, character.HairColor, character.HairHighlightColor); //Augenfarbe NAPI.Player.SetPlayerEyeColor(player, character.EyeColor); } } } }