private void GetFaceData() { int ped = Game.PlayerPed.Handle; PedHeadBlendData a = Game.PlayerPed.GetHeadBlendData(); FaceData.FatherFace = a.FirstFaceShape; FaceData.MotherFace = a.SecondFaceShape; FaceData.FatherSkin = a.FirstSkinTone; FaceData.MotherSkin = a.SecondSkinTone; FaceData.ShapePercent = a.ParentFaceShapePercent; FaceData.SkinPercent = a.ParentSkinTonePercent; FaceData.NoseWidth = GetPedFaceFeature(ped, 0); FaceData.NoesPeakHeight = GetPedFaceFeature(ped, 1); FaceData.NosePeakLength = GetPedFaceFeature(ped, 2); FaceData.NoseBoneHeight = GetPedFaceFeature(ped, 3); FaceData.NosePeakLowering = GetPedFaceFeature(ped, 4); FaceData.NoseBoneTwist = GetPedFaceFeature(ped, 5); FaceData.EyebrowsHeight = GetPedFaceFeature(ped, 6); FaceData.EyebrowsDepth = GetPedFaceFeature(ped, 7); FaceData.CheekbonesHeight = GetPedFaceFeature(ped, 8); FaceData.CheekbonesWidth = GetPedFaceFeature(ped, 9); FaceData.CheeksWidth = GetPedFaceFeature(ped, 10); FaceData.EyesOpening = GetPedFaceFeature(ped, 11); FaceData.LipsThickness = GetPedFaceFeature(ped, 12); FaceData.JawBoneWidth = GetPedFaceFeature(ped, 13); FaceData.JawBoneDepthLength = GetPedFaceFeature(ped, 14); FaceData.ChinHeight = GetPedFaceFeature(ped, 15); FaceData.ChinDepthLength = GetPedFaceFeature(ped, 16); FaceData.ChinWidth = GetPedFaceFeature(ped, 17); FaceData.ChinHoleSize = GetPedFaceFeature(ped, 18); FaceData.NeckThickness = GetPedFaceFeature(ped, 19); }
public static CharacterHeritage ConvertHeritage(PedHeadBlendData headBlendData, DateTime created) => new CharacterHeritage { Created = created, Parent1 = headBlendData.FirstFaceShape, Parent2 = headBlendData.SecondFaceShape, Resemblance = headBlendData.ParentFaceShapePercent, SkinTone = headBlendData.ParentSkinTonePercent };
public ISkin GetCurrentSkin() { PedHeadBlendData blData = Game.PlayerPed.GetHeadBlendData(); return(new Skin() { HeadBlendData = new SharedPedHeadBlendData(blData.FirstFaceShape, blData.FirstSkinTone, blData.IsParentInheritance, blData.ParentFaceShapePercent, blData.ParentSkinTonePercent, blData.ParentThirdUnkPercent, blData.SecondFaceShape, blData.SecondSkinTone, blData.ThirdFaceShape, blData.ThirdSkinTone), ComponentsData = new PedComponentsData(GetComponent(ComponentID.Face), GetComponent(ComponentID.Mask), GetComponent(ComponentID.Hair), GetComponent(ComponentID.Torso), GetComponent(ComponentID.Leg), GetComponent(ComponentID.Parachute), GetComponent(ComponentID.Shoes), GetComponent(ComponentID.Accessory), GetComponent(ComponentID.Undershirt), GetComponent(ComponentID.Kevlar), GetComponent(ComponentID.Badge), GetComponent(ComponentID.Torso2)), OverlaysData = new PedOverlaysData(GetOverlay(OverlayID.Blemishes), GetOverlay(OverlayID.FacialHair), GetOverlay(OverlayID.Eyebrows), GetOverlay(OverlayID.Ageing), GetOverlay(OverlayID.Makeup), GetOverlay(OverlayID.Blush), GetOverlay(OverlayID.Complexion), GetOverlay(OverlayID.SunDamage), GetOverlay(OverlayID.Lipstick), GetOverlay(OverlayID.Freckles), GetOverlay(OverlayID.ChestHair), GetOverlay(OverlayID.BodyBlemishes)), }); }
public void LoadDefaultComponentVariation() { ClearPedDecorations(Game.PlayerPed.Handle); ClearPedFacialDecorations(Game.PlayerPed.Handle); SetPedDefaultComponentVariation(Game.PlayerPed.Handle); SetPedHairColor(Game.PlayerPed.Handle, 0, 0); SetPedEyeColor(Game.PlayerPed.Handle, 0); ClearAllPedProps(Game.PlayerPed.Handle); PedHeadBlendData data = Game.PlayerPed.GetHeadBlendData(); SetPedHeadBlendData(Game.PlayerPed.Handle, data.FirstFaceShape, data.SecondFaceShape, data.ThirdFaceShape, data.FirstSkinTone, data.SecondSkinTone, data.ThirdSkinTone, data.ParentFaceShapePercent, data.ParentSkinTonePercent, data.ParentThirdUnkPercent, data.IsParentInheritance); }
/// <summary> /// Constructor. /// </summary> public MainMenu() { PlayersList = Players; #region cleanup unused kvps int tmp_kvp_handle = StartFindKvp(""); bool cleanupVersionChecked = false; List <string> tmp_kvp_names = new List <string>(); while (true) { string k = FindKvp(tmp_kvp_handle); if (string.IsNullOrEmpty(k)) { break; } if (k == "vmenu_cleanup_version") { if (GetResourceKvpInt("vmenu_cleanup_version") >= currentCleanupVersion) { cleanupVersionChecked = true; } } } EndFindKvp(tmp_kvp_handle); if (!cleanupVersionChecked) { SetResourceKvpInt("vmenu_cleanup_version", currentCleanupVersion); foreach (string kvp in tmp_kvp_names) { if (currentCleanupVersion == 1) { if (!kvp.StartsWith("settings_") && !kvp.StartsWith("vmenu") && !kvp.StartsWith("veh_") && !kvp.StartsWith("ped_") && !kvp.StartsWith("mp_ped_")) { DeleteResourceKvp(kvp); Debug.WriteLine($"[vMenu] Old unused KVP cleaned up: {kvp}."); } } } Debug.WriteLine("[vMenu] Cleanup of old unused KVP items completed."); } #endregion if (EnableExperimentalFeatures || DebugMode) { RegisterCommand("testped", new Action <dynamic, List <dynamic>, string>((dynamic source, List <dynamic> args, string rawCommand) => { PedHeadBlendData data = Game.PlayerPed.GetHeadBlendData(); Debug.WriteLine(JsonConvert.SerializeObject(data, Formatting.Indented)); }), false); RegisterCommand("tattoo", new Action <dynamic, List <dynamic>, string>((dynamic source, List <dynamic> args, string rawCommand) => { if (args != null && args[0] != null && args[1] != null) { Debug.WriteLine(args[0].ToString() + " " + args[1].ToString()); TattooCollectionData d = Game.GetTattooCollectionData(int.Parse(args[0].ToString()), int.Parse(args[1].ToString())); Debug.WriteLine("check"); Debug.Write(JsonConvert.SerializeObject(d, Formatting.Indented) + "\n"); } }), false); } RegisterCommand("vmenuclient", new Action <dynamic, List <dynamic>, string>((dynamic source, List <dynamic> args, string rawCommand) => { if (args != null) { if (args.Count > 0) { if (args[0].ToString().ToLower() == "debug") { DebugMode = !DebugMode; Notify.Custom($"Debug mode is now set to: {DebugMode}."); // Set discord rich precense once, allowing it to be overruled by other resources once those load. if (DebugMode) { SetRichPresence($"Debugging vMenu {Version}!"); } else { SetRichPresence($"Enjoying FiveM!"); } } else if (args[0].ToString().ToLower() == "gc") { GC.Collect(); Debug.Write("Cleared memory.\n"); } else if (args[0].ToString().ToLower() == "dump") { Notify.Info("A full config dump will be made to the console. Check the log file. This can cause lag!"); Debug.WriteLine("\n\n\n########################### vMenu ###########################"); Debug.WriteLine($"Running vMenu Version: {Version}, Experimental features: {EnableExperimentalFeatures}, Debug mode: {DebugMode}."); Debug.WriteLine("\nDumping a list of all KVPs:"); int handle = StartFindKvp(""); List <string> names = new List <string>(); while (true) { string k = FindKvp(handle); if (string.IsNullOrEmpty(k)) { break; } //if (!k.StartsWith("settings_") && !k.StartsWith("vmenu") && !k.StartsWith("veh_") && !k.StartsWith("ped_") && !k.StartsWith("mp_ped_")) //{ // DeleteResourceKvp(k); //} names.Add(k); } EndFindKvp(handle); Dictionary <string, dynamic> kvps = new Dictionary <string, dynamic>(); foreach (var kvp in names) { int type = 0; // 0 = string, 1 = float, 2 = int. if (kvp.StartsWith("settings_")) { if (kvp == "settings_voiceChatProximity") // float { type = 1; } else if (kvp == "settings_clothingAnimationType") // int { type = 2; } } else if (kvp == "vmenu_cleanup_version") // int { type = 2; } switch (type) { case 0: var s = GetResourceKvpString(kvp); if (s.StartsWith("{") || s.StartsWith("[")) { kvps.Add(kvp, JsonConvert.DeserializeObject(s)); } else { kvps.Add(kvp, GetResourceKvpString(kvp)); } break; case 1: kvps.Add(kvp, GetResourceKvpFloat(kvp)); break; case 2: kvps.Add(kvp, GetResourceKvpInt(kvp)); break; } } Debug.WriteLine(@JsonConvert.SerializeObject(kvps, Formatting.None) + "\n"); Debug.WriteLine("\n\nDumping a list of allowed permissions:"); Debug.WriteLine(@JsonConvert.SerializeObject(Permissions, Formatting.None)); Debug.WriteLine("\n\nDumping vmenu server configuration settings:"); var settings = new Dictionary <string, string>(); foreach (var a in Enum.GetValues(typeof(Setting))) { settings.Add(a.ToString(), GetSettingsString((Setting)a)); } Debug.WriteLine(@JsonConvert.SerializeObject(settings, Formatting.None)); Debug.WriteLine("\nEnd of vMenu dump!"); Debug.WriteLine("\n########################### vMenu ###########################"); } } else { Notify.Custom($"vMenu is currently running version: {Version}."); } } }), false); // Set discord rich precense once, allowing it to be overruled by other resources once those load. if (DebugMode) { SetRichPresence($"Debugging vMenu {Version}!"); } if (GetCurrentResourceName() != "vMenu") { Exception InvalidNameException = new Exception("\r\n\r\n[vMenu] INSTALLATION ERROR!\r\nThe name of the resource is not valid. Please change the folder name from '" + GetCurrentResourceName() + "' to 'vMenu' (case sensitive) instead!\r\n\r\n\r\n"); try { throw InvalidNameException; } catch (Exception e) { Log(e.Message); } TriggerEvent("chatMessage", "^3IMPORTANT: vMenu IS NOT SETUP CORRECTLY. PLEASE CHECK THE SERVER LOG FOR MORE INFO."); MenuController.MainMenu = null; MenuController.DontOpenAnyMenu = true; MenuController.DisableMenuButtons = true; } else { Tick += OnTick; } try { SetClockDate(DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year); } catch (InvalidTimeZoneException timeEx) { Debug.WriteLine($"[vMenu] [Error] Could not set the in-game day, month and year because of an invalid timezone(?)."); Debug.WriteLine($"[vMenu] [Error] InvalidTimeZoneException: {timeEx.Message}"); Debug.WriteLine($"[vMenu] [Error] vMenu will continue to work normally."); } }