Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f49dfbdb01 | ||
ac56754db2 | |||
|
4839e050f8 | ||
|
183c640ea3 | ||
|
34e6c8fc06 | ||
027893c1d6 | |||
|
28fd27d21d | ||
|
796e7a6005 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,7 +2,8 @@
|
|||||||
project/References/EFT_Managed/*
|
project/References/EFT_Managed/*
|
||||||
|
|
||||||
# Allow these files, despite the rules above
|
# Allow these files, despite the rules above
|
||||||
project/References/EFT_Managed/.keep
|
!project/References/EFT_Managed/.keep
|
||||||
|
!project/References/SPT/.keep
|
||||||
|
|
||||||
# ---> VisualStudio
|
# ---> VisualStudio
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Freecam
|
# Freecam
|
||||||
|
|
||||||
An SPT-AKI module mod that allows you to detach the camera and fly around freely in Escape From Tarkov.
|
A BepInEx plugin for SPT-AKI that allows you to detach the camera and fly around freely in Escape From Tarkov.
|
||||||
|
|
||||||
### Controls
|
### Controls
|
||||||
|
|
||||||
@ -21,10 +21,9 @@ Alternatively, you can find the `com.terkoiz.freecam.cfg` file in your `BepInEx/
|
|||||||
|
|
||||||
### Known issues
|
### Known issues
|
||||||
|
|
||||||
1. Your weapon doesn't turn invisible when you enter freecam mode
|
1. When teleporting to camera position, the camera rotation gets copied exactly, potentially causing the player model to tilt
|
||||||
2. When teleporting to camera position, the camera rotation gets copied exactly, potentially causing the player model to tilt
|
2. Game version UI element is not hidden when toggling UI
|
||||||
3. Game version UI element is not hidden when toggling UI
|
3. When flying to distant parts of the map in freecam mode, LODs are not triggered (these seem to follow the player)
|
||||||
4. When flying to distant parts of the map in freecam mode, LODs are not triggered (these seem to follow the player)
|
|
||||||
|
|
||||||
### How to build from source
|
### How to build from source
|
||||||
|
|
||||||
|
0
project/References/EFT_Managed/.keep
Normal file
0
project/References/EFT_Managed/.keep
Normal file
Binary file not shown.
0
project/References/SPT/.keep
Normal file
0
project/References/SPT/.keep
Normal file
44
project/Terkoiz.Freecam/FallDamagePatch.cs
Normal file
44
project/Terkoiz.Freecam/FallDamagePatch.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using SPT.Reflection.Patching;
|
||||||
|
using EFT.HealthSystem;
|
||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
|
namespace Terkoiz.Freecam
|
||||||
|
{
|
||||||
|
public class FallDamagePatch : ModulePatch
|
||||||
|
{
|
||||||
|
internal static bool HasTeleported;
|
||||||
|
|
||||||
|
protected override MethodBase GetTargetMethod()
|
||||||
|
{
|
||||||
|
return AccessTools.Method(typeof(ActiveHealthController), nameof(ActiveHealthController.HandleFall));
|
||||||
|
}
|
||||||
|
|
||||||
|
[PatchPrefix]
|
||||||
|
public static bool PatchPrefix(ActiveHealthController __instance, float height)
|
||||||
|
{
|
||||||
|
// WARNING: The 'HandleFall' method gets called every frame for every player and AI in a raid. Be very careful with logging or expensive operations in this prefix patch!
|
||||||
|
|
||||||
|
// Check if it's our own player, or if a Player property even exists
|
||||||
|
if (__instance.Player?.IsAI ?? true)
|
||||||
|
{
|
||||||
|
return true; // Run original method
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global fall damage flag overrides everything
|
||||||
|
if (FreecamPlugin.GlobalDisableFallDamage.Value)
|
||||||
|
{
|
||||||
|
return false; // Prevent original method from running
|
||||||
|
}
|
||||||
|
|
||||||
|
// If smart fall damage flag is enabled, check if we've recently teleported and if the fall height value was positive
|
||||||
|
if (FreecamPlugin.SmartDisableFallDamage.Value && HasTeleported && height > 0)
|
||||||
|
{
|
||||||
|
HasTeleported = false;
|
||||||
|
return false; // Prevent original method from running
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // Run original method
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,7 @@ namespace Terkoiz.Freecam
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A simple free camera to be added to a Unity game object.
|
/// A simple free camera to be added to a Unity game object.
|
||||||
///
|
///
|
||||||
/// Full credit to Ashley Davis on GitHub for the inital code:
|
/// Full credit to Ashley Davis on GitHub for the initial code:
|
||||||
/// https://gist.github.com/ashleydavis/f025c03a9221bc840a2b
|
/// https://gist.github.com/ashleydavis/f025c03a9221bc840a2b
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -13,7 +13,7 @@ namespace Terkoiz.Freecam
|
|||||||
private GameObject _mainCamera;
|
private GameObject _mainCamera;
|
||||||
private Freecam _freeCamScript;
|
private Freecam _freeCamScript;
|
||||||
|
|
||||||
private BattleUIScreen _playerUi;
|
private EftBattleUIScreen _playerUi;
|
||||||
private bool _uiHidden;
|
private bool _uiHidden;
|
||||||
|
|
||||||
private GamePlayerOwner _gamePlayerOwner;
|
private GamePlayerOwner _gamePlayerOwner;
|
||||||
@ -21,22 +21,25 @@ namespace Terkoiz.Freecam
|
|||||||
private Vector3? _lastPosition;
|
private Vector3? _lastPosition;
|
||||||
private Quaternion? _lastRotation;
|
private Quaternion? _lastRotation;
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// Hide version number UI element
|
|
||||||
// Button to toggle between camera and player movement
|
|
||||||
// Independent FoV setting for Freecam mode (_mainCamera.GetComponent<Camera>().fieldOfView = ...)
|
|
||||||
|
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
// Find Main Camera
|
// Get Main Camera
|
||||||
_mainCamera = GameObject.Find("FPS Camera");
|
_mainCamera = GetLocalPlayerFromWorld().GetComponent<PlayerCameraController>().Camera.gameObject;
|
||||||
if (_mainCamera == null)
|
if (_mainCamera == null)
|
||||||
{
|
{
|
||||||
FreecamPlugin.Logger.LogError("Failed to locate main camera");
|
FreecamPlugin.Logger.LogError("Failed to locate main camera");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get Player UI
|
||||||
|
_playerUi = Singleton<CommonUI>.Instance.EftBattleUIScreen;
|
||||||
|
if (_playerUi == null)
|
||||||
|
{
|
||||||
|
FreecamPlugin.Logger.LogError("Failed to locate player UI");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Add Freecam script to main camera in scene
|
// Add Freecam script to main camera in scene
|
||||||
_freeCamScript = _mainCamera.AddComponent<Freecam>();
|
_freeCamScript = _mainCamera.AddComponent<Freecam>();
|
||||||
if (_freeCamScript == null)
|
if (_freeCamScript == null)
|
||||||
@ -65,6 +68,11 @@ namespace Terkoiz.Freecam
|
|||||||
ToggleCamera();
|
ToggleCamera();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (FreecamPlugin.ToggleFreecamControls.Value.IsDown())
|
||||||
|
{
|
||||||
|
ToggleCameraControls();
|
||||||
|
}
|
||||||
|
|
||||||
if (FreecamPlugin.TeleportToCamera.Value.IsDown())
|
if (FreecamPlugin.TeleportToCamera.Value.IsDown())
|
||||||
{
|
{
|
||||||
MovePlayerToCamera();
|
MovePlayerToCamera();
|
||||||
@ -103,6 +111,9 @@ namespace Terkoiz.Freecam
|
|||||||
// Move the player to the camera's current position and switch to First Person mode
|
// Move the player to the camera's current position and switch to First Person mode
|
||||||
if (_freeCamScript.IsActive)
|
if (_freeCamScript.IsActive)
|
||||||
{
|
{
|
||||||
|
// Tell the fall damage patch that we just teleported. Used for the "smart" fall damage prevention feature
|
||||||
|
FallDamagePatch.HasTeleported = true;
|
||||||
|
|
||||||
// We grab the camera's position, but we subtract a bit off the Y axis, because the players coordinate origin is at the feet
|
// We grab the camera's position, but we subtract a bit off the Y axis, because the players coordinate origin is at the feet
|
||||||
var position = new Vector3(_mainCamera.transform.position.x, _mainCamera.transform.position.y - 1.8f, _mainCamera.transform.position.z);
|
var position = new Vector3(_mainCamera.transform.position.x, _mainCamera.transform.position.y - 1.8f, _mainCamera.transform.position.z);
|
||||||
localPlayer.gameObject.transform.SetPositionAndRotation(position, Quaternion.Euler(0, _mainCamera.transform.rotation.y, 0));
|
localPlayer.gameObject.transform.SetPositionAndRotation(position, Quaternion.Euler(0, _mainCamera.transform.rotation.y, 0));
|
||||||
@ -121,18 +132,6 @@ namespace Terkoiz.Freecam
|
|||||||
if (GetLocalPlayerFromWorld() == null)
|
if (GetLocalPlayerFromWorld() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// If we don't have the UI Component cached, go look for it in the scene
|
|
||||||
if (_playerUi == null)
|
|
||||||
{
|
|
||||||
_playerUi = GameObject.Find("BattleUIScreen").GetComponent<BattleUIScreen>();
|
|
||||||
|
|
||||||
if (_playerUi == null)
|
|
||||||
{
|
|
||||||
FreecamPlugin.Logger.LogError("Failed to locate player UI");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_playerUi.gameObject.SetActive(_uiHidden);
|
_playerUi.gameObject.SetActive(_uiHidden);
|
||||||
_uiHidden = !_uiHidden;
|
_uiHidden = !_uiHidden;
|
||||||
}
|
}
|
||||||
@ -198,6 +197,25 @@ namespace Terkoiz.Freecam
|
|||||||
localPlayer.PointOfView = EPointOfView.FirstPerson;
|
localPlayer.PointOfView = EPointOfView.FirstPerson;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A helper method to toggle the Freecam Camera Controls
|
||||||
|
/// </summary>
|
||||||
|
private void ToggleCameraControls()
|
||||||
|
{
|
||||||
|
if (_freeCamScript.IsActive)
|
||||||
|
{
|
||||||
|
_freeCamScript.IsActive = false;
|
||||||
|
_gamePlayerOwner.enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_freeCamScript.IsActive = true;
|
||||||
|
_gamePlayerOwner.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current <see cref="Player"/> instance if it's available
|
/// Gets the current <see cref="Player"/> instance if it's available
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -218,7 +236,6 @@ namespace Terkoiz.Freecam
|
|||||||
{
|
{
|
||||||
// Destroy FreeCamScript before FreeCamController if exists
|
// Destroy FreeCamScript before FreeCamController if exists
|
||||||
Destroy(_freeCamScript);
|
Destroy(_freeCamScript);
|
||||||
Destroy(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Aki.Reflection.Patching;
|
using SPT.Reflection.Patching;
|
||||||
using Comfort.Common;
|
using Comfort.Common;
|
||||||
using EFT;
|
using EFT;
|
||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
namespace Terkoiz.Freecam
|
namespace Terkoiz.Freecam
|
||||||
{
|
{
|
||||||
@ -9,19 +10,19 @@ namespace Terkoiz.Freecam
|
|||||||
{
|
{
|
||||||
protected override MethodBase GetTargetMethod()
|
protected override MethodBase GetTargetMethod()
|
||||||
{
|
{
|
||||||
return typeof(GameWorld).GetMethod("OnGameStarted", BindingFlags.Public | BindingFlags.Instance);
|
return AccessTools.Method(typeof(GameWorld), nameof(GameWorld.OnGameStarted));
|
||||||
}
|
}
|
||||||
|
|
||||||
[PatchPostfix]
|
[PatchPostfix]
|
||||||
public static void PatchPostFix()
|
public static void PatchPostFix()
|
||||||
{
|
{
|
||||||
var gameworld = Singleton<GameWorld>.Instance;
|
var gameWorld = Singleton<GameWorld>.Instance;
|
||||||
|
|
||||||
if (gameworld == null)
|
if (gameWorld == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Add FreeCamController to GameWorld GameObject
|
// Add FreecamController to GameWorld GameObject
|
||||||
gameworld.gameObject.AddComponent<FreecamController>();
|
gameWorld.gameObject.AddComponent<FreecamController>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,14 +7,20 @@ using KeyboardShortcut = BepInEx.Configuration.KeyboardShortcut;
|
|||||||
|
|
||||||
namespace Terkoiz.Freecam
|
namespace Terkoiz.Freecam
|
||||||
{
|
{
|
||||||
[BepInPlugin("com.terkoiz.freecam", "Terkoiz.Freecam", "1.3.2")]
|
[BepInPlugin("com.terkoiz.freecam", "Terkoiz.Freecam", "1.4.4")]
|
||||||
public class FreecamPlugin : BaseUnityPlugin
|
public class FreecamPlugin : BaseUnityPlugin
|
||||||
{
|
{
|
||||||
internal new static ManualLogSource Logger { get; private set; }
|
internal new static ManualLogSource Logger { get; private set; }
|
||||||
|
|
||||||
|
// Fall damage config entries
|
||||||
|
private const string FallDamageSectionName = "Fall Damage";
|
||||||
|
internal static ConfigEntry<bool> GlobalDisableFallDamage;
|
||||||
|
internal static ConfigEntry<bool> SmartDisableFallDamage;
|
||||||
|
|
||||||
// Keyboard shortcut config entries
|
// Keyboard shortcut config entries
|
||||||
private const string KeybindSectionName = "Keybinds";
|
private const string KeybindSectionName = "Keybinds";
|
||||||
internal static ConfigEntry<KeyboardShortcut> ToggleFreecamMode;
|
internal static ConfigEntry<KeyboardShortcut> ToggleFreecamMode;
|
||||||
|
internal static ConfigEntry<KeyboardShortcut> ToggleFreecamControls;
|
||||||
internal static ConfigEntry<KeyboardShortcut> TeleportToCamera;
|
internal static ConfigEntry<KeyboardShortcut> TeleportToCamera;
|
||||||
internal static ConfigEntry<KeyboardShortcut> ToggleUi;
|
internal static ConfigEntry<KeyboardShortcut> ToggleUi;
|
||||||
|
|
||||||
@ -39,16 +45,35 @@ namespace Terkoiz.Freecam
|
|||||||
InitConfiguration();
|
InitConfiguration();
|
||||||
|
|
||||||
new FreecamPatch().Enable();
|
new FreecamPatch().Enable();
|
||||||
|
new FallDamagePatch().Enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitConfiguration()
|
private void InitConfiguration()
|
||||||
{
|
{
|
||||||
|
GlobalDisableFallDamage = Config.Bind(
|
||||||
|
FallDamageSectionName,
|
||||||
|
"Globally Disable Fall Damage",
|
||||||
|
false,
|
||||||
|
"Completely disables fall damage. This is the safest option for using freecam. Will fully override the 'Smart Fall Damage Prevention' setting.");
|
||||||
|
|
||||||
|
SmartDisableFallDamage = Config.Bind(
|
||||||
|
FallDamageSectionName,
|
||||||
|
"Smart Fall Damage Prevention",
|
||||||
|
true,
|
||||||
|
"Fall damage will only be disabled after using teleport, until your player lands. Less cheat-y way to save yourself from fall damage, but might sometimes be unreliable.");
|
||||||
|
|
||||||
ToggleFreecamMode = Config.Bind(
|
ToggleFreecamMode = Config.Bind(
|
||||||
KeybindSectionName,
|
KeybindSectionName,
|
||||||
"ToggleCamera",
|
"Toggle Freecam",
|
||||||
new KeyboardShortcut(KeyCode.KeypadPlus),
|
new KeyboardShortcut(KeyCode.KeypadPlus),
|
||||||
"The keyboard shortcut that toggles Freecam");
|
"The keyboard shortcut that toggles Freecam");
|
||||||
|
|
||||||
|
ToggleFreecamControls = Config.Bind(
|
||||||
|
KeybindSectionName,
|
||||||
|
"Toggle Freecam Controls",
|
||||||
|
new KeyboardShortcut(KeyCode.KeypadPeriod),
|
||||||
|
"The keyboard shortcut that toggles Freecam Controls");
|
||||||
|
|
||||||
TeleportToCamera = Config.Bind(
|
TeleportToCamera = Config.Bind(
|
||||||
KeybindSectionName,
|
KeybindSectionName,
|
||||||
"Teleport To Camera",
|
"Teleport To Camera",
|
||||||
@ -57,13 +82,13 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
ToggleUi = Config.Bind(
|
ToggleUi = Config.Bind(
|
||||||
KeybindSectionName,
|
KeybindSectionName,
|
||||||
"ToggleUi",
|
"Toggle UI",
|
||||||
new KeyboardShortcut(KeyCode.KeypadMultiply),
|
new KeyboardShortcut(KeyCode.KeypadMultiply),
|
||||||
"The keyboard shortcut that toggles the game UI");
|
"The keyboard shortcut that toggles the game UI");
|
||||||
|
|
||||||
CameraMoveSpeed = Config.Bind(
|
CameraMoveSpeed = Config.Bind(
|
||||||
CameraSettingsSectionName,
|
CameraSettingsSectionName,
|
||||||
"CameraMoveSpeed",
|
"Camera Speed",
|
||||||
10f,
|
10f,
|
||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"The speed at which the camera will move normally",
|
"The speed at which the camera will move normally",
|
||||||
@ -71,7 +96,7 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
CameraFastMoveSpeed = Config.Bind(
|
CameraFastMoveSpeed = Config.Bind(
|
||||||
CameraSettingsSectionName,
|
CameraSettingsSectionName,
|
||||||
"CameraFastMoveSpeed",
|
"Camera Sprint Speed",
|
||||||
100f,
|
100f,
|
||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"The speed at which the camera will move when the Shift key is held down",
|
"The speed at which the camera will move when the Shift key is held down",
|
||||||
@ -79,7 +104,7 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
CameraLookSensitivity = Config.Bind(
|
CameraLookSensitivity = Config.Bind(
|
||||||
CameraSettingsSectionName,
|
CameraSettingsSectionName,
|
||||||
"CameraLookSensitivity",
|
"Camera Mouse Sensitivity",
|
||||||
3f,
|
3f,
|
||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"Camera free look mouse sensitivity",
|
"Camera free look mouse sensitivity",
|
||||||
@ -87,7 +112,7 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
CameraZoomSpeed = Config.Bind(
|
CameraZoomSpeed = Config.Bind(
|
||||||
CameraSettingsSectionName,
|
CameraSettingsSectionName,
|
||||||
"CameraMousewheelZoomSpeed",
|
"Camera Zoom Speed",
|
||||||
10f,
|
10f,
|
||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"Amount to zoom the camera when using the mouse wheel",
|
"Amount to zoom the camera when using the mouse wheel",
|
||||||
@ -95,7 +120,7 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
CameraFastZoomSpeed = Config.Bind(
|
CameraFastZoomSpeed = Config.Bind(
|
||||||
CameraSettingsSectionName,
|
CameraSettingsSectionName,
|
||||||
"CameraMousewheelFastZoomSpeed",
|
"Camera Zoom Sprint Speed",
|
||||||
50f,
|
50f,
|
||||||
new ConfigDescription(
|
new ConfigDescription(
|
||||||
"Amount to zoom the camera when using the mouse wheel while holding Shift",
|
"Amount to zoom the camera when using the mouse wheel while holding Shift",
|
||||||
@ -116,9 +141,9 @@ namespace Terkoiz.Freecam
|
|||||||
|
|
||||||
CameraRememberLastPosition = Config.Bind(
|
CameraRememberLastPosition = Config.Bind(
|
||||||
TogglesSectionName,
|
TogglesSectionName,
|
||||||
"CameraRememberLastPosition",
|
"Remember Last Camera Position",
|
||||||
false,
|
false,
|
||||||
"If enabled, returning to Freecam mode will put the camera to it's last position which was saved when exiting Freecam mode.");
|
"If enabled, returning to Freecam mode will put the camera to it's last position which is saved when exiting Freecam mode.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net472</TargetFramework>
|
<TargetFramework>net471</TargetFramework>
|
||||||
<Version>1.3.2</Version>
|
<Version>1.4.4</Version>
|
||||||
<Authors>Terkoiz, Kobrakon, CWX</Authors>
|
<Authors>Terkoiz, Kobrakon, CWX</Authors>
|
||||||
<RepositoryUrl>https://dev.sp-tarkov.com/Terkoiz/Freecam</RepositoryUrl>
|
<RepositoryUrl>https://dev.sp-tarkov.com/Terkoiz/Freecam</RepositoryUrl>
|
||||||
<PackageLicenseExpression>NCSA</PackageLicenseExpression>
|
<PackageLicenseExpression>NCSA</PackageLicenseExpression>
|
||||||
@ -16,11 +16,11 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Aki.Reflection">
|
<Reference Include="Aki.Reflection">
|
||||||
<HintPath>..\References\EFT_Managed\Aki.Reflection.dll</HintPath>
|
<HintPath>..\References\SPT\spt-reflection.dll</HintPath>
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="Assembly-CSharp">
|
||||||
<HintPath>..\References\Hollowed\Assembly-CSharp.dll</HintPath>
|
<HintPath>..\References\EFT_Managed\Assembly-CSharp.dll</HintPath>
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Comfort">
|
<Reference Include="Comfort">
|
||||||
|
Reference in New Issue
Block a user