150 lines
6.5 KiB
C#
150 lines
6.5 KiB
C#
using GameServer.Contents.Battle.Reward;
|
|
using GameServer.Contents.GameMode.Manage.PlayManage;
|
|
using GameServer.Contents.GameMode.Mode_Battle.Manage;
|
|
using MetaAssets;
|
|
using Newtonsoft.Json;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
using ServerCore;
|
|
|
|
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 GameModeTPSFreeForAll<GameModeTPSFreeForAllData>;
|
|
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 GameModeTPSFreeForAll<GameModeTPSFreeForAllData>;
|
|
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.getInstanceRoom().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;
|
|
}
|
|
|
|
|
|
} |