초기커밋
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
using GameServer.Contents.Battle.Reward;
|
||||
using MetaAssets;
|
||||
using Newtonsoft.Json;
|
||||
using ServerCommon;
|
||||
using ServerCore; using ServerBase;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class BattleObjectRewardAction : EntityActionBase
|
||||
{
|
||||
public BattleObjectRewardAction(EntityBase owner) : base(owner)
|
||||
{
|
||||
}
|
||||
public override Task<Result> onInit()
|
||||
{
|
||||
var result = new Result();
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
public override void onClear() { }
|
||||
|
||||
|
||||
public async Task<Result> podStorageReward(Player player, BattleInstanceSnapshotAttribute attribute, BattleObjectInteractionLogicHandler handler)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
if (false == attribute.m_combat_pod_mode.m_pod_storages.TryGetValue(handler.m_interaction_anchor_guid, out var podStorage))
|
||||
{
|
||||
Log.getLogger().error($"Not exist pod storage anchor : {handler.m_interaction_anchor_guid}, player : {player.toBasicString()}");
|
||||
result.setFail(ServerErrorCode.BattleInstanceObjectMetaNotExist, result.toBasicString());
|
||||
return result;
|
||||
}
|
||||
|
||||
if (1 <= podStorage.m_reward_cnt)
|
||||
{
|
||||
return result; //이건 에러는 아니다.
|
||||
}
|
||||
podStorage.m_reward_cnt++;
|
||||
|
||||
var pod_storage_meta = MetaData.Instance._BattlePodStorageMeta;
|
||||
|
||||
var reward_id = pod_storage_meta.TypeID;
|
||||
var reward_count = pod_storage_meta.ObjectValue;
|
||||
|
||||
var battle_instance_room = getOwner() as BattleInstanceRoom;
|
||||
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"battle_instance_room is null !!!");
|
||||
|
||||
RewardMutable reward_metable = new();
|
||||
reward_metable.Item = new();
|
||||
reward_metable.Item.Id = reward_id;
|
||||
reward_metable.Item.Count = reward_count * battle_instance_room.m_hot_time_reward;
|
||||
MetaAssets.Reward reward = new MetaAssets.Reward(reward_metable);
|
||||
List<MetaAssets.Reward> rewards = new(){reward};
|
||||
|
||||
IReward reward_proc = new RewardPodStorage(player, player.getUserGuid(), rewards);
|
||||
result = await RewardManager.It.proceedRewardProcess(reward_proc);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
handler.m_interaction_log_info.m_rewards.AddRange(rewards);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<Result> pickupPodReward(Player player, BattleInstanceSnapshotAttribute attribute, BattleObjectInteractionLogicHandler handler)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
string err_msg = string.Empty;
|
||||
|
||||
if (false == attribute.m_combat_pod_mode.m_pickup_pods.TryGetValue(handler.m_interaction_anchor_guid, out var pickupPod))
|
||||
{
|
||||
err_msg = $"Not exist pickup pod anchor : {handler.m_interaction_anchor_guid}, player : {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
result.setFail(ServerErrorCode.BattleInstanceObjectMetaNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var battle_instance_room = getOwner() as BattleInstanceRoom;
|
||||
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"battle_instance_room is null !!!");
|
||||
|
||||
Int32 idx = Int32.MinValue;
|
||||
Int32 group_id = 0;
|
||||
string rewarded_anchor_guid = String.Empty;
|
||||
foreach (var generated_info in attribute.m_combat_pod_mode.m_pickup_pod_generated_info)
|
||||
{
|
||||
var generated_info_tuple = generated_info.Value;
|
||||
|
||||
|
||||
if (false == handler.m_interaction_anchor_guid.Equals(generated_info_tuple.m_anchor_guid))
|
||||
{
|
||||
Log.getLogger().info($"m_pickup_pod_generated_info data interaction anchor_guid : {handler.m_interaction_anchor_guid}, reward setted anchor_guid : {generated_info_tuple.m_anchor_guid} ");
|
||||
continue;
|
||||
}
|
||||
|
||||
(group_id, idx) = generated_info.Key;
|
||||
rewarded_anchor_guid = generated_info_tuple.m_anchor_guid;
|
||||
Log.getLogger().info($"rewarded_anchor_guid rewarded_anchor_guid : {rewarded_anchor_guid}, groupId : {group_id}, idx : {idx}");
|
||||
break;
|
||||
}
|
||||
|
||||
if (idx == Int32.MinValue) return result; //보상줄게 없다는 얘기이므로 그량 리턴
|
||||
if(false == battle_instance_room.m_instance_room.getMap().getAnchors().TryGetValue(handler.m_interaction_anchor_guid, out var anchorInfo))
|
||||
{
|
||||
err_msg = $"not exist anchor anchor_guid : {handler.m_interaction_anchor_guid}";
|
||||
Log.getLogger().error(err_msg);
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var table_id = anchorInfo.AnchorProp.TableId;
|
||||
if (false == MetaData.Instance._BattleObjectSpawnGroupMetaTable.TryGetValue(table_id, out var battle_object_spawn_group))
|
||||
{
|
||||
err_msg = $"not exist _BattleObjectSpawnGroupMetaTable anchor_guid : {handler.m_interaction_anchor_guid}, tableid : {table_id}";
|
||||
Log.getLogger().error(err_msg);
|
||||
result.setFail(ServerErrorCode.BattleInstanceObjectMetaNotExist, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var now = DateTimeHelper.Current;
|
||||
var next_gen_time = now.AddSeconds(battle_object_spawn_group.RespawnTime);
|
||||
PickupPodGeneratedInfo assigned_generated_info = new(group_id, idx, string.Empty, rewarded_anchor_guid, next_gen_time);
|
||||
attribute.m_combat_pod_mode.m_pickup_pod_generated_info.AddOrUpdate((group_id, idx), assigned_generated_info, (key, existingValue) => assigned_generated_info);
|
||||
|
||||
var pickup_pod_meta = MetaData.Instance._BattlePickupPodMeta;
|
||||
RewardMutable reward_metable = new();
|
||||
reward_metable.Item = new();
|
||||
reward_metable.Item.Id = pickup_pod_meta.TypeID;
|
||||
reward_metable.Item.Count = pickup_pod_meta.ObjectValue * battle_instance_room.m_hot_time_reward;
|
||||
MetaAssets.Reward reward = new MetaAssets.Reward(reward_metable);
|
||||
List<MetaAssets.Reward> rewards = new(){reward};
|
||||
|
||||
Log.getLogger().info($"pickup pods reward : {JsonConvert.SerializeObject(rewards)}");
|
||||
IReward reward_proc = new RewardPickupPod(player, player.getUserGuid(), rewards);
|
||||
result = await RewardManager.It.proceedRewardProcess(reward_proc);
|
||||
if (result.isFail())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
handler.m_interaction_log_info.m_rewards.AddRange(rewards);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user