Update to Techblox 2022.01.25.15.52
- Fixed compilation errors - Fixed patching errors and added missing anti-cheat patch - Added check to verify that the init data has been removed from blocks once they are placed in game - Removed block place event deduplication as it seems to be not needed anymore - Fixed async tests not properly running - Added Player.State - Attempted to fix seat entering/leaving (we can only send inputs in client code) - Fixed the weak dictionary ContainsKey returning true even if the item is no longer there
This commit is contained in:
parent
09d3c5e81c
commit
d27bcee8d5
19 changed files with 252 additions and 33 deletions
|
@ -11,11 +11,11 @@ namespace CodeGenerator
|
|||
public static void Main(string[] args)
|
||||
{
|
||||
var bcg = new BlockClassGenerator();
|
||||
bcg.Generate("Engine", null, new Dictionary<string, string>
|
||||
/*bcg.Generate("Engine", null, new Dictionary<string, string>
|
||||
{
|
||||
{ "engineOn", "On" }
|
||||
{ "engineOn", "On" } - TODO: Internal struct
|
||||
}, typeof(EngineBlockComponent), // Simulation time properties
|
||||
typeof(EngineBlockTweakableComponent), typeof(EngineBlockReadonlyComponent));
|
||||
typeof(EngineBlockTweakableComponent), typeof(EngineBlockReadonlyComponent));*/
|
||||
bcg.Generate("DampedSpring", "DAMPEDSPRING_BLOCK_GROUP", new Dictionary<string, string>
|
||||
{
|
||||
{"maxExtent", "MaxExtension"}
|
||||
|
|
|
@ -2,6 +2,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using HarmonyLib;
|
||||
using Svelto.Tasks;
|
||||
using Techblox.Anticheat.Client;
|
||||
|
||||
namespace TechbloxModdingAPI.App
|
||||
{
|
||||
|
@ -22,6 +23,7 @@ namespace TechbloxModdingAPI.App
|
|||
harmony.Patch(AccessTools.Method(type, "StopProtectedSession"), new HarmonyMethod(((AntiAnticheatDelegateBool) AntiAntiCheat).Method));
|
||||
harmony.Patch(AccessTools.Method("Techblox.Services.Eos.Anticheat.Client.EosGetPendingMessagesToSendServiceRequest:Execute"), new HarmonyMethod(((AntiAnticheatDelegateTask)AntiAntiCheatTask).Method));
|
||||
harmony.Patch(AccessTools.Method("Techblox.Anticheat.Client.Engines.ShowFeedbackDialogEngine:PollAnticheatStatus"), new HarmonyMethod(((AntiAnticheatDelegateTask)AntiAntiCheatTask).Method));
|
||||
harmony.Patch(AccessTools.Method(typeof(AnticheatClientCompositionRoot), "ClientComposeTimeRunning"), new HarmonyMethod(((Func<bool>)AntiAntiCheat).Method));
|
||||
}
|
||||
|
||||
private static bool AntiAntiCheat() => false;
|
||||
|
|
|
@ -48,8 +48,8 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
pickedBlock.pickedBlockEntityID = sourceID;
|
||||
pickedBlock.placedBlockEntityID = targetID;
|
||||
pickedBlock.placedBlockTweaksMustCopy = true;
|
||||
if (entitiesDB.Exists<DBEntityStruct>(pickedBlock.pickedBlockEntityID)
|
||||
&& entitiesDB.Exists<DBEntityStruct>(pickedBlock.placedBlockEntityID))
|
||||
if (entitiesDB.Exists<BlockTagEntityStruct>(pickedBlock.pickedBlockEntityID)
|
||||
&& entitiesDB.Exists<BlockTagEntityStruct>(pickedBlock.placedBlockEntityID))
|
||||
{
|
||||
copyFromBlock.Invoke(Patch.copyEngine, new object[] {pickedBlock.ID, pickedBlock});
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
@ -79,6 +80,10 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
|
||||
public ref T GetBlockInfo<T>(Block block) where T : unmanaged, IEntityComponent
|
||||
{
|
||||
#if DEBUG
|
||||
if (!typeof(BlockTagEntityStruct).IsAssignableFrom(typeof(T)) && block.Exists && block.InitData.Valid)
|
||||
throw new ArgumentException("The block exists but the init data has not been removed!");
|
||||
#endif
|
||||
return ref entitiesDB.QueryEntityOrDefault<T>(block);
|
||||
}
|
||||
|
||||
|
@ -111,7 +116,7 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
: uint.MaxValue;
|
||||
if (prefabAssetID == uint.MaxValue)
|
||||
{
|
||||
if (entitiesDB.QueryEntityOptional<DBEntityStruct>(block)) //The block exists
|
||||
if (entitiesDB.QueryEntityOptional<BlockTagEntityStruct>(block)) //The block exists
|
||||
throw new BlockException("Prefab asset ID not found for block " + block); //Set by the game
|
||||
return;
|
||||
}
|
||||
|
@ -136,7 +141,7 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
|
||||
public bool BlockExists(EGID blockID)
|
||||
{
|
||||
return entitiesDB.Exists<DBEntityStruct>(blockID);
|
||||
return entitiesDB.Exists<BlockTagEntityStruct>(blockID);
|
||||
}
|
||||
|
||||
public SimBody[] GetSimBodiesFromID(byte id)
|
||||
|
@ -202,10 +207,10 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
|
||||
public EGID? FindBlockEGID(uint id)
|
||||
{
|
||||
var groups = entitiesDB.FindGroups<DBEntityStruct>();
|
||||
var groups = entitiesDB.FindGroups<BlockTagEntityStruct>();
|
||||
foreach (ExclusiveGroupStruct group in groups)
|
||||
{
|
||||
if (entitiesDB.Exists<DBEntityStruct>(id, group))
|
||||
if (entitiesDB.Exists<BlockTagEntityStruct>(id, group))
|
||||
return new EGID(id, group);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,18 +26,13 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
public string Name { get; } = "TechbloxModdingAPIBlockEventsEngine";
|
||||
public bool isRemovable { get; } = false;
|
||||
|
||||
private bool shouldAddRemove;
|
||||
public void Add(ref BlockTagEntityStruct entityComponent, EGID egid)
|
||||
{
|
||||
if (!(shouldAddRemove = !shouldAddRemove))
|
||||
return;
|
||||
Placed.Invoke(this, new BlockPlacedRemovedEventArgs {ID = egid});
|
||||
}
|
||||
|
||||
public void Remove(ref BlockTagEntityStruct entityComponent, EGID egid)
|
||||
{
|
||||
if (!(shouldAddRemove = !shouldAddRemove))
|
||||
return;
|
||||
Removed.Invoke(this, new BlockPlacedRemovedEventArgs {ID = egid});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,6 @@ namespace TechbloxModdingAPI.Blocks.Engines
|
|||
//RobocraftX.CR.MachineEditing.PlaceSingleBlockEngine
|
||||
DBEntityStruct dbEntity = new DBEntityStruct {DBID = block};
|
||||
|
||||
//TODO: Test
|
||||
EntityInitializer structInitializer = _blockEntityFactory.Build(CommonExclusiveGroups.blockIDGeneratorClient.Next(), block); //The ghost block index is only used for triggers
|
||||
uint prefabAssetID = structInitializer.Has<PrefabAssetIDComponent>()
|
||||
? structInitializer.Get<PrefabAssetIDComponent>().prefabAssetID
|
||||
|
|
|
@ -62,6 +62,13 @@ namespace TechbloxModdingAPI
|
|||
var id = initializer(this);
|
||||
if (!dict.ContainsKey(id)) // Multiple instances may be created
|
||||
dict.Add(id, this);
|
||||
else
|
||||
{
|
||||
Logging.MetaDebugLog($"An object of this type and ID is already stored: {GetType()} - {id}");
|
||||
Logging.MetaDebugLog(this);
|
||||
Logging.MetaDebugLog(dict[id]);
|
||||
}
|
||||
|
||||
Id = id;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace TechbloxModdingAPI.Engines
|
|||
/// <summary>
|
||||
/// Engine interface to handle ModEventEntityStruct events emitted by IEventEmitterEngines.
|
||||
/// </summary>
|
||||
public interface IReactionaryEngine<T> : IApiEngine, IReactOnAddAndRemove<T>, IReactOnAddAndRemove where T : unmanaged, IEntityComponent
|
||||
public interface IReactionaryEngine<T> : IApiEngine, IReactOnAddAndRemove<T> where T : unmanaged, IEntityComponent
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace TechbloxModdingAPI.Input
|
|||
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return AccessTools.Method("RobocraftX.Multiplayer.Input.NetworkInputRecorderEngine:RecordDeterministicInput");
|
||||
return AccessTools.Method("RobocraftX.Multiplayer.Input.DeterministicInputRecorderEngine:RecordDeterministicInput");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@ using HarmonyLib;
|
|||
|
||||
namespace TechbloxModdingAPI.Persistence
|
||||
{
|
||||
[HarmonyPatch(typeof(SaveAndLoadCompositionRoot), "Compose")]
|
||||
[HarmonyPatch(typeof(SaveAndLoadCompositionRoot), "ServerCompose")]
|
||||
class SaveAndLoadCompositionRootPatch
|
||||
{
|
||||
public static EnginesRoot currentEnginesRoot;
|
||||
|
|
|
@ -71,7 +71,7 @@ namespace TechbloxModdingAPI
|
|||
get
|
||||
{
|
||||
if (localPlayer == null || localPlayer.Id != playerEngine.GetLocalPlayer())
|
||||
localPlayer = new Player(PlayerType.Local);
|
||||
localPlayer = GetInstance(playerEngine.GetLocalPlayer());
|
||||
return localPlayer;
|
||||
}
|
||||
}
|
||||
|
@ -363,6 +363,15 @@ namespace TechbloxModdingAPI
|
|||
public PlayerBuildingMode BuildingMode => (PlayerBuildingMode)Math.Log((double)playerEngine
|
||||
.GetCharacterStruct<TimeStoppedModeComponent>(Id).Get().timeStoppedContext, 2); // It's a bit field in game now
|
||||
|
||||
public PlayerState State =>
|
||||
playerEngine.GetCharacterStruct<CharacterTagEntityStruct>(Id).Get().ID.groupID switch
|
||||
{
|
||||
var group when group == CharacterExclusiveGroups.MachineSpawningGroup => PlayerState.HoldingMachine,
|
||||
var group when group == CharacterExclusiveGroups.OnFootGroup => PlayerState.OnFoot,
|
||||
var group when group == CharacterExclusiveGroups.InPilotSeatGroup => PlayerState.InSeat,
|
||||
_ => throw new ArgumentOutOfRangeException("", "Unknown player state")
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Whether the player is sprinting.
|
||||
/// </summary>
|
||||
|
|
|
@ -9,16 +9,14 @@ using RobocraftX.CR.MachineEditing.BoxSelect;
|
|||
using RobocraftX.Physics;
|
||||
using RobocraftX.Blocks.Ghost;
|
||||
using Gamecraft.GUI.HUDFeedbackBlocks;
|
||||
using RobocraftX.Blocks;
|
||||
using RobocraftX.Multiplayer;
|
||||
using RobocraftX.PilotSeat;
|
||||
using RobocraftX.SimulationModeState;
|
||||
using Svelto.ECS;
|
||||
using Techblox.Camera;
|
||||
using Unity.Mathematics;
|
||||
using Svelto.ECS.DataStructures;
|
||||
using Svelto.ECS.EntityStructs;
|
||||
using Techblox.BuildingDrone;
|
||||
using Techblox.Character;
|
||||
|
||||
using TechbloxModdingAPI.Engines;
|
||||
using TechbloxModdingAPI.Input;
|
||||
|
@ -209,9 +207,9 @@ namespace TechbloxModdingAPI.Players
|
|||
{
|
||||
if (!TimeRunningModeUtil.IsTimeRunningMode(entitiesDB))
|
||||
return;
|
||||
PilotSeatGroupUtils.SwapTagTo<OCCUPIED_TAG>(Functions, seatId);
|
||||
/*PilotSeatGroupUtils.SwapTagTo<OCCUPIED_TAG>(Functions, seatId);
|
||||
var opt = GetCharacterStruct<CharacterPilotSeatEntityStruct>(playerId, out var group);
|
||||
if (!opt) return;
|
||||
if (!opt) return; - TODO: This is server code and mods run in client code atm. We can only send inputs even in singleplayer as it is.
|
||||
ref CharacterPilotSeatEntityStruct charSeat = ref opt.Get();
|
||||
var charId = new EGID(playerId, group);
|
||||
charSeat.pilotSeatEntity = entitiesDB.GetEntityReference(seatId);
|
||||
|
@ -221,7 +219,7 @@ namespace TechbloxModdingAPI.Players
|
|||
ref var seat = ref entitiesDB.QueryEntity<PilotSeatEntityStruct>(seatId);
|
||||
seat.occupyingCharacter = entitiesDB.GetEntityReference(charId);
|
||||
charSeat.followCam = entitiesDB.QueryEntity<SeatFollowCamComponent>(seatId).followCam;
|
||||
Functions.SwapEntityGroup<CharacterEntityDescriptor>(charId, CharacterExclusiveGroups.InPilotSeatGroup);
|
||||
Functions.SwapEntityGroup<CharacterEntityDescriptor>(charId, CharacterExclusiveGroups.InPilotSeatGroup);*/
|
||||
}
|
||||
|
||||
public void ExitSeat(uint playerId)
|
||||
|
@ -242,6 +240,11 @@ namespace TechbloxModdingAPI.Players
|
|||
EGID egid = new EGID(playerId, CharacterExclusiveGroups.MachineSpawningGroup);
|
||||
if (!entitiesDB.Exists<CharacterTagEntityStruct>(egid))
|
||||
return false;
|
||||
if (entitiesDB.QueryEntity<CharacterMachineSpawningValidityComponent>(egid).isMachinePlacementInvalid)
|
||||
{
|
||||
Logging.MetaDebugLog("Machine placement invalid");
|
||||
return false;
|
||||
}
|
||||
//Functions.SwapEntityGroup<CharacterEntityDescriptor>(egid, CharacterExclusiveGroups.OnFootGroup);
|
||||
FakeInput.ActionInput(playerId, primary: true);
|
||||
return true;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using RobocraftX.Character;
|
||||
using RobocraftX.Character.Movement;
|
||||
using RobocraftX.Common.Input;
|
||||
|
|
9
TechbloxModdingAPI/Players/PlayerState.cs
Normal file
9
TechbloxModdingAPI/Players/PlayerState.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
namespace TechbloxModdingAPI.Players
|
||||
{
|
||||
public enum PlayerState
|
||||
{
|
||||
HoldingMachine,
|
||||
OnFoot,
|
||||
InSeat
|
||||
}
|
||||
}
|
|
@ -29,7 +29,7 @@ namespace TechbloxModdingAPI.Players
|
|||
[APITestCase(TestType.EditMode)]
|
||||
public static void PositionTest()
|
||||
{
|
||||
Player p = new Player(PlayerType.Local);
|
||||
Player p = Player.LocalPlayer;
|
||||
if (!Assert.Errorless(() => { p.Teleport(0, 0, 0, relative: false); }, "Player.Teleport(origin) errored: ", "Player teleported to origin successfully.")) return;
|
||||
if (!Assert.CloseTo(p.Position, float3.zero, "Player is not close to origin despite being teleported there.", "Player.Position is at origin.")) return;
|
||||
if (!Assert.Errorless(() => { p.Position = float3.zero + 1; }, "Player.Position = origin+1 errored: ", "Player moved to origin+1.")) return;
|
||||
|
@ -41,7 +41,7 @@ namespace TechbloxModdingAPI.Players
|
|||
{
|
||||
Player.LocalPlayer.SeatEntered += Assert.CallsBack<PlayerSeatEventArgs>("SeatEntered");
|
||||
Player.LocalPlayer.SeatExited += Assert.CallsBack<PlayerSeatEventArgs>("SeatExited");
|
||||
Block.PlaceNew(BlockIDs.DriverSeat, -1f);
|
||||
Block.PlaceNew(BlockIDs.DriverSeat, Player.LocalPlayer.Position);
|
||||
}
|
||||
|
||||
[APITestCase(TestType.SimulationMode)]
|
||||
|
@ -68,11 +68,21 @@ namespace TechbloxModdingAPI.Players
|
|||
}
|
||||
|
||||
if (seats[0] is Seat seat)
|
||||
{ //TODO: Actually, the problem is likely that the player ID is different in build and sim
|
||||
Assert.Errorless(() => Player.LocalPlayer.EnterSeat(seat), "Failed to enter seat.",
|
||||
"Entered seat successfully.");
|
||||
while (Player.LocalPlayer.State != PlayerState.InSeat)
|
||||
{
|
||||
bool cont = false;
|
||||
Client.Instance.PromptUser(new SingleChoicePrompt("Testing", $"Enter the seat at {seat.Position} pls", "OK", () => cont = true));
|
||||
while (!cont)
|
||||
yield return Yield.It;
|
||||
yield return new WaitForSecondsEnumerator(5f).Continue();
|
||||
}
|
||||
}
|
||||
else
|
||||
Assert.Fail("Found a seat that is not a seat!");
|
||||
yield return new WaitForSecondsEnumerator(1).Continue();
|
||||
yield return new WaitForSecondsEnumerator(5).Continue();
|
||||
Assert.Errorless(() => Player.LocalPlayer.ExitSeat(), "Failed to exit seat.",
|
||||
"Exited seat successfully.");
|
||||
}
|
||||
|
|
|
@ -48,6 +48,14 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AWSSDK.Core">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\AWSSDK.Core.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\AWSSDK.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AWSSDK.GameLift">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\AWSSDK.GameLift.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\AWSSDK.GameLift.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BevelEffect">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\BevelEffect.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\BevelEffect.dll</HintPath>
|
||||
|
@ -88,6 +96,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\FMODUnityResonance.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\FMODUnityResonance.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="FMODUnityWrapperClient">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\FMODUnityWrapperClient.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\FMODUnityWrapperClient.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="FullGame">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\FullGame.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\FullGame.dll</HintPath>
|
||||
|
@ -312,6 +324,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Gamecraft.Wires.Mockup.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GameLiftServerSDKNet45">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\GameLiftServerSDKNet45.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\GameLiftServerSDKNet45.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GameState">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\GameState.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\GameState.dll</HintPath>
|
||||
|
@ -320,6 +336,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\GhostShark.Outline.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\GhostShark.Outline.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Protobuf">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Google.Protobuf.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Google.Protobuf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GPUInstancer.CrowdAnimations">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\GPUInstancer.CrowdAnimations.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\GPUInstancer.CrowdAnimations.dll</HintPath>
|
||||
|
@ -340,10 +360,22 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\JWT.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\JWT.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="LiteNetLib">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\LiteNetLib.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\LiteNetLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\log4net.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="LZ4">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\LZ4.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\LZ4.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Monobehaviours">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Monobehaviours.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Monobehaviours.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\mscorlib.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\mscorlib.dll</HintPath>
|
||||
|
@ -376,6 +408,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Rewired_Windows.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Rewired_Windows.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RichFX">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RichFX.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RichFX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RobocraftECS">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftECS.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftECS.dll</HintPath>
|
||||
|
@ -404,6 +440,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.Building.Jobs.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.Building.Jobs.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RobocraftX.Character.Audio">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.Character.Audio.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.Character.Audio.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RobocraftX.Character">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.Character.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.Character.dll</HintPath>
|
||||
|
@ -480,6 +520,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.MainGameMock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.MainGameMock.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RobocraftX.MainSimulation.Audio">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.MainSimulation.Audio.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.MainSimulation.Audio.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="RobocraftX.MainSimulation">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\RobocraftX.MainSimulation.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocraftX.MainSimulation.dll</HintPath>
|
||||
|
@ -564,6 +608,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\RobocratX.SimulationMockCompositionRoot.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\RobocratX.SimulationMockCompositionRoot.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ShaderVariantsGenerationTool">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\ShaderVariantsGenerationTool.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\ShaderVariantsGenerationTool.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SpecializedDescriptors">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\SpecializedDescriptors.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\SpecializedDescriptors.dll</HintPath>
|
||||
|
@ -592,6 +640,22 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Svelto.Tasks.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Svelto.Tasks.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.AdditionalParts">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.AdditionalParts.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.AdditionalParts.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Anticheat.Client">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Anticheat.Client.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Anticheat.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Anticheat.Common">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Anticheat.Common.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Anticheat.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Anticheat.Server">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Anticheat.Server.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Anticheat.Server.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.AtmosphereBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.AtmosphereBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.AtmosphereBlock.dll</HintPath>
|
||||
|
@ -604,6 +668,18 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Backend.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Backend.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.BitBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.BitBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.BitBlock.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.BlockColours">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.BlockColours.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.BlockColours.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.BlockLabels">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.BlockLabels.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.BlockLabels.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Blocks.LightBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Blocks.LightBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Blocks.LightBlock.dll</HintPath>
|
||||
|
@ -620,10 +696,18 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Camera.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Camera.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Common.Audio">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Common.Audio.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Common.Audio.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.ContextSensitiveTextHint">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.ContextSensitiveTextHint.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.ContextSensitiveTextHint.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.ECSResourceManagers">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.ECSResourceManagers.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.ECSResourceManagers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.EngineBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.EngineBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.EngineBlock.dll</HintPath>
|
||||
|
@ -660,6 +744,14 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.BuildRules.MockUps.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.BuildRules.MockUps.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.Commands">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.Commands.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.Commands.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.Controls">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.Controls.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.Controls.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.dll</HintPath>
|
||||
|
@ -692,6 +784,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.Inventory.Materials.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.Inventory.Materials.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.LoadingBar">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.LoadingBar.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.LoadingBar.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.Login">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.Login.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.Login.dll</HintPath>
|
||||
|
@ -712,6 +808,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.Notifications.MockUps.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.Notifications.MockUps.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.ScreenCanvas">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.ScreenCanvas.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.ScreenCanvas.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.TabsBar.Landscapes">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.TabsBar.Landscapes.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.TabsBar.Landscapes.dll</HintPath>
|
||||
|
@ -720,10 +820,38 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.TabsBar.Materials.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.TabsBar.Materials.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.UsernameDisplay">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.UsernameDisplay.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.UsernameDisplay.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.GUI.WorldCanvas">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.GUI.WorldCanvas.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.GUI.WorldCanvas.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.InputCapture">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.InputCapture.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.InputCapture.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.MachineSimulationPreprocessing">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.MachineSimulationPreprocessing.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.MachineSimulationPreprocessing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.MachineSpawning">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.MachineSpawning.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.MachineSpawning.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Matchmaking">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Matchmaking.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Matchmaking.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Multiplayer.UsernameMessages">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Multiplayer.UsernameMessages.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Multiplayer.UsernameMessages.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.PlayUX">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.PlayUX.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.PlayUX.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Pointer">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Pointer.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Pointer.dll</HintPath>
|
||||
|
@ -756,22 +884,66 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.SaveGamesConversion.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.SaveGamesConversion.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Server">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Server.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Server.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Anticheat.Client">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Anticheat.Client.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Anticheat.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Anticheat.Server">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Anticheat.Server.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Anticheat.Server.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Eos.Common">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Eos.Common.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Eos.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Eos">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Eos.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Eos.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Eos.Server">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Eos.Server.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Eos.Server.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.GameDetails">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.GameDetails.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.GameDetails.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.LocalPreferences">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.LocalPreferences.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.LocalPreferences.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Matchmaking">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Matchmaking.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Matchmaking.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.Services.Storage">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.Services.Storage.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.Services.Storage.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.SignalHandling.Audio">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.SignalHandling.Audio.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.SignalHandling.Audio.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.SignalHandling.Common">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.SignalHandling.Common.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.SignalHandling.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.SwitchAnimation">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.SwitchAnimation.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.SwitchAnimation.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.TextBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.TextBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.TextBlock.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.TimerBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.TimerBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.TimerBlock.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Techblox.WheelRigBlock">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Techblox.WheelRigBlock.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Techblox.WheelRigBlock.dll</HintPath>
|
||||
|
@ -1228,6 +1400,10 @@
|
|||
<HintPath>..\ref\Techblox_Data\Managed\VisualProfiler.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\VisualProfiler.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="websocket-sharp">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\websocket-sharp.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\websocket-sharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Whinarn.UnityMeshSimplifier.Runtime">
|
||||
<HintPath>..\ref\Techblox_Data\Managed\Whinarn.UnityMeshSimplifier.Runtime.dll</HintPath>
|
||||
<HintPath>..\..\ref\Techblox_Data\Managed\Whinarn.UnityMeshSimplifier.Runtime.dll</HintPath>
|
||||
|
|
|
@ -200,7 +200,8 @@ namespace TechbloxModdingAPI.Tests
|
|||
cont = false;
|
||||
}
|
||||
|
||||
yield return Yield.It;
|
||||
if (cont)
|
||||
yield return enumerator.Current;
|
||||
} while (cont);
|
||||
}
|
||||
|
||||
|
|
|
@ -122,11 +122,11 @@ namespace TechbloxModdingAPI.Utility
|
|||
}
|
||||
}
|
||||
|
||||
public static ECSResourceManagers _managers
|
||||
public static ECSMainGameResourceManagers _managers
|
||||
{
|
||||
get
|
||||
{
|
||||
return (ECSResourceManagers)fgcr?.Field("_managers").GetValue();
|
||||
return (ECSMainGameResourceManagers)fgcr?.Field("_gameManagers").GetValue();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ namespace TechbloxModdingAPI.Utility
|
|||
|
||||
public bool ContainsKey(TKey key)
|
||||
{
|
||||
return _dictionary.ContainsKey(key);
|
||||
return TryGetValue(key, out _);
|
||||
}
|
||||
|
||||
public void Add(TKey key, TValue value)
|
||||
|
@ -70,7 +70,9 @@ namespace TechbloxModdingAPI.Utility
|
|||
public bool TryGetValue(TKey key, out TValue value)
|
||||
{
|
||||
value = null;
|
||||
return _dictionary.TryGetValue(key, out var reference) && reference.TryGetTarget(out value);
|
||||
bool ret = _dictionary.TryGetValue(key, out var reference) && reference.TryGetTarget(out value);
|
||||
if (!ret) _dictionary.Remove(key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public TValue this[TKey key]
|
||||
|
|
Loading…
Reference in a new issue