Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b8a06f7bd7 | ||
![]() |
d44b1a592c | ||
![]() |
d7d556d2f2 | ||
![]() |
850b313269 | ||
![]() |
fe985e1a9c | ||
![]() |
aeea192860 | ||
![]() |
b8be5b2dce | ||
![]() |
ea08d60d58 | ||
![]() |
6493a305f7 | ||
![]() |
bc0a2b89b8 | ||
![]() |
846c2aa42e |
12
.github/workflows/release.yaml
vendored
12
.github/workflows/release.yaml
vendored
@@ -21,12 +21,6 @@ jobs:
|
||||
name: Setup dotnet
|
||||
with:
|
||||
dotnet-version: '7.0.x'
|
||||
- uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.nuget/packages
|
||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-nuget-
|
||||
- name: Add Gh Packages Nuget Source
|
||||
run: dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github
|
||||
- name: Restore dependencies
|
||||
@@ -73,3 +67,9 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
id: ${{ steps.create_release.outputs.id }}
|
||||
|
||||
- run: dotnet pack -c Release .\Torch.API\Torch.API.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg --no-build
|
||||
- run: dotnet pack -c Release .\Torch\Torch.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg --no-build
|
||||
- run: dotnet pack -c Release .\Torch.Server\Torch.Server.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg -p:Version=${{ env.TORCH_VERSION }} --no-build
|
||||
|
||||
- run: dotnet nuget push ./pack/*.nupkg -s github
|
||||
|
@@ -1,26 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Torch.Mod.Messages
|
||||
{
|
||||
/// <summary>
|
||||
/// shim to store incoming message data
|
||||
/// </summary>
|
||||
internal class IncomingMessage : MessageBase
|
||||
{
|
||||
public IncomingMessage()
|
||||
{
|
||||
}
|
||||
|
||||
public override void ProcessClient()
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
public override void ProcessServer()
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
}
|
@@ -32,11 +32,6 @@ namespace Torch.Mod.Messages
|
||||
|
||||
public override void ProcessClient()
|
||||
{
|
||||
if (TorchModCore.Debug)
|
||||
{
|
||||
MyAPIGateway.Utilities.ShowMessage("Torch", $"Joining server {Address} with delay {Delay}");
|
||||
}
|
||||
|
||||
if (Delay <= 0)
|
||||
{
|
||||
MyAPIGateway.Multiplayer.JoinServer(Address);
|
||||
|
@@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ProtoBuf;
|
||||
using ProtoBuf;
|
||||
|
||||
namespace Torch.Mod.Messages
|
||||
{
|
||||
@@ -17,36 +12,9 @@ namespace Torch.Mod.Messages
|
||||
[ProtoContract]
|
||||
public abstract class MessageBase
|
||||
{
|
||||
[ProtoMember(101)]
|
||||
public ulong SenderId;
|
||||
|
||||
public abstract void ProcessClient();
|
||||
public abstract void ProcessServer();
|
||||
|
||||
//members below not serialized, they're just metadata about the intended target(s) of this message
|
||||
internal MessageTarget TargetType;
|
||||
internal ulong Target;
|
||||
internal ulong[] Ignore;
|
||||
internal byte[] CompressedData;
|
||||
}
|
||||
|
||||
public enum MessageTarget
|
||||
{
|
||||
/// <summary>
|
||||
/// Send to Target
|
||||
/// </summary>
|
||||
Single,
|
||||
/// <summary>
|
||||
/// Send to Server
|
||||
/// </summary>
|
||||
Server,
|
||||
/// <summary>
|
||||
/// Send to all Clients (only valid from server)
|
||||
/// </summary>
|
||||
AllClients,
|
||||
/// <summary>
|
||||
/// Send to all except those steam ID listed in Ignore
|
||||
/// </summary>
|
||||
AllExcept,
|
||||
}
|
||||
}
|
||||
|
@@ -1,161 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Sandbox.ModAPI;
|
||||
using Torch.Mod.Messages;
|
||||
using VRage;
|
||||
using VRage.Collections;
|
||||
using VRage.Game.Components;
|
||||
using VRage.Game.ModAPI;
|
||||
using VRage.Network;
|
||||
using VRage.Utils;
|
||||
using Task = ParallelTasks.Task;
|
||||
#if TORCH
|
||||
using Torch.Utils;
|
||||
using VRage.Library.Collections;
|
||||
using System.Reflection;
|
||||
#endif
|
||||
|
||||
namespace Torch.Mod
|
||||
{
|
||||
public static class ModCommunication
|
||||
[MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)]
|
||||
public class ModCommunication : MySessionComponentBase
|
||||
{
|
||||
public const ushort NET_ID = 4352;
|
||||
private static bool _closing = false;
|
||||
private static BlockingCollection<MessageBase> _processing;
|
||||
private static MyConcurrentPool<IncomingMessage> _messagePool;
|
||||
private static List<IMyPlayer> _playerCache;
|
||||
public const ulong MOD_ID = 2915950488;
|
||||
private const ushort CHANNEL = 7654;
|
||||
|
||||
public static void Register()
|
||||
public override void BeforeStart()
|
||||
{
|
||||
MyLog.Default.WriteLineAndConsole("TORCH MOD: Registering mod communication.");
|
||||
_processing = new BlockingCollection<MessageBase>(new ConcurrentQueue<MessageBase>());
|
||||
_playerCache = new List<IMyPlayer>();
|
||||
_messagePool = new MyConcurrentPool<IncomingMessage>(8);
|
||||
|
||||
MyAPIGateway.Multiplayer.RegisterMessageHandler(NET_ID, MessageHandler);
|
||||
//background thread to handle de/compression and processing
|
||||
_closing = false;
|
||||
MyAPIGateway.Parallel.StartBackground(DoProcessing);
|
||||
MyLog.Default.WriteLineAndConsole("TORCH MOD: Mod communication registered successfully.");
|
||||
base.BeforeStart();
|
||||
MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(CHANNEL, MessageHandler);
|
||||
}
|
||||
|
||||
public static void Unregister()
|
||||
private void MessageHandler(ushort channel, byte[] data, ulong sender, bool fromServer)
|
||||
{
|
||||
MyLog.Default.WriteLineAndConsole("TORCH MOD: Unregistering mod communication.");
|
||||
MyAPIGateway.Multiplayer?.UnregisterMessageHandler(NET_ID, MessageHandler);
|
||||
_processing?.CompleteAdding();
|
||||
_closing = true;
|
||||
//_task.Wait();
|
||||
if (!fromServer)
|
||||
return;
|
||||
|
||||
var message = MyAPIGateway.Utilities.SerializeFromBinary<MessageBase>(data);
|
||||
message.SenderId = sender;
|
||||
|
||||
if (MyAPIGateway.Multiplayer.IsServer) message.ProcessServer();
|
||||
else message.ProcessClient();
|
||||
}
|
||||
|
||||
private static void MessageHandler(byte[] bytes)
|
||||
{
|
||||
var m = _messagePool.Get();
|
||||
m.CompressedData = bytes;
|
||||
#if TORCH
|
||||
m.SenderId = MyEventContext.Current.Sender.Value;
|
||||
#endif
|
||||
[ReflectedMethodInfo(typeof(MyAPIUtilities), "VRage.Game.ModAPI.IMyUtilities.SerializeToBinary")]
|
||||
private static MethodInfo _serializeMethod = null!;
|
||||
|
||||
_processing.Add(m);
|
||||
}
|
||||
private static readonly CacheList<IMyPlayer> Players = new();
|
||||
|
||||
public static void DoProcessing()
|
||||
private static byte[] Serialize(MessageBase message)
|
||||
{
|
||||
while (!_closing)
|
||||
{
|
||||
try
|
||||
{
|
||||
MessageBase m;
|
||||
try
|
||||
{
|
||||
m = _processing.Take();
|
||||
}
|
||||
catch
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
MyLog.Default.WriteLineAndConsole($"Processing message: {m.GetType().Name}");
|
||||
|
||||
if (m is IncomingMessage) //process incoming messages
|
||||
{
|
||||
MessageBase i;
|
||||
try
|
||||
{
|
||||
var o = MyCompression.Decompress(m.CompressedData);
|
||||
m.CompressedData = null;
|
||||
_messagePool.Return((IncomingMessage)m);
|
||||
i = MyAPIGateway.Utilities.SerializeFromBinary<MessageBase>(o);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MyLog.Default.WriteLineAndConsole($"TORCH MOD: Failed to deserialize message! {ex}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (TorchModCore.Debug)
|
||||
MyAPIGateway.Utilities.ShowMessage("Torch", $"Received message of type {i.GetType().Name}");
|
||||
|
||||
if (MyAPIGateway.Multiplayer.IsServer)
|
||||
i.ProcessServer();
|
||||
else
|
||||
i.ProcessClient();
|
||||
}
|
||||
else //process outgoing messages
|
||||
{
|
||||
if (TorchModCore.Debug)
|
||||
MyAPIGateway.Utilities.ShowMessage("Torch", $"Sending message of type {m.GetType().Name}");
|
||||
|
||||
var b = MyAPIGateway.Utilities.SerializeToBinary(m);
|
||||
m.CompressedData = MyCompression.Compress(b);
|
||||
|
||||
switch (m.TargetType)
|
||||
{
|
||||
case MessageTarget.Single:
|
||||
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, m.Target);
|
||||
break;
|
||||
case MessageTarget.Server:
|
||||
MyAPIGateway.Multiplayer.SendMessageToServer(NET_ID, m.CompressedData);
|
||||
break;
|
||||
case MessageTarget.AllClients:
|
||||
MyAPIGateway.Players.GetPlayers(_playerCache);
|
||||
foreach (var p in _playerCache)
|
||||
{
|
||||
if (p.SteamUserId == MyAPIGateway.Multiplayer.MyId)
|
||||
continue;
|
||||
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, p.SteamUserId);
|
||||
}
|
||||
|
||||
break;
|
||||
case MessageTarget.AllExcept:
|
||||
MyAPIGateway.Players.GetPlayers(_playerCache);
|
||||
foreach (var p in _playerCache)
|
||||
{
|
||||
if (p.SteamUserId == MyAPIGateway.Multiplayer.MyId || m.Ignore.Contains(p.SteamUserId))
|
||||
continue;
|
||||
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, p.SteamUserId);
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
_playerCache.Clear();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MyLog.Default.WriteLineAndConsole($"TORCH MOD: Exception occurred in communication thread! {ex}");
|
||||
}
|
||||
}
|
||||
|
||||
MyLog.Default.WriteLineAndConsole("TORCH MOD: INFO: Communication thread shut down successfully! THIS IS NOT AN ERROR");
|
||||
//exit signal received. Clean everything and GTFO
|
||||
_processing?.Dispose();
|
||||
_processing = null;
|
||||
_messagePool?.Clean();
|
||||
_messagePool = null;
|
||||
_playerCache = null;
|
||||
return (byte[])_serializeMethod.MakeGenericMethod(message.GetType())
|
||||
.Invoke(MyAPIGateway.Utilities, new object[] { message });
|
||||
}
|
||||
|
||||
public static void SendMessageTo(MessageBase message, ulong target)
|
||||
@@ -163,12 +52,7 @@ namespace Torch.Mod
|
||||
if (!MyAPIGateway.Multiplayer.IsServer)
|
||||
throw new Exception("Only server can send targeted messages");
|
||||
|
||||
if (_closing)
|
||||
return;
|
||||
|
||||
message.Target = target;
|
||||
message.TargetType = MessageTarget.Single;
|
||||
_processing.Add(message);
|
||||
MyAPIGateway.Multiplayer.SendMessageTo(CHANNEL, Serialize(message), target);
|
||||
}
|
||||
|
||||
public static void SendMessageToClients(MessageBase message)
|
||||
@@ -176,11 +60,7 @@ namespace Torch.Mod
|
||||
if (!MyAPIGateway.Multiplayer.IsServer)
|
||||
throw new Exception("Only server can send targeted messages");
|
||||
|
||||
if (_closing)
|
||||
return;
|
||||
|
||||
message.TargetType = MessageTarget.AllClients;
|
||||
_processing.Add(message);
|
||||
MyAPIGateway.Multiplayer.SendMessageToOthers(CHANNEL, Serialize(message));
|
||||
}
|
||||
|
||||
public static void SendMessageExcept(MessageBase message, params ulong[] ignoredUsers)
|
||||
@@ -188,21 +68,20 @@ namespace Torch.Mod
|
||||
if (!MyAPIGateway.Multiplayer.IsServer)
|
||||
throw new Exception("Only server can send targeted messages");
|
||||
|
||||
if (_closing)
|
||||
return;
|
||||
using var players = Players;
|
||||
MyAPIGateway.Multiplayer.Players.GetPlayers(players, player => !ignoredUsers.Contains(player.SteamUserId));
|
||||
|
||||
message.TargetType = MessageTarget.AllExcept;
|
||||
message.Ignore = ignoredUsers;
|
||||
_processing.Add(message);
|
||||
var data = Serialize(message);
|
||||
foreach (var player in players)
|
||||
{
|
||||
MyAPIGateway.Multiplayer.SendMessageTo(CHANNEL, data, player.SteamUserId);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendMessageToServer(MessageBase message)
|
||||
{
|
||||
if (_closing)
|
||||
return;
|
||||
|
||||
message.TargetType = MessageTarget.Server;
|
||||
_processing.Add(message);
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@@ -9,13 +9,11 @@
|
||||
<Import_RootNamespace>Torch.Mod</Import_RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\IncomingMessage.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\JoinServerMessage.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\NotificationMessage.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\DialogMessage.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\MessageBase.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Messages\VoxelResetMessage.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ModCommunication.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)TorchModCore.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@@ -1,51 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Sandbox.ModAPI;
|
||||
using VRage.Game.Components;
|
||||
|
||||
namespace Torch.Mod
|
||||
{
|
||||
[MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)]
|
||||
public class TorchModCore : MySessionComponentBase
|
||||
{
|
||||
public const ulong MOD_ID = 2722000298;
|
||||
private static bool _init;
|
||||
public static bool Debug;
|
||||
|
||||
public override void UpdateAfterSimulation()
|
||||
{
|
||||
if (_init)
|
||||
return;
|
||||
|
||||
_init = true;
|
||||
ModCommunication.Register();
|
||||
MyAPIGateway.Utilities.MessageEntered += Utilities_MessageEntered;
|
||||
}
|
||||
|
||||
private void Utilities_MessageEntered(string messageText, ref bool sendToOthers)
|
||||
{
|
||||
if (messageText == "@!debug")
|
||||
{
|
||||
Debug = !Debug;
|
||||
MyAPIGateway.Utilities.ShowMessage("Torch", $"Debug: {Debug}");
|
||||
sendToOthers = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void UnloadData()
|
||||
{
|
||||
try
|
||||
{
|
||||
MyAPIGateway.Utilities.MessageEntered -= Utilities_MessageEntered;
|
||||
ModCommunication.Unregister();
|
||||
}
|
||||
catch
|
||||
{
|
||||
//session unloading, don't care
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -146,7 +146,7 @@ namespace Torch.Server.Managers
|
||||
{
|
||||
DedicatedConfig.Mods.Clear();
|
||||
//remove the Torch mod to avoid running multiple copies of it
|
||||
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == TorchModCore.MOD_ID);
|
||||
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == ModCommunication.MOD_ID);
|
||||
foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods)
|
||||
DedicatedConfig.Mods.Add(new ModItemInfo(m));
|
||||
Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync());
|
||||
@@ -161,7 +161,7 @@ namespace Torch.Server.Managers
|
||||
{
|
||||
DedicatedConfig.Mods.Clear();
|
||||
//remove the Torch mod to avoid running multiple copies of it
|
||||
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == TorchModCore.MOD_ID);
|
||||
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == ModCommunication.MOD_ID);
|
||||
foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods)
|
||||
DedicatedConfig.Mods.Add(new ModItemInfo(m));
|
||||
Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync());
|
||||
|
@@ -3,11 +3,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Diagnostics.Runtime;
|
||||
using NLog;
|
||||
using PropertyChanged;
|
||||
@@ -21,8 +20,6 @@ using Torch.API.Session;
|
||||
using Torch.Commands;
|
||||
using Torch.Managers.PatchManager;
|
||||
using Torch.Mod;
|
||||
using Torch.Mod.Messages;
|
||||
using Torch.Patches;
|
||||
using Torch.Server.Commands;
|
||||
using Torch.Server.Managers;
|
||||
using Torch.Utils;
|
||||
@@ -211,7 +208,7 @@ namespace Torch.Server
|
||||
Environment.Exit(0);
|
||||
#endif
|
||||
|
||||
var exe = Assembly.GetExecutingAssembly().Location.Replace("dll", "exe");
|
||||
var exe = Path.Combine(AppContext.BaseDirectory, "Torch.Server.exe");
|
||||
|
||||
var args = Environment.GetCommandLineArgs();
|
||||
|
||||
@@ -229,6 +226,8 @@ namespace Torch.Server
|
||||
}
|
||||
|
||||
Process.Start(exe, $"--waitForPid {Environment.ProcessId} --tempAutostart true {string.Join(" ", args)}");
|
||||
|
||||
Environment.Exit(0);
|
||||
})
|
||||
{
|
||||
Name = "Restart thread"
|
||||
@@ -243,14 +242,12 @@ namespace Torch.Server
|
||||
case TorchSessionState.Unloading:
|
||||
_watchdog?.Dispose();
|
||||
_watchdog = null;
|
||||
ModCommunication.Unregister();
|
||||
break;
|
||||
case TorchSessionState.Loaded:
|
||||
_multiplayerManagerDedicated = CurrentSession.Managers.GetManager<MultiplayerManagerDedicated>();
|
||||
_multiplayerManagerDedicated.PlayerJoined += MultiplayerManagerDedicatedOnPlayerJoined;
|
||||
_multiplayerManagerDedicated.PlayerLeft += MultiplayerManagerDedicatedOnPlayerLeft;
|
||||
CurrentSession.Managers.GetManager<CommandManager>().RegisterCommandModule(typeof(WhitelistCommands));
|
||||
ModCommunication.Register();
|
||||
break;
|
||||
case TorchSessionState.Loading:
|
||||
case TorchSessionState.Unloaded:
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using NLog;
|
||||
using VRage;
|
||||
@@ -31,7 +32,7 @@ internal class UnhandledExceptionHandler
|
||||
{
|
||||
Console.WriteLine("Restarting in 5 seconds.");
|
||||
Thread.Sleep(5000);
|
||||
var exe = typeof(Program).Assembly.Location;
|
||||
var exe = Path.Combine(AppContext.BaseDirectory, "Torch.Server.exe");
|
||||
|
||||
Process.Start(exe, $"-waitForPid {Environment.ProcessId} {_config}");
|
||||
}
|
||||
|
@@ -162,10 +162,10 @@
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.10.2-prerelease",
|
||||
"contentHash": "a9wXURpkmi5aGTHEQiNCWv9DSKugpQLgT315wC1+zcnuxy5iUqgm7y7seH9IGDsWv7I33o6sGCUcGFAECsKusw==",
|
||||
"resolved": "2.10.2-prerelease.1",
|
||||
"contentHash": "5hbH0ENhQ+JV7tk63fQ2ab7MtplRHKJYH1JfIjG39rlltHNXxAcGJh05an+SQbVRV4EoP/+Qm9w9BrLc3RwRMA==",
|
||||
"dependencies": {
|
||||
"MonoModReorg.RuntimeDetour": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.RuntimeDetour": "22.11.21-prerelease.2",
|
||||
"System.Reflection.Emit": "4.7.0",
|
||||
"System.Reflection.Emit.Lightweight": "4.7.0"
|
||||
}
|
||||
@@ -308,11 +308,6 @@
|
||||
"resolved": "7.0.0",
|
||||
"contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
|
||||
},
|
||||
"Microsoft.NETCore.Platforms": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "ok+RPAtESz/9MUXeIEz6Lv5XAGQsaNmEYXMsgVALj4D7kqC8gveKWXWXbufLySR2fWrwZf8smyN5RmHu0e4BHA=="
|
||||
},
|
||||
"Microsoft.Xaml.Behaviors.Wpf": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.1.31",
|
||||
@@ -325,58 +320,63 @@
|
||||
},
|
||||
"MonoModReorg.Backports": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "MZXad6VJQgkFd5d4MqRcBI0EPhSDFlCl590L1rFKBJC2BqZR6DO2ZjAsRNtP8JyomFp+JzDJIqOIR+YgoWkhAg==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "69T6jjA5nx29jLkdqtfXKlJ8sMqIlc6czNDTomy0rbM68W0xo2JRJBgsu2mroBuqx7nvUdX+zIU6k1edS/pPbw==",
|
||||
"dependencies": {
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"MonoModReorg.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "2I3CRne3mAPW+z46/fmallENRCBD6ufa4sZnF7V5FleKFEwSxLkejZQfuvB/Jt4DaHo8b9ktly5UGpgcYpAOIQ==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "gDoxu4aAF6TeOo8rsrj5prq2X36i12ch6NeRHu/Ct0H3qoPDHuEQ6JMJN/Eiy45YrLNEN7C5+Ku4BrNX4nwVQg==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Utils": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Utils": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"MonoModReorg.ILHelpers": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "waeN4kdsQf2cXnXJd6SpqEfp4p+8kvcftcwijkSpq8I4fPGOagfCKNKRtDo5raRsi6PuCTK+dpljRsSOYQX6vg=="
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "JtOKHJR4DEyq3HxmdEVXIxhqNQnu1KmjGFXuEQrNHoPbzi8Yr9465VKVXdsoAF0Lm8StdyJHQ03efjv3+OlonA=="
|
||||
},
|
||||
"MonoModReorg.RuntimeDetour": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "gOFDFz88Lr/H5G6pQOejjvyq2lh63jLS8Fmajk0s3bt54BlW4v0pa+b3rI4ZPDOTmGdxAi1yZtREX20j6ewzqQ==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "Qv1h4rW03LrHwxwVuw5R6hbL8X78l8Lfnxe5tMlyVAe+AK0HnwsRzjsTwzFF57wxWUwq12NbLflkzV6T+hIhJw==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Core": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Utils": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Core": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Utils": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"MonoModReorg.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "i/F1vekXLt7jHGWqM05naWIsp5cQ5L3tCP4efcpAT3O/lrtPL6nmL7/9u+FV4Ip/jp5HNKqMHR67CdMWNh9aOA==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "TX+vlgg2/x8rzEOqwiAy2qv61FjlJsr4u10WGTekCkulZVmmC+xxDmK+4Do9noXF/4RlgFN6sR3m9/W8KvJq3g==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"protobuf-net": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.4.7",
|
||||
"contentHash": "0+zS9IjL7DIcnJ1tz0KQ3luhS4BlmvGzX04dju7ejhX3P91AZ33AMF3nL6z3Hh2bB5+JW6U/Fmo8PrmheKnm4g==",
|
||||
"resolved": "3.1.26",
|
||||
"contentHash": "iy+VROYtWZEqDvkUjS6FfzKZNpWRoVGc5h0cupGQT/37Ox0LxPblRKLnw6V0RT1MPclLo8nZp7E2M0f7PNn/Tw==",
|
||||
"dependencies": {
|
||||
"System.ServiceModel.Primitives": "4.5.3"
|
||||
"protobuf-net.Core": "3.1.26"
|
||||
}
|
||||
},
|
||||
"protobuf-net.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.26",
|
||||
"contentHash": "fuKoDWgAf5ju+ixbJoasVFhnUaT0oWUgrWh1AZ5D0Y5keKHpA93vQB5g6aQNtB4zgeQ4hGEeh0MY9bIbAUPgEw=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.0.2",
|
||||
@@ -413,21 +413,6 @@
|
||||
"resolved": "4.5.5",
|
||||
"contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
|
||||
},
|
||||
"System.Private.ServiceModel": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.1.0",
|
||||
"System.Reflection.DispatchProxy": "4.5.0",
|
||||
"System.Security.Principal.Windows": "4.5.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.DispatchProxy": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA=="
|
||||
},
|
||||
"System.Reflection.Emit": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.7.0",
|
||||
@@ -464,22 +449,6 @@
|
||||
"System.Security.Cryptography.Pkcs": "7.0.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"System.ServiceModel.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "Wc9Hgg4Cmqi416zvEgq2sW1YYCGuhwWzspDclJWlFZqY6EGhFUPZU+kVpl5z9kAgrSOQP7/Uiik+PtSQtmq+5A==",
|
||||
"dependencies": {
|
||||
"System.Private.ServiceModel": "4.5.3"
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding.CodePages": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
@@ -511,16 +480,16 @@
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"ControlzEx": "[5.0.2, )",
|
||||
"HarmonyX": "[2.10.2-prerelease, )",
|
||||
"HarmonyX": "[2.10.2-prerelease.1, )",
|
||||
"MahApps.Metro": "[2.4.9, )",
|
||||
"Microsoft.CodeAnalysis.CSharp": "[4.4.0, )",
|
||||
"Microsoft.CodeAnalysis.Common": "[4.4.0, )",
|
||||
"MonoModReorg.RuntimeDetour": "[22.11.17-prerelease.1, )",
|
||||
"MonoModReorg.RuntimeDetour": "[22.11.21-prerelease.2, )",
|
||||
"NLog": "[5.1.0, )",
|
||||
"System.ComponentModel.Annotations": "[5.0.0, )",
|
||||
"Torch.API": "[1.0.0, )",
|
||||
"Torch.SixLabors.ImageSharp": "[1.0.0-beta6, )",
|
||||
"protobuf-net": "[2.4.7, )"
|
||||
"protobuf-net": "[3.1.26, )"
|
||||
}
|
||||
},
|
||||
"torch.api": {
|
||||
@@ -548,16 +517,6 @@
|
||||
"System.CodeDom": "7.0.0"
|
||||
}
|
||||
},
|
||||
"System.Private.ServiceModel": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.1.0",
|
||||
"System.Reflection.DispatchProxy": "4.5.0",
|
||||
"System.Security.Principal.Windows": "4.5.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs": {
|
||||
"type": "Transitive",
|
||||
"resolved": "7.0.0",
|
||||
@@ -566,14 +525,6 @@
|
||||
"System.Formats.Asn1": "7.0.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding.CodePages": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
|
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
@@ -9,7 +10,7 @@ using Torch.API;
|
||||
|
||||
namespace Torch.Managers
|
||||
{
|
||||
public class FilesystemManager : Manager
|
||||
public partial class FilesystemManager : Manager
|
||||
{
|
||||
private static readonly Logger _log = LogManager.GetCurrentClassLogger();
|
||||
/// <summary>
|
||||
@@ -51,19 +52,27 @@ namespace Torch.Managers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Move the given file (if it exists) to a temporary directory that will be cleared the next time the application starts.
|
||||
/// </summary>
|
||||
public void SoftDelete(string path, string file)
|
||||
{
|
||||
string source = Path.Combine(path, file);
|
||||
var source = Path.Combine(path, file);
|
||||
if (!File.Exists(source))
|
||||
return;
|
||||
var rand = Path.GetRandomFileName();
|
||||
var dest = Path.Combine(TempDirectory, rand);
|
||||
File.Move(source, rand);
|
||||
string rsource = Path.Combine(path, rand);
|
||||
File.Move(rsource, dest);
|
||||
|
||||
var tempFilePath = Path.Combine(path, file + ".old");
|
||||
if (File.Exists(tempFilePath))
|
||||
File.Delete(tempFilePath);
|
||||
|
||||
var errorCode = Rename(source, tempFilePath);
|
||||
if (Marshal.GetExceptionForHR(errorCode) is { } exception)
|
||||
throw exception;
|
||||
}
|
||||
|
||||
[LibraryImport("msvcrt", SetLastError = true, EntryPoint = "rename")]
|
||||
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
|
||||
private static partial int Rename(
|
||||
[MarshalAs(UnmanagedType.LPWStr)]
|
||||
string oldpath,
|
||||
[MarshalAs(UnmanagedType.LPWStr)]
|
||||
string newpath);
|
||||
}
|
||||
}
|
||||
|
@@ -100,9 +100,18 @@ namespace Torch.Managers
|
||||
|
||||
_log.Debug($"Unzipping {file.FullName}");
|
||||
var targetFile = Path.Combine(extractPath, file.FullName);
|
||||
|
||||
// if its a directory
|
||||
if (Path.GetFileName(targetFile).Length == 0)
|
||||
{
|
||||
Directory.CreateDirectory(targetFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
_fsManager.SoftDelete(extractPath, file.FullName);
|
||||
file.ExtractToFile(targetFile, true);
|
||||
}
|
||||
}
|
||||
|
||||
//zip.ExtractToDirectory(extractPath); //throws exceptions sometimes?
|
||||
}
|
||||
|
@@ -1,10 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Sandbox;
|
||||
using Sandbox.Game.Entities;
|
||||
using Torch.Utils;
|
||||
@@ -69,6 +66,8 @@ namespace Torch.Patches
|
||||
}
|
||||
}
|
||||
|
||||
MyEntities.Orchestrator = new MyParallelEntityUpdateOrchestrator();
|
||||
|
||||
// static MyObjectPoolManager()
|
||||
// Render, so should be fine.
|
||||
}
|
||||
|
@@ -429,7 +429,7 @@ namespace Torch.Managers
|
||||
if (a.Version is null || b.Version is null)
|
||||
return a.Name == b.Name;
|
||||
|
||||
return a.Name == b.Name && a.Version.Major == b.Version.Major && a.Version.Minor == b.Version.Minor;
|
||||
return a.Name == b.Name && b.Version >= a.Version;
|
||||
}
|
||||
|
||||
private void InstantiatePlugin(PluginManifest manifest, IEnumerable<Assembly> assemblies)
|
||||
|
@@ -50,7 +50,7 @@ namespace Torch.Session
|
||||
{
|
||||
_overrideMods = new Dictionary<ulong, MyObjectBuilder_Checkpoint.ModItem>();
|
||||
if (Torch.Config.UgcServiceType == UGCServiceType.Steam)
|
||||
_overrideMods.Add(TorchModCore.MOD_ID, ModItemUtils.Create(TorchModCore.MOD_ID));
|
||||
_overrideMods.Add(ModCommunication.MOD_ID, ModItemUtils.Create(ModCommunication.MOD_ID));
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
@@ -13,6 +13,7 @@
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
<EnableWindowsTargeting>true</EnableWindowsTargeting>
|
||||
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
||||
<DefineConstants>TRACE;TORCH</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="$(Configuration) == 'Release'">
|
||||
@@ -23,15 +24,15 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ControlzEx" Version="5.0.2" />
|
||||
<PackageReference Include="HarmonyX" Version="2.10.2-prerelease" />
|
||||
<PackageReference Include="HarmonyX" Version="2.10.2-prerelease.1" />
|
||||
<PackageReference Include="InfoOf.Fody" Version="2.1.1" PrivateAssets="all" />
|
||||
<PackageReference Include="MahApps.Metro" Version="2.4.9" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.4.0" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.4.0" />
|
||||
<PackageReference Include="MonoModReorg.RuntimeDetour" Version="22.11.17-prerelease.1" />
|
||||
<PackageReference Include="MonoModReorg.RuntimeDetour" Version="22.11.21-prerelease.2" />
|
||||
<PackageReference Include="NLog" Version="5.1.0" />
|
||||
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" PrivateAssets="all" />
|
||||
<PackageReference Include="protobuf-net" Version="2.4.7" />
|
||||
<PackageReference Include="protobuf-net" Version="3.1.26" />
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||
<PackageReference Include="Torch.SixLabors.ImageSharp" Version="1.0.0-beta6" />
|
||||
<PackageReference Include="SpaceEngineersDedicated.ReferenceAssemblies" Version="1.201.13">
|
||||
|
@@ -240,6 +240,7 @@ namespace Torch
|
||||
|
||||
_log.Info("Services initialized");
|
||||
MySandboxGame.InitMultithreading();
|
||||
MyVRage.Platform.System.OnThreadpoolInitialized();
|
||||
// MyInitializer.InitCheckSum();
|
||||
|
||||
|
||||
@@ -309,6 +310,7 @@ namespace Torch
|
||||
_getVRagePluginList().Remove(_torch);
|
||||
|
||||
MyInitializer.InvokeAfterRun();
|
||||
MyVRage.Done();
|
||||
}
|
||||
|
||||
private void DoStart()
|
||||
|
@@ -14,11 +14,11 @@
|
||||
},
|
||||
"HarmonyX": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.10.2-prerelease, )",
|
||||
"resolved": "2.10.2-prerelease",
|
||||
"contentHash": "a9wXURpkmi5aGTHEQiNCWv9DSKugpQLgT315wC1+zcnuxy5iUqgm7y7seH9IGDsWv7I33o6sGCUcGFAECsKusw==",
|
||||
"requested": "[2.10.2-prerelease.1, )",
|
||||
"resolved": "2.10.2-prerelease.1",
|
||||
"contentHash": "5hbH0ENhQ+JV7tk63fQ2ab7MtplRHKJYH1JfIjG39rlltHNXxAcGJh05an+SQbVRV4EoP/+Qm9w9BrLc3RwRMA==",
|
||||
"dependencies": {
|
||||
"MonoModReorg.RuntimeDetour": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.RuntimeDetour": "22.11.21-prerelease.2",
|
||||
"System.Reflection.Emit": "4.7.0",
|
||||
"System.Reflection.Emit.Lightweight": "4.7.0"
|
||||
}
|
||||
@@ -67,15 +67,15 @@
|
||||
},
|
||||
"MonoModReorg.RuntimeDetour": {
|
||||
"type": "Direct",
|
||||
"requested": "[22.11.17-prerelease.1, )",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "gOFDFz88Lr/H5G6pQOejjvyq2lh63jLS8Fmajk0s3bt54BlW4v0pa+b3rI4ZPDOTmGdxAi1yZtREX20j6ewzqQ==",
|
||||
"requested": "[22.11.21-prerelease.2, )",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "Qv1h4rW03LrHwxwVuw5R6hbL8X78l8Lfnxe5tMlyVAe+AK0HnwsRzjsTwzFF57wxWUwq12NbLflkzV6T+hIhJw==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Core": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Utils": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Core": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Utils": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"NLog": {
|
||||
@@ -95,11 +95,11 @@
|
||||
},
|
||||
"protobuf-net": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.4.7, )",
|
||||
"resolved": "2.4.7",
|
||||
"contentHash": "0+zS9IjL7DIcnJ1tz0KQ3luhS4BlmvGzX04dju7ejhX3P91AZ33AMF3nL6z3Hh2bB5+JW6U/Fmo8PrmheKnm4g==",
|
||||
"requested": "[3.1.26, )",
|
||||
"resolved": "3.1.26",
|
||||
"contentHash": "iy+VROYtWZEqDvkUjS6FfzKZNpWRoVGc5h0cupGQT/37Ox0LxPblRKLnw6V0RT1MPclLo8nZp7E2M0f7PNn/Tw==",
|
||||
"dependencies": {
|
||||
"System.ServiceModel.Primitives": "4.5.3"
|
||||
"protobuf-net.Core": "3.1.26"
|
||||
}
|
||||
},
|
||||
"SpaceEngineersDedicated.ReferenceAssemblies": {
|
||||
@@ -142,11 +142,6 @@
|
||||
"resolved": "3.3.3",
|
||||
"contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ=="
|
||||
},
|
||||
"Microsoft.NETCore.Platforms": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.0",
|
||||
"contentHash": "ok+RPAtESz/9MUXeIEz6Lv5XAGQsaNmEYXMsgVALj4D7kqC8gveKWXWXbufLySR2fWrwZf8smyN5RmHu0e4BHA=="
|
||||
},
|
||||
"Microsoft.Xaml.Behaviors.Wpf": {
|
||||
"type": "Transitive",
|
||||
"resolved": "1.1.31",
|
||||
@@ -159,38 +154,43 @@
|
||||
},
|
||||
"MonoModReorg.Backports": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "MZXad6VJQgkFd5d4MqRcBI0EPhSDFlCl590L1rFKBJC2BqZR6DO2ZjAsRNtP8JyomFp+JzDJIqOIR+YgoWkhAg==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "69T6jjA5nx29jLkdqtfXKlJ8sMqIlc6czNDTomy0rbM68W0xo2JRJBgsu2mroBuqx7nvUdX+zIU6k1edS/pPbw==",
|
||||
"dependencies": {
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"MonoModReorg.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "2I3CRne3mAPW+z46/fmallENRCBD6ufa4sZnF7V5FleKFEwSxLkejZQfuvB/Jt4DaHo8b9ktly5UGpgcYpAOIQ==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "gDoxu4aAF6TeOo8rsrj5prq2X36i12ch6NeRHu/Ct0H3qoPDHuEQ6JMJN/Eiy45YrLNEN7C5+Ku4BrNX4nwVQg==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.Utils": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.Utils": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"MonoModReorg.ILHelpers": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "waeN4kdsQf2cXnXJd6SpqEfp4p+8kvcftcwijkSpq8I4fPGOagfCKNKRtDo5raRsi6PuCTK+dpljRsSOYQX6vg=="
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "JtOKHJR4DEyq3HxmdEVXIxhqNQnu1KmjGFXuEQrNHoPbzi8Yr9465VKVXdsoAF0Lm8StdyJHQ03efjv3+OlonA=="
|
||||
},
|
||||
"MonoModReorg.Utils": {
|
||||
"type": "Transitive",
|
||||
"resolved": "22.11.17-prerelease.1",
|
||||
"contentHash": "i/F1vekXLt7jHGWqM05naWIsp5cQ5L3tCP4efcpAT3O/lrtPL6nmL7/9u+FV4Ip/jp5HNKqMHR67CdMWNh9aOA==",
|
||||
"resolved": "22.11.21-prerelease.2",
|
||||
"contentHash": "TX+vlgg2/x8rzEOqwiAy2qv61FjlJsr4u10WGTekCkulZVmmC+xxDmK+4Do9noXF/4RlgFN6sR3m9/W8KvJq3g==",
|
||||
"dependencies": {
|
||||
"Mono.Cecil": "0.11.4",
|
||||
"MonoModReorg.Backports": "22.11.17-prerelease.1",
|
||||
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1"
|
||||
"MonoModReorg.Backports": "22.11.21-prerelease.2",
|
||||
"MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
|
||||
}
|
||||
},
|
||||
"protobuf-net.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.1.26",
|
||||
"contentHash": "fuKoDWgAf5ju+ixbJoasVFhnUaT0oWUgrWh1AZ5D0Y5keKHpA93vQB5g6aQNtB4zgeQ4hGEeh0MY9bIbAUPgEw=="
|
||||
},
|
||||
"SemanticVersioning": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.0.2",
|
||||
@@ -217,21 +217,6 @@
|
||||
"resolved": "4.5.5",
|
||||
"contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
|
||||
},
|
||||
"System.Private.ServiceModel": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.1.0",
|
||||
"System.Reflection.DispatchProxy": "4.5.0",
|
||||
"System.Security.Principal.Windows": "4.5.0"
|
||||
}
|
||||
},
|
||||
"System.Reflection.DispatchProxy": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA=="
|
||||
},
|
||||
"System.Reflection.Emit": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.7.0",
|
||||
@@ -252,22 +237,6 @@
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
},
|
||||
"System.Security.Principal.Windows": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.0",
|
||||
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"System.ServiceModel.Primitives": {
|
||||
"type": "Transitive",
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "Wc9Hgg4Cmqi416zvEgq2sW1YYCGuhwWzspDclJWlFZqY6EGhFUPZU+kVpl5z9kAgrSOQP7/Uiik+PtSQtmq+5A==",
|
||||
"dependencies": {
|
||||
"System.Private.ServiceModel": "4.5.3"
|
||||
}
|
||||
},
|
||||
"System.Text.Encoding.CodePages": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
|
Reference in New Issue
Block a user