60 lines
1.7 KiB
C#
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();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|