초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,171 @@
using MetaAssets;
using ServerCommon;
using ServerCore; using ServerBase;
namespace GameServer;
public class BattleObjectInteractAction : EntityActionBase
{
public BattleObjectInteractAction(EntityBase owner) : base(owner)
{
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public override void onClear()
{
}
public async Task<Result> interactCommonBattleObject(BattleObjectInteractionLogicHandler handler, Player player)
{
await Task.CompletedTask;
var result = new Result();
updateBattleObjectActiveInfo(handler);
return result;
}
public async Task<Result> interactPickupPod(BattleObjectInteractionLogicHandler handler, Player player)
{
await Task.CompletedTask;
var result = new Result();
updateBattleObjectActiveInfo(handler);
Log.getLogger().info($"interaction pickup pod player : {player.toBasicString()}, guid : {handler.m_interaction_anchor_guid}, next active time : {handler.m_battle_object.m_active_time}");
var battle_instance_room = getOwner() as BattleInstanceRoom;
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"battle_instance_room is null !!!");
var attribute = battle_instance_room.getEntityAttribute<BattleInstanceSnapshotAttribute>();
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!");
//보상처리
var reward_action = battle_instance_room.getEntityAction<BattleObjectRewardAction>();
NullReferenceCheckHelper.throwIfNull(reward_action, () => $"handler.m_pod_combat is null !!!");
result = await reward_action.pickupPodReward(player, attribute, handler);
return result;
}
public async Task<Result> interactPodStorage(BattleObjectInteractionLogicHandler handler, Player player)
{
await Task.CompletedTask;
var result = new Result();
var battle_instance_room = getOwner() as BattleInstanceRoom;
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"battle_instance_room is null !!!");
var attribute = battle_instance_room.getEntityAttribute<BattleInstanceSnapshotAttribute>();
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!");
bool has_pod_combat = hasPodCombat(handler.m_interaction_anchor_guid, attribute, handler);
handler.m_interaction_log_info.m_has_pod_combat = has_pod_combat;
handler.m_interaction_log_info.m_pod_type = ECombatPodType.Storage;
var now = DateTimeHelper.Current;
if (has_pod_combat)
{
NullReferenceCheckHelper.throwIfNull(handler.m_pod_combat, () => $"handler.m_pod_combat is null !!!");
var pod_combat = handler.m_pod_combat;
handler.m_is_need_combat_pod_noti = true;
pod_combat.m_state = PodCombatStateType.Possesion;
pod_combat.m_currenct_Pos = player.getCurrentPositionInfo().Pos;
pod_combat.m_state_change_time = now;
pod_combat.m_active_time = now;
pod_combat.m_current_occupier_guid = player.getUserGuid();
pod_combat.m_occupied_time = now;
foreach (var stand in attribute.m_combat_pod_mode.m_pod_storages.Values)
{
stand.m_is_active = false;
handler.m_need_noti_objects.Add(stand);
}
handler.m_interaction_log_info.m_pod_combat_pos = pod_combat.m_currenct_Pos;
handler.m_interaction_log_info.m_pod_combat_state = pod_combat.m_state;
}
else
{
//보상 줘야되면 보상 처리
var reward_action = battle_instance_room.getEntityAction<BattleObjectRewardAction>();
NullReferenceCheckHelper.throwIfNull(reward_action, () => $"handler.m_pod_combat is null !!!");
result = await reward_action.podStorageReward(player, attribute, handler);
}
return result;
}
public void updateBattleObjectActiveInfo(BattleObjectInteractionLogicHandler handler)
{
var now = DateTimeHelper.Current;
var next_active_time = now.AddSeconds(handler.m_battle_object_meta.RespawnTime);
handler.m_object_active_time = handler.m_interaction_log_info.m_object_next_active_time = handler.m_battle_object.m_active_time = next_active_time;
handler.m_battle_object.m_is_active = handler.m_interaction_log_info.m_is_active = false;
}
public async Task<Result> interactPodCombat(BattleObjectInteractionLogicHandler handler, Player player)
{
await Task.CompletedTask;
var result = new Result();
var battle_instance_room = getOwner() as BattleInstanceRoom;
NullReferenceCheckHelper.throwIfNull(battle_instance_room, () => $"battle_instance_room is null !!!");
string err_msg = string.Empty;
var attribute = battle_instance_room.getEntityAttribute<BattleInstanceSnapshotAttribute>();
NullReferenceCheckHelper.throwIfNull(attribute, () => $"battle_instance_attribute is null !!!");
var combat_pod = handler.m_pod_combat = attribute.m_combat_pod_mode.m_pod_combat;
if (false == combat_pod.m_current_occupier_guid.Equals(string.Empty) && false == combat_pod.m_state.Equals(PodCombatStateType.Dropped))
{
//다른 유저가 소유중일때는 상호 작용 할수 없다.
err_msg = $"Pod Combat Already accupied Player : {player.toBasicString()}, possessioned user : {combat_pod.m_current_occupier_guid}";
result.setFail(ServerErrorCode.BattleInstancePodCombatAlreadyOccupy, err_msg);
Log.getLogger().error(err_msg);
return result;
}
handler.m_is_need_combat_pod_noti = true;
var now = DateTimeHelper.Current;
combat_pod.m_state = PodCombatStateType.Possesion;
combat_pod.m_currenct_Pos = player.getCurrentPositionInfo().Pos;
combat_pod.m_state_change_time = now;
combat_pod.m_current_occupier_guid = player.getUserGuid();
combat_pod.m_occupied_time = now;
handler.m_interaction_log_info.m_battle_object_type = EBattleObjectType.Pod_Combat;
handler.m_interaction_log_info.m_pod_type = ECombatPodType.Pod;
handler.m_interaction_log_info.m_pod_combat_pos = combat_pod.m_currenct_Pos;
handler.m_interaction_log_info.m_pod_combat_state = combat_pod.m_state;
return result;
}
private bool hasPodCombat(string anchorGuid, BattleInstanceSnapshotAttribute attribute, BattleObjectInteractionLogicHandler handler)
{
var pod_combat = attribute.m_combat_pod_mode.m_pod_combat;
if (pod_combat.m_source_storage_anchor_guid.Equals(anchorGuid) && pod_combat.m_state.Equals(PodCombatStateType.Active))
{
handler.m_pod_combat = pod_combat;
return true;
}
return false;
}
}