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 onInit() => await Task.FromResult(new Result()); public override void onClear() { return; } public async Task 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(); 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 changeCurrency(double obtainCalium, CurrencyType currencyType, double spendCurrency) { var result = new Result(); var money_action = getOwner().getEntityAction(); 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; } }