r2mods/ilspy_dump/ror2_csproj/RoR2/BarrelInteraction.cs

182 lines
3.6 KiB
C#

using System.Runtime.InteropServices;
using EntityStates.Barrel;
using RoR2.Networking;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
public sealed class BarrelInteraction : NetworkBehaviour, IInteractable, IDisplayNameProvider
{
public int goldReward;
public uint expReward;
public string displayNameToken = "BARREL1_NAME";
public string contextToken;
public bool shouldProximityHighlight = true;
[SyncVar]
private bool opened;
public bool Networkopened
{
get
{
return opened;
}
[param: In]
set
{
SetSyncVar(value, ref opened, 1u);
}
}
public string GetContextString(Interactor activator)
{
return Language.GetString(contextToken);
}
public override int GetNetworkChannel()
{
return QosChannelIndex.defaultReliable.intVal;
}
public Interactability GetInteractability(Interactor activator)
{
if (opened)
{
return Interactability.Disabled;
}
return Interactability.Available;
}
private void Start()
{
if ((bool)Run.instance)
{
goldReward = (int)((float)goldReward * Run.instance.difficultyCoefficient);
expReward = (uint)((float)expReward * Run.instance.difficultyCoefficient);
}
}
[Server]
public void OnInteractionBegin(Interactor activator)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.BarrelInteraction::OnInteractionBegin(RoR2.Interactor)' called on client");
}
else if (!opened)
{
Networkopened = true;
EntityStateMachine component = GetComponent<EntityStateMachine>();
if ((bool)component)
{
component.SetNextState(new Opening());
}
CharacterBody component2 = activator.GetComponent<CharacterBody>();
if ((bool)component2)
{
TeamIndex objectTeam = TeamComponent.GetObjectTeam(component2.gameObject);
TeamManager.instance.GiveTeamMoney(objectTeam, (uint)goldReward);
}
CoinDrop();
ExperienceManager.instance.AwardExperience(base.transform.position, activator.GetComponent<CharacterBody>(), expReward);
}
}
[Server]
private void CoinDrop()
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.BarrelInteraction::CoinDrop()' called on client");
return;
}
EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/CoinEmitter"), new EffectData
{
origin = base.transform.position,
genericFloat = goldReward
}, transmit: true);
}
public string GetDisplayName()
{
return Language.GetString(displayNameToken);
}
public bool ShouldIgnoreSpherecastForInteractibility(Interactor activator)
{
return false;
}
public void OnEnable()
{
InstanceTracker.Add(this);
}
public void OnDisable()
{
InstanceTracker.Remove(this);
}
public bool ShouldShowOnScanner()
{
return !opened;
}
public bool ShouldProximityHighlight()
{
return shouldProximityHighlight;
}
private void UNetVersion()
{
}
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
{
if (forceAll)
{
writer.Write(opened);
return true;
}
bool flag = false;
if ((base.syncVarDirtyBits & (true ? 1u : 0u)) != 0)
{
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
flag = true;
}
writer.Write(opened);
}
if (!flag)
{
writer.WritePackedUInt32(base.syncVarDirtyBits);
}
return flag;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if (initialState)
{
opened = reader.ReadBoolean();
return;
}
int num = (int)reader.ReadPackedUInt32();
if (((uint)num & (true ? 1u : 0u)) != 0)
{
opened = reader.ReadBoolean();
}
}
public override void PreStartClient()
{
}
}