Started making comment and documents about some of the modules. Also added Libs dlls to make sure they dnt get lost or messwith in version discrepancies

This commit is contained in:
Twirlbug 2023-06-26 23:30:39 -05:00
parent e397f15f8e
commit 6af98f1fdf
9 changed files with 3926 additions and 67 deletions

Binary file not shown.

BIN
Libs/SRML.Editor.dll Normal file

Binary file not shown.

BIN
Libs/SRML.dll Normal file

Binary file not shown.

3810
Libs/SRML.xml Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,20 @@
The following console Commands work in the pop up console
cheat money [amount]
Add or Remove the given amount from the curret money score
cheat keys [amount]
Add or Remove the given amount of keys from the current amount
cheat allgadgets
Unlocks all of the gagets in the game
cheat spawn [id] ([amount])
tp [DestinationPlayer]
Teleports the player that entered in the commant to the player entered
listplayers
Prints the list of current players to the console
sleep [Hours]
Sleep command followed by the time in in game hours to "sleep"". Fast forwards the game the alotted hours.

View file

@ -10,7 +10,7 @@ namespace SRMultiplayer.Networking
{
public class NetworkGordo : MonoBehaviour
{
public string ID { get { return Gordo.id == null ? Gordo.GetComponentInParent<GadgetSite>(true).id : Gordo.id; } }
public string ID { get { return Gordo.id == null ? Gordo.GetComponentInParent<GadgetSite>(true).id : Gordo.id; } }
public GordoEat Gordo;
public NetworkRegion Region;
@ -33,36 +33,51 @@ namespace SRMultiplayer.Networking
public void Burst()
{
//if object is in active mark the reach target
if (gameObject.activeInHierarchy)
{
StartCoroutine(ReachedTarget());
}
else
{
//if not just dismiss the gordo completely
Gordo.gameObject.SetActive(false);
Gordo.SetEatenCount(-1);
}
}
//process the gordo burst reaction
private IEnumerator ReachedTarget()
{
//start the burst and begin sounds and animations
Gordo.WillStartBurst();
Gordo.GetComponent<GordoFaceAnimator>().SetTrigger("Strain");
SECTR_AudioSystem.Play(Gordo.strainCue, Gordo.transform.position, false);
//wait for amination/sounds to finish
yield return new WaitForSeconds(2f);
SECTR_AudioSystem.Play(Gordo.burstCue, Gordo.transform.position, false);
//if the gordo has a destroy effect process it
if (Gordo.destroyFX != null)
{
//play the spawn behavior for destroy events for the gordo that is bursting
GameObject gameObject = SRBehaviour.SpawnAndPlayFX(Gordo.destroyFX, Gordo.transform.position + Vector3.up * 2f, Gordo.transform.rotation);
//get the gordo slime type
Identifiable component = Gordo.gameObject.GetComponent<Identifiable>();
//get the color of the current gordo
Color[] colors = SlimeUtil.GetColors(Gordo.gameObject, (component != null) ? component.id : Identifiable.Id.NONE, true);
//get the slime children spawned by the gordo
RecolorSlimeMaterial[] componentsInChildren = gameObject.GetComponentsInChildren<RecolorSlimeMaterial>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
//foreach slime in the count spawned by the gordo, set their coloring
componentsInChildren[i].SetColors(colors[0], colors[1], colors[2]);
}
}
//trigger the burst completed event
Gordo.DidCompleteBurst();
//despawn the bursted gordo from game
Gordo.gameObject.SetActive(false);
Gordo.SetEatenCount(-1);
yield break;

View file

@ -274,7 +274,7 @@ namespace SRMultiplayer.Networking
private static void OnFireColumnActivate(PacketFireColumnActivate packet)
{
if(Globals.FireColumns.TryGetValue(packet.ID, out NetworkFireColumn netColumn))
if (Globals.FireColumns.TryGetValue(packet.ID, out NetworkFireColumn netColumn))
{
netColumn.Column.ActivateFire();
}
@ -321,9 +321,9 @@ namespace SRMultiplayer.Networking
private static void OnOasis(PacketOasis packet)
{
foreach(var oasisData in packet.Oasis)
foreach (var oasisData in packet.Oasis)
{
if(SRSingleton<SceneContext>.Instance.GameModel.AllOases().TryGetValue(oasisData.ID, out OasisModel model))
if (SRSingleton<SceneContext>.Instance.GameModel.AllOases().TryGetValue(oasisData.ID, out OasisModel model))
{
model.isLive = oasisData.Model.isLive;
@ -337,30 +337,44 @@ namespace SRMultiplayer.Networking
#region Exchanges
private static void OnExchangeTryAccept(PacketExchangeTryAccept packet)
{
//get the exchange type
var type = (ExchangeDirector.OfferType)packet.Type;
//check if current scene (view) contains the item in question
if (SRSingleton<SceneContext>.Instance.ExchangeDirector.worldModel.currOffers.ContainsKey(type))
{
//handle the scene changes for the given offer
var offer = SRSingleton<SceneContext>.Instance.ExchangeDirector.worldModel.currOffers[type];
//cycle through requested items
foreach (ExchangeDirector.RequestedItemEntry requestedItemEntry in offer.requests)
{
//check if the item can be accespted
//is on the board and not already completed
if (requestedItemEntry.id == (Identifiable.Id)packet.ID && !requestedItemEntry.IsComplete())
{
//mark submit to log
SRMP.Log($"Exchange TryAccept for {(Identifiable.Id)packet.ID} ({(ExchangeDirector.OfferType)packet.Type}", "SERVER");
//mark progress
requestedItemEntry.progress++;
//if the given item completes the necesary quantity
if (offer.IsComplete())
{
foreach(var rewarder in Resources.FindObjectsOfTypeAll<RancherProgressAwarder>())
foreach (var rewarder in Resources.FindObjectsOfTypeAll<RancherProgressAwarder>())
{
rewarder.AwardIfType(type);
}
SRSingleton<SceneContext>.Instance.ExchangeDirector.ClearOffer(type);
}
//trigger offer status changed
SRSingleton<SceneContext>.Instance.ExchangeDirector.OfferDidChange();
}
}
}
}
private static void OnExchangePrepareDaily(PacketExchangePrepareDaily packet)
{
SRSingleton<SceneContext>.Instance.ExchangeDirector.worldModel.pendingOfferRancherIds = packet.pendingOfferRancherIds;
@ -414,7 +428,7 @@ namespace SRMultiplayer.Networking
private static void OnTreasurePods(PacketTreasurePods packet)
{
foreach(var pod in packet.TreasurePods)
foreach (var pod in packet.TreasurePods)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllPods().TryGetValue(pod.ID, out TreasurePodModel model))
{
@ -446,7 +460,7 @@ namespace SRMultiplayer.Networking
if (model.HasAttached())
{
var netDrone = model.attached.transform.GetComponentInChildren<NetworkDrone>(true);
if(netDrone != null)
if (netDrone != null)
{
netDrone.PositionRotationUpdate(packet.Position, packet.Rotation, false);
}
@ -675,7 +689,7 @@ namespace SRMultiplayer.Networking
extractor.nextProduceTime = packet.nextProduceTime;
extractor.queuedToProduce = packet.queuedToProduce;
if(extractor.cyclesRemaining <= 0)
if (extractor.cyclesRemaining <= 0)
{
var extractorScript = extractor.transform.GetComponent<Extractor>();
if (extractorScript != null && extractorScript.gameObject.activeInHierarchy)
@ -770,7 +784,7 @@ namespace SRMultiplayer.Networking
private static void OnGadgets(PacketGadgets packet)
{
List<int> regions = new List<int>();
foreach(var gadgetData in packet.Gadgets)
foreach (var gadgetData in packet.Gadgets)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllGadgetSites().TryGetValue(gadgetData.ID, out GadgetSiteModel model))
{
@ -823,7 +837,7 @@ namespace SRMultiplayer.Networking
}
}
foreach(var region in regions)
foreach (var region in regions)
{
if (Globals.Regions.TryGetValue(region, out NetworkRegion netRegion))
{
@ -881,7 +895,7 @@ namespace SRMultiplayer.Networking
private static void OnPuzzleSlots(PacketPuzzleSlots packet)
{
foreach(var puzzleSlotData in packet.PuzzleSlots)
foreach (var puzzleSlotData in packet.PuzzleSlots)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllSlots().TryGetValue(puzzleSlotData.ID, out PuzzleSlotModel model))
{
@ -919,7 +933,7 @@ namespace SRMultiplayer.Networking
private static void OnGordos(PacketGordos packet)
{
foreach(var gordoData in packet.Gordos)
foreach (var gordoData in packet.Gordos)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllGordos().TryGetValue(gordoData.ID, out GordoModel model))
{
@ -959,7 +973,7 @@ namespace SRMultiplayer.Networking
private static void OnAccessDoors(PacketAccessDoors packet)
{
foreach(var doorData in packet.Doors)
foreach (var doorData in packet.Doors)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllDoors().TryGetValue(doorData.ID, out AccessDoorModel model))
{
@ -1216,7 +1230,7 @@ namespace SRMultiplayer.Networking
}
var phaseSiteDirector = GameObject.FindObjectOfType<PhaseSiteDirector>();
if(phaseSiteDirector != null)
if (phaseSiteDirector != null)
{
phaseSiteDirector.ResetAllSites();
foreach (PhaseSite phaseSite in new List<PhaseSite>(phaseSiteDirector.availablePhaseSites))
@ -1295,7 +1309,7 @@ namespace SRMultiplayer.Networking
private static void OnLandPlotSiloAmmoAdd(PacketLandPlotSiloAmmoAdd packet)
{
if(NetworkAmmo.All.TryGetValue(packet.ID, out NetworkAmmo ammo))
if (NetworkAmmo.All.TryGetValue(packet.ID, out NetworkAmmo ammo))
{
ammo.MaybeAddToSpecificSlot((Identifiable.Id)packet.Ident, null, packet.Slot, packet.Count, packet.Overflow);
SRMP.Log($"NetworkAmmo add slot {packet.Slot} (Type: {(Identifiable.Id)packet.Ident} - Count: {packet.Count}) for {packet.ID}", "CLIENT");
@ -1488,7 +1502,7 @@ namespace SRMultiplayer.Networking
private static void OnLandPlots(PacketLandplots packet)
{
foreach(var plotData in packet.LandPlots)
foreach (var plotData in packet.LandPlots)
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllLandPlots().TryGetValue(plotData.ID, out LandPlotModel model))
{
@ -1538,7 +1552,7 @@ namespace SRMultiplayer.Networking
{
var type = (PacketActorFX.FXType)packet.Type;
var slimeEat = netActor.GetComponentInChildren<SlimeEat>();
if(slimeEat != null)
if (slimeEat != null)
{
if (type == PacketActorFX.FXType.SlimeEatFavoriteFX)
{
@ -1748,7 +1762,7 @@ namespace SRMultiplayer.Networking
private static void OnActors(PacketActors packet)
{
foreach(var actorData in packet.Actors)
foreach (var actorData in packet.Actors)
{
if (!Globals.Actors.ContainsKey(actorData.ID))
{
@ -1809,7 +1823,7 @@ namespace SRMultiplayer.Networking
Globals.Actors.Add(netActor.ID, netActor);
}
catch(Exception ex)
catch (Exception ex)
{
SRMP.Log($"Could not create actor {actorData.ID}: {ex}");
}
@ -1966,7 +1980,7 @@ namespace SRMultiplayer.Networking
SRSingleton<SceneContext>.Instance.PlayerState.model.ammoDict[state].slots = new Ammo.Slot[slotCount];
for (int j = 0; j < slotCount; j++)
{
if(reader.ReadBoolean())
if (reader.ReadBoolean())
{
SRSingleton<SceneContext>.Instance.PlayerState.model.ammoDict[state].slots[j] = new Ammo.Slot((Identifiable.Id)reader.ReadUInt16(), reader.ReadInt32());
if (reader.ReadBoolean())

View file

@ -19,7 +19,7 @@ namespace SRMultiplayer.Networking
if (!Globals.PacketSize.ContainsKey(type))
Globals.PacketSize.Add(type, 0);
Globals.PacketSize[type] += im.LengthBytes;
switch(type)
switch (type)
{
//Player
case PacketType.PlayerLoaded: OnPlayerLoaded(new PacketPlayerLoaded(im), player); break;
@ -140,7 +140,7 @@ namespace SRMultiplayer.Networking
#region Race
private static void OnRaceTrigger(PacketRaceTrigger packet, NetworkPlayer player)
{
if(Globals.RaceTriggers.TryGetValue(packet.ID, out NetworkRaceTrigger trigger))
if (Globals.RaceTriggers.TryGetValue(packet.ID, out NetworkRaceTrigger trigger))
{
trigger.Activate();
}
@ -172,7 +172,7 @@ namespace SRMultiplayer.Networking
var generator = QuicksilverEnergyGenerator.allGenerators.FirstOrDefault(g => g.id == packet.ID);
if (generator)
{
if(Globals.LocalPlayer.CurrentGenerator.id == generator.id)
if (Globals.LocalPlayer.CurrentGenerator.id == generator.id)
{
generator.Activate();
}
@ -242,9 +242,9 @@ namespace SRMultiplayer.Networking
oasis.SetLive(!model.gameObj.activeInHierarchy);
var oasisTriggers = GameObject.FindObjectsOfType<OasisWaterTrigger>();
foreach(var trigger in oasisTriggers)
foreach (var trigger in oasisTriggers)
{
if(trigger.oasisToScale == oasis && !trigger.hasAlreadyActivated)
if (trigger.oasisToScale == oasis && !trigger.hasAlreadyActivated)
{
if (trigger.scaleCue != null)
{
@ -312,7 +312,7 @@ namespace SRMultiplayer.Networking
{
SRMP.Log($"Exchange TryAccept for {(Identifiable.Id)packet.ID} ({(ExchangeDirector.OfferType)packet.Type}", "SERVER");
requestedItemEntry.progress++;
if(offer.IsComplete())
if (offer.IsComplete())
{
foreach (var rewarder in Resources.FindObjectsOfTypeAll<RancherProgressAwarder>())
{
@ -482,7 +482,7 @@ namespace SRMultiplayer.Networking
{
if (SRSingleton<SceneContext>.Instance.GameModel.AllGadgetSites().TryGetValue(packet.ID, out GadgetSiteModel model))
{
if(model.HasAttached())
if (model.HasAttached())
{
model.attached.transform.GetComponent<DroneGadget>().drone.ammo.MaybeAddToSpecificSlot((Identifiable.Id)packet.Ident, null, 0, 1);
}
@ -497,7 +497,7 @@ namespace SRMultiplayer.Networking
if (Globals.GadgetSites.TryGetValue(packet.ID, out NetworkGadgetSite netSite))
{
var echoNet = netSite.Site.GetComponentInChildren<EchoNet>(true);
if(echoNet != null)
if (echoNet != null)
{
echoNet.ResetSpawnTime(echoNet.model);
}
@ -510,7 +510,7 @@ namespace SRMultiplayer.Networking
if (Globals.GadgetSites.TryGetValue(packet.ID, out NetworkGadgetSite netSite))
{
var snare = netSite.Site.GetComponentInChildren<GordoSnare>(true);
if(snare != null)
if (snare != null)
{
if (!snare.IsBaited() || snare.HasSnaredGordo())
{
@ -579,7 +579,7 @@ namespace SRMultiplayer.Networking
{
Globals.GadgetSites.TryGetValue(packet.ID, out NetworkGadgetSite netSite);
bool didUnproxy = false;
if(netSite != null)
if (netSite != null)
{
if (!netSite.Region.Region.root.activeSelf)
{
@ -622,7 +622,7 @@ namespace SRMultiplayer.Networking
foreach (var data in packet.Amounts)
{
SRSingleton<SceneContext>.Instance.GameModel.GetGadgetsModel().craftMatCounts[(Identifiable.Id)data.Key] -= data.Value;
if(SRSingleton<SceneContext>.Instance.GameModel.GetGadgetsModel().craftMatCounts[(Identifiable.Id)data.Key] < 0)
if (SRSingleton<SceneContext>.Instance.GameModel.GetGadgetsModel().craftMatCounts[(Identifiable.Id)data.Key] < 0)
{
SRSingleton<SceneContext>.Instance.GameModel.GetGadgetsModel().craftMatCounts[(Identifiable.Id)data.Key] = 0;
}
@ -720,7 +720,7 @@ namespace SRMultiplayer.Networking
if (attachFashions != null)
{
var component = SRSingleton<GameContext>.Instance.LookupDirector.GetPrefab((Identifiable.Id)packet.Fashion)?.GetComponent<Fashion>();
if(component != null)
if (component != null)
{
attachFashions.Attach(component, !attachFashions.gameObject.activeInHierarchy);
}
@ -821,17 +821,17 @@ namespace SRMultiplayer.Networking
private static void OnWorldDecorizer(PacketWorldDecorizer packet, NetworkPlayer player)
{
foreach(var c in packet.Contents)
foreach (var c in packet.Contents)
{
for(int i = 0; i < c.Value; i++)
for (int i = 0; i < c.Value; i++)
{
SRSingleton<SceneContext>.Instance.GameModel.decorizer.contents.Increment(c.Key);
}
}
foreach(var setting in packet.Settings)
foreach (var setting in packet.Settings)
{
var storage = SRSingleton<SceneContext>.Instance.GameModel.decorizer.participants.FirstOrDefault(c => ((DecorizerStorage)c).id == setting.Key);
if(storage != null)
if (storage != null)
{
((DecorizerStorage)storage).selected = (Identifiable.Id)setting.Value;
}
@ -952,7 +952,7 @@ namespace SRMultiplayer.Networking
if (SRSingleton<SceneContext>.Instance.GameModel.AllLandPlots().TryGetValue(packet.ID, out LandPlotModel model))
{
var incinerate = model.gameObj.GetComponentInChildren<Incinerate>();
if(incinerate != null)
if (incinerate != null)
{
SRBehaviour.SpawnAndPlayFX(incinerate.ExplosionFX, packet.Position, packet.Rotation);
if (packet.Small)
@ -976,7 +976,7 @@ namespace SRMultiplayer.Networking
private static void OnGlobalFX(PacketGlobalFX packet, NetworkPlayer player)
{
if(Globals.FXPrefabs.TryGetValue(packet.Name, out GameObject prefabFX))
if (Globals.FXPrefabs.TryGetValue(packet.Name, out GameObject prefabFX))
{
SRBehaviour.SpawnAndPlayFX(prefabFX, packet.Position, Quaternion.identity);
}
@ -1080,7 +1080,7 @@ namespace SRMultiplayer.Networking
if (SRSingleton<SceneContext>.Instance.GameModel.AllLandPlots().TryGetValue(packet.ID, out LandPlotModel model))
{
var collector = model.gameObj.GetComponentInChildren<PlortCollector>();
if(collector != null)
if (collector != null)
{
collector.StartCollection();
}
@ -1268,14 +1268,14 @@ namespace SRMultiplayer.Networking
private static void OnRegionOwner(PacketRegionOwner packet, NetworkPlayer player)
{
if(Globals.Regions.TryGetValue(packet.ID, out NetworkRegion netRegion))
if (Globals.Regions.TryGetValue(packet.ID, out NetworkRegion netRegion))
{
if(packet.Owner == 0 && netRegion.Owner == player.ID)
if (packet.Owner == 0 && netRegion.Owner == player.ID)
{
netRegion.SetOwnership(0);
packet.SendToAll();
}
else if(packet.Owner != 0 && netRegion.Owner == 0)
else if (packet.Owner != 0 && netRegion.Owner == 0)
{
netRegion.SetOwnership(packet.Owner);
packet.SendToAll();
@ -1338,7 +1338,7 @@ namespace SRMultiplayer.Networking
var slimeFeral = netActor.GetComponentInChildren<SlimeFeral>(true);
if (slimeFeral != null)
{
if(packet.Feral)
if (packet.Feral)
{
slimeFeral.MakeFeral();
}
@ -1384,7 +1384,7 @@ namespace SRMultiplayer.Networking
if (Globals.Actors.TryGetValue(packet.ID, out NetworkActor netActor))
{
var cycle = netActor.GetComponentInChildren<ResourceCycle>(true);
if(cycle != null)
if (cycle != null)
{
var state = (ResourceCycle.State)packet.State;
//SRMP.Log($"Resource state for {netActor.name} ({netActor.ID}): {state}", "SERVER");
@ -1401,7 +1401,7 @@ namespace SRMultiplayer.Networking
}
TweenUtil.ScaleTo(cycle.gameObject, cycle.defaultScale, 4f, Ease.InOutQuad);
}
else if(state == ResourceCycle.State.EDIBLE)
else if (state == ResourceCycle.State.EDIBLE)
{
cycle.MakeEdible();
cycle.additionalRipenessDelegate = null;
@ -1427,7 +1427,7 @@ namespace SRMultiplayer.Networking
cycle.vacuumable.Pending = false;
}
}
else if(state == ResourceCycle.State.ROTTEN)
else if (state == ResourceCycle.State.ROTTEN)
{
cycle.Rot();
cycle.SetRotten(!cycle.gameObject.activeInHierarchy);
@ -1525,7 +1525,7 @@ namespace SRMultiplayer.Networking
netActor.KnownPlayers.AddRange(Globals.Players.Values.Where(p => p.HasLoaded));
var resourceCycle = actorObj.GetComponentInChildren<ResourceCycle>(true);
if(resourceCycle != null)
if (resourceCycle != null)
{
resourceCycle.SetInitState(ResourceCycle.State.UNRIPE, double.MaxValue);
}
@ -1574,7 +1574,7 @@ namespace SRMultiplayer.Networking
private static void OnPlayerCurrencyDisplay(PacketPlayerCurrencyDisplay packet, NetworkPlayer player)
{
SRSingleton<SceneContext>.Instance.PlayerState.SetCurrencyDisplay(packet.IsNull ? null : new int?(packet.Currency));
if(packet.IsNull)
if (packet.IsNull)
{
SRSingleton<PopupElementsUI>.Instance.CreateCoinsPopup(packet.Currency, PlayerState.CoinsType.DRONE);
}
@ -1657,7 +1657,7 @@ namespace SRMultiplayer.Networking
private static void OnPlayerAnimationLayer(NetIncomingMessage im, NetworkPlayer player)
{
if(player.HasLoaded)
if (player.HasLoaded)
{
byte id = im.ReadByte();
player.ReadAnimatorLayer(im);
@ -1707,7 +1707,7 @@ namespace SRMultiplayer.Networking
Contents = SRSingleton<SceneContext>.Instance.GameModel.decorizer.contents.ToDictionary(c => c.Key, v => v.Value),
Settings = SRSingleton<SceneContext>.Instance.GameModel.decorizer.settings.ToDictionary(s => s.Key, v => (ushort)v.Value.selected)
}.Send(player, NetDeliveryMethod.ReliableOrdered);
new PacketLandplots()
{
LandPlots = Globals.LandPlots.Values.Where(l => l.Plot.model != null).Select(l => new PacketLandplots.LandPlotData() { ID = l.Location.id, Model = l.Plot.model }).ToList()

View file

@ -74,20 +74,20 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\0Harmony.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp_publicized">
<HintPath>..\Libs\Assembly-CSharp_publicized.dll</HintPath>
</Reference>
<Reference Include="DOTween">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\DOTween.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\DOTween.dll</HintPath>
</Reference>
<Reference Include="InControl">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\InControl.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\InControl.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\Newtonsoft.Json.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="SRML, Version=0.1.8.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
@ -103,46 +103,46 @@
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Unity.TextMeshPro">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\Unity.TextMeshPro.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityCoreMod, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityCoreMod.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityCoreMod.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AssetBundleModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputLegacyModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextCoreModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.UI.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\Slime Rancher\SlimeRancher_Data\Managed\UnityEngine.UIModule.dll</HintPath>
<HintPath>C:\Program Files\Epic Games\SlimeRancher\SlimeRancher_Data\Managed\UnityEngine.UIModule.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>