mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 18:40:03 +00:00
progress
This commit is contained in:
parent
15eb5fa804
commit
0c897ad3bd
@ -93,5 +93,8 @@
|
|||||||
public static string QSBExitSatelliteCamera = "QSBExitSatelliteCamera";
|
public static string QSBExitSatelliteCamera = "QSBExitSatelliteCamera";
|
||||||
public static string QSBSatelliteSnapshot = "QSBSatelliteSnapshot";
|
public static string QSBSatelliteSnapshot = "QSBSatelliteSnapshot";
|
||||||
public static string QSBAnglerChangeState = "QSBAnglerChangeState";
|
public static string QSBAnglerChangeState = "QSBAnglerChangeState";
|
||||||
|
public static string QSBMeteorLaunch = "QSBMeteorLaunch";
|
||||||
|
public static string QSBMeteorImpact = "QSBMeteorImpact";
|
||||||
|
public static string QSBMeteorResync = "QSBMeteorResync";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,6 +135,10 @@
|
|||||||
LaunchProbe,
|
LaunchProbe,
|
||||||
PlayerLaunchProbe,
|
PlayerLaunchProbe,
|
||||||
|
|
||||||
AnglerChangeState
|
AnglerChangeState,
|
||||||
|
|
||||||
|
MeteorLaunch,
|
||||||
|
MeteorImpact,
|
||||||
|
MeteorResync
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ using QSB.Anglerfish.Events;
|
|||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.Utility.Events;
|
using QSB.Utility.Events;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using QSB.MeteorSync.Events;
|
||||||
|
|
||||||
namespace QSB.Events
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
@ -91,6 +92,9 @@ namespace QSB.Events
|
|||||||
new StartStatueEvent(),
|
new StartStatueEvent(),
|
||||||
new CampfireStateEvent(),
|
new CampfireStateEvent(),
|
||||||
new AnglerChangeStateEvent(),
|
new AnglerChangeStateEvent(),
|
||||||
|
new MeteorLaunchEvent(),
|
||||||
|
new MeteorImpactEvent(),
|
||||||
|
new MeteorResyncEvent(),
|
||||||
// Conversation/dialogue/exploration
|
// Conversation/dialogue/exploration
|
||||||
new ConversationEvent(),
|
new ConversationEvent(),
|
||||||
new ConversationStartEndEvent(),
|
new ConversationStartEndEvent(),
|
||||||
|
34
QSB/MeteorSync/Events/MeteorImpactEvent.cs
Normal file
34
QSB/MeteorSync/Events/MeteorImpactEvent.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using QSB.Events;
|
||||||
|
using QSB.MeteorSync.WorldObjects;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
using QSB.WorldSync.Events;
|
||||||
|
using EventType = QSB.Events.EventType;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.Events
|
||||||
|
{
|
||||||
|
public class MeteorImpactEvent : QSBEvent<WorldObjectMessage>
|
||||||
|
{
|
||||||
|
public override EventType Type => EventType.MeteorImpact;
|
||||||
|
|
||||||
|
public override void SetupListener()
|
||||||
|
=> GlobalMessenger<QSBMeteor>.AddListener(EventNames.QSBMeteorImpact, Handler);
|
||||||
|
|
||||||
|
public override void CloseListener()
|
||||||
|
=> GlobalMessenger<QSBMeteor>.RemoveListener(EventNames.QSBMeteorImpact, Handler);
|
||||||
|
|
||||||
|
private void Handler(QSBMeteor qsbMeteor) => SendEvent(CreateMessage(qsbMeteor));
|
||||||
|
|
||||||
|
private WorldObjectMessage CreateMessage(QSBMeteor qsbMeteor) => new WorldObjectMessage
|
||||||
|
{
|
||||||
|
ObjectId = qsbMeteor.ObjectId
|
||||||
|
// todo where
|
||||||
|
// todo velocity
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void OnReceiveRemote(bool isHost, WorldObjectMessage message)
|
||||||
|
{
|
||||||
|
var qsbMeteor = QSBWorldSync.GetWorldFromId<QSBMeteor>(message.ObjectId);
|
||||||
|
// todo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
QSB/MeteorSync/Events/MeteorLaunchEvent.cs
Normal file
33
QSB/MeteorSync/Events/MeteorLaunchEvent.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using QSB.Events;
|
||||||
|
using QSB.MeteorSync.WorldObjects;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
using QSB.WorldSync.Events;
|
||||||
|
using EventType = QSB.Events.EventType;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.Events
|
||||||
|
{
|
||||||
|
public class MeteorLaunchEvent : QSBEvent<BoolWorldObjectMessage>
|
||||||
|
{
|
||||||
|
public override EventType Type => EventType.MeteorLaunch;
|
||||||
|
|
||||||
|
public override void SetupListener()
|
||||||
|
=> GlobalMessenger<int, bool>.AddListener(EventNames.QSBMeteorLaunch, Handler);
|
||||||
|
|
||||||
|
public override void CloseListener()
|
||||||
|
=> GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBMeteorLaunch, Handler);
|
||||||
|
|
||||||
|
private void Handler(int id, bool preLaunch) => SendEvent(CreateMessage(id, preLaunch));
|
||||||
|
|
||||||
|
private BoolWorldObjectMessage CreateMessage(int id, bool preLaunch) => new BoolWorldObjectMessage
|
||||||
|
{
|
||||||
|
ObjectId = id,
|
||||||
|
State = preLaunch
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void OnReceiveRemote(bool isHost, BoolWorldObjectMessage message)
|
||||||
|
{
|
||||||
|
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromId<QSBMeteorLauncher>(message.ObjectId);
|
||||||
|
qsbMeteorLauncher.LaunchMeteor(message.State);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
QSB/MeteorSync/Events/MeteorResyncEvent.cs
Normal file
35
QSB/MeteorSync/Events/MeteorResyncEvent.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using QSB.Events;
|
||||||
|
using QSB.MeteorSync.WorldObjects;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
using QSB.WorldSync.Events;
|
||||||
|
using EventType = QSB.Events.EventType;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.Events
|
||||||
|
{
|
||||||
|
/// called when we request a resync on client join
|
||||||
|
public class MeteorResyncEvent : QSBEvent<WorldObjectMessage>
|
||||||
|
{
|
||||||
|
public override EventType Type => EventType.MeteorResync;
|
||||||
|
|
||||||
|
public override void SetupListener()
|
||||||
|
=> GlobalMessenger<QSBMeteor>.AddListener(EventNames.QSBMeteorResync, Handler);
|
||||||
|
|
||||||
|
public override void CloseListener()
|
||||||
|
=> GlobalMessenger<QSBMeteor>.RemoveListener(EventNames.QSBMeteorResync, Handler);
|
||||||
|
|
||||||
|
private void Handler(QSBMeteor qsbMeteor) => SendEvent(CreateMessage(qsbMeteor));
|
||||||
|
|
||||||
|
private WorldObjectMessage CreateMessage(QSBMeteor qsbMeteor) => new WorldObjectMessage
|
||||||
|
{
|
||||||
|
ObjectId = qsbMeteor.ObjectId
|
||||||
|
// todo is suspended
|
||||||
|
// todo fragment states
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void OnReceiveRemote(bool isHost, WorldObjectMessage message)
|
||||||
|
{
|
||||||
|
var qsbMeteor = QSBWorldSync.GetWorldFromId<QSBMeteor>(message.ObjectId);
|
||||||
|
// todo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@ namespace QSB.MeteorSync
|
|||||||
|
|
||||||
protected override void RebuildWorldObjects(OWScene scene)
|
protected override void RebuildWorldObjects(OWScene scene)
|
||||||
{
|
{
|
||||||
|
QSBWorldSync.Init<QSBMeteorLauncher, MeteorLauncher>();
|
||||||
// wait a bit because meteors get created late
|
// wait a bit because meteors get created late
|
||||||
QSBCore.UnityEvents.FireInNUpdates(() =>
|
QSBCore.UnityEvents.FireInNUpdates(() =>
|
||||||
{
|
{
|
||||||
|
60
QSB/MeteorSync/Patches/MeteorClientPatches.cs
Normal file
60
QSB/MeteorSync/Patches/MeteorClientPatches.cs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
using QSB.Patches;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.Patches
|
||||||
|
{
|
||||||
|
public class MeteorClientPatches : QSBPatch
|
||||||
|
{
|
||||||
|
public override QSBPatchTypes Type => QSBPatchTypes.OnNonServerClientConnect;
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
[HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.FixedUpdate))]
|
||||||
|
public static bool FixedUpdate(MeteorLauncher __instance)
|
||||||
|
{
|
||||||
|
if (__instance._launchedMeteors != null)
|
||||||
|
{
|
||||||
|
for (var i = __instance._launchedMeteors.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (__instance._launchedMeteors[i] == null)
|
||||||
|
{
|
||||||
|
__instance._launchedMeteors.QuickRemoveAt(i);
|
||||||
|
}
|
||||||
|
else if (__instance._launchedMeteors[i].isSuspended)
|
||||||
|
{
|
||||||
|
__instance._meteorPool.Add(__instance._launchedMeteors[i]);
|
||||||
|
__instance._launchedMeteors.QuickRemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (__instance._launchedDynamicMeteors != null)
|
||||||
|
{
|
||||||
|
for (var j = __instance._launchedDynamicMeteors.Count - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
if (__instance._launchedDynamicMeteors[j] == null)
|
||||||
|
{
|
||||||
|
__instance._launchedDynamicMeteors.QuickRemoveAt(j);
|
||||||
|
}
|
||||||
|
else if (__instance._launchedDynamicMeteors[j].isSuspended)
|
||||||
|
{
|
||||||
|
__instance._dynamicMeteorPool.Add(__instance._launchedDynamicMeteors[j]);
|
||||||
|
__instance._launchedDynamicMeteors.QuickRemoveAt(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(MeteorController), nameof(MeteorController.Launch))]
|
||||||
|
public static void Launch(MeteorController __instance)
|
||||||
|
{
|
||||||
|
foreach (var owCollider in __instance._owColliders)
|
||||||
|
{
|
||||||
|
owCollider.SetActivation(false);
|
||||||
|
}
|
||||||
|
__instance._owRigidbody.MakeKinematic();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
using QSB.Patches;
|
|
||||||
|
|
||||||
namespace QSB.MeteorSync.Patches
|
|
||||||
{
|
|
||||||
public class MeteorPatches : QSBPatch
|
|
||||||
{
|
|
||||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
|
||||||
|
|
||||||
// todo
|
|
||||||
}
|
|
||||||
}
|
|
89
QSB/MeteorSync/Patches/MeteorServerPatches.cs
Normal file
89
QSB/MeteorSync/Patches/MeteorServerPatches.cs
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
using QSB.Events;
|
||||||
|
using QSB.MeteorSync.WorldObjects;
|
||||||
|
using QSB.Patches;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.Patches
|
||||||
|
{
|
||||||
|
public class MeteorServerPatches : QSBPatch
|
||||||
|
{
|
||||||
|
public override QSBPatchTypes Type => QSBPatchTypes.OnServerClientConnect;
|
||||||
|
|
||||||
|
|
||||||
|
[HarmonyPrefix]
|
||||||
|
[HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.FixedUpdate))]
|
||||||
|
public static bool LaunchMeteor(MeteorLauncher __instance)
|
||||||
|
{
|
||||||
|
if (__instance._launchedMeteors != null)
|
||||||
|
{
|
||||||
|
for (var i = __instance._launchedMeteors.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (__instance._launchedMeteors[i] == null)
|
||||||
|
{
|
||||||
|
__instance._launchedMeteors.QuickRemoveAt(i);
|
||||||
|
}
|
||||||
|
else if (__instance._launchedMeteors[i].isSuspended)
|
||||||
|
{
|
||||||
|
__instance._meteorPool.Add(__instance._launchedMeteors[i]);
|
||||||
|
__instance._launchedMeteors.QuickRemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (__instance._launchedDynamicMeteors != null)
|
||||||
|
{
|
||||||
|
for (var j = __instance._launchedDynamicMeteors.Count - 1; j >= 0; j--)
|
||||||
|
{
|
||||||
|
if (__instance._launchedDynamicMeteors[j] == null)
|
||||||
|
{
|
||||||
|
__instance._launchedDynamicMeteors.QuickRemoveAt(j);
|
||||||
|
}
|
||||||
|
else if (__instance._launchedDynamicMeteors[j].isSuspended)
|
||||||
|
{
|
||||||
|
__instance._dynamicMeteorPool.Add(__instance._launchedDynamicMeteors[j]);
|
||||||
|
__instance._launchedDynamicMeteors.QuickRemoveAt(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (__instance._initialized && Time.time > __instance._lastLaunchTime + __instance._launchDelay)
|
||||||
|
{
|
||||||
|
var qsbMeteorLauncher = QSBWorldSync.GetWorldFromUnity<QSBMeteorLauncher>(__instance);
|
||||||
|
if (!__instance._areParticlesPlaying)
|
||||||
|
{
|
||||||
|
__instance._areParticlesPlaying = true;
|
||||||
|
foreach (var particleSystem in __instance._launchParticles)
|
||||||
|
{
|
||||||
|
particleSystem.Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher.ObjectId, true);
|
||||||
|
}
|
||||||
|
if (Time.time > __instance._lastLaunchTime + __instance._launchDelay + 2.3f)
|
||||||
|
{
|
||||||
|
__instance.LaunchMeteor();
|
||||||
|
__instance._lastLaunchTime = Time.time;
|
||||||
|
__instance._launchDelay = Random.Range(__instance._minInterval, __instance._maxInterval);
|
||||||
|
__instance._areParticlesPlaying = false;
|
||||||
|
foreach (var particleSystem in __instance._launchParticles)
|
||||||
|
{
|
||||||
|
particleSystem.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSBEventManager.FireEvent(EventNames.QSBMeteorLaunch, qsbMeteorLauncher.ObjectId, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[HarmonyPostfix]
|
||||||
|
[HarmonyPatch(typeof(MeteorController), nameof(MeteorController.Impact))]
|
||||||
|
public static void Impact(MeteorController __instance)
|
||||||
|
{
|
||||||
|
var qsbMeteor = QSBWorldSync.GetWorldFromUnity<QSBMeteor>(__instance);
|
||||||
|
QSBEventManager.FireEvent(EventNames.QSBMeteorImpact, qsbMeteor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -45,5 +45,12 @@ namespace QSB.MeteorSync.WorldObjects
|
|||||||
|
|
||||||
MeteorManager.AllReady = false;
|
MeteorManager.AllReady = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void Impact()
|
||||||
|
{
|
||||||
|
// todo
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
33
QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs
Normal file
33
QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using QSB.WorldSync;
|
||||||
|
|
||||||
|
namespace QSB.MeteorSync.WorldObjects
|
||||||
|
{
|
||||||
|
public class QSBMeteorLauncher : WorldObject<MeteorLauncher>
|
||||||
|
{
|
||||||
|
public override void Init(MeteorLauncher attachedObject, int id)
|
||||||
|
{
|
||||||
|
ObjectId = id;
|
||||||
|
AttachedObject = attachedObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void LaunchMeteor(bool preLaunch)
|
||||||
|
{
|
||||||
|
if (preLaunch)
|
||||||
|
{
|
||||||
|
foreach (var particleSystem in AttachedObject._launchParticles)
|
||||||
|
{
|
||||||
|
particleSystem.Play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AttachedObject.LaunchMeteor();
|
||||||
|
foreach (var particleSystem in AttachedObject._launchParticles)
|
||||||
|
{
|
||||||
|
particleSystem.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -75,7 +75,8 @@ namespace QSB.Patches
|
|||||||
new SatelliteProjectorPatches(),
|
new SatelliteProjectorPatches(),
|
||||||
new LightSensorPatches(),
|
new LightSensorPatches(),
|
||||||
new AnglerPatches(),
|
new AnglerPatches(),
|
||||||
new MeteorPatches()
|
new MeteorClientPatches(),
|
||||||
|
new MeteorServerPatches()
|
||||||
};
|
};
|
||||||
|
|
||||||
TypeToInstance = new Dictionary<QSBPatchTypes, Harmony>
|
TypeToInstance = new Dictionary<QSBPatchTypes, Harmony>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using OWML.Utils;
|
using OWML.Utils;
|
||||||
using QSB.CampfireSync.WorldObjects;
|
using QSB.CampfireSync.WorldObjects;
|
||||||
|
using QSB.MeteorSync.WorldObjects;
|
||||||
using QSB.ClientServerStateSync;
|
using QSB.ClientServerStateSync;
|
||||||
using QSB.Events;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
@ -79,6 +80,9 @@ namespace QSB.Player.Events
|
|||||||
|
|
||||||
QSBWorldSync.GetWorldObjects<QSBCampfire>().ForEach(campfire
|
QSBWorldSync.GetWorldObjects<QSBCampfire>().ForEach(campfire
|
||||||
=> QSBEventManager.FireEvent(EventNames.QSBCampfireState, campfire.ObjectId, campfire.GetState()));
|
=> QSBEventManager.FireEvent(EventNames.QSBCampfireState, campfire.ObjectId, campfire.GetState()));
|
||||||
|
|
||||||
|
QSBWorldSync.GetWorldObjects<QSBMeteor>().ForEach(meteor
|
||||||
|
=> QSBEventManager.FireEvent(EventNames.QSBMeteorResync, meteor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,10 +124,15 @@
|
|||||||
<Compile Include="Menus\IMenuAPI.cs" />
|
<Compile Include="Menus\IMenuAPI.cs" />
|
||||||
<Compile Include="Menus\MenuManager.cs" />
|
<Compile Include="Menus\MenuManager.cs" />
|
||||||
<Compile Include="Messaging\BoolMessage.cs" />
|
<Compile Include="Messaging\BoolMessage.cs" />
|
||||||
|
<Compile Include="MeteorSync\Events\MeteorImpactEvent.cs" />
|
||||||
|
<Compile Include="MeteorSync\Events\MeteorLaunchEvent.cs" />
|
||||||
|
<Compile Include="MeteorSync\Events\MeteorResyncEvent.cs" />
|
||||||
<Compile Include="MeteorSync\MeteorManager.cs" />
|
<Compile Include="MeteorSync\MeteorManager.cs" />
|
||||||
<Compile Include="MeteorSync\Patches\MeteorPatches.cs" />
|
<Compile Include="MeteorSync\Patches\MeteorClientPatches.cs" />
|
||||||
|
<Compile Include="MeteorSync\Patches\MeteorServerPatches.cs" />
|
||||||
<Compile Include="MeteorSync\TransformSync\MeteorTransformSync.cs" />
|
<Compile Include="MeteorSync\TransformSync\MeteorTransformSync.cs" />
|
||||||
<Compile Include="MeteorSync\WorldObjects\QSBMeteor.cs" />
|
<Compile Include="MeteorSync\WorldObjects\QSBMeteor.cs" />
|
||||||
|
<Compile Include="MeteorSync\WorldObjects\QSBMeteorLauncher.cs" />
|
||||||
<Compile Include="OrbSync\TransformSync\NomaiOrbTransformSync.cs" />
|
<Compile Include="OrbSync\TransformSync\NomaiOrbTransformSync.cs" />
|
||||||
<Compile Include="Player\Events\PlayerInformationEvent.cs" />
|
<Compile Include="Player\Events\PlayerInformationEvent.cs" />
|
||||||
<Compile Include="Player\Events\PlayerInformationMessage.cs" />
|
<Compile Include="Player\Events\PlayerInformationMessage.cs" />
|
||||||
@ -450,9 +455,6 @@
|
|||||||
<Version>2.0.0</Version>
|
<Version>2.0.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="MeteorSync\Events" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>md "$(OwmlDir)\Mods\$(ProjectName)"
|
<PostBuildEvent>md "$(OwmlDir)\Mods\$(ProjectName)"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user