91 lines
3.1 KiB
C#
91 lines
3.1 KiB
C#
using Google.Protobuf;
|
|
using Google.Protobuf.WellKnownTypes;
|
|
|
|
|
|
using ServerCore;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
using ServerCommon.BusinessLogDomain;
|
|
using MetaAssets;
|
|
|
|
|
|
namespace GameServer;
|
|
|
|
public class RentalVisitAction : EntityActionBase
|
|
{
|
|
public RentalVisitAction(Player owner)
|
|
: base(owner)
|
|
{ }
|
|
|
|
public override async Task<Result> onInit()
|
|
{
|
|
var result = new Result();
|
|
return await Task.FromResult(result);
|
|
}
|
|
|
|
public override void onClear()
|
|
{
|
|
return;
|
|
}
|
|
|
|
public Result setRentalInstanceVisitFromDoc(RentalInstanceVisitDoc doc)
|
|
{
|
|
var result = new Result();
|
|
|
|
var owner = getOwner() as Player;
|
|
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
|
|
var rental_instance_visit_attribute = owner.getEntityAttribute<RentalInstanceVisitAttribute>();
|
|
|
|
if (rental_instance_visit_attribute is null)
|
|
{
|
|
var err_msg = $"Fail to get rental_instance_visit_attribute";
|
|
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
|
return result;
|
|
}
|
|
|
|
if (false == doc.getAttribWrappers().TryGetValue(typeof(RentalInstanceVisitAttrib), out var to_copy_doc_attrib))
|
|
{
|
|
var err_msg = $"Fail to get RentalInstanceVisitAttrib";
|
|
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
|
return result;
|
|
}
|
|
|
|
var attrib_base = to_copy_doc_attrib.getAttribBase();
|
|
var doc_attrib = attrib_base as RentalInstanceVisitAttrib;
|
|
if (doc_attrib is null)
|
|
{
|
|
var err_msg = $"Fail to get RentalInstanceVisitAttrib";
|
|
result.setFail(ServerErrorCode.EntityAttributeNotFound, err_msg);
|
|
return result;
|
|
}
|
|
|
|
foreach (var visitor in doc_attrib.m_rental_instance_visit_guid)
|
|
{
|
|
rental_instance_visit_attribute.m_rental_instance_visit.AddOrUpdate(visitor.Key, visitor.Value, (key, oldValue) => visitor.Value);
|
|
}
|
|
|
|
rental_instance_visit_attribute.m_next_refresh_time = doc_attrib.m_next_refresh_time;
|
|
|
|
rental_instance_visit_attribute.syncOriginDocBaseWithNewDoc<RentalInstanceVisitAttribute>(doc);
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
public void refresh(RentalInstanceVisitAttribute attribute)
|
|
{
|
|
var player = getOwner();
|
|
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
|
|
|
var now = DateTimeHelper.Current;
|
|
//시간 안됐으므로 리턴
|
|
if (attribute.m_next_refresh_time > now) return;
|
|
|
|
|
|
attribute.m_next_refresh_time = DateTimeHelper.Current.Date.AddDays(1);
|
|
attribute.m_rental_instance_visit = new();
|
|
|
|
attribute.modifiedEntityAttribute(true);
|
|
}
|
|
} |