초기커밋

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,95 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServerCore; using ServerBase;
using ServerCommon;
namespace GameServer
{
internal class SocialActionAction : EntityActionBase
{
public SocialActionAction(SocialAction owner)
: base(owner)
{
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public override void onClear()
{
return;
}
public Result tryEquipSocialAction(UInt16 equipPos)
{
var result = new Result();
var err_msg = string.Empty;
var owner = getOwner();
ArgumentNullException.ThrowIfNull(owner, $"owner is null !!!");
var parent = owner.getRootParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!! - {parent.toBasicString()}");
if (equipPos > ServerCommon.Constant.MAX_SOCIAL_ACTION_SLOT)
{
err_msg = $"Out of Range SocailActionSlot !!! : socialActionSlot:{equipPos} - {parent.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionSlotOutOfRange, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var users_social_action_attribute = getOwner().getEntityAttribute<UserSocialActionAttribute>();
ArgumentNullException.ThrowIfNull(users_social_action_attribute, $"users_social_action_attribute is null !!! - {parent.toBasicString()}");
users_social_action_attribute.EquipedPos = equipPos;
users_social_action_attribute.modifiedEntityAttribute();
return result;
}
public void unequipSocialAction()
{
var owner = getOwner();
ArgumentNullException.ThrowIfNull(owner, $"owner is null !!!");
var parent = owner.getRootParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!! - {parent.toBasicString()}");
var users_social_action_attribute = owner.getEntityAttribute<UserSocialActionAttribute>();
ArgumentNullException.ThrowIfNull(users_social_action_attribute, $"users_social_action_attribute is null !!! - {parent.toBasicString()}");
users_social_action_attribute.EquipedPos = 0;
users_social_action_attribute.modifiedEntityAttribute();
}
public bool isSocialActionOnSlot()
{
var owner = getOwner();
ArgumentNullException.ThrowIfNull(owner, $"owner is null !!!");
var parent = owner.getRootParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!! - {parent.toBasicString()}");
var users_social_action_attribute = owner.getEntityAttribute<UserSocialActionAttribute>();
ArgumentNullException.ThrowIfNull(users_social_action_attribute, $"users_social_action_attribute is null !!! - {parent.toBasicString()}");
if (users_social_action_attribute.EquipedPos == 0)
{
return false;
}
return true;
}
}
}

View File

@@ -0,0 +1,236 @@
using System.Collections.Concurrent;
using System.Diagnostics.CodeAnalysis;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public class SocialActionLoadAction : EntityActionBase
{
private ConcurrentDictionary<int, SocialAction> m_social_actions = new();
public SocialActionLoadAction(EntityBase owner)
: base(owner)
{ }
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public override void onClear()
{
m_social_actions.Clear();
}
public bool isOwnedSocialAction(int socialActionMetaId)
{
return m_social_actions.ContainsKey(socialActionMetaId);
}
public bool tryGetSocialAction(int socialActionMetaId, [MaybeNullWhen(false)] out SocialAction socialAction)
{
return m_social_actions.TryGetValue(socialActionMetaId, out socialAction);
}
public List<SocialAction> getSocialActions()
{
return m_social_actions.Select(x => x.Value).ToList();
}
public async Task<Result> tryAddSocialActionFromDoc(SocialActionDoc socialActionDoc)
{
var result = new Result();
var err_msg = string.Empty;
var owner = getOwner();
var social_action = new SocialAction(owner);
result = await social_action.onInit();
if (result.isFail())
{
return result;
}
var found_social_action_attribute = social_action.getEntityAttribute<UserSocialActionAttribute>();
NullReferenceCheckHelper.throwIfNull(found_social_action_attribute, () => $"found_social_action_attribute is null !!! - {owner.toBasicString()}");
if (false == found_social_action_attribute.copyEntityAttributeFromDoc(socialActionDoc))
{
err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{found_social_action_attribute.getTypeName()}, from:{socialActionDoc.getTypeName()} : {this.getTypeName()} - {owner.toBasicString()}";
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
if (false == m_social_actions.TryAdd((int)found_social_action_attribute.SocialActionMetaId, social_action))
{
err_msg = $"Failed to TryAdd() !!! : {social_action.toBasicString()} : {this.getTypeName()} - {owner.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionDocLoadDuplicatedSocialAction, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
public async Task<Result> tryAddSocialActionFromMetaId(int socialActionMetaId)
{
var result = new Result();
var err_msg = string.Empty;
var owner = getOwner();
if (false == MetaData.Instance._SocialActionTable.TryGetValue(socialActionMetaId, out _))
{
err_msg = $"Failed to TryGetValue() !!! : socialActionMetaId:{socialActionMetaId} - {owner.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
// 최대 획득 조건 추가
var social_action_slot_max = MetaHelper.GameConfigMeta.MaxSocialActionSlot;
if (m_social_actions.Count >= social_action_slot_max)
{
err_msg = $"Social Action Max count exceed !!! : {m_social_actions.Count} <= {social_action_slot_max} - socialActionMetaId:{socialActionMetaId}, {owner.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionSlotOutOfRange, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var social_action = new SocialAction(owner);
await social_action.onInit();
var social_action_attribute = social_action.getEntityAttribute<UserSocialActionAttribute>();
NullReferenceCheckHelper.throwIfNull(social_action_attribute, () => $"social_action_attribute is null !!! - {owner.toBasicString()}");
social_action_attribute.SocialActionMetaId = (uint)socialActionMetaId;
social_action_attribute.newEntityAttribute();
if (!m_social_actions.TryAdd((int)social_action_attribute.SocialActionMetaId, social_action))
{
err_msg = $"Failed to TryAdd() !!! : {social_action.toBasicString()} - {owner.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionAlreadyExist, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
public bool tryGetSocialActionByEquipedPos(UInt16 equipedPos, [MaybeNullWhen(false)] out SocialAction socialAction)
{
socialAction = null;
var owner = getOwner();
foreach (var social_action in m_social_actions.Values)
{
var origin_social_action_attribute = social_action.getOriginEntityAttribute<UserSocialActionAttribute>();
NullReferenceCheckHelper.throwIfNull(origin_social_action_attribute, () => $"origin_social_action_attribute is null !!! - {owner.toBasicString()}");
if (origin_social_action_attribute.EquipedPos == equipedPos)
{
socialAction = social_action;
return true;
}
}
return false;
}
public (Result, List<ILogInvoker>?) tryExchangeSocialActionSlot(int socialActionSlot, int socialActionMetaId)
{
var result = new Result();
var err_msg = string.Empty;
var business_logs = new List<ILogInvoker>();
var player = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
var user_guid = player.getUserGuid();
var old_social_action_meta_id = 0;
if (tryGetSocialActionByEquipedPos((UInt16)socialActionSlot, out var equipedSocialAction))
{
var equiped_social_action_action = equipedSocialAction.getEntityAction<SocialActionAction>();
NullReferenceCheckHelper.throwIfNull(equiped_social_action_action, () => $"equiped_social_action_action is null !!! - {player.toBasicString()}");
// 슬롯에서 제거
equiped_social_action_action.unequipSocialAction();
var equiped_social_action_attribute = equipedSocialAction.getEntityAttribute<UserSocialActionAttribute>();
NullReferenceCheckHelper.throwIfNull(equiped_social_action_attribute, () => $"equiped_social_action_action is null !!! - {player.toBasicString()}");
old_social_action_meta_id = (int)equiped_social_action_attribute.SocialActionMetaId;
}
if (socialActionMetaId == 0)
{
var social_action_slot_exchange_log_info = SocialActionBusinessLogHelper.toSocialActionSlotExchangeLogInfo(user_guid, socialActionSlot, old_social_action_meta_id, socialActionMetaId);
var social_action_slot_exchange_business_log = new SocialActionSlotExchangeBusinessLog(social_action_slot_exchange_log_info);
business_logs.Add(social_action_slot_exchange_business_log);
return (result, business_logs);
}
if (!MetaData.Instance._SocialActionTable.TryGetValue(socialActionMetaId, out var social_action_meta_data))
{
err_msg = $"Failed to TryGetValue() !!! : socialActionMetaId:{socialActionMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null);
}
if (!tryGetSocialAction(socialActionMetaId, out var social_action))
{
err_msg = $"Failed to tryGetSocialAction() !!! : socialActionMetaId:{socialActionMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.SocialActionNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null);
}
var social_action_action = social_action.getEntityAction<SocialActionAction>();
NullReferenceCheckHelper.throwIfNull(social_action_action, () => $"social_action_action is null !!! - {player.toBasicString()}");
result = social_action_action.tryEquipSocialAction((UInt16)socialActionSlot);
if (result.isFail())
{
err_msg = $"Failed to tryEquipSocialAction() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null);
}
{
var social_action_slot_exchange_log_info = SocialActionBusinessLogHelper.toSocialActionSlotExchangeLogInfo(user_guid, socialActionSlot, old_social_action_meta_id, socialActionMetaId);
var social_action_slot_exchange_business_log = new SocialActionSlotExchangeBusinessLog(social_action_slot_exchange_log_info);
business_logs.Add(social_action_slot_exchange_business_log);
}
return (result, business_logs);
}
}

View File

@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServerCore; using ServerBase;
using ServerCommon;
namespace GameServer
{
public class SocialAction : EntityBase
{
public SocialAction(EntityBase parent)
: base(EntityType.SocialAction, parent)
{
}
public override async Task<Result> onInit()
{
var parent = getDirectParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!!");
addEntityAttribute(new UserSocialActionAttribute(this));
addEntityAction(new SocialActionAction(this));
return await base.onInit();
}
public override TAttribute getEntityAttribute<TAttribute>()
{
var parent = getRootParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!!");
TAttribute? to_cast_entity_attribute;
if (typeof(TAttribute) == typeof(SocialActionAttributeBase))
{
to_cast_entity_attribute = base.getEntityAttribute<UserSocialActionAttribute>() as TAttribute;
NullReferenceCheckHelper.throwIfNull(to_cast_entity_attribute, () => $"to_cast_entity_attribute is null !!!");
return to_cast_entity_attribute;
}
to_cast_entity_attribute = base.getEntityAttribute<TAttribute>();
NullReferenceCheckHelper.throwIfNull(to_cast_entity_attribute, () => $"to_cast_entity_attribute is null !!!");
return to_cast_entity_attribute;
}
public override TAttribute getOriginEntityAttribute<TAttribute>()
{
var parent = getRootParent();
ArgumentNullException.ThrowIfNull(parent, $"parent is null !!!");
TAttribute? to_cast_entity_attribute;
if (typeof(TAttribute) == typeof(SocialActionAttributeBase))
{
to_cast_entity_attribute = base.getOriginEntityAttribute<UserSocialActionAttribute>() as TAttribute;
NullReferenceCheckHelper.throwIfNull(to_cast_entity_attribute, () => $"to_cast_entity_attribute is null !!!");
return to_cast_entity_attribute;
}
to_cast_entity_attribute = base.getOriginEntityAttribute<TAttribute>();
NullReferenceCheckHelper.throwIfNull(to_cast_entity_attribute, () => $"to_cast_entity_attribute is null !!!");
return to_cast_entity_attribute;
}
public override string toBasicString()
{
return $"{this.getTypeName()}, SocialActionMetaId:{getOriginEntityAttribute<UserSocialActionAttribute>()?.SocialActionMetaId}";
}
public override string toSummaryString()
{
return $"{this.getTypeName()}, {getEntityAttribute<UserSocialActionAttribute>()?.toSummaryString()}";
}
}
}