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 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(); 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(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); } }