public async UniTaskVoid HandleRequestChangeGuildRole(RequestHandlerData requestHandler, RequestChangeGuildRoleMessage request, RequestProceedResultDelegate <ResponseChangeGuildRoleMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseChangeGuildRoleMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanChangeGuildRole(playerCharacter, request.guildRole, request.name); if (!validateResult.IsSuccess) { result.InvokeError(new ResponseChangeGuildRoleMessage() { message = validateResult.GameMessage, }); return; } // Save to database AsyncResponseData <GuildResp> updateResp = await DbServiceClient.UpdateGuildRoleAsync(new UpdateGuildRoleReq() { GuildId = validateResult.GuildId, GuildRole = request.guildRole, RoleName = request.name, CanInvite = request.canInvite, CanKick = request.canKick, ShareExpPercentage = request.shareExpPercentage }); if (!updateResp.IsSuccess) { result.InvokeError(new ResponseChangeGuildRoleMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } // Update cache validateResult.Guild.SetRole(request.guildRole, request.name, request.canInvite, request.canKick, request.shareExpPercentage); GameInstance.ServerGuildHandlers.SetGuild(validateResult.GuildId, validateResult.Guild); // Change characters guild role IPlayerCharacterData memberCharacter; foreach (string memberId in validateResult.Guild.GetMemberIds()) { if (GameInstance.ServerUserHandlers.TryGetPlayerCharacterById(memberId, out memberCharacter)) { if (validateResult.Guild.GetMemberRole(memberCharacter.Id) == request.guildRole) { memberCharacter.SharedGuildExp = request.shareExpPercentage; } } } // Broadcast via chat server if (ClusterClient.IsNetworkActive) { ClusterClient.SendSetGuildRole(MMOMessageTypes.UpdateGuild, validateResult.GuildId, request.guildRole, request.name, request.canInvite, request.canKick, request.shareExpPercentage); } GameInstance.ServerGameMessageHandlers.SendSetGuildRoleToMembers(validateResult.Guild, request.guildRole, request.name, request.canInvite, request.canKick, request.shareExpPercentage); result.InvokeSuccess(new ResponseChangeGuildRoleMessage()); #endif }