Support showing custom marbles in multiplayer
This commit is contained in:
parent
6a7104ea0d
commit
8e92d3a0fb
5 changed files with 40 additions and 7 deletions
|
@ -3,7 +3,7 @@
|
|||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<Import Project="$(ProjectDir)UserProperties.xml" />
|
||||
|
||||
<Target Name="VerifyModReferences" BeforeTargets="Build">
|
||||
|
|
|
@ -17,9 +17,6 @@ namespace CustomCosmeticLoader.Patches
|
|||
if (Config.skinNameToHijack == "*")
|
||||
return;
|
||||
|
||||
if (Shared.SkinToHijack == null)
|
||||
return;
|
||||
|
||||
if (__instance.cosmeticDisplay)
|
||||
{
|
||||
__instance.cosmeticDisplay.Clear();
|
||||
|
|
|
@ -16,7 +16,8 @@ namespace CustomCosmeticLoader.Patches
|
|||
if (Config.skinNameToHijack == "*")
|
||||
return;
|
||||
|
||||
if (Shared.SkinToHijack == null)
|
||||
// Shouldn't happen I don't think but we do this elsewhere in mp
|
||||
if (NetworkManager.IsMultiplayer)
|
||||
return;
|
||||
|
||||
MarbleHolder mHolder = __instance.MHolder;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using HarmonyLib;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
|
||||
namespace CustomCosmeticLoader.Patches
|
||||
|
@ -17,8 +18,42 @@ namespace CustomCosmeticLoader.Patches
|
|||
|
||||
if (!Config.inCosmeticMenu && __instance == CosmeticPanel.cosmHolder)
|
||||
return;
|
||||
|
||||
|
||||
// If this is a networked game, ONLY apply to my marble and not anyone else happening to use our SkinToHijack
|
||||
if (NetworkManager.IsMultiplayer)
|
||||
{
|
||||
MarbleController controller = __instance.GetComponentInParent<MarbleController>();
|
||||
if (!controller.isMyClientMarble())
|
||||
return;
|
||||
}
|
||||
|
||||
Shared.ApplyCustomTexture(__instance.currentMarble);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(MarbleHolder), nameof(MarbleHolder.CheckSet))]
|
||||
internal class MarbleHolderCheckSetPatch
|
||||
{
|
||||
static void Postfix(MarbleHolder __instance, Cosmetic.Set cs)
|
||||
{
|
||||
if (!Config.enabled)
|
||||
return;
|
||||
|
||||
if (!NetworkManager.IsMultiplayer)
|
||||
return;
|
||||
|
||||
FieldInfo mbcField = typeof(MarbleHolder).GetField("mbc", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
MarbleController controller = mbcField.GetValue(__instance) as MarbleController;
|
||||
|
||||
if (controller == null)
|
||||
return;
|
||||
|
||||
// Don't hijack the soccer ball or zombie skins
|
||||
if (cs.skin == "SoccerBall_V4" || cs.skin == "Zombie")
|
||||
return;
|
||||
|
||||
__instance.SetMarble(Shared.SkinToHijack);
|
||||
__instance.CosmeticSet.skin = cs.skin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace CustomCosmeticLoader
|
|||
if (skinToHijack == null)
|
||||
Debug.LogWarning("Couldn't hijack skin " + Config.skinNameToHijack);
|
||||
}
|
||||
|
||||
|
||||
return skinToHijack;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue