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 onInit() { var result = new Result(); return Task.FromResult(result); } public override void onClear() { } public async Task 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 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 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 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; } }