175 lines
5.4 KiB
C#
175 lines
5.4 KiB
C#
using Amazon.DynamoDBv2.Model.Internal.MarshallTransformations;
|
|
using GameServer;
|
|
using MetaAssets;
|
|
using ServerCommon;
|
|
using ServerControlCenter;
|
|
using ServerCore; using ServerBase;
|
|
using META_ID = System.UInt32;
|
|
|
|
namespace GameServer
|
|
{
|
|
public abstract class RewardBase : IReward
|
|
{
|
|
private Player m_owner;
|
|
private string m_user_guid = string.Empty;
|
|
private List<MetaAssets.Reward> m_rewards = new();
|
|
//List<ILogInvoker> m_currency_invokers = new();
|
|
//List<ILogInvoker> m_item_invokers = new();
|
|
//List<CurrencyMaxNoti> m_currency_max_noties = new();
|
|
//private List<Money> obtained_reward = new();
|
|
|
|
private List<MetaAssets.Reward> m_rewarded_moneys = new();
|
|
private List<Item> m_rewarded_items = new();
|
|
|
|
public RewardBase(Player owner, string user_guid)
|
|
{
|
|
m_owner = owner;
|
|
m_user_guid = user_guid;
|
|
|
|
//m_currency_invokers = new();
|
|
//m_item_invokers = new();
|
|
//m_currency_max_noties = new();
|
|
//m_rewarda = rewards;
|
|
}
|
|
|
|
public RewardBase(Player owner, string user_guid, List<MetaAssets.Reward> rewards)
|
|
{
|
|
m_owner = owner;
|
|
m_user_guid = user_guid;
|
|
//m_currency_invokers = new();
|
|
//m_item_invokers = new();
|
|
//m_currency_max_noties = new();
|
|
m_rewards = rewards;
|
|
}
|
|
|
|
//=====================================================================================
|
|
// 보상전 처리해야되는 것들 처리
|
|
//=====================================================================================
|
|
public virtual Task<Result> prepareReward()
|
|
{
|
|
var result = new Result();
|
|
return Task.FromResult(result);
|
|
}
|
|
|
|
|
|
public async Task<Result> addReward()
|
|
{
|
|
//item인것만 모아서 tryCheckTakableInBagInven 한번 태운다
|
|
var result = await itemMaxCheck(m_rewards);
|
|
if (result.isFail()) return result;
|
|
|
|
|
|
foreach (var reward in m_rewards)
|
|
{
|
|
if (reward.Currency != null)
|
|
{
|
|
var money_action = m_owner.getEntityAction<MoneyAction>();
|
|
result = await money_action.changeMoney((CurrencyType)reward.Currency.Id, reward.Currency.Value);
|
|
if (result.isFail()) return result;
|
|
m_rewarded_moneys.Add(reward);
|
|
}
|
|
else if (reward.Item != null)
|
|
{
|
|
var inventory_action = m_owner.getEntityAction<InventoryActionBase>();
|
|
|
|
(result, var items) = await inventory_action.tryTakalbleToBag((META_ID)reward.Item.Id, (ushort)reward.Item.Count);
|
|
|
|
if (result.isFail()) return result;
|
|
|
|
m_rewarded_items.AddRange(items);
|
|
}
|
|
else if (reward.SeasonPassExp != null)
|
|
{
|
|
var season_pass_action = m_owner.getEntityAction<SeasonPassAction>();
|
|
result = season_pass_action.IncreaseExp((UInt32)reward.SeasonPassExp.Value);
|
|
if (result.isFail()) return result;
|
|
}
|
|
else
|
|
{
|
|
var err_msg = $"reward_data type InvalidType";
|
|
result.setFail(ServerErrorCode.RewardInvalidType, err_msg);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
private async Task<Result> itemMaxCheck(List<MetaAssets.Reward> rewards)
|
|
{
|
|
Dictionary<META_ID, Int16> item_dictionary = new();
|
|
|
|
foreach (var reward in rewards)
|
|
{
|
|
if (reward.Item == null) continue;
|
|
|
|
var id = (META_ID)reward.Item.Id;
|
|
var item_cnt = (UInt16)reward.Item.Count;
|
|
if (false == item_dictionary.TryGetValue(id, out var cnt))
|
|
{
|
|
item_dictionary.TryAdd(id, (Int16)reward.Item.Count);
|
|
}
|
|
else
|
|
{
|
|
var sum = item_cnt + cnt;
|
|
item_dictionary[id] = (Int16)sum;
|
|
}
|
|
}
|
|
|
|
if (item_dictionary.Count > 0)
|
|
{
|
|
var inventory_action = m_owner.getEntityAction<InventoryActionBase>();
|
|
var bag_inven = inventory_action.getBagInven();
|
|
|
|
return await bag_inven.tryCheckTakableInBagInven(item_dictionary);
|
|
}
|
|
|
|
return new();
|
|
}
|
|
|
|
public virtual Task<Result> finalizeReward()
|
|
{
|
|
var result = new Result();
|
|
return Task.FromResult(result);
|
|
}
|
|
|
|
public void postRewardProcess()
|
|
{
|
|
//prepare();
|
|
|
|
|
|
//sendNoti();
|
|
}
|
|
|
|
|
|
public Player getOwner()
|
|
{
|
|
return m_owner;
|
|
}
|
|
|
|
public string getUserGuid()
|
|
{
|
|
return m_user_guid;
|
|
}
|
|
|
|
public void setRewardMetas(List<MetaAssets.Reward> rewards)
|
|
{
|
|
m_rewards = rewards;
|
|
}
|
|
|
|
|
|
public List<Item> getRewardedItems()
|
|
{
|
|
return m_rewarded_items;
|
|
}
|
|
|
|
|
|
public List<MetaAssets.Reward> getRewardedMoneys()
|
|
{
|
|
return m_rewarded_moneys;
|
|
}
|
|
|
|
|
|
}
|
|
}
|