public async UniTaskVoid HandleRequestIncreaseGuildSkillLevel(RequestHandlerData requestHandler, RequestIncreaseGuildSkillLevelMessage request, RequestProceedResultDelegate <ResponseIncreaseGuildSkillLevelMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD await UniTask.Yield(); IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.InvokeError(new ResponseIncreaseGuildSkillLevelMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanIncreaseGuildSkillLevel(playerCharacter, request.dataId); if (!validateResult.IsSuccess) { result.InvokeError(new ResponseIncreaseGuildSkillLevelMessage() { message = validateResult.GameMessage, }); return; } // Save to database AsyncResponseData <GuildResp> updateResp = await DbServiceClient.AddGuildSkillAsync(new AddGuildSkillReq() { GuildId = validateResult.GuildId, SkillId = request.dataId, }); if (!updateResp.IsSuccess) { result.InvokeError(new ResponseIncreaseGuildSkillLevelMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } GuildData guild = updateResp.Response.GuildData; GameInstance.ServerGuildHandlers.SetGuild(validateResult.GuildId, guild); // Broadcast via chat server if (ClusterClient.IsNetworkActive) { ClusterClient.SendSetGuildSkillLevel(MMOMessageTypes.UpdateGuild, validateResult.GuildId, request.dataId, guild.GetSkillLevel(request.dataId)); ClusterClient.SendSetGuildLevelExpSkillPoint(MMOMessageTypes.UpdateGuild, validateResult.GuildId, guild.level, guild.exp, guild.skillPoint); } GameInstance.ServerGameMessageHandlers.SendSetGuildSkillLevelToMembers(guild, request.dataId); GameInstance.ServerGameMessageHandlers.SendSetGuildLevelExpSkillPointToMembers(guild); result.InvokeSuccess(new ResponseIncreaseGuildSkillLevelMessage()); #endif }