r2mods/ilspy_dump/ror2_csproj/RoR2/ShrineRebirthController.cs

271 lines
6.3 KiB
C#

using System;
using System.Runtime.InteropServices;
using EntityStates.ShrineRebirth;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
namespace RoR2;
public class ShrineRebirthController : NetworkBehaviour, IDisplayNameProvider
{
[Serializable]
public class InteractorUnityEvent : UnityEvent
{
}
private Interactor rebirthCandidate;
private CharacterBody rebirthBody;
[SerializeField]
private int maxItemsTogive = 4;
public EntityStateMachine stateMachine;
public InteractorUnityEvent onRebirthChoiceFinished;
private int itemsGiven;
[SerializeField]
private NetworkUIPromptController networkUIPromptController;
private bool RebirthItemGiven;
[SyncVar]
public GameObject portalObject;
public PurchaseInteraction purchaseInteraction;
public ChildLocator childLocator;
public bool isForTesting;
public GameObject onShrineRevealObjectiveTextObject;
public GameObject onRebirthOrContinueTextObject;
[SerializeField]
public InteractableSpawnCard helminthPortalISC;
private ItemIndex rebirthIndex = ItemIndex.None;
private PickupPickerController _pickupPickerController;
private NetworkUIPromptController _netUIPromptController;
private NetworkInstanceId ___portalObjectNetId;
private static int kRpcRpcChangeInteractScript;
public GameObject NetworkportalObject
{
get
{
return portalObject;
}
[param: In]
set
{
SetSyncVarGameObject(value, ref portalObject, 1u, ref ___portalObjectNetId);
}
}
private NetworkUser GetNetworkUserFromCandidate()
{
if ((bool)rebirthBody)
{
CharacterMaster master = rebirthBody.master;
if ((bool)master)
{
PlayerCharacterMasterController playerCharacterMasterController = master.playerCharacterMasterController;
if ((bool)playerCharacterMasterController)
{
NetworkUser networkUser = playerCharacterMasterController.networkUser;
if ((bool)networkUser)
{
return networkUser;
}
}
}
}
return null;
}
[Server]
public void StoreRebirthItemChoice(int itemChoice)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.ShrineRebirthController::StoreRebirthItemChoice(System.Int32)' called on client");
return;
}
PickupDef pickupDef = PickupCatalog.GetPickupDef(new PickupIndex(itemChoice));
_ = rebirthCandidate == null;
if (pickupDef == null || !rebirthCandidate || !rebirthBody || !rebirthBody.inventory)
{
return;
}
rebirthBody.inventory.RemoveItem(pickupDef.itemIndex);
itemsGiven++;
StoreRebirthItem(pickupDef);
if (!MaxRebirthItemsGiven())
{
return;
}
foreach (NetworkUser readOnlyInstances in NetworkUser.readOnlyInstancesList)
{
readOnlyInstances.CallCmdStoreRebirthItems(rebirthIndex);
}
onRebirthChoiceFinished?.Invoke();
stateMachine.SetNextState(new RebirthChoice());
}
private bool MaxRebirthItemsGiven()
{
bool result = false;
if (itemsGiven >= maxItemsTogive)
{
result = true;
}
return result;
}
private void StoreRebirthItem(PickupDef pickupDef)
{
if ((bool)GetNetworkUserFromCandidate())
{
if (!RebirthItemGiven)
{
RebirthItemGiven = true;
rebirthIndex = pickupDef.itemIndex;
}
if ((bool)rebirthCandidate)
{
Run.instance.GrantUnlockToAllParticipatingPlayers(UnlockableCatalog.GetUnlockableDef("Artifacts.Rebirth"));
}
}
}
public void AssignPotentialInteractor(Interactor potentialInteractor)
{
if (!rebirthCandidate)
{
rebirthCandidate = potentialInteractor;
rebirthBody = rebirthCandidate.GetComponent<CharacterBody>();
}
}
private void Start()
{
_pickupPickerController = base.gameObject.GetComponent<PickupPickerController>();
_netUIPromptController = GetComponent<NetworkUIPromptController>();
_netUIPromptController.enabled = false;
_pickupPickerController.enabled = false;
}
[ClientRpc]
public void RpcChangeInteractScript()
{
UnityEngine.Object.Destroy(base.gameObject.GetComponent<PurchaseInteraction>());
_netUIPromptController.enabled = true;
_pickupPickerController.enabled = true;
_pickupPickerController.SetAvailable(newAvailable: true);
portalObject.SetActive(value: true);
}
public void SetEntityStateMachineToRebirthOrPortal()
{
stateMachine.SetNextState(new RebirthOrPortalChoice());
}
public string GetDisplayName()
{
return Language.GetString("SHRINE_REBIRTH_NAME");
}
private void UNetVersion()
{
}
protected static void InvokeRpcRpcChangeInteractScript(NetworkBehaviour obj, NetworkReader reader)
{
if (!NetworkClient.active)
{
Debug.LogError("RPC RpcChangeInteractScript called on server.");
}
else
{
((ShrineRebirthController)obj).RpcChangeInteractScript();
}
}
public void CallRpcChangeInteractScript()
{
if (!NetworkServer.active)
{
Debug.LogError("RPC Function RpcChangeInteractScript called on client.");
return;
}
NetworkWriter networkWriter = new NetworkWriter();
networkWriter.Write((short)0);
networkWriter.Write((short)2);
networkWriter.WritePackedUInt32((uint)kRpcRpcChangeInteractScript);
networkWriter.Write(GetComponent<NetworkIdentity>().netId);
SendRPCInternal(networkWriter, 0, "RpcChangeInteractScript");
}
static ShrineRebirthController()
{
kRpcRpcChangeInteractScript = 1007694444;
NetworkBehaviour.RegisterRpcDelegate(typeof(ShrineRebirthController), kRpcRpcChangeInteractScript, InvokeRpcRpcChangeInteractScript);
NetworkCRC.RegisterBehaviour("ShrineRebirthController", 0);
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.Write(portalObject);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.Write(portalObject);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
___portalObjectNetId = reader.ReadNetworkId();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
portalObject = reader.ReadGameObject();
}
}
public override void PreStartClient()
{
if (!___portalObjectNetId.IsEmpty())
{
NetworkportalObject = ClientScene.FindLocalObject(___portalObjectNetId);
}
}
}