public async UniTaskVoid HandleRequestChangeGuildLeader(RequestHandlerData requestHandler, RequestChangeGuildLeaderMessage request, RequestProceedResultDelegate <ResponseChangeGuildLeaderMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseChangeGuildLeaderMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanChangeGuildLeader(playerCharacter, request.memberId); if (!validateResult.IsSuccess) { result.InvokeError(new ResponseChangeGuildLeaderMessage() { message = validateResult.GameMessage, }); return; } // Save to database AsyncResponseData <GuildResp> updateResp = await DbServiceClient.UpdateGuildLeaderAsync(new UpdateGuildLeaderReq() { GuildId = validateResult.GuildId, LeaderCharacterId = request.memberId }); if (!updateResp.IsSuccess) { result.InvokeError(new ResponseChangeGuildLeaderMessage() { message = validateResult.GameMessage, }); return; } AsyncResponseData <GuildResp> updateRoleResp = await DbServiceClient.UpdateGuildMemberRoleAsync(new UpdateGuildMemberRoleReq() { GuildId = validateResult.GuildId, MemberCharacterId = request.memberId, GuildRole = validateResult.Guild.GetMemberRole(request.memberId) }); if (!updateRoleResp.IsSuccess) { result.InvokeError(new ResponseChangeGuildLeaderMessage() { message = validateResult.GameMessage, }); return; } // Update cache byte swappingGuildRole = validateResult.Guild.GetMemberRole(request.memberId); validateResult.Guild.SetLeader(request.memberId); validateResult.Guild.SetMemberRole(playerCharacter.Id, swappingGuildRole); playerCharacter.GuildRole = swappingGuildRole; GameInstance.ServerGuildHandlers.SetGuild(validateResult.GuildId, validateResult.Guild); // Broadcast via chat server if (ClusterClient.IsNetworkActive) { ClusterClient.SendChangeGuildLeader(MMOMessageTypes.UpdateGuild, validateResult.GuildId, request.memberId); } GameInstance.ServerGameMessageHandlers.SendSetGuildLeaderToMembers(validateResult.Guild); GameInstance.ServerGameMessageHandlers.SendSetGuildMemberRoleToMembers(validateResult.Guild, request.memberId, 0); result.InvokeSuccess(new ResponseChangeGuildLeaderMessage()); #endif }