Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá galera do Tibia King , hoje estou aqui para ensinar a vocês como criar um súave lago.

Bom vamos ao tutorial.

ABERTURA.jpg

Aprenda, neste tutorial, uma técnica bastante interessante para criar a superfície realista de um lago no Photohop com o recurso

Displacement Map.

1) Essa técnica é excelente para criar um movimento de água sobre uma superfície calma de um lago. Porém, não é indicada para fazer, por exemplo, a correnteza de um rio onde os movimentos são mais intensos e totalmente disformes. Quem cria o efeito é o Displacement Map. Mas esse filtro precisa de um mapa com informações para criar as distorções sobre a imagem.

Antes de criar esse mapa, providencie a imagem de uma paisagem, como a mostrada no exemplo abaixo. A imagem deve ter bastante área livre no primeiro plano, como um campo com montanhas ao fundo, no modo RGB. Para criar o mapa, abra uma nova camada sobre a paisagem e faça nela uma seleção retangular. Preencha a seleção com branco.

1.jpg

2) Aplique o filtro Noise sobre o preenchimento em Filter > Noise > Add Noise. Nesse painel, em Amount, aplique 400% de valor e deixe os itens Gaussian e Monochromatic ativados.

2.jpg

3) Agora, desfoque esse ruído usando o filtro Gaussian Blur. Use um valor de 2 pixels em Radius.

3.jpg

4) Para criar a informação de distorção para o mapa, vamos precisar de dois canais, o Red e o Green. Usar apenas o canal RGB não irá funcionar para essa distorção.

4.jpg

5) Ative o painel Channels e selecione primeiro o Red. Em seguida, vá em Filter > Stylize > Emboss.

Em Angle, aplique 90º, deixe em 4 pixels o valor de Height e deixe o Amount em 500%.

5.jpg

6) Mude para o canal Green e repita o processo, apenas mudando o ângulo para 180º. Volte a ativar o canal RGB e você terá um resultado semelhante ao mostrado no exemplo abaixo.

6.jpg

7) Crie uma perspectiva no retângulo em Edit > Transform > Perspective. Exagere a distorção da parte inferior do retângulo, arrastando as bordas para além da moldura do documento.

7.jpg

8) Após a primeira distorção, dê Enter e vá em Image > Trim para eliminar as informações ocultas que ficaram fora do documento. Repita o processo da ferramenta Perspective, para distorcer ainda mais a informação até ela ficar semelhante ao exemplo abaixo. Não se esqueça de, depois da distorção, sempre aplicar um Trim.

8.jpg

9) Desative, momentaneamente, a visualização da camada da imagem e, em File > Save As, salve este arquivo com um outro nome, no formato PSD. Salvei como Mapa.

9.jpg

10) Volte a ativar a visualização da camada da imagem. Em seguida, com a ferramenta de seleção retangular, selecione a parte superior da imagem, tendo como referência a altura da forma distorcida. Pressione as teclas Command+J para criar uma cópia da parte da imagem selecionada e, em seguida, inverta a imagem em Edit > Transform > Flip Vertical. Desligue a visualização do objeto distorcido e dê um Trim.

10.jpg

11) Com a tecla Command pressionada, clique sobre a miniatura da imagem invertida no painel Layers para ativar uma seleção em volta da forma. Abra uma nova camada abaixo dessa camada da imagem invertida e preencha com um azul de tom médio. Se preferir, você pode usar o conta gotas e coletar um tom de azul de alguma parte da própria imagem. No exemplo abaixo, foi usado um tom de azul de uma das partes das montanhas.

11.jpg

12) Na camada da imagem invertida, faça uma máscara de opacidade usando um gradiente composto por preto e branco. Isso irá criar a transição da imagem sobre o fundo azul, valorizando o reflexo do lago.

12.jpg

13) Agora, no mesmo layer, clique só em cima do ícone da imagem e aplique em Filter > Blur a opção Motion Blur. Aplique um ângulo de 90º e deixe o valor de Distance em mais ou menos 29 pixels, criando na imagem um desfoque, que dará mais realidade à cena.

13.jpg

14) E agora, a aplicação do tão esperado filtro Displacement Map. Continue nesta mesma

camada e vá em Filter > Distort > Displace. Neste painel, quanto maior o valor colocado nas escalas vertical e horizontal, maior vai ser a distorção do filtro sobre a superfície da imagem. O ideal para esse efeito é sempre colocar, na escala vertical, metade do valor aplicado na escala horizontal. No caso do exemplo abaixo, apliquei 30 no horizontal e 15 na vertical.

14.jpg

15) Quando você clicar em Ok no painel Displace, ele irá abrir uma janela na qual você deve procurar o mapa de distorção salvo anteriormente. Selecione o mapa, clique em abrir e a distorção já irá acontecer sobre a imagem.

15.jpg



Creditos:

MatheusVidaLoka

PhotoPro

Ajudei? Reputar Cai o dedo? Acho que não

fdrule_SEPARADOR_DE_TEXTO.gif

Mapper : 80%

Scripter : 40%

Client Maker : 100%

Spriter : 100%

Web Designer : Aprendendo

fdrule_SEPARADOR_DE_TEXTO.gif

Meus Mapas :

sign3zb.jpg

Link para o post
Compartilhar em outros sites

Obrigado , assim como ajudou voce pode ajudar outros , obrigado por comentar , avaliar , e reputar ^^

Ajudei? Reputar Cai o dedo? Acho que não

fdrule_SEPARADOR_DE_TEXTO.gif

Mapper : 80%

Scripter : 40%

Client Maker : 100%

Spriter : 100%

Web Designer : Aprendendo

fdrule_SEPARADOR_DE_TEXTO.gif

Meus Mapas :

sign3zb.jpg

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Underewar
      Tutorial: Criando um Sistema de Enviar efeito com OTClient.


       
      Neste tutorial, vamos criar um sistema simples de Enviar efeito no OTClient.
      Este sistema permitirá que os jogadores ativem um efeito especial e vejam uma janela ao clicar em um botão específico.
      Pré-requisitos:
      Ambiente de Desenvolvimento:
      Certifique-se de ter um ambiente de desenvolvimento configurado com OTClient Edubart. Conhecimento Básico em Lua:
      Familiaridade com a linguagem de script Lua.
       
      Passo 1: Estrutura do projeto
       
      Organize seu projeto conforme abaixo:

      OTC / MODS



      Passo 2: Criando a Interface Gráfica (OTUI)

      game_pass.otui
      Repare que em nossa interface nossos botões de ação entram no caminho do module e iniciam uma função que esta disponivel em nosso game_pass.lua (Client-Side)

       



      Passo 3: Criando funções Client-Side

      Agora com as funções criada podemos chamar elas de acordo com a necessidade em nosso arquivo de interface.
      Por exemplo a função effect() que foi chamada em nosso arquivo de interface.otui agora é criada aqui para mostrar o efeito ao jogador.

      game_pass.lua
       
       
      Passo 4: Registrando o novo Mod

      Agora podemos registrar e iniciar nosso modulo usando o arquivo de configuração

      game_pass.otmod
       

      Feito isso ja podemos ver nosso module no client e enviar opcodes através do gameprotocol e também receber o buffer para manipular os dados podemos utilizar :
      protocolGame:sendExtendedOpcode(14, "1")
      Basicamente oque estamos fazendo é armazenando o valor 1 na variaval 14 do ExtendedOpcode e futuramente podemos recuperar esse valor.

      Recuperamos esse valor em nosso server side data/creatuerscript/otc/game_pass.lua

      Verificando se o opcode é 14 se for 14 então fazemos x ação.

      Show, tendo isso em mente para que o nosso client-side consiga receber com sucesso o efeito enviado ao jogador então utilizamos 

      Passo 5: Criando o Server-side responsavel por enviar o efeito correto ao jogador dependendo do opcode selecionado no nosso cliente.

      data/creaturescripts/otc/game_pass.lua
       
      Passo 6: Registrando o evento para evitar erros futuros!
      Para que tudo funcione corretamente sem erros é  necessário registrar o evento no creaturescript.xml / login.lua

      creaturescript.xml
      <event type="extendedopcode" name="GamePass" script="otc/game_pass.lua" />
      login.lua
          player:registerEvent("GamePass")  


      Ótimo agora ao selecionar o menu recompensa o jogador recebera um efeito.

      Espero que tenha ficado claro como usar Opcodes/ExetendedOpcodes.

      Arquivos usados no tutorrial:
      OTC MODULE
      game_pass.rar
      Creaturescript
      game_pass.lua

      Vi muitos tutoriais desatualizado então resolvi trazer esse!
      Reparem que nesse caso passamos creature como parametro do buffer isso porque precisamos enviar um efeito no player.

      Melhorando a formatação com JSON Encoder

       
       
    • Por Mateus Robeerto
      este é um tutorial de como usar um cliente com spr/dat estendido e protegido pelo CAB.
       
      fiz um video mostrando como usar um client com spr/dat estendido sem o error, basta seguir passo a passo o que eu fiz, em resumo voce precisara copiar seu dat estendido pra outro local para poder editar ele, salvando ele como não estendido e dps renomeando para poder usar junto com o original e compilando tudo com o programa cab...
       
      A DLL ajuda o cliente a ler as 2 dat (compilada pelo programa cab) , sem ela o cliente não abre, caso o teu cliente tenha o bug do ctrl+n ou alguns outros bugs que eu vi em alguns casos, a DLL tem a função de arrumar a maioria deles.
       
       
       
       
       
      LINK DOWNLOAD
       
       
      https://www.mediafire.com/file/kxqkywxeijk8hn2/programa_para_oldclient.rar/file
      ou
      creator cab
      https://drive.google.com/file/d/19b-EqpS-RmOQ_1o7ubb2a7j6RKcijjUa/view?usp=sharing
      scan https://www.virustotal.com/gui/file/4398e414d680ac26addbedc1f20bd59a82b546a1633abbb02b13d2f7150e950e/detection
      DLL
      https://drive.google.com/file/d/1T8XgwgHJAO9sgw5WR809GjMfej2NvP3n/view?usp=sharing
      SCAN https://www.virustotal.com/gui/file/539f0f7187c668457a14d87603e075ab5d1b6f6ac6a17aabf2b591fc3c177741/detection
       stup-pe hoohar o client
      https://drive.google.com/file/d/1cwR1wj3M8IsvxmIt5pQhZ4-DlFSMQVal/view?usp=sharing
      scan https://www.virustotal.com/gui/file/d06889d61474ee9480947956e52916fb997a3717e9f59d3ed830b5c780e81340/detection
       
       
       
    • Por oclipper
      Nesse video eu ensino como encontrar os Address e Offsets basicos para OTClient, eu usei meu bot como exemplo, com essses dados voce pode atualizar e conseguir utilizar bastantes funçoes do bot (heal, mana train, auto utamo/hur, etc)

      tipos de variaveis pra cada offset:
      name = string
      hp = double
      mana = double
      light = 1 byte
      color = 1 byte
      flags = 4 byte
      speed = 4 byte
      pos x = 4 byte
      pos y = 4 byte
      pos z = 1 byte
      id = 4 byte 
      hp% = 1 byte
      direcao = 4 byte
      skull = 1 byte
    • Por EddyHavoc
      Resumo
      A maneira atual para implementar Modal Window é um pouco complicada. Atualmente precisamos cria-la em algum lugar, registrar o evento, adicionar os botões em uma ordem específica, definir o ID da janela, dos botões e da escolha. Isso não é o ideal, então esta biblioteca foi criada pelo Non Sequitur para ajudar nisso. E eu estou trazendo para a OtServBrasil.

      Exemplo/ Tutorial Usando Modal Window
       
      Instalando
      Adicionar em data/lib/lib.lua dofile('data/lib/modalwindow.lua') Crie o arquivo modalwindow.lua com o seguinte conteúdo em data/lib if not modalWindows then modalWindows = { modalWindowConstructor = ModalWindow, nextFreeId = 500, windows = {} } end local MT = {} MT.__index = MT function ModalWindow(...) local args = {...} if type(args[1]) == 'table' then local self = setmetatable(args[1], MT) local id = modalWindows.nextFreeId self.id = id self.buttons = {} self.choices = {} self.players = {} self.created = false modalWindows.nextFreeId = id + 1 table.insert(modalWindows.windows, self) return self end return modalWindows.modalWindowConstructor(...) end function MT:setDefaultCallback(callback) self.defaultCallback = callback end function MT:addButton(text, callback) local button = {text = tostring(text), callback = callback} table.insert(self.buttons, button) return button end function MT:addButtons(...) for _, text in ipairs({...}) do table.insert(self.buttons, {text = tostring(text)}) end end function MT:addChoice(text) local choice = {text = tostring(text)} table.insert(self.choices, choice) return choice end function MT:addChoices(...) for _, text in ipairs({...}) do table.insert(self.choices, {text = tostring(text)}) end end function MT:setDefaultEnterButton(text) self.defaultEnterButton = text end function MT:setDefaultEscapeButton(text) self.defaultEscapeButton = text end function MT:setTitle(title) self.title = tostring(title) end function MT:setMessage(message) self.message = tostring(message) end local buttonOrder = { [4] = {3, 4, 2, 1}, [3] = {2, 3, 1}, [2] = {1, 2}, [1] = {1} } function MT:create() local modalWindow = modalWindows.modalWindowConstructor(self.id, self.title, self.message) local order = buttonOrder[math.min(#self.buttons, 4)] if order then for _, i in ipairs(order) do local button = self.buttons[i] modalWindow:addButton(i, button.text) button.id = i if button.text == self.defaultEnterButton then modalWindow:setDefaultEnterButton(i) elseif button.text == self.defaultEscapeButton then modalWindow:setDefaultEscapeButton(i) end end end for _, choice in ipairs(self.choices) do modalWindow:addChoice(_, choice.text) choice.id = _ end self.modalWindow = modalWindow end function MT:sendToPlayer(player) if not self.modalWindow then self:create() end player:registerEvent('ModalWindowHelper') self.players[player:getId()] = true return self.modalWindow:sendToPlayer(player) end Adicionar em data/creaturescripts/craturescripts.xml <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" /> Crie o arquivo modalwindowhelper.lua com o seguinte conteúdo em data/creaturescripts/scripts/ function onModalWindow(player, modalWindowId, buttonId, choiceId) local modalWindow for _, window in ipairs(modalWindows.windows) do if window.id == modalWindowId then modalWindow = window break end end if not modalWindow then return true end local playerId = player:getId() if not modalWindow.players[playerId] then return true end modalWindow.players[playerId] = nil local choice = modalWindow.choices[choiceId] for _, button in ipairs(modalWindow.buttons) do if button.id == buttonId then local callback = button.callback or modalWindow.defaultCallback if callback then callback(button, choice) break end end end return true end  
      Pronto!
       
      Espero que gostem. Posteriormente irei postar um tutorial de como usar/ aplicar e alguns scripts utilizando a Biblioteca.
    • Por Endless
      Olá meus senhores, hoje venho trazer pra vocês 1 tutorial que li a muito tempo atrás e me ajudou muito. O tutorial não é meu, mas vejo que muita gente, muita gente mesmo não conhece esse módulo do apache, então achei válido trazer pra comunidade. Espero que ajude alguém!!
      O módulo que venho apresentar a vocês é o mod_evasive do Apache.
       
      Sobre ele:
       

      Instalando o mod_evasive:

       

      Configurando o mod_evasive:
       

      Carregando o módulo mod_evasive no apache:
       

      Teste da proteção DDoS
       

      Conclusão
       

      Créditos:

      https://sempreupdate.com.br/mod_evasive-no-apache-oferece-protecao-contra-ataque-de-ddos/
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo