r2mods/ilspy_dump/ror2_csproj/RoR2.Items/MultiShopCardUtils.cs

60 lines
1.7 KiB
C#

using RoR2.Orbs;
namespace RoR2.Items;
public static class MultiShopCardUtils
{
private const float refundPercentage = 0.1f;
public static void OnNonMoneyPurchase(CostTypeDef.PayCostContext context)
{
OnPurchase(context, 0);
}
public static void OnMoneyPurchase(CostTypeDef.PayCostContext context)
{
OnPurchase(context, context.cost);
}
private static void OnPurchase(CostTypeDef.PayCostContext context, int moneyCost)
{
CharacterMaster activatorMaster = context.activatorMaster;
if (!activatorMaster || !activatorMaster.hasBody || !activatorMaster.inventory || activatorMaster.inventory.currentEquipmentIndex != DLC1Content.Equipment.MultiShopCard.equipmentIndex)
{
return;
}
CharacterBody body = activatorMaster.GetBody();
if (body.equipmentSlot.stock <= 0)
{
return;
}
bool flag = false;
if (moneyCost > 0)
{
flag = true;
GoldOrb goldOrb = new GoldOrb();
goldOrb.origin = context.purchasedObject?.transform?.position ?? body.corePosition;
goldOrb.target = body.mainHurtBox;
goldOrb.goldAmount = (uint)(0.1f * (float)moneyCost);
OrbManager.instance.AddOrb(goldOrb);
}
ShopTerminalBehavior shopTerminalBehavior = context.purchasedObject?.GetComponent<ShopTerminalBehavior>();
if ((bool)shopTerminalBehavior && (bool)shopTerminalBehavior.serverMultiShopController)
{
flag = true;
shopTerminalBehavior.serverMultiShopController.SetCloseOnTerminalPurchase(context.purchasedObject.GetComponent<PurchaseInteraction>(), doCloseMultiShop: false);
}
if (flag)
{
if (body.hasAuthority)
{
body.equipmentSlot.OnEquipmentExecuted();
}
else
{
body.equipmentSlot.CallCmdOnEquipmentExecuted();
}
}
}
}