Files
caliverse_server/GameServer/Contents/OwnedLand/Action/OwnedLandAgentAction.cs
2025-05-01 07:20:41 +09:00

102 lines
3.1 KiB
C#

using ServerCommon;
using ServerCore; using ServerBase;
using System.Collections.Concurrent;
using System.Diagnostics.CodeAnalysis;
namespace GameServer
{
internal class OwnedLandAgentAction : EntityActionBase
{
ConcurrentDictionary<int, OwnedLand> m_owned_lands = new();
public OwnedLandAgentAction(Player owner)
: base(owner)
{ }
public override async Task<Result> onInit()
{
var result = new Result();
return await Task.FromResult(result);
}
public override void onClear()
{
m_owned_lands.Clear();
}
public bool tryGetOwnedLand(int landMetaId, [MaybeNullWhen(false)] out OwnedLand ownedLand)
{
return m_owned_lands.TryGetValue(landMetaId, out ownedLand);
}
public List<OwnedLand> getOwnedLands()
{
return m_owned_lands.Values.ToList();
}
public List<int> getOwnedLandMetaIds()
{
var land_meta_ids = new List<int>();
foreach (var owned_land in m_owned_lands.Values)
{
var land_meta_id = owned_land.getLandMetaId();
land_meta_ids.Add(land_meta_id);
}
return land_meta_ids;
}
public bool isOwnedLand(int landMetaId)
{
return m_owned_lands.ContainsKey(landMetaId);
}
public void addOwnedLand(int landMetaId, OwnedLand ownedLand)
{
m_owned_lands[landMetaId] = ownedLand;
}
public void removeOwnedLand(int landMetaId)
{
m_owned_lands.TryRemove(landMetaId, out _);
}
public async Task<Result> tryAddOwnedLandFromDoc(OwnedLandDoc ownedLandDoc)
{
var result = new Result();
var err_msg = string.Empty;
var player = getOwner() as Player;
ArgumentNullException.ThrowIfNull(player);
var owned_land = new OwnedLand(player);
await owned_land.onInit();
var owned_land_attribute = owned_land.getEntityAttribute<OwnedLandAttribute>();
ArgumentNullException.ThrowIfNull(owned_land_attribute);
if (!owned_land_attribute.copyEntityAttributeFromDoc(ownedLandDoc))
{
err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{owned_land_attribute.getTypeName()}, from:{ownedLandDoc.getTypeName()} : {this.getTypeName()}";
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
if (!m_owned_lands.TryAdd((int)owned_land_attribute.LandMetaId, owned_land))
{
err_msg = $"Failed to TryAdd() !!! : {owned_land_attribute.toBasicString()} : {this.getTypeName()}";
result.setFail(ServerErrorCode.OwnedLandDocLoadDuplicatedOwnedLand, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
}
}