public async UniTaskVoid HandleRequestCreateGuild(RequestHandlerData requestHandler, RequestCreateGuildMessage request, RequestProceedResultDelegate <ResponseCreateGuildMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseCreateGuildMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = playerCharacter.CanCreateGuild(request.guildName); if (!validateResult.IsSuccess) { result.InvokeError(new ResponseCreateGuildMessage() { message = validateResult.GameMessage, }); return; } string guildName = request.guildName.Trim(); if (!NameValidating.ValidateGuildName(guildName)) { result.InvokeError(new ResponseCreateGuildMessage() { message = UITextKeys.UI_ERROR_INVALID_GUILD_NAME }); return; } AsyncResponseData <FindGuildNameResp> findGuildNameResp = await DbServiceClient.FindGuildNameAsync(new FindGuildNameReq() { GuildName = guildName, }); if (!findGuildNameResp.IsSuccess) { result.InvokeError(new ResponseCreateGuildMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } if (findGuildNameResp.Response.FoundAmount > 0) { result.InvokeError(new ResponseCreateGuildMessage() { message = UITextKeys.UI_ERROR_GUILD_NAME_EXISTED, }); return; } AsyncResponseData <GuildResp> createGuildResp = await DbServiceClient.CreateGuildAsync(new CreateGuildReq() { LeaderCharacterId = playerCharacter.Id, GuildName = guildName, }); if (!createGuildResp.IsSuccess) { result.InvokeError(new ResponseCreateGuildMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } // Update cache GuildData guild = createGuildResp.Response.GuildData; GameInstance.Singleton.SocialSystemSetting.DecreaseCreateGuildResource(playerCharacter); GameInstance.ServerGuildHandlers.SetGuild(guild.id, guild); playerCharacter.GuildId = guild.id; playerCharacter.GuildRole = guild.GetMemberRole(playerCharacter.Id); playerCharacter.SharedGuildExp = 0; // Broadcast via chat server if (ClusterClient.IsNetworkActive) { ClusterClient.SendCreateGuild(MMOMessageTypes.UpdateGuild, guild.id, guildName, playerCharacter.Id); ClusterClient.SendAddSocialMember(MMOMessageTypes.UpdateGuildMember, guild.id, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level); } GameInstance.ServerGameMessageHandlers.SendSetGuildData(requestHandler.ConnectionId, guild); GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToOne(requestHandler.ConnectionId, guild); result.InvokeSuccess(new ResponseCreateGuildMessage()); #endif }