Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''tutorial''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Servidores Promovidos
    • Calabouço
  • OTServ - Áreas Comuns
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores

Encontrado 24 registros

  1. Você tem que por seu ip externo no config.lua para os outros conectarem, mas as vezes isso faz você não conseguir conectar no seu próprio servidor. Especifique seu dominio (ou ip) no config.lua, vai ficar algo tipo: ip = "example.com" Então adicione isso ao seu arquivo hosts (/etc/hosts in Unix-like operating systems, C:/Windows/system32/drivers/etc/hosts in Windows): 192.168.0.1 example.com
  2. Funções iteradoras em Lua

    Iteradores são funções especiais criadas para iterar, ou seja, percorrer, listas, vetores (arrays), matrizes, tabelas ou o que quisermos. Nós criamos iteradores para usar na função for. Um exemplo de iterador que você já deve conhecer é o pairs. Vamos supor que eu tenha a seguinte tabela: k = {1, 2, 3, 4, 5} E eu queira iterar por todos eles imprimindo o seu quadrado. Como faríamos isso? Casualmente, o código seria este: for i = 1, 5 do print(i ^ 2) end Mas e se eu quiser fazer isso várias vezes? Com uma lista que não segue um padrão? Então criamos um iterador, mas primeiro, vamos entender a estrutura de um em pseudocódigo Lua: function iterator(values) local pos = 0 --posição do iterador na lista return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] end return nil end end Perceba que eu não retorno um valor especifico ao chamar a função iterator(), eu retorno uma nova função. Essa função será chamada pelo for até que seu retorno seja nil, onde Lua assume que o iterador acabou. E como eu sei quando acaba? Simples, há uma variável (chamei, neste caso, de pos) que armazena a posição dentro do array values do próximo valor a ser retornado. A cada iteração, o valor aumenta em 1 dentro da função. Quando eu acessar um índice dentro do array que não existe, seu valor (values[pos]) será nil, portanto eu testo essa condição. Parece bastante complexo, mas vamos voltar ao exemplo do quadrado. Chamarei minha função iteradora de square: function square(numbers) local pos = 0 return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] ^ 2 end return nil end end A cada chamada da função de retorno, eu aumento a posição e retorno este elemento elevado ao quadrado. Então, usarei a função assim: for i in square(k) do print(i) end Que funciona como o esperado: O que mais podemos fazer com iteradores? Podemos, por exemplo, bloquear uma palavra usando a função onTalk do xotservx (pesquise no Google): local palavra = "jujuba" function splitWords(phrase) local pos = 0, words = phrase:gmatch("%w+") return function() pos = pos + 1 if words[pos] ~= nil then return words[pos] end return nil end end function onTalk(cid, type, text, position) for w in splitWords(text) do if w = palavra then return false end end return true end Claro que esse exemplo é bastante simplório, mas demonstra a utilidade dos iteradores. Neste caso, eu testo todas as palavras que o player falou para encontrar uma palavra especifica que eu defini. Podemos transformar isso tudo em um loop while, para você entender um pouco melhor: local words = splitWords(text) while w = words() do if w == nil then break end if w = palavra then return false end end end return true Usando o iterador, ganhamos organização no código e o controle do for. Espero que façam bom uso de iteradores para organizar seus códigos
  3. Estupendo! Tutorial De outs do tio Sand!

    Direto de Israel, terra do Krav Maga, chega para vocês, o primeiro tutorial de outfits feito pelo Sand Fox! Do que está falando, criançinha invisível? Nada de colagens feias e mal feitas(nada contra os fakers), vamos FAZER nossos outs! Bem, primeiro, o mais básico de tudo: abra uma imagem 32x32. Depois, arranje a cabeça de um outfit de citizen de frente, e cole na imagem. Após posiciona-la no extremo noroeste do quadrado, faça uma base. Tente copiar de um outro outfit, para você ir "pegando a manha". Não presisa caprichar muito, pois é só um esboço. Após ter a base pronta, começe os detalhes. Depois, passe linhas pretas no contorno e defina as linhas internas num tom cinza escuro. Pinte os espaços em branco num tom cinza claro e o outfit estara pronto. Se você quizer fazer um outfit pra mudar de cor depois, mantenha as cores cinzas, se não, decida a cor agora. Após sombreado, repita o processo com o personagem de costas. Caso queira fazer o outfit andando, pegue o outfit do personagem parado(antes de sombrea-lo) e mude a posição de suas mãos, pernas e tronco, afim de fazer com que ele pareça estar andando Resultado final: Lembrem-se de fazerem calmamente, atentos a cada detalhe, evitando de deixar um sombreamento artificial e um formato quadrado. Eu fiz esse tutorial correndo, e temo não ter ajudado nada. Mas, espero que os futuros spriters vejam algo que preste nesse tutorial amador e feito as pressas. Sand Fox recomenda: Paint para os contornos e pintura básica, photoshop ou fireworks para o sombreamento final. Não use drogas. Mas beba avontade! Ps: Se forem fazer algo na cabeça dele, não esitem em aumentar o quadrado do outfit. Ps2: Lembrem sempre de alinhar os braços e os ombros
  4. [RME abrindo qualquer versão]

    :: Entenda do que se trata Abra qualquer versão no RME. (PS: Testado até a versão 3.0) O que vou explicar funciona pra qualquer versão de Tibia. Até mesmo não-Tibia. Isso mesmo! Com DAT, SPR, OTB e XML modificados! :: Propósito Olá, usuários da OTnet! Quero acabar com essas dúvidas quanto às configurações do RME. ^^' Então... vamos lá? :: "Instalando" uma nova versão no RME Faça o seguinte: 1) Ponha os arquivos abaixo dentro de uma nova pasta (diretório: "RME\data\newVersion" - "newVersion" é a nova pasta; renomeie-a para o nome que desejar); borders.xml* creatures.xml* doodads.xml* grounds.xml* materials.xml* tilesets.xml* walls.xml* items.otb (do server usado) items.xml (do server usado) tibia.dat (do client usado) tibia.spr (do client usado) * De preferência, inicialmente originais do RME. Para dar certeza do que está fazendo, siga o exemplo do diretório do arquivo "Tibia.spr": "RME\data\newVersion\Tibia.spr". 2) Abra o RME; 3) Antes de iniciar algum mapa novo ou já existente, procure por "File > Preferences" na aba de ferramentas; 4) Na janela "Preferences", selecione a aba "Client Version"; 5) Escolha QUALQUER UMA versão (pode ser 7.4, mesmo que a versão do seu game seja 9.3+) e selecione o diretório da pasta "newVersion" que criamos; Ex: eu uso 8.7, mas coloquei na caixa de diretório da versão 8.6. 6) Em "Default Client Version", coloque a versão escolhida do diretório da nossa pasta; 7) Antes de fechar a janela, não esqueça de verificar se a caixa da opção "Check File Signatures" está DESATIVADA. Essa caixa vai parar de verificar a versão do seu ".dat" e vai permitir que tudo seja possível (por exemplo, usar uma versão qualquer num diretório qualquer). 8) Pressione "Apply" e, em seguida, "Ok"; 9) Feche e reabra seu Map Editor. :: Abrindo um mapa da versão "instalada" 1) Inicie um NOVO mapa; 2) Provavelmente aparecerá a mensagem: "Could not locate Tibia.dat and/or Tibia.spr, please navigate to your Tibia X.xx installation folder."; A mensagem mencionada avisa que o RME não identificou automaticamente o diretório onde se encontra os arquivos "Tibia.dat" e "Tibia.spr". PS: Se não aparecer, ele estará usando a versão Padrão que marcamos. 3) Caso a mensagem apareça, pressione "Ok", selecione o diretório que criamos (a pasta "newVersion" no diretório "RME\data\newVersion") e pressione "Ok"; 4) Um mapa vazio será iniciado. Procure por "File > Import > Import Map..." na aba de ferramentas; 5) Em Map File, pressione "Browse" e selecione o mapa que deseja abrir; 6) Matenha as configurações abaixo: -- Import offset X offset: 0 Y offset: 0 -- House import behaviour Smart Merge -- Spawn import behaviour Merge 7) Pressione "Ok"; 8) Caso o mapa a ser aberto seja maior que 2048x2048 SQMs, a seguinte mensagem aparecerá: "The imported tiles are outside the current map scope. Do you want to resize the map? (Else additional tile will be removed)" A mensagem mencionada avisa que o mapa a ser importado é maior que o mapa vazio criado. O RME, então, procede perguntando se o usuário deseja aumentar o limite do mapa para que possa ser importado. Caso contrário, todos os SQMs fora do limite do mapa novo serão excluídos. Não queremos perder nenhum pedaço do nosso mapa a ser aberto, certo? Portanto pressione "Yes" (ou "Sim"). Caso tenha procedido como dito, a mensagem "Map imported successfully, 0 tiles were discarded as invalid" aparecerá. Perceba o trecho "0 tiles": significa que 0 SQMs foram descartados, já que você permitiu que o RME aumentasse o limite do novo mapa. Caso contrário, a mesma mensagem aparecerá. Porém, não mais com "0 tiles". Aparecerá algo como "Map imported successfully, 2560 tiles were discarded as invalid" afirmando que 2560 SQMs foram excluídos do mapa por não estarem dentro do limite atual do mapa novo. PS: Se você pressionou sem pensar no botão "No" (ou "Não"), não precisa se preocupar. O RME está criando um novo arquivo de mapa. Ou seja, ele está COPIANDO o mapa que deseja abrir para o novo mapa criado (fazendo jus ao nome da opção "Import Map"). Você só perderia os SQMs fora da área caso salvasse e substituísse pelo mapa antigo. Então proceda desde a fase 1 do tópico "Abrindo um mapa da versão "instalada"" para não perder qualquer SQM. :: Salvando um mapa da versão "instalada" Não é tão simples como qualquer um, mas não é complicado. É só ter apenas um cuidado. 1) Nunca salve seu mapa pelo comando "CTRL + S" ou em "File > Save" na aba de ferramentas. 2) Salve SEMPRE pelo comando "CTRL + ALT + S" ou em "File > Save As..." na aba de ferramentas. Entenda o porquê: 1) Ao salvar como o explicado da primeira situação, o RME nomeará os arquivos XML para "-house.xml" e "-spawn.xml". Não é um bug. Mas se você tiver mais de um mapa na mesma pasta, ficará propício a substituí-los involuntariamente. Ou seja, substituirá os arquivos pelo house e spawn mais recente fazendo-o perder os xmls antigos. Isso acontece porque criamos um mapa NOVO. Ou seja, ele não detectou o nome do mapa para configurá-los em suas propriedades. Você pode encontrar essas propriedades (não recomendo seguir este passo, mas, por curiosidade, é interessante); acessando "Map > Properties..." na aba de ferramentas ou, simplesmente, pelo comando "CTRL + P". Veja as caixas "External Housefile" e "External Spawnfile". Todo mapa que contiver os nomes dos XML semelhante à "Untitled-1", como provavelmente deverá estar no seu mapa, ficará com nome nulo ("-house.xml" e "-spawn.xml") ao ser salvo deste modo. PS: Não recomendo alterar QUALQUER caixa da janela "Map Properties", afinal, nunca precisei utilizá-las. 2) Ao salvar como o explicado da segunda situação, o RME nomeará os arquivos XML para o nome do mapa novo a ser criado ou substituído. Ex¹: Se você substituir um mapa de nome "Exemplo.otbm", o RME vai detectar o nome "Exemplo" e salvar os XMLs nomeados de "Exemplo-house.xml" e "Exemplo-spawn.xml". Ex²: Se você salvar um arquivo de mapa novo com o nome "NovoMapa.otbm", o RME vai detectar o nome "NovoMapa" e salvar os XMLs nomeados de "NovoMapa-house.xml" e "NovoMapa-spawn.xml". Sempre utilizo esse meio, porém PREVENÇÃO é meu sobrenome e, portanto, sempre tenho uma cópia de segurança de meus arquivos. Espero que tenham compreendido o tutorial! Qualquer dúvida, é nós que voa brurxon! :issoae: Atenciosamente, River.
  5. Aula I - Introdução a Linguagem C

    Olá galera da OTBR é um prazer imenso estar aqui com vocês. Primeiramente quero dizer que, sou iniciante na area de Programação e que como alguns estou começando nos estudos da mesma. De antemão quero justificar que, decidi criar tutoriais para ajudar os membros da seção e para meu crescimento na área, portanto não adianta me criticar por ser novato. Sem mais delongas vamos ao que interessa. [+]Para que se Estudar Programação? [+] A programação faz parte do dia a dia do ser humano. É atraves desta, que o homem aprimora e agiliza a transição da informação e aumenta o nivel tecnológico, proporcionando mais agilidade, conforto e seguraça para os que detém o mesmo. Com base na linguagem C, podemos encontra-la em sistemas operacionais, planilhas eletrônicas, processadores de texto, gerenciadores de banco de dados, etc, o que em sua maioria remete ao seguinte fato: a programação auxilia seu usúario na solução de problemas. E para começar a estudar a linguagem C, veremos brevemente um conceito de algoritmo. [+] O Que É um Algoritmo? [+] Muitas definições podem ser atribuidas á palavra algoritmo. Mais de uma forma resumida e clara : Um procedimento passo a passo para a solução de um problema. Sequência detalhada de ações a serem executadas para realizar alguma tarefa. Como podemos ver, um algoritmo nada mais é que uma sequência pré-determinada, para que um processo se finde, ou seja, tenha solução.Outra coisa muito importante de se ter conhecimento é que, a forma como os programas são traduzidos para a linguagem de máquina classifica-os em duas categorias: interpretados e compilados. Um interpretador lê a primeira instrução do programa, faz uma consistência de sua sintaxe(disposição das palavras e seu sentido lógico) e se não houver erro converte-a para linguagem de máquina(ou seja, o objeto ao qual o computador irá compreender o que se pede em determinada função) para finalmente executá-la Segue, entao, para a próxima instrução , repetindo o processo ate findar todas as instruções ou até que a consistência aponte algum erro. Um compilador lê a primeira instrução do programa, faz uma consistência de sua sintaxe e se nao houver erro converte-a para a linguagem de máquina e, em vez de executa-la, segue para a proxima instrução repetindo o processo ate findar as instruções ou ate que a consistência aponte algum erro.Se não houver erros, o compilador gera um programa em disco com o sufixo.obj com as instruções já traduzidas. Porém, o programa não pode ser executado até que sejam agregadas a ele rotinas em linguagem de máquina que lhe permitirão a sua execução. Este trabalho é feito por um programa chamado "linkeditor" que , alem de juntar as rotinas, criando um produto final com o sufixo EXE. [+] Forma Geral das Funções C [+] Vamos começar pelo menor programa possivel em C. Este programa compõe-se de uma única função chamada main. Todo e qualquer programa deve conter a função main(), pois ela determina o inicio do programa e o fim do mesmo. Os parentêses após o nome indicam que esta é uma função. O nome de uma função C pode ser qualquer um com exceção de main, reservado para a função que inicia a execução do programa.Toda função C deve ser iniciada por uma chave de abertura, {, e encerrada por uma de fechamento,}. Esta deve existir em algum lugar do seu programa, marcando assim o ponto de inicio para a execução do mesmo. Vamos adicionar uma instrução em nosso programa. Observação: as instruções devem sempre ser encerradas por ; , pois este é parte da função. É uma das funções de entrada e saida que podem ser usadas em C. Como citamos acima ("Ola galera OTBR"), esta informação é chamada de argumento de printf(). Outro exemplo: main() Este programa irá mostrar na tela do seu computador a seguinte mensagem: Cada argumento é separado por virgula, então podemos citar o exemplo: O programa imprimirá a seguinte mensagem: Manhuaçu é uma cidade que fica a 277 quilometros de Belo Horizonte. Portanto notamos alguns codigos de formatação, como %s que imprime uma cadeia de caracteres (ou seja, mais de um caractere estabelecido no argumento) e %d (que imprime o argumento em forma decimal), segue abaixo uma lista com alguns codigos e sua utilização em C. [+] Códigos Especiais [+] [+] Códigos de Formatação printf() [+] Vamos criar um pequeno programa, para que voces possam assimilar as ideias. Para isso iremos utilizar o compilador Dev-C++. [spoiler=Download Dev-C++][Conteúdo Oculto] Abra seu programa e vá em File>New>Source File ou apenas aperte Ctrl+N, como mostra a seguir: Faremos então um programa simples de soma,que receba algum valor, calcule o mesmo e mostre o resultado. Compile o programa em Execute>Compile e salve com a extensão .c. Apos feito isso basta ir em Execute>Run para rodar o programa. Explicando o programa: #include <stdio.h> Cabeçalho padrão de entrada/saida da linguagem C. #nclude <stdlib.h> Cabeçalho padrão que possui funções envolvendo alocação de memória,controla conversões e processos. //Variaveis int meninos, meninas, soma; Aqui declaramos as variaveis, meninos, meninas e soma e dizemos ao programa que elas possuem valor inteiro. Obs: a barra dupla serve para inserir um comentário em determinado trecho do programa. Lembrando que o programa ignora o que estáescrito depois de //. main() { } Esta é a função raiz do programa. Sua função é determinar o inicio e o termino do programa, ou seja, todos as instruções dentro desta função, constituem a rotina do programa. printf("Digite o numero de meninos na sala:"); Esta função imprime o argumento que lhe é atribuido, ou seja, no caso acima "Digite o numero de meninos na sala:". scanf("%d", &meninos); Esta função armazena o dado que é atribuido pelo usuário armazenando-o em uma variavel. Este armazenamento é representado acima por &meninos, ou seja, receba o valor do usuario e o armazene na variavel meninos. soma = meninos+meninas; Atribui a variavel soma um valor igual a soma de meninos e meninas. fflush (stdin); getch(); return 0; Nas próximas aulas, estudaremos a utilização desses comandos no final do programa. Bom galera, intao é isso, espero que tenha ajudado alguém que está iniciando, e que gostem da aula. Caso assim for, estarei preparando mais alguma coisa para compartilhar com vocês. Aceito sugestões e criticas - desde que sejam CoNsTrUTiVaS - . Até a proxima.
  6. Fast Attack [C/FOTOS]

    Eai povo,tranquilo no mamilo? :palm: Eu vim aqui ensinar a vocês a colocar Fast Attack no seu OT, então vamos começar. Primeiro: Vá até a pasta do seu ot abra ela, depois abra a pasta Data>XML proucure dentro da pasta XML esse arquivo: Clique com o botão direito do mouse em cima do arquivo "Vocations" e selecione a opção "Editar", como mostra abaixo: Depois que você clica em "Editar" vai abri um arquivo no Bloco de notas mais ou mesno assim: Agora proucure por essa parte do texto: Mude o valor que está dentro das (" "), que nesse caso é 508, você muda ele pra menos, quanto o menor o valor mais rapido o hit fica. Lembrando que se você quer que todas as vocações fiquem com o ataque mais rapido você tem que muda de todos, vocação por vocação. Para começar a funcionar no OT você tem que fechar e abrir o OT de novo ou dar Reload>Vocations. Espero que tenham entendido o tutorial. Te ajudei, gosto do tuto então Doa-me V$ =D Obrigado.
  7. ..::: Saiba Como Editar Itens :::..

    ..:::: Saiba Como Editar Itens ::::.. By LordBelkil Versão no qual o Tutorial foi baseado: 8.5 Autor: LordBelkil (Eu) Se for postar em outro forúm coloque os créditos do autor, ou seja, EU ._. Bom pessoal, como so vi um tutorial que explicava a editar itens 8.0 ou 8.1 do dudots, resolvi fazer esse tutorial para os iniciantes explicando tudo direitinho já que na versão alguns attributes sairam e vieram outros. Se você não sabia editar ou criar itens novos pro seu servidor, depois desse tutorial vai saber como tudo isso é moleza Sim o tutorial tem que ser grande pois tem tudo e está bem explicado na minha opinião ._. [Atualizações] O que será explicando no tutorial: - Como mudar o ataque e defesa de uma arma ou shield - Como colocar pra um item dar ml ou skill - Colocar pra uma arma ser de duas mãos - Como mudar o arm de um equipamento (ex: Legs, Helmets, Armors, Necklaces, etc..) - Como colocar pra uma arma ter dano elemental - Como colocar proteção ou não de um elemento a um item - Como adicionar velocidade a um item (Ex: BOH e Coconut shoes) - Como Criar/Editar uma Wand ou Rod (Passo a Passo) [NEW] E MUITO MAIS... E agora ao tutorial: 1 - Antes de tudo vá na pasta do seu servidor e vá em data/items/items.xml e abra. 1.1 - Assim que abrir o itens.xml Procure (Ctrl+F) pela Focus Cape e encontrará isso: 1.2 - Explicando os Attributes <item id="8871" article="a" name="focus cape"> Essa attribute da o id e nome ao item. Nota: No inglês temos os articles "a" e "an", usamos o "a" quando a primeira letra do substantivo é consoante e usamos "an" quando a primeira letra é vogal. (Ex: a blue robe, a bright sword, an amazon armor, etc...) Obs: Aconselho a nunca mexer no item id. <attribute key="weight" value="2100"/> Este atribute é o da o peso do item, ou seja, a focus cape pesa 21 oz. (Nota 100 = 1 oz) Este atribute é obrigatorio em todos os itens. <attribute key="armor" value="9"/> Este atribute dá o armor ou a "arm" ao item. Lembrando que esse atribute só pode ser usado apenas em equipamentos. <attribute key="slotType" value="body"/> Este atribute é o que vai selecionar onde o item vai ser equipado, em outras palavras, o tipo do item se ele vai ser uma armadura, uma arma, um colar, etc... Ele também é obrigatorio em todos os equips. Caso queira aqui vai uma pequena lista: <attribute key="magiclevelpoints" value="1"/>Esse atribute dá ML (magic level) ao item. ---------------------------------------------------------------- ARMAS/WEAPONS 2 - Para explicar os atributes das armas usarei a Bright Sword: 2.1 - Bom, como todos sabem no tibia existe três tipos de armas que no qual são : Axes, Swords e ClubsEntão vamos começar por esse atribute: <attribute key="description" value="The blade shimmers in light blue."/> Esse atribute dá a descrição do item quando um player der look. <attribute key="weaponType" value="sword"/> Este é o atribute que faz a arma ser um axe,sword ou club. No caso a Bright sword é uma sword xD. Se quiser mudar basta mudar o value="sword" para value="axe" ou value="club". <attribute key="defense" value="30"/> Este atribute dá a defesa/def á arma que também é usad em shields. <attribute key="attack" value="36"/> Atributo que seleciona o ataque da arma. Pelo amor de deus, não usem isso em shields ou equips... tenham bom senso o.o' <attribute key="slotType" value="two-handed"/> Este atributo não tem na Bright Sword por que ela é de uma mão, mais caso queira deixar de 2 mãos basta apenas usar esse atribute. <attribute key="extradef" value="1" /> Este atribute da defesa extra ao item, como por exemplo a bright sword é (atk:36 def:30+1) e como vocês também ja viram em alguma database ou no tibia mesmo itens com esse +1, 2, 3, etc... 2.2 - Adicionando Dano elemental a uma Arma: <attribute key="elementFire" value="10"/> Dano de fire <attribute key="elementEarth" value="10"/> Dano de earth <attribute key="elementIce" value="10"/> Dano de gelo <attribute key="elementEnergy" value="10"/> Dano de energy <attribute key="elementHoly" value="10"/> Dano de holy <attribute key="elementDeath" value="10"/> Dano de death <attribute key="elementPhysical" value="10"/> Dano fisico o.o' Usado um desses o elemento diminuirá o ataque da arma, ou seja, a Bright sword por exemplo se eu usar o atribute: <attribute key="elementFire" value="10"/> Ela ficará com (atk:26 + 10 fire damage def:30) [36-10=26] ---------------------------------------------------------------- BOWS, CROSSBOWS E SPEARS 3 - Agora para explicar essa categoria irei usar a Bow, a arrow e a spear. 3.1 - Primeira a Arrow. <attribute key="slotType" value="ammo"/>Com este atribute a arrow deve ficar no lugarzinho da flecha para ser usada. <attribute key="hitChance" value="90"/> A chance de sucesso do player de acertar o alvo, ou seja, o player com uma arrow tem 90% de chance de acertar um Dwarf por exemplo. <attribute key="ammoType" value="arrow"/> Neste atribute ou você coloca arrow que será utilizado apenas por Bows/Arcos ou bolt que será apenas usado por Crossbow/Besta. <attribute key="shootType" value="arrow"/> Animação no qual a flecha aparecerá indo em direção ao alvo. Lista das animações: <attribute key="weaponType" value="ammunition"/>Este Atribute faz o item virar uma munição. Coloque ele Apenas em arrows e bolts. <attribute key="ammoAction" value="removecount"/> Ele serve para remover 1 arrow/bolt por tiro. Aconselho não mecher ai. 3.2 - E agora a Bow: <attribute key="weaponType" value="distance"/>Come ste atribute a bow fica sendo uma arma de distância <attribute key="ammoType" value="arrow"/> Usando este atribute a bow precisará de algum tipo de arrow para atirar. <attribute key="range" value="6"/> Com este atribute você determina a distancia da qual ele pode atirar, ou seja, a bow pode atirar a 6 quadrados de distância. 3.3 - Vamos a Spear: <attribute key="breakChance" value="10"/>Essa atribute dá a spear uma chance (10%) de quebrar a cada hit. <attribute key="ammoAction" value="moveback"/> Esse atribute faz com que a spear em vez de ficar no chão volte para sua mão sem ter que usar o atribute de charges. o resto eu expliquei com a bow e a arrow. ---------------------------------------------------------------- NECKLACES E AMULETS 4- Vamos começar com os Necklaces e Amulets e para isso eu escolhir o Elven amulet. <attribute key="charges" value="50"/>Esse atribute dá a quantidade de cargas/charges ao amuleto. <attribute key="charges" value="1" /> <attribute key="preventDrop" value="1" /> Essa attribute é o mesmo que é usado no aol, ou seja, ele salva seu loot mais perde o aol. Pra funcionar corretamente ele precisa do atribbute charges com valor "1". <attribute key="showcharges" value="1"/> Essa atribute serve para quando o player der look no amuleto mostrar a quantidade de charges ele tem. Obs: Não mexa ai. <attribute key="showattributes" value="1"/> Esse atribute serve para mostrar tudo que ele absorve. <attribute key="absorbPercentAll" value="5"/> Esse attribute serve para o amuleto absorver todos os tipos de danos em 5%. Caso queira que absorva um elemento em especifico aqui vai uma lista: Obs¹: Caso queira que ele receba mais dano em vez de absorver basta colocar o " - " na frente do número.(exemplo: <attribute key="absorbPercentPhysical" value="-10"/> ) Obs²: Esses atributes também pode ser usado em shields,equips e até em rings. ---------------------------------------------------------------- RINGS 5 - Bom, o tutorial está quase no fim faltando apenas os Rings e as Backpacks. Então vamos ao que interessa, e para isso escolhi o Power Ring OBS: Certfique-se que ao editar ring, ver se está editando o ring certo, ou seja, o que brilha quando é equipado... 5.1 - Explicando os Attributes <attribute key="duration" value="300"/> Essa atribute dá o tempo que o item durará equipado, ou seja, o power ring dura 30 minutos (Nota 10 = 1 min) <attribute key="decayTo" value="0"/> Essa atribute faz com quer, quando o tempo do power ring acabar ele "some" <attribute key="transformDeEquipTo" value="2166"/> Essa atribute diz em qual item ele tranformará quando desequipar o power ring. Recomendo não mexer ai. <attribute key="skillFist" value="5"/> Essa atribute aumenta seu Fist Fighting em 5 pontos. <attribute key="showduration" value="1"/> Esse atribute serve para quando o player der look no ring mostrar quando tempo ele ainda tem. Recomendo de novo que não mexa ai. <attribute key="manashield" value="1"/> Esse atribute faz com que o player fique em estado de "utamo vita". Não precisa mexer no "1". <attribute key="healthGain" value="1"/> -- HP ganho <attribute key="healthTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo) Esses atributes tem que ser usados em conjunto. Eles fazem com que você recupera 1 de HP a cada 3 segundos. <attribute key="manaGain" value="4"/> -- MP ganho <attribute key="manaTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo) Esses atributes tem que ser usados em conjunto. Eles fazem com que você recupera 4 de MP a cada 3 segundos. <attribute key="speed" value="20"/> Esse atribute aumenta a velocidade em "20" niveis, se quiser aumentar ou diminuir você ja sabe como xD <attribute key="skillSword" value="4"/> Essa atribute aumenta seu skill de sword em +4 <attribute key="skillAxe" value="4"/> Essa atribute aumenta seu skill de axe em +4 <attribute key="skillClub" value="4"/> Essa atribute aumenta seu skill de club em +4 <attribute key="skillShield" value="4"/> Essa atribute aumenta seu skill de shield em +4 <attribute key="suppressDrunk" value="1"/> Essa atribute deixa você imune a ficar bebum/bêbado/tonto/drunk/ etc... o.o' <attribute key="invisible" value="1"/> Essa atribute deixa você invisivél como se estivesse usando "utana vid" ---------------------------------------------------------------- BACKPACKS E BAGS 6 - Bom galerinha, esse é o ultimo item do tutorial e também o mais simples Então pra fechar com chave de ouro escolhi a Crown Backpack: <attribute key="containerSize" value="20"/>É esse atribute que dá slots pras backpacks e bags. No caso a Crown backpack tem 20 slots. ---------------------------------------------------------------- WANDS AND RODS 7 - Criando uma Wand ou Rod. Para explicar isso eu escolhi a shadow sceptre. Abra o items.xml e procure por ela e encontrará isso: Obs:Como vocês podem ver a shadow sceptre é um club, mas ela pode ser facilmente tranformada em uma wand ou rod e você vai descobrir como. 7.1 - Para transforma-la em uma wand eu editei e adicionei isso: Obs: Caso tenha algums dúvida os attrbutes acima foram explicados anteriomente no tutorial. 7.2 - Como vocês viram eu apenas retirei os attributes de ataque e defesa editei o weaponType de "club" para "wand" e adicionei alguns outros. 7.3 - Agora vamos para data/weapons/weapons.xml e adicione essa tag: 7.4 - Explicando:wand id="7451"- ID da nova wand que no caso é a shadow sceptre level="60" - Level nescessario para usar a wand mana="22" - Mana gasta por hit da wand min="62" e max="102" - Dano minimo e máximo da wand type="death" - Tipo de dano da wand vocation id="1" - Vocação na qual pode usar a wand. Lembrando que 1 = Sorcerer e 2 = Druid CONSIDERAÇÕES FINAIS: Esse Foi meu primeiro Tutorial e estou aberto a criticas e sugestões. Bom acho que existe muitos outros atributes que não foram colocados mais acho que coloquei os mais importantes. SIM eu sei o tutorial tá grande e acho que nem todos vão ler até ao fim, mas ta ai pra quem precisar de ajuda e assim acabar com algumas duvidas frequentes no suporte. Sempre que achar algum bug ou algo novo adicionarei ao tópico. PS: Se gostou do tutorial me dá um . Não custa nada
  8. How to Make a Sword by Wolowitz

    [Conteúdo Removido] Até que a moderação dê valor...Não só para esse tutorial,e sim para toda a seção. Peço que não volte o tutorial usando algum log de edição. Quando eu ver o que foi feito..eu mesmo volto o tutorial. Atenciosamente, Victor.
  9. Apostila Lua !!

    ~~* Apostila Lua *~~ Como participo da seção de scripting a muito tempo eu sei que ha poucos tutorias que realmente ensinam como scriptar !! Sabendo disso eu decidi postar uma apostila para vocês espero que se envolvam e tentem aprender alguma coisa !!!!!! Primeiramente queria falar que eu não sou o autor da mesma portanto não quero créditos por isso !! Segundo espero que isso ajudem vocês e que vocês venham fazer bom uso desta !! Agora sem mais delongas vou postar aqui o link para vocês usarem e se divertirem =P
  10. Como criar Magias de Luz e Buff

    E aí? Galera! Vim aqui, para ensinar a vocês como criar magias de luz, e de buffs! Não são muitos os que sabem criar magias assim,fui inspirado a criar esse tutorial graças a um post que deixaram numa magia que postei. índice: índice Magias de Luz Magias de Buff Magias de Luz! Poucos realmente sabem tudo oque pode ocorrer dentro de uma magia de luz, Não sei muito,também, mas o pouco que sei, acho que vai ajudar muita gente Vejam, como exemplo a magia "Light, ou Utevo lux": local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_LIGHT) [color="Blue"]setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 6)[/color] [color="Red"]setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 215)[/color] setConditionParam(condition, CONDITION_PARAM_TICKS, (6 * 60 + 10) * 1000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Eis que temos o Level e a Cor. CONDITION_PARAM_LIGHT_LEVEL -- É a condição que define o tamanho em números da área iluminada, ou seja, o tamanho da área da luz. CONDITION_PARAM_LIGHT_COLOR -- É a condição que define a cor da luz, existem 255 cores para luzes, assim como para textos animados!(para ver mais cores, no jogo, com o char do GOD/GM/CM/etc. digite /y n,sendo n um número) Vou dar um exemplo de luz agora: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_LIGHT) setConditionParam(condition, CONDITION_PARAM_LIGHT_LEVEL, 7) setConditionParam(condition, CONDITION_PARAM_LIGHT_COLOR, 5) setConditionParam(condition, CONDITION_PARAM_TICKS, (6 * 60 + 10) * 1000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Percebam que mudei apenas o level e a cor, criando assim uma magia de luz com área um pouco maior que a do utevo lux e cor "5" que seria Azul A TAG para essa magia ficaria assim: <instant name="Light Blue" words="utevo lux blue" lvl="1" mana="20" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="support/bluelight.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="0"/> <vocation id="8"/> </instant> Vejam como fica com umas fotos: [spoiler=Foto sem magia] [spoiler=Foto com magia] Bônus!!! Aqui temos uma tabelinha com cores mais básicas para suas magias de luz Azul = 5 Azul Claro = 35 Verde = 55 Verde Claro = 30 Cinza Claro = 172 Vermelho = 180 Laranja = 198 Branco(usado na exp) = 215 Roxo = 255 Pronto, para magias de luz, é isso Magias de Buff! Novamente venho dizer que muito poucos sabem realmente como criar/editar uma magia de buff, então vou ensiná-los! Vamos ver como exemplo a magia "Swift Foot, ou Utamo tempo san" local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) [color="DarkGreen"]local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000)[/color] setConditionFormula(condition, 0.8, -72, 0.8, -72) setCombatCondition(combat, condition) [color="Red"]local disable = createConditionObject(CONDITION_PACIFIED) setConditionParam(disable, CONDITION_PARAM_TICKS, 10000)[/color] setCombatCondition(combat, disable) [color="Blue"]local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_SUBID, 1) setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) [/color]setCombatCondition(combat, exhaust) function onCastSpell(cid, var) return doCombat(cid, combat, var) end createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_SUBID, 1) setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000) -- Adiciona Exhaust ao jogador, assim ele não poderá usar essa magia durante 10 segundos. createConditionObject(CONDITION_PACIFIED) setConditionParam(disable, CONDITION_PARAM_TICKS, 10000) -- Eis que temos algo interessante, Pacified significa Pacificar/pacificado, em otservs, é uma condição para que o jogador não possa atacar nem usar magias! createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000)-- Todo mundo conhece né? mas enfim, é o que faz correr. As buffs são bem desconhecidas pra muita gente, tipo eu :cry:, então não vou conseguir criar muitos exemplos :thumbsdown: Para editar, é só mudar os números, se quiser adicionar outro tipo de buff, vejam exemplos que conheço: local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 150) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setCombatCondition(combat, condition) Isso aumentará a skill distancia de quem usar em 150% Podemos usar também SWORDPERCENT,CLUBPERCENT,MELEEPERCENT,SHIELDPERCENT, e etc!(para magic level: local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_BUFF, 1) setConditionParam(condition, CONDITION_PARAM_SUBID, 1) setConditionParam(condition, CONDITION_PARAM_TICKS, 90000) --Durante 90 Segundos setConditionParam(condition, CONDITION_PARAM_STAT_MAGICPOINTS, 35) --Aumentará 35 Magic level's setCombatCondition(combat, condition) Obs:Magic points:Vi esse parágrafo num script da magia do Astro,a Utori son,não testei, mas deve funcionar) Valores negativos representam que irá tirar tal quantidade Enfim, acho que meu tutorial acaba aqui. Espero que tenham entendido tudo, qualquer erro/dúvida, mandem mensagem para mim que corrigirei. Obrigado Créditos, a mim pelo tutorial, e a Astro, pelo parágrafo dos magic points
  11. Perspectivas de um Artista Gráfico

    Olá estava dando uma volta novamente pelo forum para ganhar ums v$ rapidos mais experiencia como profissional quando me deparei com um belo tutorial de Mapa. Adorei e entrei em um dos links que estava sendo divulgado pelo post cai na pagina do forum do tibiaBr lá fui vendo ums artigos e vi algo que foi realmente bom para mim por isso vou passar ele para cá ja com os creditos e o link do Original. Artigo originalmente escrito por Tibia.com. Tradução por Havengar. Observando dos ombros de um artista gráfico Nós normalmente introduzimos novas criaturas em teasers especiais antes delas serem implementadas com o update. Além de vários detalhes em relação a criatura em si, há um acompanhamento de arte conceitual e screenshots nesses teasers para dar uma primeira impressão do que está por vir. A arte conceitual e os sprites das criaturas são geralmente criados pelo artista gráfico Jan, como já explicado no artigo em relação a equipe de conteúdo. Mas a nossa comunidade também sabe ser muito criativa e muitos jogadores expressam sua criatividade por meio de fan art. Nós já recebemos muitas perguntas em relação os gráficos do Tibia e vários jogadores obviamente mostram muito interesse em todo o processo de criação de gráficos e trabalho de arte. Há poucos dias atrás, Jan permitiu que os community managers observassem de seu ombro enquanto estivesse fazendo seu trabalho criando a arte conceitual e sprite de uma nova criatura que vai ser implementada nesse verão (inverno brasileiro). E claro, queremos compartilhar com você a pré-estréia dessa exclusiva criatura e na entrevista a seguir, você encontrará muitas dicas incríveis diretamente do próprio artista. Entrevista com o artista Jan CMs: Muito bem, Jan, vamos direto ao ponto. O que você desenhará para nós? Estamos muito curiosos e não podemos mais esperar! Jan: Após uma pequena conversa com o pessoal da equipe de conteúdo, nós decidimos que seria muito legal ter uma Medusa para o jogo. A Medusa é uma criatura oriúnda da mitologia grega, mas várias adaptações foram feitas em muitos jogos de fantasia e eu acho que é uma boa hora para uma versão Tibiana, então vamos nós. CMs: Realmente! Então você concordou com a Medusa. Existe algumas orientações que você deve seguir em relação ao design? A criatura tem que se encaixar nas configurações do Tibia, claro, mas existe restritivo ou em especial? Jan: Obviamente as serpentes formando o cabelo dela são uma característica que deve estar presente para ela ser reconhecida. De fato, deve ser claramente visível ou, digamos assim, "visualmente legível" quando eu criar a criatura no jogo mais tarde. Devido a eu não querer que as pessoas confundam nossa Medusa com apenas uma bruxa com um mau penteado, vou usar uma quantidade de escala diferente para as serpentes, tornando-as muito maiores em relação ao resto do seu corpo. Então, com esse pensamento em mente, eu vou fazer um esboço dela em meu caderno de rascunho. (ele começa a esboçar e os CMs estão assistindo atentamente) CMs: Agora que você terminou o rascunho nós podemos olhar seu caderno? Jan: Aqui está. (exibe o desenho) CMs: Uau, incrível, tem tantos detalhes, agora isto é um verdadeiro tesouro, podemos ficar com ele? (risos) Não, bricandeira. Você provavelmente vai precisar de rascunho, não vai? Jan: Sim, este esboço me dá uma boa idéia de algumas das principais características que eu quero chegar, sua face alongada e cabeça com as grandes serpentes saindo pelos lados e a cobra saindo pelas costas, seu longo manto, seu braço fino com mãos grandes e unhas pontudas, além da pequena cauda de serpente saindo pela parte de trás do seu manto. CMs: Ela realmente parece assustadora, espero que não viremos pedra se continuarmos olhando assim para a imagem. E a propósito, ela parece que está prestes a rodar a serpente como um chapéu de penas, que diabólico! Jan: Hehe, parece que o rascunho foi bem recebido, então é hora de passar isto para o photoshop. Eu também gostei da pose e da atitude que ela emite, então eu vou transformar isto em um pedaço de arte conceitual. Uma coisa que eu percebo é que eu não desenhei uma cabeça proporcional em termos de quantas serpentes saem da cabeça dela no lado esquerdo e direito, mas isto pode ser facilmente corrigido, quando for escaneada para o computador. CMs: Então você escaneia e em seguida preenche o esboço com cor? Jan: Na verdade, muitas vezes eu trabalho em escala cinza antes de colorir. O motivo é que é muito mais fácil de controlar os valores em uma imagem dessa forma, uma vez que os valores são bons, não vai ser muito difícil adicionar cor posteriormente. Valor é um termo que define o alcance das luzes e escuridão em uma imagem. Nesta fase é muito importante aperfeiçoar as formas da minha criatura, torná-las claramente legíveis e dar uma ilusão de volume para cada uma das formas que compõem a minha criatura e, claro, a criatura como um todo. Eu já ressaltei alguns efeitos atmosféricos, mas esta parte vai ser sobre o personagem somente, por isto vou manter o fundo com elementos simples. Eu também adicionei um pequeno elemento de design na testa dela e corrigi pequenos erros no esboço durante as várias fases de pintura em escala cinza. Eu gradualmente melhorei alguns detalhes, limpei um pouco o fundo e terminei essa parte. Eu poderia tornar essa parte um inferno, enlouquecer com enfeites no vestido dela, modelar a pele dela e qualquer outra coisa, mas isto não é um trabalho de marketing. É limpo, os principais elementos de design são estes e ela causa uma atitude petrificante legal, então eu decidi que ela está pronta para algumas cores. CMs: E como você vai fazer isso? Ela é toda cinza! Jan: Eu uso uma combinação de camadas no photoshop, a mistura de modos para definir cor, multiplicador e camada. Estas pinturas de camadas em escala cinza que eu fiz em etapas anteriores permitem que eu controle as cores separadamente. Eu uso a combinação de tais camadas até que a coloração esteja do jeito que eu quero. Uma vez que todos os valores foram estabelecidos em escala cinza, quase todo o sombreamento é preservado e permite-me focar em encontrar uma palheta de cor que funcione bem para este personagem. Eu vou começar com alguns tons pálidos de azul para a pele e alguns violeta para seu manto, o cinto vermelho na cintura vai ser um bom separador entre a parte superior e inferior do corpo. Tudo isto vai fazer um contraste legal contra o verde que eu escolhi para as serpentes. Eu tinha uma versão com uma palheta monocromática que funcionou legal, mas neste momento eu estou pensando que o contraste da cor irá fazer que o sprite fique melhor mais tarde. A cor escolhida para as serpentes é algo óbvio, mas eu gosto da ligação ingame entre as atuais Serpentes e Cobras Tibianas, e em certa medida a Hydra também. E vai ser isso que vou pegar como parte conceitual, que vai servir bem como uma referência quando eu fazer o sprite. CMs: Sprite? Você está referindo-se à pequena figura dentro do jogo, não é? Jan: Sim. Ao fazer uma criatura para o Tibia, eu sempre começo com uma imagem parada tanto em direção ao sul, como para o norte. Eu desenho as primeiras formas com a ferramente de pincel no photoshop, tentando obter a proporção completa para trabalhar na perspectiva tibiana. Para uma criatura com uma cabeça especialmente complexa como essa aqui, é uma boa idéia manter os elementos principais: corpo, cabeça e braços, separadas em camadas do modo como eu vou fazer. CMs: Você pode descrever o que vai fazer passo-a-passo? Jan: Claro. O primeiro passo mostra um bom ponto de início que prega a pose, já que estabelece uma série de proporções da criatura, assim como o grande torso em relação à cabeça e o corpo, que está confortavelmente escondido debaixo de seu manto nesse caso. Eu adicionei em seguida os braços em uma nova camada no segundo passo. A postura dos braços dela foi um desafio de escolher, uma vez que mais tarde os braços dela ficariam cobertos pelas serpentes caindo de sua cabeça. Eu vou por um ângulo pronto para a posição de ataque, que se encaixa com o temperamento deste personagem e também me permite mostrar um pouco do braço saindo debaixo das serpentes, como pode ser visto no terceiro passo, onde eu coloco a cabeça em uma camada acima de tudo. CMs: Incrível, ela já se parece com uma Medusa! Jan: Sim, em termos de anatomia e proporções, está tudo no lugar com este passo. Para melhor entendimento, eu sempre sustento um par de serpentes em um alcance parecido de tons de verde. Mesmo que uma grande parte da estrutura é coberta, a pose e o gesto ainda é facilmente entendido, então, nessa base, ela está pronta para o detalhamento no quarto passo. Eu adicionei partes mais claras e escuras para as formas, desenhei os olhos e criei um pequeno enfeite no vestido dela. Esta parte abrange os principais processos envolvidos na criação de uma criatura para o Tibia, salvando pequenas mudanças, esta vai ser a parte virada para o sul. Agora tudo que resta fazer é continuar a parte com o rosto para cima, e então as animações para as duas direções, ah e sim, aqueles que serão fortes o suficiente para combater com ela, seu cadáver em três estados de decomposição. Já que é uma criatura basicamente proporcional, tendo em vista que não tem um escudo ou espada em uma mão, ou uma anatomia mutante bizarra, as direções restantes para à esquerda e direita podem ser facilmente criadas girando os sprites. Finalmente, a bola passa para a equipe de conteúdo novamente, que torna os sprites numa Medusa que espero que fique bem legal e que se encaixe no jogo. CMs: Muito obrigado Jan, por doar um pouco do seu tempo e falar conosco sobre o seu trabalho. Nós realmente gostamos dessa viagem criativa! Jan: O prazer foi meu! Nós esperamos que a descrição de Jan venha como algo útil para quem está interessado no desenho e no processo de criação de gráficos do jogo. Como alguns de vocês devem saber, Tibia foi dependente de voluntários por um logo tempo e muitos gráficos do jogo foram desenhados por jogadores. Atualmente, a maioria do trabalho é feito em casa por nossos artistas gráficos, mas gostaríamos de aproveitar essa oportunidade para agradecer a todos os talentosos artistas externos que nos forneceram muitos itens maravilhosos e grandes sprites ao longo dos anos. O trabalho de vocês contribuiu para o estilo único do Tibia, com seu gráficos charmosos. Gostaríamos de dar um destaque especial e um obrigado para Izuael por todos os itens, ambientes gráficos e muito mais, Lord Ariakas pelas criaturas, ambientes gráficos e por último mas não menos importante, Oin por tudo que ele fez, especialmente pelo incrível equipamento técnico. Eles continuam ajudando e trabalham junto com Jan esporadicamente. Obrigado! Link de retorno ao artigo [Oficial] Realmente espero que seja util para voces.
  12. [Iniciante] Barcos

    OTserv Networks Barcos Olá. Neste tutorial veremos como montar um barco, farei um pequeno e bem detalhado para obter uma visão geral melhor. Vamos lá! Conceito Prática Créditos Conceito Bem, vamos ter em mente que fazer um barco é simples porem trabalhoso. E, "quanto menor, melhor", isso fica em " porque não é levado ao pé da letra, mas se você fazer um barco pequeno e simples é sempre melhor, não minusculo, um barco normal. Você encontrará todos os items mais importantes em Boats. Também vemos muitos barcos largos e curtos, isso é horrivél, vamos ficar com o formato fino e cumprido. (:viado:) Prática Facil, Prático e Rapido. 1º Passo Crie a base. 2º Passo Segundo e Terceiro andar. (IDs: 4883 a 4905.) 3º Passo Pilares. 4º Passo Preencha e coloque a base das velas. 5º Passo Velas. 6º Passo Detalhe! O Detalhamento é bem simples, o barco que fiz ficou bem ruim, mas a intenção é explicar a estrutura. Créditos Obrigado
  13. [Ed.] Troque as Bordas de Montanhas

    Olá pessoal, Eu Sou Felipe Zucchi e Hoje vou ensinar a vocês como trocar aquela borda "groça" de montanha pela borda "fina" :] Bom, primeiramente vá em "C:\Arquivos de programas\Remere's Map Editor\data\850" ou a versão que você quer trocar as bordas ;] Agora abra o arquivo Borders. Agora você pegará o primeiro parágrafo: E substituirá por isso: Agora salve e feche o arquivo. Pronto, as bordas estão trocadas :]. Antes As Bordas De Sua Montanha Eram Assim: E Agora São Assim :] Espero ter ajudado vocês e até a proxima! Isso ajudara vocês a pouparem tempo em seus mapas :] Creditos: By Eu, eu acho. :cry:
  14. Jungle Nature - The Basic Um tutorial bem simples, apenas para dar uma revisada e/ou ajudar quem não pegou o jeito ainda. O basico é colocar arvores altas e uma vegetação bem colorida, porém, discreta, sem exageros. 1º Passo Apenas colocando o ground usado em jungle. 2º Passo A "estrada", para dar uma diferenciada no ambiente. 3º Passo Colocando as bordas, simples. 4º Passo Colocando plantas, arvores, e etc... Tudo isso você encontra em Nature do seu mapa, Vamos fazer uma nature bem estreita, mas cuidado para não tampar tudo, afinal é uma floresta. Diferencie bastante as cores das plantas, mas deixe o verde como cor predominante.
  15. SQLite Manager diretamente pelo Firefox!

    [TUTORIAL 100% Original, por mim!] Bom, vou compartilhar com vocês um método extremamente prático e revolucionário de editar a database do seu server, este vai ser o primeiro Tutorial em todos os sites de OTServ, método totalmente descoberto por mim! Em primeira mão exclusivo para o OTNET! ______________________________________________ Primeiramente vou explicar como funciona! SQLite Manager é uma extensão para o Mozilla Firefox que permite o gerenciamento por meio do navegador de qualquer banco de dados SQLite existente no computador. O SQLite é uma biblioteca C que implementa um banco de dados SQL embutido, sem a necessidade de ter um sistema gerenciado de bancos de dados, como o MySQL ou Oracle. Desta forma, com SQLite Manager você pode acessar esta biblioteca diretamente pelo navegador do Firefox, tornando-se uma boa alternativa para quem necessita de velocidade e de recursos não oferecidos pelos demais sistemas de gerenciamento. Assim você pode configurar seu OTServ sem precisar instalar programas como o XAMPP por exemplo, bom, agora vamos ao que interessa! _____________________________________ [1º Passo - Instalando] -> Clique aqui para instalar a extensão SQLite Manager <- Logo após, clique em instalar agora! [2º Passo - Abrindo o SQLite Manager] Após instalar, para abrir a interface do gerenciador, clique na opção Ferramentas, na Barra de Ferramentas do Firefox e escolha a opção SQLite Manager. Em seguinda, abre-se uma janela de opções do programa, sendo possível abrir os bancos de dados, bem como criar novos e gerenciar por completo todos eles. [3º Passo - Administrando o SQLite] Clique na pastinha amarela, vá até a pasta do seu OTServ (como exemplo usei o Styller), em "Arquivos do tipo", selecione Todos os arquivos, e selecione o banco de dados do seu OT (no caso aqui seria o Styller.s3db) Conecte-se ao banco e faça todas as modificações que desejar como criação e cópia de tabelas novas ou índices, alterar accounts, executar bancos de dados SQL, bem como configurar todas as opções da base de dados. :loool: Espero que tenham gostado ______________________ Créditos: 100% para mim!
  16. TUDO sobre Extensions! [RME]

    ----------------------------------------------- Criado, editado e feito por: Akurabr22. Ultima revisão em: 12/03/2009. Revisão 04*. *Corrigido bug's nos códigos inseridos e link's para baixar o programa funcionando. *Adicionado uma mini-explicação ao criar extension no programa. ----------------------------------------------- 01 - Afinal de contas, o que é? Este sistema foi implantado no Rme's Map Editor desde suas versões mais antigas. Foi feito para fazer com que seja mais aproveitado ID's que são quase que extintos por não serem usados, ou as pessoas não saberem da sua existência. Foi feito também, para facilitar a vida dos mapper's. Como? Simples, você pode criar um tileset de "grass" que quando você inserir no mapa, já vá com a borda e tudo. "Grass" é só um exemplo, ok?! :laugh: 02 - E como ele funciona? Simples, as extensões são salvas geralmente em C:/Arquivos de Programas/Remere's Map Editor/extensions/ ( Local padrão da instalação do Map Editor. ) É salvo no tipo de arquivo .XML, e sua linguagem de programação lembra bastante a dos NPC's. 03 - E agora, como posso começar a usar este sistema maravilhoso? Pois é, poucas pessoas sabem da funcionalidade muito importante que este sistema propõe. Alguns se quer sabem que ele existem. Estão dando bobeira, já que é algo que pode adiantar e MUITO a vida de pessoas como por exemplo: Extensions de criar barcos, paredes de montanhas de terra, entre muitos outros. Primeiramente, as tags principais deste sistema no arquivo .XML: <materialsextension name=" É o nome da extensão. Ela aparecerá em Extensions, dentro do Map Editor. Não tem muita importância, além da organização que dará para suas extensions. author=" É o nome do autor. No caso, será seu description=" É uma pequena descrição sobre o que o extension funciona. Aparecerá também em Extensions, dentro do Map Editor. client=" Aqui você citará as versões que seu extension suportará. Caso coloque 8.20, só aparecerá sua Extension caso o mapa seja para versões 8.20+. <tileset name=" Aqui será o nome do Tileset, caso você crie um Extension do tipo: Grounds, no caso, que utilize tiles. Irá aparecer no Map Editor o nome que você colocar aqui <brush name="** Aqui será o nome do Brush, caso você crie um Extension do tipo: Doddad, no caso, que utilize objetos, enfim. **: Aqui também serve para denominar o nome do objeto que você criar lá no Map Editor. Por exemplo, se você colocar Grass, quando aparecer dentro do Map Editor, vai tá no nome: Grass. server_lookid=" É a ID do item que você quer que apareça no Map Editor como ilustração. Na Grass por exemplo, aparecerá a imagem, no caso a ID, da Grass normal; como ilustração. draggable=" Se é possível "arrastar". Ainda não compreendi muito bem pra que serve essa tag, porém ela deve se encontrar em todos extensions que você criar. Classificado entre true ou false. on_blocking=" Se é possível "blockear". Ainda não compreendi muito bem pra que serve essa tag, porém ela deve se encontrar em todos extensions que você criar. Classificado entre true ou false. thickness=" Indicar a ''espessura''. Ainda não compreendi muito bem pra que serve essa tag, porém ela deve se encontrar em todos extensions que você criar. Classificado entre true ou false. <alternate> É uma sub-tag, dentro dela ficará a composite chance, <tile>, etc. <composite chance="80"> É a chance de que o "componente" ( no caso, os tiles que estiverem dentro desse componente ) pode ocorrer para aparecer. Por exemplo: Chance de 50 para Dead Tree, e outro composite com 50 de chance, com o tile de uma Magic Tree, isso fará com que crie uma "sorte" para um dos dois componentes aparecer no brush/tileset. <tile x="0" y="0"> <item id="XXXX"/> </tile> "x e y" Indica uma posição imaginária de onte o tile irá aparecer. "item id" Você irá indicar a ID do item ( no caso tileset/objeto/doddad) que você deseja que seja no extension. </tileset> Fecha a tag tileset name. <tileset name=" É quando você quer indicar o nome do tileset que irá aparecer. <terrain> É o nome da categoria que você irá colocar. Por exemplo, aí está terrain = Irá para o Terrain Pallete. O tileset name no final indicará o nome do grupo, no caso que eu coloquei foi: <tileset name="Cave">. Então irá para o grupo Cave, no Terrain Pallete. Pode ser substituido Terrain por Doddad, RAW, Item, enfim... </materialsextension> Fecha o extension Um exemplo de código de MINHA autoria, feito. É uma extension de 2 tiles de ruínas, muito interessante já que elas só se encontram no RAW Pallette e me adiantou muito :yucky: <materialsextension name="[b]Ruins Tiles[/b]" author="[b]Akura[/b]" description="[b]This extension adds two tiles of ruins, that is have a cool design to your ghostlands, for example.[/b]" client="[b]8.00;8.10;8.20[/b]"> <brush name="ghostland" type="ground" server_lookid="3152" z-order="3500"> <item id="3152" chance="90"/> <item id="3153" chance="85"/> </brush> <[b]tileset name="Cave"[/b]> <[b]terrain[/b]> <[b]brush name="Ruin Tile"[/b]/> <[b]/terrain[/b]> <[b]/tileset[/b]> </[b]materialsextension[/b]> Esses são uns dos principais, claro tem muitos outros, mas alguns não tem muita necessidade de eu citar aqui, e também existe um programa para facilitar a vida dos outros, com GUI e tudo mais. Assim, você não vai precisar escrevendo, mas isso é assunto pra outro sub-tópico. E também é mais interessante você aprender a programar ele manualmente, fará você compreender melhor. E afinal de contas... e o programa? Este programa foi feito por Bobany em 24 de novembro de 2008. Funções: Pode criar: wall brushes doodad brushes ground brushes carpet brushes borders Futuras funções: Multi Doodad Maker Auto Border/Carpet Maker Choose your Clients Este projeto foi abandonado, mas o arquivo continua funcionando, então ainda dá pra aproveitar ao máximo! :yes: COMO USAR: Após você criar seu extension escolhendo entre wall/ground/doddad/carpet/border, você clicará em Done. Então irá para a janela principal do programa, após isso você coloca seu nome e sua descrição em Author/Description, e clicará em Make Extension! Então você deverá clicar em Save, e escolher alguma pasta para salvar. Após isso, vá aonde você salvou sua extension, e terá um arquivo chamado 1. Abra ele com o Bloco de Notas, e insira após </brush> ( Ou outro nome que esteja ) e insira isto: <tileset name="Nature"> <terrain> <brush name="ghostland"/> </terrain> </tileset> Em tileset name="" Você colocará o nome do grupo da pallete. Em <terrain>, você mudará terrain para o nome da pallete que você deseja, no caso estará na Terrain pallete. Após isso, salve o arquivo como *.XML e Tipo de Codificação: UTF-8, e salve na pasta /extensions/ do seu RME. E Pronto estará funcionando perfeitamente ! Screenshot's: Downloads: Aqui. Alguns códigos de exemplo para vocês! <materialsextension name="Ghost Tile" author="Akura" description="A great extension for example." client="8.00;8.10;8.20"> <brush name="ghostland" type="ground" server_lookid="3152" z-order="3500"> <item id="3152" chance="90"/> <item id="3153" chance="85"/> </brush> <tileset name="Nature"> <terrain> <brush name="ghostland"/> </terrain> </tileset> </materialsextension> <materialsextension name="dirt mountain" author="Mackan" description="This adds the new mountain type to the mapeditor" client="8.20"> <border id="2141"> -- dirt mountain outer -- <borderitem edge="e" item="7999"/> <borderitem edge="s" item="8000"/> <borderitem edge="cse" item="7998"/> <borderitem edge="dse" item="8002"/> </border> <border id="2142"> -- dirt mountain inner -- <borderitem edge="e" item="7999"/> <borderitem edge="s" item="8000"/> <borderitem edge="dne" item="7999"/> <borderitem edge="dsw" item="8000"/> </border> <border id="2143"> -- dirt mountain optional -- <borderitem edge="e" item="8168"/> <borderitem edge="s" item="8169"/> <borderitem edge="w" item="7988"/> <borderitem edge="n" item="7989"/> <borderitem edge="cse" item="8371"/> <borderitem edge="cne" item="7996"/> <borderitem edge="csw" item="7994"/> <borderitem edge="cnw" item="7995"/> <borderitem edge="dnw" item="8135"/> <borderitem edge="dne" item="8137"/> <borderitem edge="dsw" item="8136"/> <borderitem edge="dse" item="8138"/> </border> <border id="2144"> -- dirt mountain to regular mountain -- <borderitem edge="e" item="8124"/> <borderitem edge="s" item="8123"/> <borderitem edge="w" item="8122"/> <borderitem edge="n" item="8121"/> <borderitem edge="cse" item="8126"/> <borderitem edge="cne" item="8128"/> <borderitem edge="csw" item="8125"/> <borderitem edge="cnw" item="8127"/> <borderitem edge="dnw" item="8129"/> <borderitem edge="dne" item="8130"/> <borderitem edge="dsw" item="8132"/> <borderitem edge="dse" item="8131"/> </border> <brush name="Dirt Mountain" type="border" server_lookid="8913" z-order="10000"> <item id="8133" chance="20"/> <border align="outer" to="mountain" id="2144"/> <border align="inner" to="none" id="2142"/> <border align="outer" to="none" id="2141"/> <optional id="2143"/> </brush> <tileset name="Nature"> <terrain> <brush name="Dirt Mountain"/> </terrain> </tileset> </materialsextension> Todos créditos do tutorial são para Akurabr22, no caso, eu. Tudo postado aqui é de minha autoria. Caso desejem postar em outro fórum, enviem-me um MP! É meu primeiro tutorial, então desculpem caso esteja algo ruim ou errado!
  17. FME - Funções do Map Editor

    FME (Funções do Map Editor) Introdução Oi, eu sou o Goku, tudo tranquilo? Este guia tem como objetivo explicar e/ou instruir (ah vá) na utilização de Editores de Mapa, suas ferramentas, dicas e afins. Caso esteja procurando a lista de editores de mapa (download) e/ou changelog de suas atualizações, clique aqui. Remeres Map Editor (github.com/hjnilsson/rme) O que é isso? Como o nome sugere, trata-se de um editor de mapas para Open Tibia, que foi (obviamente) criado por Remere. Seu desenvolvimento começou durante o verão de 2007 devido a frustração (dor de cotovelo) de Remere com o único map editor disponível na época, SimOne Map Editor, esse que sequer operava sob sistemas 64bits e era disponível apenas para Windows. Durante os primeiros dias de desenvolvimento, o editor de mapas utilizava um processador de software através do wxWidgets (*) para compatibilidade entre plataformas. No entanto, percebeu-se que esta solução era (uma mer#*) lenta na velocidade de renderização. Mais tarde o editor passou para uma renderização de hardware, utilizando o OpenGL (*) e mais controles avançados foram implementados, entre eles uma ferramenta de seleção muito mais poderosa com a funcionalidade de desfazer e os primeiros estágios do clássico auto-border, permitindo os mappers terem uma experiência mais (preguiçosa) tranquila durante o desenvolvimento. Ferramentas (Tools) (imagem ilustrativa) → Utilizando a Ferramenta de Borda (Border) Resume-se a um Auto-Border manual, colocando bordas automaticamente na área selecionada (utilizando o brush/pincel) → Alternar entre auto-border Habilitado/Desabilitado → (A) → Randomizar todos os pisos/grounds → Edit > Border Options > Randomize Map → Completar automaticamente bordas do mapa → Edit > Border Potions > Borderize Map → Completar automaticamente bordas selecionadas do mapa → Edit > Border Potions > Borderize Selection (CTRL + B) → Utilizando a Ferramenta de Apagar (Erase) Apagará apenas itens/paredes → Pressionando CTRL apagará todos os tipos de itens (incluindo Paredes/Walls, Pisos/Grounds e Itens) → Pressionando SHIFT é possível aumentar o brush size (tamanho da área). Observação: É possível utilizar ambas as hotkeys ao mesmo tempo. → Remover Pisos Especiais (PZ, No-PvP, No-Logout, PvP e House Tiles) Basta pressionar a tecla CTRL, desde que qualquer um dos ground brushs (ferramentas de piso) estejam selecionados. Pincéis (Brush Size) (imagem ilustrativa) Abas (Palette) (imagem ilustrativa) → Terrain Palette (Paleta de Terra) → Caso você utilize o Terrain Palette com o auto-border desligado os pisos/grounds continuarão sendo randomizados automaticamente. → Doodad Palette (Paleta de Objetos Decorativos/Acessórios) →¹: É possível mudar a orientação dos objetos/itens, apertando a tecla X. →²: É possível alternar entre as variações dos objetos/itens antes de coloca-los no mapa, apertando CTRL + espaço. →³: É possível colocar objetos sobrepostos (sobre blocking tiles) mantendo pressionada a tecla ALT. → Item Palette (Paleta de Itens) → House Pallet (Paleta de Configurações de Casas) → Criando/Configurando Casas (imagem ilustrativa) → Waypoint Pallet (Paleta de Atalhos) São atalhos/rotas adicionados no próprio mapa, sendo possível localiza-los através da própria Aba ou in-game com o comando /goto waypoint_name → Creature Pallet (Paleta de Criaturas) → Adicionando NPCs/Criaturas File > Import > Import Monsters/NPCs (imagem ilustrativa) →¹: Caso o mapa tenha criaturas/NPCs que não estejam adicionados ao creatures.xml (referente a versão do cliente [remeres/data]), será pedido que você selecione/carregue os arquivos .xml dos mesmos. → Raw Pallete Resume-se em "itens soltos", id por id, agrupados em maioria no Others. → Hotkeys (Teclas de Atalho) (Atalhos de Abas) (View/Visibilidade) (Zoom) (Tools/Ferramentas) → Dicas Úteis → Ir até determinada coordenada (x, y, z), Edit > Goto Position (CTRL + G) (imagem ilustrativa) → Mudar versão do mapa, Map > Properties > Client Version (CTRL + P) (imagem ilustrativa) → Adicionar/Editar Cidades, Map > Edit Towns (CTRL + T) (imagem ilustrativa) → Aceitar .SPR e .DAT editados File > Preferences > Client Version > desmarque a opção "Check File Signatures" (imagem ilustrativa) → Importando Mapas, File > Import > Import Map (imagem ilustrativa) → Editar Textos/Placas, basta dar um duplo clique ou right click (botão direito) no item → Properties (imagem ilustrativa) → Configurar Teleports, basta dar um duplo clique ou right click (botão direito) no item → Properties (imagem ilustrativa) Última atualização: 16/07/2018
  18. Quest Manera!

    Nome: Quets Criativa Autor: eu msm! Versão: TESTADO Em 8.40 Tipo: Action/quest Poh galera, esses dias tava eu tendo umas ideas pro meu ot, e pensei numa base pra fazer uma quest manera, e usei essa! Supomos q seu server tenha 4 cidades; Uma quest criativa poderia ser: em cada cidade você faz uma pequena sala. Nela você coloca um piso especial. uma placa indicando que se quer participar da quests que fique em cima dele! ai voce faz isso nas 4 cidades! e em uma voce coloca uma alavanca! ( na principal de preferencia ) Ao puxar a alavanca, os players das 4 cidades sao teleportados para uma quest!!! manero né? eu axo...hahuhua agora como fazer? crie em action/scripts/quests um arkivo renomeie para o nome que quiser!e coloque: Coloque isso em actions/scripts/quests local playerPosition = { [color=Magenta]{x = 217, y = 364, z = 7, stackpos = STACKPOS_TOP_CREATURE}, {x = 218, y = 364, z = 7, stackpos = STACKPOS_TOP_CREATURE},[/color] } local newPosition = { [color=YellowGreen]{x = 216, y = 375, z = 7}, {x = 216, y = 376, z = 7},[/color] } -- Do not modify the declaration lines below. local player = {0, 0, } local failed = FALSE function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 1945 then for i = 1, 2 do failed = TRUE player[i] = getThingfromPos(playerPosition[i]) if player[i].itemid > 0 then if isPlayer(player[i].uid) == TRUE then if getPlayerStorageValue(player[i].uid, [color=DarkSlateBlue]30015[/color]) == -1 then if getPlayerLevel(player[i].uid) >= [color=Blue]10[/color] then failed = FALSE end end end end if failed == TRUE then doPlayerSendCancel(cid, "Sorry, not possible.") return TRUE end end for i = 1, 4 do doSendMagicEffect(playerPosition[i], CONST_ME_POFF) doTeleportThing(player[i].uid, newPosition[i], FALSE) doSendMagicEffect(newPosition[i], CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid + 1) elseif item.itemid == 1946 then doPlayerSendCancel(cid, "Sorry, not possible.") end return TRUE end dpois vá em actions.xml e add: <action uniqueid="30015" script="quests/NOMEDOSCRIPT.lua"/> Configurando! è a posição do player, aonde ele deve estar na hra q o principal puxar a alavanca! (configure quantos players quiser é só adicionar mais tags igual eu markei) è a posição que os players vao ser teleportados! 10 é o level do player coloque qual vc kiser! é o unique id q vc vai colocar na alavanca no map editor! isso tudo acima é a configuração basica! se quiser mais detalhes! msg me! Agora não skece de colocar a quest que vc quer! use a criatividade! Foi mal qualquer erro! so novo ak na area... vlw :yes:
  19. Tutorial de Criação de Sprites[PAINT]:

    Bem, resolvi fazer um tutorial para ajudar pessoas a preparar suas sprites. 1° Passo: Abra o Paint (obviamente), depois com a ferramenta de quadrados, faça um quadrado de 35x35 pxls: Com isso, seu interior tera exatamente 32x32 pxls, o tamanho exato que uma sprite tem que ter. 2° Passo: De zoom na imagem, se preferir de zoom x10 (segredo do paint), para dar zoom x10 clique embaixo do x8, assim: É um pouco dificil acerta mais uma hora da, Depois aperte ctr+G para criar grade: imagem no zoom, imagem original, =P, pronto, agora nesse espaço você pode fazer o que quiser, para salvar salve apenas o interior. Viu como é izi. Olha uma sprite que eu fiz:
  20. Aula de Movements

    Hello~ eu fiz a Aula de talkactions, agora vo fazer uma de movements =D onStepIn => é quando a pessoa passar por cima do tile(chão), e acontece a açao especificada onStepOut => é usado geralmente em scripts de Dp(Depot), quando a pessoa sai de cima do tile(chão), a ação q foi indicada no para,onStepIn,volta ao normal//a pos é pra onde vc saiu(despisou) e frompos é de onde vc veio antes de sair.(Nord q pediu tbm) cid => é a pessoa q passou por cima (Creature) item => é o item ou chao que o player passou por cima pos => No onStepIn a pos é onde vc pisou e frompos é de onde vc veio antes de pisar. No onStepOut a pos é pra onde vc saiu (despisou) e frompos é de onde vc veio antes de sair. Explicaçao: Geralmente todos os scripts de movements começam assim, ou do modo abaixo \/ onEquip => usado para itens, ao equipar o item acontecera a açao determinada. Exemplo: boh cid => a pessoa q usou (Creature) item => o item q está sendo usado slot => so funciona ao colocar no lugar dos equipes.Exemplo: boh, so serve ao colocar no slot de boots Exemplo.1: Explicação: quando o player passa no chão,com a actionid 9992, ele será teletransportado para a posiçao especificada(pos), receberá uma mensagem(msg). no movements.xml adicionará isso: Exemplo.2: Explicação: Quando o player passa por cima da bola ela vai andar 1 sqm a sua frente.E vai manda um animated text em cima escrito “GOOOOOOLLLL” Isso ficaria no movements.xml Exemplo.3: Esse é o script do Dp(Depot) Explicação: quando o player pisar no tile(chão) com id 101,vai checar uns comandos de action q n vou explicar(onStepIn),e vai aparecer uma mensagem dizendo quantos itens vc tem (“Your depot contains 1 item.”) e quando vc sair o tile voltará ao normal e seu depot vai “fexar”(onStepOut). O tutorial fica por aki,Espero ter ajudado vcs Flw’s ai Credits: 98% by me 2% pro evolutions pelo script de footbal.
  21. [N:Fácil] Tutorial sobre Movements

    Se já existe um tutorial sobre isso, então peço que aceitem minhas desculpas >.< .: Tutorial sobre Movements :. by: [ B a l i l l o ] 1º - Vamos intender sobre as tags em movements.xml. Ex.: <?xml version="1.0"?> <movements> <movevent event="[color=red]AAA[/color]" itemid="[color=darkorange]BBB[/color]" script="[color=sienna]CCC[/color].lua" /> </movements> AAA - Ai vai a ação que vai ser usada no script que foi posto em CCC. Vou postar aqui varias tags que são utilizadas: StepIn Função: é usado quando o player se move para alguma coisa. Ex.: <movevent event="StepIn" itemid="BBB" script="CCC.lua" /> StepOut Função: é usado quando o player se move para fora de algum item/tile. Ex.: <movevent event="StepOut" itemid="BBB" script="CCC.lua" /> Equip Função: é usado quando o player colocar algum equip no corpo. CUIDADO: é no corpo e não em sua backpack. Ex.: <movevent event="Equip" itemid="BBB" slot="SSS" script="CCC.lua" /> OBS: SSS é o slot que o item vai estar, aqui vai a lista: head ~ cabeça necklace ~ colar backpack ~ slot da backpack armor ~ armadura right-hand ~> mão direita left-hand ~ mão esquerda legs ~> calça feet ~ pé ring ~ anéis DeEquip Função: é usado quando o player RETIRAR algum item do CORPO. Ex.: <movevent event="DeEquip" itemid="BBB" slot="SSS" script="CCC.lua" /> OBS: SSS vale para a mesma lista usada no item Equip. AddItem Função: é usado quando o player adicionar um item em algum tile. Ex.: <movevent event="AddItem" tileitem="SSS" itemid="BBB" script="CCC.lua" /> OBS: SSS pode ser 0(desativado) ou 1(ativado). Se for 0, o script é executado assim que você move ou cria o item no chão ou se for 1, o script só é adicionado quando você taca outro item em cima do item/tile. RemoveItem Função: é usado quando o player remover um item em algum tile. Ex.: <movevent event="RemoveItem" tileitem="SSS" itemid="BBB" script="CCC.lua" /> OBS: SSS pode ser 0(desativado) ou 1(ativado). Se for 0, o script é executado assim que você move ou cria o item no chão ou se for 1, o script só é adicionado quando você taca outro item em cima do item/tile. Pronto, citei os básicos, agora vou explicar o BBB (Não, não é Big Brother Brasil ). BBB - Nesta tag vc poem o ID/UniqueID ou ActionID do item que vai ser utilizado ou do item que tem UniqueID/ActionID tal. Ex.: Se for itemid="...", vc colocar apenas o ID do item que precisa para o script tal funcionar. Se for actionid="..." vc poem apenas o actionID que vc colocar em tal item em seu MapEditor, por exemplo, vc colocou uma magic sword (ID: 2400) com actionID 5000, então a tag actionID="..." ficará actionid="5000". Se for uniqueid="..." vc poem apenas o uniqueID que vc colocar em tal item em seu MapEditor, por exemplo, vc colocou um chest com uniqueID 5020, então a tag uniqueID="..." ficará uniqueid="5000". Um exemplo de uma tag completa: <movevent event="AAA" itemid="446" script="CCC.lua" /> PS: o 446 é um item qualquer que eu citei de exemplo. <movevent event="AAA" actionid="5000" script="CCC.lua" /> PS: o 5000 é uma actionID qualquer que eu citei de exemplo. <movevent event="AAA" uniqueid="5020" script="CCC.lua" /> PS: o 5020 é uma uniqueID qualquer que eu citei de exemplo. Pronto, o nosso BBB está explicado! Agora vou explicar o CCC, o mais fácil! CCC - Nada mais é que o script que vc criou que vai ser executado com o item que vc escolheu em BBB. Ex.: <movevent event="AAA" itemid="BBB" script="script.lua" /> A tag acima vai fazer que com o event selecionado para o item BBB executara o script que está em script.lua. Pronto, expliquei o movements.xml! Agora vou dar algum exemplo básico de scripts do movements. function [color=red]onEquip[/color](cid, item, [color=blue]slot[/color]) if [color=blue]slot[/color] [color=seagreen]~=[/color] [color=blue]8[/color] then doPlayerSendTextMessage(cid, 25, "[color=orange]They work better at feet[/color]") end end function [color=red]onDeEquip[/color](cid, item, slot) local [color=darkorchid]pos = {x = 65535} [/color] doSendMagicEffect([color=darkorchid]pos[/color], 14) end Explicando: Em 1º lugar, esse script está relacionado a BOH (boots of haste) que vem de padrão em varios ots. Em vermelho, o onEquip está dando ao inicio do script a função basica de que o que virá após ele será sobre algum EQUIP que está entrando dentro do CORPO, aonde vai os itens e etc. Em azul ele esta fazendo uma comparação, se o slot for DIFERENTE (~=) de 8, ele enviará a mensagem que está em laranja. (Tradução: Eles/elas trabalham melhor no pé). Em vermelho, novamente, a função onDeEquip está relacionada ao fato de o player RETIRAR o item de seu CORPO, aonde vai os itens e etc. Em roxo, vc pode até se assustar com tal posição, mas a posição 65535 é sua backpack, isso mesmo, aqueles slotzinhos dentro da backpack! Dai vem o pos, q quer dizer que se o player pegar a BOH e colocar na BP ela fazerá o efeito 14 (não me pergunte cual é, não sei de cor ). Galera, cuidado, pois cada função de AAA tem o seu (), vou citar de todas que eu falei: function [u]onStepIn[/u][color=black]([color=red]cid[/color], [color=green]item[/color], [color=blue]pos[/color])[/color] [color=red]cid[/color] - o UID do player que andou em cima de [color=green]item[/color]; [color=green]item[/color] - o item que o player [color=red]cid[/color] pisou. Possui: item.uid, item.itemid, item.type, item.actionid; [color=blue]pos[/color] - a posição do [color=green]item[/color] que o player [color=red]cid[/color] pisou. function [u]onStepOut[/u]([color=red]cid[/color], [color=green]item[/color], [color=blue]pos[/color]) [color=red]cid[/color] - o UID do player que saiu de cima de [color=green]item[/color]; [color=green]item[/color] - o item que o player [color=red]cid[/color] saiu. Possui: item.uid, item.itemid, item.type, item.actionid; [color=blue]pos[/color] - a posição do [color=green]item[/color] que o player [color=red]cid[/color] saiu. function [u]onEquip[/u]([color=red]cid[/color], [color=green]item[/color], [color=blue]slot[/color]) [color=red]cid[/color] - o UID do player que "vestiu" o [color=green]item[/color]; [color=green]item[/color] - o item que o player [color=red]cid[/color] "vestiu". Possui: item.uid, item.itemid, item.type, item.actionid; [color=blue]slot[/color] - o lugar do corpo que o [color=green]item[/color] foi colocado. Pode ser: 1 ~ cabeça; 2 ~ colar; 3 ~ slot da backpack; 4 ~ armadura; 5 ~ mão direita; 6 ~ mão esquerda; 7 ~ calça; 8 ~ pé; 9 ~ anel. function [u]onDeEquip[/u]([color=red]cid[/color], [color=green]item[/color], [color=blue]slot[/color]) [color=red]cid[/color] - o UID do player que tirou o [color=green]item[/color] do corpo; [color=green]item[/color] - o item que o player [color=red]cid[/color] tirou do corpo. Possui: item.uid, item.itemid, item.type, item.actionid [color=blue]slot[/color] - o lugar do corpo que o [color=green]item[/color] foi retirado. Pode ser: 1 ~ cabeça; 2 ~ colar; 3 ~ slot da backpack; 4 ~ armadura; 5 ~ mão direita; 6 ~ mão esquerda; 7 ~ calça; 8 ~ pé; 9 ~ anel. function [u]onAddItem[/u]([color=red]moveitem[/color], [color=green]tileitem[/color], [color=blue]pos[/color]) [color=red]moveitem[/color] - O item que está sendo movido. Tem os seguintes atributos: moveitem.uid, moveitem.itemid, moveitem.type, moveitem.actionid. OBSERVAÇÃO: se você marcou tileitem="1" o item que está no xml não vai ser [color=red]moveitem[/color] e sim [color=green]tileitem[/color]. [color=red]Moveitem[/color] será o item que você arrastou em cima do item que está no xml! [color=green]tileitem[/color] - você irá usar isso apenas se marcou tileitem="1" no xml. tileitem é o item que você colocou no xml, o item que os players irão mover outros items em cima (se precisar dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo). OBSERVAÇÃO: Por mais que esteja escrito tileitem, o tileitem não precisa ser necessáriamente um tile =) pode ser qualquer item que você possa mover coisas em cima dele; [color=blue]pos[/color] - a posição que o o [color=red]moveitem[/color] foi movido/criado. (posição depois de mover). function [u]onRemoveItem[/u]([color=red]moveitem[/color], [color=green]tileitem[/color], [color=blue]pos[/color]) [color=red]moveitem[/color] - O item que está sendo movido. Tem os seguintes atributos: moveitem.uid, moveitem.itemid, moveitem.type, moveitem.actionid. OBSERVAÇÃO: se você marcou tileitem="1" o item que está no xml não vai ser [color=red]moveitem[/color] e sim [color=green]tileitem[/color]. [color=red]Moveitem[/color] será o item que você arrastou de cima do item que está no xml! [color=green]tileitem[/color] - Você irá usar isso apenas se marcou tileitem="1" no xml. tileitem é o item que você colocou no xml, o item que os players irão mover outros items em cima (se precisar dêem outra olhada no xml do event AddItem na parte do tileitem para intenderem melhor. Se precisar olhem os exemplos mais em baixo). OBSERVAÇÃO: Por mais que esteja escrito tileitem, o tileitem não precisa ser necessáriamente um tile =) pode ser qualquer item que você possa mover coisas em cima dele. [color=blue]pos[/color] - a posição que o o [color=red]moveitem[/color] foi removido (posição antes de mover). OBS: Essa parte da explicação das funções () eu retirei de outro forum e dei uma editada e arrumada, intao 30% de creditos (APENAS NA PARTE DE FUNÇÕES () ) para mim e 70% para The Sharpest Horn. Bom galera, é isso se vcs tiverem alguma duvida podem postar que eu tentarei ajudar ao maximo! Atenciosamente, [ B a l i l l o ].
  22. [Tutorial] DLL Infectada? Nunca mais!!!

    Olá galera, reparei que tem bastante gente tendo problemas com DLL Infectada quando abre o servidor. Pois bem, vou recomendar um Anti-Vírus aqui e ensinar a adicionar exceções, para que dessa maneira a proteção residente não escaneie a área adicionada, assim as famosas DLLs desconhecidas não vão mais ser problema e você poderá baixar muitos OTs. Para facilitar um pouco vou dividir esse mini-tutorial em 3 tópicos, assim ninguêm se perde. ..::<<TOPICOS>>::.. 1º Qual anti-vírus usar? 2º Como adicionar exceções? 3º Recomendações após as exceções. --------------------------------------------------------- 1º Qual Anti-vírus usar? Essa parte é muito polêmica, existem diversos anti-vírus no mercado da computação, é claro que tem alguns que se destacam (Avast!, AVG, NOD32), porém na minha opinião e o que vamos usar no tutorial é o Avira Antivir, é um anti-virus muito recomendado em sites de download, eu uso, recomendo, e posso garantir que protege seu computador, você pode baixar ele neste link: [Conteúdo Oculto]] Não vou ficar falando como instalar por que isso é o básico do básico, se você não sabe sugiro procurar um tutorial sobre o assunto na net. 2º Como adicionar exceções? Bom, preste muito atenção nessa parte, se você seguir cada passo corretamente vai dar tudo certo... Vamos lá!!! 1º Passo: Após fazer o download do Avira Antivir, instale-o, e você vai reparar que tem o ícone de um guarda-chuva no TRAY, pra quem não sabe o que é TRAY é aquele lugar que fica do lado do relógio. Clique com o botão direito no guarda-chuva e clique em configure Antivir.:style: VEJA O EXEMPLO: [Conteúdo Oculto] 2º Passo: Assim que abrir uma janela com informações de Scan do Avira, você vai ver uma caixinha pequena escrito "Expert mode", deixe ela marcada.:style: VEJA O EXEMPLO: [Conteúdo Oculto] 3º Passo: Você vai abrir as Guias Guard, dentro do Guard abra a guia Scan, e dentro do Scan abra a guia Exception. Essa parte é um pouco complicada.:style: VEJA O EXEMPLO: [Conteúdo Oculto] 4º Passo: Na parte que esta escrito "File objects to be omitted for the Guard", você vai clicar nos (...), dai vai abrir uma janela para você selecionar a pasta que vai ser exceção no Guard, ou seja, a pasta que não será escaneada, no meu caso, é pasta OTServ, onde estão todos os arquivos do meu OT, como ele tem DLL desconhecida, eu adicionei a pasta inteira na exceção e ele não escaneia, ache a sua pasta, de OK na janela e clica no botão (Add), que fica ao lado dos (...), depois disso é só dar OK e esta pronto. Como essa parte também é complicada eu coloquei uma foto de como fazer.:style: VEJA O EXEMPLO: [Conteúdo Oculto] 3º Recomendações após as exceções. Bom galera, agora que você ja adicionou exceções, a pasta não será mais escaneada, agora pode descompactar todos os OTs que você baixar nessa pasta, que vai descompactar sem problemas, mas é ai que você precisa tomar cuidado, não saia baixando todos OTs que você ve pela frente, senão em pouco tempo você pega um Trojan, um Ardamax, e por ai vai. A minha recomendação, é que você faça um Scan do arquivo antes de descompacta-lo, para fazer o Scan, entre no site www.virustotal.com.br, procure o OT que você baixou e peça pra escanear. Vale lembrar também que é bom manter seu Anti-vírus sempre atualizado, caso você pegue algum vírus ele vai remover na boa. Bom acho que é isso galera, peço desculpas se o tutorial ficou muito grande:blush:, mas acho que ficou bem explicado(Y), espero que esse tutorial resolva o problema de muita gente, e qualquer dúvida estarei a disposição. Obrigado e até mais...
  23. Depois de muito tempo sem mexer com ps..

    E ai... Depois de muito tempo sem mexer com photoshop, eu estava em casa, sem internet, e não tava passando nada de interessante na TV, ai resolvi fuça o PC... Acabei achando um tutorial, que na minha opinião, é bem legal... (Sim, me chamo Cleyton, mais conhecido como Konae)... Eu sei que ficou grande, mais é que meu photoshop tava de mal comigo naquele dia, e bugava toda vez que colocava um tamanho menor... Mas já arrumei... Falem o que acharam...
  24. [N:Médio] Usando o "For"

    Usando "For" Eu já vi muito tipo de aula: aula sobre If, While, Repeat e tantas outras que me ajudaram bastante, então um dia desses eu tava conversando com o Fadi e ele me ensinou a usar essa função, então hoje venho ensinar a vocês, por isso créditos a ele(Fadi, e eu Nord por fazer o tutorial/aula). O que o for faz? Ele repete um determinado número de vezes a cada um milésimo de segundo algo, mas trocando um valor que é uma espécie de variável. Tá, mas você não entendeu nada então vamos a prática. Quando usarmos o for será assim: Ok, até agora podemos entender que começaremos com for e depois colocaremos qualquer letra, no caso eu usei i e depois = um número, outro número (de preferência maior) e para finalizar o do. O que acontecerá, ele vai repetir o i, então na primeira vez ele vai ser 1, depois ele vai repetir de novo, dai vai ser 2, então repetira outra vez, e vai ser 3. E talvez você diga: "Mas eu não to vendo utilidade nenhuma." Então você vai ver, olhe abaixo e depois eu explico: [b]for[/b] [color=blue]i[/color] = [i]1[/i],[u]3[/u] [color=Red]do[/color] doSendMagicEffect(qualquer_posição, [color=blue]i[/color]) [color=navy]end[/color] Agora explicação: Acontecerá um efeito na "qualquer_posição", como for começa com 1 ele enviara o efeito de número 1, depois ele vai repetir e vai enviar outro efeito, mas dessa vez vai ser o 2, e depois novamente enviará um efeito, mas um efeito de número 3. Acredito que vocês entenderam, mas lembrando de nunca se esquecer do end para terminar o for. Ou seja, o for i será um valor, eu posso fazer então o player falar 1, depois 2, depois 3, se eu fizer for i = 1,6 do e dentro da função doPlayerSay(cid,"'..i..'",1) olhe o que vai acontecer: Nord says: 1 <Se passa um milésimo...> Nord says: 2 <Outro milésimo depois...> Nord says: 3 E isso acontecerá até chegar ao 6. Conforme sua criatividade, inteligência e esforço você conseguirá fazer scripts para annihilator, arenas e muito mais(inclusive funções). Lembre-se, entre uma ação e outra dentro do for terá um espaço de 1 milésimo de segundo, isso você não pode alterar a não ser que use um addEvent, mas isso é outro tutorial. Até agora vocês aprenderam a usar o for, mas há mais alguma coisa faltando sobre isso, e é o break. O break serve para parar um loop(coisas como for, while e repeat) Então abaixo um exemplo nada prático mas útil para aprender como usar o break: for [color=orange]i[/color] = 1, 100 do doPlayerSendTextMessage(cid, 22, "[color=Orange]"..i.."[/color]") if i == 50 then [color=Blue]break[/color] end end Tutorial/Aula fica por aqui, espero ter ajudado e gostaria que me fizessem doações de OT$ ou então pelo menos postem uma crítica, sugestão ou o que achou do tópico. (Mas com respeito) Aula eu acho que é coisa de moderador fazer, mas não há mal algum em aprender com um usuário não?! -------------------------------------------- Script de Exemplo -------------------------------------------- Créditos: Feito por Fadi e postado por Haxy function onUse(cid, item, frompos, item2, topos) local conf = {bagId = 1987, storage = 15975} local itens = {"2120", "2554"} -- Script: if getPlayerStorageValue(cid,conf.storage) ~= 9 then -- Verifica se o player ja fez a quest, se não tiver feito: local bagUid = doPlayerAddItem(cid,conf.bagId,1) -- Adiciona bag ao player setPlayerStorageValue(cid,conf.storage,9) for i = 1,#itens do doAddContainerItem(bagUid, itens[i], 1) end else -- Caso já tenha feito a quest doPlayerSendTextMessage(cid,22,'It\'s empty.') -- Manda mensagem falando que esta vazio end return 1 end
×