Ir para conteúdo

duduprec

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Curtir
    duduprec deu reputação a GamerGoiano em APaguem esse post   
    APaguem esse post
  2. Curtir
    duduprec deu reputação a Guilherme em Salve uma vida!   
    Com certeza você já viu uma das sprites dele no seu servidor favorito, seja ele Pxg, Otp, Immortals, Padventures, Grand Line Adventures, Archlight, Shadowrealm e em inúmeros outros projetos e servidores.
     
    Pai de duas filhas, uma pessoa extremamente dedicada, um artista excepcional, Miller hoje precisa da sua ajuda!!
     
    Iven Miller dos Santos está precisando de doação de sangue de QUALQUER TIPAGEM, para que seja dada continuidade ao tratamento de Leucemia Aguda.

    As doações deverão ser feitas em nome do mesmo, no HU (Hospital Universitário Prof. Alberto Antunes) Tabuleiro dos Martins.
     
    Se você for de Alagoas/Maceió e puder doar sangue, entre em contato inbox.
     
    ----------------
    ATUALIZAÇÃO:
    Infelizmente nosso querido amigo Miller não resistiu e agora ele se encontra em um lugar melhor.

     
  3. Gostei
    duduprec deu reputação a Joshuah em Seu Último Trabalho   
  4. Gostei
    duduprec deu reputação a WooX em Aula 2 # Orcs - Academia do Pixel   
    Boa noite a todos!     Primeiro queria pedir desculpas pela demora desse tutorial, meu dia a dia anda muito corrido.   Bom... esse é o segundo tutorial/aula da academia do pixel, desta vez sobre Orcs.   Aqui vocês vão aprender:        
     
    Características     Antes de tudo temos que estudar as características dos Orcs, breve pesquisa na internet.   Wikipédia: é retratado como um gigante ou simplesmente como um homem maior do que o normal e de aparência brutal, possuem uma variedade de tons de verde maior que de outras cores,diferente dos ogros que só tem um tom de verde.   Sugiro também pegar alguma imagem para usar de referência, é sempre bom pra estudar a anatomia do ser em questão, vou usar a seguinte imagem como referencia no tutorial.    
          Outline   Antes de tudo, vamos definir a área em que iremos trabalhar, eu vou usar um tamanho maior que o comum. Então abra o Paint escolha o tamanho que irá usar e faça uma linha diagonal para ter noção de perspectiva.  
        Após definida a área, podemos começar a Outline baseado no que aprendemos e olhando a referencia, eu costumo sempre começar pela cabeça, ir rascunhando/rabiscando e alinhando pouco a pouco.  
     
     
     
        Após terminado a Outline e definido as formas, usaremos um método usado para checar a perspectiva de humanoides, faça um 2 linhas horizontais, 1 na altura dos ombros para checar se estão alinhados e outra na altura das mãos para checar se também estão alinhadas.  
      Agora faça novamente a linha diagonal para checar se a perspectiva esta correta, a linha deve começar no pé direito e passar pelo olho direito.  
      Se depois de checado estiver algo errado, conserte, depois de corrigido podemos passar para o próximo passo.       Detalhes   Agora vamos colocar alguns detalhes na Outline, tem que ser algo que de um destaque ao nosso Orc, algo que o diferencie de um Orc comum, pode ser algum escudo, lança, espada, coisas do tipo, nessa parte o limite é sua criatividade, se estiver sem ideias busque auxílio nas referências.   Eu decidi fazer um axe semelhante ao da minha referência.  
      Lembre-se tudo tem que estar na perspectiva, você não pode fazer uma criatura na perspectiva e colocar 1 detalhe que esteja fora da perspectiva, NÃO faça isso!  
          Pintura   Antes de começar a pintura precisamos das cores óbvio, eu não pretendo explicar como funcionam as cores neste tutorial, portanto sugiro que usem as cores da própria referência, usando a ferramenta conta gotas  vamos criar uma paleta, pegue do tom mais escuro ao mais claro de cada cor, procure não pegar muitas tonalidades de uma só cor, sugiro no máximo 5 tonalidades, não se esqueça de manter um bom contraste.  
      Feito a paleta, vamos definir aonde vai ficar cada coisa, pinte com o tom médio cada parte da Sprite.  
          Agora vamos entender como funciona a luz na perspectiva, a luz na perspectiva do Tibia sempre vem do noroeste, portanto o sudeste deve ser mais escuro, um erro muito comum entre iniciantes, é simplesmente criar uma ponte de cores, da mais clara para a mais escura, esse é o grande erro de muitos, NÃO faça isso!  
      As características devem ser levadas em conta quando formos sombrear, não deve ser esquecido nariz, boca, barriga, músculos etc... abaixo uma ilustração de como deve ser os pontos de luzes e sombras.  
     
    Veja agora pintado de forma correta, note o volume na Sprite.
     



     
     
     
    Finalização

     
    Nesta parte, vamos corrigir algumas coisas da Sprite, vamos consertar tudo que não esteja agradável, procure algo que não esteja te agradando na Sprite e conserte aquilo, eu por exemplo vou fazer 1 pescoço no Orc.
     



     
    Não se esqueça também de substituir a cor preta dentro da Sprite, por uma cor bem escura, mas NUNCA preto, somente a Outline (contorno) deve ser preto.
     



     
    Resultado final após alguns ajustes:
     



     
    É isso pessoal, não é 1 super tutorial, mas acho que da pra tirar algo disso, vou deixar aqui a Sprite finalizada e as cores que utilizei para fazer.
     



     
     
    Desejo boa sorte a todos que forem participar!
  5. Gostei
    duduprec deu reputação a Madarada em [Apostila Sprite Seduction]#1 - Introdução   
    Sprite Seduction                                                                             -INTRODUÇÃO -
     
                                                                   Capítulo l                                                                         Onde tudo começa     • A importância da teoria
     
        Você não é bom: Você não ficará bom em 1 semana 1 mês ou 1 ano,assim como qualquer coisa na vida spriting exige dedicação e foco.Busque sempre estar aprendendo e evoluindo de maneira sadia e com humildade,então se você está a 6 meses e acha que já está bom,eu aconselho que pense novamente;   Talento x Esforço: você está spriteando à 6 meses e achou seu rendimento baixo,porque seu amigo que está à 1 mês é melhor do que você? Nunca se compare com outras pessoas,cada um tem seu tempo de desenvolvimento porém,não sejamos hipócritas existem sim pessoas talentosas e melhores do que você,se acostume;   O olhar crítico: é importante se manter alerta sobre isso pois na maioria dos casos os iniciantes são por muitos bombardeados com elogios e que suas sprites estão magníficas,porque isso acontece?Muitos que fazem esses elogios acreditam que estão ajudando porém não estão pois,elogiando uma arte de nível básico - médio você está dizendo em outras palavras que está pessoa alcançou um nível razoável de spriting o que não é verdade. Dessa maneira você causa o efeito reverso,e faz estes mesmo acharem que alcançaram um nível avançado e pararem de buscar maior conhecimento.Os elogios são importantes porém se foquem nas críticas construtivas que será o seu combustível de desenvolvimento.   • Spriteando de maneira efetiva   
          Não dispersar: quando comecei eu fazia tudo errado,começava uma espada fazia até a metade depois começava uma criatura,voltava para espada dava alguns toques e ia para criatura,depois começava outra criatura até a metade...Ou seja,eu nunca terminava nada,entendam que é de muita importância começar e terminar por completo todas as suas sprites,desse jeito você irá ver um avanço considerável;   Esteja bem aparelhado: lembro que no meu início não existia muitos tutoriais,apenas aqueles que todos conhecem de Galiant e etc...porém nem por isso eu desisti,esteja sempre perguntando e pedindo dicas à pessoas mais avançadas e checando tutoriais. Não fique buscando maneiras milagrosas baixando photoshop,gimp,fireworks e toda essa porcaria,se foque em aprender a usar o paint, o Photoshop Cs6 é um dos poucos programas bons de se usar,porém isso eu só aprovo para aqueles de nível avançado;   O poder do foco: estar focado é uma das coisas mais importantes,é o que vai fazer suas artes evoluírem,sempre esteja atento a seus erros e saiba reconhecer as criticas sem raiva,mais com sabedoria.Cada sprite é diferente e leva tempo para ficar pefeita por isso eu digo,nenhuma sprite fica perfeita feita em 1 dia,mesmo que feita por alguém experiente alguns erros passam despercebidos aos olhos pois geralmentes estamos cansados depois de 3-4 horas trabalhando de maneira intensa;   Sendo mais produtivo: antes de spritear esteja numa cadeira confortável,seu mouse deve ser confortável também assim como ter um computador razoavelmente bom.Faça sem pressa,trabalhe por 2 horas depois vá fazer um lanche volte e faça mais 3 horas,assista um pouco de televisão,converse etc...Acorde no outro dia e abra a mesma sprite e refaça tudo denovo,é importante levar mais de 1 dia pois a capacidade cerebral é diminuída conforme você se estressa com o esforço.Nunca jamais tente fazer nada rápido ou correndo acreditem,vai ficar ó uma bosta.     • Entendendo o pixel  
      O porque de começar do 0: muitos acreditam que usar uma "base" é algo interessante para iniciantes mais não é cada um tem uma ideia determinada de imagem.Por exemplo um mago na minha cabeça é Gandalf e na cabeça de fulano é Dumbledore ou seja,não use bases façam suas próprias bases do 0,vocês verão que as ideias fluiram com mais facilidade;   Espelhamento reverso: lembra daquela sprite de ciclano que você viu e achou foda? então tenho uma má notícia você não vai conseguir fazer uma igual,simplesmente porque cada pessoa tem seu próprio estilo e isso é único,não tente copiar a sprite de alguém porque em outras palavras,você esta tentando copiar o estilo também e isso é praticamente impossível.                                                                        Capítulo ll                                                                   Perspectiva45º e sua origem    • A ordem cronológica      Tudo começou com o jogo chamado Ultima Online,foi um dos primeiros MMORPGs lançados,em 1997 pela Origin System.Já foi um dos três MMORPGs mais jogados no mundo e é situado em cenário medieval.O criador do jogo é Richard Garriot,o mesmo criador de Ultima Vll e Lineage ll.  

      Ainda no mesmo ano,foi lançado nosso tão querido Tibia desenvolvido pela CipSoft. Criado em 1997, é um dos jogos mais antigos do gênero. Nele, os jogadores podem desenvolver as habilidades de seus avatares, buscar tesouros, resolver enigmas e explorar áreas como cidades, masmorras, florestas, desertos, ilhas, praias, minas, etc..Os personagens podem disputar lutas entre si ou com criaturas, tais como: monstros; dragões; demônios; orcs e etc...  

        • A explosão dos Otservers   Algum tempo depois,programadores e jogadores de tibia viram um potencial no jogo e com seu esforço conseguiram trazer o Otservers,que seriam servidores alternativos de Tibia hosteados por uma empresa ou pelo próprios donos em suas residências,onde experiência,loot,monstros e cenários eram totalmente configuráveis.   Com a ascensão dos Otservers Tibia Global perdeu um pouco de seu espaço,uma vez que os Otservers eram servidores totalmente surreais entretanto,faltava algo mais,algo que estaria por vir...     • Brasileiros na perspectiva45 e a nova ordem   Com a popularidade dos otservers muitos viram uma maneira de lucrar,dessa maneira os otserver não apresentavam somente nova jogabilidade mais também novos gráficos,eis que surge um tsunami de servidores derivados de diferentes temas,dentre eles tibia gta,tibia harry potter,narutibia,resident tibia,tibia digimon,poketibia entre outros...  

      Com a inovação de temas e possibilidades muitos viram um grande interesse na perspectiva45,em meados de 2009 a comunidade brasileira estava a todo vapor em busca de conhecimento.A evolução dos spriters brasileiros era consideravelmente boa e em fóruns os tópicos eram abarrotados de membros buscando por tutoriais,um membro muito importante para comunidade e conhecido como pai da comunidade foi Galiant,entretanto algo mudaria tudo no cenário brasileiro...                                                                               Capítulo lll                                                   A Evolução da perspectiva45 e a era top down     • O gráfico se aprimorando     Precisamente em 07-07-2010 Galiant deu ínicio ao que seria o porto seguro de spriters profissionais,o perspective 45 era um fórum destinado à spriters profissionais e de lá sairiam grandes artistas. Durante o tempo muitos artistas ganharam destaque por serem chamados para trabalhar em projetos notórios como Zezenia Online e Phobos.  

     

     

     

        • Top down e seu sucesso aparente  
      Passado tempo o interesse pela perspectiva45 veio diminuindo e o nível de spriters no Brasil caiu bastante,uma vez que os antigos mestres agora tinham suas obrigações,trabalho e uma vida agitada como pessoas normais. A comunidade de spriters brasileiros começou a declinar gradativamente,outrora o que era a sensação dos otservers a p45 deu espaço para seu algoz que seria a perspectiva Top down.     A perspectiva top down surgiu em meados de 2012 (se não me engano) quando jogadores e programadores decidiram exportar sprites de game boy advanced e game boy color para dentro de seus otservers,aparentemente uma ideia estúpida porém,a comunidade brasileira e também polonesa adorou a ideia eis que a famosa PXG se tornou febre entre os poketibias.   Mês após mês derivados surgiram,buscando a mesma consagração da PXG uma vez que misturava p45 com top down.Apesar de causar uma rude incongruência gráfica os jogadores não se importaram,uma vez que poderiam reviver suas lembraçans de quando jogavam gameboy color em uma fita porém com muito mais qualidade (ou não).    

        • Fim da perspectiva45 ?     Com os interesses de lucrar à todo custo foi deixado de lado a perspectiva45,uma vez que sprites top down eram deveras mais simples e mais fáceis de se fazer,dessa maneira os jogadores foram se acostumando com gráficos de péssima qualidade assim caindo nas graças do conformismo.Existiram alguns projetos de qualidade na perspectiva que resistiram ao maligno top down ,como por exemplo Shinobi Online entre outros...  

      Desde então alguns spriters simplesmente pararam seus projetos,pois não há perspectiva de se competir com grandes empresas como estas citadas,e com o fim do ex-maior fórum de Otserver o tibiaking,tantos os veteranos quanto os amadores ficaram sem um rumo certo.  
     
    Próximo tutorial em breve...
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Tutorial feito por:
    Madarada
     
    Crédito de Imagens:
    Tibiabrfóruns
    Perspective45
    André Galiant
    Iven miller
    Erick Etchebeur
    Lucas Melo
    Wikipédia
  6. Gostei
    duduprec deu reputação a DeCarvalho em [ModalWindow][TFS 1.2][NPC] Sistema de Diálogo   
    Esse sistema/script/sei lá o que foi desenvolvido por Karain que quis trazer um 'ar' mais moderno ao tibia.. Com esse script conversar com o npc será mais uma experiência mais amigável, continua sendo customizável mas de uma forma mais fácil!
     

     
    Como instalar
     
    Em data/creaturescripts/creaturescrips.xml adicione
    <event type="modalWindow" name="Dialogue" script="dialogue.lua"/>   Em data/creaturescripts/scripts/login.lua adicione isso antes do "return true"
    player:registerEvent("Dialogue")  Crie em data/creaturescripts o arquivo dialogue.lua e adicione
    player_choices = {} defaultButtons = {{id = 0x00, text = "Select", enter = true, escape = false}, {id = 0x01, text = "End", enter = false, escape = true}} function Player:getChoiceText(choice_id) if player_choices and player_choices[self:getId()] then return player_choices[self:getId()][choice_id].text else return false end end function Player:createDialogueWindowWithButtons(modalWindowId, headerText, bodyText, buttonTable, choiceTable, sendToPlayer, priority) local var = ModalWindow(modalWindowId, headerText, bodyText) for i = 1, #buttonTable do var:addButton(buttonTable[i].id, buttonTable[i].text) if buttonTable[i].enter then var:setDefaultEnterButton(buttonTable[i].id) end if buttonTable[i].escape then var:setDefaultEscapeButton(buttonTable[i].id) end end player_choices[self:getId()] = choiceTable for i = 0, #choiceTable do if choiceTable[i] ~= nil and (choiceTable[i].storage == false or self:getStorageValue(choiceTable[i].storage[1]) == choiceTable[i].storage[2]) then var:addChoice(i, choiceTable[i].text) end end if not priority then var:setPriority(false) end if sendToPlayer then var:sendToPlayer(self) end end function onModalWindow(player, modalWindowId, buttonId, choiceId) -- be careful here if you have other modalwindow scripts if buttonId == 0x00 then player:say(player:getChoiceText(choiceId),TALKTYPE_SAY) elseif buttonId == 0x01 then player:say("Good Bye.",TALKTYPE_SAY) end return true end   Crie em data/npc/scripts o arquivo dialogue.lua e adicione
    local npc_dialogue = { [1] = { message="This is the message that shows up before the choices, make sure it's long enough if you are having long choices.", choices= { [1]={text="Choice 1", storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="script1"}, [3]={text="Choice 3",storage={1234,1}, dialogue=3, script="trade"}, [4]={text="Choice 4",storage=false, dialogue=3, script="quest"}, [5]={text="Choice 5",storage=false, dialogue=false, script="quest2"}}}, [2] = { message="Bla bla bla bla bla bla bla.", choices= { [1]={text="Choice 1",storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=false, script="end"}, [5]={text="Choice 5",storage=false, dialogue=3, script="end"}}}, [3] = { message="Brought to you by Matt Shadowwing.", choices= { [1]={text="Choice 1",storage={1245,2}, dialogue=false, script="end"}, [2]={text="Choice 2",storage=false, dialogue=false, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=1, script="end"}, [5]={text="Choice 5",storage=false, dialogue=2, script="end"}}} } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local talkstate = {} local function greetCallback(cid) local player = Player(cid) local npc = Npc(getNpcCid()) npcHandler:setMessage(MESSAGE_GREET, npc_dialogue[1].message) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[1].message, defaultButtons, npc_dialogue[1].choices, true, false) talkstate[player:getId()] = 1 return true end local function creatureSayCallback(cid, type, msg) local player = Player(cid) local npc = Npc(getNpcCid()) if not npcHandler:isFocused(cid) then return false elseif talkstate[player:getId()] then for _, v in pairs(npc_dialogue[talkstate[player:getId()]].choices) do if msgcontains(msg, v.text) and (v.storage == false or player:getStorageValue(v.storage[1]) == v.storage[2]) then if v.script == "end" then talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "trade" then -- trading script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "quest" then -- quest script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) end end end end return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())   Em data/npc/lib/npcsystem/npchandler.lua altere todos os
    TALKTYPE_PRIVATE_PN  para
    TALKTYPE_SAY  Depois é só criar seu npc.xml referenciar o lua e seja feliz.. Qualquer problema eu terei que repassar para o criador pois não sou apto a dar suporte.. Estou somente trazendo para cá!
  7. Gostei
    duduprec deu reputação a Gaant em Colocando música na tela de login   
    1°. Pegue uma música ou baixe uma ( Pode ser mp3, mp4, etc... )
    2º. Vá no site Online Converter
    3º Vá em audio converter e selecione convert to ogg

    4º. Vá na parte "Upload your audio you want to convert to ogg" vá em escolher arquivo, e selecione a música que vc quer
    5º Clique em convert file e espere acabar, depois de acabar ele vai começar a baixar
    6º Após abaixar, copie a musica.ogg e vá na pasta client>data>soungs> delete o startup.ogg e cole a musica, depois renomeie ela para startup.ogg 
    Abra o seu client, e vai estar lá, a música vai começar a tocar
     
  8. Gostei
    duduprec deu reputação a Snowsz em Criando um mod simples   
    Neste tutorial espero ensina-los a criar um mod simples, composto por uma janela e um botão, para ativa-la e desativá-la.
     
    O mod deve ficar mais ou menos assim:
     

     
     

    • Entre na pasta mods do seu otclient, e crie um arquivo com um nome quaisquer, como por exemplo, o nome que quer para seu mod,  o meu, vou chamar de "tutorial".
     
    • Dentro da pasta criada, crie um novo arquivo com extensão "otmod", coloque o nome do seu mod nele, eu vou colocar o nome de "tutorial", ficando "tutorial.otmod": 
     
    • Dentro do seu arquivo de extensão "otmod" adicione o seguinte código:
     
    Module name: description: author: website: version: autoload: autoload-priority: scripts: [ ] @onLoad: @onUnload:  
    • Explicando
     
    Dai você me pergunta por que isso está identado dessa forma?
    Module name: Com dois espaços antes de "name:"?
    Porque "Module" é uma declaração do tipo de arquivo que está sendo utilizado, já o "name:", é um componente do "Module", por isso, ele deve estar dentro de "Module", caso contrário, poderá ocorrer erros.
     
    Nesta linha:
    Module Ele está declarando que este arquivo é um modulo, uma modificação para seu client.
     
     
     
    Nesta linha:
    name: Aqui, estará sendo declarado o nome do seu módulo, eu vou colocar o nome "Tutorial":
    name: Tutorial Ao clicar no gerenciador de módulos, ele irá mostrar o seu mod com o nome escolhido:
     
     

    Nesta linha:
    description: Aqui, entrará a descrição do seu mod, por exemplo:
    description: Um mod simples. Irá mostrar mais ou menos assim:

     
     
     
    Nesta linha:
    author: Entrará o seu nome, ou seja, o nome de quem criou o mod(autor óbvio), por exemplo:
     
    author: Snowsz Ficaria mais ou menos assim:

     
     
     
    Nesta linha:
    website: Você pode declarar o seu site, por exemplo:
     
    website: tibiaking.com Ficaria mais ou menos assim:

     
     
     
    Nesta linha:
    version: Você pode colocar a versão do seu mod, por exemplo:
    version: 1.0 Ficaria mais ou menos assim:

     
     
    A parte com explicação gráfica terminou  !
     
     
     
    Nesta linha:
    autoload: Será determinado se o seu mod irá ser carregado automaticamente, por exemplo:
     
    Exemplo 1:
    autoload: false Assim, seu mod só irá ser carregado manualmente, você terá que ir no gerenciador de módulos e clicar em carregar para inciar seu mod.
     
    Exemplo 2:
     
    autoload: true  Assim, seu mod só irá ser carregado automaticamente, sem a necessidade de clicar para ser carregado.
     
     
     
    Nesta linha:
    autoload-priority: Será determinada a prioridade de carregamento do seu mod, "Como assim?", é simples, ele irá carregar antes ou depois de outro mod, isso determina em que posição de carregamento seu mod deve estar, como por exemplo, em primeiro lugar  , um exemplo de prioridade:
    autoload-priority: 1000 Acho que não tem nenhum mod com essa prioridade? Hehe, será um dos primeiros a carregar!
     
     
     
    Nesta linha:
    scripts: [ ] Será determinado os scripts carregados pelo seu módulo, os scripts usado por ele, por exemplo:
    scripts: [ tutorial ] Ele irá busca um arquivo com o nome tutorial.lua na mesma pasta que ele estiver, e carregará tudo que tem dentro daquele arquivo.
     
     
     
    Nesta linha:
    @onLoad: Será determinado que função o seu mod irá chamar ao iniciar, por exemplo:
     
    @onLoad: print("Hello World!") Irá mostrar uma mensagem no seu terminal do otclient.
     
     
     
    Por fim, nesta linha:
    @onUnload: Será determinado que função o seu mod irá chamar ao ser descarregado, ao se desligar, por exemplo:
    @onUnload: print("Bye World! ;(") Irá mostrar uma mensagem no seu terminal do otclient.
     
    Bom, a configuração que usaremos no nosso mod simples será essa:
     
    Module   name: Tutorial   description: Um mod simples.   author: Snowsz   website: tibiaking.com   version: 1.0     autoload: true   autoload-priority: 1000     scripts: [ tutorial ]     @onLoad: init()   @onUnload: terminate()  
    Mexa apenas no que souber
     
     

     
    Na pasta do seu mod, crie um novo arquivo, com o nome "tutorial", ele deverá conter a extensão "lua", ficando "tutorial.lua", que é o arquivo de script setado no nosso "tutorial.otmod":
    scripts: [ tutorial ] Dentro dele, coloque o seguinte código:
    function init() tutorialWindow = g_ui.displayUI('tutorial.otui') tutorialWindow:hide() tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) end function terminate() tutorialWindow:hide() end function onoff() if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end end A função "init()" é a função chamada pelo seu mod, ao iniciar, a função "terminate()", é chamada pelo seu mod, ao ser desligado.
    Na função "init()", em uma de suas linhas podemos encontrar isso:
    tutorialWindow = g_ui.displayUI('tutorial.otui') Onde tem "tutorialWindow", está sendo declarado uma variável global, um iniciante em lua deve saber o que é, então não vou explicar.
    Dentro de tal variável, há uma função, "O que essa função faz?", ela executa os elementos contidos em um arquivo, que seria os arquivos de extensão "otui", nela, estaremos executando o "tutorial.otui".
     
     
    Nesta linha:
    tutorialWindow:hide() Ele executa uma função na variável "tutorialWindow", que seria uma função para esconder a janela, pois, o que estava contido no "tutorial.otui" seria uma janela que criaremos logo logo.
     
    Nesta linha:
    tutorialButton = modules.client_topmenu.addRightButton('tutorialButton', tr('Exemplo'), 'icone', onoff, true) Está sendo declarado uma variável global, nela, está contido a referencia de uma função, que seria um botão adicionado ao lado direito do menu, exemplo:
    Utilizei a imagem de ícone do otclient para demonstração.
     
    Explicando a função:
    Sua base é essa:
    modules.client_topmenu.addRightButton(id, description, icon, callback, front) • Id: Será o id dado ao botão, para melhorar o acesso.
    • Description: É a descrição do botão, ao passar o mouse em cima, aparecerá um texto.
    • Icon: É a imagem do botão, como a que eu utilizei no exemplo, usei o ícone do otclient.
    • Callback: É uma função chamada ao clicar nele.
    • Front: Define se o botão será adicionado na frente ou atrás dos demais botões do seu menu.
     
     
    Explicando a função "terminate()", na sua única linha podemos encontrar isso:
    tutorialWindow:hide() É o seguinte, ao seu mod descarregar, ele irá esconder sua janela criada.
     
     
    Explicando a função "onoff()", nas suas linhas podemos encontrar isso:
    if tutorialWindow:isVisible() then tutorialWindow:hide() else tutorialWindow:show() end Mas bem, o que isso faz? Simples, "tutorialWindow:isVisible()", ele checa se a janela está visível, se estiver, ele irá esconde-la "tutorialWindow:hide()", caso a janela não esteja visível, ele irá mostra-la "tutorialWindow:show()", essa é a utilidade da função utilizada no botão do menu.
     
     
     
    Agora, na pasta do seu mod, crie um novo arquivo, com o nome de "tutorial", a extensão dele deve ser "otui", ficando "tutorial.otui", dentro desse arquivo, adicione isso:
    MainWindow id: tutorialwindow height: 255 width: 438 !text: tr("Mod simples") Explicando:
     
    • "MainWindow", seria o objeto que irá ser utilizado pelo arquivo, no caso, uma janela.
    • "id", o id, estaria setando um id para a sua janela.
    • "height", seria a altura da sua janela, do "MainWindow".
    • "width", seria a largura da sua janela, do "MainWindow".
    • "!text", seria o texto inserido como título de sua janela, a função chamada nele "tr()", chama uma tradução para aquela frase, caso não tenha ficaria aquilo mesmo, caso tenha, iria mudar para outro texto traduzido.
     
     
     
     
    Bom gente, espero que tenham gostado do tutorial, eu não sou bom com tutoriais... Se tiver me perdido peço desculpas, qualquer erro podem postar aqui que irei corrigir, se eu tiver me enrolado em algo, me desculpem, dei várias pausas enquanto fazia isso kk', espero que tenham entendido tudo.
     
    Créditos: Snowsz
  9. Gostei
    duduprec deu reputação a Snowsz em [OTC] MOD que deixa o OTC exclusivo para seu servidor.   
    Testado em:
    TFS 0.4 8.60.
    Otclient 0.6.3.
     
    Descrição: O player só poderá entrar no seu otserver com este mod, caso contrário, levará um kick bonito
     
    Bom galera, criei este mod para ajudar um membro do fórum que, quer que seu server só seja acessado com um otclient dele, então, vamos ao mod.

    Vá na pasta do seu otclient e entre na pasta mods, lá, crie outra pasta, chamada exclusiveclient, nesta pasta, crie um arquivo com o nome exclusiveclient.lua e coloque isso dentro:
    function init() connect(g_game, 'onTextMessage', serverComunication) connect(g_game, { onGameEnd = hide } ) end function terminate() disconnect(g_game, { onGameEnd = hide }) disconnect(g_game, 'onTextMessage', serverComunication) end function serverComunication(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if text:find("$@$ExclusiveClient") then g_game.talk("/$@$exclusive$@$") end end end Feche e salve o arquivo.
    Ainda na mesma pasta, crie um novo arquivo chamado, exclusiveclient.otmod (lembrem-se da extensão sempre, exemplo: login>.lua<)
    No exclusiveclient.otmod coloque isto dentro:
    Module name: Exclusive Client description: author: Snowsz website: autoload: true autoload-priority: 1000 scripts: - exclusiveclient.lua @onLoad: init() @onUnload: terminate() Após isso, feche e salve o arquivo, não é só isso, agora iremos mexer no seu servidor, vá na pasta data/creaturescripts/scripts e abra o login.lua, coloque isso antes do ultimo return true.
    addEvent(doPlayerSendCancel, 100, cid, "$@$ExclusiveClient$@$") addEvent(doPlayerSendCancel, 200, cid, " ") addEvent(function() if getPlayerStorageValue(cid, "exclusive") <= 0 then doRemoveCreature(cid) end end, 500) Após isso, feche e salve o arquivo, agora, crie um novo arquivo nesta mesma pasta, chamado exclusivelogout.lua, nele coloque isto dentro:
    function onLogout(cid) setPlayerStorageValue(cid, "exclusive", -1) return true end Feche e salve o arquivo, agora, vá em data/creaturescripts/creaturescripts.xml e coloque esta tag:
    <event type="logout" name="ExlusiveLogout" event="script" value="exclusivelogout.lua"/> Após isso, vá em data/talkactions/scripts e crie um arquivo chamado exclusive.lua, coloque isso dentro:
     
    function onSay(cid, words, param) setPlayerStorageValue(cid, "exclusive", 1) return true end Feche e salve o arquivo, vá em data/talkactions/talkactions.xml e coloque esta tag:
    <talkaction log="no" access="0" words="/$@$exclusive$@$" event="script" value="exclusive.lua"/> Feche e salve o arquivo, pronto, sistema instalado, espero que gostem
     
    Créditos: Snowsz
  10. Gostei
    Atualizando!
     
    Consegui resolver a segunda dúvida. Para quem quiser utilizar também, fiz o seguinte:
     
    Adicionei isto no final do arquivo gameinterface.lua que se encontra em modules\game_interface.
     
    function onGameStart() show() -- g_game.enableFeature(GameDiagonalAnimatedText) g_game.enableFeature(GameDiagonalAnimatedText) end  
    Alguém tem qualquer tipo de informação sobre a minha primeira dúvida?
     
    Me disseram que esse "Target Square" é uma função C++, a qual desenha um quadrado com qualquer cor. Mas não obtive mais nada além disso.
     
    Obrigado.
  11. Gostei
    duduprec deu reputação a xADMx em (Resolvido)[AJUDA] como mudar o effect de cada damage.   
    vá na source do servidor em game.cpp tu aperta ctrl+f e procure por COMBAT_FIREDAMAGE até achar


    case COMBAT_FIREDAMAGE: { textColor = TEXTCOLOR_ORANGE; magicEffect = MAGIC_EFFECT_HITBY_FIRE; break; } em magicEffect = MAGIC_EFFECT_HITBY_FIRE; tu muda pro efeito que você quer no combat, pode usar numero também o numero do effect e tal se ajudei REP +
  12. Gostei
    duduprec deu reputação a Wakon em Bug Do Target Do baiak!   
    Seu executável é a compilação das sources, você tem que ter elas para compilar novamente, não é todos os servidores que disponibilizam a source mas da pra baixar outras distros e testar se é compatível com seu servidor.

    Você pode encontrar distros + sources na seção de downloads:
    http://www.tibiaking.com/forum/forum/115-otservs-86x/

    Ai é só testar alguma distro que tenha source e compilar modificando o arquivo que o fire disse.
  13. Gostei
    duduprec deu reputação a MaXwEllDeN em O que e Storage?   
    Storage é um valor que fica gravado no banco de dados, no banco de dados ele é estruturado assim:



    quando você usa a função getPlayerStorageValue(uid, chave)
    O que acontece é:


    É basicamente assim que funciona, por isso por padrão todas storages que não tenham um valor definido recebem o valor -1.

    Espero ter ajudado.
    Abraço.
  14. Gostei
    duduprec deu reputação a Syl em Recentes Trabalhos - Mapping   
  15. Gostei
    duduprec deu reputação a Wingardium em Minhas Sprites, que serão usadas no servidor Poke DUB   
    Na minha opinião se você gosta de top-down não há porque migrar para a perspectiva isométrica. A sprite feita em top-down simplesmente estimula as habilidades de um jeito diferente e você pode aprender muito com ela em termos de iluminação e textura, não significa que é "pior". A maioria dos spriters cria esse tabu porque muito servidores têm sprites top-down de péssima qualidade. Mas um ótimo exemplo é o snorlax de um spriter que passou pela PxG, segue a imagem:

    Sinceramente, não se pode desmerecer um trabalho tão bonito como esse feito em top-down.
     
    Parabéns pelas suas sprites, algumas ficaram boas, outras nem tanto, mas você tem um traço legal
    Acho que seria interessante ler um pouco sobre Anti-Aliasing pois uma coisa que percebo é que muitas sprites nesse estilo não têm quase nada de AA, talvez seja uma característica, mas sempre é bom saber AA.
  16. Gostei
    duduprec deu reputação a Bruno Minervino em Compilando TFS 1.3 com vídeo-aula   
    Compilando TFS 1.3 no Windows

    1. Baixe os softwares requeridos
     
    Para compilar o The Forgotten Server no Windows, você vai precisar:
     
    Visual Studio 2015 (Compilador)
    TFS SDK v3.2 (libs)
    Libs do Boost C++ (32-bits, 64-bits)
     
    2. Instale os softwares requeridos

    Após ter baixado os softwares listados na etapa acima, comece instalando o Visual Studio e Boost C++. Extraia o TFS SDK v3.2 em qualquer pasta do seu computador e execute o arquivo "register_tfssdk_env.bat" para setar a variável de ambiente do local onde está o TFS SDK, assim nosso compilador irá encontrar as libs quando começar a compilar. Mova o arquivo "register_boost_env.bat" da pasta do TFS SDK para a pasta onde você instalou as libs do Boost C++ e execute-o (se você seguiu os passos do instalador, está esta na pasta chamada boost_1_62_0).

    3. Baixe as sources

    Se você possuir o Git Client instalado, você poderá clonar a última cópia com este comando:
     
    > git clone https://github.com/otland/forgottenserver.git  
    Se você não possuir o Git Client instalado, você poderá baixar a última cópia do The Forgotten Server através do link: https://github.com/otland/forgottenserver/archive/master.zip

    4. Compilando

    Procure o diretório vc14 na pasta do The Forgotten Server que você baixou, e abra o arquivo "theforgottenserver.sln". Isso deverá iniciar o Visual Studio 2015 e você estará pronto para continuar.

    Para configurar a compilação, navegue para Build -> Configuration Manager no menu superior. Um popup deverá aparecer onde você poderá escolher entre "Release" ou "Debug" para compilar, escolha também para qual Plataforma você irá compilar: 32-bits (Win32) ou 64-bits (x64).

    Para iniciar a compilação, abra o menu Build novamente e clique em Build Solution (Ctrl + Shift + B).

    5. Vídeo-aula

    https://www.youtube.com/watch?v=Zfil84FMJsk

    6. Créditos
    Mark - Autor do tutorial e do projeto The Forgotten Server
    Bruno Minervino - Tradução e gravação do vídeo
     
  17. Gostei
    duduprec deu reputação a 9k22 em Compilando TFS 1.3 com vídeo-aula   
    Para todos aqueles que estão tendo problemas de erros ao começar a compilar, como não tivesse reconhecido o local do tdk e boost com o .bat, vou ajuda-los a solucionar esse problema manualmente.
     
    Bem, basta seguir o passo 1 e 2 do vídeo que é executar os .bat e em seguida siga todos os passos aqui:
    Em meu computador (clique com o botão direito e propriedades (se for win10, o propriedades está no mais > propriedades) Agora clique em Configurações avançadas do sistema Lá em baixo, clique em Variáveis de Ambiente... Você verá algumas variáveis... Edite apenas o BOOST_ROOT e TFSSDKDir, adicionando o local exato onde ficam as pastas. EX: C:\boost  
    Bem, ao fazer isso clique em Ok e Ok!
    Agora abra o Visual Studio e comece a compilar lindamente
     
    O motivo desse erro acontecer é por conta que alguns sistemas operacionais não reconhecem o comando criado no .bat e transfere diretamente para pasta WINDOWS/system32
  18. Gostei
    duduprec deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  19. Gostei
    duduprec deu reputação a Gabriel Netto em (Resolvido)Como faço para criar um otserver do zero   
    Brother, não cai nessa de que "open source não é importante". 
    A maioria dos NTO por aí são cheio de bugs, postos intencionalmente pelos criadores, e eles só podem ser arrumados nas sources. Fora que dá pra fazer uma série de modificações nas sources (as que tem maior efeito no jogo precisam, como adicionar o sistema de balls pra pokemons, adicionar novas skills, modificar como funciona N sistema base etc).
    Recomendo que use esse server aqui. Ele vem limpo, só com os scripts bem básicos, com sources e td mais. Até onde sei, sem nenhum bug: 
    Foca o estudo em .lua, procura tutoriais nesse e em outros foruns, veja vídeos. Quando sentir que dominou o básico, estude as funções do TFS 0.4 (The Forgotten Server. É o programa com as instruções básicas do Tibia. Tem várias versões, mas a mais estável é o 0.4.), se não me engano tem uma lista aqui no fórum com todas elas. O resto, como mapping e spriting tu aprende na manha com o tempo.
    E não se esqueça, quaisquer dúvidas é só perguntar aqui no TK, só não fique querendo as coisas de mão beijada. :D
  20. Gostei
    duduprec deu reputação a Grilo em OT One Piece - World of Piece   
    Não vou procurar o que estava no tópico original (onde eu já havia postado o magnet link, mas parece que os moderadores ignoraram meu post), mas cá está o download dos arquivos APENAS POR TORRENT porque não vou enviar 1.1GB em algum servidor para depois ser deletado.
     
    Fiquem de Seed pois vou ficar apenas até o dia 09 (daí então vou entrar de férias e não poderei fazer nada).
     
    http://www.mediafire.com/download/eae4ld2lw47ig45/WorldOfPiece_Arquivos.rar.torrent
     
    Créditos: Green

Informação Importante

Confirmação de Termo