r2mods/ilspy_dump/ror2_csproj/RoR2/ShrineBloodBehavior.cs

119 lines
3.0 KiB
C#

using RoR2.Networking;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2;
[RequireComponent(typeof(PurchaseInteraction))]
public class ShrineBloodBehavior : ShrineBehavior
{
public int maxPurchaseCount;
public float goldToPaidHpRatio = 0.5f;
public float costMultiplierPerPurchase;
public Transform symbolTransform;
private PurchaseInteraction purchaseInteraction;
private int purchaseCount;
private float refreshTimer;
private const float refreshDuration = 2f;
private bool waitingForRefresh;
public override int GetNetworkChannel()
{
return QosChannelIndex.defaultReliable.intVal;
}
private void Start()
{
purchaseInteraction = GetComponent<PurchaseInteraction>();
}
public void FixedUpdate()
{
if (waitingForRefresh)
{
refreshTimer -= Time.fixedDeltaTime;
if (refreshTimer <= 0f && purchaseCount < maxPurchaseCount)
{
purchaseInteraction.SetAvailable(newAvailable: true);
purchaseInteraction.Networkcost = (int)(100f * (1f - Mathf.Pow(1f - (float)purchaseInteraction.cost / 100f, costMultiplierPerPurchase)));
waitingForRefresh = false;
}
}
}
[Server]
public void AddShrineStack(Interactor interactor)
{
if (!NetworkServer.active)
{
Debug.LogWarning("[Server] function 'System.Void RoR2.ShrineBloodBehavior::AddShrineStack(RoR2.Interactor)' called on client");
return;
}
waitingForRefresh = true;
CharacterBody component = interactor.GetComponent<CharacterBody>();
if ((bool)component)
{
uint num = (uint)(component.healthComponent.fullCombinedHealth * (float)purchaseInteraction.cost / 100f * goldToPaidHpRatio);
if ((bool)component.master)
{
if (component.inventory.GetItemCount(DLC2Content.Items.OnLevelUpFreeUnlock) > 0)
{
component.master.GiveExperience((ulong)((float)num * 2f));
}
else
{
component.master.GiveMoney(num);
}
Chat.SubjectFormatChatMessage subjectFormatChatMessage = new Chat.SubjectFormatChatMessage();
subjectFormatChatMessage.subjectAsCharacterBody = component;
subjectFormatChatMessage.baseToken = "SHRINE_BLOOD_USE_MESSAGE";
subjectFormatChatMessage.paramTokens = new string[1] { num.ToString() };
Chat.SendBroadcastChat(subjectFormatChatMessage);
}
}
EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ShrineUseEffect"), new EffectData
{
origin = base.transform.position,
rotation = Quaternion.identity,
scale = 1f,
color = Color.red
}, transmit: true);
purchaseCount++;
refreshTimer = 2f;
if (purchaseCount >= maxPurchaseCount)
{
symbolTransform.gameObject.SetActive(value: false);
CallRpcSetPingable(value: false);
}
}
private void UNetVersion()
{
}
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();
}
}