r2mods/ilspy_dump/ror2_csproj/RoR2/ShrineColossusAccessBehavio...

149 lines
4.5 KiB
C#

using System.Collections.Generic;
using System.Linq;
using RoR2.Navigation;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
[RequireComponent(typeof(PurchaseInteraction))]
public sealed class ShrineColossusAccessBehavior : ShrineBehavior
{
[SerializeField]
private PurchaseInteraction purchaseInteraction;
private GameObject playerRespawnEffectPrefab;
private CharacterBody body;
[SerializeField]
private Transform symbolTransform;
private static int kRpcRpcUpdateInteractionClients;
[Server]
public void OnInteraction(Interactor interactor)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.ShrineColossusAccessBehavior::OnInteraction(RoR2.Interactor)' called on client");
return;
}
body = interactor.GetComponent<CharacterBody>();
if ((bool)body && (bool)body.master.playerCharacterMasterController)
{
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
CharacterBody characterBody = instance.master.GetBody();
if ((bool)characterBody && characterBody != body)
{
int newCount = purchaseInteraction.cost / 10;
instance.master.GetBody().SetBuffCount(DLC2Content.Buffs.SoulCost.buffIndex, newCount);
}
}
}
ReviveAlliedPlayers();
CallRpcSetPingable(value: false);
CallRpcUpdateInteractionClients();
}
[ClientRpc]
private void RpcUpdateInteractionClients()
{
Util.PlaySound("Play_obj_portalShaping_activate", base.gameObject);
symbolTransform.gameObject.SetActive(value: false);
}
[Server]
private void ReviveAlliedPlayers()
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.ShrineColossusAccessBehavior::ReviveAlliedPlayers()' called on client");
return;
}
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
CharacterMaster master = instance.master;
if (instance.isConnected && master.IsDeadAndOutOfLivesServer())
{
NodeGraph nodeGraph = SceneInfo.instance.GetNodeGraph(MapNodeGroup.GraphType.Ground);
List<NodeGraph.NodeIndex> source = nodeGraph.FindNodesInRange(base.gameObject.transform.position, 10f, 30f, HullMask.Human);
Vector3 position = default(Vector3);
nodeGraph.GetNodePosition(source.First(), out position);
master.Respawn(position, Quaternion.Euler(0f, Random.Range(0f, 360f), 0f), wasRevivedMidStage: true);
CharacterBody characterBody = master.GetBody();
if ((bool)characterBody)
{
characterBody.AddTimedBuff(RoR2Content.Buffs.Immune, 3f);
EntityStateMachine[] components = characterBody.GetComponents<EntityStateMachine>();
foreach (EntityStateMachine obj in components)
{
obj.initialStateType = obj.mainStateType;
}
}
}
else if (instance.isConnected && !master.IsDeadAndOutOfLivesServer() && master.GetBody().healthComponent.alive)
{
master.GetBody().AddTimedBuff(RoR2Content.Buffs.Immune, 3f);
master.GetBody().AddBuff(DLC2Content.Buffs.ExtraLifeBuff);
}
}
}
private void UNetVersion()
{
}
protected static void InvokeRpcRpcUpdateInteractionClients(NetworkBehaviour obj, NetworkReader reader)
{
if (!NetworkClient.active)
{
Debug.LogError("RPC RpcUpdateInteractionClients called on server.");
}
else
{
((ShrineColossusAccessBehavior)obj).RpcUpdateInteractionClients();
}
}
public void CallRpcUpdateInteractionClients()
{
if (!NetworkServer.active)
{
Debug.LogError("RPC Function RpcUpdateInteractionClients called on client.");
return;
}
NetworkWriter networkWriter = new NetworkWriter();
networkWriter.Write((short)0);
networkWriter.Write((short)2);
networkWriter.WritePackedUInt32((uint)kRpcRpcUpdateInteractionClients);
networkWriter.Write(GetComponent<NetworkIdentity>().netId);
SendRPCInternal(networkWriter, 0, "RpcUpdateInteractionClients");
}
static ShrineColossusAccessBehavior()
{
kRpcRpcUpdateInteractionClients = -248324325;
NetworkBehaviour.RegisterRpcDelegate(typeof(ShrineColossusAccessBehavior), kRpcRpcUpdateInteractionClients, InvokeRpcRpcUpdateInteractionClients);
NetworkCRC.RegisterBehaviour("ShrineColossusAccessBehavior", 0);
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
bool flag = base.OnSerialize(writer, forceAll);
bool flag2 = default(bool);
return flag2 || flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
base.OnDeserialize(reader, initialState);
}
public override void PreStartClient()
{
base.PreStartClient();
}
}