├── Resources ├── Maps.bin ├── lone-icon.ico └── NeoSansStdRegular.otf ├── version.json ├── src ├── Directory.Build.props ├── Web │ ├── ProfileApi │ │ ├── Schema │ │ │ ├── StatsContainer.cs │ │ │ ├── OverallCounters.cs │ │ │ ├── OverallCountersItem.cs │ │ │ ├── CountersContainer.cs │ │ │ ├── ProfileData.cs │ │ │ └── ProfileInfo.cs │ │ └── EFTProfileResponse.cs │ ├── WebRadar │ │ ├── Data │ │ │ ├── WebPlayerType.cs │ │ │ └── WebRadarUpdate.cs │ │ └── MessagePack │ │ │ ├── Vector2Formatter.cs │ │ │ ├── Vector3Formatter.cs │ │ │ └── ResolverGenerator.cs │ └── TarkovDev │ │ └── Data │ │ └── FleaTax.cs ├── Tarkov │ ├── Unity │ │ ├── Structures │ │ │ ├── LinkedListObject.cs │ │ │ ├── DynamicArray.cs │ │ │ ├── ObjectClass.cs │ │ │ ├── UnityComponent.cs │ │ │ ├── GameObject.cs │ │ │ └── Bones.cs │ │ ├── IWorldEntity.cs │ │ ├── UnitySDK.cs │ │ └── Collections │ │ │ ├── UnityArray.cs │ │ │ └── UnityList.cs │ ├── GameWorld │ │ ├── Hazards │ │ │ ├── IWorldHazard.cs │ │ │ └── GenericWorldHazard.cs │ │ ├── Quests │ │ │ ├── QuestObjectiveType.cs │ │ │ └── QuestEntry.cs │ │ ├── Exits │ │ │ └── IExitPoint.cs │ │ ├── Explosives │ │ │ └── IExplosiveItem.cs │ │ └── Player │ │ │ ├── Helpers │ │ │ └── PlayerType.cs │ │ │ └── BtrPlayer.cs │ └── MongoID.cs ├── Misc │ ├── Workers │ │ ├── WorkerThreadSleepMode.cs │ │ └── WorkerThreadArgs.cs │ ├── RateLimiter.cs │ ├── JSON │ │ ├── Vector2JsonConverter.cs │ │ ├── Vector3JsonConverter.cs │ │ ├── CaseInsensitiveConcurrentDictionaryConverter.cs │ │ └── SKRectJsonConverter.cs │ └── Services │ │ └── LocalCache.cs ├── App.xaml ├── Lone-EFT-DMA-Radar.sln ├── UI │ ├── Radar │ │ ├── Views │ │ │ ├── RadarTab.xaml │ │ │ ├── RadarTab.xaml.cs │ │ │ ├── WebRadarTab.xaml.cs │ │ │ ├── SettingsTab.xaml.cs │ │ │ ├── RadarOverlay.xaml.cs │ │ │ ├── MapSetupHelper.xaml.cs │ │ │ ├── LootFiltersTab.xaml.cs │ │ │ ├── PlayerWatchlistTab.xaml.cs │ │ │ ├── PlayerHistoryTab.xaml.cs │ │ │ ├── PlayerWatchlistTab.xaml │ │ │ └── MapSetupHelper.xaml │ │ └── Maps │ │ │ ├── IMapEntity.cs │ │ │ ├── IEftMap.cs │ │ │ └── EftMapParams.cs │ ├── Loot │ │ ├── LootFilterEntryType.cs │ │ ├── LootPriceMode.cs │ │ └── UserLootFilter.cs │ ├── Hotkeys │ │ ├── HotkeyDelegate.cs │ │ ├── HotkeyManagerWindow.xaml.cs │ │ ├── HotkeyType.cs │ │ ├── Internal │ │ │ ├── HotkeyModeListItem.cs │ │ │ ├── ComboHotkeyValue.cs │ │ │ └── HotkeyAction.cs │ │ ├── HotkeyListBoxEntry.cs │ │ └── HotkeyAttribute.cs │ ├── Data │ │ ├── ScreenEntry.cs │ │ ├── PlayerWatchlistEntry.cs │ │ └── StaticContainerEntry.cs │ ├── ColorPicker │ │ ├── ColorPickerWindow.xaml.cs │ │ ├── ColorPickerOption.cs │ │ ├── ColorPickerWindow.xaml │ │ └── ColorDictionaryConverter.cs │ ├── Misc │ │ ├── SimpleCommand.cs │ │ ├── LoadingWindow.xaml │ │ ├── LoadingWindow.xaml.cs │ │ ├── InputBoxWindow.xaml.cs │ │ ├── StringToBrushConverter.cs │ │ ├── InputBoxWindow.xaml │ │ ├── StringToColorConverter.cs │ │ ├── InputBoxViewModel.cs │ │ └── LoadingViewModel.cs │ └── Skia │ │ ├── IMouseoverEntity.cs │ │ ├── SKWidgetClickEvent.cs │ │ ├── CustomFonts.cs │ │ └── SKFonts.cs ├── DMA │ ├── MemoryExtensions.cs │ ├── FpgaAlgo.cs │ └── InputManager.cs ├── MainWindow.xaml └── Lone-EFT-DMA-Radar.csproj ├── Maps ├── Labyrinth.json ├── Lighthouse.json ├── Woods.json ├── Terminal.json ├── Reserve.json ├── Labs.json ├── Interchange.json ├── Factory.json ├── Customs.json ├── Shoreline.json ├── GroundZero.json ├── Streets.json ├── GroundZero_3f.svg ├── Streets_5f.svg ├── Customs_-1f.svg ├── Factory_-1f.svg ├── Streets_-1f.svg ├── Shoreline_-1f.svg ├── Factory_3f.svg ├── Factory_2f.svg ├── GroundZero_-1f.svg └── Customs_3f.svg ├── SETUP_RADAR_PC.bat ├── SETUP_GAME_PC.bat ├── LICENSE ├── README.md └── .gitattributes /Resources/Maps.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lone-dma/Lone-EFT-DMA-Radar/HEAD/Resources/Maps.bin -------------------------------------------------------------------------------- /Resources/lone-icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lone-dma/Lone-EFT-DMA-Radar/HEAD/Resources/lone-icon.ico -------------------------------------------------------------------------------- /version.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.7", 3 | "publicReleaseRefSpec": [ 4 | "^refs/heads/master$" 5 | ] 6 | } -------------------------------------------------------------------------------- /Resources/NeoSansStdRegular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lone-dma/Lone-EFT-DMA-Radar/HEAD/Resources/NeoSansStdRegular.otf -------------------------------------------------------------------------------- /src/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | $(NoWarn);NU1701 4 | $(NoWarn);IDE0290 5 | 6 | -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/StatsContainer.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class StatsContainer 4 | { 5 | [JsonPropertyName("eft")] 6 | public CountersContainer Counters { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Maps/Labyrinth.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["Labyrinth"], 3 | "x": 256, 4 | "y": 374, 5 | "scale": 5, 6 | "svgScale" : 2.00, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Labyrinth.svg" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /Maps/Lighthouse.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["lighthouse"], 3 | "x": 544, 4 | "y": 721.5, 5 | "scale": 1, 6 | "svgScale": 3.5, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Lighthouse.svg" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/OverallCounters.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class OverallCounters 4 | { 5 | [JsonPropertyName("Items")] 6 | public List Items { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Maps/Woods.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["woods"], 3 | "x": 834.6, 4 | "y": 469.6, 5 | "scale": 1.048, 6 | "svgScale": 4.5, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Woods.svg" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /Maps/Terminal.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["Terminal"], 3 | "x": 735, 4 | "y": 486, 5 | "scale": 1.0, 6 | "svgScale": 2.0, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Terminal.svg" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/OverallCountersItem.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class OverallCountersItem 4 | { 5 | [JsonPropertyName("Key")] 6 | public List Key { get; set; } = new(); 7 | 8 | [JsonPropertyName("Value")] 9 | public int Value { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Maps/Reserve.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["rezervbase"], 3 | "x": 1810, 4 | "y": 1613, 5 | "scale": 5.99, 6 | "svgScale": 1.5, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Reserve.svg" 12 | }, 13 | { 14 | "minHeight": null, 15 | "maxHeight": -8, 16 | "filename": "Reserve_-1f.svg" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/CountersContainer.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class CountersContainer 4 | { 5 | [JsonPropertyName("totalInGameTime")] 6 | public int TotalInGameTime { get; set; } 7 | 8 | [JsonPropertyName("overAllCounters")] 9 | public OverallCounters OverallCounters { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Tarkov/Unity/Structures/LinkedListObject.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.Unity.Structures 2 | { 3 | [StructLayout(LayoutKind.Sequential, Pack = 8)] 4 | public readonly struct LinkedListObject 5 | { 6 | public readonly ulong PreviousObjectLink; // 0x0 7 | public readonly ulong NextObjectLink; // 0x8 8 | public readonly ulong ThisObject; // 0x10 (to Offsets.GameObject) 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /Maps/Labs.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": [ "laboratory" ], 3 | "x": 2356, 4 | "y": -1841, 5 | "scale": 8.3, 6 | "svgScale": 2.00, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Labs_-1f.svg" 12 | }, 13 | { 14 | "minHeight": -1, 15 | "maxHeight": null, 16 | "filename": "Labs_1f.svg" 17 | }, 18 | { 19 | "minHeight": 3, 20 | "maxHeight": null, 21 | "filename": "Labs_2f.svg" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/ProfileData.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class ProfileData 4 | { 5 | 6 | [JsonPropertyName("info")] 7 | public ProfileInfo Info { get; set; } 8 | 9 | [JsonPropertyName("pmcStats")] 10 | public StatsContainer PmcStats { get; set; } 11 | 12 | [JsonPropertyName("achievements")] 13 | public Dictionary Achievements { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Maps/Interchange.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["interchange"], 3 | "x": 397, 4 | "y": 494, 5 | "scale": 1.09, 6 | "svgScale": 5.00, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Interchange.svg" 12 | }, 13 | { 14 | "minHeight": 26, 15 | "maxHeight": 31, 16 | "filename": "Interchange_1f.svg" 17 | }, 18 | { 19 | "minHeight": 31, 20 | "maxHeight": null, 21 | "filename": "Interchange_2f.svg" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Hazards/IWorldHazard.cs: -------------------------------------------------------------------------------- 1 | using LoneEftDmaRadar.Tarkov.Unity; 2 | using LoneEftDmaRadar.UI.Skia; 3 | 4 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Hazards 5 | { 6 | /// 7 | /// Defines an interface for in-game world hazards. 8 | /// 9 | public interface IWorldHazard : IWorldEntity, IMouseoverEntity 10 | { 11 | /// 12 | /// Description of the hazard/type. 13 | /// 14 | string HazardType { get; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Web/ProfileApi/Schema/ProfileInfo.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Web.ProfileApi.Schema 2 | { 3 | public sealed class ProfileInfo 4 | { 5 | [JsonPropertyName("nickname")] 6 | public string Nickname { get; set; } 7 | 8 | [JsonPropertyName("experience")] 9 | public int Experience { get; set; } 10 | 11 | [JsonPropertyName("memberCategory")] 12 | public int MemberCategory { get; set; } 13 | 14 | [JsonPropertyName("registrationDate")] 15 | public int RegistrationDate { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Misc/Workers/WorkerThreadSleepMode.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Misc.Workers 2 | { 3 | /// 4 | /// Defines how a worker thread should sleep between work cycles. 5 | /// 6 | public enum WorkerThreadSleepMode 7 | { 8 | /// 9 | /// The worker will sleep for the specified Sleep Duration. 10 | /// 11 | Default, 12 | /// 13 | /// The worker will sleep for the spcecified Sleep Duration minus the time taken to perform work. 14 | /// 15 | DynamicSleep 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SETUP_RADAR_PC.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | ECHO - Checking for admin rights... 3 | NET SESSION >nul 2>&1 4 | if %errorlevel% NEQ 0 ( 5 | ECHO ERROR: This script requires administrative privileges. Please run as administrator. 6 | PAUSE 7 | EXIT 1 8 | ) 9 | ECHO - Installing Required Runtimes, please follow the prompts below: 10 | ECHO - Installing VC 2015+ Redist... 11 | winget install Microsoft.VCRedist.2015+.x64 12 | ECHO - Installing .NET10 Runtimes... 13 | winget install Microsoft.DotNet.DesktopRuntime.10 --architecture x64 14 | winget install Microsoft.DotNet.AspNetCore.10 --architecture x64 15 | PAUSE 16 | EXIT 0 -------------------------------------------------------------------------------- /Maps/Factory.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": [ 3 | "factory4_day", 4 | "factory4_night" 5 | ], 6 | "x": 64.9, 7 | "y": 67, 8 | "scale": 0.994, 9 | "svgScale": 36.00, 10 | "mapLayers": [ 11 | { 12 | "minHeight": null, 13 | "maxHeight": null, 14 | "filename": "Factory.svg" 15 | }, 16 | { 17 | "minHeight": null, 18 | "maxHeight": -0.8, 19 | "filename": "Factory_-1f.svg" 20 | }, 21 | { 22 | "minHeight": 2.8, 23 | "maxHeight": 6.5, 24 | "filename": "Factory_2f.svg" 25 | }, 26 | { 27 | "minHeight": 6.5, 28 | "maxHeight": null, 29 | "filename": "Factory_3f.svg" 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /src/Tarkov/Unity/Structures/DynamicArray.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.Unity.Structures 2 | { 3 | [StructLayout(LayoutKind.Explicit)] 4 | public readonly struct DynamicArray 5 | { 6 | [FieldOffset(0x0)] 7 | public readonly int FirstIndex; 8 | [FieldOffset(0x8)] 9 | public readonly ulong FirstValue; 10 | [FieldOffset(0x10)] 11 | public readonly ulong Size; 12 | 13 | [StructLayout(LayoutKind.Explicit, Size = 16)] 14 | public readonly struct Entry 15 | { 16 | [FieldOffset(0x8)] 17 | public readonly ulong Component; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Maps/Customs.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["bigmap"], 3 | "x": 369.40, 4 | "y": 232.91, 5 | "scale": 0.992, 6 | "svgScale" : 5.00, 7 | "disableDimming" : true, 8 | "mapLayers": [ 9 | { 10 | "minHeight": null, 11 | "maxHeight": null, 12 | "filename": "Customs.svg" 13 | }, 14 | { 15 | "minHeight": null, 16 | "maxHeight": -1.8, 17 | "filename": "Customs_-1f.svg" 18 | }, 19 | { 20 | "minHeight": -1.8, 21 | "maxHeight": null, 22 | "filename": "Customs_1f.svg" 23 | }, 24 | { 25 | "minHeight": 1.82, 26 | "maxHeight": null, 27 | "filename": "Customs_2f.svg" 28 | }, 29 | { 30 | "minHeight": 4.7, 31 | "maxHeight": null, 32 | "filename": "Customs_3f.svg" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /src/Web/ProfileApi/EFTProfileResponse.cs: -------------------------------------------------------------------------------- 1 | using LoneEftDmaRadar.Web.ProfileApi.Schema; 2 | 3 | namespace LoneEftDmaRadar.Web.ProfileApi 4 | { 5 | public sealed class EFTProfileResponse 6 | { 7 | /// 8 | /// instance ready for consumption. 9 | /// 10 | public ProfileData Data { get; init; } 11 | /// 12 | /// Raw web response from the provider (for caching purposes). 13 | /// 14 | public string Raw { get; init; } 15 | /// 16 | /// Date and time when the profile was originally looked up by the provider. 17 | /// 18 | public DateTimeOffset Updated { get; init; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Maps/Shoreline.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": ["shoreline"], 3 | "x": 1096, 4 | "y": 648, 5 | "scale": 0.995, 6 | "svgScale": 3.5, 7 | "disableDimming" : true, 8 | "mapLayers": [ 9 | { 10 | "minHeight": null, 11 | "maxHeight": null, 12 | "filename": "Shoreline.svg" 13 | }, 14 | { 15 | "minHeight": null, 16 | "maxHeight": -6, 17 | "filename": "Shoreline_-1f.svg" 18 | }, 19 | { 20 | "minHeight": -4, 21 | "maxHeight": -2, 22 | "filename": "Shoreline_1f.svg" 23 | }, 24 | { 25 | "minHeight": -1, 26 | "maxHeight": 1, 27 | "filename": "Shoreline_2f.svg" 28 | }, 29 | { 30 | "minHeight": 2, 31 | "maxHeight": null, 32 | "filename": "Shoreline_3f.svg" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /Maps/GroundZero.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": [ 3 | "Sandbox", 4 | "Sandbox_high", 5 | "Sandbox_start" 6 | ], 7 | "x": 99.5, 8 | "y": 364.2, 9 | "scale": 1, 10 | "svgScale": 8.00, 11 | "mapLayers": [ 12 | { 13 | "minHeight": null, 14 | "maxHeight": null, 15 | "filename": "GroundZero.svg" 16 | }, 17 | { 18 | "minHeight": null, 19 | "maxHeight": 16, 20 | "filename": "GroundZero_-1f.svg" 21 | }, 22 | { 23 | "minHeight": 16, 24 | "maxHeight": 26, 25 | "cannotDimLowerLayers": true, 26 | "filename": "GroundZero_1f.svg" 27 | }, 28 | { 29 | "minHeight": 26, 30 | "maxHeight": 31, 31 | "filename": "GroundZero_2f.svg" 32 | }, 33 | { 34 | "minHeight": 31, 35 | "maxHeight": null, 36 | "filename": "GroundZero_3f.svg" 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /src/App.xaml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /SETUP_GAME_PC.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | ECHO - Checking for admin rights... 3 | NET SESSION >nul 2>&1 4 | if %errorlevel% NEQ 0 ( 5 | ECHO ERROR: This script requires administrative privileges. Please run as administrator. 6 | PAUSE 7 | EXIT 1 8 | ) 9 | ECHO - Disabling Fast Boot 10 | REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /V HiberbootEnabled /T REG_DWORD /D 0 /F 11 | if %ERRORLEVEL% NEQ 0 (goto error) 12 | ECHO - Disabling Memory Compression... 13 | powershell.exe -Command "try{ Disable-MMAgent -MemoryCompression } catch { Write-Host "WARNING: Memory Compression may be already disabled. Please verify it is set to False below:" -ForegroundColor Yellow ; Get-MMAgent ; PAUSE } ; Exit 0" 14 | if %ERRORLEVEL% NEQ 0 (goto error) 15 | ECHO - Memory Compression Disabled! 16 | SHUTDOWN /r /t 10 /c "Success! Your computer will now reboot..." 17 | EXIT 0 18 | 19 | :error 20 | ECHO - An ERROR has occurred! 21 | PAUSE 22 | EXIT 1 -------------------------------------------------------------------------------- /src/Tarkov/MongoID.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov 2 | { 3 | /// 4 | /// EFT.MongoID Struct 5 | /// 6 | [StructLayout(LayoutKind.Explicit)] 7 | public readonly struct MongoID 8 | { 9 | [FieldOffset(0x0)] 10 | private readonly uint _timeStamp; 11 | [FieldOffset(0x8)] 12 | private readonly ulong _counter; 13 | [FieldOffset(0x10)] 14 | private readonly ulong _stringId; 15 | 16 | /// 17 | /// Read the string value of the MongoID. 18 | /// 19 | /// 20 | /// 21 | /// 22 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 23 | public string ReadString(int cb = 128, bool useCache = true) 24 | { 25 | return Memory.ReadUnityString(_stringId, cb, useCache); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Quests/QuestObjectiveType.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Quests 2 | { 3 | public enum QuestObjectiveType 4 | { 5 | Unknown, // for unrecognized / missing types 6 | FindQuestItem, // "findQuestItem" 7 | GiveQuestItem, // "giveQuestItem" 8 | PlantItem, // "plantItem" 9 | PlantQuestItem, // "plantQuestItem" 10 | BuildWeapon, // "buildWeapon" 11 | FindItem, // "findItem" 12 | GiveItem, // "giveItem" 13 | Visit, // "visit" 14 | Shoot, // "shoot" 15 | Skill, // "skill" 16 | Extract, // "extract" 17 | Mark, // "mark" 18 | Experience, // "experience" 19 | UseItem, // "useItem" 20 | SellItem, // "sellItem" 21 | TraderLevel, // "traderLevel" 22 | TaskStatus, // "taskStatus" 23 | TraderStanding // "traderStanding" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Maps/Streets.json: -------------------------------------------------------------------------------- 1 | { 2 | "mapID": [ "tarkovstreets" ], 3 | "x": 283, 4 | "y": 534, 5 | "scale": 1.0008, 6 | "svgScale": 4.00, 7 | "mapLayers": [ 8 | { 9 | "minHeight": null, 10 | "maxHeight": null, 11 | "filename": "Streets.svg" 12 | }, 13 | { 14 | "minHeight": null, 15 | "maxHeight": -0.7, 16 | "cannotDimLowerLayers": true, 17 | "filename": "Streets_-1f.svg" 18 | }, 19 | { 20 | "minHeight": -0.7, 21 | "maxHeight": null, 22 | "cannotDimLowerLayers": true, 23 | "filename": "Streets_1f.svg" 24 | }, 25 | { 26 | "minHeight": 4.5, 27 | "maxHeight": 7, 28 | "filename": "Streets_2f.svg" 29 | }, 30 | { 31 | "minHeight": 7, 32 | "maxHeight": 9.7, 33 | "filename": "Streets_3f.svg" 34 | }, 35 | { 36 | "minHeight": 9.7, 37 | "maxHeight": 12.7, 38 | "filename": "Streets_4f.svg" 39 | }, 40 | { 41 | "minHeight": 12.7, 42 | "maxHeight": null, 43 | "filename": "Streets_5f.svg" 44 | } 45 | ] 46 | } -------------------------------------------------------------------------------- /Maps/GroundZero_3f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Lone DMA 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/Lone-EFT-DMA-Radar.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 18 4 | VisualStudioVersion = 18.0.11111.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lone-EFT-DMA-Radar", "Lone-EFT-DMA-Radar.csproj", "{7F6D99FB-CD79-68B0-78DE-FDEB5E23FA1E}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Release|x64 = Release|x64 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {7F6D99FB-CD79-68B0-78DE-FDEB5E23FA1E}.Debug|x64.ActiveCfg = Debug|x64 15 | {7F6D99FB-CD79-68B0-78DE-FDEB5E23FA1E}.Debug|x64.Build.0 = Debug|x64 16 | {7F6D99FB-CD79-68B0-78DE-FDEB5E23FA1E}.Release|x64.ActiveCfg = Release|x64 17 | {7F6D99FB-CD79-68B0-78DE-FDEB5E23FA1E}.Release|x64.Build.0 = Release|x64 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {9FE05244-9482-47D1-B12C-9357E58CD3AB} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /src/Misc/RateLimiter.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Misc 2 | { 3 | /// 4 | /// Defines a simple rate-limiter. 5 | /// 6 | public struct RateLimiter 7 | { 8 | private readonly long _intervalTicks; 9 | private long _lastTicks; 10 | 11 | public RateLimiter() { } 12 | 13 | public RateLimiter(TimeSpan interval) 14 | { 15 | _intervalTicks = interval.Ticks; 16 | } 17 | 18 | /// 19 | /// Tries to enter the rate-limiter, and if successful, updates the last-entered time. 20 | /// 21 | /// if the rate-limiter was entered, otherwise . 22 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 23 | public bool TryEnter() 24 | { 25 | long now = Stopwatch.GetTimestamp(); 26 | long elapsed = Stopwatch.GetElapsedTime(_lastTicks, now).Ticks; 27 | if (elapsed >= _intervalTicks) 28 | { 29 | _lastTicks = now; 30 | return true; 31 | } 32 | return false; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Tarkov/Unity/Structures/ObjectClass.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.Unity.Structures 2 | { 3 | 4 | /// 5 | /// Object classes defined in Assembly-CSharp.dll 6 | /// 7 | public readonly struct ObjectClass 8 | { 9 | /// 10 | /// MonoBehaviour : Behaviour : Component : EditorExtension : Object 11 | /// 12 | public const uint MonoBehaviourOffset = 0x10; 13 | 14 | public static uint[] To_GameObject { get; } = new[] { MonoBehaviourOffset, UnitySDK.UnityOffsets.Component_GameObjectOffset }; 15 | public static uint[] To_NamePtr { get; } = new uint[] { 0x0, 0x10 }; 16 | 17 | /// 18 | /// Read the Class Name from any ObjectClass that implements UnityComponent. 19 | /// 20 | /// ObjectClass address. 21 | /// Name (string) of the object class given. 22 | public static string ReadName(ulong objectClass, int length = 128, bool useCache = true) 23 | { 24 | var namePtr = Memory.ReadPtrChain(objectClass, useCache, To_NamePtr); 25 | return Memory.ReadUtf8String(namePtr, length, useCache); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Tarkov/Unity/Structures/UnityComponent.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.Unity.Structures 2 | { 3 | [StructLayout(LayoutKind.Explicit)] 4 | public readonly struct UnityComponent // MonoBehaviour : Behaviour : << Component >> : EditorExtension : Object 5 | { 6 | [FieldOffset((int)UnitySDK.UnityOffsets.Component_ObjectClassOffset)] 7 | public readonly ulong ObjectClass; // m_Object 8 | [FieldOffset((int)UnitySDK.UnityOffsets.Component_GameObjectOffset)] 9 | public readonly ulong GameObject; // m_GameObject 10 | 11 | /// 12 | /// Return the game object of this UnityComponent. 13 | /// 14 | /// GameObject struct. 15 | public readonly GameObject GetGameObject() => 16 | Memory.ReadValue(ObjectClass); 17 | 18 | /// 19 | /// Gets a component class from a Behaviour object. 20 | /// 21 | /// Behaviour object to scan. 22 | /// Name of class of child. 23 | /// Child class component. 24 | public ulong GetComponent(ulong behaviour, string className) 25 | { 26 | return GetGameObject().GetComponent(className); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/RadarTab.xaml: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 16 | 17 | 18 | 21 | 23 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/DMA/MemoryExtensions.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.DMA 30 | { 31 | internal static class MemoryExtensions 32 | { 33 | // empty... for now 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Hazards/GenericWorldHazard.cs: -------------------------------------------------------------------------------- 1 | using LoneEftDmaRadar.Misc; 2 | using LoneEftDmaRadar.Tarkov.GameWorld.Player; 3 | using LoneEftDmaRadar.Tarkov.Unity; 4 | using LoneEftDmaRadar.UI.Radar.Maps; 5 | using LoneEftDmaRadar.UI.Skia; 6 | 7 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Hazards 8 | { 9 | public class GenericWorldHazard : IWorldHazard 10 | { 11 | [JsonPropertyName("hazardType")] 12 | public string HazardType { get; set; } 13 | 14 | [JsonPropertyName("position")] 15 | public Vector3 Position { get; set; } 16 | 17 | [JsonIgnore] 18 | public Vector2 MouseoverPosition { get; set; } 19 | 20 | [JsonIgnore] 21 | ref readonly Vector3 IWorldEntity.Position => throw new NotImplementedException(); 22 | 23 | public void Draw(SKCanvas canvas, EftMapParams mapParams, LocalPlayer localPlayer) 24 | { 25 | var hazardZoomedPos = this.Position.ToMapPos(mapParams.Map).ToZoomedPos(mapParams); 26 | MouseoverPosition = hazardZoomedPos.AsVector2(); 27 | hazardZoomedPos.DrawHazardMarker(canvas); 28 | } 29 | 30 | public void DrawMouseover(SKCanvas canvas, EftMapParams mapParams, LocalPlayer localPlayer) 31 | { 32 | Position.ToMapPos(mapParams.Map).ToZoomedPos(mapParams).DrawMouseoverText(canvas, $"Hazard: {HazardType ?? "Unknown"}"); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/UI/Loot/LootFilterEntryType.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Loot 30 | { 31 | public enum LootFilterEntryType : int 32 | { 33 | ImportantLoot = 0, // Important FilteredLoot 34 | BlacklistedLoot = 1 // Blacklisted FilteredLoot 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Maps/Streets_5f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/UI/Loot/LootPriceMode.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Loot 30 | { 31 | public enum LootPriceMode 32 | { 33 | /// 34 | /// Optimal Flea Price. 35 | /// 36 | FleaMarket = 0, 37 | /// 38 | /// Highest Trader Price. 39 | /// 40 | Trader = 1 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/Tarkov/Unity/IWorldEntity.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.Tarkov.Unity 30 | { 31 | /// 32 | /// Defines an Entity that has a 3D GameWorld Position. 33 | /// 34 | public interface IWorldEntity 35 | { 36 | /// 37 | /// Entity's Unity Position in Local Game World. 38 | /// 39 | ref readonly Vector3 Position { get; } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Exits/IExitPoint.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.Tarkov.Unity; 30 | using LoneEftDmaRadar.UI.Radar.Maps; 31 | using LoneEftDmaRadar.UI.Skia; 32 | 33 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Exits 34 | { 35 | /// 36 | /// Defines a contract for a point that can be used to exit the map. 37 | /// 38 | public interface IExitPoint : IWorldEntity, IMapEntity, IMouseoverEntity 39 | { 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/UI/Hotkeys/HotkeyDelegate.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Hotkeys 30 | { 31 | /// 32 | /// Represents a method that is called when a hotkey is activated or deactivated. 33 | /// 34 | /// A value indicating whether the hotkey is currently active. if the hotkey is pressed; 35 | /// otherwise, . 36 | public delegate void HotkeyDelegate(bool isKeyDown); 37 | } 38 | -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Quests/QuestEntry.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Quests 2 | { 3 | /// 4 | /// One-Way Binding Only 5 | /// 6 | public sealed class QuestEntry : INotifyPropertyChanged 7 | { 8 | public event PropertyChangedEventHandler PropertyChanged; 9 | private void OnPropertyChanged(string propertyName) 10 | => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 11 | 12 | public string Id { get; } 13 | public string Name { get; } 14 | private bool _isEnabled; 15 | public bool IsEnabled 16 | { 17 | get => _isEnabled; 18 | set 19 | { 20 | if (_isEnabled == value) return; 21 | _isEnabled = value; 22 | if (value) // Enabled 23 | { 24 | App.Config.QuestHelper.BlacklistedQuests.TryRemove(Id, out _); 25 | } 26 | else 27 | { 28 | App.Config.QuestHelper.BlacklistedQuests.TryAdd(Id, 0); 29 | } 30 | OnPropertyChanged(nameof(IsEnabled)); 31 | } 32 | } 33 | public QuestEntry(string id) 34 | { 35 | Id = id; 36 | if (TarkovDataManager.TaskData.TryGetValue(id, out var task)) 37 | { 38 | Name = task.Name ?? id; 39 | } 40 | else 41 | { 42 | Name = id; 43 | } 44 | _isEnabled = !App.Config.QuestHelper.BlacklistedQuests.ContainsKey(id); 45 | } 46 | 47 | public override string ToString() => Name; 48 | } 49 | } -------------------------------------------------------------------------------- /src/UI/Data/ScreenEntry.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Data 30 | { 31 | public sealed class ScreenEntry 32 | { 33 | /// 34 | /// Screen Index Number. 35 | /// 36 | public int ScreenNumber { get; } 37 | 38 | public ScreenEntry(int screenNumber) 39 | { 40 | ScreenNumber = screenNumber; 41 | } 42 | 43 | public override string ToString() => $"Screen {ScreenNumber}"; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lone EFT DMA Radar 2 | image 3 | 4 | ## ⚠️ IMPORTANT Read First 5 | I have since changed Lone EFT DMA Radar to be **READ-ONLY** and **RADAR-ONLY**. 6 | 7 | If you are looking for the old **FULL FEATURED** version of Lone EFT DMA, it is now being maintained by [DMA Educational Resources](https://github.com/dma-educational-resources/eft-dma-radar). 8 | 9 | No feature requests in Issues please. 10 | 11 | ## 👋 Welcome 12 | This is the original Lone EFT DMA Radar by Lone, with some key differences from the original version: 13 | 1. **Radar Only/No Memwrites.** 14 | 3. New & Improved WPF User Interface. 15 | 16 | This version is designed to be as safe as possible from any future detections, and gives you the information that you need while allowing you to fully experience the game for yourself. 17 | 18 | ## 💾 Setup 19 | - Download the latest version in [Releases](https://github.com/lone-dma/Lone-EFT-DMA-Radar/releases). 20 | - See our [Setup Files and Guides](https://github.com/lone-dma/Lone-EFT-DMA-Radar/releases/tag/setup). 21 | 22 | ## 💸 Donations 23 | If you find this software useful, _please_ consider donating! Every little bit helps :) [See here for Donations Info](https://github.com/lone-dma#-support-the-project) 24 | 25 | ## 💖 Special Thanks 26 | - @xx0m and @Mambo-Noob 27 | - For keeping the DER Community running, and doing an awesome job keeping the other eft-dma-radar fork maintained. Thank you! 28 | - Marazm 29 | - For your hard work on maps, and your willingness to contribute them to the open domain. Thank you! 30 | - Keegi 31 | - For your helpful insights on Unity/IL2CPP Reversing. Thank you! 32 | -------------------------------------------------------------------------------- /src/UI/ColorPicker/ColorPickerWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.ColorPicker 30 | { 31 | /// 32 | /// Interaction logic for ColorPickerWindow.xaml 33 | /// 34 | public partial class ColorPickerWindow : Window 35 | { 36 | public ColorPickerViewModel ViewModel { get; } 37 | public ColorPickerWindow() 38 | { 39 | InitializeComponent(); 40 | DataContext = ViewModel = new ColorPickerViewModel(this); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/UI/Hotkeys/HotkeyManagerWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Hotkeys 30 | { 31 | /// 32 | /// Interaction logic for HotkeyManagerWindow.xaml 33 | /// 34 | public partial class HotkeyManagerWindow : Window 35 | { 36 | public HotkeyManagerViewModel ViewModel { get; } 37 | public HotkeyManagerWindow() 38 | { 39 | InitializeComponent(); 40 | DataContext = ViewModel = new HotkeyManagerViewModel(this); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/UI/Misc/SimpleCommand.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using System.Windows.Input; 30 | 31 | namespace LoneEftDmaRadar.UI.Misc 32 | { 33 | public class SimpleCommand : ICommand 34 | { 35 | private readonly Action _execute; 36 | public SimpleCommand(Action execute) => _execute = execute; 37 | public bool CanExecute(object _) => true; 38 | #pragma warning disable CS0067 39 | public event EventHandler CanExecuteChanged; 40 | #pragma warning restore CS0067 41 | public void Execute(object _) => _execute(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/UI/Loot/UserLootFilter.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using System.Collections.ObjectModel; 30 | 31 | namespace LoneEftDmaRadar.UI.Loot 32 | { 33 | public sealed class UserLootFilter 34 | { 35 | [JsonPropertyName("enabled")] public bool Enabled { get; set; } = true; 36 | 37 | [JsonPropertyName("color")] public string Color { get; set; } = SKColors.Turquoise.ToString(); 38 | 39 | [JsonInclude] 40 | [JsonPropertyName("entries")] 41 | public ObservableCollection Entries { get; init; } = new(); 42 | } 43 | } -------------------------------------------------------------------------------- /src/UI/Hotkeys/HotkeyType.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Hotkeys 30 | { 31 | /// 32 | /// Enumeration of Hotkey Types. 33 | /// 34 | public enum HotkeyType 35 | { 36 | /// 37 | /// Hotkey fires once when the key state changes (pressed or released). 38 | /// 39 | OnKeyStateChanged, 40 | /// 41 | /// Hotkey fires repeatedly at the specified interval while the key is held down. 42 | /// 43 | OnIntervalElapsed 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/RadarTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for RadarTab.xaml 36 | /// 37 | public sealed partial class RadarTab : UserControl 38 | { 39 | public RadarViewModel ViewModel { get; } 40 | 41 | public RadarTab() 42 | { 43 | InitializeComponent(); 44 | DataContext = ViewModel = new RadarViewModel(this); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/WebRadarTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for WebRadarTab.xaml 36 | /// 37 | public partial class WebRadarTab : UserControl 38 | { 39 | public WebRadarViewModel ViewModel { get; } 40 | public WebRadarTab() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new WebRadarViewModel(); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/SettingsTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for SettingsTab.xaml 36 | /// 37 | public partial class SettingsTab : UserControl 38 | { 39 | public SettingsViewModel ViewModel { get; } 40 | public SettingsTab() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new SettingsViewModel(this); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/MainWindow.xaml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/RadarOverlay.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for RadarOverlay.xaml 36 | /// 37 | public partial class RadarOverlay : UserControl 38 | { 39 | public RadarOverlayViewModel ViewModel { get; } 40 | public RadarOverlay() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new RadarOverlayViewModel(); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/MapSetupHelper.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for MapSetupHelper.xaml 36 | /// 37 | public partial class MapSetupHelper : UserControl 38 | { 39 | public MapSetupHelperViewModel ViewModel { get; } 40 | public MapSetupHelper() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new MapSetupHelperViewModel(); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/LootFiltersTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for LootFiltersTab.xaml 36 | /// 37 | public partial class LootFiltersTab : UserControl 38 | { 39 | public LootFiltersViewModel ViewModel { get; } 40 | 41 | public LootFiltersTab() 42 | { 43 | InitializeComponent(); 44 | DataContext = ViewModel = new LootFiltersViewModel(this); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Tarkov/GameWorld/Explosives/IExplosiveItem.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.Tarkov.Unity; 30 | using LoneEftDmaRadar.UI.Radar.Maps; 31 | using VmmSharpEx.Scatter; 32 | 33 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Explosives 34 | { 35 | public interface IExplosiveItem : IWorldEntity, IMapEntity 36 | { 37 | /// 38 | /// Base address of the explosive item. 39 | /// 40 | ulong Addr { get; } 41 | /// 42 | /// Sync the state of the explosive item. 43 | /// 44 | void OnRefresh(VmmScatter scatter); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/PlayerWatchlistTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for PlayerWatchlistTab.xaml 36 | /// 37 | public partial class PlayerWatchlistTab : UserControl 38 | { 39 | public PlayerWatchlistViewModel ViewModel { get; } 40 | public PlayerWatchlistTab() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new PlayerWatchlistViewModel(this); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/UI/Radar/Maps/IMapEntity.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.Tarkov.GameWorld.Player; 30 | using LoneEftDmaRadar.Tarkov.Unity; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Maps 33 | { 34 | /// 35 | /// Defines an entity that can be drawn on the 2D Radar Map. 36 | /// 37 | public interface IMapEntity : IWorldEntity 38 | { 39 | /// 40 | /// Draw this Entity on the Radar Map. 41 | /// 42 | /// SKCanvas instance to draw on. 43 | void Draw(SKCanvas canvas, EftMapParams mapParams, LocalPlayer localPlayer); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/UI/Misc/LoadingWindow.xaml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | 30 | 31 | 35 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/Misc/Workers/WorkerThreadArgs.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.Misc.Workers 30 | { 31 | /// 32 | /// Contains arguments for Worker Thread API. 33 | /// 34 | public sealed class WorkerThreadArgs : EventArgs 35 | { 36 | public WorkerThreadArgs(CancellationToken cancellationToken) 37 | { 38 | CancellationToken = cancellationToken; 39 | } 40 | /// 41 | /// Cancellation Token for this Thread. When the object is disposed this token will be cancelled to signal the thread to stop. 42 | /// 43 | public CancellationToken CancellationToken { get; } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Misc/JSON/Vector2JsonConverter.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Misc.JSON 2 | { 3 | public sealed class Vector2JsonConverter : JsonConverter 4 | { 5 | public static Vector2JsonConverter Instance { get; } = new Vector2JsonConverter(); 6 | 7 | public override Vector2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) 8 | { 9 | if (reader.TokenType != JsonTokenType.StartObject) 10 | throw new JsonException("Expected StartObject token"); 11 | 12 | float x = 0, y = 0; 13 | 14 | while (reader.Read()) 15 | { 16 | if (reader.TokenType == JsonTokenType.EndObject) 17 | return new Vector2(x, y); 18 | 19 | if (reader.TokenType != JsonTokenType.PropertyName) 20 | throw new JsonException("Expected PropertyName token"); 21 | 22 | string propertyName = reader.GetString(); 23 | reader.Read(); 24 | 25 | switch (propertyName?.ToLowerInvariant()) 26 | { 27 | case "x": 28 | x = reader.GetSingle(); 29 | break; 30 | case "y": 31 | y = reader.GetSingle(); 32 | break; 33 | default: 34 | reader.Skip(); 35 | break; 36 | } 37 | } 38 | 39 | throw new JsonException("Unexpected end of JSON"); 40 | } 41 | 42 | public override void Write(Utf8JsonWriter writer, Vector2 value, JsonSerializerOptions options) 43 | { 44 | writer.WriteStartObject(); 45 | writer.WriteNumber("x", value.X); 46 | writer.WriteNumber("y", value.Y); 47 | writer.WriteEndObject(); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/UI/Misc/LoadingWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Misc 30 | { 31 | public sealed partial class LoadingWindow : Window, IDisposable 32 | { 33 | public LoadingViewModel ViewModel { get; } 34 | 35 | public LoadingWindow() 36 | { 37 | InitializeComponent(); 38 | DataContext = ViewModel = new LoadingViewModel(this); 39 | this.Show(); 40 | } 41 | 42 | private bool _disposed; 43 | public void Dispose() 44 | { 45 | if (Interlocked.Exchange(ref _disposed, true) == false) 46 | { 47 | this.Close(); 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/UI/Skia/IMouseoverEntity.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.Tarkov.GameWorld.Player; 30 | using LoneEftDmaRadar.UI.Radar.Maps; 31 | 32 | namespace LoneEftDmaRadar.UI.Skia 33 | { 34 | /// 35 | /// Defines a Radar Map Mouseover Entity. 36 | /// 37 | public interface IMouseoverEntity : IMapEntity 38 | { 39 | /// 40 | /// Cached 'Mouseover' Position on the Radar GUI. Used for mouseover events. 41 | /// Uses zoomed coordinates and is refreshed on each render cycle. 42 | /// 43 | Vector2 MouseoverPosition { get; set; } 44 | 45 | void DrawMouseover(SKCanvas canvas, EftMapParams mapParams, LocalPlayer localPlayer); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/PlayerHistoryTab.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Radar.ViewModels; 30 | using System.Windows.Controls; 31 | 32 | namespace LoneEftDmaRadar.UI.Radar.Views 33 | { 34 | /// 35 | /// Interaction logic for PlayerHistoryTab.xaml 36 | /// 37 | public partial class PlayerHistoryTab : UserControl 38 | { 39 | public PlayerHistoryViewModel ViewModel { get; } 40 | public PlayerHistoryTab() 41 | { 42 | InitializeComponent(); 43 | DataContext = ViewModel = new PlayerHistoryViewModel(); 44 | } 45 | 46 | private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) => ViewModel.HandleDoubleClick(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/UI/ColorPicker/ColorPickerOption.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.ColorPicker 30 | { 31 | public enum ColorPickerOption 32 | { 33 | LocalPlayer, 34 | FriendlyPlayer, 35 | PMCPlayer, 36 | WatchlistPlayer, 37 | StreamerPlayer, 38 | HumanScavPlayer, 39 | ScavPlayer, 40 | RaiderPlayer, 41 | BossPlayer, 42 | FocusedPlayer, 43 | DeathMarker, 44 | RegularLoot, 45 | ValuableLoot, // Formerly ImportantLoot 46 | WishlistLoot, 47 | ContainerLoot, 48 | MedsFilterLoot, 49 | FoodFilterLoot, 50 | BackpacksFilterLoot, 51 | QuestHelperItems, 52 | QuestHelperZones, 53 | Corpse, 54 | Explosives 55 | } 56 | } -------------------------------------------------------------------------------- /src/UI/Misc/InputBoxWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Misc 30 | { 31 | /// 32 | /// Interaction logic for InputBoxWindow.xaml 33 | /// 34 | public sealed partial class InputBoxWindow : Window 35 | { 36 | public InputBoxViewModel ViewModel { get; } 37 | public string InputText => ViewModel.InputText; 38 | 39 | public InputBoxWindow(string title, string prompt) 40 | { 41 | InitializeComponent(); 42 | DataContext = ViewModel = new InputBoxViewModel(title, prompt); 43 | 44 | ViewModel.CloseRequested += (s, e) => 45 | { 46 | DialogResult = e.DialogResult; 47 | Close(); 48 | }; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/DMA/FpgaAlgo.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.DMA 30 | { 31 | /// 32 | /// FPGA Read Algorithm 33 | /// 34 | public enum FpgaAlgo : int 35 | { 36 | /// 37 | /// Auto 'fpga' parameter. 38 | /// 39 | Auto = -1, 40 | /// 41 | /// Async Normal Read (default) 42 | /// 43 | AsyncNormal = 0, 44 | /// 45 | /// Async Tiny Read 46 | /// 47 | AsyncTiny = 1, 48 | /// 49 | /// Old Normal Read 50 | /// 51 | OldNormal = 2, 52 | /// 53 | /// Old Tiny Read 54 | /// 55 | OldTiny = 3 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Maps/Customs_-1f.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/UI/Hotkeys/Internal/HotkeyModeListItem.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Hotkeys.Internal 30 | { 31 | public sealed class HotkeyModeListItem 32 | { 33 | public string Name { get; } 34 | public EMode Mode { get; } 35 | public HotkeyModeListItem(EMode mode) 36 | { 37 | Name = mode.ToString(); 38 | Mode = mode; 39 | } 40 | public override string ToString() => Name; 41 | 42 | 43 | public enum EMode 44 | { 45 | /// 46 | /// Continuous Hold the hotkey. 47 | /// 48 | Hold = 1, 49 | /// 50 | /// Toggle hotkey on/off. 51 | /// 52 | Toggle = 2 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/UI/Hotkeys/Internal/ComboHotkeyValue.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using VmmSharpEx.Extensions.Input; 30 | 31 | namespace LoneEftDmaRadar.UI.Hotkeys.Internal 32 | { 33 | /// 34 | /// Combo Box Wrapper for WindowsVirtualKeyCode Enums for Hotkey Manager. 35 | /// 36 | public sealed class ComboHotkeyValue 37 | { 38 | /// 39 | /// Full name of the Key. 40 | /// 41 | public string Key { get; } 42 | /// 43 | /// Key enum value. 44 | /// 45 | public Win32VirtualKey Code { get; } 46 | 47 | public ComboHotkeyValue(Win32VirtualKey keyCode) 48 | { 49 | Key = keyCode.ToString(); 50 | Code = keyCode; 51 | } 52 | 53 | public override string ToString() => Key; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/Misc/JSON/Vector3JsonConverter.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Misc.JSON 2 | { 3 | public sealed class Vector3JsonConverter : JsonConverter 4 | { 5 | public static Vector3JsonConverter Instance { get; } = new Vector3JsonConverter(); 6 | 7 | public override Vector3 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) 8 | { 9 | if (reader.TokenType != JsonTokenType.StartObject) 10 | throw new JsonException("Expected StartObject token"); 11 | 12 | float x = 0, y = 0, z = 0; 13 | 14 | while (reader.Read()) 15 | { 16 | if (reader.TokenType == JsonTokenType.EndObject) 17 | return new Vector3(x, y, z); 18 | 19 | if (reader.TokenType != JsonTokenType.PropertyName) 20 | throw new JsonException("Expected PropertyName token"); 21 | 22 | string propertyName = reader.GetString(); 23 | reader.Read(); 24 | 25 | switch (propertyName?.ToLowerInvariant()) 26 | { 27 | case "x": 28 | x = reader.GetSingle(); 29 | break; 30 | case "y": 31 | y = reader.GetSingle(); 32 | break; 33 | case "z": 34 | z = reader.GetSingle(); 35 | break; 36 | default: 37 | reader.Skip(); 38 | break; 39 | } 40 | } 41 | 42 | throw new JsonException("Unexpected end of JSON"); 43 | } 44 | 45 | public override void Write(Utf8JsonWriter writer, Vector3 value, JsonSerializerOptions options) 46 | { 47 | writer.WriteStartObject(); 48 | writer.WriteNumber("x", value.X); 49 | writer.WriteNumber("y", value.Y); 50 | writer.WriteNumber("z", value.Z); 51 | writer.WriteEndObject(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/Web/WebRadar/Data/WebPlayerType.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.Web.WebRadar.Data 30 | { 31 | /// 32 | /// Defines Player Unit Type (Player,PMC,Scav,etc.) 33 | /// 34 | public enum WebPlayerType : int 35 | { 36 | /// 37 | /// Bot Player. 38 | /// 39 | Bot = 0, 40 | /// 41 | /// LocalPlayer running the Web Server. 42 | /// 43 | LocalPlayer = 1, 44 | /// 45 | /// Teammate of LocalPlayer. 46 | /// 47 | Teammate = 2, 48 | /// 49 | /// Human-Controlled Player. 50 | /// 51 | Player = 3, 52 | /// 53 | /// Human-Controlled Scav. 54 | /// 55 | PlayerScav = 4 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/UI/Radar/Views/PlayerWatchlistTab.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 14 | 15 | 16 | 17 | 27 | 28 | 29 | 31 | 33 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/Tarkov/Unity/Structures/GameObject.cs: -------------------------------------------------------------------------------- 1 | namespace LoneEftDmaRadar.Tarkov.Unity.Structures 2 | { 3 | 4 | [StructLayout(LayoutKind.Explicit)] 5 | public readonly struct GameObject // EditorExtension : Object 6 | { 7 | [FieldOffset((int)UnitySDK.UnityOffsets.GameObject_ObjectClassOffset)] 8 | public readonly ulong ObjectClass; // m_Object 9 | [FieldOffset((int)UnitySDK.UnityOffsets.GameObject_NameOffset)] 10 | public readonly ulong Name; // m_Name, String 11 | [FieldOffset((int)UnitySDK.UnityOffsets.GameObject_ComponentsOffset)] 12 | public readonly ulong Components; // m_Components, DynamicArray 13 | 14 | /// 15 | /// Return the name of this game object. 16 | /// 17 | /// Name string. 18 | public readonly string GetName() => 19 | Memory.ReadUtf8String(Name, 128); 20 | 21 | /// 22 | /// Gets a component class from a Game Object. 23 | /// 24 | /// Name of class of component. 25 | /// Requested component class. 26 | public ulong GetComponent(string className) 27 | { 28 | throw new NotImplementedException("TODO"); 29 | // component list 30 | var componentArr = Memory.ReadValue(Components); 31 | int size = componentArr.Size <= 0x1000 ? 32 | (int)componentArr.Size : 0x1000; 33 | using var compsBuf = Memory.ReadPooled(0x0, size); // TODO: componentArr.ArrayBase 34 | foreach (var comp in compsBuf.Memory.Span) 35 | { 36 | var compClass = Memory.ReadPtr(comp.Component + UnitySDK.UnityOffsets.Component_ObjectClassOffset); 37 | var name = Structures.ObjectClass.ReadName(compClass); 38 | if (name.Equals(className, StringComparison.OrdinalIgnoreCase)) 39 | return compClass; 40 | } 41 | throw new InvalidOperationException("Component Not Found!"); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/UI/Skia/SKWidgetClickEvent.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Skia 30 | { 31 | public enum SKWidgetClickEvent 32 | { 33 | /// 34 | /// No click event ocurred in this widget. 35 | /// 36 | None, 37 | /// 38 | /// An area of the Widget (including Non-Client area) was clicked. 39 | /// 40 | Clicked, 41 | /// 42 | /// The Title bar was clicked. 43 | /// 44 | ClickedTitleBar, 45 | /// 46 | /// The Client Area of the widget was clicked. 47 | /// 48 | ClickedClientArea, 49 | /// 50 | /// The Minimize Button was clicked. 51 | /// 52 | ClickedMinimize, 53 | /// 54 | /// The Resize Triangle was clicked. 55 | /// 56 | ClickedResize 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/Web/WebRadar/Data/WebRadarUpdate.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using MessagePack; 30 | 31 | namespace LoneEftDmaRadar.Web.WebRadar.Data 32 | { 33 | [MessagePackObject] 34 | public sealed class WebRadarUpdate 35 | { 36 | /// 37 | /// Update version (used for ordering). 38 | /// 39 | [Key(0)] 40 | public ulong Version { get; set; } = 0; 41 | /// 42 | /// True if In-Game, otherwise False. 43 | /// 44 | [Key(1)] 45 | public bool InGame { get; set; } = false; 46 | /// 47 | /// Contains the Map ID of the current map. 48 | /// 49 | [Key(2)] 50 | public string MapID { get; set; } = null; 51 | /// 52 | /// All Players currently on the map. 53 | /// 54 | [Key(3)] 55 | public IEnumerable Players { get; set; } = null; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Maps/Factory_-1f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/UI/Hotkeys/HotkeyListBoxEntry.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using LoneEftDmaRadar.UI.Hotkeys.Internal; 30 | using VmmSharpEx.Extensions.Input; 31 | 32 | namespace LoneEftDmaRadar.UI.Hotkeys 33 | { 34 | /// 35 | /// ListBox wrapper for Hotkey/Action Entries in Hotkey Manager. 36 | /// 37 | public sealed class HotkeyListBoxEntry 38 | { 39 | private readonly string _name; 40 | /// 41 | /// Hotkey Key Value. 42 | /// 43 | public Win32VirtualKey Hotkey { get; } 44 | /// 45 | /// Hotkey Action Object that contains state/delegate. 46 | /// 47 | public HotkeyAction Action { get; } 48 | 49 | public HotkeyListBoxEntry(Win32VirtualKey hotkey, HotkeyAction action) 50 | { 51 | Hotkey = hotkey; 52 | Action = action; 53 | _name = hotkey.ToString(); 54 | } 55 | 56 | public override string ToString() => $"{Action.Name} == {_name}"; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/UI/Misc/StringToBrushConverter.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using System.Globalization; 30 | using System.Windows.Data; 31 | using System.Windows.Media; 32 | 33 | namespace LoneEftDmaRadar.UI.Misc 34 | { 35 | 36 | /// 37 | /// Converts a hex/color‐name string ↔ SolidColorBrush. 38 | /// 39 | public class StringToBrushConverter : IValueConverter 40 | { 41 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 42 | { 43 | var col = new StringToColorConverter().Convert(value, typeof(Color), parameter, culture); 44 | if (col is Color c) 45 | return new SolidColorBrush(c); 46 | return Brushes.Transparent; 47 | } 48 | 49 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 50 | { 51 | if (value is SolidColorBrush b) 52 | return b.Color.ToString(); 53 | return string.Empty; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Web/WebRadar/MessagePack/Vector2Formatter.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | using MessagePack; 30 | using MessagePack.Formatters; 31 | 32 | namespace LoneEftDmaRadar.Web.WebRadar.MessagePack 33 | { 34 | public class Vector2Formatter : IMessagePackFormatter 35 | { 36 | public Vector2 Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options) 37 | { 38 | options.Security.DepthStep(ref reader); 39 | 40 | ArgumentOutOfRangeException.ThrowIfNotEqual(reader.ReadArrayHeader(), 2, nameof(reader)); 41 | Vector2 result; 42 | result.X = reader.ReadSingle(); 43 | result.Y = reader.ReadSingle(); 44 | 45 | reader.Depth--; 46 | return result; 47 | } 48 | 49 | public void Serialize(ref MessagePackWriter writer, Vector2 value, MessagePackSerializerOptions options) 50 | { 51 | writer.WriteArrayHeader(2); 52 | writer.Write(value.X); 53 | writer.Write(value.Y); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/UI/Skia/CustomFonts.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.UI.Skia 30 | { 31 | internal static class CustomFonts 32 | { 33 | /// 34 | /// Neo Sans Std Regular 35 | /// 36 | public static SKTypeface NeoSansStdRegular { get; } 37 | 38 | static CustomFonts() 39 | { 40 | try 41 | { 42 | byte[] neoSansStdRegular; 43 | using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("LoneEftDmaRadar.NeoSansStdRegular.otf")) 44 | { 45 | neoSansStdRegular = new byte[stream!.Length]; 46 | stream.ReadExactly(neoSansStdRegular); 47 | } 48 | NeoSansStdRegular = SKTypeface.FromStream(new MemoryStream(neoSansStdRegular, false)); 49 | } 50 | catch (Exception ex) 51 | { 52 | throw new InvalidOperationException("ERROR Loading Custom Fonts!", ex); 53 | } 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Misc/JSON/CaseInsensitiveConcurrentDictionaryConverter.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * Lone EFT DMA Radar 3 | * Brought to you by Lone (Lone DMA) 4 | * 5 | MIT License 6 | 7 | Copyright (c) 2025 Lone DMA 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | * 27 | */ 28 | 29 | namespace LoneEftDmaRadar.Misc.JSON 30 | { 31 | public sealed class CaseInsensitiveConcurrentDictionaryConverter 32 | : JsonConverter> 33 | { 34 | public override ConcurrentDictionary Read( 35 | ref Utf8JsonReader reader, 36 | Type typeToConvert, 37 | JsonSerializerOptions options) 38 | { 39 | var dic = (ConcurrentDictionary)JsonSerializer 40 | .Deserialize(ref reader, typeToConvert, options); 41 | return new ConcurrentDictionary( 42 | dic!, StringComparer.OrdinalIgnoreCase); 43 | } 44 | 45 | public override void Write( 46 | Utf8JsonWriter writer, 47 | ConcurrentDictionary value, 48 | JsonSerializerOptions options) 49 | { 50 | JsonSerializer.Serialize( 51 | writer, value, value.GetType(), options); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/UI/Misc/InputBoxWindow.xaml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 39 | 40 | 41 | 45 |