Files
caliverse_server/GameServer/Contents/Calium/Action/CaliumExchangerAction.cs
2025-05-01 07:20:41 +09:00

69 lines
2.1 KiB
C#

using ServerCore;
using ServerBase;
using ServerCommon;
namespace GameServer;
public class CaliumExchangerAction : EntityActionBase
{
private const double BaseExchangeValue = 0.01;
public CaliumExchangerAction(Player owner) : base(owner)
{
}
public override async Task<Result> onInit() => await Task.FromResult(new Result());
public override void onClear()
{
return;
}
public async Task<double> calculationConvertCalium(double sapphire)
{
var calium = await CaliumStorageHelper.calculateCaliumFromSapphire(sapphire);
if (calium < BaseExchangeValue) calium = 0;
return calium;
}
public Result checkConvertConditions(double sapphire)
{
var result = new Result();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
// 1. 재화 보유 체크
var money_attribute = getOwner().getEntityAttribute<MoneyAttribute>();
NullReferenceCheckHelper.throwIfNull(money_attribute, () => $"money_attribute is null !!!");
if (money_attribute.Sapphire < sapphire)
{
var err_msg = $"fail to convert calium!!! : lack of currency - currency[{sapphire}]";
result.setFail(ServerErrorCode.LackOfCommissionCurrency, err_msg);
Log.getLogger().error(err_msg);
}
return result;
}
public async Task<Result> changeCurrency(double obtainCalium, CurrencyType currencyType, double spendCurrency)
{
var result = new Result();
var money_action = getOwner().getEntityAction<MoneyAction>();
NullReferenceCheckHelper.throwIfNull(money_action, () => $"money_action is null !!!");
// 1. calium 획득
result = await money_action.changeMoney(CurrencyType.Calium, obtainCalium, useCaliumEvent: false);
if (result.isFail()) return result;
// 2. 변환을 위한 재화 소모
result = await money_action.changeMoney(currencyType, -1 * spendCurrency, useCaliumEvent: false);
return result;
}
}