├── 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 |
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 |
--------------------------------------------------------------------------------
/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 |
51 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/Maps/Streets_-1f.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/UI/Misc/StringToColorConverter.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 | /// Converts a hex/color‐name string ↔ System.Windows.Media.Color.
37 | ///
38 | public class StringToColorConverter : IValueConverter
39 | {
40 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
41 | {
42 | if (value is string s && !string.IsNullOrWhiteSpace(s))
43 | {
44 | try
45 | {
46 | return (Color)ColorConverter.ConvertFromString(s);
47 | }
48 | catch { }
49 | }
50 | return Colors.Transparent;
51 | }
52 |
53 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
54 | {
55 | if (value is Color c)
56 | return c.ToString(); // e.g. "#FFAABBCC"
57 | return string.Empty;
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/Web/WebRadar/MessagePack/Vector3Formatter.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 Vector3Formatter : IMessagePackFormatter
35 | {
36 | public Vector3 Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
37 | {
38 | options.Security.DepthStep(ref reader);
39 |
40 | ArgumentOutOfRangeException.ThrowIfNotEqual(reader.ReadArrayHeader(), 3, nameof(reader));
41 | Vector3 result;
42 | result.X = reader.ReadSingle();
43 | result.Y = reader.ReadSingle();
44 | result.Z = reader.ReadSingle();
45 |
46 | reader.Depth--;
47 | return result;
48 | }
49 |
50 | public void Serialize(ref MessagePackWriter writer, Vector3 value, MessagePackSerializerOptions options)
51 | {
52 | writer.WriteArrayHeader(3);
53 | writer.Write(value.X);
54 | writer.Write(value.Y);
55 | writer.Write(value.Z);
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Maps/Shoreline_-1f.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/Tarkov/Unity/Structures/Bones.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.Structures
30 | {
31 | ///
32 | /// Bones Index for Player Transforms.
33 | ///
34 | public enum Bones : uint
35 | {
36 | HumanBase = 0,
37 | HumanPelvis = 14,
38 | HumanLThigh1 = 15,
39 | HumanLThigh2 = 16,
40 | HumanLCalf = 17,
41 | HumanLFoot = 18,
42 | HumanLToe = 19,
43 | HumanRThigh1 = 20,
44 | HumanRThigh2 = 21,
45 | HumanRCalf = 22,
46 | HumanRFoot = 23,
47 | HumanRToe = 24,
48 | HumanSpine1 = 29,
49 | HumanSpine2 = 36,
50 | HumanSpine3 = 37,
51 | HumanLCollarbone = 89,
52 | HumanLUpperarm = 90,
53 | HumanLForearm1 = 91,
54 | HumanLForearm2 = 92,
55 | HumanLForearm3 = 93,
56 | HumanLPalm = 94,
57 | HumanRCollarbone = 110,
58 | HumanRUpperarm = 111,
59 | HumanRForearm1 = 112,
60 | HumanRForearm2 = 113,
61 | HumanRForearm3 = 114,
62 | HumanRPalm = 115,
63 | HumanNeck = 132,
64 | HumanHead = 133
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/src/Web/WebRadar/MessagePack/ResolverGenerator.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 | using MessagePack.Resolvers;
32 |
33 | namespace LoneEftDmaRadar.Web.WebRadar.MessagePack
34 | {
35 | public static class ResolverGenerator
36 | {
37 | public static IFormatterResolver Instance { get; }
38 |
39 | static ResolverGenerator()
40 | {
41 | Instance = CompositeResolver.Create(StandardResolver.Instance, CustomResolver.Instance);
42 | }
43 |
44 | private sealed class CustomResolver : IFormatterResolver
45 | {
46 | public static CustomResolver Instance { get; } = new();
47 |
48 | private readonly Vector2Formatter _vector2Formatter = new();
49 | private readonly Vector3Formatter _vector3Formatter = new();
50 |
51 | public IMessagePackFormatter GetFormatter()
52 | {
53 | if (_vector2Formatter is IMessagePackFormatter f1)
54 | return f1;
55 | if (_vector3Formatter is IMessagePackFormatter f2)
56 | return f2;
57 |
58 | return null; // No match found
59 | }
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/UI/Radar/Maps/IEftMap.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 SkiaSharp.Views.WPF;
30 |
31 | namespace LoneEftDmaRadar.UI.Radar.Maps
32 | {
33 | public interface IEftMap : IDisposable
34 | {
35 | ///
36 | /// Raw Map ID for this Map.
37 | ///
38 | string ID { get; }
39 |
40 | ///
41 | /// Configuration for this Map.
42 | ///
43 | EftMapConfig Config { get; }
44 |
45 | ///
46 | /// Draw the Map on the provided Canvas.
47 | ///
48 | ///
49 | ///
50 | ///
51 | ///
52 | void Draw(SKCanvas canvas, float playerHeight, SKRect mapBounds, SKRect windowBounds);
53 |
54 | ///
55 | /// Get Parameters for this map.
56 | ///
57 | ///
58 | ///
59 | ///
60 | ///
61 | EftMapParams GetParameters(SKGLElement control, int zoom, ref Vector2 localPlayerMapPos);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Maps/Factory_3f.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/DMA/InputManager.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.Misc.Workers;
30 | using LoneEftDmaRadar.UI.Hotkeys;
31 | using VmmSharpEx;
32 | using VmmSharpEx.Extensions.Input;
33 |
34 | namespace LoneEftDmaRadar.DMA
35 | {
36 | public sealed class InputManager
37 | {
38 | private readonly VmmInputManager _input;
39 | private readonly WorkerThread _thread;
40 |
41 | public InputManager(Vmm vmm)
42 | {
43 | _input = new VmmInputManager(vmm);
44 | _thread = new()
45 | {
46 | Name = nameof(InputManager),
47 | SleepDuration = TimeSpan.FromMilliseconds(12),
48 | SleepMode = WorkerThreadSleepMode.DynamicSleep
49 | };
50 | _thread.PerformWork += InputManager_PerformWork;
51 | _thread.Start();
52 | }
53 |
54 | private void InputManager_PerformWork(object sender, WorkerThreadArgs e)
55 | {
56 | var hotkeys = HotkeyManagerViewModel.Hotkeys;
57 | if (hotkeys.Count == 0)
58 | return;
59 |
60 | _input.UpdateKeys();
61 | foreach (var kvp in hotkeys)
62 | {
63 | bool isKeyDown = _input.IsKeyDown(kvp.Key);
64 | kvp.Value.Execute(isKeyDown);
65 | }
66 | }
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/src/UI/ColorPicker/ColorPickerWindow.xaml:
--------------------------------------------------------------------------------
1 |
15 |
16 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
33 |
39 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/Tarkov/GameWorld/Player/Helpers/PlayerType.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.GameWorld.Player.Helpers
30 | {
31 | ///
32 | /// Defines Player Unit Type (Player,PMC,Scav,etc.)
33 | ///
34 | public enum PlayerType
35 | {
36 | ///
37 | /// Default value if a type cannot be established.
38 | ///
39 | Default,
40 | ///
41 | /// Teammate of LocalPlayer.
42 | ///
43 | Teammate,
44 | ///
45 | /// Hostile/Enemy PMC.
46 | ///
47 | PMC,
48 | ///
49 | /// Normal AI Bot Scav.
50 | ///
51 | AIScav,
52 | ///
53 | /// Difficult AI Raider.
54 | ///
55 | AIRaider,
56 | ///
57 | /// Difficult AI Boss.
58 | ///
59 | AIBoss,
60 | ///
61 | /// Player controlled Scav.
62 | ///
63 | PScav,
64 | ///
65 | /// 'Special' Human Controlled Hostile PMC/Scav (on the watchlist, or a special account type).
66 | ///
67 | SpecialPlayer,
68 | ///
69 | /// Human Controlled Hostile PMC/Scav that has a Twitch account name as their IGN.
70 | ///
71 | Streamer
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/Misc/Services/LocalCache.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 LiteDB;
30 | using LoneEftDmaRadar.Web.ProfileApi.Schema;
31 |
32 | namespace LoneEftDmaRadar.Misc.Services
33 | {
34 | internal static class LocalCache
35 | {
36 | private static readonly string _dbPath = Path.Combine(App.ConfigPath.FullName, "cache.db");
37 | private static readonly LiteDatabase _db;
38 |
39 | static LocalCache()
40 | {
41 | var mapper = new BsonMapper()
42 | {
43 | IncludeFields = true,
44 | IncludeNonPublic = true
45 | };
46 | _db = new LiteDatabase($"Filename={_dbPath};Connection=direct;Upgrade=true", mapper) ??
47 | throw new InvalidOperationException($"Unable to load LocalCache DB ({_dbPath}).");
48 | AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
49 | }
50 |
51 | private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
52 | {
53 | _db.Dispose();
54 | }
55 |
56 | ///
57 | /// Returns the Local DB collection for Player Profiles.
58 | ///
59 | ///
60 | public static ILiteCollection GetProfileCollection()
61 | {
62 | var profiles = _db.GetCollection("profiles");
63 | profiles.EnsureIndex(x => x.Id, unique: true);
64 | return profiles;
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/UI/Skia/SKFonts.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 SKFonts
32 | {
33 | ///
34 | /// Regular body font (size 12) with default typeface.
35 | ///
36 | public static SKFont UIRegular { get; } = new SKFont(CustomFonts.NeoSansStdRegular, 12f)
37 | {
38 | Subpixel = true,
39 | Edging = SKFontEdging.SubpixelAntialias
40 | };
41 | ///
42 | /// Large header font (size 48) for radar status.
43 | ///
44 | public static SKFont UILarge { get; } = new SKFont(CustomFonts.NeoSansStdRegular, 48f)
45 | {
46 | Subpixel = true,
47 | Edging = SKFontEdging.SubpixelAntialias
48 | };
49 | ///
50 | /// Regular body font (size 12) with Consolas typeface.
51 | ///
52 | public static SKFont InfoWidgetFont { get; } = new SKFont(SKTypeface.FromFamilyName("Consolas"), 12f)
53 | {
54 | Subpixel = true,
55 | Edging = SKFontEdging.SubpixelAntialias
56 | };
57 | ///
58 | /// Regular body font (size 9) with default typeface.
59 | ///
60 | public static SKFont AimviewWidgetFont { get; } = new SKFont(CustomFonts.NeoSansStdRegular, 9f)
61 | {
62 | Subpixel = true,
63 | Edging = SKFontEdging.SubpixelAntialias
64 | };
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/src/Tarkov/Unity/UnitySDK.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.Structures;
30 |
31 | namespace LoneEftDmaRadar.Tarkov.Unity
32 | {
33 | public readonly struct UnitySDK
34 | {
35 | public readonly struct UnityOffsets
36 | {
37 | public const uint GameObjectManager = 0x1A208D8;
38 |
39 | public const uint GameObject_ObjectClassOffset = 0x80;
40 | public const uint GameObject_ComponentsOffset = 0x58;
41 | public const uint GameObject_NameOffset = 0x88;
42 |
43 | public const uint Component_ObjectClassOffset = 0x20;
44 | public const uint Component_GameObjectOffset = 0x58;
45 |
46 | public const uint TransformAccess_IndexOffset = 0x98;
47 | public const uint TransformAccess_HierarchyOffset = 0x90;
48 |
49 | public const uint Hierarchy_VerticesOffset = 0x40;
50 | public const uint Hierarchy_IndicesOffset = 0x90;
51 |
52 | public static readonly uint[] GameWorldChain =
53 | [
54 | GameObject_ComponentsOffset,
55 | 0x18,
56 | Component_ObjectClassOffset
57 | ];
58 |
59 | public static readonly uint[] TransformChain =
60 | [
61 | ObjectClass.MonoBehaviourOffset,
62 | Component_GameObjectOffset,
63 | GameObject_ComponentsOffset,
64 | 0x8,
65 | Component_ObjectClassOffset,
66 | 0x10 // Transform Internal
67 | ];
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/src/Tarkov/GameWorld/Player/BtrPlayer.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.Helpers;
30 | using VmmSharpEx.Scatter;
31 |
32 | namespace LoneEftDmaRadar.Tarkov.GameWorld.Player
33 | {
34 | ///
35 | /// BTR Bot Operator.
36 | ///
37 | public sealed class BtrPlayer : ObservedPlayer
38 | {
39 | private readonly ulong _btrView;
40 | private readonly ulong _posAddr;
41 | private Vector3 _position = new(9999, 0, 9999);
42 |
43 | public override ref readonly Vector3 Position
44 | {
45 | get => ref _position;
46 | }
47 | public override string Name
48 | {
49 | get => "BTR";
50 | set { }
51 | }
52 | public BtrPlayer(ulong btrView, ulong playerBase) : base(playerBase)
53 | {
54 | _btrView = btrView;
55 | _posAddr = _btrView + Offsets.BTRView._previousPosition;
56 | Type = PlayerType.AIRaider;
57 | }
58 |
59 | ///
60 | /// Set the position of the BTR.
61 | /// Give this function it's own unique Index.
62 | ///
63 | /// Scatter read index to read off of.
64 | public override void OnRealtimeLoop(VmmScatter scatter)
65 | {
66 | scatter.PrepareReadValue(_posAddr);
67 | scatter.Completed += (sender, s) =>
68 | {
69 | if (s.ReadValue(_posAddr, out var position) && position != default)
70 | {
71 | _position = position;
72 | }
73 | };
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/UI/Hotkeys/HotkeyAttribute.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 | /// Used to decorate methods as Hotkey action handlers.
33 | ///
34 | ///
35 | /// Methods decorated with this attribute should match the method signature of .
36 | ///
37 | [AttributeUsage(AttributeTargets.Method)]
38 | public sealed class HotkeyAttribute : Attribute
39 | {
40 | ///
41 | /// Name of the Hotkey to be displayed to the User.
42 | ///
43 | public string Name { get; }
44 | ///
45 | /// Type of Hotkey activation. Default: OnKeyStateChanged
46 | ///
47 | public HotkeyType Type { get; } = HotkeyType.OnKeyStateChanged;
48 | ///
49 | /// Interval (ms) between Hotkey activations. Default: 100ms
50 | ///
51 | public double Interval { get; } = 100;
52 |
53 | ///
54 | /// Initializes a new instance of the class.
55 | ///
56 | /// Name of the Hotkey to be displayed to the User.
57 | /// Type of Hotkey activation. Default: OnKeyStateChanged
58 | /// Interval (ms) between Hotkey activations. Default: 100ms
59 | public HotkeyAttribute(string name, HotkeyType type = HotkeyType.OnKeyStateChanged, double interval = 100)
60 | {
61 | Name = name;
62 | Type = type;
63 | Interval = interval;
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/Maps/Factory_2f.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Tarkov/Unity/Collections/UnityArray.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 Collections.Pooled;
30 |
31 | namespace LoneEftDmaRadar.Tarkov.Unity.Collections
32 | {
33 | ///
34 | /// DMA Wrapper for a C# Array
35 | /// Must initialize before use. Must dispose after use.
36 | ///
37 | /// Array Type
38 | public sealed class UnityArray : PooledMemory
39 | where T : unmanaged
40 | {
41 | public const uint CountOffset = 0x18;
42 | public const uint ArrBaseOffset = 0x20;
43 |
44 | private UnityArray() : base(0) { }
45 | private UnityArray(int count) : base(count) { }
46 |
47 | ///
48 | /// Factory method to create a new instance from a memory address.
49 | ///
50 | ///
51 | ///
52 | ///
53 | public static UnityArray Create(ulong addr, bool useCache = true)
54 | {
55 | var count = LoneEftDmaRadar.DMA.Memory.ReadValue(addr + CountOffset, useCache);
56 | ArgumentOutOfRangeException.ThrowIfGreaterThan(count, 16384, nameof(count));
57 | var array = new UnityArray(count);
58 | try
59 | {
60 | if (count == 0)
61 | {
62 | return array;
63 | }
64 | LoneEftDmaRadar.DMA.Memory.ReadSpan(addr + ArrBaseOffset, array.Span, useCache);
65 | return array;
66 | }
67 | catch
68 | {
69 | array.Dispose();
70 | throw;
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/UI/Misc/InputBoxViewModel.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 sealed class InputBoxViewModel : INotifyPropertyChanged
34 | {
35 | public string Title { get; }
36 | public string Prompt { get; }
37 | private string _inputText;
38 | public string InputText
39 | {
40 | get => _inputText;
41 | set
42 | {
43 | if (value == _inputText) return;
44 | _inputText = value;
45 | OnPropertyChanged(nameof(InputText));
46 | }
47 | }
48 |
49 | public ICommand OkCommand { get; }
50 | public ICommand CancelCommand { get; }
51 |
52 | // Fires when either command runs; subscriber should close the window
53 | public event EventHandler CloseRequested;
54 |
55 | public InputBoxViewModel(string title, string prompt)
56 | {
57 | Title = title;
58 | Prompt = prompt;
59 | OkCommand = new SimpleCommand(() => OnCloseRequested(true));
60 | CancelCommand = new SimpleCommand(() => OnCloseRequested(false));
61 | }
62 |
63 | private void OnCloseRequested(bool result)
64 | => CloseRequested?.Invoke(this, new CloseRequestedEventArgs(result));
65 |
66 | public event PropertyChangedEventHandler PropertyChanged;
67 | private void OnPropertyChanged(string propName)
68 | => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
69 |
70 | public class CloseRequestedEventArgs : EventArgs
71 | {
72 | public bool DialogResult { get; }
73 | public CloseRequestedEventArgs(bool dialogResult) => DialogResult = dialogResult;
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/UI/Radar/Views/MapSetupHelper.xaml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
20 |
21 |
22 |
27 |
28 |
31 |
34 |
37 |
40 |
42 |
43 |
44 |
47 |
50 |
53 |
54 |
55 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/src/UI/Data/PlayerWatchlistEntry.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 | ///
32 | /// JSON Wrapper for Player Watchlist.
33 | ///
34 | public sealed class PlayerWatchlistEntry : INotifyPropertyChanged
35 | {
36 | public event PropertyChangedEventHandler PropertyChanged;
37 | private void OnPropertyChanged([CallerMemberName] string propertyName = null) =>
38 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
39 |
40 | private string _acctId = string.Empty;
41 | ///
42 | /// Player's Account ID as obtained from Player History.
43 | ///
44 | [JsonPropertyName("acctID")]
45 | public string AcctID
46 | {
47 | get => _acctId;
48 | set
49 | {
50 | if (_acctId != value)
51 | {
52 | _acctId = value;
53 | OnPropertyChanged();
54 | }
55 | }
56 | }
57 |
58 | private string _reason = string.Empty;
59 | ///
60 | /// Reason for adding player to Watchlist (ex: Cheater, streamer name,etc.)
61 | ///
62 | [JsonPropertyName("reason")]
63 | public string Reason
64 | {
65 | get => _reason;
66 | set
67 | {
68 | if (_reason != value)
69 | {
70 | _reason = value;
71 | OnPropertyChanged();
72 | }
73 | }
74 | }
75 | ///
76 | /// Timestamp when the entry was originally added.
77 | ///
78 | [JsonInclude]
79 | [JsonPropertyName("timestamp")]
80 | public DateTime Timestamp { get; init; } = DateTime.Now;
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/UI/Hotkeys/Internal/HotkeyAction.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 | ///
32 | /// Links a Unity Hotkey to it's Action Controller.
33 | /// Wrapper for GUI/Backend Interop.
34 | ///
35 | public sealed class HotkeyAction
36 | {
37 | private static readonly ConcurrentDictionary _controllers =
38 | new(StringComparer.OrdinalIgnoreCase);
39 |
40 | ///
41 | /// Registered Hotkey Action Controllers.
42 | ///
43 | public static IEnumerable RegisteredControllers => _controllers.Values;
44 |
45 | ///
46 | /// Action Name used for lookup.
47 | ///
48 | public string Name { get; }
49 | ///
50 | /// Action Controller to execute.
51 | ///
52 | private HotkeyActionController _action;
53 |
54 | public HotkeyAction(string name)
55 | {
56 | Name = name;
57 | }
58 |
59 | ///
60 | /// Register an action controller.
61 | ///
62 | /// Controller to register.
63 | internal static void RegisterController(HotkeyActionController controller)
64 | {
65 | _controllers.TryAdd(controller.Name, controller);
66 | }
67 |
68 | ///
69 | /// Execute the Hotkey action controller.
70 | ///
71 | /// True if the key is pressed.
72 | public void Execute(bool isKeyDown)
73 | {
74 | _action ??= _controllers.GetValueOrDefault(Name);
75 | _action?.Execute(isKeyDown);
76 | }
77 |
78 | public override string ToString() => Name;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/Tarkov/Unity/Collections/UnityList.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 Collections.Pooled;
30 |
31 | namespace LoneEftDmaRadar.Tarkov.Unity.Collections
32 | {
33 | ///
34 | /// DMA Wrapper for a C# List
35 | /// Must initialize before use. Must dispose after use.
36 | ///
37 | /// Collection Type
38 | public sealed class UnityList : PooledMemory
39 | where T : unmanaged
40 | {
41 | public const uint CountOffset = 0x18;
42 | public const uint ArrOffset = 0x10;
43 | public const uint ArrStartOffset = 0x20;
44 |
45 | private UnityList() : base(0) { }
46 | private UnityList(int count) : base(count) { }
47 |
48 | ///
49 | /// Factory method to create a new instance from a memory address.
50 | ///
51 | ///
52 | ///
53 | ///
54 | public static UnityList Create(ulong addr, bool useCache = true)
55 | {
56 | var count = LoneEftDmaRadar.DMA.Memory.ReadValue(addr + CountOffset, useCache);
57 | ArgumentOutOfRangeException.ThrowIfGreaterThan(count, 16384, nameof(count));
58 | var list = new UnityList(count);
59 | try
60 | {
61 | if (count == 0)
62 | {
63 | return list;
64 | }
65 | var listBase = LoneEftDmaRadar.DMA.Memory.ReadPtr(addr + ArrOffset, useCache) + ArrStartOffset;
66 | LoneEftDmaRadar.DMA.Memory.ReadSpan(listBase, list.Span, useCache);
67 | return list;
68 | }
69 | catch
70 | {
71 | list.Dispose();
72 | throw;
73 | }
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/UI/ColorPicker/ColorDictionaryConverter.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 class ColorDictionaryConverter
32 | : JsonConverter>
33 | {
34 | public override ConcurrentDictionary Read(
35 | ref Utf8JsonReader reader,
36 | Type typeToConvert,
37 | JsonSerializerOptions options)
38 | {
39 | if (reader.TokenType != JsonTokenType.StartObject)
40 | throw new JsonException();
41 |
42 | var dict = new ConcurrentDictionary();
43 | while (reader.Read())
44 | {
45 | if (reader.TokenType == JsonTokenType.EndObject)
46 | return dict;
47 |
48 | // propertyName is the enum name in your JSON
49 | string propertyName = reader.GetString();
50 | if (!Enum.TryParse(propertyName,
51 | ignoreCase: true,
52 | out var key))
53 | {
54 | // skip the value for this unrecognized key
55 | reader.Skip();
56 | continue;
57 | }
58 |
59 | // move to the value token
60 | reader.Read();
61 | string value = reader.GetString()!;
62 | dict[key] = value;
63 | }
64 |
65 | throw new JsonException();
66 | }
67 |
68 | public override void Write(
69 | Utf8JsonWriter writer,
70 | ConcurrentDictionary value,
71 | JsonSerializerOptions options)
72 | {
73 | // just hand it back to the default serializer
74 | JsonSerializer.Serialize(writer, value, options);
75 | }
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/UI/Misc/LoadingViewModel.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 class LoadingViewModel : INotifyPropertyChanged
32 | {
33 | private readonly LoadingWindow _parent;
34 |
35 | public LoadingViewModel(LoadingWindow parent)
36 | {
37 | _parent = parent ?? throw new ArgumentNullException(nameof(parent));
38 | }
39 |
40 | private double _progress;
41 | ///
42 | /// Progress value (0–100)
43 | ///
44 | public double Progress
45 | {
46 | get => _progress;
47 | set
48 | {
49 | if (_progress != value)
50 | {
51 | _progress = value;
52 | OnPropertyChanged(nameof(Progress));
53 | }
54 | }
55 | }
56 |
57 | private string _statusText = "";
58 | ///
59 | /// Status message
60 | ///
61 | public string StatusText
62 | {
63 | get => _statusText;
64 | set
65 | {
66 | if (_statusText != value)
67 | {
68 | _statusText = value;
69 | OnPropertyChanged(nameof(StatusText));
70 | }
71 | }
72 | }
73 |
74 | public event PropertyChangedEventHandler PropertyChanged;
75 | private void OnPropertyChanged(string propertyName) =>
76 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
77 |
78 | ///
79 | /// Call to update both progress bar and status text.
80 | ///
81 | public async Task UpdateProgressAsync(double percent, string status)
82 | {
83 | await _parent.Dispatcher.InvokeAsync(() =>
84 | {
85 | Progress = percent;
86 | StatusText = status;
87 | });
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/Web/TarkovDev/Data/FleaTax.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.TarkovDev.Data
30 | {
31 | internal static class FleaTax
32 | {
33 | private const double CommunityItemTax = 3f;
34 | private const double CommunityRequirementTax = 3f;
35 | private const double RagFairCommissionModifier = 1f; // Constant in ItemTemplate
36 |
37 | ///
38 | /// Calculates the amount of tax to be paid on the flea market.
39 | ///
40 | /// Flea list price.
41 | /// Base price value of the item.
42 | ///
43 | public static double Calculate(double requirementsPrice, double num) /// public static double CalculateTaxPrice(Item item, int offerItemCount, double requirementsPrice, bool sellInOnePiece)
44 | {
45 | if (num == 0d || requirementsPrice == 0d) // Prevent DIV by Zero
46 | {
47 | return 0d;
48 | }
49 | // Convert tax modifiers to percentages
50 | double num2 = CommunityItemTax / 100d;
51 | double num3 = CommunityRequirementTax / 100d;
52 | double num4 = Math.Log10(num / requirementsPrice);
53 | double num5 = Math.Log10(requirementsPrice / num);
54 |
55 | // Determine the logarithm to weight based on relationship to the item's base price
56 | if (requirementsPrice >= num)
57 | {
58 | num5 = Math.Pow(num5, 1.08d);
59 | }
60 | else
61 | {
62 | num4 = Math.Pow(num4, 1.08d);
63 | }
64 | num4 = Math.Pow(4.0d, num4);
65 | num5 = Math.Pow(4.0d, num5);
66 |
67 | // Get the base tax amount
68 | double num6 = num * num2 * num4 + requirementsPrice * num3 * num5;
69 |
70 | // Apply the RagFairCommissionModifier
71 | return num6 * RagFairCommissionModifier;
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/Maps/GroundZero_-1f.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Misc/JSON/SKRectJsonConverter.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 class SKRectJsonConverter : JsonConverter
32 | {
33 | public override SKRect Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
34 | {
35 | if (reader.TokenType != JsonTokenType.StartObject)
36 | throw new JsonException("Expected StartObject token for SKRect.");
37 |
38 | float left = 0, top = 0, right = 0, bottom = 0;
39 |
40 | while (reader.Read())
41 | {
42 | if (reader.TokenType == JsonTokenType.EndObject)
43 | return new SKRect(left, top, right, bottom);
44 |
45 | if (reader.TokenType != JsonTokenType.PropertyName)
46 | throw new JsonException("Expected PropertyName token.");
47 |
48 | string propertyName = reader.GetString()!;
49 | reader.Read(); // Move to the value token.
50 |
51 | switch (propertyName)
52 | {
53 | case nameof(SKRect.Left): left = reader.GetSingle(); break;
54 | case nameof(SKRect.Top): top = reader.GetSingle(); break;
55 | case nameof(SKRect.Right): right = reader.GetSingle(); break;
56 | case nameof(SKRect.Bottom): bottom = reader.GetSingle(); break;
57 | default: reader.Skip(); break;
58 | }
59 | }
60 |
61 | throw new JsonException("Unexpected end of JSON for SKRect.");
62 | }
63 |
64 | public override void Write(Utf8JsonWriter writer, SKRect value, JsonSerializerOptions options)
65 | {
66 | writer.WriteStartObject();
67 | writer.WriteNumber(nameof(SKRect.Left), value.Left);
68 | writer.WriteNumber(nameof(SKRect.Top), value.Top);
69 | writer.WriteNumber(nameof(SKRect.Right), value.Right);
70 | writer.WriteNumber(nameof(SKRect.Bottom), value.Bottom);
71 | writer.WriteEndObject();
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/Lone-EFT-DMA-Radar.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WinExe
5 | net10.0-windows
6 | LoneEftDmaRadar
7 | warnings
8 | enable
9 | true
10 | True
11 | x64
12 | Debug;Release
13 | PerMonitorV2
14 | ..\Resources\lone-icon.ico
15 |
16 |
17 |
18 |
19 | true
20 | true
21 | true
22 |
23 | 0
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | none
33 | false
34 |
35 |
36 |
37 | none
38 | false
39 |
40 |
41 |
42 | none
43 |
44 |
45 |
46 | none
47 |
48 |
49 |
50 |
51 |
52 | PreserveNewest
53 | false
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/src/UI/Radar/Maps/EftMapParams.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 |
30 | /*
31 | * Lone EFT DMA Radar
32 | * Brought to you by Lone (Lone DMA)
33 | *
34 | MIT License
35 |
36 | Copyright (c) 2025 Lone DMA
37 |
38 | Permission is hereby granted, free of charge, to any person obtaining a copy
39 | of this software and associated documentation files (the "Software"), to deal
40 | in the Software without restriction, including without limitation the rights
41 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42 | copies of the Software, and to permit persons to whom the Software is
43 | furnished to do so, subject to the following conditions:
44 |
45 | The above copyright notice and this permission notice shall be included in all
46 | copies or substantial portions of the Software.
47 |
48 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54 | SOFTWARE.
55 | *
56 | */
57 |
58 | namespace LoneEftDmaRadar.UI.Radar.Maps
59 | {
60 | ///
61 | /// Contains multiple map parameters used by the GUI.
62 | ///
63 | public sealed class EftMapParams
64 | {
65 | ///
66 | /// Currently loaded Map File.
67 | ///
68 | public EftMapConfig Map { get; init; }
69 | ///
70 | /// Rectangular 'zoomed' bounds of the Bitmap to display.
71 | ///
72 | public SKRect Bounds { get; init; }
73 | ///
74 | /// Regular -> Zoomed 'X' Scale correction.
75 | ///
76 | public float XScale { get; init; }
77 | ///
78 | /// Regular -> Zoomed 'Y' Scale correction.
79 | ///
80 | public float YScale { get; init; }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/Maps/Customs_3f.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/UI/Data/StaticContainerEntry.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.Web.TarkovDev.Data;
30 |
31 | namespace LoneEftDmaRadar.UI.Data
32 | {
33 | public sealed class StaticContainerEntry : INotifyPropertyChanged
34 | {
35 | public event PropertyChangedEventHandler PropertyChanged;
36 | private void OnPropertyChanged(string propertyName) =>
37 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
38 |
39 | private StaticContainerEntry() { }
40 |
41 | public StaticContainerEntry(TarkovMarketItem container)
42 | {
43 | Name = container.ShortName;
44 | Id = container.BsgId;
45 | _isTracked = App.Config.Containers.Selected.ContainsKey(container.BsgId);
46 | }
47 |
48 |
49 | public string Id { get; }
50 | public string Name { get; }
51 |
52 | private bool _isTracked;
53 | public bool IsTracked
54 | {
55 | get => _isTracked;
56 | set
57 | {
58 | if (_isTracked != value)
59 | {
60 | _isTracked = value;
61 | if (_isTracked)
62 | {
63 | App.Config.Containers.Selected.TryAdd(Id, 0);
64 | }
65 | else
66 | {
67 | App.Config.Containers.Selected.TryRemove(Id, out _);
68 | }
69 | OnPropertyChanged(nameof(IsTracked));
70 | }
71 | }
72 | }
73 |
74 | public override bool Equals(object obj)
75 | {
76 | if (obj is StaticContainerEntry other)
77 | {
78 | return string.Equals(Id, other.Id, StringComparison.OrdinalIgnoreCase);
79 | }
80 | if (obj is string id)
81 | {
82 | return string.Equals(Id, id, StringComparison.OrdinalIgnoreCase);
83 | }
84 |
85 | return false;
86 | }
87 |
88 | public override int GetHashCode()
89 | {
90 | return StringComparer.OrdinalIgnoreCase.GetHashCode(Id);
91 | }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------