초기커밋
This commit is contained in:
193
GameServer/Contents/Claim/Action/ClaimRewardAction.cs
Normal file
193
GameServer/Contents/Claim/Action/ClaimRewardAction.cs
Normal file
@@ -0,0 +1,193 @@
|
||||
using GameServer.Reward;
|
||||
using ServerCommon;
|
||||
using ServerControlCenter;
|
||||
using ServerCore; using ServerBase;
|
||||
|
||||
namespace GameServer
|
||||
{
|
||||
public class ClaimRewardReference
|
||||
{
|
||||
public string m_user_guid { get; set; } = string.Empty;
|
||||
public Int32 m_claim_id { get; set; } = 0;
|
||||
public MetaAssets.ClaimType m_claim_type { get; set; } = MetaAssets.ClaimType.Normal;
|
||||
public Int32 m_reward_group_id { get; set; } = 0;
|
||||
public List<MetaAssets.Reward> m_reward_data { get; set; } = new();
|
||||
public ClaimMetaData? m_meta_data { get; set; } = null;
|
||||
|
||||
public ServerCommon.Claim? m_claim { get; set; } = null;
|
||||
|
||||
public List<MetaAssets.Reward> m_rewared_money { get; set; } = new();
|
||||
public List<Item> m_rewarded_items { get; set; } = new();
|
||||
|
||||
public CommonResult m_common_result { get; set; } = new();
|
||||
|
||||
}
|
||||
|
||||
public class ClaimRewardAction : EntityActionBase
|
||||
{
|
||||
public ClaimRewardAction(EntityBase owner)
|
||||
: base(owner)
|
||||
{
|
||||
}
|
||||
|
||||
public override void onClear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public override async Task<Result> onInit()
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
|
||||
var result = new Result();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> rewardClaim(ClaimRewardReference claimRewardRef)
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
setActiveIdx(claimRewardRef);
|
||||
IReward reward_proc = new RewardClaim(owner, claimRewardRef.m_user_guid, claimRewardRef);
|
||||
var result = await RewardManager.It.proceedRewardProcess(reward_proc);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
RewardManager.It.postRewardProcess(reward_proc);
|
||||
return new();
|
||||
}
|
||||
|
||||
|
||||
private void setActiveIdx(ClaimRewardReference claimRewardRef)
|
||||
{
|
||||
DateTime now = DateTimeHelper.Current;
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_meta_data, () => $"claimRewardRef.m_meta_data is null !!!");
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_claim, () => $"claimRewardRef.m_claim is null !!!");
|
||||
|
||||
int lastRewarIdx = claimRewardRef.m_meta_data.DetailInfo.Last().Value.Idx;
|
||||
var claimAttribute = claimRewardRef.m_claim.getEntityAttribute<ClaimAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(claimAttribute, () => $"claimAttribute is null !!!");
|
||||
|
||||
claimAttribute.ActiveTime = now;
|
||||
int nextActiveIdx = claimAttribute.ActiveRewardIdx + 1;
|
||||
if (nextActiveIdx > lastRewarIdx)
|
||||
{
|
||||
claimAttribute.IsComplete = 1;
|
||||
nextActiveIdx = 0;
|
||||
}
|
||||
claimAttribute.ActiveRewardIdx = nextActiveIdx;
|
||||
claimAttribute.modifiedEntityAttribute();
|
||||
}
|
||||
|
||||
|
||||
public Result claimRewardConditionCheck(ref ClaimRewardReference claimRewardRef)
|
||||
{
|
||||
var owner = getOwner() as Player;
|
||||
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
||||
|
||||
MetaAssets.ClaimType type = claimRewardRef.m_claim_type;
|
||||
(var result, var claim_meta) = ClaimRewardHelper.getClaimMeta(claimRewardRef.m_claim_id, type);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
claimRewardRef.m_meta_data = claim_meta;
|
||||
|
||||
var claim_action = owner.getEntityAction<ClaimAction>();
|
||||
result = claim_action.getClaim(claimRewardRef.m_claim_id, type, out var claim);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
claimRewardRef.m_claim = claim;
|
||||
|
||||
result = timeConditionCheck(ref claimRewardRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
result = rewardConditionCheck(ref claimRewardRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Result timeConditionCheck(ref ClaimRewardReference claimRewardRef)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_claim, () => $"claimRewardRef.m_claim is null !!!");
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_meta_data, () => $"claimRewardRef.m_meta_data is null !!!");
|
||||
|
||||
var attribute = claimRewardRef.m_claim.getEntityAttribute<ClaimAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!");
|
||||
|
||||
var active_idx = attribute.ActiveRewardIdx;
|
||||
|
||||
if (false == claimRewardRef.m_meta_data.DetailInfo.TryGetValue(active_idx, out var detailInfo))
|
||||
{
|
||||
var err_msg = $"detailInfo activeIdx = {active_idx} Data not exist";
|
||||
result.setFail(ServerErrorCode.ClaimInfoNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var cool_time = detailInfo.CoolTime;
|
||||
var now_dt = DateTimeHelper.Current;
|
||||
var active_time = attribute.ActiveTime;
|
||||
|
||||
if (now_dt < claimRewardRef.m_meta_data.StartTime || claimRewardRef.m_meta_data.EndTime < now_dt)
|
||||
{
|
||||
var err_msg = $"Claim Not Correct Time activeIdx = {active_idx} metaData.StartTime : {claimRewardRef.m_meta_data.StartTime}, metaData.EndTime : {claimRewardRef.m_meta_data.EndTime} ";
|
||||
result.setFail(ServerErrorCode.ClaimRewardEventEnd, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return result;
|
||||
}
|
||||
|
||||
var apply_cool_second = active_time.AddSeconds(cool_time);
|
||||
|
||||
if (apply_cool_second > now_dt)
|
||||
{
|
||||
var err_msg = $"HandleClaimRewardReq not enough Time to activeIdx = {active_idx} Data not exist";
|
||||
result.setFail(ServerErrorCode.ClaimRewardNotEnoughTime, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Result rewardConditionCheck(ref ClaimRewardReference claimRewardRef)
|
||||
{
|
||||
var result = new Result();
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_claim, () => $"claimRewardRef.m_claim is null !!!");
|
||||
NullReferenceCheckHelper.throwIfNull(claimRewardRef.m_meta_data, () => $"claimRewardRef.m_meta_data is null !!!");
|
||||
|
||||
var attribute = claimRewardRef.m_claim.getEntityAttribute<ClaimAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!");
|
||||
|
||||
var active_idx = attribute.ActiveRewardIdx;
|
||||
|
||||
if (false == claimRewardRef.m_meta_data.DetailInfo.TryGetValue(active_idx, out var detailInfo))
|
||||
{
|
||||
var err_msg = $"detailInfo activeIdx = {active_idx} Data not exist";
|
||||
result.setFail(ServerErrorCode.ClaimInfoNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
int rewardGroupId = detailInfo.RewardGroupId;
|
||||
if (!MetaData.Instance._RewardMetaTable.TryGetValue(rewardGroupId, out var rewardList))
|
||||
{
|
||||
var err_msg = $"_RewardDataTable not exist info rewardGroupId = {rewardGroupId}";
|
||||
result.setFail(ServerErrorCode.RewardInfoNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
claimRewardRef.m_reward_group_id = rewardGroupId;
|
||||
claimRewardRef.m_reward_data.Clear();
|
||||
foreach (var reward in rewardList)
|
||||
{
|
||||
claimRewardRef.m_reward_data.Add(reward.Reward);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user