diff --git a/VORP-Character/VORP-Character.sln b/VORP-Character/VORP-Character.sln index 76a9867..699c14e 100644 --- a/VORP-Character/VORP-Character.sln +++ b/VORP-Character/VORP-Character.sln @@ -3,11 +3,16 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vorpcharacter_cl", "vorpcharacter_cl\vorpcharacter_cl.csproj", "{51083C52-7FE7-422E-AED9-023D0903C6E6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VORP.Character.Client", "vorpcharacter_cl\VORP.Character.Client.csproj", "{51083C52-7FE7-422E-AED9-023D0903C6E6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vorpcharacter_sv", "vorpcharacter_sv\vorpcharacter_sv.csproj", "{EAF3ACC4-8378-4923-ADD0-5959DC21DA03}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VORP.Character.Server", "vorpcharacter_sv\VORP.Character.Server.csproj", "{EAF3ACC4-8378-4923-ADD0-5959DC21DA03}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "VORP.Shared", "VORP.Shared\VORP.Shared.shproj", "{5FDA9865-AB7C-4D8E-8E29-D445FD6D6303}" EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + VORP.Shared\VORP.Shared.projitems*{5fda9865-ab7c-4d8e-8e29-d445fd6d6303}*SharedItemsImports = 13 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Development|Any CPU = Development|Any CPU diff --git a/VORP-Character/VORP.Shared/Models/Position.cs b/VORP-Character/VORP.Shared/Models/Position.cs new file mode 100644 index 0000000..678a061 --- /dev/null +++ b/VORP-Character/VORP.Shared/Models/Position.cs @@ -0,0 +1,102 @@ +using System.Runtime.Serialization; + +namespace Vorp.Shared.Models +{ + [DataContract] + public class Position + { + [DataMember(Name = "x")] + public float X { get; set; } + + [DataMember(Name = "y")] + public float Y { get; set; } + + [DataMember(Name = "z")] + public float Z { get; set; } + + [DataMember(Name = "heading")] + public float H { get; set; } + + public Position() + { + } + + public Position(float x, float y, float z, float heading) + { + X = x; + Y = y; + Z = z; + H = heading; + } + + public Position(float x, float y, float z) + { + X = x; + Y = y; + Z = z; + } + + public Position Subtract(Position position) + { + X = X - position.X; + Y = Y - position.Y; + Z = Z - position.Z; + H = H - position.H; + + return this; + } + + public Position Add(Position position) + { + X = X + position.X; + Y = Y + position.Y; + Z = Z + position.Z; + H = H + position.H; + + return this; + } + + public Position Clone() + { + return new Position(X, Y, Z, H); + } + + public Vector3 ToVector3() + { + return new Vector3(X, Y, Z); + } + + public override string ToString() + { + return JsonConvert.SerializeObject(this); + } + } + + public static class VectorExtensions + { + public static Position ToPosition(this Vector3 vector3, float heading = 0f) + { + return new Position(vector3.X, vector3.Y, vector3.Z, heading); + } + } + + public class RotatablePosition + { + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + public float Yaw { get; set; } + public float Pitch { get; set; } + public float Roll { get; set; } + + public RotatablePosition(float x, float y, float z, float yaw, float pitch, float roll) + { + X = x; + Y = y; + Z = z; + Yaw = yaw; + Pitch = pitch; + Roll = roll; + } + } +} diff --git a/VORP-Character/VORP.Shared/VORP.Shared.projitems b/VORP-Character/VORP.Shared/VORP.Shared.projitems new file mode 100644 index 0000000..a30e67b --- /dev/null +++ b/VORP-Character/VORP.Shared/VORP.Shared.projitems @@ -0,0 +1,14 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 5fda9865-ab7c-4d8e-8e29-d445fd6d6303 + + + VORP.Shared + + + + + \ No newline at end of file diff --git a/VORP-Character/VORP.Shared/VORP.Shared.shproj b/VORP-Character/VORP.Shared/VORP.Shared.shproj new file mode 100644 index 0000000..350bcc0 --- /dev/null +++ b/VORP-Character/VORP.Shared/VORP.Shared.shproj @@ -0,0 +1,13 @@ + + + + 5fda9865-ab7c-4d8e-8e29-d445fd6d6303 + 14.0 + + + + + + + + diff --git a/VORP-Character/build/vorp_character/vorpcharacter_cl.net.dll b/VORP-Character/build/vorp_character/VORP.Character.Client.net.dll similarity index 74% rename from VORP-Character/build/vorp_character/vorpcharacter_cl.net.dll rename to VORP-Character/build/vorp_character/VORP.Character.Client.net.dll index 8039c7f..eedfbdd 100644 Binary files a/VORP-Character/build/vorp_character/vorpcharacter_cl.net.dll and b/VORP-Character/build/vorp_character/VORP.Character.Client.net.dll differ diff --git a/VORP-Character/build/vorp_character/VORP.Character.Server.net.dll b/VORP-Character/build/vorp_character/VORP.Character.Server.net.dll new file mode 100644 index 0000000..46a7f21 Binary files /dev/null and b/VORP-Character/build/vorp_character/VORP.Character.Server.net.dll differ diff --git a/VORP-Character/build/vorp_character/fxmanifest.lua b/VORP-Character/build/vorp_character/fxmanifest.lua index 3201d5b..7f0b14b 100644 --- a/VORP-Character/build/vorp_character/fxmanifest.lua +++ b/VORP-Character/build/vorp_character/fxmanifest.lua @@ -3,11 +3,11 @@ fx_version 'adamant' rdr3_warning 'I acknowledge that this is a prerelease build of RedM, and I am aware my resources *will* become incompatible once RedM ships.' client_scripts { - 'vorpcharacter_cl.net.dll' + '*.Client.net.dll' } server_scripts { - 'vorpcharacter_sv.net.dll' + '*.Server.net.dll' } files { @@ -16,4 +16,6 @@ files { 'Newtonsoft.Json.dll', } -debug_enabled 'false' \ No newline at end of file +debug_enabled 'false' +vorp_core_csharp_new 'true' +vorp_database_resource 'ghmattimysql' \ No newline at end of file diff --git a/VORP-Character/build/vorp_character/vorpcharacter_sv.net.dll b/VORP-Character/build/vorp_character/vorpcharacter_sv.net.dll deleted file mode 100644 index 5ff1fa7..0000000 Binary files a/VORP-Character/build/vorp_character/vorpcharacter_sv.net.dll and /dev/null differ diff --git a/VORP-Character/vorpcharacter_cl/Cache.cs b/VORP-Character/vorpcharacter_cl/Cache.cs index 76cf188..c840d7d 100644 --- a/VORP-Character/vorpcharacter_cl/Cache.cs +++ b/VORP-Character/vorpcharacter_cl/Cache.cs @@ -1,6 +1,6 @@ using CitizenFX.Core.Native; -namespace VorpCharacter +namespace VORP.Character.Client { public class Cache { diff --git a/VORP-Character/vorpcharacter_cl/Diagnostics/Logger.cs b/VORP-Character/vorpcharacter_cl/Diagnostics/Logger.cs index cfc30c7..30c489b 100644 --- a/VORP-Character/vorpcharacter_cl/Diagnostics/Logger.cs +++ b/VORP-Character/vorpcharacter_cl/Diagnostics/Logger.cs @@ -1,7 +1,7 @@ using CitizenFX.Core.Native; using System; -namespace VorpCharacter.Diagnostics +namespace VORP.Character.Client.Diagnostics { class Logger { diff --git a/VORP-Character/vorpcharacter_cl/Enums/eAttributeCore.cs b/VORP-Character/vorpcharacter_cl/Enums/eAttributeCore.cs index 76679aa..34e5c1d 100644 --- a/VORP-Character/vorpcharacter_cl/Enums/eAttributeCore.cs +++ b/VORP-Character/vorpcharacter_cl/Enums/eAttributeCore.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Enums +namespace VORP.Character.Client.Enums { public enum eAttributeCore : int { diff --git a/VORP-Character/vorpcharacter_cl/Enums/eControl.cs b/VORP-Character/vorpcharacter_cl/Enums/eControl.cs index 93dec99..d8b96fc 100644 --- a/VORP-Character/vorpcharacter_cl/Enums/eControl.cs +++ b/VORP-Character/vorpcharacter_cl/Enums/eControl.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Enums +namespace VORP.Character.Client.Enums { public enum eControl : uint { diff --git a/VORP-Character/vorpcharacter_cl/Enums/eModel.cs b/VORP-Character/vorpcharacter_cl/Enums/eModel.cs index 7a73255..5532a03 100644 --- a/VORP-Character/vorpcharacter_cl/Enums/eModel.cs +++ b/VORP-Character/vorpcharacter_cl/Enums/eModel.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Enums +namespace VORP.Character.Client.Enums { public enum eModel : uint { diff --git a/VORP-Character/vorpcharacter_cl/Enums/ePedComponent.cs b/VORP-Character/vorpcharacter_cl/Enums/ePedComponent.cs index fe8a06e..3985397 100644 --- a/VORP-Character/vorpcharacter_cl/Enums/ePedComponent.cs +++ b/VORP-Character/vorpcharacter_cl/Enums/ePedComponent.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Enums +namespace VORP.Character.Client.Enums { public enum ePedComponent : uint { diff --git a/VORP-Character/vorpcharacter_cl/Enums/ePedFaceFeature.cs b/VORP-Character/vorpcharacter_cl/Enums/ePedFaceFeature.cs index 454fc95..194bd11 100644 --- a/VORP-Character/vorpcharacter_cl/Enums/ePedFaceFeature.cs +++ b/VORP-Character/vorpcharacter_cl/Enums/ePedFaceFeature.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Enums +namespace VORP.Character.Client.Enums { public enum ePedFaceFeature : uint { diff --git a/VORP-Character/vorpcharacter_cl/Extensions/Common.cs b/VORP-Character/vorpcharacter_cl/Extensions/Common.cs index 5d9971a..64e0575 100644 --- a/VORP-Character/vorpcharacter_cl/Extensions/Common.cs +++ b/VORP-Character/vorpcharacter_cl/Extensions/Common.cs @@ -1,7 +1,7 @@ using CitizenFX.Core; -using VorpCharacter.Model; +using VORP.Character.Client.Model; -namespace VorpCharacter.Extensions +namespace VORP.Character.Client.Extensions { static class Common { diff --git a/VORP-Character/vorpcharacter_cl/Menus/ClothesMenu.cs b/VORP-Character/vorpcharacter_cl/Menus/ClothesMenu.cs index 7ee259d..041854a 100644 --- a/VORP-Character/vorpcharacter_cl/Menus/ClothesMenu.cs +++ b/VORP-Character/vorpcharacter_cl/Menus/ClothesMenu.cs @@ -1,11 +1,11 @@ using CitizenFX.Core; using MenuAPI; using System.Collections.Generic; -using VorpCharacter.Extensions; -using VorpCharacter.Script; -using VorpCharacter.Utils; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Script; +using VORP.Character.Client.Utils; -namespace VorpCharacter.Menus +namespace VORP.Character.Client.Menus { class ClothesMenu { diff --git a/VORP-Character/vorpcharacter_cl/Menus/FaceMenu.cs b/VORP-Character/vorpcharacter_cl/Menus/FaceMenu.cs index 65394c9..d43d222 100644 --- a/VORP-Character/vorpcharacter_cl/Menus/FaceMenu.cs +++ b/VORP-Character/vorpcharacter_cl/Menus/FaceMenu.cs @@ -1,10 +1,10 @@ using CitizenFX.Core; using MenuAPI; using System.Collections.Generic; -using VorpCharacter.Extensions; -using VorpCharacter.Script; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Script; -namespace VorpCharacter.Menus +namespace VORP.Character.Client.Menus { class FaceMenu { diff --git a/VORP-Character/vorpcharacter_cl/Menus/MainMenu.cs b/VORP-Character/vorpcharacter_cl/Menus/MainMenu.cs index 8382bb5..a8a5e26 100644 --- a/VORP-Character/vorpcharacter_cl/Menus/MainMenu.cs +++ b/VORP-Character/vorpcharacter_cl/Menus/MainMenu.cs @@ -2,11 +2,11 @@ using MenuAPI; using System.Collections.Generic; using System.Linq; -using VorpCharacter.Extensions; -using VorpCharacter.Script; -using VorpCharacter.Utils; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Script; +using VORP.Character.Client.Utils; -namespace VorpCharacter.Menus +namespace VORP.Character.Client.Menus { class MainMenu { diff --git a/VORP-Character/vorpcharacter_cl/Menus/SkinMenu.cs b/VORP-Character/vorpcharacter_cl/Menus/SkinMenu.cs index 794438d..b5f987c 100644 --- a/VORP-Character/vorpcharacter_cl/Menus/SkinMenu.cs +++ b/VORP-Character/vorpcharacter_cl/Menus/SkinMenu.cs @@ -3,11 +3,11 @@ using MenuAPI; using System.Collections.Generic; using System.Linq; -using VorpCharacter.Extensions; -using VorpCharacter.Script; -using VorpCharacter.Utils; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Script; +using VORP.Character.Client.Utils; -namespace VorpCharacter.Menus +namespace VORP.Character.Client.Menus { /* * Note: diff --git a/VORP-Character/vorpcharacter_cl/Model/Config.cs b/VORP-Character/vorpcharacter_cl/Model/Config.cs index 1e3687d..3b12936 100644 --- a/VORP-Character/vorpcharacter_cl/Model/Config.cs +++ b/VORP-Character/vorpcharacter_cl/Model/Config.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Runtime.Serialization; -namespace VorpCharacter.Model +namespace VORP.Character.Client.Model { [DataContract] public class Male diff --git a/VORP-Character/vorpcharacter_cl/Model/Position.cs b/VORP-Character/vorpcharacter_cl/Model/Position.cs index 4160df8..00e409c 100644 --- a/VORP-Character/vorpcharacter_cl/Model/Position.cs +++ b/VORP-Character/vorpcharacter_cl/Model/Position.cs @@ -1,4 +1,4 @@ -namespace VorpCharacter.Model +namespace VORP.Character.Client.Model { public class Position { diff --git a/VORP-Character/vorpcharacter_cl/Model/VorpPlayer.cs b/VORP-Character/vorpcharacter_cl/Model/VorpPlayer.cs index 33a0a5e..c994963 100644 --- a/VORP-Character/vorpcharacter_cl/Model/VorpPlayer.cs +++ b/VORP-Character/vorpcharacter_cl/Model/VorpPlayer.cs @@ -1,7 +1,7 @@ using CitizenFX.Core; using static CitizenFX.Core.Native.API; -namespace VorpCharacter.Model +namespace VORP.Character.Client.Model { public static class VorpPlayer { diff --git a/VORP-Character/vorpcharacter_cl/PluginManager.cs b/VORP-Character/vorpcharacter_cl/PluginManager.cs index c2cfd1a..1d05e15 100644 --- a/VORP-Character/vorpcharacter_cl/PluginManager.cs +++ b/VORP-Character/vorpcharacter_cl/PluginManager.cs @@ -3,11 +3,11 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Model; +using VORP.Character.Client.Diagnostics; +using VORP.Character.Client.Model; using static CitizenFX.Core.Native.API; -namespace VorpCharacter +namespace VORP.Character.Client { public class PluginManager : BaseScript { diff --git a/VORP-Character/vorpcharacter_cl/Script/CreateCharacter.cs b/VORP-Character/vorpcharacter_cl/Script/CreateCharacter.cs index 974eda3..6e23e15 100644 --- a/VORP-Character/vorpcharacter_cl/Script/CreateCharacter.cs +++ b/VORP-Character/vorpcharacter_cl/Script/CreateCharacter.cs @@ -6,13 +6,13 @@ using System.Globalization; using System.Linq; using System.Threading.Tasks; -using VorpCharacter.Enums; -using VorpCharacter.Extensions; -using VorpCharacter.Model; -using VorpCharacter.Utils; +using VORP.Character.Client.Enums; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Model; +using VORP.Character.Client.Utils; using static CitizenFX.Core.Native.API; -namespace VorpCharacter.Script +namespace VORP.Character.Client.Script { public class CreateCharacter : BaseScript { diff --git a/VORP-Character/vorpcharacter_cl/Script/LoadPlayer.cs b/VORP-Character/vorpcharacter_cl/Script/LoadPlayer.cs index ecf460d..dde7fe8 100644 --- a/VORP-Character/vorpcharacter_cl/Script/LoadPlayer.cs +++ b/VORP-Character/vorpcharacter_cl/Script/LoadPlayer.cs @@ -7,18 +7,18 @@ using System.Dynamic; using System.Linq; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Enums; -using VorpCharacter.Utils; +using VORP.Character.Client.Diagnostics; +using VORP.Character.Client.Enums; +using VORP.Character.Client.Utils; using static CitizenFX.Core.Native.API; -namespace VorpCharacter.Script +namespace VORP.Character.Client.Script { public class LoadPlayer : BaseScript { public static LoadPlayer Instance { get; private set; } public static Dictionary cache_skin = new Dictionary(); - public static Dictionary cache_cloths = new Dictionary(); + public static Dictionary cache_cloths = new Dictionary(); public static bool IsCurrentlyRunningSetup = false; public LoadPlayer() @@ -86,7 +86,7 @@ private async void ReloadCharacterSkin(string part = "") if (!string.IsNullOrEmpty(clothes)) { - cache_cloths = JsonConvert.DeserializeObject>(clothes); + cache_cloths = JsonConvert.DeserializeObject>(clothes); #if DEVELOPMENT Logger.Debug($"Loaded clothes from resource store"); #endif @@ -117,7 +117,7 @@ private async void reloadPlayerComps(ExpandoObject sskin, ExpandoObject scloth) skin[s.Key] = s.Value.ToString(); } - Dictionary cloths = new Dictionary(); + Dictionary cloths = new Dictionary(); foreach (var s in scloth) { @@ -149,7 +149,7 @@ public async Task LoadPlayerSkin(string s_skin, string s_cloths) skin[s.Key] = s.Value.ToString(); } - Dictionary cloths = new Dictionary(); + Dictionary cloths = new Dictionary(); foreach (var s in jCloth) { @@ -197,7 +197,7 @@ public static async void ApplyDefaultSkinSettings(int pedHandle) Utilities.UpdatePedVariation(pedHandle); } - public async Task SetupCharacter(bool isPlayer, Dictionary skin, Dictionary clothes) + public async Task SetupCharacter(bool isPlayer, Dictionary skin, Dictionary clothes) { try { @@ -491,7 +491,7 @@ private static void SetPedFaceTextures(int pedHandle, Dictionary Utilities.UpdatePedVariation(pedHandle, true); } - public static void SetPedComponents(Dictionary clothes, int pedHandle) + public static void SetPedComponents(Dictionary clothes, int pedHandle) { SetPlayerComponent(pedHandle, ePedComponent.Hats, "Hat", clothes); SetPlayerComponent(pedHandle, ePedComponent.EyeWear, "EyeWear", clothes); @@ -553,7 +553,7 @@ public static uint ConvertValue(string s) } // what does this do really? - public static void SetPlayerComponent(int pedHandle, ePedComponent pedComponent, string component, Dictionary clothes) + public static void SetPlayerComponent(int pedHandle, ePedComponent pedComponent, string component, Dictionary clothes) { if (!clothes.ContainsKey(component)) return; @@ -566,7 +566,7 @@ public static void SetPlayerComponent(int pedHandle, ePedComponent pedComponent, Utilities.SetComponent(pedHandle, pedComponent, clothes[component]); } - private async Task IsLoaded(Dictionary skin, Dictionary clothes) + private async Task IsLoaded(Dictionary skin, Dictionary clothes) { await Delay(1500); bool loaded = Utilities.IsPedReadyToRender(Cache.PlayerPedId); diff --git a/VORP-Character/vorpcharacter_cl/Script/SelectCharacter.cs b/VORP-Character/vorpcharacter_cl/Script/SelectCharacter.cs index ae4b419..8ba330b 100644 --- a/VORP-Character/vorpcharacter_cl/Script/SelectCharacter.cs +++ b/VORP-Character/vorpcharacter_cl/Script/SelectCharacter.cs @@ -5,12 +5,13 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Enums; -using VorpCharacter.Extensions; -using VorpCharacter.Utils; +using VORP.Character.Client.Diagnostics; +using VORP.Character.Client.Enums; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Model; +using VORP.Character.Client.Utils; -namespace VorpCharacter.Script +namespace VORP.Character.Client.Script { public class SelectCharacter : BaseScript { @@ -54,14 +55,14 @@ private async void SpawnCharacter(dynamic myChar) string json_skin = myChar[0].skin; string json_components = myChar[0].components; string json_coords = myChar[0].coords; - JObject jPos = JObject.Parse(json_coords); + Position position = JsonConvert.DeserializeObject(json_coords); // TriggerEvent("vorpcharacter:loadPlayerSkin", json_skin, json_components); // WHY?! just call the class method await LoadPlayer.Instance.LoadPlayerSkin(json_skin, json_components); API.DoScreenFadeOut(1000); await Delay(800); - Vector3 playerCoords = new Vector3(jPos["x"].ToObject(), jPos["y"].ToObject(), jPos["z"].ToObject()); + Vector3 playerCoords = position.AsVector(); bool isDead = false; try { @@ -71,10 +72,17 @@ private async void SpawnCharacter(dynamic myChar) { Debug.WriteLine(e.Message); } - float heading = jPos["heading"].ToObject(); + float heading = position.H; TriggerEvent("vorp:initCharacter", playerCoords, heading, isDead); - await Delay(1000); + await Delay(2000); + int playerPedId = API.PlayerPedId(); + API.SetEntityCoords(playerPedId, position.X, position.Y, position.Z, false, false, false, true); + API.SetEntityHeading(playerPedId, position.H); API.DoScreenFadeIn(1000); + while(API.IsScreenFadingIn()) + { + await BaseScript.Delay(100); + } } catch (Exception ex) { @@ -215,7 +223,7 @@ public async Task CharSelect() string json_skin = myChars[selectedChar].skin; // make this a class string json_components = myChars[selectedChar].components; string json_coords = myChars[selectedChar].coords; - JObject jPos = JObject.Parse(json_coords); + Position pos = JsonConvert.DeserializeObject(json_coords); await LoadPlayer.Instance.LoadPlayerSkin(json_skin, json_components); @@ -227,7 +235,7 @@ public async Task CharSelect() API.SetCamActive(mainCamera, false); API.DestroyCam(mainCamera, true); API.RenderScriptCams(true, true, 1000, true, true, 0); - Vector3 playerCoords = new Vector3(jPos["x"].ToObject(), jPos["y"].ToObject(), jPos["z"].ToObject()); + Vector3 playerCoords = pos.AsVector(); bool isDead = false; try { @@ -237,9 +245,13 @@ public async Task CharSelect() { Debug.WriteLine(e.Message); } - float heading = jPos["heading"].ToObject(); + float heading = pos.H; TriggerEvent("vorp:initCharacter", playerCoords, heading, isDead); + int playerPedId = API.PlayerPedId(); + API.SetEntityCoords(playerPedId, pos.X, pos.Y, pos.Z, false, false, false, true); + API.SetEntityHeading(playerPedId, pos.H); + await Delay(1000); API.DoScreenFadeIn(1000); @@ -390,7 +402,7 @@ public async Task LoadNpcComps(string skin_json, string cloths_json) skin[s.Key] = s.Value.ToString(); } - Dictionary clothes = new Dictionary(); + Dictionary clothes = new Dictionary(); foreach (var s in jcomp) { diff --git a/VORP-Character/vorpcharacter_cl/Utils/Commands.cs b/VORP-Character/vorpcharacter_cl/Utils/Commands.cs index dfae0d6..455b2b6 100644 --- a/VORP-Character/vorpcharacter_cl/Utils/Commands.cs +++ b/VORP-Character/vorpcharacter_cl/Utils/Commands.cs @@ -1,10 +1,10 @@ using CitizenFX.Core; using CitizenFX.Core.Native; using System; -using VorpCharacter.Extensions; -using VorpCharacter.Script; +using VORP.Character.Client.Extensions; +using VORP.Character.Client.Script; -namespace VorpCharacter.Utils +namespace VORP.Character.Client.Utils { public class Commands : BaseScript { diff --git a/VORP-Character/vorpcharacter_cl/Utils/Micellanea.cs b/VORP-Character/vorpcharacter_cl/Utils/Micellanea.cs index 8095ff7..65615cf 100644 --- a/VORP-Character/vorpcharacter_cl/Utils/Micellanea.cs +++ b/VORP-Character/vorpcharacter_cl/Utils/Micellanea.cs @@ -1,7 +1,7 @@ using CitizenFX.Core.Native; using System.Threading.Tasks; -namespace VorpCharacter.Utils +namespace VORP.Character.Client.Utils { public class Miscellanea { diff --git a/VORP-Character/vorpcharacter_cl/Utils/SkinsUtils.cs b/VORP-Character/vorpcharacter_cl/Utils/SkinsUtils.cs index d2b85a0..93c1ffb 100644 --- a/VORP-Character/vorpcharacter_cl/Utils/SkinsUtils.cs +++ b/VORP-Character/vorpcharacter_cl/Utils/SkinsUtils.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; -namespace VorpCharacter.Utils +namespace VORP.Character.Client.Utils { public class SkinsUtils : BaseScript { @@ -9114,7 +9114,6 @@ public void GetSkinUtils(string key, dynamic cb) public static List BOOTS_MALE = new List() { - 0x38B4CA64, 0xE90F4791, 0xDF063937, 0xC9B70445, @@ -9276,194 +9275,7 @@ public void GetSkinUtils(string key, dynamic cb) 0xE953A7C5, 0xD716034A, 0x8112D739, - 0x03420118, - 0x0395F7F3, - 0x063D5611, - 0x0939BB82, - 0x095D1462, - 0x0A19AE06, - 0x0C6C767D, - 0x114F9366, - 0x11A11C2E, - 0x138B28BE, - 0x16F1960A, - 0x17343501, - 0x189227AA, - 0x191B28F3, - 0x191F0FE6, - 0x192C2A4B, - 0x19EB1B3D, - 0x1B3EFDA7, - 0x1CCEE58D, - 0x1E08E51C, - 0x1E3AA477, - 0x1EF2B6A3, - 0x1FC0B86D, - 0x201930F9, - 0x2243222E, - 0x24CBC01D, - 0x25C9CD3B, - 0x2A72FB29, - 0x2EA6B02C, - 0x300CE1C1, - 0x312A5CC0, - 0x32430B41, - 0x3B194911, - 0x3B67ED55, - 0x3C4F730A, - 0x3DB4BCC7, - 0x3DDA6C7B, - 0x3E8B73D3, - 0x3F9485C5, - 0x40568254, - 0x4230AD6B, - 0x432FFAD1, - 0x44789999, - 0x46D4EB51, - 0x4818E747, - 0x48391E97, - 0x4B87586C, - 0x4E362308, - 0x4E36EF4C, - 0x4E9704F8, - 0x4FAF30C2, - 0x50BAA670, - 0x546BF6A8, - 0x55A09342, - 0x55C73C36, - 0x55F7BA14, - 0x5710BCAD, - 0x5884EBD1, - 0x5A4C3D3F, - 0x5D8BB19C, - 0x60419361, - 0x609E2906, - 0x61A69CF2, - 0x631D56E2, - 0x637D2E60, - 0x63EFF0E9, - 0x64106871, - 0x641250CB, - 0x64634F62, - 0x649C233F, - 0x64BDD7A0, - 0x66A58EA8, - 0x67491827, - 0x6750478B, - 0x68332C52, - 0x6846D489, - 0x6974A5C3, - 0x6BF4B18E, - 0x6DB0E4ED, - 0x6DC742F4, - 0x6DF3526B, - 0x7250F549, - 0x73AF434A, - 0x750CE304, - 0x782DFFEB, - 0x7A02028F, - 0x7A05F807, - 0x7AAB4F5D, - 0x7CD7CC8D, - 0x7D2AA35E, - 0x7E325609, - 0x7EAAE4BB, - 0x8022A6FF, - 0x812C0B02, - 0x8239E741, - 0x847234D2, - 0x8555F2CD, - 0x857AC60D, - 0x88F28C53, - 0x890CEC20, - 0x8A74D646, - 0x8A81FD04, - 0x8AD91AAC, - 0x8D39289A, - 0x8DD8426A, - 0x8FFD8459, - 0x90442F13, - 0x93519F75, - 0x958A2F0F, - 0x95BA306E, - 0x9AA788F7, - 0x9BEB45FE, - 0x9DA4C9D4, - 0x9DE197AE, - 0x9FF4A7ED, - 0xA08EED0B, - 0xA1264647, - 0xA16E3BAE, - 0xA4856FC4, - 0xA74AA63E, - 0xA8EB9902, - 0xA9761A3F, - 0xA9DFE462, - 0xAA0CE241, - 0xAA183BF9, - 0xADB89CCD, - 0xAEB52702, - 0xAF1FB79B, - 0xAF55B8B1, - 0xB043C88B, - 0xB3C54190, - 0xB3F54B95, - 0xB8E37861, - 0xBA84D0F4, - 0xBB6D22C7, - 0xBB8B3872, - 0xBC42F16F, - 0xBC52606D, - 0xBCE0531C, - 0xBD1FFF39, - 0xBD67C467, - 0xC1644333, - 0xC3876F12, - 0xC3C41616, - 0xC4875039, - 0xC51C1AF6, - 0xC5E8D324, - 0xC63AB2C2, - 0xC6C83449, - 0xC99989B6, - 0xCBA8733B, - 0xCE305EC5, - 0xCF12F781, - 0xCF6C22D2, - 0xD3FC9EB7, - 0xD4837059, - 0xD5F6BCAB, - 0xD6FB09E0, - 0xD7484F15, - 0xD7ACDB46, - 0xD7FD5647, - 0xD8A7A217, - 0xDC925FDD, - 0xE079D1B1, - 0xE20F3ADC, - 0xE210CABB, - 0xE5B5C43C, - 0xE5EBD480, - 0xE711531B, - 0xE9447E75, - 0xE9EB9D6E, - 0xEFD964AF, - 0xF3F960C3, - 0xF476468D, - 0xF48EB2B4, - 0xF57F940E, - 0xF5C23C25, - 0xF69C7BC6, - 0xF6BA67E1, - 0xF6D71DD4, - 0xF75CDF81, - 0xF86B8EE6, - 0xF8B77317, - 0xFA2ED202, - 0xFCF27DDE, - 0xFD530B63, - 0xFD985535, - 0xFF2273C5, + 0x38B4CA64, 0xF2F4775D, 0x058F9C97, 0xBB73885C, @@ -9650,6 +9462,10 @@ public void GetSkinUtils(string key, dynamic cb) 0x451793B6, 0x0D10A3A9, 0x9D19C2DD, + 0xE5EBD480, + 0x812C0B02, + 0x5A4C3D3F, + 0x641250CB, 0x31BB4E15, 0xDC81A3A3, 0xCD1F04DE, @@ -9660,6 +9476,10 @@ public void GetSkinUtils(string key, dynamic cb) 0xB1FBCE94, 0xD99D9A1F, 0x2B27BDB6, + 0x19EB1B3D, + 0x7EAAE4BB, + 0x6DC742F4, + 0x637D2E60, 0x8ABCAA9F, 0xC6972257, 0x195A47E0, @@ -9710,6 +9530,10 @@ public void GetSkinUtils(string key, dynamic cb) 0x4FD9275E, 0x5D5CC265, 0x0AD88C6E, + 0x191B28F3, + 0x3E8B73D3, + 0xD3FC9EB7, + 0xE20F3ADC, 0xEEB7CE03, 0xF9B5E3FF, 0x0B3A8708, @@ -9870,15 +9694,212 @@ public void GetSkinUtils(string key, dynamic cb) 0xAA6F79CD, 0x9D87DFFE, 0xADBD7F3D, + 0xCE305EC5, + 0x44789999, + 0x55C73C36, + 0x631D56E2, + 0x7250F549, + 0xA9DFE462, + 0xC51C1AF6, + 0xD5F6BCAB, + 0xE079D1B1, + 0xFD530B63, + 0x782DFFEB, + 0x2A72FB29, + 0xD7FD5647, + 0xC63AB2C2, + 0x8DD8426A, + 0x8022A6FF, + 0x32430B41, + 0xA4856FC4, + 0xDC925FDD, + 0xC6C83449, + 0xD7484F15, 0x1983444E, + 0x913D71FD, + 0x5F4C0E1B, + 0x6DEAAB58, + 0x3C3C47FC, + 0x4A77E473, + 0x10ABF0D8, + 0x26D31D2A, + 0x895CE24C, + 0x9F920EBA, + 0x7A13C28A, 0x68C13C09, + 0xA190EBD4, + 0x2FC68841, + 0x3CB5A21F, + 0x4EF3469A, + 0x87E9B87A, + 0x9A2C5CFF, + 0xA43D7121, + 0x368615B4, + 0x53A84FF8, + 0xEE810487, 0x9C08385F, 0xC9CAA474, 0x727BABB3, 0x6BF311D8, + 0x432FFAD1, + 0x6DB0E4ED, + 0xA74AA63E, + 0x857AC60D, 0x22B62CE4, 0x0825A807, 0xE1EE57AB, + 0x03420118, + 0x0395F7F3, + 0x063D5611, + 0x0939BB82, + 0x095D1462, + 0x0A19AE06, + 0x0C6C767D, + 0x114F9366, + 0x11A11C2E, + 0x138B28BE, + 0x16F1960A, + 0x17343501, + 0x189227AA, + 0x191F0FE6, + 0x192C2A4B, + 0x1B3EFDA7, + 0x1CCEE58D, + 0x1E08E51C, + 0x1E3AA477, + 0x1EF2B6A3, + 0x1FC0B86D, + 0x201930F9, + 0x2243222E, + 0x24CBC01D, + 0x25C9CD3B, + 0x2EA6B02C, + 0x300CE1C1, + 0x312A5CC0, + 0x3B194911, + 0x3B67ED55, + 0x3C4F730A, + 0x3DB4BCC7, + 0x3DDA6C7B, + 0x3F9485C5, + 0x40568254, + 0x4230AD6B, + 0x46D4EB51, + 0x4818E747, + 0x48391E97, + 0x4B87586C, + 0x4E362308, + 0x4E36EF4C, + 0x4E9704F8, + 0x4FAF30C2, + 0x50BAA670, + 0x546BF6A8, + 0x55A09342, + 0x55F7BA14, + 0x5710BCAD, + 0x5884EBD1, + 0x5D8BB19C, + 0x60419361, + 0x609E2906, + 0x61A69CF2, + 0x63EFF0E9, + 0x64106871, + 0x64634F62, + 0x649C233F, + 0x64BDD7A0, + 0x66A58EA8, + 0x67491827, + 0x6750478B, + 0x68332C52, + 0x6846D489, + 0x6974A5C3, + 0x6BF4B18E, + 0x6DF3526B, + 0x73AF434A, + 0x750CE304, + 0x7A02028F, + 0x7A05F807, + 0x7AAB4F5D, + 0x7CD7CC8D, + 0x7D2AA35E, + 0x7E325609, + 0x8239E741, + 0x847234D2, + 0x8555F2CD, + 0x88F28C53, + 0x890CEC20, + 0x8A74D646, + 0x8A81FD04, + 0x8AD91AAC, + 0x8D39289A, + 0x8FFD8459, + 0x90442F13, + 0x93519F75, + 0x958A2F0F, + 0x95BA306E, + 0x9AA788F7, + 0x9BEB45FE, + 0x9DA4C9D4, + 0x9DE197AE, + 0x9FF4A7ED, + 0xA08EED0B, + 0xA1264647, + 0xA16E3BAE, + 0xA8EB9902, + 0xA9761A3F, + 0xAA0CE241, + 0xAA183BF9, + 0xADB89CCD, + 0xAEB52702, + 0xAF1FB79B, + 0xAF55B8B1, + 0xB043C88B, + 0xB3C54190, + 0xB3F54B95, + 0xB8E37861, + 0xBA84D0F4, + 0xBB6D22C7, + 0xBB8B3872, + 0xBC42F16F, + 0xBC52606D, + 0xBCE0531C, + 0xBD1FFF39, + 0xBD67C467, + 0xC1644333, + 0xC3876F12, + 0xC3C41616, + 0xC4875039, + 0xC5E8D324, + 0xC99989B6, + 0xCBA8733B, + 0xCF12F781, + 0xCF6C22D2, + 0xD4837059, + 0xD6FB09E0, + 0xD7ACDB46, + 0xD8A7A217, + 0xE210CABB, + 0xE5B5C43C, + 0xE711531B, + 0xE82DEAC8, + 0xE9447E75, + 0xE9EB9D6E, + 0xEFD964AF, + 0xF3F960C3, + 0xF476468D, + 0xF48EB2B4, + 0xF57F940E, + 0xF5C23C25, + 0xF69C7BC6, + 0xF6BA67E1, + 0xF6D71DD4, + 0xF75CDF81, + 0xF86B8EE6, + 0xF8B77317, + 0xFA2ED202, + 0xFCF27DDE, + 0xFD985535, + 0xFF2273C5 }; public static List BOOTS_FEMALE = new List() diff --git a/VORP-Character/vorpcharacter_cl/Utils/Utilities.cs b/VORP-Character/vorpcharacter_cl/Utils/Utilities.cs index 2647b48..36c183c 100644 --- a/VORP-Character/vorpcharacter_cl/Utils/Utilities.cs +++ b/VORP-Character/vorpcharacter_cl/Utils/Utilities.cs @@ -3,15 +3,14 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Enums; +using VORP.Character.Client.Diagnostics; +using VORP.Character.Client.Enums; using static CitizenFX.Core.Native.API; -namespace VorpCharacter.Utils +namespace VORP.Character.Client.Utils { internal class Utilities { - const int MAX_COMPONENT_CHANGE_DELAY = 10; public static Random RANDOM = new Random(); public static void SetAttributeCoreValue(int pedHandle, eAttributeCore attribute, int value) @@ -45,7 +44,7 @@ public static bool IsPedReadyToRender(int pedHandle) return Function.Call((Hash)0xA0BC8FAED8CFEB3C, pedHandle); } - public static void RemoveTagFromMetaPed(int pedHandle, uint component, int p2 = 0, int delay = MAX_COMPONENT_CHANGE_DELAY) + public static void RemoveTagFromMetaPed(int pedHandle, uint component, int p2 = 0) { Function.Call((Hash)0xD710A5007C2AC539, pedHandle, component, p2); UpdatePedVariation(pedHandle); @@ -80,11 +79,10 @@ public static void SetPedFaceFeature(int pedHandle, ePedFaceFeature pedFaceFeatu if (updateVariation) UpdatePedVariation(pedHandle); } - public static async Task SetPedFaceFeature(int pedHandle, ePedFaceFeature pedFaceFeature, float value, bool updateVariation = false, int delay = MAX_COMPONENT_CHANGE_DELAY) + public static async Task SetPedFaceFeature(int pedHandle, ePedFaceFeature pedFaceFeature, float value, bool updateVariation = false) { Function.Call((Hash)0x5653AB26C82938CF, pedHandle, (uint)pedFaceFeature, value); if (updateVariation) UpdatePedVariation(pedHandle); - await BaseScript.Delay(delay); } public static void SetComponent(int pedHandle, ePedComponent componentCategory, long componentHash) diff --git a/VORP-Character/vorpcharacter_cl/vorpcharacter_cl.csproj b/VORP-Character/vorpcharacter_cl/VORP.Character.Client.csproj similarity index 91% rename from VORP-Character/vorpcharacter_cl/vorpcharacter_cl.csproj rename to VORP-Character/vorpcharacter_cl/VORP.Character.Client.csproj index 7f0b87d..d599a67 100644 --- a/VORP-Character/vorpcharacter_cl/vorpcharacter_cl.csproj +++ b/VORP-Character/vorpcharacter_cl/VORP.Character.Client.csproj @@ -7,12 +7,13 @@ {51083C52-7FE7-422E-AED9-023D0903C6E6} Library Properties - VorpCharacter - vorpcharacter_cl.net - v4.5.2 + VORP.Character + VORP.Character.Client.net + v4.7.2 512 true latest + true @@ -91,13 +92,13 @@ - + Always - + Always - + Always diff --git a/VORP-Character/vorpcharacter_sv/Resources/server-config.json b/VORP-Character/vorpcharacter_sv/Config/server-config.json similarity index 100% rename from VORP-Character/vorpcharacter_sv/Resources/server-config.json rename to VORP-Character/vorpcharacter_sv/Config/server-config.json diff --git a/VORP-Character/vorpcharacter_sv/Diagnostics/Logger.cs b/VORP-Character/vorpcharacter_sv/Diagnostics/Logger.cs index cfc30c7..a389014 100644 --- a/VORP-Character/vorpcharacter_sv/Diagnostics/Logger.cs +++ b/VORP-Character/vorpcharacter_sv/Diagnostics/Logger.cs @@ -1,7 +1,7 @@ using CitizenFX.Core.Native; using System; -namespace VorpCharacter.Diagnostics +namespace VORP.Character.Server.Diagnostics { class Logger { diff --git a/VORP-Character/vorpcharacter_sv/Extensions/Common.cs b/VORP-Character/vorpcharacter_sv/Extensions/Common.cs index 57e5281..78add67 100644 --- a/VORP-Character/vorpcharacter_sv/Extensions/Common.cs +++ b/VORP-Character/vorpcharacter_sv/Extensions/Common.cs @@ -1,10 +1,16 @@ -using CitizenFX.Core; - -namespace VorpCharacter.Extensions +namespace VORP.Character.Server.Extensions { static class Common { - public static dynamic GetCoreUser(this Player player) => PluginManager.CORE.getUser(int.Parse(player.Handle)); + public static dynamic GetCoreUser(this Player player) + { + if (PluginManager.USE_CORE_EXPORTS) + { + return PluginManager.Instance.ExportRegistry["vorp_core"].GetUser(player.Handle); + } + + return PluginManager.CORE.getUser(int.Parse(player.Handle)); + } public static dynamic GetCoreUserCharacter(this Player player) => player.GetCoreUser().getUsedCharacter; public static dynamic GetCoreUserCharacters(this Player player) => player.GetCoreUser().getUserCharacters; public static string SteamHandle(this Player player) => $"steam:{player.Identifiers["steam"]}"; diff --git a/VORP-Character/vorpcharacter_sv/Models/Discord/DiscordAvatar.cs b/VORP-Character/vorpcharacter_sv/Models/Discord/DiscordAvatar.cs index e5a6029..18deae3 100644 --- a/VORP-Character/vorpcharacter_sv/Models/Discord/DiscordAvatar.cs +++ b/VORP-Character/vorpcharacter_sv/Models/Discord/DiscordAvatar.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -namespace VorpCharacter.Models.Discord +namespace VORP.Character.Server.Models.Discord { [DataContract] public class DiscordAvatar diff --git a/VORP-Character/vorpcharacter_sv/Models/Discord/Member.cs b/VORP-Character/vorpcharacter_sv/Models/Discord/Member.cs index e1b570b..36a0121 100644 --- a/VORP-Character/vorpcharacter_sv/Models/Discord/Member.cs +++ b/VORP-Character/vorpcharacter_sv/Models/Discord/Member.cs @@ -1,7 +1,7 @@ using Newtonsoft.Json; using System; -namespace VorpCharacter.Models.Discord +namespace VORP.Character.Server.Models.Discord { public partial class Member { diff --git a/VORP-Character/vorpcharacter_sv/Models/DiscordConfig.cs b/VORP-Character/vorpcharacter_sv/Models/DiscordConfig.cs index 9a793a6..a82100a 100644 --- a/VORP-Character/vorpcharacter_sv/Models/DiscordConfig.cs +++ b/VORP-Character/vorpcharacter_sv/Models/DiscordConfig.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Runtime.Serialization; -using VorpCharacter.Web.Discord.Entity; +using VORP.Character.Server.Web.Discord.Entity; -namespace VorpCharacter.Models +namespace VORP.Character.Server.Models { [DataContract] public class DiscordConfig diff --git a/VORP-Character/vorpcharacter_sv/Models/ServerConfig.cs b/VORP-Character/vorpcharacter_sv/Models/ServerConfig.cs index a6ecc53..1a7abb2 100644 --- a/VORP-Character/vorpcharacter_sv/Models/ServerConfig.cs +++ b/VORP-Character/vorpcharacter_sv/Models/ServerConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -namespace VorpCharacter.Models +namespace VORP.Character.Server.Models { [DataContract] public class ServerConfig diff --git a/VORP-Character/vorpcharacter_sv/PluginManager.cs b/VORP-Character/vorpcharacter_sv/PluginManager.cs index 8510c28..9119761 100644 --- a/VORP-Character/vorpcharacter_sv/PluginManager.cs +++ b/VORP-Character/vorpcharacter_sv/PluginManager.cs @@ -1,11 +1,12 @@ -using CitizenFX.Core; +global using CitizenFX.Core; +global using VORP.Character.Server.Diagnostics; +global using static CitizenFX.Core.Native.API; using System; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Web; -using static CitizenFX.Core.Native.API; +using VORP.Character.Server.Script; +using VORP.Character.Server.Web; -namespace VorpCharacter +namespace VORP.Character.Server { public class PluginManager : BaseScript { @@ -13,12 +14,15 @@ public class PluginManager : BaseScript public static PlayerList PlayerList; public static dynamic CORE; public static int MAX_ALLOWED_CHARACTERS; + public static bool USE_CORE_EXPORTS = false; + public static string VORP_DATABASE_RESOURCE = "ghmattimysql"; public EventHandlerDictionary EventRegistry => EventHandlers; public ExportDictionary ExportRegistry => Exports; - string _GHMattiMySqlResourceState => GetResourceState("ghmattimysql"); + string _MySqlResourceState => GetResourceState(VORP_DATABASE_RESOURCE); readonly public DiscordClient DiscordClient = new(); + readonly public CharacterApi CharacterApi = new(); public PluginManager() { @@ -36,12 +40,12 @@ public PluginManager() async Task VendorReady() { - string dbResource = _GHMattiMySqlResourceState; + string dbResource = _MySqlResourceState; if (dbResource == "missing") { while (true) { - Logger.Error($"ghmattimysql resource not found! Please make sure you have the resource!"); + Logger.Error($"{VORP_DATABASE_RESOURCE} resource not found! Please make sure you have the resource!"); await Delay(1000); } } @@ -49,12 +53,26 @@ async Task VendorReady() while (!(dbResource == "started")) { await Delay(500); - dbResource = _GHMattiMySqlResourceState; + StartResource(VORP_DATABASE_RESOURCE); + await Delay(500); + dbResource = _MySqlResourceState; } } async void Setup() { + USE_CORE_EXPORTS = GetResourceMetadata(GetCurrentResourceName(), "vorp_core_csharp_new", 0) == "true"; + + if (USE_CORE_EXPORTS) + { + Logger.Info($"Using VORP-CORE Exports."); + } + + DiscordClient.Init(); + CharacterApi.Init(); + + AddEvents(); + await VendorReady(); // wait till ghmattimysql resource has started TriggerEvent("getCore", new Action((dic) => @@ -67,10 +85,6 @@ async void Setup() cb(MAX_ALLOWED_CHARACTERS); })); })); - - RegisterScript(DiscordClient); - - AddEvents(); } @@ -98,10 +112,13 @@ void AddEvents() if (resourceName != GetCurrentResourceName()) return; Logger.Info($"Stopping VORP Character"); - - UnregisterScript(DiscordClient); })); } + public void Hook(string eventName, Delegate @delegate) + { + Logger.Debug($"Registered Legacy Event Handler '{eventName}'"); + EventHandlers.Add(eventName, @delegate); + } } } diff --git a/VORP-Character/vorpcharacter_sv/Properties/Resources.Designer.cs b/VORP-Character/vorpcharacter_sv/Properties/Resources.Designer.cs index 3eb90e1..aa20bea 100644 --- a/VORP-Character/vorpcharacter_sv/Properties/Resources.Designer.cs +++ b/VORP-Character/vorpcharacter_sv/Properties/Resources.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace VorpCharacter.Properties { +namespace VORP.Character.Server.Properties { using System; @@ -39,7 +39,7 @@ internal Resources() { internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VorpCharacter.Properties.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VORP.Character.Server.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; @@ -59,24 +59,5 @@ internal Resources() { resourceCulture = value; } } - - /// - /// Looks up a localized string similar to { - /// "discord": { - /// "webHooks": [ - /// { - /// "name": "vorp_character", - /// "avatar": "myAvatarUrl", - /// "url": "myWebhookUrl" - /// } - /// ] - /// } - ///}. - /// - internal static string server_config { - get { - return ResourceManager.GetString("server_config", resourceCulture); - } - } } } diff --git a/VORP-Character/vorpcharacter_sv/Properties/Resources.resx b/VORP-Character/vorpcharacter_sv/Properties/Resources.resx index 7e95373..7c0911e 100644 --- a/VORP-Character/vorpcharacter_sv/Properties/Resources.resx +++ b/VORP-Character/vorpcharacter_sv/Properties/Resources.resx @@ -118,7 +118,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\server-config.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - \ No newline at end of file diff --git a/VORP-Character/vorpcharacter_sv/Script/CharacterApi.cs b/VORP-Character/vorpcharacter_sv/Script/CharacterApi.cs index aabe756..313cd5a 100644 --- a/VORP-Character/vorpcharacter_sv/Script/CharacterApi.cs +++ b/VORP-Character/vorpcharacter_sv/Script/CharacterApi.cs @@ -1,40 +1,34 @@ -using CitizenFX.Core; -using CitizenFX.Core.Native; +using CitizenFX.Core.Native; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; -using VorpCharacter.Diagnostics; -using VorpCharacter.Extensions; +using VORP.Character.Server.Extensions; -namespace VorpCharacter.Script +namespace VORP.Character.Server.Script { - public class CharacterApi : BaseScript + public class CharacterApi { - public static CharacterApi Instance { get; private set; } - - public CharacterApi() // MOVE TO CORE v2 + public void Init() { - Instance = this; - //Event for create new character - EventHandlers["vorp_CreateNewCharacter"] += new Action(CreateNewCharacter); + PluginManager.Instance.Hook("vorp_CreateNewCharacter", new Action(CreateNewCharacter)); //Event for select characters - EventHandlers["vorp_GoToSelectionMenu"] += new Action(GoToSelectionMenu); + PluginManager.Instance.Hook("vorp_GoToSelectionMenu", new Action(GoToSelectionMenu)); //Event for spawn unique character - EventHandlers["vorp_SpawnUniqueCharacter"] += new Action(SpawnUniqueCharacter); + PluginManager.Instance.Hook("vorp_SpawnUniqueCharacter", new Action(SpawnUniqueCharacter)); //Event for save the new character - EventHandlers["vorp_SaveNewCharacter"] += new Action(SaveNewCharacter); - EventHandlers["vorp_updateexisting"] += new Action(SaveNewCharacter2); + PluginManager.Instance.Hook("vorp_SaveNewCharacter", new Action(SaveNewCharacter)); + PluginManager.Instance.Hook("vorp_updateexisting", new Action(SaveNewCharacter2)); //Event for delete the character - EventHandlers["vorp_DeleteCharacter"] += new Action(DeleteCharacter); + PluginManager.Instance.Hook("vorp_DeleteCharacter", new Action(DeleteCharacter)); - EventHandlers["vorp_CharSelectedCharacter"] += new Action(SelectCharacter); + PluginManager.Instance.Hook("vorp_CharSelectedCharacter", new Action(SelectCharacter)); - EventHandlers["vorpcharacter:getPlayerComps"] += new Action(getPlayerComps); - EventHandlers["vorpcharacter:setPlayerSkinChange"] += new Action(setPlayerSkinChange); - EventHandlers["vorpcharacter:setPlayerCompChange"] += new Action(setPlayerCompChange); - EventHandlers["vorpcharacter:getPlayerSkin"] += new Action(getPlayerSkin); + PluginManager.Instance.Hook("vorpcharacter:getPlayerComps", new Action(getPlayerComps)); + PluginManager.Instance.Hook("vorpcharacter:setPlayerSkinChange", new Action(setPlayerSkinChange)); + PluginManager.Instance.Hook("vorpcharacter:setPlayerCompChange", new Action(setPlayerCompChange)); + PluginManager.Instance.Hook("vorpcharacter:getPlayerSkin", new Action(getPlayerSkin)); // maybe worth protecting this with ACE Permissions? API.RegisterCommand("createcharacter", new Action, string>((source, args, rawCommand) => @@ -60,8 +54,7 @@ public CharacterApi() // MOVE TO CORE v2 } }), false); - Logger.Info($"VORP Character CharacterApi"); - + Logger.Info($"INIT VORP Character CharacterApi"); } private void SpawnUniqueCharacter(int source) @@ -120,7 +113,7 @@ private void DeleteCharacter([FromSource] Player player, int charid) dynamic CoreUser = player.GetCoreUser(); if (CoreUser == null) return; CoreUser.removeCharacter(charid); - PluginManager.Instance.DiscordClient.SendDiscordEmbededMessage("vorp_character", $"VORP Character Sentry", $"Deleted Character", $"User: {player.Name}", Web.DiscordColor.Red); + PluginManager.Instance.DiscordClient.SendDiscordEmbededMessageAsync("vorp_character", $"VORP Character Sentry", $"Deleted Character", $"User: {player.Name}", Web.DiscordColor.Red); } private async void SaveNewCharacter([FromSource] Player player, dynamic skin, dynamic components, string name) @@ -147,10 +140,10 @@ private async void SaveNewCharacter([FromSource] Player player, dynamic skin, dy Dictionary scloth = JsonConvert.DeserializeObject>(compsPlayer); Dictionary sskin = JsonConvert.DeserializeObject>(skinPlayer); player.TriggerEvent("vorpcharacter:reloadPlayerComps", sskin, scloth); - await Delay(2000); - TriggerEvent("vorp_NewCharacter", int.Parse(player.Handle)); + await BaseScript.Delay(2000); + BaseScript.TriggerEvent("vorp_NewCharacter", int.Parse(player.Handle)); - PluginManager.Instance.DiscordClient.SendDiscordEmbededMessage("vorp_character", $"VORP Character Sentry", $"Created Character", $"User: {player.Name}", Web.DiscordColor.Green); + PluginManager.Instance.DiscordClient.SendDiscordEmbededMessageAsync("vorp_character", $"VORP Character Sentry", $"Created Character", $"User: {player.Name}", Web.DiscordColor.Green); } catch (Exception e) { @@ -174,8 +167,8 @@ private async void SaveNewCharacter2([FromSource] Player player, dynamic skin, d { Dictionary scloth = JsonConvert.DeserializeObject>(compsPlayer); Dictionary sskin = JsonConvert.DeserializeObject>(skinPlayer); - Exports["ghmattimysql"].execute("UPDATE characters SET `firstname` = ? , `lastname` = ?, `skinPlayer` = ?, `compPlayer` = ? WHERE `identifier` = ? AND `charidentifier` = ? ", new object[] { firstname, lastname, skinPlayer, compsPlayer, sid, UserCharacter }); - await Delay(0); + PluginManager.Instance.ExportRegistry[PluginManager.VORP_DATABASE_RESOURCE].execute("UPDATE characters SET `firstname` = ? , `lastname` = ?, `skinPlayer` = ?, `compPlayer` = ? WHERE `identifier` = ? AND `charidentifier` = ? ", new object[] { firstname, lastname, skinPlayer, compsPlayer, sid, UserCharacter }); + await BaseScript.Delay(0); player.TriggerEvent("vorpcharacter:reloadPlayerComps", sskin, scloth); } catch (Exception e) diff --git a/VORP-Character/vorpcharacter_sv/vorpcharacter_sv.csproj b/VORP-Character/vorpcharacter_sv/VORP.Character.Server.csproj similarity index 92% rename from VORP-Character/vorpcharacter_sv/vorpcharacter_sv.csproj rename to VORP-Character/vorpcharacter_sv/VORP.Character.Server.csproj index 63ad8e5..491de41 100644 --- a/VORP-Character/vorpcharacter_sv/vorpcharacter_sv.csproj +++ b/VORP-Character/vorpcharacter_sv/VORP.Character.Server.csproj @@ -7,12 +7,13 @@ {EAF3ACC4-8378-4923-ADD0-5959DC21DA03} Library Properties - VorpCharacter - vorpcharacter_sv.net - v4.5.2 + VORP.Character.Server + VORP.Character.Server.net + v4.7.2 512 true latest + true @@ -93,10 +94,11 @@ ResXFileCodeGenerator Resources.Designer.cs + Designer - + Always diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/DiscordWebhook.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/DiscordWebhook.cs index ff8c98c..431239e 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/DiscordWebhook.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/DiscordWebhook.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { [DataContract] public class DiscordWebhook diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Embed.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Embed.cs index a2d4d84..781578f 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Embed.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Embed.cs @@ -1,7 +1,7 @@ using Newtonsoft.Json; using System.Collections.Generic; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { public class Embed { diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedAuthor.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedAuthor.cs index 745174b..952be85 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedAuthor.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedAuthor.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { public class EmbedAuthor { diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedThumbnail.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedThumbnail.cs index 5ef02c1..41e9748 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedThumbnail.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/EmbedThumbnail.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { public class EmbedThumbnail { diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Field.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Field.cs index 4516cad..12a1ee4 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Field.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Field.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { public class Field { diff --git a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Webhook.cs b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Webhook.cs index 2569c31..4cb7d0d 100644 --- a/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Webhook.cs +++ b/VORP-Character/vorpcharacter_sv/Web/Discord/Entity/Webhook.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Threading.Tasks; -namespace VorpCharacter.Web.Discord.Entity +namespace VORP.Character.Server.Web.Discord.Entity { public class Webhook { diff --git a/VORP-Character/vorpcharacter_sv/Web/DiscordClient.cs b/VORP-Character/vorpcharacter_sv/Web/DiscordClient.cs index 4390b50..4538ae6 100644 --- a/VORP-Character/vorpcharacter_sv/Web/DiscordClient.cs +++ b/VORP-Character/vorpcharacter_sv/Web/DiscordClient.cs @@ -1,15 +1,13 @@ -using CitizenFX.Core; -using CitizenFX.Core.Native; +using CitizenFX.Core.Native; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Threading.Tasks; -using VorpCharacter.Diagnostics; -using VorpCharacter.Models; -using VorpCharacter.Web.Discord.Entity; +using VORP.Character.Server.Models; +using VORP.Character.Server.Web.Discord.Entity; -namespace VorpCharacter.Web +namespace VORP.Character.Server.Web { public enum WebhookChannel { @@ -26,7 +24,7 @@ public enum DiscordColor : int Orange = 16757575 } - public class DiscordClient : BaseScript + public class DiscordClient { static Request request = new Request(); public Dictionary Webhooks = new Dictionary(); @@ -36,8 +34,9 @@ public class DiscordClient : BaseScript private static Regex _compiledUnicodeRegex = new Regex(@"[^\u0000-\u007F]", RegexOptions.Compiled); - internal DiscordClient() + public void Init() { + Logger.Info("INIT Character Discord Webhooks"); UpdateWebhooks(); } @@ -47,7 +46,7 @@ public String StripUnicodeCharactersFromString(string inputValue) } [Tick] - private async Task OnDiscordWebhookUpdate() + private async Task OnDiscordWebhookUpdateAsync() { if ((API.GetGameTimer() - lastUpdate) > 120000) { @@ -69,11 +68,12 @@ private async Task OnDiscordWebhookUpdate() await BaseScript.Delay(10000); } - private async Task UpdateWebhooks() + private void UpdateWebhooks() { try { - ServerConfig serverConfig = JsonConvert.DeserializeObject(Properties.Resources.server_config); + string serverConfigFile = API.LoadResourceFile(API.GetCurrentResourceName(), "/config/server-config.json"); + ServerConfig serverConfig = JsonConvert.DeserializeObject(serverConfigFile); DiscordBotKey = serverConfig.DiscordConfig.Key; serverConfig.DiscordConfig.WebHooks.ForEach(x => { @@ -90,7 +90,7 @@ private async Task UpdateWebhooks() } } - public async Task SendDiscordEmbededMessage(string webHookName, string name, string title, string description, DiscordColor discordColor) + public async Task SendDiscordEmbededMessageAsync(string webHookName, string name, string title, string description, DiscordColor discordColor) { try { diff --git a/VORP-Character/vorpcharacter_sv/Web/HttpClient.cs b/VORP-Character/vorpcharacter_sv/Web/HttpClient.cs index 24da3b6..4c44ddc 100644 --- a/VORP-Character/vorpcharacter_sv/Web/HttpClient.cs +++ b/VORP-Character/vorpcharacter_sv/Web/HttpClient.cs @@ -1,4 +1,3 @@ -using CitizenFX.Core; using CitizenFX.Core.Native; using Newtonsoft.Json; using System; @@ -6,7 +5,7 @@ using System.Net; using System.Threading.Tasks; -namespace VorpCharacter.Web +namespace VORP.Character.Server.Web { public struct RequestResponse {