Files
2025-05-01 07:20:41 +09:00

60 lines
2.2 KiB
C#

using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public class NotifyCancelSummonHandler
{
public async Task recvCancelSummonHandler(ServerMessage.Types.CancelSummonPartyMemberNoti notify)
{
var global_party = GameServerApp.getServerLogic().findGlobalEntity<GlobalParty>();
NullReferenceCheckHelper.throwIfNull(global_party, () => $"global_party is null !!!");
var global_party_action = global_party.getEntityAction<GlobalPartyAction>();
NullReferenceCheckHelper.throwIfNull(global_party_action, () => $"global_party_action is null !!!");
// 1. 파티 정보 조회
var party = global_party_action.getGlobalPartyDetail(notify.PartyGuid);
if (null == party) return;
// 2. Member 정보 수정
var party_member_attribute = party.getEntityAttribute<PartyMemberAttribute>();
NullReferenceCheckHelper.throwIfNull(party_member_attribute, () => $"party_member_attribute is null !!!");
foreach (var cancel_member in notify.CancelSummonUserGuids)
{
if (!party_member_attribute.getPartyMembers().TryGetValue(cancel_member, out var member)) continue;
member.Summon.clear();
// 2-2.cache 수정
var member_action = party.getEntityAction<GlobalPartyDetailMemberAction>();
NullReferenceCheckHelper.throwIfNull(member_action, () => $"member_action is null !!!");
_ = await member_action.changeMember(member);
}
// 3. 해당 멤버 전송
var client_message = new ClientToGame
{
Message = new ClientToGameMessage
{
NtfCancelSummonPartyMember = new()
}
};
var player_manger = GameServerApp.getServerLogic().getPlayerManager();
ArgumentNullException.ThrowIfNull(player_manger);
foreach (var notify_user in notify.CancelSummonUserGuids)
{
if (!player_manger.tryGetUserByPrimaryKey(notify_user, out var player)) continue;
PartyHelper.sendToClient(client_message, player.getHostId());
}
}
}