초기커밋
This commit is contained in:
174
GameServer/Contents/Reward/RewardBase.cs
Normal file
174
GameServer/Contents/Reward/RewardBase.cs
Normal file
@@ -0,0 +1,174 @@
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user