code cleanup
This commit is contained in:
@ -1,8 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -21,7 +18,7 @@ namespace RageCoop.Client
|
||||
CheckProjectiles,
|
||||
GetAllEntities,
|
||||
Receive,
|
||||
|
||||
ProjectilesTotal,
|
||||
}
|
||||
internal static class Debug
|
||||
{
|
||||
@ -29,7 +26,7 @@ namespace RageCoop.Client
|
||||
private static int _lastNfHandle;
|
||||
static Debug()
|
||||
{
|
||||
foreach(TimeStamp t in Enum.GetValues(typeof(TimeStamp)))
|
||||
foreach (TimeStamp t in Enum.GetValues(typeof(TimeStamp)))
|
||||
{
|
||||
TimeStamps.Add(t, 0);
|
||||
}
|
||||
@ -37,7 +34,7 @@ namespace RageCoop.Client
|
||||
public static string Dump(this Dictionary<TimeStamp, long> d)
|
||||
{
|
||||
string s = "";
|
||||
foreach(KeyValuePair<TimeStamp, long> kvp in d)
|
||||
foreach (KeyValuePair<TimeStamp, long> kvp in d)
|
||||
{
|
||||
s+=kvp.Key+":"+kvp.Value+"\n";
|
||||
}
|
||||
|
@ -1,20 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal class DevTool:Script
|
||||
internal class DevTool : Script
|
||||
{
|
||||
public static Vehicle ToMark;
|
||||
public static bool UseSecondary=false;
|
||||
public static bool UseSecondary = false;
|
||||
public static int Current = 0;
|
||||
public static int Secondary = 0;
|
||||
public static MuzzleDir Direction = MuzzleDir.Forward;
|
||||
@ -27,7 +23,8 @@ namespace RageCoop.Client
|
||||
private void OnKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (ToMark==null||(!ToMark.Exists())) { return; }
|
||||
if (DevToolMenu.Menu.SelectedItem==DevToolMenu.boneIndexItem) {
|
||||
if (DevToolMenu.Menu.SelectedItem==DevToolMenu.boneIndexItem)
|
||||
{
|
||||
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
@ -78,7 +75,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
private static void OnTick(object sender, EventArgs e)
|
||||
{
|
||||
if(ToMark == null || !ToMark.Exists()){ return;}
|
||||
if (ToMark == null || !ToMark.Exists()) { return; }
|
||||
Update();
|
||||
Draw(Current);
|
||||
if (UseSecondary)
|
||||
@ -170,15 +167,15 @@ namespace RageCoop.Client
|
||||
GTA.UI.Notification.Show("Copied to clipboard, please paste it on the GitHub issue page!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
internal enum MuzzleDir:byte
|
||||
internal enum MuzzleDir : byte
|
||||
{
|
||||
Forward=0,
|
||||
Forward = 0,
|
||||
Right = 1,
|
||||
Up=2,
|
||||
Backward=3,
|
||||
Up = 2,
|
||||
Backward = 3,
|
||||
Left = 4,
|
||||
Down=5,
|
||||
Down = 5,
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,14 @@
|
||||
using System;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA.Native;
|
||||
using RageCoop.Client.Menus;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
using RageCoop.Client.Menus;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA.Math;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -19,26 +17,26 @@ namespace RageCoop.Client
|
||||
/// </summary>
|
||||
internal class Main : Script
|
||||
{
|
||||
|
||||
|
||||
private bool _gameLoaded = false;
|
||||
internal static readonly string CurrentVersion = "V0_5_0";
|
||||
|
||||
internal static int LocalPlayerID=0;
|
||||
internal static int LocalPlayerID = 0;
|
||||
|
||||
internal static RelationshipGroup SyncedPedsGroup;
|
||||
|
||||
internal static new Settings Settings = null;
|
||||
internal static Scripting.BaseScript BaseScript=new Scripting.BaseScript();
|
||||
internal static Scripting.BaseScript BaseScript = new Scripting.BaseScript();
|
||||
|
||||
#if !NON_INTERACTIVE
|
||||
#endif
|
||||
internal static Chat MainChat = null;
|
||||
internal static Stopwatch Counter = new Stopwatch();
|
||||
internal static Logger Logger = null;
|
||||
|
||||
|
||||
internal static ulong Ticked = 0;
|
||||
internal static Vector3 PlayerPosition;
|
||||
internal static Scripting.Resources Resources=null;
|
||||
internal static Scripting.Resources Resources = null;
|
||||
private static List<Func<bool>> QueuedActions = new List<Func<bool>>();
|
||||
/// <summary>
|
||||
/// Don't use it!
|
||||
@ -90,22 +88,24 @@ namespace RageCoop.Client
|
||||
#endif
|
||||
MainChat = new Chat();
|
||||
Tick += OnTick;
|
||||
Tick += (s,e) => { Scripting.API.Events.InvokeTick(); };
|
||||
Tick += (s, e) => { Scripting.API.Events.InvokeTick(); };
|
||||
KeyDown += OnKeyDown;
|
||||
KeyDown+=(s, e) => { Scripting.API.Events.InvokeKeyDown(s, e); };
|
||||
KeyUp+=(s, e) => { Scripting.API.Events.InvokeKeyUp(s, e); };
|
||||
Aborted += (object sender, EventArgs e) => CleanUp();
|
||||
|
||||
|
||||
Util.NativeMemory();
|
||||
Counter.Restart();
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
#endif
|
||||
public static Ped P;
|
||||
public static float FPS;
|
||||
private void OnTick(object sender, EventArgs e)
|
||||
{
|
||||
var P = Game.Player.Character;
|
||||
|
||||
P= Game.Player.Character;
|
||||
FPS=Game.FPS;
|
||||
PlayerPosition=P.Position;
|
||||
if (Game.IsLoading)
|
||||
{
|
||||
@ -114,14 +114,14 @@ namespace RageCoop.Client
|
||||
else if (!_gameLoaded && (_gameLoaded = true))
|
||||
{
|
||||
#if !NON_INTERACTIVE
|
||||
GTA.UI.Notification.Show(GTA.UI.NotificationIcon.AllPlayersConf, "RAGECOOP","Welcome!", $"Press ~g~{Main.Settings.MenuKey}~s~ to open the menu.");
|
||||
GTA.UI.Notification.Show(GTA.UI.NotificationIcon.AllPlayersConf, "RAGECOOP", "Welcome!", $"Press ~g~{Main.Settings.MenuKey}~s~ to open the menu.");
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !NON_INTERACTIVE
|
||||
CoopMenu.MenuPool.Process();
|
||||
#endif
|
||||
|
||||
|
||||
DoQueuedActions();
|
||||
if (!Networking.IsOnServer)
|
||||
{
|
||||
@ -139,7 +139,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
Main.Logger.Error(ex);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#if DEBUG
|
||||
@ -160,12 +160,12 @@ namespace RageCoop.Client
|
||||
{
|
||||
Function.Call(Hash.PAUSE_DEATH_ARREST_RESTART, true);
|
||||
Function.Call(Hash.IGNORE_NEXT_RESTART, true);
|
||||
Function.Call(Hash.FORCE_GAME_STATE_PLAYING);
|
||||
Function.Call(Hash.FORCE_GAME_STATE_PLAYING);
|
||||
Function.Call(Hash.TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME, "respawn_controller");
|
||||
if (P.IsDead)
|
||||
{
|
||||
Function.Call(Hash.SET_FADE_OUT_AFTER_DEATH, false);
|
||||
|
||||
|
||||
if (P.Health!=1)
|
||||
{
|
||||
P.Health=1;
|
||||
@ -184,7 +184,7 @@ namespace RageCoop.Client
|
||||
|
||||
Ticked++;
|
||||
}
|
||||
|
||||
|
||||
private void OnKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (MainChat.Focused)
|
||||
@ -241,7 +241,7 @@ namespace RageCoop.Client
|
||||
else if (e.KeyCode==Settings.PassengerKey)
|
||||
{
|
||||
var P = Game.Player.Character;
|
||||
|
||||
|
||||
if (!P.IsInVehicle())
|
||||
{
|
||||
if (P.IsTaskActive(TaskType.CTaskEnterVehicle))
|
||||
@ -350,7 +350,7 @@ namespace RageCoop.Client
|
||||
QueuedActions.Remove(action);
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error(ex);
|
||||
QueuedActions.Remove(action);
|
||||
@ -374,7 +374,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
lock (QueuedActions)
|
||||
{
|
||||
QueuedActions.Add(() => { a(); return true; }) ;
|
||||
QueuedActions.Add(() => { a(); return true; });
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -1,10 +1,8 @@
|
||||
using GTA;
|
||||
|
||||
using System.Drawing;
|
||||
|
||||
using LemonUI;
|
||||
using LemonUI.Menus;
|
||||
using LemonUI.Scaleform;
|
||||
using System.Drawing;
|
||||
|
||||
namespace RageCoop.Client.Menus
|
||||
{
|
||||
@ -19,7 +17,7 @@ namespace RageCoop.Client.Menus
|
||||
UseMouse = false,
|
||||
Alignment = Main.Settings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left
|
||||
};
|
||||
public static PopUp PopUp=new PopUp()
|
||||
public static PopUp PopUp = new PopUp()
|
||||
{
|
||||
Title="",
|
||||
Prompt="",
|
||||
@ -31,15 +29,16 @@ namespace RageCoop.Client.Menus
|
||||
public static NativeMenu LastMenu { get; set; } = Menu;
|
||||
#region ITEMS
|
||||
private static readonly NativeItem _usernameItem = new NativeItem("Username") { AltTitle = Main.Settings.Username };
|
||||
private static readonly NativeItem _passwordItem = new NativeItem("Password") { AltTitle = new string('*',Main.Settings.Password.Length) };
|
||||
private static readonly NativeItem _passwordItem = new NativeItem("Password") { AltTitle = new string('*', Main.Settings.Password.Length) };
|
||||
|
||||
public static readonly NativeItem ServerIpItem = new NativeItem("Server IP") { AltTitle = Main.Settings.LastServerAddress };
|
||||
internal static readonly NativeItem _serverConnectItem = new NativeItem("Connect");
|
||||
private static readonly NativeItem _aboutItem = new NativeItem("About", "~y~SOURCE~s~~n~" +
|
||||
"https://github.com/RAGECOOP~n~" +
|
||||
"~y~VERSION~s~~n~" +
|
||||
Main.CurrentVersion.Replace("_", ".")) { LeftBadge = new LemonUI.Elements.ScaledTexture("commonmenu", "shop_new_star") };
|
||||
|
||||
Main.CurrentVersion.Replace("_", "."))
|
||||
{ LeftBadge = new LemonUI.Elements.ScaledTexture("commonmenu", "shop_new_star") };
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
@ -84,7 +83,7 @@ namespace RageCoop.Client.Menus
|
||||
}
|
||||
|
||||
|
||||
public static bool ShowPopUp(string prompt, string title,string subtitle,string error,bool showbackground)
|
||||
public static bool ShowPopUp(string prompt, string title, string subtitle, string error, bool showbackground)
|
||||
{
|
||||
PopUp.Prompt=prompt;
|
||||
PopUp.Title=title;
|
||||
|
@ -1,18 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using LemonUI;
|
||||
using GTA;
|
||||
using LemonUI.Menus;
|
||||
using GTA;
|
||||
using System.Drawing;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal static class DebugMenu
|
||||
{
|
||||
public static NativeMenu Menu = new NativeMenu("RAGECOOP", "Debug", "Debug settings") {
|
||||
public static NativeMenu Menu = new NativeMenu("RAGECOOP", "Debug", "Debug settings")
|
||||
{
|
||||
UseMouse = false,
|
||||
Alignment = Main.Settings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left
|
||||
};
|
||||
@ -21,23 +16,23 @@ namespace RageCoop.Client
|
||||
UseMouse = false,
|
||||
Alignment = Main.Settings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left
|
||||
};
|
||||
private static NativeItem d1=new NativeItem("PositionPrediction");
|
||||
private static NativeItem d1 = new NativeItem("PositionPrediction");
|
||||
static DebugMenu()
|
||||
{
|
||||
Menu.Banner.Color = Color.FromArgb(225, 0, 0, 0);
|
||||
Menu.Title.Color = Color.FromArgb(255, 165, 0);
|
||||
|
||||
d1.Activated+=(sender,e) =>
|
||||
d1.Activated+=(sender, e) =>
|
||||
{
|
||||
try{ SyncParameters.PositioinPredictionDefault =float.Parse(Game.GetUserInput(WindowTitle.EnterMessage20, SyncParameters.PositioinPredictionDefault.ToString(), 20));}
|
||||
try { SyncParameters.PositioinPredictionDefault =float.Parse(Game.GetUserInput(WindowTitle.EnterMessage20, SyncParameters.PositioinPredictionDefault.ToString(), 20)); }
|
||||
catch { }
|
||||
Update();
|
||||
};
|
||||
|
||||
|
||||
|
||||
Menu.Add(d1);
|
||||
Menu.AddSubMenu(DiagnosticMenu);
|
||||
Menu.Opening+=(sender, e) =>Update();
|
||||
Menu.Opening+=(sender, e) => Update();
|
||||
DiagnosticMenu.Opening+=(sender, e) =>
|
||||
{
|
||||
DiagnosticMenu.Clear();
|
||||
@ -51,7 +46,7 @@ namespace RageCoop.Client
|
||||
Update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private static void Update()
|
||||
{
|
||||
|
@ -1,10 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using LemonUI.Menus;
|
||||
using GTA;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace RageCoop.Client
|
||||
@ -18,7 +14,7 @@ namespace RageCoop.Client
|
||||
};
|
||||
private static NativeCheckboxItem enableItem = new NativeCheckboxItem("Enable");
|
||||
|
||||
private static NativeCheckboxItem enableSecondaryItem = new NativeCheckboxItem("Secondary","Enable if this vehicle have two muzzles");
|
||||
private static NativeCheckboxItem enableSecondaryItem = new NativeCheckboxItem("Secondary", "Enable if this vehicle have two muzzles");
|
||||
public static NativeItem boneIndexItem = new NativeItem("Current bone index");
|
||||
public static NativeItem secondaryBoneIndexItem = new NativeItem("Secondary bone index");
|
||||
public static NativeItem clipboardItem = new NativeItem("Copy to clipboard");
|
||||
|
@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
using LemonUI.Menus;
|
||||
using Newtonsoft.Json;
|
||||
using LemonUI.Menus;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
|
||||
namespace RageCoop.Client.Menus
|
||||
@ -18,13 +18,13 @@ namespace RageCoop.Client.Menus
|
||||
|
||||
[JsonProperty("name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
|
||||
[JsonProperty("version")]
|
||||
public string Version { get; set; }
|
||||
|
||||
|
||||
[JsonProperty("players")]
|
||||
public int Players { get; set; }
|
||||
|
||||
|
||||
[JsonProperty("maxPlayers")]
|
||||
public int MaxPlayers { get; set; }
|
||||
|
||||
@ -59,7 +59,7 @@ namespace RageCoop.Client.Menus
|
||||
Menu.Add(ResultItem = new NativeItem("Loading..."));
|
||||
|
||||
// Prevent freezing
|
||||
GetServersThread=new Thread(()=> GetAllServers());
|
||||
GetServersThread=new Thread(() => GetAllServers());
|
||||
GetServersThread.Start();
|
||||
};
|
||||
Menu.Closing += (object sender, System.ComponentModel.CancelEventArgs e) =>
|
||||
@ -79,7 +79,7 @@ namespace RageCoop.Client.Menus
|
||||
List<ServerListClass> serverList = null;
|
||||
var realUrl = Main.Settings.MasterServer;
|
||||
serverList = JsonConvert.DeserializeObject<List<ServerListClass>>(DownloadString(realUrl));
|
||||
|
||||
|
||||
// Need to be processed in main thread
|
||||
Main.QueueAction(() =>
|
||||
{
|
||||
|
@ -1,8 +1,8 @@
|
||||
using System.Drawing;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using LemonUI.Menus;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace RageCoop.Client.Menus
|
||||
{
|
||||
@ -22,10 +22,10 @@ namespace RageCoop.Client.Menus
|
||||
private static readonly NativeCheckboxItem _disablePauseAlt = new NativeCheckboxItem("Disable Alternate Pause", "Don't freeze game time when Esc pressed", Main.Settings.DisableTraffic);
|
||||
|
||||
private static readonly NativeCheckboxItem _showNetworkInfoItem = new NativeCheckboxItem("Show Network Info", Networking.ShowNetworkInfo);
|
||||
|
||||
private static NativeItem _menuKey = new NativeItem("Menu Key","The key to open menu", Main.Settings.MenuKey.ToString());
|
||||
|
||||
private static NativeItem _menuKey = new NativeItem("Menu Key", "The key to open menu", Main.Settings.MenuKey.ToString());
|
||||
private static NativeItem _passengerKey = new NativeItem("Passenger Key", "The key to enter a vehicle as passenger", Main.Settings.PassengerKey.ToString());
|
||||
private static NativeItem _vehicleSoftLimit = new NativeItem("Vehicle limit (soft)", "The game won't spawn more NPC traffic if the limit is exceeded. \n-1 for unlimited (not recommended).",Main.Settings.WorldVehicleSoftLimit.ToString());
|
||||
private static NativeItem _vehicleSoftLimit = new NativeItem("Vehicle limit (soft)", "The game won't spawn more NPC traffic if the limit is exceeded. \n-1 for unlimited (not recommended).", Main.Settings.WorldVehicleSoftLimit.ToString());
|
||||
|
||||
/// <summary>
|
||||
/// Don't use it!
|
||||
@ -102,7 +102,7 @@ namespace RageCoop.Client.Menus
|
||||
public static void DisableTrafficCheckboxChanged(object a, System.EventArgs b)
|
||||
{
|
||||
Main.Settings.DisableTraffic = _disableTrafficItem.Checked;
|
||||
Util.SaveSettings() ;
|
||||
Util.SaveSettings();
|
||||
}
|
||||
|
||||
public static void FlipMenuCheckboxChanged(object a, System.EventArgs b)
|
||||
|
@ -1,14 +1,10 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using LemonUI.Menus;
|
||||
using System.Web;
|
||||
using System.Net;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client.Menus
|
||||
{
|
||||
@ -16,7 +12,7 @@ namespace RageCoop.Client.Menus
|
||||
{
|
||||
public static bool IsUpdating { get; private set; } = false;
|
||||
private static NativeItem _updatingItem = new NativeItem("Updating...");
|
||||
private static NativeItem _downloadItem = new NativeItem("Download","Download and update to latest nightly");
|
||||
private static NativeItem _downloadItem = new NativeItem("Download", "Download and update to latest nightly");
|
||||
|
||||
private static string _downloadPath = Path.Combine(Main.Settings.DataDirectory, "RageCoop.Client.zip");
|
||||
public static NativeMenu Menu = new NativeMenu("Update", "Update", "Download and install latest nightly build from GitHub")
|
||||
@ -68,7 +64,7 @@ namespace RageCoop.Client.Menus
|
||||
{
|
||||
_updatingItem.AltTitle="Installing...";
|
||||
});
|
||||
new FastZip().ExtractZip(_downloadPath, "Scripts",FastZip.Overwrite.Always, null,null,null,true);
|
||||
new FastZip().ExtractZip(_downloadPath, "Scripts", FastZip.Overwrite.Always, null, null, null, true);
|
||||
Main.QueueAction(() =>
|
||||
{
|
||||
Util.Reload();
|
||||
|
@ -1,10 +1,9 @@
|
||||
using System;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -106,7 +105,7 @@ namespace RageCoop.Client
|
||||
CurrentInput = "";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (key == Keys.PageUp)
|
||||
{
|
||||
MainScaleForm.CallFunction("PAGE_UP");
|
||||
|
@ -1,8 +1,8 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using RageCoop.Core;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -22,7 +22,7 @@ namespace RageCoop.Client
|
||||
return new Packets.FileTransferResponse()
|
||||
{
|
||||
ID= fr.ID,
|
||||
Response=AddFile(fr.ID,fr.Name,fr.FileLength) ? FileResponse.NeedToDownload : FileResponse.AlreadyExists
|
||||
Response=AddFile(fr.ID, fr.Name, fr.FileLength) ? FileResponse.NeedToDownload : FileResponse.AlreadyExists
|
||||
};
|
||||
});
|
||||
Networking.RequestHandlers.Add(PacketType.FileTransferComplete, (data) =>
|
||||
@ -44,10 +44,10 @@ namespace RageCoop.Client
|
||||
{
|
||||
try
|
||||
{
|
||||
Main.Resources.Load(ResourceFolder,_resources.ToArray());
|
||||
Main.Resources.Load(ResourceFolder, _resources.ToArray());
|
||||
return new Packets.FileTransferResponse() { ID=0, Response=FileResponse.Loaded };
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Main.Logger.Error("Error occurred when loading server resource:");
|
||||
@ -56,11 +56,13 @@ namespace RageCoop.Client
|
||||
}
|
||||
});
|
||||
}
|
||||
public static string ResourceFolder {
|
||||
get {
|
||||
return Path.Combine(Main.Settings.DataDirectory,"Resources", Main.Settings.LastServerAddress.Replace(":", "."));
|
||||
public static string ResourceFolder
|
||||
{
|
||||
get
|
||||
{
|
||||
return Path.Combine(Main.Settings.DataDirectory, "Resources", Main.Settings.LastServerAddress.Replace(":", "."));
|
||||
}
|
||||
}
|
||||
}
|
||||
private static readonly Dictionary<int, DownloadFile> InProgressDownloads = new Dictionary<int, DownloadFile>();
|
||||
private static readonly HashSet<string> _resources = new HashSet<string>();
|
||||
public static bool AddFile(int id, string name, long length)
|
||||
@ -173,7 +175,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
}
|
||||
|
||||
internal class DownloadFile: IDisposable
|
||||
internal class DownloadFile : IDisposable
|
||||
{
|
||||
public int FileID { get; set; } = 0;
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
@ -182,7 +184,7 @@ namespace RageCoop.Client
|
||||
public FileStream Stream { get; set; }
|
||||
public void Dispose()
|
||||
{
|
||||
if(Stream!= null)
|
||||
if (Stream!= null)
|
||||
{
|
||||
Stream.Flush();
|
||||
Stream.Close();
|
||||
|
@ -1,10 +1,9 @@
|
||||
using System;
|
||||
using Lidgren.Network;
|
||||
using Lidgren.Network;
|
||||
using RageCoop.Core;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -34,7 +33,7 @@ namespace RageCoop.Client
|
||||
});
|
||||
}
|
||||
|
||||
public static void ToggleConnection(string address,string username=null,string password=null)
|
||||
public static void ToggleConnection(string address, string username = null, string password = null)
|
||||
{
|
||||
if (IsOnServer)
|
||||
{
|
||||
@ -79,12 +78,12 @@ namespace RageCoop.Client
|
||||
Main.QueueAction(() => { GTA.UI.Notification.Show($"~y~Trying to connect..."); });
|
||||
Menus.CoopMenu._serverConnectItem.Enabled=false;
|
||||
Security.Regen();
|
||||
if(!GetServerPublicKey(address))
|
||||
if (!GetServerPublicKey(address))
|
||||
{
|
||||
Menus.CoopMenu._serverConnectItem.Enabled=true;
|
||||
throw new TimeoutException("Failed to retrive server's public key");
|
||||
}
|
||||
|
||||
|
||||
// Send HandshakePacket
|
||||
NetOutgoingMessage outgoingMessage = Client.CreateMessage();
|
||||
var handshake = new Packets.Handshake()
|
||||
@ -100,7 +99,7 @@ namespace RageCoop.Client
|
||||
Client.Connect(ip[0], short.Parse(ip[1]), outgoingMessage);
|
||||
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
Main.Logger.Error("Cannot connect to server: ", ex);
|
||||
Main.QueueAction(() => GTA.UI.Notification.Show("Cannot connect to server: "+ex.Message));
|
||||
@ -113,7 +112,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
get { return Client?.ConnectionStatus == NetConnectionStatus.Connected; }
|
||||
}
|
||||
|
||||
|
||||
#region -- GET --
|
||||
#region -- PLAYER --
|
||||
private static void PlayerConnect(Packets.PlayerConnect packet)
|
||||
@ -130,7 +129,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
private static void PlayerDisconnect(Packets.PlayerDisconnect packet)
|
||||
{
|
||||
var name=PlayerList.GetPlayer(packet.PedID).Username;
|
||||
var name = PlayerList.GetPlayer(packet.PedID).Username;
|
||||
GTA.UI.Notification.Show($"{name} left.");
|
||||
PlayerList.RemovePlayer(packet.PedID);
|
||||
EntityPool.RemoveAllFromPlayer(packet.PedID);
|
||||
@ -140,13 +139,13 @@ namespace RageCoop.Client
|
||||
|
||||
#endregion // -- PLAYER --
|
||||
|
||||
private static bool GetServerPublicKey(string address,int timeout=10000)
|
||||
private static bool GetServerPublicKey(string address, int timeout = 10000)
|
||||
{
|
||||
var msg=Client.CreateMessage();
|
||||
new Packets.PublicKeyRequest().Pack(msg);
|
||||
var adds =address.Split(':');
|
||||
Client.SendUnconnectedMessage(msg,adds[0],int.Parse(adds[1]));
|
||||
return _publicKeyReceived.WaitOne(timeout);
|
||||
var msg = Client.CreateMessage();
|
||||
new Packets.PublicKeyRequest().Pack(msg);
|
||||
var adds = address.Split(':');
|
||||
Client.SendUnconnectedMessage(msg, adds[0], int.Parse(adds[1]));
|
||||
return _publicKeyReceived.WaitOne(timeout);
|
||||
}
|
||||
#endregion
|
||||
internal static void GetResponse<T>(Packet request, Action<T> callback, ConnectionChannel channel = ConnectionChannel.RequestResponse) where T : Packet, new()
|
||||
|
@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using GTA;
|
||||
using Lidgren.Network;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using RageCoop.Client.Menus;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace RageCoop.Client
|
||||
@ -24,15 +24,15 @@ namespace RageCoop.Client
|
||||
return EntityPool.ServerBlips[reader.ReadInt()].Handle;
|
||||
default:
|
||||
throw new ArgumentException("Cannot resolve server side argument: "+t);
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
private static readonly AutoResetEvent _publicKeyReceived=new AutoResetEvent(false);
|
||||
private static readonly AutoResetEvent _publicKeyReceived = new AutoResetEvent(false);
|
||||
private static readonly Dictionary<int, Action<PacketType, byte[]>> PendingResponses = new Dictionary<int, Action<PacketType, byte[]>>();
|
||||
internal static readonly Dictionary<PacketType, Func< byte[], Packet>> RequestHandlers = new Dictionary<PacketType, Func< byte[], Packet>>();
|
||||
internal static readonly Dictionary<PacketType, Func<byte[], Packet>> RequestHandlers = new Dictionary<PacketType, Func<byte[], Packet>>();
|
||||
public static void ProcessMessage(NetIncomingMessage message)
|
||||
{
|
||||
if(message == null) { return; }
|
||||
if (message == null) { return; }
|
||||
|
||||
switch (message.MessageType)
|
||||
{
|
||||
@ -49,7 +49,8 @@ namespace RageCoop.Client
|
||||
#endif
|
||||
break;
|
||||
case NetConnectionStatus.Connected:
|
||||
Main.QueueAction(() => {
|
||||
Main.QueueAction(() =>
|
||||
{
|
||||
CoopMenu.ConnectedMenuSetting();
|
||||
Main.MainChat.Init();
|
||||
PlayerList.Cleanup();
|
||||
@ -80,8 +81,8 @@ namespace RageCoop.Client
|
||||
Main.QueueAction(() =>
|
||||
GTA.UI.Notification.Show("~r~Disconnected: " + reason));
|
||||
Main.Resources.Unload();
|
||||
|
||||
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -119,7 +120,7 @@ namespace RageCoop.Client
|
||||
response.Write((byte)PacketType.Response);
|
||||
response.Write(id);
|
||||
handler(message.ReadBytes(len)).Pack(response);
|
||||
Client.SendMessage(response, NetDeliveryMethod.ReliableOrdered,message.SequenceChannel);
|
||||
Client.SendMessage(response, NetDeliveryMethod.ReliableOrdered, message.SequenceChannel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -134,7 +135,8 @@ namespace RageCoop.Client
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Main.QueueAction(() => {
|
||||
Main.QueueAction(() =>
|
||||
{
|
||||
GTA.UI.Notification.Show("~r~~h~Packet Error");
|
||||
return true;
|
||||
});
|
||||
@ -154,12 +156,12 @@ namespace RageCoop.Client
|
||||
byte[] data = message.ReadBytes(len);
|
||||
if (packetType==PacketType.PublicKeyResponse)
|
||||
{
|
||||
var packet=new Packets.PublicKeyResponse();
|
||||
var packet = new Packets.PublicKeyResponse();
|
||||
packet.Unpack(data);
|
||||
Security.SetServerPublicKey(packet.Modulus,packet.Exponent);
|
||||
Security.SetServerPublicKey(packet.Modulus, packet.Exponent);
|
||||
_publicKeyReceived.Set();
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case NetIncomingMessageType.DebugMessage:
|
||||
@ -326,11 +328,11 @@ namespace RageCoop.Client
|
||||
c.BlipScale=packet.BlipScale;
|
||||
c.LastFullSynced = Main.Ticked;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
private static void VehicleSync(Packets.VehicleSync packet)
|
||||
{
|
||||
SyncedVehicle v = EntityPool.GetVehicleByID(packet.ID);
|
||||
SyncedVehicle v = EntityPool.GetVehicleByID(packet.ID);
|
||||
if (v==null)
|
||||
{
|
||||
EntityPool.ThreadSafe.Add(v=new SyncedVehicle(packet.ID));
|
||||
|
@ -1,8 +1,8 @@
|
||||
using Lidgren.Network;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA.Native;
|
||||
using Lidgren.Network;
|
||||
using RageCoop.Core;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -24,10 +24,10 @@ namespace RageCoop.Client
|
||||
Client.SendMessage(outgoingMessage, method, (int)channel);
|
||||
}
|
||||
|
||||
public static void SendPed(SyncedPed c,bool full)
|
||||
public static void SendPed(SyncedPed c, bool full)
|
||||
{
|
||||
Ped p = c.MainPed;
|
||||
var packet=new Packets.PedSync()
|
||||
var packet = new Packets.PedSync()
|
||||
{
|
||||
ID =c.ID,
|
||||
OwnerID=c.OwnerID,
|
||||
@ -81,7 +81,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
Send(packet, ConnectionChannel.PedSync);
|
||||
}
|
||||
public static void SendVehicle(SyncedVehicle v,bool full)
|
||||
public static void SendVehicle(SyncedVehicle v, bool full)
|
||||
{
|
||||
Vehicle veh = v.MainVehicle;
|
||||
var packet = new Packets.VehicleSync()
|
||||
@ -123,7 +123,7 @@ namespace RageCoop.Client
|
||||
packet.RadioStation=Util.GetPlayerRadioIndex();
|
||||
}
|
||||
}
|
||||
Send(packet,ConnectionChannel.VehicleSync);
|
||||
Send(packet, ConnectionChannel.VehicleSync);
|
||||
}
|
||||
public static void SendProjectile(SyncedProjectile sp)
|
||||
{
|
||||
@ -138,13 +138,13 @@ namespace RageCoop.Client
|
||||
WeaponHash=(uint)p.WeaponHash,
|
||||
Exploded=p.IsDead
|
||||
};
|
||||
if (p.IsDead) { EntityPool.RemoveProjectile(sp.ID,"Dead"); }
|
||||
if (p.IsDead) { EntityPool.RemoveProjectile(sp.ID, "Dead"); }
|
||||
Send(packet, ConnectionChannel.ProjectileSync);
|
||||
}
|
||||
|
||||
|
||||
#region SYNC EVENTS
|
||||
public static void SendBulletShot(Vector3 start,Vector3 end,uint weapon,int ownerID)
|
||||
public static void SendBulletShot(Vector3 start, Vector3 end, uint weapon, int ownerID)
|
||||
{
|
||||
Send(new Packets.BulletShot()
|
||||
{
|
||||
|
@ -1,15 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal static class Statistics
|
||||
{
|
||||
public static int BytesDownPerSecond{ get; private set; }
|
||||
public static int BytesDownPerSecond { get; private set; }
|
||||
public static int BytesUpPerSecond { get; private set; }
|
||||
static Statistics()
|
||||
{
|
||||
@ -17,7 +13,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var bu=Networking.Client.Statistics.SentBytes;
|
||||
var bu = Networking.Client.Statistics.SentBytes;
|
||||
var bd = Networking.Client.Statistics.ReceivedBytes;
|
||||
Thread.Sleep(1000);
|
||||
BytesUpPerSecond=Networking.Client.Statistics.SentBytes-bu;
|
||||
|
@ -1,9 +1,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -16,7 +14,7 @@ namespace RageCoop.Client
|
||||
public static ulong Pressed { get; set; }
|
||||
|
||||
public static bool LeftAlign = true;
|
||||
public static Dictionary<int,PlayerData> Players=new Dictionary<int, PlayerData> { };
|
||||
public static Dictionary<int, PlayerData> Players = new Dictionary<int, PlayerData> { };
|
||||
public static void Tick()
|
||||
{
|
||||
if (!Networking.IsOnServer)
|
||||
@ -26,7 +24,7 @@ namespace RageCoop.Client
|
||||
|
||||
if ((Util.GetTickCount64() - _lastUpdate) >= 1000)
|
||||
{
|
||||
Update( Main.Settings.Username);
|
||||
Update(Main.Settings.Username);
|
||||
}
|
||||
|
||||
if ((Util.GetTickCount64() - Pressed) < 5000 && !Main.MainChat.Focused
|
||||
@ -35,14 +33,14 @@ namespace RageCoop.Client
|
||||
#endif
|
||||
)
|
||||
{
|
||||
Function.Call(Hash.DRAW_SCALEFORM_MOVIE, _mainScaleform.Handle,
|
||||
Function.Call(Hash.DRAW_SCALEFORM_MOVIE, _mainScaleform.Handle,
|
||||
LeftAlign ? LEFT_POSITION : RIGHT_POSITION, 0.3f,
|
||||
0.28f, 0.6f,
|
||||
255, 255, 255, 255, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Update( string localUsername)
|
||||
private static void Update(string localUsername)
|
||||
{
|
||||
_lastUpdate = Util.GetTickCount64();
|
||||
|
||||
@ -50,7 +48,7 @@ namespace RageCoop.Client
|
||||
_mainScaleform.CallFunction("SET_DATA_SLOT", 0, $"{Networking.Latency * 1000:N0}ms", localUsername, 116, 0, 0, "", "", 2, "", "", ' ');
|
||||
|
||||
int i = 1;
|
||||
|
||||
|
||||
foreach (var player in Players)
|
||||
{
|
||||
_mainScaleform.CallFunction("SET_DATA_SLOT", i++, $"{player.Value.Latency * 1000:N0}ms", player.Value.Username, 116, 0, i - 1, "", "", 2, "", "", ' ');
|
||||
@ -59,11 +57,11 @@ namespace RageCoop.Client
|
||||
_mainScaleform.CallFunction("SET_TITLE", "Player list", $"{Players.Count+1} players");
|
||||
_mainScaleform.CallFunction("DISPLAY_VIEW");
|
||||
}
|
||||
public static void SetPlayer(int id, string username,float latency=0)
|
||||
public static void SetPlayer(int id, string username, float latency = 0)
|
||||
{
|
||||
|
||||
|
||||
PlayerData p;
|
||||
if (Players.TryGetValue(id,out p))
|
||||
if (Players.TryGetValue(id, out p))
|
||||
{
|
||||
p.Username=username;
|
||||
p.PedID=id;
|
||||
@ -71,21 +69,21 @@ namespace RageCoop.Client
|
||||
}
|
||||
else
|
||||
{
|
||||
p = new PlayerData { PedID=id, Username=username,Latency=latency };
|
||||
Players.Add(id,p);
|
||||
p = new PlayerData { PedID=id, Username=username, Latency=latency };
|
||||
Players.Add(id, p);
|
||||
}
|
||||
}
|
||||
public static void UpdatePlayer(Packets.PlayerInfoUpdate packet)
|
||||
{
|
||||
var p = GetPlayer(packet.PedID);
|
||||
if(p?.Character != null)
|
||||
if (p?.Character != null)
|
||||
{
|
||||
p.Latency= packet.Latency;
|
||||
}
|
||||
}
|
||||
public static PlayerData GetPlayer(int id)
|
||||
{
|
||||
PlayerData p;
|
||||
PlayerData p;
|
||||
Players.TryGetValue(id, out p);
|
||||
return p;
|
||||
}
|
||||
@ -107,12 +105,12 @@ namespace RageCoop.Client
|
||||
}
|
||||
public static void Cleanup()
|
||||
{
|
||||
Players=new Dictionary<int, PlayerData>{ };
|
||||
Players=new Dictionary<int, PlayerData> { };
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
internal class PlayerData
|
||||
{
|
||||
public string Username { get; internal set; }
|
||||
|
@ -1,5 +1,4 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
|
@ -1,10 +1,9 @@
|
||||
#undef DEBUG
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using RageCoop.Core;
|
||||
using System.Windows.Forms;
|
||||
using GTA;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace RageCoop.Client.Scripting
|
||||
{
|
||||
@ -64,7 +63,7 @@ namespace RageCoop.Client.Scripting
|
||||
/// Get or set player's blip sprite
|
||||
/// </summary>
|
||||
public static BlipSprite BlipSprite { get; set; } = BlipSprite.Standard;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get or set scale of player's blip
|
||||
/// </summary>
|
||||
@ -136,16 +135,16 @@ namespace RageCoop.Client.Scripting
|
||||
internal static void InvokePlayerDied() { OnPlayerDied?.Invoke(); }
|
||||
internal static void InvokeTick() { OnTick?.Invoke(); }
|
||||
|
||||
internal static void InvokeKeyDown(object s,KeyEventArgs e) { OnKeyDown?.Invoke(s,e); }
|
||||
internal static void InvokeKeyDown(object s, KeyEventArgs e) { OnKeyDown?.Invoke(s, e); }
|
||||
|
||||
internal static void InvokeKeyUp(object s, KeyEventArgs e) { OnKeyUp?.Invoke(s, e); }
|
||||
|
||||
internal static void InvokeCustomEventReceived(Packets.CustomEvent p)
|
||||
{
|
||||
var args = new CustomEventReceivedArgs() { Hash=p.Hash, Args=p.Args};
|
||||
var args = new CustomEventReceivedArgs() { Hash=p.Hash, Args=p.Args };
|
||||
|
||||
// Main.Logger.Debug($"CustomEvent:\n"+args.Args.DumpWithType());
|
||||
|
||||
|
||||
List<Action<CustomEventReceivedArgs>> handlers;
|
||||
if (CustomEventHandlers.TryGetValue(p.Hash, out handlers))
|
||||
{
|
||||
@ -279,12 +278,12 @@ namespace RageCoop.Client.Scripting
|
||||
handlers.Add(handler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static void RequestSharedFile(string name,Action<string> callback)
|
||||
public static void RequestSharedFile(string name, Action<string> callback)
|
||||
{
|
||||
EventHandler<string> handler = (s, e) =>
|
||||
{
|
||||
@ -297,10 +296,10 @@ namespace RageCoop.Client.Scripting
|
||||
Networking.GetResponse<Packets.FileTransferResponse>(new Packets.FileTransferRequest()
|
||||
{
|
||||
Name=name,
|
||||
},
|
||||
},
|
||||
(p) =>
|
||||
{
|
||||
if(p.Response != FileResponse.Loaded)
|
||||
if (p.Response != FileResponse.Loaded)
|
||||
{
|
||||
DownloadManager.DownloadCompleted-=handler;
|
||||
throw new ArgumentException("Requested file was not found on the server: "+name);
|
||||
|
@ -1,27 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA;
|
||||
using RageCoop.Core;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core.Scripting;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client.Scripting
|
||||
{
|
||||
internal class BaseScript : ClientScript
|
||||
{
|
||||
private bool _isHost=false;
|
||||
private bool _isHost = false;
|
||||
public override void OnStart()
|
||||
{
|
||||
API.Events.OnPedDeleted+=(s, p) => { API.SendCustomEvent(CustomEvents.OnPedDeleted, p.ID); };
|
||||
API.Events.OnVehicleDeleted+=(s, p) => { API.SendCustomEvent(CustomEvents.OnVehicleDeleted, p.ID); };
|
||||
|
||||
API.RegisterCustomEventHandler(CustomEvents.SetAutoRespawn,SetAutoRespawn);
|
||||
API.RegisterCustomEventHandler(CustomEvents.SetDisplayNameTag,SetDisplayNameTag);
|
||||
API.RegisterCustomEventHandler(CustomEvents.NativeCall,NativeCall);
|
||||
API.RegisterCustomEventHandler(CustomEvents.SetAutoRespawn, SetAutoRespawn);
|
||||
API.RegisterCustomEventHandler(CustomEvents.SetDisplayNameTag, SetDisplayNameTag);
|
||||
API.RegisterCustomEventHandler(CustomEvents.NativeCall, NativeCall);
|
||||
API.RegisterCustomEventHandler(CustomEvents.ServerPropSync, ServerObjectSync);
|
||||
API.RegisterCustomEventHandler(CustomEvents.DeleteServerProp, DeleteServerProp);
|
||||
API.RegisterCustomEventHandler(CustomEvents.DeleteEntity, DeleteEntity);
|
||||
@ -66,7 +64,7 @@ namespace RageCoop.Client.Scripting
|
||||
private void SetDisplayNameTag(CustomEventReceivedArgs e)
|
||||
{
|
||||
var p = PlayerList.GetPlayer((int)e.Args[0]);
|
||||
if(p != null) { p.DisplayNameTag=(bool)e.Args[1]; }
|
||||
if (p != null) { p.DisplayNameTag=(bool)e.Args[1]; }
|
||||
}
|
||||
|
||||
private void UpdatePedBlip(CustomEventReceivedArgs e)
|
||||
@ -93,7 +91,7 @@ namespace RageCoop.Client.Scripting
|
||||
{
|
||||
var vehicleModel = (Model)e.Args[1];
|
||||
vehicleModel.Request(1000);
|
||||
Vehicle veh= World.CreateVehicle(vehicleModel, (Vector3)e.Args[2], (float)e.Args[3]);
|
||||
Vehicle veh = World.CreateVehicle(vehicleModel, (Vector3)e.Args[2], (float)e.Args[3]);
|
||||
while (veh==null)
|
||||
{
|
||||
veh = World.CreateVehicle(vehicleModel, (Vector3)e.Args[2], (float)e.Args[3]);
|
||||
@ -120,13 +118,13 @@ namespace RageCoop.Client.Scripting
|
||||
|
||||
private void ServerBlipSync(CustomEventReceivedArgs obj)
|
||||
{
|
||||
int id= (int)obj.Args[0];
|
||||
var sprite=(BlipSprite)(ushort)obj.Args[1];
|
||||
int id = (int)obj.Args[0];
|
||||
var sprite = (BlipSprite)(ushort)obj.Args[1];
|
||||
var color = (BlipColor)(byte)obj.Args[2];
|
||||
var scale=(float)obj.Args[3];
|
||||
var pos=(Vector3)obj.Args[4];
|
||||
int rot= (int)obj.Args[5];
|
||||
var name=(string)obj.Args[6];
|
||||
var scale = (float)obj.Args[3];
|
||||
var pos = (Vector3)obj.Args[4];
|
||||
int rot = (int)obj.Args[5];
|
||||
var name = (string)obj.Args[6];
|
||||
Blip blip;
|
||||
if (!EntityPool.ServerBlips.TryGetValue(id, out blip))
|
||||
{
|
||||
@ -151,8 +149,8 @@ namespace RageCoop.Client.Scripting
|
||||
}
|
||||
private void SetNameTag(CustomEventReceivedArgs e)
|
||||
{
|
||||
var p =PlayerList.GetPlayer((int)e.Args[0]);
|
||||
if(p!= null)
|
||||
var p = PlayerList.GetPlayer((int)e.Args[0]);
|
||||
if (p!= null)
|
||||
{
|
||||
p.DisplayNameTag=(bool)e.Args[1];
|
||||
}
|
||||
@ -169,7 +167,7 @@ namespace RageCoop.Client.Scripting
|
||||
EntityPool.ServerProps.Remove(id);
|
||||
prop?.MainProp?.Delete();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
private void ServerObjectSync(CustomEventReceivedArgs e)
|
||||
{
|
||||
@ -193,10 +191,10 @@ namespace RageCoop.Client.Scripting
|
||||
List<InputArgument> arguments = new List<InputArgument>();
|
||||
int i;
|
||||
var ty = (byte)e.Args[0];
|
||||
TypeCode returnType=(TypeCode)ty;
|
||||
TypeCode returnType = (TypeCode)ty;
|
||||
i = returnType==TypeCode.Empty ? 1 : 2;
|
||||
var hash = (Hash)e.Args[i++];
|
||||
for(; i<e.Args.Length;i++)
|
||||
for (; i<e.Args.Length; i++)
|
||||
{
|
||||
arguments.Add(GetInputArgument(e.Args[i]));
|
||||
}
|
||||
@ -300,6 +298,6 @@ namespace RageCoop.Client.Scripting
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,294 +1,295 @@
|
||||
using System.IO;
|
||||
using RageCoop.Core.Scripting;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using RageCoop.Core;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using RageCoop.Core.Scripting;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace RageCoop.Client.Scripting
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class ClientResource
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of the resource
|
||||
/// </summary>
|
||||
public string Name { get; internal set; }
|
||||
/// <summary>
|
||||
/// A resource-specific folder that can be used to store your files.
|
||||
/// </summary>
|
||||
public string DataFolder { get; internal set; }
|
||||
/// <summary>
|
||||
/// Get all <see cref="ClientScript"/> instance in this resource.
|
||||
/// </summary>
|
||||
public List<ClientScript> Scripts { get; internal set; } = new List<ClientScript>();
|
||||
/// <summary>
|
||||
/// Get the <see cref="ResourceFile"/> where this script is loaded from.
|
||||
/// </summary>
|
||||
public Dictionary<string, ResourceFile> Files { get; internal set; } = new Dictionary<string, ResourceFile>();
|
||||
|
||||
/// <summary>
|
||||
/// A <see cref="Core.Logger"/> instance that can be used to debug your resource.
|
||||
/// </summary>
|
||||
public Logger Logger { get; internal set; }
|
||||
}
|
||||
internal class Resources
|
||||
{
|
||||
public Resources(){
|
||||
BaseScriptType = "RageCoop.Client.Scripting.ClientScript";
|
||||
Logger = Main.Logger;
|
||||
}
|
||||
private void StartAll()
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
foreach (var d in LoadedResources)
|
||||
{
|
||||
foreach (var s in d.Scripts)
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class ClientResource
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of the resource
|
||||
/// </summary>
|
||||
public string Name { get; internal set; }
|
||||
/// <summary>
|
||||
/// A resource-specific folder that can be used to store your files.
|
||||
/// </summary>
|
||||
public string DataFolder { get; internal set; }
|
||||
/// <summary>
|
||||
/// Get all <see cref="ClientScript"/> instance in this resource.
|
||||
/// </summary>
|
||||
public List<ClientScript> Scripts { get; internal set; } = new List<ClientScript>();
|
||||
/// <summary>
|
||||
/// Get the <see cref="ResourceFile"/> where this script is loaded from.
|
||||
/// </summary>
|
||||
public Dictionary<string, ResourceFile> Files { get; internal set; } = new Dictionary<string, ResourceFile>();
|
||||
|
||||
/// <summary>
|
||||
/// A <see cref="Core.Logger"/> instance that can be used to debug your resource.
|
||||
/// </summary>
|
||||
public Logger Logger { get; internal set; }
|
||||
}
|
||||
internal class Resources
|
||||
{
|
||||
public Resources()
|
||||
{
|
||||
BaseScriptType = "RageCoop.Client.Scripting.ClientScript";
|
||||
Logger = Main.Logger;
|
||||
}
|
||||
private void StartAll()
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
foreach (var d in LoadedResources)
|
||||
{
|
||||
foreach (var s in d.Scripts)
|
||||
{
|
||||
try
|
||||
{
|
||||
s.CurrentResource=d;
|
||||
s.OnStart();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Logger.Error("Error occurred when starting script:"+s.GetType().FullName);
|
||||
Logger?.Error(ex);
|
||||
s.CurrentResource=d;
|
||||
s.OnStart();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void StopAll()
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
foreach (var d in LoadedResources)
|
||||
{
|
||||
foreach (var s in d.Scripts)
|
||||
{
|
||||
try
|
||||
{
|
||||
s.OnStop();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error("Error occurred when stopping script:"+s.GetType().FullName);
|
||||
Logger?.Error(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Load(string path,string[] zips)
|
||||
{
|
||||
LoadedResources.Clear();
|
||||
foreach (var zip in zips)
|
||||
{
|
||||
var zipPath=Path.Combine(path, zip);
|
||||
Logger?.Info($"Loading resource: {Path.GetFileNameWithoutExtension(zip)}");
|
||||
LoadResource(new ZipFile(zipPath),Path.Combine(path,"data"));
|
||||
}
|
||||
StartAll();
|
||||
}
|
||||
public void Unload()
|
||||
{
|
||||
StopAll();
|
||||
if (LoadedResources.Count > 0)
|
||||
{
|
||||
API.QueueAction(()=>Util.Reload());
|
||||
}
|
||||
LoadedResources.Clear();
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error("Error occurred when starting script:"+s.GetType().FullName);
|
||||
Logger?.Error(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private List<string> ToIgnore = new List<string>
|
||||
{
|
||||
"RageCoop.Client.dll",
|
||||
"RageCoop.Core.dll",
|
||||
"RageCoop.Server.dll",
|
||||
"ScriptHookVDotNet3.dll"
|
||||
};
|
||||
private List<ClientResource> LoadedResources = new List<ClientResource>();
|
||||
private string BaseScriptType;
|
||||
public Logger Logger { get; set; }
|
||||
private void StopAll()
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
foreach (var d in LoadedResources)
|
||||
{
|
||||
foreach (var s in d.Scripts)
|
||||
{
|
||||
try
|
||||
{
|
||||
s.OnStop();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error("Error occurred when stopping script:"+s.GetType().FullName);
|
||||
Logger?.Error(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Load(string path, string[] zips)
|
||||
{
|
||||
LoadedResources.Clear();
|
||||
foreach (var zip in zips)
|
||||
{
|
||||
var zipPath = Path.Combine(path, zip);
|
||||
Logger?.Info($"Loading resource: {Path.GetFileNameWithoutExtension(zip)}");
|
||||
LoadResource(new ZipFile(zipPath), Path.Combine(path, "data"));
|
||||
}
|
||||
StartAll();
|
||||
}
|
||||
public void Unload()
|
||||
{
|
||||
StopAll();
|
||||
if (LoadedResources.Count > 0)
|
||||
{
|
||||
API.QueueAction(() => Util.Reload());
|
||||
}
|
||||
LoadedResources.Clear();
|
||||
}
|
||||
private List<string> ToIgnore = new List<string>
|
||||
{
|
||||
"RageCoop.Client.dll",
|
||||
"RageCoop.Core.dll",
|
||||
"RageCoop.Server.dll",
|
||||
"ScriptHookVDotNet3.dll"
|
||||
};
|
||||
private List<ClientResource> LoadedResources = new List<ClientResource>();
|
||||
private string BaseScriptType;
|
||||
public Logger Logger { get; set; }
|
||||
|
||||
private void LoadResource(ZipFile file, string dataFolderRoot)
|
||||
{
|
||||
var r = new ClientResource()
|
||||
{
|
||||
Logger = Main.Logger,
|
||||
Scripts = new List<ClientScript>(),
|
||||
Name=Path.GetFileNameWithoutExtension(file.Name),
|
||||
DataFolder=Path.Combine(dataFolderRoot, Path.GetFileNameWithoutExtension(file.Name))
|
||||
};
|
||||
Directory.CreateDirectory(r.DataFolder);
|
||||
private void LoadResource(ZipFile file, string dataFolderRoot)
|
||||
{
|
||||
var r = new ClientResource()
|
||||
{
|
||||
Logger = Main.Logger,
|
||||
Scripts = new List<ClientScript>(),
|
||||
Name=Path.GetFileNameWithoutExtension(file.Name),
|
||||
DataFolder=Path.Combine(dataFolderRoot, Path.GetFileNameWithoutExtension(file.Name))
|
||||
};
|
||||
Directory.CreateDirectory(r.DataFolder);
|
||||
|
||||
foreach (ZipEntry entry in file)
|
||||
{
|
||||
ResourceFile rFile;
|
||||
r.Files.Add(entry.Name, rFile=new ResourceFile()
|
||||
{
|
||||
Name=entry.Name,
|
||||
IsDirectory=entry.IsDirectory,
|
||||
});
|
||||
if (!entry.IsDirectory)
|
||||
{
|
||||
rFile.GetStream=() => { return file.GetInputStream(entry); };
|
||||
if (entry.Name.EndsWith(".dll"))
|
||||
{
|
||||
var tmp = Path.GetTempFileName();
|
||||
var f = File.OpenWrite(tmp);
|
||||
rFile.GetStream().CopyTo(f);
|
||||
f.Close();
|
||||
LoadScriptsFromAssembly(rFile, tmp, r, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
LoadedResources.Add(r);
|
||||
file.Close();
|
||||
}
|
||||
private bool LoadScriptsFromAssembly(ResourceFile file, string path, ClientResource resource, bool shadowCopy = true)
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
if (!IsManagedAssembly(path)) { return false; }
|
||||
if (ToIgnore.Contains(file.Name)) { try { File.Delete(path); } catch { }; return false; }
|
||||
foreach (ZipEntry entry in file)
|
||||
{
|
||||
ResourceFile rFile;
|
||||
r.Files.Add(entry.Name, rFile=new ResourceFile()
|
||||
{
|
||||
Name=entry.Name,
|
||||
IsDirectory=entry.IsDirectory,
|
||||
});
|
||||
if (!entry.IsDirectory)
|
||||
{
|
||||
rFile.GetStream=() => { return file.GetInputStream(entry); };
|
||||
if (entry.Name.EndsWith(".dll"))
|
||||
{
|
||||
var tmp = Path.GetTempFileName();
|
||||
var f = File.OpenWrite(tmp);
|
||||
rFile.GetStream().CopyTo(f);
|
||||
f.Close();
|
||||
LoadScriptsFromAssembly(rFile, tmp, r, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
LoadedResources.Add(r);
|
||||
file.Close();
|
||||
}
|
||||
private bool LoadScriptsFromAssembly(ResourceFile file, string path, ClientResource resource, bool shadowCopy = true)
|
||||
{
|
||||
lock (LoadedResources)
|
||||
{
|
||||
if (!IsManagedAssembly(path)) { return false; }
|
||||
if (ToIgnore.Contains(file.Name)) { try { File.Delete(path); } catch { }; return false; }
|
||||
|
||||
Logger?.Debug($"Loading assembly {file.Name} ...");
|
||||
Logger?.Debug($"Loading assembly {file.Name} ...");
|
||||
|
||||
Assembly assembly;
|
||||
Assembly assembly;
|
||||
|
||||
try
|
||||
{
|
||||
if (shadowCopy)
|
||||
{
|
||||
var temp = Path.GetTempFileName();
|
||||
File.Copy(path, temp, true);
|
||||
assembly = Assembly.LoadFrom(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
assembly = Assembly.LoadFrom(path);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger?.Error("Unable to load "+file.Name);
|
||||
Logger?.Error(ex);
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (shadowCopy)
|
||||
{
|
||||
var temp = Path.GetTempFileName();
|
||||
File.Copy(path, temp, true);
|
||||
assembly = Assembly.LoadFrom(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
assembly = Assembly.LoadFrom(path);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger?.Error("Unable to load "+file.Name);
|
||||
Logger?.Error(ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
return LoadScriptsFromAssembly(file, assembly, path, resource);
|
||||
}
|
||||
}
|
||||
private bool LoadScriptsFromAssembly(ResourceFile rfile, Assembly assembly, string filename, ClientResource toload)
|
||||
{
|
||||
int count = 0;
|
||||
return LoadScriptsFromAssembly(file, assembly, path, resource);
|
||||
}
|
||||
}
|
||||
private bool LoadScriptsFromAssembly(ResourceFile rfile, Assembly assembly, string filename, ClientResource toload)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
try
|
||||
{
|
||||
// Find all script types in the assembly
|
||||
foreach (var type in assembly.GetTypes().Where(x => IsSubclassOf(x, BaseScriptType)))
|
||||
{
|
||||
ConstructorInfo constructor = type.GetConstructor(System.Type.EmptyTypes);
|
||||
if (constructor != null && constructor.IsPublic)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Invoke script constructor
|
||||
var script = constructor.Invoke(null) as ClientScript;
|
||||
// script.CurrentResource = toload;
|
||||
script.CurrentFile=rfile;
|
||||
script.CurrentResource=toload;
|
||||
toload.Scripts.Add(script);
|
||||
count++;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger?.Error($"Error occurred when loading script: {type.FullName}.");
|
||||
Logger?.Error(ex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger?.Error($"Script {type.FullName} has an invalid contructor.");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ReflectionTypeLoadException ex)
|
||||
{
|
||||
Logger?.Error($"Failed to load assembly {rfile.Name}: ");
|
||||
Logger?.Error(ex);
|
||||
foreach (var e in ex.LoaderExceptions)
|
||||
{
|
||||
Logger?.Error(e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
// Find all script types in the assembly
|
||||
foreach (var type in assembly.GetTypes().Where(x => IsSubclassOf(x, BaseScriptType)))
|
||||
{
|
||||
ConstructorInfo constructor = type.GetConstructor(System.Type.EmptyTypes);
|
||||
if (constructor != null && constructor.IsPublic)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Invoke script constructor
|
||||
var script = constructor.Invoke(null) as ClientScript;
|
||||
// script.CurrentResource = toload;
|
||||
script.CurrentFile=rfile;
|
||||
script.CurrentResource=toload;
|
||||
toload.Scripts.Add(script);
|
||||
count++;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger?.Error($"Error occurred when loading script: {type.FullName}.");
|
||||
Logger?.Error(ex);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger?.Error($"Script {type.FullName} has an invalid contructor.");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ReflectionTypeLoadException ex)
|
||||
{
|
||||
Logger?.Error($"Failed to load assembly {rfile.Name}: ");
|
||||
Logger?.Error(ex);
|
||||
foreach (var e in ex.LoaderExceptions)
|
||||
{
|
||||
Logger?.Error(e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Logger?.Info($"Loaded {count} script(s) in {rfile.Name}");
|
||||
return count != 0;
|
||||
}
|
||||
private bool IsManagedAssembly(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Stream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
if (file.Length < 64)
|
||||
return false;
|
||||
Logger?.Info($"Loaded {count} script(s) in {rfile.Name}");
|
||||
return count != 0;
|
||||
}
|
||||
private bool IsManagedAssembly(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Stream file = new FileStream(filename, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
if (file.Length < 64)
|
||||
return false;
|
||||
|
||||
using (BinaryReader bin = new BinaryReader(file))
|
||||
{
|
||||
// PE header starts at offset 0x3C (60). Its a 4 byte header.
|
||||
file.Position = 0x3C;
|
||||
uint offset = bin.ReadUInt32();
|
||||
if (offset == 0)
|
||||
offset = 0x80;
|
||||
using (BinaryReader bin = new BinaryReader(file))
|
||||
{
|
||||
// PE header starts at offset 0x3C (60). Its a 4 byte header.
|
||||
file.Position = 0x3C;
|
||||
uint offset = bin.ReadUInt32();
|
||||
if (offset == 0)
|
||||
offset = 0x80;
|
||||
|
||||
// Ensure there is at least enough room for the following structures:
|
||||
// 24 byte PE Signature & Header
|
||||
// 28 byte Standard Fields (24 bytes for PE32+)
|
||||
// 68 byte NT Fields (88 bytes for PE32+)
|
||||
// >= 128 byte Data Dictionary Table
|
||||
if (offset > file.Length - 256)
|
||||
return false;
|
||||
// Ensure there is at least enough room for the following structures:
|
||||
// 24 byte PE Signature & Header
|
||||
// 28 byte Standard Fields (24 bytes for PE32+)
|
||||
// 68 byte NT Fields (88 bytes for PE32+)
|
||||
// >= 128 byte Data Dictionary Table
|
||||
if (offset > file.Length - 256)
|
||||
return false;
|
||||
|
||||
// Check the PE signature. Should equal 'PE\0\0'.
|
||||
file.Position = offset;
|
||||
if (bin.ReadUInt32() != 0x00004550)
|
||||
return false;
|
||||
// Check the PE signature. Should equal 'PE\0\0'.
|
||||
file.Position = offset;
|
||||
if (bin.ReadUInt32() != 0x00004550)
|
||||
return false;
|
||||
|
||||
// Read PE magic number from Standard Fields to determine format.
|
||||
file.Position += 20;
|
||||
var peFormat = bin.ReadUInt16();
|
||||
if (peFormat != 0x10b /* PE32 */ && peFormat != 0x20b /* PE32Plus */)
|
||||
return false;
|
||||
// Read PE magic number from Standard Fields to determine format.
|
||||
file.Position += 20;
|
||||
var peFormat = bin.ReadUInt16();
|
||||
if (peFormat != 0x10b /* PE32 */ && peFormat != 0x20b /* PE32Plus */)
|
||||
return false;
|
||||
|
||||
// Read the 15th Data Dictionary RVA field which contains the CLI header RVA.
|
||||
// When this is non-zero then the file contains CLI data otherwise not.
|
||||
file.Position = offset + (peFormat == 0x10b ? 232 : 248);
|
||||
return bin.ReadUInt32() != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// This is likely not a valid assembly if any IO exceptions occur during reading
|
||||
return false;
|
||||
}
|
||||
}
|
||||
private bool IsSubclassOf(Type type, string baseTypeName)
|
||||
{
|
||||
for (Type t = type.BaseType; t != null; t = t.BaseType)
|
||||
if (t.FullName == baseTypeName)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Read the 15th Data Dictionary RVA field which contains the CLI header RVA.
|
||||
// When this is non-zero then the file contains CLI data otherwise not.
|
||||
file.Position = offset + (peFormat == 0x10b ? 232 : 248);
|
||||
return bin.ReadUInt32() != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// This is likely not a valid assembly if any IO exceptions occur during reading
|
||||
return false;
|
||||
}
|
||||
}
|
||||
private bool IsSubclassOf(Type type, string baseTypeName)
|
||||
{
|
||||
for (Type t = type.BaseType; t != null; t = t.BaseType)
|
||||
if (t.FullName == baseTypeName)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,17 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Security.Cryptography;
|
||||
using RageCoop.Core;
|
||||
using System.IO;
|
||||
using RageCoop.Core;
|
||||
using System.Security.Cryptography;
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal class Security
|
||||
{
|
||||
public RSA ServerRSA { get; set; }
|
||||
public Aes ClientAes { get; set; }=Aes.Create();
|
||||
public Aes ClientAes { get; set; } = Aes.Create();
|
||||
private Logger Logger;
|
||||
public Security(Logger logger)
|
||||
{
|
||||
@ -19,17 +14,17 @@ namespace RageCoop.Client
|
||||
ClientAes.GenerateKey();
|
||||
ClientAes.GenerateIV();
|
||||
}
|
||||
public void GetSymmetricKeysCrypted(out byte[] cryptedKey,out byte[] cryptedIV)
|
||||
public void GetSymmetricKeysCrypted(out byte[] cryptedKey, out byte[] cryptedIV)
|
||||
{
|
||||
// Logger?.Debug($"Aes.Key:{ClientAes.Key.Dump()}, Aes.IV:{ClientAes.IV.Dump()}");
|
||||
cryptedKey =ServerRSA.Encrypt(ClientAes.Key, RSAEncryptionPadding.Pkcs1);
|
||||
cryptedIV =ServerRSA.Encrypt(ClientAes.IV,RSAEncryptionPadding.Pkcs1);
|
||||
cryptedIV =ServerRSA.Encrypt(ClientAes.IV, RSAEncryptionPadding.Pkcs1);
|
||||
}
|
||||
public byte[] Encrypt(byte[] data)
|
||||
{
|
||||
return new CryptoStream(new MemoryStream(data), ClientAes.CreateEncryptor(), CryptoStreamMode.Read).ReadToEnd();
|
||||
}
|
||||
public void SetServerPublicKey(byte[] modulus,byte[] exponent)
|
||||
public void SetServerPublicKey(byte[] modulus, byte[] exponent)
|
||||
{
|
||||
var para = new RSAParameters();
|
||||
para.Modulus = modulus;
|
||||
|
@ -42,7 +42,7 @@ namespace RageCoop.Client
|
||||
/// <summary>
|
||||
/// The key to enter a vehicle as passenger.
|
||||
/// </summary>
|
||||
public Keys PassengerKey { get; set; }=Keys.G;
|
||||
public Keys PassengerKey { get; set; } = Keys.G;
|
||||
|
||||
/// <summary>
|
||||
/// Disable world NPC traffic, mission entities won't be affected
|
||||
|
@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
|
||||
namespace RageCoop.Client
|
||||
@ -28,7 +23,7 @@ namespace RageCoop.Client
|
||||
/// <summary>
|
||||
/// Network ID for this entity
|
||||
/// </summary>
|
||||
public int ID { get;internal set; }
|
||||
public int ID { get; internal set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@ -45,7 +40,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
internal bool IsReady
|
||||
{
|
||||
get {return (LastSynced>0||LastFullSynced==0);}
|
||||
get { return (LastSynced>0||LastFullSynced==0); }
|
||||
}
|
||||
internal bool IsInvincible { get; set; } = false;
|
||||
internal bool NeedUpdate
|
||||
@ -67,10 +62,13 @@ namespace RageCoop.Client
|
||||
public ulong LastUpdated { get; set; } = 0;
|
||||
#endregion
|
||||
|
||||
public bool SendNextFrame { get; set; } = false;
|
||||
public bool SendFullNextFrame { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
internal protected bool _lastFrozen=false;
|
||||
internal protected bool _lastFrozen = false;
|
||||
internal Model Model { get; set; }
|
||||
internal Vector3 Position { get; set; }
|
||||
internal Vector3 Rotation { get; set; }
|
||||
|
@ -1,20 +1,19 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA.Native;
|
||||
using LemonUI.Elements;
|
||||
using System.Security.Cryptography;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// ?
|
||||
/// </summary>
|
||||
public class SyncedPed:SyncedEntity
|
||||
public class SyncedPed : SyncedEntity
|
||||
{
|
||||
#region CONSTRUCTORS
|
||||
|
||||
@ -49,7 +48,7 @@ namespace RageCoop.Client
|
||||
internal Blip PedBlip = null;
|
||||
internal BlipColor BlipColor = (BlipColor)255;
|
||||
internal BlipSprite BlipSprite = (BlipSprite)0;
|
||||
internal float BlipScale=1;
|
||||
internal float BlipScale = 1;
|
||||
internal PlayerData Player;
|
||||
#endregion
|
||||
|
||||
@ -69,10 +68,10 @@ namespace RageCoop.Client
|
||||
internal Vector3 LeftFootPosition { get; set; }
|
||||
|
||||
internal byte WeaponTint { get; set; }
|
||||
internal bool _lastEnteringVehicle=false;
|
||||
internal bool _lastSittingInVehicle=false;
|
||||
private bool _lastRagdoll=false;
|
||||
private ulong _lastRagdollTime=0;
|
||||
internal bool _lastEnteringVehicle = false;
|
||||
internal bool _lastSittingInVehicle = false;
|
||||
private bool _lastRagdoll = false;
|
||||
private ulong _lastRagdollTime = 0;
|
||||
private bool _lastInCover = false;
|
||||
private byte[] _lastClothes = null;
|
||||
internal byte[] Clothes { get; set; }
|
||||
@ -116,7 +115,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -168,9 +167,9 @@ namespace RageCoop.Client
|
||||
}
|
||||
CheckCurrentWeapon();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (MainPed.IsDead)
|
||||
{
|
||||
if (Health>0)
|
||||
@ -209,7 +208,7 @@ namespace RageCoop.Client
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void RenderNameTag()
|
||||
{
|
||||
if (!Player.DisplayNameTag || (MainPed==null) || !MainPed.IsVisible || !MainPed.IsInRange(Game.Player.Character.Position, 40f))
|
||||
@ -218,7 +217,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
|
||||
Vector3 targetPos = MainPed.Bones[Bone.IKHead].Position;
|
||||
Point toDraw=default;
|
||||
Point toDraw = default;
|
||||
if (Util.WorldToScreen(targetPos, ref toDraw))
|
||||
{
|
||||
toDraw.Y-=100;
|
||||
@ -228,7 +227,7 @@ namespace RageCoop.Client
|
||||
Alignment = GTA.UI.Alignment.Center
|
||||
}.Draw();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private bool CreateCharacter()
|
||||
@ -242,7 +241,7 @@ namespace RageCoop.Client
|
||||
MainPed.MarkAsNoLongerNeeded();
|
||||
MainPed.Delete();
|
||||
}
|
||||
|
||||
|
||||
MainPed = null;
|
||||
}
|
||||
|
||||
@ -264,7 +263,7 @@ namespace RageCoop.Client
|
||||
|
||||
Model.MarkAsNoLongerNeeded();
|
||||
|
||||
|
||||
|
||||
MainPed.BlockPermanentEvents = true;
|
||||
MainPed.CanWrithe=false;
|
||||
MainPed.CanBeDraggedOutOfVehicle = true;
|
||||
@ -282,7 +281,7 @@ namespace RageCoop.Client
|
||||
Function.Call(Hash.SET_PED_CAN_EVASIVE_DIVE, MainPed.Handle, false);
|
||||
|
||||
|
||||
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DrownsInWater,false);
|
||||
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DrownsInWater, false);
|
||||
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true);
|
||||
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableExplosionReactions, true);
|
||||
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_AvoidTearGas, false);
|
||||
@ -549,7 +548,7 @@ namespace RageCoop.Client
|
||||
else if (IsInCover)
|
||||
{
|
||||
|
||||
|
||||
|
||||
if (!_lastInCover)
|
||||
{
|
||||
Function.Call(Hash.TASK_STAY_IN_COVER, MainPed.Handle);
|
||||
@ -617,7 +616,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
_lastWeaponComponents = WeaponComponents;
|
||||
}
|
||||
if (Function.Call<int>(Hash.GET_PED_WEAPON_TINT_INDEX,MainPed,CurrentWeaponHash)!=WeaponTint)
|
||||
if (Function.Call<int>(Hash.GET_PED_WEAPON_TINT_INDEX, MainPed, CurrentWeaponHash)!=WeaponTint)
|
||||
{
|
||||
Function.Call<int>(Hash.SET_PED_WEAPON_TINT_INDEX, MainPed, CurrentWeaponHash, WeaponTint);
|
||||
}
|
||||
@ -627,7 +626,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
if (Velocity==default)
|
||||
{
|
||||
MainPed.Task.AimAt(AimCoords,1000);
|
||||
MainPed.Task.AimAt(AimCoords, 1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using RageCoop.Core;
|
||||
|
||||
@ -30,7 +25,7 @@ namespace RageCoop.Client
|
||||
Main.Logger.Warning($"Could not find owner for projectile:{Hash}");
|
||||
}
|
||||
}
|
||||
if(shooter != null)
|
||||
if (shooter != null)
|
||||
{
|
||||
if (shooter.MainPed!=null && (p.AttachedEntity==shooter.MainPed.Weapons.CurrentWeaponObject || p.AttachedEntity== shooter.MainPed))
|
||||
{
|
||||
@ -40,7 +35,7 @@ namespace RageCoop.Client
|
||||
ShooterID=shooter.ID;
|
||||
IsLocal=shooter.IsLocal;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
public SyncedProjectile(int id)
|
||||
{
|
||||
@ -52,20 +47,20 @@ namespace RageCoop.Client
|
||||
public bool Exploded { get; set; } = false;
|
||||
public Projectile MainProjectile { get; set; }
|
||||
public int ShooterID { get; set; }
|
||||
private SyncedPed Shooter { get;set; }
|
||||
private SyncedPed Shooter { get; set; }
|
||||
public Vector3 Origin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Invalid property for projectile.
|
||||
/// </summary>
|
||||
private new int OwnerID{ set { } }
|
||||
private new int OwnerID { set { } }
|
||||
public WeaponHash Hash { get; set; }
|
||||
private WeaponAsset Asset { get; set; }
|
||||
internal override void Update()
|
||||
{
|
||||
|
||||
// Skip update if no new sync message has arrived.
|
||||
if (!NeedUpdate){ return; }
|
||||
if (!NeedUpdate) { return; }
|
||||
|
||||
if (MainProjectile == null || !MainProjectile.Exists())
|
||||
{
|
||||
@ -81,7 +76,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
Asset=new WeaponAsset(Hash);
|
||||
if (!Asset.IsLoaded) { Asset.Request(); }
|
||||
World.ShootBullet(Position,Position+Velocity,(Shooter=EntityPool.GetPedByID(ShooterID))?.MainPed,Asset,0);
|
||||
World.ShootBullet(Position, Position+Velocity, (Shooter=EntityPool.GetPedByID(ShooterID))?.MainPed, Asset, 0);
|
||||
var ps = World.GetAllProjectiles();
|
||||
MainProjectile=ps[ps.Length-1];
|
||||
if (Hash==(WeaponHash)VehicleWeaponHash.Tank)
|
||||
|
@ -1,10 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -21,18 +15,21 @@ namespace RageCoop.Client
|
||||
/// The real entity
|
||||
/// </summary>
|
||||
public Prop MainProp { get; set; }
|
||||
internal new int OwnerID { get
|
||||
internal new int OwnerID
|
||||
{
|
||||
get
|
||||
{
|
||||
// alwayse owned by server
|
||||
return 0;
|
||||
} }
|
||||
}
|
||||
}
|
||||
internal override void Update()
|
||||
{
|
||||
|
||||
if (!NeedUpdate) { return; }
|
||||
if (MainProp== null || !MainProp.Exists())
|
||||
{
|
||||
MainProp=World.CreateProp(Model,Position,Rotation,false,false);
|
||||
MainProp=World.CreateProp(Model, Position, Rotation, false, false);
|
||||
MainProp.IsInvincible=true;
|
||||
}
|
||||
MainProp.Position=Position;
|
||||
|
@ -1,14 +1,11 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -50,8 +47,8 @@ namespace RageCoop.Client
|
||||
/// <summary>
|
||||
/// VehicleSeat,ID
|
||||
/// </summary>
|
||||
public Vehicle MainVehicle { get;internal set; }
|
||||
public Stopwatch LastSyncedStopWatch=new Stopwatch();
|
||||
public Vehicle MainVehicle { get; internal set; }
|
||||
public Stopwatch LastSyncedStopWatch = new Stopwatch();
|
||||
|
||||
|
||||
#region LAST STATE
|
||||
@ -99,7 +96,7 @@ namespace RageCoop.Client
|
||||
internal byte[] Colors { get; set; }
|
||||
internal Dictionary<int, int> Mods { get; set; }
|
||||
internal float EngineHealth { get; set; }
|
||||
internal VehicleLockStatus LockStatus{get;set;}
|
||||
internal VehicleLockStatus LockStatus { get; set; }
|
||||
/// <summary>
|
||||
/// VehicleSeat,PedID
|
||||
/// </summary>
|
||||
@ -113,11 +110,11 @@ namespace RageCoop.Client
|
||||
#endregion
|
||||
internal override void Update()
|
||||
{
|
||||
|
||||
|
||||
#region -- INITIAL CHECK --
|
||||
|
||||
// Check if all data avalible
|
||||
if(!IsReady) { return; }
|
||||
if (!IsReady) { return; }
|
||||
#endregion
|
||||
#region -- CHECK EXISTENCE --
|
||||
if ((MainVehicle == null) || (!MainVehicle.Exists()) || (MainVehicle.Model.Hash != Model))
|
||||
@ -322,7 +319,7 @@ namespace RageCoop.Client
|
||||
|
||||
if (Function.Call<string>(Hash.GET_VEHICLE_NUMBER_PLATE_TEXT, MainVehicle)!=LicensePlate)
|
||||
{
|
||||
Function.Call(Hash.SET_VEHICLE_NUMBER_PLATE_TEXT,MainVehicle,LicensePlate);
|
||||
Function.Call(Hash.SET_VEHICLE_NUMBER_PLATE_TEXT, MainVehicle, LicensePlate);
|
||||
}
|
||||
|
||||
if (_lastLivery!=Livery)
|
||||
@ -346,7 +343,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
else if (current.DistanceTo(Position)<5)
|
||||
{
|
||||
MainVehicle.Velocity = Velocity+5*( predicted - current);
|
||||
MainVehicle.Velocity = Velocity+5*(predicted - current);
|
||||
if (IsFlipped)
|
||||
{
|
||||
MainVehicle.Quaternion=Quaternion.Slerp(MainVehicle.Quaternion, Quaternion, 0.5f);
|
||||
@ -375,12 +372,12 @@ namespace RageCoop.Client
|
||||
}
|
||||
private Vector3 GetCalibrationRotation()
|
||||
{
|
||||
var rot=Quaternion.LookRotation(Quaternion*Vector3.RelativeFront, Quaternion*Vector3.RelativeTop).ToEulerAngles();
|
||||
var curRot=Quaternion.LookRotation(MainVehicle.Quaternion*Vector3.RelativeFront, MainVehicle.Quaternion*Vector3.RelativeTop).ToEulerAngles();
|
||||
|
||||
var rot = Quaternion.LookRotation(Quaternion*Vector3.RelativeFront, Quaternion*Vector3.RelativeTop).ToEulerAngles();
|
||||
var curRot = Quaternion.LookRotation(MainVehicle.Quaternion*Vector3.RelativeFront, MainVehicle.Quaternion*Vector3.RelativeTop).ToEulerAngles();
|
||||
|
||||
var r = (rot-curRot).ToDegree();
|
||||
if (r.X>180) { r.X=r.X-360; }
|
||||
else if(r.X<-180) { r.X=360+r.X; }
|
||||
else if (r.X<-180) { r.X=360+r.X; }
|
||||
|
||||
if (r.Y>180) { r.Y=r.Y-360; }
|
||||
else if (r.Y<-180) { r.Y=360+r.Y; }
|
||||
@ -388,7 +385,7 @@ namespace RageCoop.Client
|
||||
if (r.Z>180) { r.Z=r.Z-360; }
|
||||
else if (r.Z<-180) { r.Z=360+r.Z; }
|
||||
return r;
|
||||
|
||||
|
||||
}
|
||||
private bool CreateVehicle()
|
||||
{
|
||||
|
@ -1,14 +1,10 @@
|
||||
|
||||
using System;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using RageCoop.Client.Scripting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using RageCoop.Client.Scripting;
|
||||
using System.Text;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace RageCoop.Client
|
||||
@ -36,16 +32,16 @@ namespace RageCoop.Client
|
||||
private static Dictionary<int, SyncedProjectile> ID_Projectiles = new Dictionary<int, SyncedProjectile>();
|
||||
private static Dictionary<int, SyncedProjectile> Handle_Projectiles = new Dictionary<int, SyncedProjectile>();
|
||||
|
||||
public static object PropsLock=new object();
|
||||
public static Dictionary<int,SyncedProp> ServerProps=new Dictionary<int,SyncedProp>();
|
||||
public static object PropsLock = new object();
|
||||
public static Dictionary<int, SyncedProp> ServerProps = new Dictionary<int, SyncedProp>();
|
||||
|
||||
public static object BlipsLock = new object();
|
||||
public static Dictionary<int, Blip> ServerBlips = new Dictionary<int, Blip>();
|
||||
|
||||
|
||||
public static void Cleanup(bool keepPlayer=true,bool keepMine=true)
|
||||
public static void Cleanup(bool keepPlayer = true, bool keepMine = true)
|
||||
{
|
||||
foreach(int id in new List<int>(ID_Peds.Keys))
|
||||
foreach (int id in new List<int>(ID_Peds.Keys))
|
||||
{
|
||||
if (keepPlayer&&(id==Main.LocalPlayerID)) { continue; }
|
||||
if (keepMine&&(ID_Peds[id].OwnerID==Main.LocalPlayerID)) { continue; }
|
||||
@ -62,7 +58,7 @@ namespace RageCoop.Client
|
||||
ID_Vehicles.Clear();
|
||||
Handle_Vehicles.Clear();
|
||||
|
||||
foreach(var p in ID_Projectiles.Values)
|
||||
foreach (var p in ID_Projectiles.Values)
|
||||
{
|
||||
if (p.ShooterID!=Main.LocalPlayerID && p.MainProjectile!=null && p.MainProjectile.Exists())
|
||||
{
|
||||
@ -72,13 +68,13 @@ namespace RageCoop.Client
|
||||
ID_Projectiles.Clear();
|
||||
Handle_Projectiles.Clear();
|
||||
|
||||
foreach(var p in ServerProps.Values)
|
||||
foreach (var p in ServerProps.Values)
|
||||
{
|
||||
p?.MainProp?.Delete();
|
||||
}
|
||||
ServerProps.Clear();
|
||||
|
||||
foreach(var b in ServerBlips.Values)
|
||||
foreach (var b in ServerBlips.Values)
|
||||
{
|
||||
if (b.Exists())
|
||||
{
|
||||
@ -113,10 +109,10 @@ namespace RageCoop.Client
|
||||
player.MainPed = p;
|
||||
|
||||
// Remove it from Handle_Characters
|
||||
var pairs=Handle_Peds.Where(x=>x.Value==player);
|
||||
var pairs = Handle_Peds.Where(x => x.Value==player);
|
||||
if (pairs.Any())
|
||||
{
|
||||
var pair=pairs.First();
|
||||
var pair = pairs.First();
|
||||
|
||||
// Re-add
|
||||
Handle_Peds.Remove(pair.Key);
|
||||
@ -135,7 +131,7 @@ namespace RageCoop.Client
|
||||
Main.LocalPlayerID=c.OwnerID=c.ID;
|
||||
Add(c);
|
||||
Main.Logger.Debug($"Local player ID is:{c.ID}");
|
||||
PlayerList.SetPlayer(c.ID, Main.Settings.Username );
|
||||
PlayerList.SetPlayer(c.ID, Main.Settings.Username);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -164,7 +160,7 @@ namespace RageCoop.Client
|
||||
API.Events.InvokePedSpawned(c);
|
||||
}
|
||||
}
|
||||
public static void RemovePed(int id,string reason="Cleanup")
|
||||
public static void RemovePed(int id, string reason = "Cleanup")
|
||||
{
|
||||
if (ID_Peds.ContainsKey(id))
|
||||
{
|
||||
@ -231,7 +227,7 @@ namespace RageCoop.Client
|
||||
API.Events.InvokeVehicleSpawned(v);
|
||||
}
|
||||
}
|
||||
public static void RemoveVehicle(int id,string reason = "Cleanup")
|
||||
public static void RemoveVehicle(int id, string reason = "Cleanup")
|
||||
{
|
||||
if (ID_Vehicles.ContainsKey(id))
|
||||
{
|
||||
@ -319,9 +315,9 @@ namespace RageCoop.Client
|
||||
static int vehStatesPerFrame;
|
||||
static int pedStatesPerFrame;
|
||||
static int i;
|
||||
public static Ped[] allPeds=new Ped[0];
|
||||
public static Vehicle[] allVehicles=new Vehicle[0];
|
||||
public static Projectile[] allProjectiles=new Projectile[0];
|
||||
public static Ped[] allPeds = new Ped[0];
|
||||
public static Vehicle[] allVehicles = new Vehicle[0];
|
||||
public static Projectile[] allProjectiles = new Projectile[0];
|
||||
|
||||
public static void DoSync()
|
||||
{
|
||||
@ -358,7 +354,7 @@ namespace RageCoop.Client
|
||||
if (!Handle_Projectiles.ContainsKey(p.Handle))
|
||||
{
|
||||
Add(new SyncedProjectile(p));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -399,7 +395,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
i=-1;
|
||||
|
||||
lock (PedsLock)
|
||||
@ -497,13 +493,13 @@ namespace RageCoop.Client
|
||||
var type = veh.PopulationType;
|
||||
if (type==EntityPopulationType.RandomAmbient || type==EntityPopulationType.RandomParked)
|
||||
{
|
||||
foreach(var p in veh.Occupants)
|
||||
foreach (var p in veh.Occupants)
|
||||
{
|
||||
p.Delete();
|
||||
var c = EntityPool.GetPedByHandle(p.Handle);
|
||||
if (c!=null)
|
||||
{
|
||||
EntityPool.RemovePed(c.ID,"ThrottleTraffic");
|
||||
EntityPool.RemovePed(c.ID, "ThrottleTraffic");
|
||||
}
|
||||
}
|
||||
veh.Delete();
|
||||
@ -532,7 +528,7 @@ namespace RageCoop.Client
|
||||
i++;
|
||||
if ((v.MainVehicle!=null)&&(!v.MainVehicle.Exists()))
|
||||
{
|
||||
EntityPool.RemoveVehicle(v.ID,"non-existent");
|
||||
EntityPool.RemoveVehicle(v.ID, "non-existent");
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -570,7 +566,7 @@ namespace RageCoop.Client
|
||||
|
||||
public static void RemoveAllFromPlayer(int playerPedId)
|
||||
{
|
||||
foreach(SyncedPed p in ID_Peds.Values.ToArray())
|
||||
foreach (SyncedPed p in ID_Peds.Values.ToArray())
|
||||
{
|
||||
if (p.OwnerID==playerPedId)
|
||||
{
|
||||
@ -588,10 +584,10 @@ namespace RageCoop.Client
|
||||
|
||||
public static int RequestNewID()
|
||||
{
|
||||
int ID=0;
|
||||
while ((ID==0)
|
||||
|| ID_Peds.ContainsKey(ID)
|
||||
|| ID_Vehicles.ContainsKey(ID)
|
||||
int ID = 0;
|
||||
while ((ID==0)
|
||||
|| ID_Peds.ContainsKey(ID)
|
||||
|| ID_Vehicles.ContainsKey(ID)
|
||||
|| ID_Projectiles.ContainsKey(ID))
|
||||
{
|
||||
byte[] rngBytes = new byte[4];
|
||||
@ -610,7 +606,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
public static string DumpDebug()
|
||||
{
|
||||
string s= "";
|
||||
string s = "";
|
||||
s+="\nID_Peds: "+ID_Peds.Count;
|
||||
s+="\nHandle_Peds: "+Handle_Peds.Count;
|
||||
s+="\nID_Vehicles: "+ID_Vehicles.Count;
|
||||
|
@ -1,24 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using RageCoop.Core;
|
||||
using GTA.Native;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client {
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal static class SyncEvents
|
||||
{
|
||||
#region TRIGGER
|
||||
public static void TriggerPedKilled(SyncedPed victim)
|
||||
{
|
||||
Networking.Send(new Packets.PedKilled() { VictimID=victim.ID},ConnectionChannel.SyncEvents);
|
||||
Networking.Send(new Packets.PedKilled() { VictimID=victim.ID }, ConnectionChannel.SyncEvents);
|
||||
}
|
||||
|
||||
public static void TriggerEnteringVehicle(SyncedPed c,SyncedVehicle veh, VehicleSeat seat)
|
||||
public static void TriggerEnteringVehicle(SyncedPed c, SyncedVehicle veh, VehicleSeat seat)
|
||||
{
|
||||
Networking.
|
||||
Send(new Packets.EnteringVehicle()
|
||||
@ -42,7 +39,7 @@ namespace RageCoop.Client {
|
||||
VehicleSeat=(short)seat,
|
||||
PedID=c.ID,
|
||||
VehicleID=veh.ID
|
||||
},ConnectionChannel.SyncEvents);
|
||||
}, ConnectionChannel.SyncEvents);
|
||||
}
|
||||
|
||||
public static void TriggerChangeOwner(SyncedVehicle c, int newOwnerID)
|
||||
@ -56,7 +53,7 @@ namespace RageCoop.Client {
|
||||
|
||||
}
|
||||
|
||||
public static void TriggerBulletShot(uint hash,SyncedPed owner,Vector3 impactPosition)
|
||||
public static void TriggerBulletShot(uint hash, SyncedPed owner, Vector3 impactPosition)
|
||||
{
|
||||
// Main.Logger.Trace($"bullet shot:{(WeaponHash)hash}");
|
||||
|
||||
@ -84,18 +81,18 @@ namespace RageCoop.Client {
|
||||
// ANNIHL
|
||||
if (veh.Model.Hash==837858166)
|
||||
{
|
||||
Networking.SendBulletShot(veh.Bones[35].Position, veh.Bones[35].Position+veh.Bones[35].ForwardVector,hash,owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[36].Position, veh.Bones[36].Position+veh.Bones[36].ForwardVector,hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[37].Position, veh.Bones[37].Position+veh.Bones[37].ForwardVector,hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[38].Position, veh.Bones[38].Position+veh.Bones[38].ForwardVector,hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[35].Position, veh.Bones[35].Position+veh.Bones[35].ForwardVector, hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[36].Position, veh.Bones[36].Position+veh.Bones[36].ForwardVector, hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[37].Position, veh.Bones[37].Position+veh.Bones[37].ForwardVector, hash, owner.ID);
|
||||
Networking.SendBulletShot(veh.Bones[38].Position, veh.Bones[38].Position+veh.Bones[38].ForwardVector, hash, owner.ID);
|
||||
return;
|
||||
}
|
||||
|
||||
var info = veh.GetMuzzleInfo();
|
||||
if (info==null) { Main.Logger.Warning($"Failed to get muzzle info for vehicle:{veh.DisplayName}");return; }
|
||||
Networking.SendBulletShot(info.Position,info.Position+info.ForawardVector,hash,owner.ID);
|
||||
if (info==null) { Main.Logger.Warning($"Failed to get muzzle info for vehicle:{veh.DisplayName}"); return; }
|
||||
Networking.SendBulletShot(info.Position, info.Position+info.ForawardVector, hash, owner.ID);
|
||||
}
|
||||
public static void TriggerNozzleTransform(int vehID,bool hover)
|
||||
public static void TriggerNozzleTransform(int vehID, bool hover)
|
||||
{
|
||||
Networking.Send(new Packets.NozzleTransform() { VehicleID=vehID, Hover=hover }, ConnectionChannel.SyncEvents);
|
||||
}
|
||||
@ -117,9 +114,9 @@ namespace RageCoop.Client {
|
||||
var flag = LeaveVehicleFlags.None;
|
||||
if (ped.MainPed?.CurrentVehicle==null) { return; }
|
||||
// Bail out
|
||||
if (ped.MainPed.CurrentVehicle.Speed>5) { flag|=LeaveVehicleFlags.BailOut;}
|
||||
if (ped.MainPed.CurrentVehicle.Speed>5) { flag|=LeaveVehicleFlags.BailOut; }
|
||||
// ped.PauseUpdate((ulong)Game.FPS*2);
|
||||
ped.MainPed.Task.LeaveVehicle(flag) ;
|
||||
ped.MainPed.Task.LeaveVehicle(flag);
|
||||
Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
@ -132,7 +129,7 @@ namespace RageCoop.Client {
|
||||
}
|
||||
private static void HandleEnteringVehicle(SyncedPed c, SyncedVehicle veh, VehicleSeat seat)
|
||||
{
|
||||
c.MainPed?.Task.EnterVehicle(veh.MainVehicle, seat,-1,2,EnterVehicleFlags.WarpToDoor|EnterVehicleFlags.AllowJacking);
|
||||
c.MainPed?.Task.EnterVehicle(veh.MainVehicle, seat, -1, 2, EnterVehicleFlags.WarpToDoor|EnterVehicleFlags.AllowJacking);
|
||||
}
|
||||
private static void HandleEnteredVehicle(int pedId, int vehId, VehicleSeat seat)
|
||||
{
|
||||
@ -190,10 +187,10 @@ namespace RageCoop.Client {
|
||||
case 1638077257:
|
||||
weaponHash=(uint)VehicleWeaponHash.PlayerLazer;
|
||||
break;
|
||||
|
||||
|
||||
case (uint)VehicleWeaponHash.PlayerBuzzard:
|
||||
weaponHash=1176362416;
|
||||
break ;
|
||||
break;
|
||||
}
|
||||
|
||||
var p = EntityPool.GetPedByID(ownerID)?.MainPed;
|
||||
@ -208,7 +205,7 @@ namespace RageCoop.Client {
|
||||
if (!_weaponAsset.IsLoaded) { _weaponAsset.Request(); }
|
||||
World.ShootBullet(start, end, p, _weaponAsset, (int)p.GetWeaponDamage(weaponHash));
|
||||
Prop w;
|
||||
if(((w = p.Weapons.CurrentWeaponObject) != null)&&(p.VehicleWeapon==VehicleWeaponHash.Invalid))
|
||||
if (((w = p.Weapons.CurrentWeaponObject) != null)&&(p.VehicleWeapon==VehicleWeaponHash.Invalid))
|
||||
{
|
||||
if (p.Weapons.Current.Components.GetSuppressorComponent().Active)
|
||||
{
|
||||
@ -228,7 +225,7 @@ namespace RageCoop.Client {
|
||||
}
|
||||
}
|
||||
}
|
||||
public static void HandleEvent(PacketType type,byte[] data)
|
||||
public static void HandleEvent(PacketType type, byte[] data)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
@ -273,7 +270,7 @@ namespace RageCoop.Client {
|
||||
{
|
||||
var packet = new Packets.EnteredVehicle();
|
||||
packet.Unpack(data);
|
||||
HandleEnteredVehicle(packet.PedID,packet.VehicleID,(VehicleSeat)packet.VehicleSeat);
|
||||
HandleEnteredVehicle(packet.PedID, packet.VehicleID, (VehicleSeat)packet.VehicleSeat);
|
||||
break;
|
||||
}
|
||||
case PacketType.NozzleTransform:
|
||||
@ -313,16 +310,16 @@ namespace RageCoop.Client {
|
||||
{
|
||||
if (subject.IsOnTurretSeat())
|
||||
{
|
||||
TriggerBulletShot((uint)subject.VehicleWeapon, subject.GetSyncEntity(), endPos);
|
||||
TriggerBulletShot((uint)subject.VehicleWeapon, c, endPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle,c);
|
||||
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle, c);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerBulletShot((uint)subject.Weapons.Current.Hash, subject.GetSyncEntity(), endPos);
|
||||
TriggerBulletShot((uint)subject.Weapons.Current.Hash, c, endPos);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -335,16 +332,16 @@ namespace RageCoop.Client {
|
||||
{
|
||||
if (subject.IsOnTurretSeat())
|
||||
{
|
||||
TriggerBulletShot((uint)subject.VehicleWeapon, subject.GetSyncEntity(), endPos);
|
||||
TriggerBulletShot((uint)subject.VehicleWeapon, c, endPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle,c);
|
||||
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle, c);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TriggerBulletShot((uint)subject.Weapons.Current.Hash, subject.GetSyncEntity(), endPos);
|
||||
TriggerBulletShot((uint)subject.Weapons.Current.Hash, c, endPos);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -358,20 +355,20 @@ namespace RageCoop.Client {
|
||||
}
|
||||
else if (subject.VehicleWeapon==VehicleWeaponHash.Tank && subject.LastWeaponImpactPosition!=default)
|
||||
{
|
||||
TriggerBulletShot((uint)VehicleWeaponHash.Tank, subject.GetSyncEntity(),subject.LastWeaponImpactPosition);
|
||||
TriggerBulletShot((uint)VehicleWeaponHash.Tank, c, subject.LastWeaponImpactPosition);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Vehicles
|
||||
var g = subject.IsGettingIntoVehicle;
|
||||
if ( g && (!c._lastEnteringVehicle))
|
||||
{
|
||||
if (g && (!c._lastEnteringVehicle))
|
||||
{
|
||||
var v = subject.VehicleTryingToEnter.GetSyncEntity();
|
||||
TriggerEnteringVehicle(c, v, subject.GetSeatTryingToEnter());
|
||||
}
|
||||
var currentSitting= subject.IsSittingInVehicle();
|
||||
var currentSitting = subject.IsSittingInVehicle();
|
||||
if (c._lastSittingInVehicle)
|
||||
{
|
||||
if (!currentSitting)
|
||||
@ -391,18 +388,18 @@ namespace RageCoop.Client {
|
||||
c._lastSittingInVehicle=currentSitting;
|
||||
c._lastEnteringVehicle=g;
|
||||
}
|
||||
|
||||
|
||||
public static void Check(SyncedVehicle v)
|
||||
{
|
||||
if (v.MainVehicle!=null&&v.MainVehicle.HasNozzle())
|
||||
{
|
||||
if((v.LastNozzleAngle==1) && (v.MainVehicle.GetNozzleAngel()!=1))
|
||||
if ((v.LastNozzleAngle==1) && (v.MainVehicle.GetNozzleAngel()!=1))
|
||||
{
|
||||
TriggerNozzleTransform(v.ID,false);
|
||||
TriggerNozzleTransform(v.ID, false);
|
||||
}
|
||||
else if((v.LastNozzleAngle==0) && (v.MainVehicle.GetNozzleAngel()!=0))
|
||||
else if ((v.LastNozzleAngle==0) && (v.MainVehicle.GetNozzleAngel()!=0))
|
||||
{
|
||||
TriggerNozzleTransform(v.ID,true);
|
||||
TriggerNozzleTransform(v.ID, true);
|
||||
}
|
||||
v.LastNozzleAngle=v.MainVehicle.GetNozzleAngel();
|
||||
}
|
||||
|
@ -1,10 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal class SyncParameters
|
||||
{
|
||||
|
@ -1,471 +1,465 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RageCoop.Client
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
// Potential names and hash collisions included as comments
|
||||
internal enum PedConfigFlags
|
||||
{
|
||||
_0x67D1A445 = 0,
|
||||
_0xC63DE95E = 1,
|
||||
CPED_CONFIG_FLAG_NoCriticalHits = 2,
|
||||
CPED_CONFIG_FLAG_DrownsInWater = 3,
|
||||
CPED_CONFIG_FLAG_DisableReticuleFixedLockon = 4,
|
||||
_0x37D196F4 = 5,
|
||||
_0xE2462399 = 6,
|
||||
CPED_CONFIG_FLAG_UpperBodyDamageAnimsOnly = 7,
|
||||
_0xEDDEB838 = 8,
|
||||
_0xB398B6FD = 9,
|
||||
_0xF6664E68 = 10,
|
||||
_0xA05E7CA3 = 11,
|
||||
_0xCE394045 = 12,
|
||||
CPED_CONFIG_FLAG_NeverLeavesGroup = 13,
|
||||
_0xCD8D1411 = 14,
|
||||
_0xB031F1A9 = 15,
|
||||
_0xFE65BEE3 = 16,
|
||||
CPED_CONFIG_FLAG_BlockNonTemporaryEvents = 17,
|
||||
_0x380165BD = 18,
|
||||
_0x07C045C7 = 19,
|
||||
_0x583B5E2D = 20,
|
||||
_0x475EDA58 = 21,
|
||||
_0x8629D05B = 22,
|
||||
_0x1522968B = 23,
|
||||
CPED_CONFIG_FLAG_IgnoreSeenMelee = 24,
|
||||
_0x4CC09C4B = 25,
|
||||
_0x034F3053 = 26,
|
||||
_0xD91BA7CC = 27,
|
||||
_0x5C8DC66E = 28,
|
||||
_0x8902EAA0 = 29,
|
||||
_0x6580B9D2 = 30,
|
||||
_0x0EF7A297 = 31,
|
||||
_0x6BF86E5B = 32,
|
||||
CPED_CONFIG_FLAG_DieWhenRagdoll = 33,
|
||||
CPED_CONFIG_FLAG_HasHelmet = 34,
|
||||
CPED_CONFIG_FLAG_UseHelmet = 35,
|
||||
_0xEEB3D630 = 36,
|
||||
_0xB130D17B = 37,
|
||||
_0x5F071200 = 38,
|
||||
CPED_CONFIG_FLAG_DisableEvasiveDives = 39,
|
||||
_0xC287AAFF = 40,
|
||||
_0x203328CC = 41,
|
||||
CPED_CONFIG_FLAG_DontInfluenceWantedLevel = 42,
|
||||
CPED_CONFIG_FLAG_DisablePlayerLockon = 43,
|
||||
CPED_CONFIG_FLAG_DisableLockonToRandomPeds = 44,
|
||||
_0xEC4A8ACF = 45,
|
||||
_0xDB115BFA = 46,
|
||||
CPED_CONFIG_FLAG_PedBeingDeleted = 47,
|
||||
CPED_CONFIG_FLAG_BlockWeaponSwitching = 48,
|
||||
_0xF8E99565 = 49,
|
||||
_0xDD17FEE6 = 50,
|
||||
_0x7ED9B2C9 = 51,
|
||||
_0x655E8618 = 52,
|
||||
_0x5A6C1F6E = 53,
|
||||
_0xD749FC41 = 54,
|
||||
_0x357F63F3 = 55,
|
||||
_0xC5E60961 = 56,
|
||||
_0x29275C3E = 57,
|
||||
CPED_CONFIG_FLAG_IsFiring = 58,
|
||||
CPED_CONFIG_FLAG_WasFiring = 59,
|
||||
CPED_CONFIG_FLAG_IsStanding = 60,
|
||||
CPED_CONFIG_FLAG_WasStanding = 61,
|
||||
CPED_CONFIG_FLAG_InVehicle = 62,
|
||||
CPED_CONFIG_FLAG_OnMount = 63,
|
||||
CPED_CONFIG_FLAG_AttachedToVehicle = 64,
|
||||
CPED_CONFIG_FLAG_IsSwimming = 65,
|
||||
CPED_CONFIG_FLAG_WasSwimming = 66,
|
||||
CPED_CONFIG_FLAG_IsSkiing = 67,
|
||||
CPED_CONFIG_FLAG_IsSitting = 68,
|
||||
CPED_CONFIG_FLAG_KilledByStealth = 69,
|
||||
CPED_CONFIG_FLAG_KilledByTakedown = 70,
|
||||
CPED_CONFIG_FLAG_Knockedout = 71,
|
||||
_0x3E3C4560 = 72,
|
||||
_0x2994C7B7 = 73,
|
||||
_0x6D59D275 = 74,
|
||||
CPED_CONFIG_FLAG_UsingCoverPoint = 75,
|
||||
CPED_CONFIG_FLAG_IsInTheAir = 76,
|
||||
_0x2D493FB7 = 77,
|
||||
CPED_CONFIG_FLAG_IsAimingGun = 78,
|
||||
_0x14D69875 = 79,
|
||||
_0x40B05311 = 80,
|
||||
_0x8B230BC5 = 81,
|
||||
_0xC74E5842 = 82,
|
||||
_0x9EA86147 = 83,
|
||||
_0x674C746C = 84,
|
||||
_0x3E56A8C2 = 85,
|
||||
_0xC144A1EF = 86,
|
||||
_0x0548512D = 87,
|
||||
_0x31C93909 = 88,
|
||||
_0xA0269315 = 89,
|
||||
_0xD4D59D4D = 90,
|
||||
_0x411D4420 = 91,
|
||||
_0xDF4AEF0D = 92,
|
||||
CPED_CONFIG_FLAG_ForcePedLoadCover = 93,
|
||||
_0x300E4CD3 = 94,
|
||||
_0xF1C5BF04 = 95,
|
||||
_0x89C2EF13 = 96,
|
||||
CPED_CONFIG_FLAG_VaultFromCover = 97,
|
||||
_0x02A852C8 = 98,
|
||||
_0x3D9407F1 = 99,
|
||||
_0x319B4558 = 100,
|
||||
CPED_CONFIG_FLAG_ForcedAim = 101,
|
||||
_0xB942D71A = 102,
|
||||
_0xD26C55A8 = 103,
|
||||
_0xB89E703B = 104,
|
||||
CPED_CONFIG_FLAG_ForceReload = 105,
|
||||
_0xD9E73DA2 = 106,
|
||||
_0xFF71DC2C = 107,
|
||||
_0x1E27E8D8 = 108,
|
||||
_0xF2C53966 = 109,
|
||||
_0xC4DBE247 = 110,
|
||||
_0x83C0A4BF = 111,
|
||||
_0x0E0FAF8C = 112,
|
||||
_0x26616660 = 113,
|
||||
_0x43B80B79 = 114,
|
||||
_0x0D2A9309 = 115,
|
||||
_0x12C1C983 = 116,
|
||||
CPED_CONFIG_FLAG_BumpedByPlayer = 117,
|
||||
_0xE586D504 = 118,
|
||||
_0x52374204 = 119,
|
||||
CPED_CONFIG_FLAG_IsHandCuffed = 120,
|
||||
CPED_CONFIG_FLAG_IsAnkleCuffed = 121,
|
||||
CPED_CONFIG_FLAG_DisableMelee = 122,
|
||||
_0xFE714397 = 123,
|
||||
_0xB3E660BD = 124,
|
||||
_0x5FED6BFD = 125,
|
||||
_0xC9D6F66F = 126,
|
||||
_0x519BC986 = 127,
|
||||
CPED_CONFIG_FLAG_CanBeAgitated = 128,
|
||||
_0x9A4B617C = 129, // CPED_CONFIG_FLAG_FaceDirInsult
|
||||
_0xDAB70E9F = 130,
|
||||
_0xE569438A = 131,
|
||||
_0xBBC77D6D = 132,
|
||||
_0xCB59EF0F = 133,
|
||||
_0x8C5EA971 = 134,
|
||||
CPED_CONFIG_FLAG_IsScuba = 135,
|
||||
CPED_CONFIG_FLAG_WillArrestRatherThanJack = 136,
|
||||
_0xDCE59B58 = 137,
|
||||
CPED_CONFIG_FLAG_RidingTrain = 138,
|
||||
CPED_CONFIG_FLAG_ArrestResult = 139,
|
||||
CPED_CONFIG_FLAG_CanAttackFriendly = 140,
|
||||
_0x98A4BE43 = 141,
|
||||
_0x6901E731 = 142,
|
||||
_0x9EC9BF6C = 143,
|
||||
_0x42841A8F = 144,
|
||||
CPED_CONFIG_FLAG_ShootingAnimFlag = 145,
|
||||
CPED_CONFIG_FLAG_DisableLadderClimbing = 146,
|
||||
CPED_CONFIG_FLAG_StairsDetected = 147,
|
||||
CPED_CONFIG_FLAG_SlopeDetected = 148,
|
||||
_0x1A15670B = 149,
|
||||
_0x61786EE5 = 150,
|
||||
_0xCB9186BD = 151,
|
||||
_0xF0710152 = 152,
|
||||
_0x43DFE310 = 153,
|
||||
_0xC43C624E = 154,
|
||||
CPED_CONFIG_FLAG_CanPerformArrest = 155,
|
||||
CPED_CONFIG_FLAG_CanPerformUncuff = 156,
|
||||
CPED_CONFIG_FLAG_CanBeArrested = 157,
|
||||
_0xF7960FF5 = 158,
|
||||
_0x59564113 = 159,
|
||||
_0x0C6C3099 = 160,
|
||||
_0x645F927A = 161,
|
||||
_0xA86549B9 = 162,
|
||||
_0x8AAF337A = 163,
|
||||
_0x13BAA6E7 = 164,
|
||||
_0x5FB9D1F5 = 165,
|
||||
CPED_CONFIG_FLAG_IsInjured = 166,
|
||||
_0x6398A20B = 167,
|
||||
_0xD8072639 = 168,
|
||||
_0xA05B1845 = 169,
|
||||
_0x83F6D220 = 170,
|
||||
_0xD8430331 = 171,
|
||||
_0x4B547520 = 172,
|
||||
_0xE66E1406 = 173,
|
||||
_0x1C4BFE0C = 174,
|
||||
_0x90008BFA = 175,
|
||||
_0x07C7A910 = 176,
|
||||
_0xF15F8191 = 177,
|
||||
_0xCE4E8BE2 = 178,
|
||||
_0x1D46E4F2 = 179,
|
||||
CPED_CONFIG_FLAG_IsInCustody = 180,
|
||||
_0xE4FD9B3A = 181,
|
||||
_0x67AE0812 = 182,
|
||||
CPED_CONFIG_FLAG_IsAgitated = 183,
|
||||
CPED_CONFIG_FLAG_PreventAutoShuffleToDriversSeat = 184,
|
||||
_0x7B2D325E = 185,
|
||||
CPED_CONFIG_FLAG_EnableWeaponBlocking = 186,
|
||||
CPED_CONFIG_FLAG_HasHurtStarted = 187,
|
||||
CPED_CONFIG_FLAG_DisableHurt = 188,
|
||||
CPED_CONFIG_FLAG_PlayerIsWeird = 189,
|
||||
_0x32FC208B = 190,
|
||||
_0x0C296E5A = 191,
|
||||
_0xE63B73EC = 192,
|
||||
_0x04E9CC80 = 193,
|
||||
CPED_CONFIG_FLAG_UsingScenario = 194,
|
||||
CPED_CONFIG_FLAG_VisibleOnScreen = 195,
|
||||
_0xD88C58A1 = 196,
|
||||
_0x5A3DCF43 = 197, // CPED_CONFIG_FLAG_AvoidUnderSide
|
||||
_0xEA02B420 = 198,
|
||||
_0x3F559CFF = 199,
|
||||
_0x8C55D029 = 200,
|
||||
_0x5E6466F6 = 201,
|
||||
_0xEB5AD706 = 202,
|
||||
_0x0EDDDDE7 = 203,
|
||||
_0xA64F7B1D = 204,
|
||||
_0x48532CBA = 205,
|
||||
_0xAA25A9E7 = 206,
|
||||
_0x415B26B9 = 207,
|
||||
CPED_CONFIG_FLAG_DisableExplosionReactions = 208,
|
||||
CPED_CONFIG_FLAG_DodgedPlayer = 209,
|
||||
_0x67405504 = 210,
|
||||
_0x75DDD68C = 211,
|
||||
_0x2AD879B4 = 212,
|
||||
_0x51486F91 = 213,
|
||||
_0x32F79E21 = 214,
|
||||
_0xBF099213 = 215,
|
||||
_0x054AC8E2 = 216,
|
||||
_0x14E495CC = 217,
|
||||
_0x3C7DF9DF = 218,
|
||||
_0x848FFEF2 = 219,
|
||||
CPED_CONFIG_FLAG_DontEnterLeadersVehicle = 220,
|
||||
_0x2618E1CF = 221,
|
||||
_0x84F722FA = 222,
|
||||
_0xD1B87B1F = 223,
|
||||
_0x728AA918 = 224,
|
||||
CPED_CONFIG_FLAG_DisablePotentialToBeWalkedIntoResponse = 225,
|
||||
CPED_CONFIG_FLAG_DisablePedAvoidance = 226,
|
||||
_0x59E91185 = 227,
|
||||
_0x1EA7225F = 228,
|
||||
CPED_CONFIG_FLAG_DisablePanicInVehicle = 229,
|
||||
_0x6DCA7D88 = 230,
|
||||
_0xFC3E572D = 231,
|
||||
_0x08E9F9CF = 232,
|
||||
_0x2D3BA52D = 233,
|
||||
_0xFD2F53EA = 234,
|
||||
_0x31A1B03B = 235,
|
||||
CPED_CONFIG_FLAG_IsHoldingProp = 236,
|
||||
_0x82ED0A66 = 237, // CPED_CONFIG_FLAG_BlocksPathingWhenDead
|
||||
_0xCE57C9A3 = 238,
|
||||
_0x26149198 = 239,
|
||||
_0x1B33B598 = 240,
|
||||
_0x719B6E87 = 241,
|
||||
_0x13E8E8E8 = 242,
|
||||
_0xF29739AE = 243,
|
||||
_0xABEA8A74 = 244,
|
||||
_0xB60EA2BA = 245,
|
||||
_0x536B0950 = 246,
|
||||
_0x0C754ACA = 247,
|
||||
CPED_CONFIG_FLAG_DisableVehicleSeatRandomAnimations = 248,
|
||||
_0x12659168 = 249,
|
||||
_0x1BDF2F04 = 250,
|
||||
_0x7728FAA3 = 251,
|
||||
_0x6A807ED8 = 252,
|
||||
CPED_CONFIG_FLAG_OnStairs = 253,
|
||||
_0xE1A2F73F = 254,
|
||||
_0x5B3697C8 = 255,
|
||||
_0xF1EB20A9 = 256,
|
||||
_0x8B7DF407 = 257,
|
||||
_0x329DCF1A = 258,
|
||||
_0x8D90DD1B = 259,
|
||||
_0xB8A292B7 = 260,
|
||||
_0x8374B087 = 261,
|
||||
_0x2AF558F0 = 262,
|
||||
_0x82251455 = 263,
|
||||
_0x30CF498B = 264,
|
||||
_0xE1CD50AF = 265,
|
||||
_0x72E4AE48 = 266,
|
||||
_0xC2657EA1 = 267,
|
||||
_0x29FF6030 = 268,
|
||||
_0x8248A5EC = 269,
|
||||
CPED_CONFIG_FLAG_OnStairSlope = 270,
|
||||
_0xA0897933 = 271,
|
||||
CPED_CONFIG_FLAG_DontBlipCop = 272,
|
||||
CPED_CONFIG_FLAG_ClimbedShiftedFence = 273,
|
||||
_0xF7823618 = 274,
|
||||
_0xDC305CCE = 275, // CPED_CONFIG_FLAG_KillWhenTrapped
|
||||
CPED_CONFIG_FLAG_EdgeDetected = 276,
|
||||
_0x92B67896 = 277,
|
||||
_0xCAD677C9 = 278,
|
||||
CPED_CONFIG_FLAG_AvoidTearGas = 279,
|
||||
_0x5276AC7B = 280,
|
||||
_0x1032692A = 281,
|
||||
_0xDA23E7F1 = 282,
|
||||
_0x9139724D = 283,
|
||||
_0xA1457461 = 284,
|
||||
_0x4186E095 = 285,
|
||||
_0xAC68E2EB = 286,
|
||||
CPED_CONFIG_FLAG_RagdollingOnBoat = 287,
|
||||
CPED_CONFIG_FLAG_HasBrandishedWeapon = 288,
|
||||
_0x1B9EE8A1 = 289,
|
||||
_0xF3F5758C = 290,
|
||||
_0x2A9307F1 = 291,
|
||||
_0x7403D216 = 292,
|
||||
_0xA06A3C6C = 293,
|
||||
CPED_CONFIG_FLAG_DisableShockingEvents = 294,
|
||||
_0xF8DA25A5 = 295,
|
||||
_0x7EF55802 = 296,
|
||||
_0xB31F1187 = 297,
|
||||
_0x84315402 = 298,
|
||||
_0x0FD69867 = 299,
|
||||
_0xC7829B67 = 300,
|
||||
CPED_CONFIG_FLAG_DisablePedConstraints = 301,
|
||||
_0x6D23CF25 = 302,
|
||||
_0x2ADA871B = 303,
|
||||
_0x47BC8A58 = 304,
|
||||
_0xEB692FA5 = 305,
|
||||
_0x4A133C50 = 306,
|
||||
_0xC58099C3 = 307,
|
||||
_0xF3D76D41 = 308,
|
||||
_0xB0EEE9F2 = 309,
|
||||
CPED_CONFIG_FLAG_IsInCluster = 310,
|
||||
_0x0FA153EF = 311,
|
||||
_0xD73F5CD3 = 312,
|
||||
_0xD4136C22 = 313,
|
||||
_0xE404CA6B = 314,
|
||||
_0xB9597446 = 315,
|
||||
_0xD5C98277 = 316,
|
||||
_0xD5060A9C = 317,
|
||||
_0x3E5F1CBB = 318,
|
||||
_0xD8BE1D54 = 319,
|
||||
_0x0B1F191F = 320,
|
||||
_0xC995167A = 321,
|
||||
CPED_CONFIG_FLAG_HasHighHeels = 322,
|
||||
_0x86B01E54 = 323,
|
||||
_0x3A56FE15 = 324,
|
||||
_0xC03B736C = 325, // CPED_CONFIG_FLAG_SpawnedAtScenario
|
||||
_0xBBF47729 = 326,
|
||||
_0x22B668A8 = 327,
|
||||
_0x2624D4D4 = 328,
|
||||
CPED_CONFIG_FLAG_DisableTalkTo = 329,
|
||||
CPED_CONFIG_FLAG_DontBlip = 330,
|
||||
CPED_CONFIG_FLAG_IsSwitchingWeapon = 331,
|
||||
_0x630F55F3 = 332,
|
||||
_0x150468FD = 333,
|
||||
_0x914EBD6B = 334,
|
||||
_0x79AF3B6D = 335,
|
||||
_0x75C7A632 = 336,
|
||||
_0x52D530E2 = 337,
|
||||
_0xDB2A90E0 = 338,
|
||||
_0x5922763D = 339,
|
||||
_0x12ADB567 = 340,
|
||||
_0x105C8518 = 341,
|
||||
_0x106F703D = 342,
|
||||
_0xED152C3E = 343,
|
||||
_0xA0EFE6A8 = 344,
|
||||
_0xBF348C82 = 345,
|
||||
_0xCDDFE830 = 346,
|
||||
_0x7B59BD9B = 347,
|
||||
_0x0124C788 = 348,
|
||||
CPED_CONFIG_FLAG_EquipJetpack = 349,
|
||||
_0x08D361A5 = 350,
|
||||
_0xE13D1F7C = 351,
|
||||
_0x40E25FB9 = 352,
|
||||
_0x930629D9 = 353,
|
||||
_0xECCF0C7F = 354,
|
||||
_0xB6E9613B = 355,
|
||||
_0x490C0478 = 356,
|
||||
_0xE8865BEA = 357,
|
||||
_0xF3C34A29 = 358,
|
||||
CPED_CONFIG_FLAG_IsDuckingInVehicle = 359,
|
||||
_0xF660E115 = 360,
|
||||
_0xAB0E6DED = 361,
|
||||
CPED_CONFIG_FLAG_HasReserveParachute = 362,
|
||||
CPED_CONFIG_FLAG_UseReserveParachute = 363,
|
||||
_0x5C5D9CD3 = 364,
|
||||
_0x8F7701F3 = 365,
|
||||
_0xBC4436AD = 366,
|
||||
_0xD7E07D37 = 367,
|
||||
_0x03C4FD24 = 368,
|
||||
_0x7675789A = 369,
|
||||
_0xB7288A88 = 370,
|
||||
_0xC06B6291 = 371,
|
||||
_0x95A4A805 = 372,
|
||||
_0xA8E9A042 = 373,
|
||||
CPED_CONFIG_FLAG_NeverLeaveTrain = 374,
|
||||
_0xBAC674B3 = 375,
|
||||
_0x147F1FFB = 376,
|
||||
_0x4376DD79 = 377,
|
||||
_0xCD3DB518 = 378,
|
||||
_0xFE4BA4B6 = 379,
|
||||
_0x5DF03A55 = 380,
|
||||
_0xBCD816CD = 381,
|
||||
_0xCF02DD69 = 382,
|
||||
_0xF73AFA2E = 383,
|
||||
_0x80B9A9D0 = 384,
|
||||
_0xF601F7EE = 385,
|
||||
_0xA91350FC = 386,
|
||||
_0x3AB23B96 = 387,
|
||||
CPED_CONFIG_FLAG_IsClimbingLadder = 388,
|
||||
CPED_CONFIG_FLAG_HasBareFeet = 389,
|
||||
_0xB4B1CD4C = 390,
|
||||
_0x5459AFB8 = 391,
|
||||
_0x54F27667 = 392,
|
||||
_0xC11D3E8F = 393,
|
||||
_0x5419EB3E = 394,
|
||||
_0x82D8DBB4 = 395,
|
||||
_0x33B02D2F = 396,
|
||||
_0xAE66176D = 397,
|
||||
_0xA2692593 = 398,
|
||||
_0x714C7E31 = 399,
|
||||
_0xEC488AC7 = 400,
|
||||
_0xAE398504 = 401,
|
||||
_0xABC58D72 = 402,
|
||||
_0x5E5B9591 = 403,
|
||||
_0x6BA1091E = 404,
|
||||
_0x77840177 = 405,
|
||||
_0x1C7ACAC4 = 406,
|
||||
_0x124420E9 = 407,
|
||||
_0x75A65587 = 408,
|
||||
_0xDFD2D55B = 409,
|
||||
_0xBDD39919 = 410,
|
||||
_0x43DEC267 = 411,
|
||||
_0xE42B7797 = 412,
|
||||
CPED_CONFIG_FLAG_IsHolsteringWeapon = 413,
|
||||
_0x4F8149F5 = 414,
|
||||
_0xDD9ECA7A = 415,
|
||||
_0x9E7EF9D2 = 416,
|
||||
_0x2C6ED942 = 417,
|
||||
CPED_CONFIG_FLAG_IsSwitchingHelmetVisor = 418,
|
||||
_0xA488727D = 419,
|
||||
_0xCFF5F6DE = 420,
|
||||
_0x6D614599 = 421,
|
||||
CPED_CONFIG_FLAG_DisableVehicleCombat = 422,
|
||||
_0xFE401D26 = 423,
|
||||
CPED_CONFIG_FLAG_FallsLikeAircraft = 424,
|
||||
_0x2B42AE82 = 425,
|
||||
_0x7A95734F = 426,
|
||||
_0xDF4D8617 = 427,
|
||||
_0x578F1F14 = 428,
|
||||
CPED_CONFIG_FLAG_DisableStartEngine = 429,
|
||||
CPED_CONFIG_FLAG_IgnoreBeingOnFire = 430,
|
||||
_0x153C9500 = 431,
|
||||
_0xCB7A632E = 432,
|
||||
_0xDE727981 = 433,
|
||||
CPED_CONFIG_FLAG_DisableHomingMissileLockon = 434,
|
||||
_0x12BBB935 = 435,
|
||||
_0xAD0A1277 = 436,
|
||||
_0xEA6AA46A = 437,
|
||||
CPED_CONFIG_FLAG_DisableHelmetArmor = 438,
|
||||
_0xCB7F3A1E = 439,
|
||||
_0x50178878 = 440,
|
||||
_0x051B4F0D = 441,
|
||||
_0x2FC3DECC = 442,
|
||||
_0xC0030B0B = 443,
|
||||
_0xBBDAF1E9 = 444,
|
||||
_0x944FE59C = 445,
|
||||
_0x506FBA39 = 446,
|
||||
_0xDD45FE84 = 447,
|
||||
_0xE698AE75 = 448,
|
||||
_0x199633F8 = 449,
|
||||
CPED_CONFIG_FLAG_PedIsArresting = 450,
|
||||
CPED_CONFIG_FLAG_IsDecoyPed = 451,
|
||||
_0x3A251D83 = 452,
|
||||
_0xA56F6986 = 453,
|
||||
_0x1D19C622 = 454,
|
||||
_0xB68D3EAB = 455,
|
||||
CPED_CONFIG_FLAG_CanBeIncapacitated = 456,
|
||||
_0x4BD5EBAD = 457,
|
||||
}
|
||||
// Potential names and hash collisions included as comments
|
||||
internal enum PedConfigFlags
|
||||
{
|
||||
_0x67D1A445 = 0,
|
||||
_0xC63DE95E = 1,
|
||||
CPED_CONFIG_FLAG_NoCriticalHits = 2,
|
||||
CPED_CONFIG_FLAG_DrownsInWater = 3,
|
||||
CPED_CONFIG_FLAG_DisableReticuleFixedLockon = 4,
|
||||
_0x37D196F4 = 5,
|
||||
_0xE2462399 = 6,
|
||||
CPED_CONFIG_FLAG_UpperBodyDamageAnimsOnly = 7,
|
||||
_0xEDDEB838 = 8,
|
||||
_0xB398B6FD = 9,
|
||||
_0xF6664E68 = 10,
|
||||
_0xA05E7CA3 = 11,
|
||||
_0xCE394045 = 12,
|
||||
CPED_CONFIG_FLAG_NeverLeavesGroup = 13,
|
||||
_0xCD8D1411 = 14,
|
||||
_0xB031F1A9 = 15,
|
||||
_0xFE65BEE3 = 16,
|
||||
CPED_CONFIG_FLAG_BlockNonTemporaryEvents = 17,
|
||||
_0x380165BD = 18,
|
||||
_0x07C045C7 = 19,
|
||||
_0x583B5E2D = 20,
|
||||
_0x475EDA58 = 21,
|
||||
_0x8629D05B = 22,
|
||||
_0x1522968B = 23,
|
||||
CPED_CONFIG_FLAG_IgnoreSeenMelee = 24,
|
||||
_0x4CC09C4B = 25,
|
||||
_0x034F3053 = 26,
|
||||
_0xD91BA7CC = 27,
|
||||
_0x5C8DC66E = 28,
|
||||
_0x8902EAA0 = 29,
|
||||
_0x6580B9D2 = 30,
|
||||
_0x0EF7A297 = 31,
|
||||
_0x6BF86E5B = 32,
|
||||
CPED_CONFIG_FLAG_DieWhenRagdoll = 33,
|
||||
CPED_CONFIG_FLAG_HasHelmet = 34,
|
||||
CPED_CONFIG_FLAG_UseHelmet = 35,
|
||||
_0xEEB3D630 = 36,
|
||||
_0xB130D17B = 37,
|
||||
_0x5F071200 = 38,
|
||||
CPED_CONFIG_FLAG_DisableEvasiveDives = 39,
|
||||
_0xC287AAFF = 40,
|
||||
_0x203328CC = 41,
|
||||
CPED_CONFIG_FLAG_DontInfluenceWantedLevel = 42,
|
||||
CPED_CONFIG_FLAG_DisablePlayerLockon = 43,
|
||||
CPED_CONFIG_FLAG_DisableLockonToRandomPeds = 44,
|
||||
_0xEC4A8ACF = 45,
|
||||
_0xDB115BFA = 46,
|
||||
CPED_CONFIG_FLAG_PedBeingDeleted = 47,
|
||||
CPED_CONFIG_FLAG_BlockWeaponSwitching = 48,
|
||||
_0xF8E99565 = 49,
|
||||
_0xDD17FEE6 = 50,
|
||||
_0x7ED9B2C9 = 51,
|
||||
_0x655E8618 = 52,
|
||||
_0x5A6C1F6E = 53,
|
||||
_0xD749FC41 = 54,
|
||||
_0x357F63F3 = 55,
|
||||
_0xC5E60961 = 56,
|
||||
_0x29275C3E = 57,
|
||||
CPED_CONFIG_FLAG_IsFiring = 58,
|
||||
CPED_CONFIG_FLAG_WasFiring = 59,
|
||||
CPED_CONFIG_FLAG_IsStanding = 60,
|
||||
CPED_CONFIG_FLAG_WasStanding = 61,
|
||||
CPED_CONFIG_FLAG_InVehicle = 62,
|
||||
CPED_CONFIG_FLAG_OnMount = 63,
|
||||
CPED_CONFIG_FLAG_AttachedToVehicle = 64,
|
||||
CPED_CONFIG_FLAG_IsSwimming = 65,
|
||||
CPED_CONFIG_FLAG_WasSwimming = 66,
|
||||
CPED_CONFIG_FLAG_IsSkiing = 67,
|
||||
CPED_CONFIG_FLAG_IsSitting = 68,
|
||||
CPED_CONFIG_FLAG_KilledByStealth = 69,
|
||||
CPED_CONFIG_FLAG_KilledByTakedown = 70,
|
||||
CPED_CONFIG_FLAG_Knockedout = 71,
|
||||
_0x3E3C4560 = 72,
|
||||
_0x2994C7B7 = 73,
|
||||
_0x6D59D275 = 74,
|
||||
CPED_CONFIG_FLAG_UsingCoverPoint = 75,
|
||||
CPED_CONFIG_FLAG_IsInTheAir = 76,
|
||||
_0x2D493FB7 = 77,
|
||||
CPED_CONFIG_FLAG_IsAimingGun = 78,
|
||||
_0x14D69875 = 79,
|
||||
_0x40B05311 = 80,
|
||||
_0x8B230BC5 = 81,
|
||||
_0xC74E5842 = 82,
|
||||
_0x9EA86147 = 83,
|
||||
_0x674C746C = 84,
|
||||
_0x3E56A8C2 = 85,
|
||||
_0xC144A1EF = 86,
|
||||
_0x0548512D = 87,
|
||||
_0x31C93909 = 88,
|
||||
_0xA0269315 = 89,
|
||||
_0xD4D59D4D = 90,
|
||||
_0x411D4420 = 91,
|
||||
_0xDF4AEF0D = 92,
|
||||
CPED_CONFIG_FLAG_ForcePedLoadCover = 93,
|
||||
_0x300E4CD3 = 94,
|
||||
_0xF1C5BF04 = 95,
|
||||
_0x89C2EF13 = 96,
|
||||
CPED_CONFIG_FLAG_VaultFromCover = 97,
|
||||
_0x02A852C8 = 98,
|
||||
_0x3D9407F1 = 99,
|
||||
_0x319B4558 = 100,
|
||||
CPED_CONFIG_FLAG_ForcedAim = 101,
|
||||
_0xB942D71A = 102,
|
||||
_0xD26C55A8 = 103,
|
||||
_0xB89E703B = 104,
|
||||
CPED_CONFIG_FLAG_ForceReload = 105,
|
||||
_0xD9E73DA2 = 106,
|
||||
_0xFF71DC2C = 107,
|
||||
_0x1E27E8D8 = 108,
|
||||
_0xF2C53966 = 109,
|
||||
_0xC4DBE247 = 110,
|
||||
_0x83C0A4BF = 111,
|
||||
_0x0E0FAF8C = 112,
|
||||
_0x26616660 = 113,
|
||||
_0x43B80B79 = 114,
|
||||
_0x0D2A9309 = 115,
|
||||
_0x12C1C983 = 116,
|
||||
CPED_CONFIG_FLAG_BumpedByPlayer = 117,
|
||||
_0xE586D504 = 118,
|
||||
_0x52374204 = 119,
|
||||
CPED_CONFIG_FLAG_IsHandCuffed = 120,
|
||||
CPED_CONFIG_FLAG_IsAnkleCuffed = 121,
|
||||
CPED_CONFIG_FLAG_DisableMelee = 122,
|
||||
_0xFE714397 = 123,
|
||||
_0xB3E660BD = 124,
|
||||
_0x5FED6BFD = 125,
|
||||
_0xC9D6F66F = 126,
|
||||
_0x519BC986 = 127,
|
||||
CPED_CONFIG_FLAG_CanBeAgitated = 128,
|
||||
_0x9A4B617C = 129, // CPED_CONFIG_FLAG_FaceDirInsult
|
||||
_0xDAB70E9F = 130,
|
||||
_0xE569438A = 131,
|
||||
_0xBBC77D6D = 132,
|
||||
_0xCB59EF0F = 133,
|
||||
_0x8C5EA971 = 134,
|
||||
CPED_CONFIG_FLAG_IsScuba = 135,
|
||||
CPED_CONFIG_FLAG_WillArrestRatherThanJack = 136,
|
||||
_0xDCE59B58 = 137,
|
||||
CPED_CONFIG_FLAG_RidingTrain = 138,
|
||||
CPED_CONFIG_FLAG_ArrestResult = 139,
|
||||
CPED_CONFIG_FLAG_CanAttackFriendly = 140,
|
||||
_0x98A4BE43 = 141,
|
||||
_0x6901E731 = 142,
|
||||
_0x9EC9BF6C = 143,
|
||||
_0x42841A8F = 144,
|
||||
CPED_CONFIG_FLAG_ShootingAnimFlag = 145,
|
||||
CPED_CONFIG_FLAG_DisableLadderClimbing = 146,
|
||||
CPED_CONFIG_FLAG_StairsDetected = 147,
|
||||
CPED_CONFIG_FLAG_SlopeDetected = 148,
|
||||
_0x1A15670B = 149,
|
||||
_0x61786EE5 = 150,
|
||||
_0xCB9186BD = 151,
|
||||
_0xF0710152 = 152,
|
||||
_0x43DFE310 = 153,
|
||||
_0xC43C624E = 154,
|
||||
CPED_CONFIG_FLAG_CanPerformArrest = 155,
|
||||
CPED_CONFIG_FLAG_CanPerformUncuff = 156,
|
||||
CPED_CONFIG_FLAG_CanBeArrested = 157,
|
||||
_0xF7960FF5 = 158,
|
||||
_0x59564113 = 159,
|
||||
_0x0C6C3099 = 160,
|
||||
_0x645F927A = 161,
|
||||
_0xA86549B9 = 162,
|
||||
_0x8AAF337A = 163,
|
||||
_0x13BAA6E7 = 164,
|
||||
_0x5FB9D1F5 = 165,
|
||||
CPED_CONFIG_FLAG_IsInjured = 166,
|
||||
_0x6398A20B = 167,
|
||||
_0xD8072639 = 168,
|
||||
_0xA05B1845 = 169,
|
||||
_0x83F6D220 = 170,
|
||||
_0xD8430331 = 171,
|
||||
_0x4B547520 = 172,
|
||||
_0xE66E1406 = 173,
|
||||
_0x1C4BFE0C = 174,
|
||||
_0x90008BFA = 175,
|
||||
_0x07C7A910 = 176,
|
||||
_0xF15F8191 = 177,
|
||||
_0xCE4E8BE2 = 178,
|
||||
_0x1D46E4F2 = 179,
|
||||
CPED_CONFIG_FLAG_IsInCustody = 180,
|
||||
_0xE4FD9B3A = 181,
|
||||
_0x67AE0812 = 182,
|
||||
CPED_CONFIG_FLAG_IsAgitated = 183,
|
||||
CPED_CONFIG_FLAG_PreventAutoShuffleToDriversSeat = 184,
|
||||
_0x7B2D325E = 185,
|
||||
CPED_CONFIG_FLAG_EnableWeaponBlocking = 186,
|
||||
CPED_CONFIG_FLAG_HasHurtStarted = 187,
|
||||
CPED_CONFIG_FLAG_DisableHurt = 188,
|
||||
CPED_CONFIG_FLAG_PlayerIsWeird = 189,
|
||||
_0x32FC208B = 190,
|
||||
_0x0C296E5A = 191,
|
||||
_0xE63B73EC = 192,
|
||||
_0x04E9CC80 = 193,
|
||||
CPED_CONFIG_FLAG_UsingScenario = 194,
|
||||
CPED_CONFIG_FLAG_VisibleOnScreen = 195,
|
||||
_0xD88C58A1 = 196,
|
||||
_0x5A3DCF43 = 197, // CPED_CONFIG_FLAG_AvoidUnderSide
|
||||
_0xEA02B420 = 198,
|
||||
_0x3F559CFF = 199,
|
||||
_0x8C55D029 = 200,
|
||||
_0x5E6466F6 = 201,
|
||||
_0xEB5AD706 = 202,
|
||||
_0x0EDDDDE7 = 203,
|
||||
_0xA64F7B1D = 204,
|
||||
_0x48532CBA = 205,
|
||||
_0xAA25A9E7 = 206,
|
||||
_0x415B26B9 = 207,
|
||||
CPED_CONFIG_FLAG_DisableExplosionReactions = 208,
|
||||
CPED_CONFIG_FLAG_DodgedPlayer = 209,
|
||||
_0x67405504 = 210,
|
||||
_0x75DDD68C = 211,
|
||||
_0x2AD879B4 = 212,
|
||||
_0x51486F91 = 213,
|
||||
_0x32F79E21 = 214,
|
||||
_0xBF099213 = 215,
|
||||
_0x054AC8E2 = 216,
|
||||
_0x14E495CC = 217,
|
||||
_0x3C7DF9DF = 218,
|
||||
_0x848FFEF2 = 219,
|
||||
CPED_CONFIG_FLAG_DontEnterLeadersVehicle = 220,
|
||||
_0x2618E1CF = 221,
|
||||
_0x84F722FA = 222,
|
||||
_0xD1B87B1F = 223,
|
||||
_0x728AA918 = 224,
|
||||
CPED_CONFIG_FLAG_DisablePotentialToBeWalkedIntoResponse = 225,
|
||||
CPED_CONFIG_FLAG_DisablePedAvoidance = 226,
|
||||
_0x59E91185 = 227,
|
||||
_0x1EA7225F = 228,
|
||||
CPED_CONFIG_FLAG_DisablePanicInVehicle = 229,
|
||||
_0x6DCA7D88 = 230,
|
||||
_0xFC3E572D = 231,
|
||||
_0x08E9F9CF = 232,
|
||||
_0x2D3BA52D = 233,
|
||||
_0xFD2F53EA = 234,
|
||||
_0x31A1B03B = 235,
|
||||
CPED_CONFIG_FLAG_IsHoldingProp = 236,
|
||||
_0x82ED0A66 = 237, // CPED_CONFIG_FLAG_BlocksPathingWhenDead
|
||||
_0xCE57C9A3 = 238,
|
||||
_0x26149198 = 239,
|
||||
_0x1B33B598 = 240,
|
||||
_0x719B6E87 = 241,
|
||||
_0x13E8E8E8 = 242,
|
||||
_0xF29739AE = 243,
|
||||
_0xABEA8A74 = 244,
|
||||
_0xB60EA2BA = 245,
|
||||
_0x536B0950 = 246,
|
||||
_0x0C754ACA = 247,
|
||||
CPED_CONFIG_FLAG_DisableVehicleSeatRandomAnimations = 248,
|
||||
_0x12659168 = 249,
|
||||
_0x1BDF2F04 = 250,
|
||||
_0x7728FAA3 = 251,
|
||||
_0x6A807ED8 = 252,
|
||||
CPED_CONFIG_FLAG_OnStairs = 253,
|
||||
_0xE1A2F73F = 254,
|
||||
_0x5B3697C8 = 255,
|
||||
_0xF1EB20A9 = 256,
|
||||
_0x8B7DF407 = 257,
|
||||
_0x329DCF1A = 258,
|
||||
_0x8D90DD1B = 259,
|
||||
_0xB8A292B7 = 260,
|
||||
_0x8374B087 = 261,
|
||||
_0x2AF558F0 = 262,
|
||||
_0x82251455 = 263,
|
||||
_0x30CF498B = 264,
|
||||
_0xE1CD50AF = 265,
|
||||
_0x72E4AE48 = 266,
|
||||
_0xC2657EA1 = 267,
|
||||
_0x29FF6030 = 268,
|
||||
_0x8248A5EC = 269,
|
||||
CPED_CONFIG_FLAG_OnStairSlope = 270,
|
||||
_0xA0897933 = 271,
|
||||
CPED_CONFIG_FLAG_DontBlipCop = 272,
|
||||
CPED_CONFIG_FLAG_ClimbedShiftedFence = 273,
|
||||
_0xF7823618 = 274,
|
||||
_0xDC305CCE = 275, // CPED_CONFIG_FLAG_KillWhenTrapped
|
||||
CPED_CONFIG_FLAG_EdgeDetected = 276,
|
||||
_0x92B67896 = 277,
|
||||
_0xCAD677C9 = 278,
|
||||
CPED_CONFIG_FLAG_AvoidTearGas = 279,
|
||||
_0x5276AC7B = 280,
|
||||
_0x1032692A = 281,
|
||||
_0xDA23E7F1 = 282,
|
||||
_0x9139724D = 283,
|
||||
_0xA1457461 = 284,
|
||||
_0x4186E095 = 285,
|
||||
_0xAC68E2EB = 286,
|
||||
CPED_CONFIG_FLAG_RagdollingOnBoat = 287,
|
||||
CPED_CONFIG_FLAG_HasBrandishedWeapon = 288,
|
||||
_0x1B9EE8A1 = 289,
|
||||
_0xF3F5758C = 290,
|
||||
_0x2A9307F1 = 291,
|
||||
_0x7403D216 = 292,
|
||||
_0xA06A3C6C = 293,
|
||||
CPED_CONFIG_FLAG_DisableShockingEvents = 294,
|
||||
_0xF8DA25A5 = 295,
|
||||
_0x7EF55802 = 296,
|
||||
_0xB31F1187 = 297,
|
||||
_0x84315402 = 298,
|
||||
_0x0FD69867 = 299,
|
||||
_0xC7829B67 = 300,
|
||||
CPED_CONFIG_FLAG_DisablePedConstraints = 301,
|
||||
_0x6D23CF25 = 302,
|
||||
_0x2ADA871B = 303,
|
||||
_0x47BC8A58 = 304,
|
||||
_0xEB692FA5 = 305,
|
||||
_0x4A133C50 = 306,
|
||||
_0xC58099C3 = 307,
|
||||
_0xF3D76D41 = 308,
|
||||
_0xB0EEE9F2 = 309,
|
||||
CPED_CONFIG_FLAG_IsInCluster = 310,
|
||||
_0x0FA153EF = 311,
|
||||
_0xD73F5CD3 = 312,
|
||||
_0xD4136C22 = 313,
|
||||
_0xE404CA6B = 314,
|
||||
_0xB9597446 = 315,
|
||||
_0xD5C98277 = 316,
|
||||
_0xD5060A9C = 317,
|
||||
_0x3E5F1CBB = 318,
|
||||
_0xD8BE1D54 = 319,
|
||||
_0x0B1F191F = 320,
|
||||
_0xC995167A = 321,
|
||||
CPED_CONFIG_FLAG_HasHighHeels = 322,
|
||||
_0x86B01E54 = 323,
|
||||
_0x3A56FE15 = 324,
|
||||
_0xC03B736C = 325, // CPED_CONFIG_FLAG_SpawnedAtScenario
|
||||
_0xBBF47729 = 326,
|
||||
_0x22B668A8 = 327,
|
||||
_0x2624D4D4 = 328,
|
||||
CPED_CONFIG_FLAG_DisableTalkTo = 329,
|
||||
CPED_CONFIG_FLAG_DontBlip = 330,
|
||||
CPED_CONFIG_FLAG_IsSwitchingWeapon = 331,
|
||||
_0x630F55F3 = 332,
|
||||
_0x150468FD = 333,
|
||||
_0x914EBD6B = 334,
|
||||
_0x79AF3B6D = 335,
|
||||
_0x75C7A632 = 336,
|
||||
_0x52D530E2 = 337,
|
||||
_0xDB2A90E0 = 338,
|
||||
_0x5922763D = 339,
|
||||
_0x12ADB567 = 340,
|
||||
_0x105C8518 = 341,
|
||||
_0x106F703D = 342,
|
||||
_0xED152C3E = 343,
|
||||
_0xA0EFE6A8 = 344,
|
||||
_0xBF348C82 = 345,
|
||||
_0xCDDFE830 = 346,
|
||||
_0x7B59BD9B = 347,
|
||||
_0x0124C788 = 348,
|
||||
CPED_CONFIG_FLAG_EquipJetpack = 349,
|
||||
_0x08D361A5 = 350,
|
||||
_0xE13D1F7C = 351,
|
||||
_0x40E25FB9 = 352,
|
||||
_0x930629D9 = 353,
|
||||
_0xECCF0C7F = 354,
|
||||
_0xB6E9613B = 355,
|
||||
_0x490C0478 = 356,
|
||||
_0xE8865BEA = 357,
|
||||
_0xF3C34A29 = 358,
|
||||
CPED_CONFIG_FLAG_IsDuckingInVehicle = 359,
|
||||
_0xF660E115 = 360,
|
||||
_0xAB0E6DED = 361,
|
||||
CPED_CONFIG_FLAG_HasReserveParachute = 362,
|
||||
CPED_CONFIG_FLAG_UseReserveParachute = 363,
|
||||
_0x5C5D9CD3 = 364,
|
||||
_0x8F7701F3 = 365,
|
||||
_0xBC4436AD = 366,
|
||||
_0xD7E07D37 = 367,
|
||||
_0x03C4FD24 = 368,
|
||||
_0x7675789A = 369,
|
||||
_0xB7288A88 = 370,
|
||||
_0xC06B6291 = 371,
|
||||
_0x95A4A805 = 372,
|
||||
_0xA8E9A042 = 373,
|
||||
CPED_CONFIG_FLAG_NeverLeaveTrain = 374,
|
||||
_0xBAC674B3 = 375,
|
||||
_0x147F1FFB = 376,
|
||||
_0x4376DD79 = 377,
|
||||
_0xCD3DB518 = 378,
|
||||
_0xFE4BA4B6 = 379,
|
||||
_0x5DF03A55 = 380,
|
||||
_0xBCD816CD = 381,
|
||||
_0xCF02DD69 = 382,
|
||||
_0xF73AFA2E = 383,
|
||||
_0x80B9A9D0 = 384,
|
||||
_0xF601F7EE = 385,
|
||||
_0xA91350FC = 386,
|
||||
_0x3AB23B96 = 387,
|
||||
CPED_CONFIG_FLAG_IsClimbingLadder = 388,
|
||||
CPED_CONFIG_FLAG_HasBareFeet = 389,
|
||||
_0xB4B1CD4C = 390,
|
||||
_0x5459AFB8 = 391,
|
||||
_0x54F27667 = 392,
|
||||
_0xC11D3E8F = 393,
|
||||
_0x5419EB3E = 394,
|
||||
_0x82D8DBB4 = 395,
|
||||
_0x33B02D2F = 396,
|
||||
_0xAE66176D = 397,
|
||||
_0xA2692593 = 398,
|
||||
_0x714C7E31 = 399,
|
||||
_0xEC488AC7 = 400,
|
||||
_0xAE398504 = 401,
|
||||
_0xABC58D72 = 402,
|
||||
_0x5E5B9591 = 403,
|
||||
_0x6BA1091E = 404,
|
||||
_0x77840177 = 405,
|
||||
_0x1C7ACAC4 = 406,
|
||||
_0x124420E9 = 407,
|
||||
_0x75A65587 = 408,
|
||||
_0xDFD2D55B = 409,
|
||||
_0xBDD39919 = 410,
|
||||
_0x43DEC267 = 411,
|
||||
_0xE42B7797 = 412,
|
||||
CPED_CONFIG_FLAG_IsHolsteringWeapon = 413,
|
||||
_0x4F8149F5 = 414,
|
||||
_0xDD9ECA7A = 415,
|
||||
_0x9E7EF9D2 = 416,
|
||||
_0x2C6ED942 = 417,
|
||||
CPED_CONFIG_FLAG_IsSwitchingHelmetVisor = 418,
|
||||
_0xA488727D = 419,
|
||||
_0xCFF5F6DE = 420,
|
||||
_0x6D614599 = 421,
|
||||
CPED_CONFIG_FLAG_DisableVehicleCombat = 422,
|
||||
_0xFE401D26 = 423,
|
||||
CPED_CONFIG_FLAG_FallsLikeAircraft = 424,
|
||||
_0x2B42AE82 = 425,
|
||||
_0x7A95734F = 426,
|
||||
_0xDF4D8617 = 427,
|
||||
_0x578F1F14 = 428,
|
||||
CPED_CONFIG_FLAG_DisableStartEngine = 429,
|
||||
CPED_CONFIG_FLAG_IgnoreBeingOnFire = 430,
|
||||
_0x153C9500 = 431,
|
||||
_0xCB7A632E = 432,
|
||||
_0xDE727981 = 433,
|
||||
CPED_CONFIG_FLAG_DisableHomingMissileLockon = 434,
|
||||
_0x12BBB935 = 435,
|
||||
_0xAD0A1277 = 436,
|
||||
_0xEA6AA46A = 437,
|
||||
CPED_CONFIG_FLAG_DisableHelmetArmor = 438,
|
||||
_0xCB7F3A1E = 439,
|
||||
_0x50178878 = 440,
|
||||
_0x051B4F0D = 441,
|
||||
_0x2FC3DECC = 442,
|
||||
_0xC0030B0B = 443,
|
||||
_0xBBDAF1E9 = 444,
|
||||
_0x944FE59C = 445,
|
||||
_0x506FBA39 = 446,
|
||||
_0xDD45FE84 = 447,
|
||||
_0xE698AE75 = 448,
|
||||
_0x199633F8 = 449,
|
||||
CPED_CONFIG_FLAG_PedIsArresting = 450,
|
||||
CPED_CONFIG_FLAG_IsDecoyPed = 451,
|
||||
_0x3A251D83 = 452,
|
||||
_0xA56F6986 = 453,
|
||||
_0x1D19C622 = 454,
|
||||
_0xB68D3EAB = 455,
|
||||
CPED_CONFIG_FLAG_CanBeIncapacitated = 456,
|
||||
_0x4BD5EBAD = 457,
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +1,14 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using System.Linq;
|
||||
using System.Diagnostics;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal static partial class PedExtensions
|
||||
{
|
||||
|
||||
|
||||
public static bool IsBetween<T>(this T item, T start, T end)
|
||||
{
|
||||
return Comparer<T>.Default.Compare(item, start) >= 0 && Comparer<T>.Default.Compare(item, end) <= 0;
|
||||
@ -42,7 +36,7 @@ namespace RageCoop.Client
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#region PED
|
||||
@ -61,7 +55,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -135,7 +129,7 @@ namespace RageCoop.Client
|
||||
flags |=PedDataFlags.IsInCover;
|
||||
}
|
||||
|
||||
if(Function.Call<bool>(Hash.GET_PED_STEALTH_MOVEMENT, ped))
|
||||
if (Function.Call<bool>(Hash.GET_PED_STEALTH_MOVEMENT, ped))
|
||||
{
|
||||
flags |= PedDataFlags.IsInStealthMode;
|
||||
}
|
||||
@ -294,7 +288,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public static bool IsTaskActive(this Ped p,TaskType task)
|
||||
public static bool IsTaskActive(this Ped p, TaskType task)
|
||||
{
|
||||
return Function.Call<bool>(Hash.GET_IS_TASK_ACTIVE, p.Handle, task);
|
||||
}
|
||||
@ -333,17 +327,17 @@ namespace RageCoop.Client
|
||||
{
|
||||
return (VehicleSeat)Function.Call<int>(Hash.GET_SEAT_PED_IS_TRYING_TO_ENTER, p);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static bool IsTurretSeat(this Vehicle veh, int seat)
|
||||
{
|
||||
if (!Function.Call<bool>(Hash.DOES_VEHICLE_HAVE_WEAPONS, veh.Handle))
|
||||
@ -392,7 +386,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -3,436 +3,436 @@
|
||||
// This is up-to-date for b2372
|
||||
internal enum TaskType
|
||||
{
|
||||
CTaskHandsUp = 0,
|
||||
CTaskClimbLadder = 1,
|
||||
CTaskExitVehicle = 2,
|
||||
CTaskCombatRoll = 3,
|
||||
CTaskAimGunOnFoot = 4,
|
||||
CTaskMovePlayer = 5,
|
||||
CTaskPlayerOnFoot = 6,
|
||||
CTaskWeapon = 8,
|
||||
CTaskPlayerWeapon = 9,
|
||||
CTaskPlayerIdles = 10,
|
||||
CTaskAimGun = 12,
|
||||
CTaskComplex = 12,
|
||||
CTaskFSMClone = 12,
|
||||
CTaskMotionBase = 12,
|
||||
CTaskMove = 12,
|
||||
CTaskMoveBase = 12,
|
||||
CTaskNMBehaviour = 12,
|
||||
CTaskNavBase = 12,
|
||||
CTaskScenario = 12,
|
||||
CTaskSearchBase = 12,
|
||||
CTaskSearchInVehicleBase = 12,
|
||||
CTaskShockingEvent = 12,
|
||||
CTaskTrainBase = 12,
|
||||
CTaskVehicleFSM = 12,
|
||||
CTaskVehicleGoTo = 12,
|
||||
CTaskVehicleMissionBase = 12,
|
||||
CTaskVehicleTempAction = 12,
|
||||
CTaskPause = 14,
|
||||
CTaskDoNothing = 15,
|
||||
CTaskGetUp = 16,
|
||||
CTaskGetUpAndStandStill = 17,
|
||||
CTaskFallOver = 18,
|
||||
CTaskFallAndGetUp = 19,
|
||||
CTaskCrawl = 20,
|
||||
CTaskComplexOnFire = 25,
|
||||
CTaskDamageElectric = 26,
|
||||
CTaskTriggerLookAt = 28,
|
||||
CTaskClearLookAt = 29,
|
||||
CTaskSetCharDecisionMaker = 30,
|
||||
CTaskSetPedDefensiveArea = 31,
|
||||
CTaskUseSequence = 32,
|
||||
CTaskMoveStandStill = 34,
|
||||
CTaskComplexControlMovement = 35,
|
||||
CTaskMoveSequence = 36,
|
||||
CTaskAmbientClips = 38,
|
||||
CTaskMoveInAir = 39,
|
||||
CTaskNetworkClone = 40,
|
||||
CTaskUseClimbOnRoute = 41,
|
||||
CTaskUseDropDownOnRoute = 42,
|
||||
CTaskUseLadderOnRoute = 43,
|
||||
CTaskSetBlockingOfNonTemporaryEvents = 44,
|
||||
CTaskForceMotionState = 45,
|
||||
CTaskSlopeScramble = 46,
|
||||
CTaskGoToAndClimbLadder = 47,
|
||||
CTaskClimbLadderFully = 48,
|
||||
CTaskRappel = 49,
|
||||
CTaskVault = 50,
|
||||
CTaskDropDown = 51,
|
||||
CTaskAffectSecondaryBehaviour = 52,
|
||||
CTaskAmbientLookAtEvent = 53,
|
||||
CTaskOpenDoor = 54,
|
||||
CTaskShovePed = 55,
|
||||
CTaskSwapWeapon = 56,
|
||||
CTaskGeneralSweep = 57,
|
||||
CTaskPolice = 58,
|
||||
CTaskPoliceOrderResponse = 59,
|
||||
CTaskPursueCriminal = 60,
|
||||
CTaskArrestPed = 62,
|
||||
CTaskArrestPed2 = 63,
|
||||
CTaskBusted = 64,
|
||||
CTaskFirePatrol = 65,
|
||||
CTaskHeliOrderResponse = 66,
|
||||
CTaskHeliPassengerRappel = 67,
|
||||
CTaskAmbulancePatrol = 68,
|
||||
CTaskPoliceWantedResponse = 69,
|
||||
CTaskSwat = 70,
|
||||
CTaskSwatWantedResponse = 72,
|
||||
CTaskSwatOrderResponse = 73,
|
||||
CTaskSwatGoToStagingArea = 74,
|
||||
CTaskSwatFollowInLine = 75,
|
||||
CTaskWitness = 76,
|
||||
CTaskGangPatrol = 77,
|
||||
CTaskArmy = 78,
|
||||
CTaskShockingEventWatch = 80,
|
||||
CTaskShockingEventGoto = 82,
|
||||
CTaskShockingEventHurryAway = 83,
|
||||
CTaskShockingEventReactToAircraft = 84,
|
||||
CTaskShockingEventReact = 85,
|
||||
CTaskShockingEventBackAway = 86,
|
||||
CTaskShockingPoliceInvestigate = 87,
|
||||
CTaskShockingEventStopAndStare = 88,
|
||||
CTaskShockingNiceCarPicture = 89,
|
||||
CTaskShockingEventThreatResponse = 90,
|
||||
CTaskTakeOffHelmet = 92,
|
||||
CTaskCarReactToVehicleCollision = 93,
|
||||
CTaskCarReactToVehicleCollisionGetOut = 95,
|
||||
CTaskDyingDead = 97,
|
||||
CTaskWanderingScenario = 100,
|
||||
CTaskWanderingInRadiusScenario = 101,
|
||||
CTaskMoveBetweenPointsScenario = 103,
|
||||
CTaskChatScenario = 104,
|
||||
CTaskCowerScenario = 106,
|
||||
CTaskDeadBodyScenario = 107,
|
||||
CTaskSayAudio = 114,
|
||||
CTaskWaitForSteppingOut = 116,
|
||||
CTaskCoupleScenario = 117,
|
||||
CTaskUseScenario = 118,
|
||||
CTaskUseVehicleScenario = 119,
|
||||
CTaskUnalerted = 120,
|
||||
CTaskStealVehicle = 121,
|
||||
CTaskReactToPursuit = 122,
|
||||
CTaskHitWall = 125,
|
||||
CTaskCower = 126,
|
||||
CTaskCrouch = 127,
|
||||
CTaskMelee = 128,
|
||||
CTaskMoveMeleeMovement = 129,
|
||||
CTaskMeleeActionResult = 130,
|
||||
CTaskMeleeUpperbodyAnims = 131,
|
||||
CTaskMoVEScripted = 133,
|
||||
CTaskScriptedAnimation = 134,
|
||||
CTaskSynchronizedScene = 135,
|
||||
CTaskComplexEvasiveStep = 137,
|
||||
CTaskWalkRoundCarWhileWandering = 138,
|
||||
CTaskComplexStuckInAir = 140,
|
||||
CTaskWalkRoundEntity = 141,
|
||||
CTaskMoveWalkRoundVehicle = 142,
|
||||
CTaskReactToGunAimedAt = 144,
|
||||
CTaskDuckAndCover = 146,
|
||||
CTaskAggressiveRubberneck = 147,
|
||||
CTaskInVehicleBasic = 150,
|
||||
CTaskCarDriveWander = 151,
|
||||
CTaskLeaveAnyCar = 152,
|
||||
CTaskComplexGetOffBoat = 153,
|
||||
CTaskCarSetTempAction = 155,
|
||||
CTaskBringVehicleToHalt = 156,
|
||||
CTaskCarDrive = 157,
|
||||
CTaskPlayerDrive = 159,
|
||||
CTaskEnterVehicle = 160,
|
||||
CTaskEnterVehicleAlign = 161,
|
||||
CTaskOpenVehicleDoorFromOutside = 162,
|
||||
CTaskEnterVehicleSeat = 163,
|
||||
CTaskCloseVehicleDoorFromInside = 164,
|
||||
CTaskInVehicleSeatShuffle = 165,
|
||||
CTaskExitVehicleSeat = 167,
|
||||
CTaskCloseVehicleDoorFromOutside = 168,
|
||||
CTaskControlVehicle = 169,
|
||||
CTaskMotionInAutomobile = 170,
|
||||
CTaskMotionOnBicycle = 171,
|
||||
CTaskMotionOnBicycleController = 172,
|
||||
CTaskMotionInVehicle = 173,
|
||||
CTaskMotionInTurret = 174,
|
||||
CTaskReactToBeingJacked = 175,
|
||||
CTaskReactToBeingAskedToLeaveVehicle = 176,
|
||||
CTaskTryToGrabVehicleDoor = 177,
|
||||
CTaskGetOnTrain = 178,
|
||||
CTaskGetOffTrain = 179,
|
||||
CTaskRideTrain = 180,
|
||||
CTaskMountThrowProjectile = 190,
|
||||
CTaskGoToCarDoorAndStandStill = 195,
|
||||
CTaskMoveGoToVehicleDoor = 196,
|
||||
CTaskSetPedInVehicle = 197,
|
||||
CTaskSetPedOutOfVehicle = 198,
|
||||
CTaskVehicleMountedWeapon = 199,
|
||||
CTaskVehicleGun = 200,
|
||||
CTaskVehicleProjectile = 201,
|
||||
CTaskSmashCarWindow = 204,
|
||||
CTaskMoveGoToPoint = 205,
|
||||
CTaskMoveAchieveHeading = 206,
|
||||
CTaskMoveFaceTarget = 207,
|
||||
CTaskComplexGoToPointAndStandStillTimed = 208,
|
||||
CTaskMoveGoToPointAndStandStill = 208,
|
||||
CTaskMoveFollowPointRoute = 209,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorStandard = 210,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorLastNavMeshIntersection = 211,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorLastNavMeshIntersection2 = 212,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorXYOffsetFixed = 213,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorXYOffsetFixed2 = 214,
|
||||
CTaskExhaustedFlee = 215,
|
||||
CTaskGrowlAndFlee = 216,
|
||||
CTaskScenarioFlee = 217,
|
||||
CTaskSmartFlee = 218,
|
||||
CTaskFlyAway = 219,
|
||||
CTaskWalkAway = 220,
|
||||
CTaskWander = 221,
|
||||
CTaskWanderInArea = 222,
|
||||
CTaskFollowLeaderInFormation = 223,
|
||||
CTaskGoToPointAnyMeans = 224,
|
||||
CTaskTurnToFaceEntityOrCoord = 225,
|
||||
CTaskFollowLeaderAnyMeans = 226,
|
||||
CTaskFlyToPoint = 228,
|
||||
CTaskFlyingWander = 229,
|
||||
CTaskGoToPointAiming = 230,
|
||||
CTaskGoToScenario = 231,
|
||||
CTaskSeekEntityAiming = 233,
|
||||
CTaskSlideToCoord = 234,
|
||||
CTaskSwimmingWander = 235,
|
||||
CTaskMoveTrackingEntity = 237,
|
||||
CTaskMoveFollowNavMesh = 238,
|
||||
CTaskMoveGoToPointOnRoute = 239,
|
||||
CTaskEscapeBlast = 240,
|
||||
CTaskMoveWander = 241,
|
||||
CTaskMoveBeInFormation = 242,
|
||||
CTaskMoveCrowdAroundLocation = 243,
|
||||
CTaskMoveCrossRoadAtTrafficLights = 244,
|
||||
CTaskMoveWaitForTraffic = 245,
|
||||
CTaskMoveGoToPointStandStillAchieveHeading = 246,
|
||||
CTaskMoveGetOntoMainNavMesh = 251,
|
||||
CTaskMoveSlideToCoord = 252,
|
||||
CTaskMoveGoToPointRelativeToEntityAndStandStill = 253,
|
||||
CTaskHelicopterStrafe = 254,
|
||||
CTaskGetOutOfWater = 256,
|
||||
CTaskMoveFollowEntityOffset = 259,
|
||||
CTaskFollowWaypointRecording = 261,
|
||||
CTaskMotionPed = 264,
|
||||
CTaskMotionPedLowLod = 265,
|
||||
CTaskHumanLocomotion = 268,
|
||||
CTaskMotionBasicLocomotionLowLod = 269,
|
||||
CTaskMotionStrafing = 270,
|
||||
CTaskMotionTennis = 271,
|
||||
CTaskMotionAiming = 272,
|
||||
CTaskBirdLocomotion = 273,
|
||||
CTaskFlightlessBirdLocomotion = 274,
|
||||
CTaskFishLocomotion = 278,
|
||||
CTaskQuadLocomotion = 279,
|
||||
CTaskMotionDiving = 280,
|
||||
CTaskMotionSwimming = 281,
|
||||
CTaskMotionParachuting = 282,
|
||||
CTaskMotionDrunk = 283,
|
||||
CTaskRepositionMove = 284,
|
||||
CTaskMotionAimingTransition = 285,
|
||||
CTaskThrowProjectile = 286,
|
||||
CTaskCover = 287,
|
||||
CTaskMotionInCover = 288,
|
||||
CTaskAimAndThrowProjectile = 289,
|
||||
CTaskGun = 290,
|
||||
CTaskAimFromGround = 291,
|
||||
CTaskAimGunVehicleDriveBy = 295,
|
||||
CTaskAimGunScripted = 296,
|
||||
CTaskReloadGun = 298,
|
||||
CTaskWeaponBlocked = 299,
|
||||
CTaskEnterCover = 300,
|
||||
CTaskExitCover = 301,
|
||||
CTaskAimGunFromCoverIntro = 302,
|
||||
CTaskAimGunFromCoverOutro = 303,
|
||||
CTaskAimGunBlindFire = 304,
|
||||
CTaskCombatClosestTargetInArea = 307,
|
||||
CTaskCombatAdditionalTask = 308,
|
||||
CTaskInCover = 309,
|
||||
CTaskAimSweep = 313,
|
||||
CTaskSharkCircle = 319,
|
||||
CTaskSharkAttack = 320,
|
||||
CTaskAgitated = 321,
|
||||
CTaskAgitatedAction = 322,
|
||||
CTaskConfront = 323,
|
||||
CTaskIntimidate = 324,
|
||||
CTaskShove = 325,
|
||||
CTaskShoved = 326,
|
||||
CTaskCrouchToggle = 328,
|
||||
CTaskRevive = 329,
|
||||
CTaskParachute = 335,
|
||||
CTaskParachuteObject = 336,
|
||||
CTaskTakeOffPedVariation = 337,
|
||||
CTaskCombatSeekCover = 340,
|
||||
CTaskCombatFlank = 342,
|
||||
CTaskCombat = 343,
|
||||
CTaskCombatMounted = 344,
|
||||
CTaskMoveCircle = 345,
|
||||
CTaskMoveCombatMounted = 346,
|
||||
CTaskSearch = 347,
|
||||
CTaskSearchOnFoot = 348,
|
||||
CTaskSearchInAutomobile = 349,
|
||||
CTaskSearchInBoat = 350,
|
||||
CTaskSearchInHeli = 351,
|
||||
CTaskThreatResponse = 352,
|
||||
CTaskInvestigate = 353,
|
||||
CTaskStandGuardFSM = 354,
|
||||
CTaskPatrol = 355,
|
||||
CTaskShootAtTarget = 356,
|
||||
CTaskSetAndGuardArea = 357,
|
||||
CTaskStandGuard = 358,
|
||||
CTaskSeparate = 359,
|
||||
CTaskStayInCover = 360,
|
||||
CTaskVehicleCombat = 361,
|
||||
CTaskVehiclePersuit = 362,
|
||||
CTaskVehicleChase = 363,
|
||||
CTaskDraggingToSafety = 364,
|
||||
CTaskDraggedToSafety = 365,
|
||||
CTaskVariedAimPose = 366,
|
||||
CTaskMoveWithinAttackWindow = 367,
|
||||
CTaskMoveWithinDefensiveArea = 368,
|
||||
CTaskShootOutTire = 369,
|
||||
CTaskShellShocked = 370,
|
||||
CTaskBoatChase = 371,
|
||||
CTaskBoatCombat = 372,
|
||||
CTaskBoatStrafe = 373,
|
||||
CTaskHeliChase = 374,
|
||||
CTaskHeliCombat = 375,
|
||||
CTaskSubmarineCombat = 376,
|
||||
CTaskSubmarineChase = 377,
|
||||
CTaskPlaneChase = 378,
|
||||
CTaskTargetUnreachable = 379,
|
||||
CTaskTargetUnreachableInInterior = 380,
|
||||
CTaskTargetUnreachableInExterior = 381,
|
||||
CTaskStealthKill = 382,
|
||||
CTaskWrithe = 383,
|
||||
CTaskAdvance = 384,
|
||||
CTaskCharge = 385,
|
||||
CTaskMoveToTacticalPoint = 386,
|
||||
CTaskToHurtTransit = 387,
|
||||
CTaskAnimatedHitByExplosion = 388,
|
||||
CTaskNMRelax = 389,
|
||||
CTaskNMPose = 391,
|
||||
CTaskNMBrace = 392,
|
||||
CTaskNMBuoyancy = 393,
|
||||
CTaskNMInjuredOnGround = 394,
|
||||
CTaskNMShot = 395,
|
||||
CTaskNMHighFall = 396,
|
||||
CTaskNMBalance = 397,
|
||||
CTaskNMElectrocute = 398,
|
||||
CTaskNMPrototype = 399,
|
||||
CTaskNMExplosion = 400,
|
||||
CTaskNMOnFire = 401,
|
||||
CTaskNMScriptControl = 402,
|
||||
CTaskNMJumpRollFromRoadVehicle = 403,
|
||||
CTaskNMFlinch = 404,
|
||||
CTaskNMSit = 405,
|
||||
CTaskNMFallDown = 406,
|
||||
CTaskBlendFromNM = 407,
|
||||
CTaskNMControl = 408,
|
||||
CTaskNMDangle = 409,
|
||||
CTaskNMGenericAttach = 412,
|
||||
CTaskNMDraggingToSafety = 414,
|
||||
CTaskNMThroughWindscreen = 415,
|
||||
CTaskNMRiverRapids = 416,
|
||||
CTaskNMSimple = 417,
|
||||
CTaskRageRagdoll = 418,
|
||||
CTaskJumpVault = 421,
|
||||
CTaskJump = 422,
|
||||
CTaskFall = 423,
|
||||
CTaskReactAimWeapon = 425,
|
||||
CTaskChat = 426,
|
||||
CTaskMobilePhone = 427,
|
||||
CTaskReactToDeadPed = 428,
|
||||
CTaskSearchForUnknownThreat = 430,
|
||||
CTaskBomb = 432,
|
||||
CTaskDetonator = 433,
|
||||
CTaskAnimatedAttach = 435,
|
||||
CTaskCutScene = 441,
|
||||
CTaskReactToExplosion = 442,
|
||||
CTaskReactToImminentExplosion = 443,
|
||||
CTaskDiveToGround = 444,
|
||||
CTaskReactAndFlee = 445,
|
||||
CTaskSidestep = 446,
|
||||
CTaskCallPolice = 447,
|
||||
CTaskReactInDirection = 448,
|
||||
CTaskReactToBuddyShot = 449,
|
||||
CTaskVehicleGoToAutomobileNew = 454,
|
||||
CTaskVehicleGoToPlane = 455,
|
||||
CTaskVehicleGoToHelicopter = 456,
|
||||
CTaskVehicleGoToSubmarine = 457,
|
||||
CTaskVehicleGoToBoat = 458,
|
||||
CTaskVehicleGoToPointAutomobile = 459,
|
||||
CTaskVehicleGoToPointWithAvoidanceAutomobile = 460,
|
||||
CTaskVehiclePursue = 461,
|
||||
CTaskVehicleRam = 462,
|
||||
CTaskVehicleSpinOut = 463,
|
||||
CTaskVehicleApproach = 464,
|
||||
CTaskVehicleThreePointTurn = 465,
|
||||
CTaskVehicleDeadDriver = 466,
|
||||
CTaskVehicleCruiseNew = 467,
|
||||
CTaskVehicleCruiseBoat = 468,
|
||||
CTaskVehicleStop = 469,
|
||||
CTaskVehiclePullOver = 470,
|
||||
CTaskVehiclePassengerExit = 471,
|
||||
CTaskVehicleFlee = 472,
|
||||
CTaskVehicleFleeAirborne = 473,
|
||||
CTaskVehicleFleeBoat = 474,
|
||||
CTaskVehicleFollowRecording = 475,
|
||||
CTaskVehicleFollow = 476,
|
||||
CTaskVehicleBlock = 477,
|
||||
CTaskVehicleBlockCruiseInFront = 478,
|
||||
CTaskVehicleBlockBrakeInFront = 479,
|
||||
CTaskVehicleBlockBackAndForth = 478,
|
||||
CTaskVehicleCrash = 481,
|
||||
CTaskVehicleLand = 482,
|
||||
CTaskVehicleLandPlane = 483,
|
||||
CTaskVehicleHover = 484,
|
||||
CTaskVehicleAttack = 485,
|
||||
CTaskVehicleAttackTank = 486,
|
||||
CTaskVehicleCircle = 487,
|
||||
CTaskVehiclePoliceBehaviour = 488,
|
||||
CTaskVehiclePoliceBehaviourHelicopter = 489,
|
||||
CTaskVehiclePoliceBehaviourBoat = 490,
|
||||
CTaskVehicleEscort = 491,
|
||||
CTaskVehicleHeliProtect = 492,
|
||||
CTaskVehiclePlayerDriveAutomobile = 494,
|
||||
CTaskVehiclePlayerDriveBike = 495,
|
||||
CTaskVehiclePlayerDriveBoat = 496,
|
||||
CTaskVehiclePlayerDriveSubmarine = 497,
|
||||
CTaskVehiclePlayerDriveSubmarineCar = 498,
|
||||
CTaskVehiclePlayerDriveAmphibiousAutomobile = 499,
|
||||
CTaskVehiclePlayerDrivePlane = 500,
|
||||
CTaskVehiclePlayerDriveHeli = 501,
|
||||
CTaskVehiclePlayerDriveAutogyro = 502,
|
||||
CTaskVehiclePlayerDriveDiggerArm = 503,
|
||||
CTaskVehiclePlayerDriveTrain = 504,
|
||||
CTaskVehiclePlaneChase = 505,
|
||||
CTaskVehicleNoDriver = 506,
|
||||
CTaskVehicleAnimation = 507,
|
||||
CTaskVehicleConvertibleRoof = 508,
|
||||
CTaskVehicleParkNew = 509,
|
||||
CTaskVehicleFollowWaypointRecording = 510,
|
||||
CTaskVehicleGoToNavmesh = 511,
|
||||
CTaskVehicleReactToCopSiren = 512,
|
||||
CTaskVehicleGotoLongRange = 513,
|
||||
CTaskVehicleWait = 514,
|
||||
CTaskVehicleReverse = 515,
|
||||
CTaskVehicleBrake = 516,
|
||||
CTaskVehicleHandBrake = 517,
|
||||
CTaskVehicleTurn = 518,
|
||||
CTaskVehicleGoForward = 519,
|
||||
CTaskVehicleSwerve = 520,
|
||||
CTaskVehicleFlyDirection = 521,
|
||||
CTaskVehicleHeadonCollision = 522,
|
||||
CTaskVehicleBoostUseSteeringAngle = 523,
|
||||
CTaskVehicleShotTire = 524,
|
||||
CTaskVehicleBurnout = 525,
|
||||
CTaskVehicleRevEngine = 526,
|
||||
CTaskVehicleSurfaceInSubmarine = 527,
|
||||
CTaskVehiclePullAlongside = 528,
|
||||
CTaskVehicleTransformToSubmarine = 529,
|
||||
CTaskAnimatedFallback = 530
|
||||
CTaskHandsUp = 0,
|
||||
CTaskClimbLadder = 1,
|
||||
CTaskExitVehicle = 2,
|
||||
CTaskCombatRoll = 3,
|
||||
CTaskAimGunOnFoot = 4,
|
||||
CTaskMovePlayer = 5,
|
||||
CTaskPlayerOnFoot = 6,
|
||||
CTaskWeapon = 8,
|
||||
CTaskPlayerWeapon = 9,
|
||||
CTaskPlayerIdles = 10,
|
||||
CTaskAimGun = 12,
|
||||
CTaskComplex = 12,
|
||||
CTaskFSMClone = 12,
|
||||
CTaskMotionBase = 12,
|
||||
CTaskMove = 12,
|
||||
CTaskMoveBase = 12,
|
||||
CTaskNMBehaviour = 12,
|
||||
CTaskNavBase = 12,
|
||||
CTaskScenario = 12,
|
||||
CTaskSearchBase = 12,
|
||||
CTaskSearchInVehicleBase = 12,
|
||||
CTaskShockingEvent = 12,
|
||||
CTaskTrainBase = 12,
|
||||
CTaskVehicleFSM = 12,
|
||||
CTaskVehicleGoTo = 12,
|
||||
CTaskVehicleMissionBase = 12,
|
||||
CTaskVehicleTempAction = 12,
|
||||
CTaskPause = 14,
|
||||
CTaskDoNothing = 15,
|
||||
CTaskGetUp = 16,
|
||||
CTaskGetUpAndStandStill = 17,
|
||||
CTaskFallOver = 18,
|
||||
CTaskFallAndGetUp = 19,
|
||||
CTaskCrawl = 20,
|
||||
CTaskComplexOnFire = 25,
|
||||
CTaskDamageElectric = 26,
|
||||
CTaskTriggerLookAt = 28,
|
||||
CTaskClearLookAt = 29,
|
||||
CTaskSetCharDecisionMaker = 30,
|
||||
CTaskSetPedDefensiveArea = 31,
|
||||
CTaskUseSequence = 32,
|
||||
CTaskMoveStandStill = 34,
|
||||
CTaskComplexControlMovement = 35,
|
||||
CTaskMoveSequence = 36,
|
||||
CTaskAmbientClips = 38,
|
||||
CTaskMoveInAir = 39,
|
||||
CTaskNetworkClone = 40,
|
||||
CTaskUseClimbOnRoute = 41,
|
||||
CTaskUseDropDownOnRoute = 42,
|
||||
CTaskUseLadderOnRoute = 43,
|
||||
CTaskSetBlockingOfNonTemporaryEvents = 44,
|
||||
CTaskForceMotionState = 45,
|
||||
CTaskSlopeScramble = 46,
|
||||
CTaskGoToAndClimbLadder = 47,
|
||||
CTaskClimbLadderFully = 48,
|
||||
CTaskRappel = 49,
|
||||
CTaskVault = 50,
|
||||
CTaskDropDown = 51,
|
||||
CTaskAffectSecondaryBehaviour = 52,
|
||||
CTaskAmbientLookAtEvent = 53,
|
||||
CTaskOpenDoor = 54,
|
||||
CTaskShovePed = 55,
|
||||
CTaskSwapWeapon = 56,
|
||||
CTaskGeneralSweep = 57,
|
||||
CTaskPolice = 58,
|
||||
CTaskPoliceOrderResponse = 59,
|
||||
CTaskPursueCriminal = 60,
|
||||
CTaskArrestPed = 62,
|
||||
CTaskArrestPed2 = 63,
|
||||
CTaskBusted = 64,
|
||||
CTaskFirePatrol = 65,
|
||||
CTaskHeliOrderResponse = 66,
|
||||
CTaskHeliPassengerRappel = 67,
|
||||
CTaskAmbulancePatrol = 68,
|
||||
CTaskPoliceWantedResponse = 69,
|
||||
CTaskSwat = 70,
|
||||
CTaskSwatWantedResponse = 72,
|
||||
CTaskSwatOrderResponse = 73,
|
||||
CTaskSwatGoToStagingArea = 74,
|
||||
CTaskSwatFollowInLine = 75,
|
||||
CTaskWitness = 76,
|
||||
CTaskGangPatrol = 77,
|
||||
CTaskArmy = 78,
|
||||
CTaskShockingEventWatch = 80,
|
||||
CTaskShockingEventGoto = 82,
|
||||
CTaskShockingEventHurryAway = 83,
|
||||
CTaskShockingEventReactToAircraft = 84,
|
||||
CTaskShockingEventReact = 85,
|
||||
CTaskShockingEventBackAway = 86,
|
||||
CTaskShockingPoliceInvestigate = 87,
|
||||
CTaskShockingEventStopAndStare = 88,
|
||||
CTaskShockingNiceCarPicture = 89,
|
||||
CTaskShockingEventThreatResponse = 90,
|
||||
CTaskTakeOffHelmet = 92,
|
||||
CTaskCarReactToVehicleCollision = 93,
|
||||
CTaskCarReactToVehicleCollisionGetOut = 95,
|
||||
CTaskDyingDead = 97,
|
||||
CTaskWanderingScenario = 100,
|
||||
CTaskWanderingInRadiusScenario = 101,
|
||||
CTaskMoveBetweenPointsScenario = 103,
|
||||
CTaskChatScenario = 104,
|
||||
CTaskCowerScenario = 106,
|
||||
CTaskDeadBodyScenario = 107,
|
||||
CTaskSayAudio = 114,
|
||||
CTaskWaitForSteppingOut = 116,
|
||||
CTaskCoupleScenario = 117,
|
||||
CTaskUseScenario = 118,
|
||||
CTaskUseVehicleScenario = 119,
|
||||
CTaskUnalerted = 120,
|
||||
CTaskStealVehicle = 121,
|
||||
CTaskReactToPursuit = 122,
|
||||
CTaskHitWall = 125,
|
||||
CTaskCower = 126,
|
||||
CTaskCrouch = 127,
|
||||
CTaskMelee = 128,
|
||||
CTaskMoveMeleeMovement = 129,
|
||||
CTaskMeleeActionResult = 130,
|
||||
CTaskMeleeUpperbodyAnims = 131,
|
||||
CTaskMoVEScripted = 133,
|
||||
CTaskScriptedAnimation = 134,
|
||||
CTaskSynchronizedScene = 135,
|
||||
CTaskComplexEvasiveStep = 137,
|
||||
CTaskWalkRoundCarWhileWandering = 138,
|
||||
CTaskComplexStuckInAir = 140,
|
||||
CTaskWalkRoundEntity = 141,
|
||||
CTaskMoveWalkRoundVehicle = 142,
|
||||
CTaskReactToGunAimedAt = 144,
|
||||
CTaskDuckAndCover = 146,
|
||||
CTaskAggressiveRubberneck = 147,
|
||||
CTaskInVehicleBasic = 150,
|
||||
CTaskCarDriveWander = 151,
|
||||
CTaskLeaveAnyCar = 152,
|
||||
CTaskComplexGetOffBoat = 153,
|
||||
CTaskCarSetTempAction = 155,
|
||||
CTaskBringVehicleToHalt = 156,
|
||||
CTaskCarDrive = 157,
|
||||
CTaskPlayerDrive = 159,
|
||||
CTaskEnterVehicle = 160,
|
||||
CTaskEnterVehicleAlign = 161,
|
||||
CTaskOpenVehicleDoorFromOutside = 162,
|
||||
CTaskEnterVehicleSeat = 163,
|
||||
CTaskCloseVehicleDoorFromInside = 164,
|
||||
CTaskInVehicleSeatShuffle = 165,
|
||||
CTaskExitVehicleSeat = 167,
|
||||
CTaskCloseVehicleDoorFromOutside = 168,
|
||||
CTaskControlVehicle = 169,
|
||||
CTaskMotionInAutomobile = 170,
|
||||
CTaskMotionOnBicycle = 171,
|
||||
CTaskMotionOnBicycleController = 172,
|
||||
CTaskMotionInVehicle = 173,
|
||||
CTaskMotionInTurret = 174,
|
||||
CTaskReactToBeingJacked = 175,
|
||||
CTaskReactToBeingAskedToLeaveVehicle = 176,
|
||||
CTaskTryToGrabVehicleDoor = 177,
|
||||
CTaskGetOnTrain = 178,
|
||||
CTaskGetOffTrain = 179,
|
||||
CTaskRideTrain = 180,
|
||||
CTaskMountThrowProjectile = 190,
|
||||
CTaskGoToCarDoorAndStandStill = 195,
|
||||
CTaskMoveGoToVehicleDoor = 196,
|
||||
CTaskSetPedInVehicle = 197,
|
||||
CTaskSetPedOutOfVehicle = 198,
|
||||
CTaskVehicleMountedWeapon = 199,
|
||||
CTaskVehicleGun = 200,
|
||||
CTaskVehicleProjectile = 201,
|
||||
CTaskSmashCarWindow = 204,
|
||||
CTaskMoveGoToPoint = 205,
|
||||
CTaskMoveAchieveHeading = 206,
|
||||
CTaskMoveFaceTarget = 207,
|
||||
CTaskComplexGoToPointAndStandStillTimed = 208,
|
||||
CTaskMoveGoToPointAndStandStill = 208,
|
||||
CTaskMoveFollowPointRoute = 209,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorStandard = 210,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorLastNavMeshIntersection = 211,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorLastNavMeshIntersection2 = 212,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorXYOffsetFixed = 213,
|
||||
CTaskMoveSeekEntity_CEntitySeekPosCalculatorXYOffsetFixed2 = 214,
|
||||
CTaskExhaustedFlee = 215,
|
||||
CTaskGrowlAndFlee = 216,
|
||||
CTaskScenarioFlee = 217,
|
||||
CTaskSmartFlee = 218,
|
||||
CTaskFlyAway = 219,
|
||||
CTaskWalkAway = 220,
|
||||
CTaskWander = 221,
|
||||
CTaskWanderInArea = 222,
|
||||
CTaskFollowLeaderInFormation = 223,
|
||||
CTaskGoToPointAnyMeans = 224,
|
||||
CTaskTurnToFaceEntityOrCoord = 225,
|
||||
CTaskFollowLeaderAnyMeans = 226,
|
||||
CTaskFlyToPoint = 228,
|
||||
CTaskFlyingWander = 229,
|
||||
CTaskGoToPointAiming = 230,
|
||||
CTaskGoToScenario = 231,
|
||||
CTaskSeekEntityAiming = 233,
|
||||
CTaskSlideToCoord = 234,
|
||||
CTaskSwimmingWander = 235,
|
||||
CTaskMoveTrackingEntity = 237,
|
||||
CTaskMoveFollowNavMesh = 238,
|
||||
CTaskMoveGoToPointOnRoute = 239,
|
||||
CTaskEscapeBlast = 240,
|
||||
CTaskMoveWander = 241,
|
||||
CTaskMoveBeInFormation = 242,
|
||||
CTaskMoveCrowdAroundLocation = 243,
|
||||
CTaskMoveCrossRoadAtTrafficLights = 244,
|
||||
CTaskMoveWaitForTraffic = 245,
|
||||
CTaskMoveGoToPointStandStillAchieveHeading = 246,
|
||||
CTaskMoveGetOntoMainNavMesh = 251,
|
||||
CTaskMoveSlideToCoord = 252,
|
||||
CTaskMoveGoToPointRelativeToEntityAndStandStill = 253,
|
||||
CTaskHelicopterStrafe = 254,
|
||||
CTaskGetOutOfWater = 256,
|
||||
CTaskMoveFollowEntityOffset = 259,
|
||||
CTaskFollowWaypointRecording = 261,
|
||||
CTaskMotionPed = 264,
|
||||
CTaskMotionPedLowLod = 265,
|
||||
CTaskHumanLocomotion = 268,
|
||||
CTaskMotionBasicLocomotionLowLod = 269,
|
||||
CTaskMotionStrafing = 270,
|
||||
CTaskMotionTennis = 271,
|
||||
CTaskMotionAiming = 272,
|
||||
CTaskBirdLocomotion = 273,
|
||||
CTaskFlightlessBirdLocomotion = 274,
|
||||
CTaskFishLocomotion = 278,
|
||||
CTaskQuadLocomotion = 279,
|
||||
CTaskMotionDiving = 280,
|
||||
CTaskMotionSwimming = 281,
|
||||
CTaskMotionParachuting = 282,
|
||||
CTaskMotionDrunk = 283,
|
||||
CTaskRepositionMove = 284,
|
||||
CTaskMotionAimingTransition = 285,
|
||||
CTaskThrowProjectile = 286,
|
||||
CTaskCover = 287,
|
||||
CTaskMotionInCover = 288,
|
||||
CTaskAimAndThrowProjectile = 289,
|
||||
CTaskGun = 290,
|
||||
CTaskAimFromGround = 291,
|
||||
CTaskAimGunVehicleDriveBy = 295,
|
||||
CTaskAimGunScripted = 296,
|
||||
CTaskReloadGun = 298,
|
||||
CTaskWeaponBlocked = 299,
|
||||
CTaskEnterCover = 300,
|
||||
CTaskExitCover = 301,
|
||||
CTaskAimGunFromCoverIntro = 302,
|
||||
CTaskAimGunFromCoverOutro = 303,
|
||||
CTaskAimGunBlindFire = 304,
|
||||
CTaskCombatClosestTargetInArea = 307,
|
||||
CTaskCombatAdditionalTask = 308,
|
||||
CTaskInCover = 309,
|
||||
CTaskAimSweep = 313,
|
||||
CTaskSharkCircle = 319,
|
||||
CTaskSharkAttack = 320,
|
||||
CTaskAgitated = 321,
|
||||
CTaskAgitatedAction = 322,
|
||||
CTaskConfront = 323,
|
||||
CTaskIntimidate = 324,
|
||||
CTaskShove = 325,
|
||||
CTaskShoved = 326,
|
||||
CTaskCrouchToggle = 328,
|
||||
CTaskRevive = 329,
|
||||
CTaskParachute = 335,
|
||||
CTaskParachuteObject = 336,
|
||||
CTaskTakeOffPedVariation = 337,
|
||||
CTaskCombatSeekCover = 340,
|
||||
CTaskCombatFlank = 342,
|
||||
CTaskCombat = 343,
|
||||
CTaskCombatMounted = 344,
|
||||
CTaskMoveCircle = 345,
|
||||
CTaskMoveCombatMounted = 346,
|
||||
CTaskSearch = 347,
|
||||
CTaskSearchOnFoot = 348,
|
||||
CTaskSearchInAutomobile = 349,
|
||||
CTaskSearchInBoat = 350,
|
||||
CTaskSearchInHeli = 351,
|
||||
CTaskThreatResponse = 352,
|
||||
CTaskInvestigate = 353,
|
||||
CTaskStandGuardFSM = 354,
|
||||
CTaskPatrol = 355,
|
||||
CTaskShootAtTarget = 356,
|
||||
CTaskSetAndGuardArea = 357,
|
||||
CTaskStandGuard = 358,
|
||||
CTaskSeparate = 359,
|
||||
CTaskStayInCover = 360,
|
||||
CTaskVehicleCombat = 361,
|
||||
CTaskVehiclePersuit = 362,
|
||||
CTaskVehicleChase = 363,
|
||||
CTaskDraggingToSafety = 364,
|
||||
CTaskDraggedToSafety = 365,
|
||||
CTaskVariedAimPose = 366,
|
||||
CTaskMoveWithinAttackWindow = 367,
|
||||
CTaskMoveWithinDefensiveArea = 368,
|
||||
CTaskShootOutTire = 369,
|
||||
CTaskShellShocked = 370,
|
||||
CTaskBoatChase = 371,
|
||||
CTaskBoatCombat = 372,
|
||||
CTaskBoatStrafe = 373,
|
||||
CTaskHeliChase = 374,
|
||||
CTaskHeliCombat = 375,
|
||||
CTaskSubmarineCombat = 376,
|
||||
CTaskSubmarineChase = 377,
|
||||
CTaskPlaneChase = 378,
|
||||
CTaskTargetUnreachable = 379,
|
||||
CTaskTargetUnreachableInInterior = 380,
|
||||
CTaskTargetUnreachableInExterior = 381,
|
||||
CTaskStealthKill = 382,
|
||||
CTaskWrithe = 383,
|
||||
CTaskAdvance = 384,
|
||||
CTaskCharge = 385,
|
||||
CTaskMoveToTacticalPoint = 386,
|
||||
CTaskToHurtTransit = 387,
|
||||
CTaskAnimatedHitByExplosion = 388,
|
||||
CTaskNMRelax = 389,
|
||||
CTaskNMPose = 391,
|
||||
CTaskNMBrace = 392,
|
||||
CTaskNMBuoyancy = 393,
|
||||
CTaskNMInjuredOnGround = 394,
|
||||
CTaskNMShot = 395,
|
||||
CTaskNMHighFall = 396,
|
||||
CTaskNMBalance = 397,
|
||||
CTaskNMElectrocute = 398,
|
||||
CTaskNMPrototype = 399,
|
||||
CTaskNMExplosion = 400,
|
||||
CTaskNMOnFire = 401,
|
||||
CTaskNMScriptControl = 402,
|
||||
CTaskNMJumpRollFromRoadVehicle = 403,
|
||||
CTaskNMFlinch = 404,
|
||||
CTaskNMSit = 405,
|
||||
CTaskNMFallDown = 406,
|
||||
CTaskBlendFromNM = 407,
|
||||
CTaskNMControl = 408,
|
||||
CTaskNMDangle = 409,
|
||||
CTaskNMGenericAttach = 412,
|
||||
CTaskNMDraggingToSafety = 414,
|
||||
CTaskNMThroughWindscreen = 415,
|
||||
CTaskNMRiverRapids = 416,
|
||||
CTaskNMSimple = 417,
|
||||
CTaskRageRagdoll = 418,
|
||||
CTaskJumpVault = 421,
|
||||
CTaskJump = 422,
|
||||
CTaskFall = 423,
|
||||
CTaskReactAimWeapon = 425,
|
||||
CTaskChat = 426,
|
||||
CTaskMobilePhone = 427,
|
||||
CTaskReactToDeadPed = 428,
|
||||
CTaskSearchForUnknownThreat = 430,
|
||||
CTaskBomb = 432,
|
||||
CTaskDetonator = 433,
|
||||
CTaskAnimatedAttach = 435,
|
||||
CTaskCutScene = 441,
|
||||
CTaskReactToExplosion = 442,
|
||||
CTaskReactToImminentExplosion = 443,
|
||||
CTaskDiveToGround = 444,
|
||||
CTaskReactAndFlee = 445,
|
||||
CTaskSidestep = 446,
|
||||
CTaskCallPolice = 447,
|
||||
CTaskReactInDirection = 448,
|
||||
CTaskReactToBuddyShot = 449,
|
||||
CTaskVehicleGoToAutomobileNew = 454,
|
||||
CTaskVehicleGoToPlane = 455,
|
||||
CTaskVehicleGoToHelicopter = 456,
|
||||
CTaskVehicleGoToSubmarine = 457,
|
||||
CTaskVehicleGoToBoat = 458,
|
||||
CTaskVehicleGoToPointAutomobile = 459,
|
||||
CTaskVehicleGoToPointWithAvoidanceAutomobile = 460,
|
||||
CTaskVehiclePursue = 461,
|
||||
CTaskVehicleRam = 462,
|
||||
CTaskVehicleSpinOut = 463,
|
||||
CTaskVehicleApproach = 464,
|
||||
CTaskVehicleThreePointTurn = 465,
|
||||
CTaskVehicleDeadDriver = 466,
|
||||
CTaskVehicleCruiseNew = 467,
|
||||
CTaskVehicleCruiseBoat = 468,
|
||||
CTaskVehicleStop = 469,
|
||||
CTaskVehiclePullOver = 470,
|
||||
CTaskVehiclePassengerExit = 471,
|
||||
CTaskVehicleFlee = 472,
|
||||
CTaskVehicleFleeAirborne = 473,
|
||||
CTaskVehicleFleeBoat = 474,
|
||||
CTaskVehicleFollowRecording = 475,
|
||||
CTaskVehicleFollow = 476,
|
||||
CTaskVehicleBlock = 477,
|
||||
CTaskVehicleBlockCruiseInFront = 478,
|
||||
CTaskVehicleBlockBrakeInFront = 479,
|
||||
CTaskVehicleBlockBackAndForth = 478,
|
||||
CTaskVehicleCrash = 481,
|
||||
CTaskVehicleLand = 482,
|
||||
CTaskVehicleLandPlane = 483,
|
||||
CTaskVehicleHover = 484,
|
||||
CTaskVehicleAttack = 485,
|
||||
CTaskVehicleAttackTank = 486,
|
||||
CTaskVehicleCircle = 487,
|
||||
CTaskVehiclePoliceBehaviour = 488,
|
||||
CTaskVehiclePoliceBehaviourHelicopter = 489,
|
||||
CTaskVehiclePoliceBehaviourBoat = 490,
|
||||
CTaskVehicleEscort = 491,
|
||||
CTaskVehicleHeliProtect = 492,
|
||||
CTaskVehiclePlayerDriveAutomobile = 494,
|
||||
CTaskVehiclePlayerDriveBike = 495,
|
||||
CTaskVehiclePlayerDriveBoat = 496,
|
||||
CTaskVehiclePlayerDriveSubmarine = 497,
|
||||
CTaskVehiclePlayerDriveSubmarineCar = 498,
|
||||
CTaskVehiclePlayerDriveAmphibiousAutomobile = 499,
|
||||
CTaskVehiclePlayerDrivePlane = 500,
|
||||
CTaskVehiclePlayerDriveHeli = 501,
|
||||
CTaskVehiclePlayerDriveAutogyro = 502,
|
||||
CTaskVehiclePlayerDriveDiggerArm = 503,
|
||||
CTaskVehiclePlayerDriveTrain = 504,
|
||||
CTaskVehiclePlaneChase = 505,
|
||||
CTaskVehicleNoDriver = 506,
|
||||
CTaskVehicleAnimation = 507,
|
||||
CTaskVehicleConvertibleRoof = 508,
|
||||
CTaskVehicleParkNew = 509,
|
||||
CTaskVehicleFollowWaypointRecording = 510,
|
||||
CTaskVehicleGoToNavmesh = 511,
|
||||
CTaskVehicleReactToCopSiren = 512,
|
||||
CTaskVehicleGotoLongRange = 513,
|
||||
CTaskVehicleWait = 514,
|
||||
CTaskVehicleReverse = 515,
|
||||
CTaskVehicleBrake = 516,
|
||||
CTaskVehicleHandBrake = 517,
|
||||
CTaskVehicleTurn = 518,
|
||||
CTaskVehicleGoForward = 519,
|
||||
CTaskVehicleSwerve = 520,
|
||||
CTaskVehicleFlyDirection = 521,
|
||||
CTaskVehicleHeadonCollision = 522,
|
||||
CTaskVehicleBoostUseSteeringAngle = 523,
|
||||
CTaskVehicleShotTire = 524,
|
||||
CTaskVehicleBurnout = 525,
|
||||
CTaskVehicleRevEngine = 526,
|
||||
CTaskVehicleSurfaceInSubmarine = 527,
|
||||
CTaskVehiclePullAlongside = 528,
|
||||
CTaskVehicleTransformToSubmarine = 529,
|
||||
CTaskAnimatedFallback = 530
|
||||
};
|
@ -1,17 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using System.Drawing;
|
||||
using GTA;
|
||||
using RageCoop.Core;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -54,7 +53,7 @@ namespace RageCoop.Client
|
||||
public static unsafe void NativeMemory()
|
||||
{
|
||||
IntPtr address;
|
||||
|
||||
|
||||
address = Game.FindPattern("\x74\x0A\xF3\x0F\x11\xB3\x1C\x09\x00\x00\xEB\x25", "xxxxxx????xx");
|
||||
if (address != IntPtr.Zero)
|
||||
{
|
||||
@ -122,7 +121,7 @@ namespace RageCoop.Client
|
||||
|
||||
|
||||
#endregion
|
||||
public static string SettingsPath= "Scripts\\RageCoop\\Data\\RageCoop.Client.Settings.xml";
|
||||
public static string SettingsPath = "Scripts\\RageCoop\\Data\\RageCoop.Client.Settings.xml";
|
||||
public static Settings ReadSettings()
|
||||
{
|
||||
XmlSerializer ser = new XmlSerializer(typeof(Settings));
|
||||
@ -157,7 +156,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = SettingsPath ;
|
||||
string path = SettingsPath;
|
||||
Directory.CreateDirectory(Directory.GetParent(path).FullName);
|
||||
|
||||
using (FileStream stream = new FileStream(path, File.Exists(path) ? FileMode.Truncate : FileMode.Create, FileAccess.ReadWrite))
|
||||
@ -198,7 +197,7 @@ namespace RageCoop.Client
|
||||
Function.Call(Hash.STOP_ENTITY_FIRE, e.Handle);
|
||||
}
|
||||
}
|
||||
public static void SetFrozen(this Entity e,bool toggle)
|
||||
public static void SetFrozen(this Entity e, bool toggle)
|
||||
{
|
||||
Function.Call(Hash.FREEZE_ENTITY_POSITION, e, toggle);
|
||||
}
|
||||
@ -219,7 +218,7 @@ namespace RageCoop.Client
|
||||
return v;
|
||||
}
|
||||
|
||||
public static void ApplyForce(this Entity e,int boneIndex, Vector3 direction, Vector3 rotation = default(Vector3), ForceType forceType = ForceType.MaxForceRot2)
|
||||
public static void ApplyForce(this Entity e, int boneIndex, Vector3 direction, Vector3 rotation = default(Vector3), ForceType forceType = ForceType.MaxForceRot2)
|
||||
{
|
||||
Function.Call(Hash.APPLY_FORCE_TO_ENTITY, e.Handle, forceType, direction.X, direction.Y, direction.Z, rotation.X, rotation.Y, rotation.Z, boneIndex, false, true, true, false, true);
|
||||
}
|
||||
@ -242,12 +241,12 @@ namespace RageCoop.Client
|
||||
const UInt32 WM_KEYDOWN = 0x0100;
|
||||
public static void Reload()
|
||||
{
|
||||
string reloadKey="None";
|
||||
string reloadKey = "None";
|
||||
var lines = File.ReadAllLines("ScriptHookVDotNet.ini");
|
||||
foreach (var l in lines)
|
||||
{
|
||||
var ss = l.Split('=');
|
||||
if(ss.Length > 0 && ss[0]=="ReloadKey")
|
||||
if (ss.Length > 0 && ss[0]=="ReloadKey")
|
||||
{
|
||||
reloadKey = ss[1];
|
||||
}
|
||||
@ -265,7 +264,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
}
|
||||
lineList.Add("ReloadKey=Insert");
|
||||
File.WriteAllLines("ScriptHookVDotNet.ini",lineList.ToArray());
|
||||
File.WriteAllLines("ScriptHookVDotNet.ini", lineList.ToArray());
|
||||
}
|
||||
Keys key = (Keys)Enum.Parse(typeof(Keys), reloadKey, true);
|
||||
|
||||
@ -278,14 +277,14 @@ namespace RageCoop.Client
|
||||
if (File.Exists(path)) { File.Delete(path); }
|
||||
if (File.Exists(Main.Logger.LogPath)) { File.Move(Main.Logger.LogPath, path); }
|
||||
}
|
||||
catch(Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
GTA.UI.Notification.Show(ex.Message);
|
||||
}
|
||||
|
||||
PostMessage(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, (int)key, 0);
|
||||
}
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
|
||||
|
||||
|
@ -1,12 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using RageCoop.Core;
|
||||
using GTA.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -143,7 +139,7 @@ namespace RageCoop.Client
|
||||
RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public static void SetDamageModel(this Vehicle veh, VehicleDamageModel model, bool leavedoors = true)
|
||||
{
|
||||
for (int i = 0; i < 8; i++)
|
||||
@ -272,7 +268,7 @@ namespace RageCoop.Client
|
||||
{
|
||||
Function.Call(Hash.SET_VEHICLE_FLIGHT_NOZZLE_POSITION, plane, ratio);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using GTA;
|
||||
using GTA.Math;
|
||||
using GTA.Native;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
internal class MuzzleInfo
|
||||
{
|
||||
public MuzzleInfo(Vector3 pos,Vector3 forward)
|
||||
public MuzzleInfo(Vector3 pos, Vector3 forward)
|
||||
{
|
||||
Position = pos;
|
||||
ForawardVector=forward;
|
||||
@ -49,7 +45,7 @@ namespace RageCoop.Client
|
||||
}
|
||||
return p.Bones[Bone.SkelRightHand].Position;
|
||||
}
|
||||
static long BulletsShot=0;
|
||||
static long BulletsShot = 0;
|
||||
|
||||
public static float GetWeaponDamage(this Ped P, uint hash)
|
||||
{
|
||||
@ -199,7 +195,7 @@ namespace RageCoop.Client
|
||||
|
||||
// RHINO
|
||||
case 782665360:
|
||||
return new MuzzleInfo(v.Bones[35].Position,v.Bones[35].ForwardVector);
|
||||
return new MuzzleInfo(v.Bones[35].Position, v.Bones[35].ForwardVector);
|
||||
|
||||
default:
|
||||
return null;
|
||||
@ -212,7 +208,7 @@ namespace RageCoop.Client
|
||||
var type = Function.Call<int>(Hash.GET_WEAPON_DAMAGE_TYPE, vp);
|
||||
if (vp!=VehicleWeaponHash.Invalid)
|
||||
{
|
||||
if(type==3)
|
||||
if (type==3)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -231,7 +227,7 @@ namespace RageCoop.Client
|
||||
(uint)WeaponHash.Railgun,
|
||||
1638077257
|
||||
};
|
||||
|
||||
|
||||
public static readonly Dictionary<WeaponHash, int> MuzzleBoneIndexes = new Dictionary<WeaponHash, int>
|
||||
{
|
||||
{WeaponHash.HeavySniper,6},
|
||||
@ -300,7 +296,7 @@ namespace RageCoop.Client
|
||||
{WeaponHash.PumpShotgunMk2,7},
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
public static readonly HashSet<WeaponHash> ProjectileWeapons = new HashSet<WeaponHash> {
|
||||
WeaponHash.HomingLauncher,
|
||||
|
@ -1,8 +1,6 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using RageCoop.Core;
|
||||
using GTA;
|
||||
using GTA;
|
||||
using GTA.Native;
|
||||
using System;
|
||||
|
||||
namespace RageCoop.Client
|
||||
{
|
||||
@ -37,7 +35,7 @@ namespace RageCoop.Client
|
||||
|
||||
if (!Networking.IsOnServer)
|
||||
{
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
Game.DisableControlThisFrame(Control.FrontendPause);
|
||||
if (Main.Settings.DisableAlternatePause)
|
||||
@ -120,9 +118,9 @@ namespace RageCoop.Client
|
||||
ped.Kill();
|
||||
ped.Delete();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
foreach (Vehicle veh in World.GetAllVehicles())
|
||||
{
|
||||
SyncedVehicle v = veh.GetSyncEntity();
|
||||
@ -131,7 +129,7 @@ namespace RageCoop.Client
|
||||
// Don't delete player's vehicle
|
||||
continue;
|
||||
}
|
||||
if((v== null) || (v.IsLocal&&veh.PopulationType!=EntityPopulationType.Mission))
|
||||
if ((v== null) || (v.IsLocal&&veh.PopulationType!=EntityPopulationType.Mission))
|
||||
{
|
||||
Main.Logger.Debug($"Removing Vehicle {veh.Handle}. Reason:ClearTraffic");
|
||||
|
||||
|
Reference in New Issue
Block a user