Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''tutorial''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. SOBREPOSIÇÃO DE TELHADOS Tutorial Avançado de Telhados Triangulares Bom, se você já viu os tutoriais básico e intermediário, já dá para ver um telhado bem legal. Mas eu gosto de fazer além disso, e é aí que entra a "sobreposição de telhados". Dando um formato bem mais bonito para os telhados. Então vamos lá! • • Partiremos do telhado que obtivemos no tutorial nível intermediário. Para fazer a sobreposição, é bem simples. Basta criar o formato do telhado menor que você quer que sobreponha o outro, e selecioná-lo completamente (segurando CTRL e clicando em cada peça). Depois disso, basta arrastar o telhado selecionado para cima do telhado já feito, como mostra o GIF a seguir. Bem melhor, não? • • Então, vamos ver um outro exemplo, na prática, para ajudá-los a entender melhor, também. Vamos colocar um telhado nessa casa aqui: O que acharam? Conseguiram fazer no seu map editor? Qualquer dúvidas ou problemas, comente aqui em baixo que o ajudarei assim que conseguir. • • Também funciona muito bem caso você queira sobrepor com um telhado de 4 SQMs ao invés dos 3 SQMs, que usamos nas figuras anteriormente. • • Seguem mais um exemplo que fiz, para ajudá-los a ter mais ideias! • • Bom, aqui está o link dos tutoriais básico e intermediário. Básico Intermediário E, se vocês quiserem baixar as casas que fiz para o tutorial, está aqui para vocês: Download Scan Grande abraço!
  2. SOBREPOSIÇÃO DE TELHADOS Tutorial Avançado de Telhados Triangulares Bom, se você já viu os tutoriais básico e intermediário, já dá para ver um telhado bem legal. Mas eu gosto de fazer além disso, e é aí que entra a "sobreposição de telhados". Dando um formato bem mais bonito para os telhados. Então vamos lá! • • Partiremos do telhado que obtivemos no tutorial nível intermediário. Para fazer a sobreposição, é bem simples. Basta criar o formato do telhado menor que você quer que sobreponha o outro, e selecioná-lo completamente (segurando CTRL e clicando em cada peça). Depois disso, basta arrastar o telhado selecionado para cima do telhado já feito, como mostra o GIF a seguir. Bem melhor, não? • • Então, vamos ver um outro exemplo, na prática, para ajudá-los a entender melhor, também. Vamos colocar um telhado nessa casa aqui: O que acharam? Conseguiram fazer no seu map editor? Qualquer dúvidas ou problemas, comente aqui em baixo que o ajudarei assim que conseguir. • • Também funciona muito bem caso você queira sobrepor com um telhado de 4 SQMs ao invés dos 3 SQMs, que usamos nas figuras anteriormente. • • Seguem mais um exemplo que fiz, para ajudá-los a ter mais ideias! Mostrar conteúdo oculto • • Bom, aqui está o link dos tutoriais básico e intermediário. Básico Intermediário E, se vocês quiserem baixar as casas que fiz para o tutorial, está aqui para vocês: Download Scan Grande abraço!
  3. Telhados Triangulares de 5+SQMs Tutorial Intermediário de Telhados Triangulares Bom, o tutorial básico não ensina a lidar quando temos um telhado maior que 4 SQMs, e é isso que vamos tratar nesse tutorial. Então vamos lá! • • Quando você tem um telhado 5 SQMs, qual solução você normalmente opta? As mais comuns que vejo são essas a seguir. Hmm, essa segunda é OK. Mas eu não gosto tanto. Pessoalmente, eu gosto dessa solução: Eu acho ela bem melhor. Então vou ensinar fazê-la, para quem se interessar. • • Bom, vamos começar ensinado como fazer a "janela" que fica no SQM do meio. Para fazê-la, você precisa dos seguintes IDs: Agora para fazê-la é bem simples. Basta colocar as duas colunas em cima do tapete branco, como mostra o GIF a seguir. Bem fácil. • • Bom, agora vamos fazer o resto do telhado. Na parte do meio, coloque o telhado de ID 9094 e a borda 10335 para completar. Os players muito provavelmente não vão ver essa parte do meio, então não se preocupe se não ficar perfeito. Em seguida, complete o telhado da parte de cima com o ID 10339 com a borda 10340. E, pronto! O que acharam? Conseguiram fazer no seu map editor? Qualquer dúvidas ou problemas, comente aqui em baixo que o ajudarei assim que conseguir. • • Vocês podem fazer isso com telhados de 6 SQMs, também, que fica bem bonito ainda. Mas mais que isso, não recomendo. • • Seguem mais um exemplo que fiz, para ajudá-los a ter mais ideias! • • Bom, aqui está o link dos tutoriais básico e avançado. Recomendo fortemente a darem uma olhada! Básico Avançado Grande abraço!
  4. Básico de Telhados Triangulares Tutorial básico de Telhados Triangulares Bom, sempre vejo muitos telhados desse tipo meio malfeitos. Então decide criar três tutoriais (básico, intermediário e avançado) para tentar ajudar o pessoal. Esse aqui é o básico, que visa ensinar a fazer telhados de 1, 2, 3 e 4 SQMs, sempre utilizando as bordas corretas. Então, vamos lá! • • Muitas pessoas apenas sabem desses IDs aqui, que são os mais fáceis de achar no RME: Mas, na verdade, tem esses aqui abaixo também, que são MUITO úteis, como vamos ver em seguida. • • Bom, para começar, coloque oo ID 9535 ou 9536 no lugar onde vai ficar o telhado. Você precisa fazer isso para que o player consiga ver pela janela da casa, quando estiver na frente da mesma. Se você não colocar isso, o player irá ficar na frente da janela (pelo lado de fora), mas não vai conseguir ver dentro da casa. Em seguida, basta preencher o telhado com as peças corretas. Acho que isso ninguém irá ter problema. Muita gente já para por aí, e acaba não percebendo que não colocou a borda desse telhado triangular. Então preste bem atenção nisso. Bem simples, não? • • Se quiser deixar mais detalhado que isso, você pode usar esses IDs aqui para detalhar melhor: E decorar o telhado do jeito que achar melhor! Mas essa parte é opcional, fica como sua decisão. • • O que acharam? Conseguiram fazer no seu map editor? Qualquer dúvidas ou problemas, comente aqui em baixo que o ajudarei assim que conseguir. Bom, aqui está o link dos tutoriais intermediário e avançado, para quem quiser aprender mais sobre esses telhados! Intermediário Avançado Grande abraço!
  5. Por favor, deletar o tópico... Acabei criando dois tutoriais iguais Aqui está o link correto para o tutorial: http://www.xtibia.com/forum/topic/237831-basico-telhados-triangulares/ Desculpe pela confusão, Abraços
  6. - Navegação: └ Tutorial └ Downloads Ola este tutorial ensina como cracker qualquer versão do MageBot, apenas disponibilizei no forum creditos não são meus se gostarem REP+ 1. Instale normalmente o MageBot, depois de instalar a versão desejada e baixar o VolumeSerial, abra-o. 2. Vá até (Choose drive) e coloque a unidade onde o MageBot esta instalado. Neste caso abaixo a unidade "C". 3. Logo depois vá até "New serial number" coloque essa Key: 01010101 4. Agora clique em "Change serial number". 5. Confirme a nova Key clicando em "SIM" e aparecerá uma mensagem que a nova Key está válida em seguida clique em "OK". 6. Agora reinicie o seu computador. 7. Após reiniciar o seu computador abra o Tibia e abra também o MageBot caso apareça alguma mensagem clique em "Cancelar" e feche o MageBot e o Tibia e re-abra. # ~ Lista de Serial Numbers # ~ Downloads Os creditos não são meus, são do TibiaBots.Net apenas repassei o conteudo.
  7. Montanhas - Vegetação e Temática Conceito por Daniel Olá meus caros xTibianos, vim trazer este tutorial que queria ter criado a muito tempo atrás. Bom, decidi finalmente retirar um tempo para me dedicar a seção e trazer uns conteúdos bacanas para vocês. Este tutorial, no que se propõe o tema, tem como objetivo mostrar o meu estilo de fazer montanhas detalhar, e aplicar temáticas nestas, também como deixá-las agradáveis no mapa (no meu ponto de vista). Dicionário do Mapper AutoMagic: Mais conhecido como Auto-border. AutoMagic são ferramentas que atravéz de códigos adicionam estruturas prontas no seu mapa. Isto é ruim em parte, pois você não possui tanta flexibilidade para fazer um mapa corretamente. Por outro lado, o AutoMagic proporciona uma rapidez na produção de mapas; muitos que utilizam o Remere's Map Editor reconhecem que mesmo não optando pelo AutoMagic ele pode ser útil muitas vezes. RPG Map: Significa que o mapa citado é um mapa RPG, ou seja, segue conceitos sem deixar passar nada. Para observar se um mapa é RPG, basta verificar se: Há boas opções de mobilidade (conforme o tema propõe); fora criada uma temática conforme o gráfico disponível; detalhes impressionam. Dirty: É um mapa sujo, normalmente contém mais detalhes que o necessário para aquela temática. Não é a mesma coisa que um mapa sujo propositalmente. Oversquare: Concede-se à mapas com a ausência de detalhes importantes, pode-se dizer que um mapa oversquare é um mapa que pode ser melhorado adicionando detalhes essenciais. • Montanhas no Tibia Diferente da vida real, o Tibia tem um estilo gráfico na perspectiva 45º. Isso dificulta sim o mapeamento de estilos próprios ditos "pessoais". No que se refere à este conceito, digamos que vários estilos de mapeamento de montanhas podem chegar ao mesmo resultado. O que muda são alguns aspectos que eu estarei mostrando mais adiante. Itens para Montanhas Simples Base Estrutura Complementos As montanhas do tibia são praticamente iguais (com algumas exceções). Esta montanha mostrada acima é a mais utilizada e bem simples de compreender. Veja que há dois complementos (bordas) que podem ser utilizados em várias situações. Para ter um controle melhor na hora de criar a base das montanhas, comece utilizando os itens id: 4476, 4477, 4478, 4479. Que são as bordas diagonais mais utilizadas nas partes internas e na rotação da montanha. ESTRUTURA A seguir, complete as bordas da estrutura com os itens id: 4468, 4469, 4470, 4471, 4472. Note que algumas partes permaneceram sem estas bordas, isto é porque a repetição contínua delas pode ser impedida, em conceito de oversquare, com detalhamentos melhores que não fogem do tema. Por exemplo: BASE A base é iniciada, no meu estilo, pelas bordas e grounds. Por que iniciar com bordas? Desse jeito, você pode controlar o espaço trabalhado e definir melhor o rpg. Veja um exemplo de base aceitável para a montanha acima. Seguindo então com as bordas secundárias e grounds: Agora basta detalhar e, se decidir, expandir a montanha. Crie a vegetação conforme a base. A inclinação (muitas vezes abstrata) pode ser vista utilizando o 'mountain top ground' em contraste com a grama. É utilizado na maior parte da temática natural. Veja como a vegetação se comporta ao redor da montanha: É importante estudar a temática que você vai trabalhar, pois utilizará diferentes itens dependendo da temática. Quando se fala em montanhas, pode-se pensar em diversos tipos de montanhas. Montanhas em ambientes úmidos, onde a vegetação toma conta; montanhas desérticas, onde se encontra apenas pedras e alguns arbustos; entre outras. Procure observar imagens que se aproximam ao seu conceito de montanha (para a temática que está trabalhando). Isso pode facilitar a produção do mapa. Já foi dito acima que é um pouco complicado imitar alguns detalhes da vida real em um mapa de tibia, como uma inclinação do terreno, ligando o chão a outro ponto mais superior sem "pular um andar" no Tibia. Veja a imagem "Temática", podemos repetir esta temática utilizando os recursos do tibia. Claro, não precisamos utilizar 100% da ideia, até porque os recursos gráficos do tibia podem não ser suficientes as vezes. Veja uma sugestão de adaptação (na temática Selva): Veja que a montanha não foi o foco da temática mas ficou dentro do tema por causa de sua estrutura. Os detalhes principais se ligam à montanha formando uma harmonia geral; isto talvez não seria possível utilizando AutoMagic, pois alguns detalhes exigem a movimentação de itens (um em cima do outro) e a manutenção manual de bordas. O mapa não chega a ser um mapa "Dirty", pois todos os itens adicionados indicam RPG. Por exemplo, perceba que o mapa em si obriga o jogador a andar somente na estrada, ele não tem mobilidade para sair aos lados, uma vez que a vegetação seja fechada propositalmente e tematicamente para dar ênfase à entrada na montanha. Nesse caso, a temática vai dizer: Existe algo dentro da montanha". Até onde devo seguir uma temática? Observando o Tibia global, podemos dizer que a temática se estende e se modifica ao longo de um continente. Se você for andando de Thais até venore, vai perceber uma diferença na vegetação e no terreno. Você deve se basear no tamanho total da área que será mapeada, uma selva deve conter o interior mais denso e a vegetação se dissipar conforme se afasta deste centro. Como repetir os detalhes sem machucar o tema? Os detalhes devem ser adicionados proporcionalmente conforme a estrutura do mapa, se a vegetação possuir pouca variação ela deve ser mais aberta. Desafio! Complete o mapa: Faça download do mapa abaixo e termine um dos mapas feitos para este tutorial, poste o resultado neste tópico. Use sua criatividade. Recompensa: 10REP Versão do Mapa: 8.60 Complete o Mapa.zip IMPORTANTE Foram mais de 2 horas para eu fazer este tutorial, embora não tenha ficado tão bom quanto eu esperava, peço que vocês tenham ética e não o copiem. Se este tutorial for postado em outro fórum, reporte a mim. E se você pretende fazer isto, saiba que temos vergonha de pessoas como você, que dão ctrl + c/ctrl + v para ganhar reputação (uma reputação que não vale de nada). Portanto crie vergonha na cara e aprenda a fazer algo que não seja copiar o conteúdo dos outros.
  8. Diversão: Batalha dos Lendários - Raikou Suicune Entei Fala ai galera mais uma vez venho trazendo conteúdo para Poketibia, dessa vez saindo um pouco da série, resolvi fazer uns vídeos mostrando a batalha do ADM contra os lendários, então é isso galera, espero que curtam! Curtam o vídeo e se inscrevam no canal!
  9. Fala galera, venho aqui por meio deste, mostrar o começo de uma série de POKETIBIA, a qual ao longo do jogo irá ensinando a vocês o necessário para ser o melhor Mestre Pokémon! O primeiro vídeo da série foi lançado hoje, com o básico iniciante. Quem quiser acompanhar a serie, basta se inscrever no canal, ou acompanhar aqui pelo XTIBIA. Vlw galera!
  10. Olá meus caros Nesta vídeo-aula você aprenderá como realizar o backup de seu banco de dados mysql, através do phpmyadmin. Abraçoss
  11. Nesta vídeo-aula, você aprenderá como instalar o website gesior para seu servidor. Abraçoss
  12. Como entrar no RadBR pelo Linux Programas necessários: Wine Client do RadBR Instalação do WineAtravés do Ctrl + Alt + T, abra o terminal. No terminal, digite ou copie/cole o seguinte comando: sudo add-apt-repository ppa:ubuntu-wine/ppa && sudo apt-get update && sudo apt-get install wine1.5 winetricks -y Será solicitada a sua senha, digite-a. Aguarde. Ao aparecer a tela do "Configurando ttf-mscorefonts-installer", aperte TAB até aparecer "<Ok>" em vermelho. Então, clique no "<Ok>". Uma outra tela aparecerá. Aperte TAB até o "<Sim"> ficar em vermelho. Então, clique no "<Sim>". Aguarde enquanto o programa continua e termina a instalação que pode levar alguns minutos. Instalação do Client do RadBR Após o término da instalação do Wine, acesse o site do RadBR, vá a aba "Downloads" e faça download do Client do servidor em que joga. Abra a pasta em que o arquivo do download está. Dê um duplo clique sobre o "Instalador - RadBR" e aguarde abrir. Clique em "Avançar" e faça a instalação normalmente. Após o término da instalação, haverá um atalho do client no Desktop. Dê um duplo clique sobre ele e aguarde o programa abrir. Pronto! Agora você pode jogar RadBR no Linux. Observações: Este tutorial foi feito em Ubuntu versão 12. Não é necessário usar Change IP no client do RadBR. Atenciosamente, Equipe RadBR Fonte.
  13. Como entrar no RadBR pelo Mac OS Programas necessários: Wineskin Winery Client do RadBR Instalação e execução,Faça download e instale o Wineskin Winery, depois faça o update para a versão mais recente. Em "Installed Engines" clique no "+". Selecione a última opção e clique em "Download and Install". Selecione a engine que você baixou e clique em "Create New Blank Wrapper" Coloque o nome que você quiser. Clique em "OK". Será pedida permissão, clique em "Permitir". Será solicitado a instalação do "Wine Gecko Installer", clique em "Install". Ao término da instalação, a mensagem "Wrapper Creation Finished" aperecerá. Clique em "View wrapper in Finder". O "Finder" será aberto. Dê duplo clique no arquivo que você criou, e clique em "Install Windows Software". O "Finder" será aberto. Selecione o "Instalador - RadBR" e aguarde abrir. O Instalador será aberto. Clique em "Avançar" e faça a instalação normalmente. Após o término da instalação, será solicitado para selecionar o arquivo executável. Selecione o Program Files/Tibia/RadBR.exe e aperte "OK". Para acessar o arquivo criado, vá ao seu usuário >> Applications >> Wineskin. Dê duplo clique para abrir o client. Pronto! Agora você pode jogar RadBR no Mac. Observações: Não é necessário usar Change IP no client do RadBR. Adaptação do que está disponível no Xtibia. Atenciosamente, Equipe RadBR Fonte.
  14. Olá éks. Clientes com versões anteriores à 9.60 têm um limite de sprites de 65.535. Parece muito, mas logo esse limite é atingido e ficamos impossibilitados de adicionar novos objetos para o servidor/cliente a não ser substituindo alguns sprites. Esse tutorial pretende ensinar como configurar as principais ferramentas para aumentar o limite. A versão utilizada no tutorial foi a 8.60. Conhecimentos Necessários: XML Básico nas ferramentas utilizadas. Ferramentas Utilizadas: Object Builder (edita os arquivos dat e spr do cliente) >> Para baixar o programa clique no Nome dele *--* iTemEditor (edita o arquivo otb, que contém os itens usados no servidor) >> Para baixar o programa clique no Nome dele *--* OTclient 0.6.5. Um programa para abrir arquivos LUA. Remere's Map Editor. Compilando os Arquivos Estendidos: 1. Abra seus arquivos "spr" e "dat" no Object Builder. 2. Compile os arquivos com a opção extended selecionada. Obs: Uma vez compilado estendido, a opção extended deverá estar sempre selecionada tanto ao abrir, quanto ao compilar. Configurando o ItemEditor: 1. Abra o itemEditor, vai em File/ Preferences 2. clique em Browse e escolha o local onde está seu Arquivos "Dat" e "Spr" 3. Marque a Opção Extender Configurando OTClient: 1. Abra o arquivo things.lua encontrado em modules/game_things 2. Adicione esta linha de código na função load: function load() local version = g_game.getClientVersion() g_game.enableFeature(GameSpritesU32) -- Linha Adicionada local datPath, sprPath 3.Adicione uma cópia dos arquivos dat e spr estendidos na pasta data/things. Remere's Map Editor : Infelizmente o RME não tem suporte pra arquivos estendidos. A solução mais viável é adicionar uma versão 9.60 junto a versão do seu cliente e compilar os arquivos como 9.60 especialmente para o RME. A versão do RME deve ser 2.2 ou superior. - Compile na sua versão para usar no cliente e no ItemEditor. - Compile na versão 9.60 numa pasta separada para usar no RME. Adicionando a versão: 1. Vá à pasta de instalação do RME e abra o arquivo clients.xml, encontrado na pasta data. 2. Procure a tag do seu cliente e adicione uma linha para versão 9.6 <client name="8.60" otb="8.60" visible="true" data_directory="860"> <otbm version="3"/> <extensions from="8.20 - 8.31"/> <data datversion="8.6" sprversion="7.0" dat="0x4C2C7993" spr="0x4C220594"/> <data datversion="8.6" sprversion="7.0" dat="0x4C6A4CBC" spr="0x4C63F145"/> <data datversion="9.6" sprversion="9.6" dat="0x4FFA74CC" spr="0x4FFA74F9"/> <!-- Versão Extendida --> </client> 3. Compile seus arquivos em uma pasta separada com a versão 9.60. 4. Na versão utilizada, configure o RME para a pasta onde se encontra os arquivos compilados como 9.60 Perguntas Frequentes: P: Qual o novo limite de sprites após ser estendido? R: 4.294.967.295 P: Depois que compilar estendido, pode ser usando no cliente da Cip? R: Não! Seria preciso modificar o cliente para que consiga ler os arquivos. P: Posso usar o dat editor para modificar os arquivos depois? R: O ObjectBuilder é um dat/spr editor, mas se você quer usar outro editor, é pouco provável que funcione. Não custa tentar. Créditos:: EdMignari e sua Equipe
  15. Transparência Eae galera, vim aqui pra ensinar vocês a usar a transparência no tibia, vamos começar. Primeiro você tem que ter uma versão de 0.6.5 ou superior do otclient e habilitar a feature. Para habilitar a feature você vai em game_things depois em game_things.lua e adicione isto em baixo de function load() g_game.enableFeature(GameSpritesAlphaChannel) Agora você tem que usar o Object Builder(versão 0.3.4), abra o object builder, abra seu spr/dat e bota em compile as e ative a opção transparency. Pronto, seu cliente e o server já estão aptos a receber a transparência. Agora a parte mais complicadinha, como montar a sprite com transparência para adicionar no client. Abra sua sprite no photoshop, delete todos os pixels de fundo(geralmente é rosa), deixe somente os que a sprite usa. Agora vá em opacidade e diminua para o desejado. Agora preste bem atenção, salve a imagem no formato PNG, pois ele aceita alfa. Depois vá no Object Builder, clique para abrir spr/dat, selecione a opção transparency(senão não vai reconhecer seu dat/spr), vá na sprite desejada e a adicione. Agora compile, também com a opção transparency ativada. Testei com uma outfit qualquer, resultado final: Créditos xSONYx EdMignari Baxnie
  16. Bom, encontrei esse tutorial, e estou compartilhando com vocês para sanar algumas duvidas. Ele ensina como aumentar o numero de efects no tibia, alterando as sourcers do servidor, é importante que todos os passos sejam seguidos a com rigor, e que mantenha um backup em caso de erro. Tutorial: Primeiramente, você precisará da source do distro usado em seu servidor ou uma source compatível com a versão do seu servidor. Tendo elas, abra o arquivo .dev (com o Dev-C++, é claro). No arquivo const.h, procure por: enum MagicEffect_t Você poderá notar que o código só estará configurado até o último efeito (no caso, 68): enum MagicEffect_t { MAGIC_EFFECT_DRAW_BLOOD = 0x00, MAGIC_EFFECT_LOSE_ENERGY = 0x01, MAGIC_EFFECT_POFF = 0x02, MAGIC_EFFECT_BLOCKHIT = 0x03, MAGIC_EFFECT_EXPLOSION_AREA = 0x04, MAGIC_EFFECT_EXPLOSION_DAMAGE = 0x05, MAGIC_EFFECT_FIRE_AREA = 0x06, MAGIC_EFFECT_YELLOW_RINGS = 0x07, MAGIC_EFFECT_POISON_RINGS = 0x08, MAGIC_EFFECT_HIT_AREA = 0x09, MAGIC_EFFECT_TELEPORT = 0x0A, //10 MAGIC_EFFECT_ENERGY_DAMAGE = 0x0B, //11 MAGIC_EFFECT_WRAPS_BLUE = 0x0C, //12 MAGIC_EFFECT_WRAPS_RED = 0x0D, //13 MAGIC_EFFECT_WRAPS_GREEN = 0x0E, //14 MAGIC_EFFECT_HITBY_FIRE = 0x0F, //15 MAGIC_EFFECT_POISON = 0x10, //16 MAGIC_EFFECT_MORT_AREA = 0x11, //17 MAGIC_EFFECT_SOUND_GREEN = 0x12, //18 MAGIC_EFFECT_SOUND_RED = 0x13, //19 MAGIC_EFFECT_POISON_AREA = 0x14, //20 MAGIC_EFFECT_SOUND_YELLOW = 0x15, //21 MAGIC_EFFECT_SOUND_PURPLE = 0x16, //22 MAGIC_EFFECT_SOUND_BLUE = 0x17, //23 MAGIC_EFFECT_SOUND_WHITE = 0x18, //24 MAGIC_EFFECT_BUBBLES = 0x19, //25 MAGIC_EFFECT_CRAPS = 0x1A, //26 MAGIC_EFFECT_GIFT_WRAPS = 0x1B, //27 MAGIC_EFFECT_FIREWORK_YELLOW = 0x1C, //28 MAGIC_EFFECT_FIREWORK_RED = 0x1D, //29 MAGIC_EFFECT_FIREWORK_BLUE = 0x1E, //30 MAGIC_EFFECT_STUN = 0x1F, //31 MAGIC_EFFECT_SLEEP = 0x20, //32 MAGIC_EFFECT_WATERCREATURE = 0x21, //33 MAGIC_EFFECT_GROUNDSHAKER = 0x22, //34 MAGIC_EFFECT_HEARTS = 0x23, //35 MAGIC_EFFECT_FIREATTACK = 0x24, //36 MAGIC_EFFECT_ENERGY_AREA = 0x25, //37 MAGIC_EFFECT_SMALLCLOUDS = 0x26, //38 MAGIC_EFFECT_HOLYDAMAGE = 0x27, //39 MAGIC_EFFECT_BIGCLOUDS = 0x28, //40 MAGIC_EFFECT_ICEAREA = 0x29, //41 MAGIC_EFFECT_ICETORNADO = 0x2A, //42 MAGIC_EFFECT_ICEATTACK = 0x2B, //43 MAGIC_EFFECT_STONES = 0x2C, //44 MAGIC_EFFECT_SMALLPLANTS = 0x2D, //45 MAGIC_EFFECT_CARNIPHILA = 0x2E, //46 MAGIC_EFFECT_PURPLEENERGY = 0x2F, //47 MAGIC_EFFECT_YELLOWENERGY = 0x30, //48 MAGIC_EFFECT_HOLYAREA = 0x31, //49 MAGIC_EFFECT_BIGPLANTS = 0x32, //50 MAGIC_EFFECT_CAKE = 0x33, //51 MAGIC_EFFECT_GIANTICE = 0x34, //52 MAGIC_EFFECT_WATERSPLASH = 0x35, //53 MAGIC_EFFECT_PLANTATTACK = 0x36, //54 MAGIC_EFFECT_TUTORIALARROW = 0x37, //55 MAGIC_EFFECT_TUTORIALSQUARE = 0x38, //56 MAGIC_EFFECT_MIRRORHORIZONTAL = 0x39, //57 MAGIC_EFFECT_MIRRORVERTICAL = 0x3A, //58 MAGIC_EFFECT_SKULLHORIZONTAL = 0x3B, //59 MAGIC_EFFECT_SKULLVERTICAL = 0x3C, //60 MAGIC_EFFECT_ASSASSIN = 0x3D, //61 MAGIC_EFFECT_STEPSHORIZONTAL = 0x3E, //62 MAGIC_EFFECT_BLOODYSTEPS = 0x3F, //63 MAGIC_EFFECT_STEPSVERTICAL = 0x40, //64 MAGIC_EFFECT_YALAHARIGHOST = 0x41, //65 MAGIC_EFFECT_BATS = 0x42, //66 MAGIC_EFFECT_SMOKE = 0x43, //67 MAGIC_EFFECT_INSECTS = 0x44, //68 MAGIC_EFFECT_LAST = MAGIC_EFFECT_INSECTS, //for internal use, dont send to client MAGIC_EFFECT_NONE = 0xFF, MAGIC_EFFECT_UNKNOWN = 0xFFFF }; Agora basta dar continuidade, configurando novos efeitos, como desejar. Por exemplo, aqui está configurado até o efeito 90 (source de NTO): enum MagicEffect_t { MAGIC_EFFECT_DRAW_BLOOD = 0x00, MAGIC_EFFECT_LOSE_ENERGY = 0x01, MAGIC_EFFECT_POFF = 0x02, MAGIC_EFFECT_BLOCKHIT = 0x03, MAGIC_EFFECT_EXPLOSION_AREA = 0x04, MAGIC_EFFECT_EXPLOSION_DAMAGE = 0x05, MAGIC_EFFECT_FIRE_AREA = 0x06, MAGIC_EFFECT_YELLOW_RINGS = 0x07, MAGIC_EFFECT_POISON_RINGS = 0x08, MAGIC_EFFECT_HIT_AREA = 0x09, MAGIC_EFFECT_TELEPORT = 0x0A, //10 MAGIC_EFFECT_ENERGY_DAMAGE = 0x0B, //11 MAGIC_EFFECT_WRAPS_BLUE = 0x0C, //12 MAGIC_EFFECT_WRAPS_RED = 0x0D, //13 MAGIC_EFFECT_WRAPS_GREEN = 0x0E, //14 MAGIC_EFFECT_HITBY_FIRE = 0x0F, //15 MAGIC_EFFECT_POISON = 0x10, //16 MAGIC_EFFECT_MORT_AREA = 0x11, //17 MAGIC_EFFECT_SOUND_GREEN = 0x12, //18 MAGIC_EFFECT_SOUND_RED = 0x13, //19 MAGIC_EFFECT_POISON_AREA = 0x14, //20 MAGIC_EFFECT_SOUND_YELLOW = 0x15, //21 MAGIC_EFFECT_SOUND_PURPLE = 0x16, //22 MAGIC_EFFECT_SOUND_BLUE = 0x17, //23 MAGIC_EFFECT_SOUND_WHITE = 0x18, //24 MAGIC_EFFECT_BUBBLES = 0x19, //25 MAGIC_EFFECT_CRAPS = 0x1A, //26 MAGIC_EFFECT_GIFT_WRAPS = 0x1B, //27 MAGIC_EFFECT_FIREWORK_YELLOW = 0x1C, //28 MAGIC_EFFECT_FIREWORK_RED = 0x1D, //29 MAGIC_EFFECT_FIREWORK_BLUE = 0x1E, //30 MAGIC_EFFECT_STUN = 0x1F, //31 MAGIC_EFFECT_SLEEP = 0x20, //32 MAGIC_EFFECT_WATERCREATURE = 0x21, //33 MAGIC_EFFECT_GROUNDSHAKER = 0x22, //34 MAGIC_EFFECT_HEARTS = 0x23, //35 MAGIC_EFFECT_FIREATTACK = 0x24, //36 MAGIC_EFFECT_ENERGY_AREA = 0x25, //37 MAGIC_EFFECT_SMALLCLOUDS = 0x26, //38 MAGIC_EFFECT_HOLYDAMAGE = 0x27, //39 MAGIC_EFFECT_BIGCLOUDS = 0x28, //40 MAGIC_EFFECT_ICEAREA = 0x29, //41 MAGIC_EFFECT_ICETORNADO = 0x2A, //42 MAGIC_EFFECT_ICEATTACK = 0x2B, //43 MAGIC_EFFECT_STONES = 0x2C, //44 MAGIC_EFFECT_SMALLPLANTS = 0x2D, //45 MAGIC_EFFECT_CARNIPHILA = 0x2E, //46 MAGIC_EFFECT_PURPLEENERGY = 0x2F, //47 MAGIC_EFFECT_YELLOWENERGY = 0x30, //48 MAGIC_EFFECT_HOLYAREA = 0x31, //49 MAGIC_EFFECT_BIGPLANTS = 0x32, //50 MAGIC_EFFECT_CAKE = 0x33, //51 MAGIC_EFFECT_GIANTICE = 0x34, //52 MAGIC_EFFECT_WATERSPLASH = 0x35, //53 MAGIC_EFFECT_PLANTATTACK = 0x36, //54 MAGIC_EFFECT_TUTORIALARROW = 0x37, //55 MAGIC_EFFECT_TUTORIALSQUARE = 0x38, //56 MAGIC_EFFECT_MIRRORHORIZONTAL = 0x39, //57 MAGIC_EFFECT_MIRRORVERTICAL = 0x3A, //58 MAGIC_EFFECT_SKULLHORIZONTAL = 0x3B, //59 MAGIC_EFFECT_SKULLVERTICAL = 0x3C, //60 MAGIC_EFFECT_ASSASSIN = 0x3D, //61 MAGIC_EFFECT_STEPSHORIZONTAL = 0x3E, //62 MAGIC_EFFECT_BLOODYSTEPS = 0x3F, //63 MAGIC_EFFECT_STEPSVERTICAL = 0x40, //64 MAGIC_EFFECT_YALAHARIGHOST = 0x41, //65 MAGIC_EFFECT_BATS = 0x42, //66 MAGIC_EFFECT_SMOKE = 0x43, //67 MAGIC_EFFECT_EFEITO69 = 0x44, //69 MAGIC_EFFECT_EFEITO70 = 0x45, //70 MAGIC_EFFECT_EFEITO71 = 0x46, //71 MAGIC_EFFECT_EFEITO72 = 0x47, //72 MAGIC_EFFECT_EFEITO73 = 0x48, //73 MAGIC_EFFECT_EFEITO74 = 0x49, //74 MAGIC_EFFECT_EFEITO75 = 0x50, //75 MAGIC_EFFECT_EFEITO76 = 0x51, //76 MAGIC_EFFECT_EFEITO77 = 0x52, //77 MAGIC_EFFECT_EFEITO78 = 0x53, //78 MAGIC_EFFECT_EFEITO79 = 0x54, //79 MAGIC_EFFECT_EFEITO80 = 0x55, //80 MAGIC_EFFECT_EFEITO81 = 0x56, //81 MAGIC_EFFECT_EFEITO82 = 0x57, //82 MAGIC_EFFECT_EFEITO83 = 0x58, //83 MAGIC_EFFECT_EFEITO84 = 0x59, //84 MAGIC_EFFECT_EFEITO85 = 0x60, //85 MAGIC_EFFECT_EFEITO86 = 0x61, //86 MAGIC_EFFECT_EFEITO87 = 0x62, //87 MAGIC_EFFECT_EFEITO88 = 0x63, //88 MAGIC_EFFECT_EFEITO89 = 0x64, //89 MAGIC_EFFECT_EFEITO90 = 0x65, //90 MAGIC_EFFECT_LAST = MAGIC_EFFECT_EFEITO90, //for internal use, dont send to client MAGIC_EFFECT_NONE = 0xFF, MAGIC_EFFECT_UNKNOWN = 0xFFFF }; Não esqueça de deixar MAGIC_EFFECT_LAST, sempre como sendo o último efeito configurado. Por exemplo, se o meu último efeito configurado é MAGIC_EFFECT_EFEITO71 = 0x46, //71, então, ficará como: MAGIC_EFFECT_LAST = MAGIC_EFFECT_EFEITO71, No arquivo tools.cpp, procure por: MagicEffectNames magicEffectNames[] = Basta configurar os efeitos novamente, assim como no arquivo anterior (const.h). Ficando assim (no caso, também até o 90): MagicEffectNames magicEffectNames[] = { {"redspark", MAGIC_EFFECT_DRAW_BLOOD}, {"bluebubble", MAGIC_EFFECT_LOSE_ENERGY}, {"poff", MAGIC_EFFECT_POFF}, {"yellowspark", MAGIC_EFFECT_BLOCKHIT}, {"explosionarea", MAGIC_EFFECT_EXPLOSION_AREA}, {"explosion", MAGIC_EFFECT_EXPLOSION_DAMAGE}, {"firearea", MAGIC_EFFECT_FIRE_AREA}, {"yellowbubble", MAGIC_EFFECT_YELLOW_RINGS}, {"greenbubble", MAGIC_EFFECT_POISON_RINGS}, {"blackspark", MAGIC_EFFECT_HIT_AREA}, {"teleport", MAGIC_EFFECT_TELEPORT}, {"energy", MAGIC_EFFECT_ENERGY_DAMAGE}, {"blueshimmer", MAGIC_EFFECT_WRAPS_BLUE}, {"redshimmer", MAGIC_EFFECT_WRAPS_RED}, {"greenshimmer", MAGIC_EFFECT_WRAPS_GREEN}, {"fire", MAGIC_EFFECT_HITBY_FIRE}, {"greenspark", MAGIC_EFFECT_POISON}, {"mortarea", MAGIC_EFFECT_MORT_AREA}, {"greennote", MAGIC_EFFECT_SOUND_GREEN}, {"rednote", MAGIC_EFFECT_SOUND_RED}, {"poison", MAGIC_EFFECT_POISON_AREA}, {"yellownote", MAGIC_EFFECT_SOUND_YELLOW}, {"purplenote", MAGIC_EFFECT_SOUND_PURPLE}, {"bluenote", MAGIC_EFFECT_SOUND_BLUE}, {"whitenote", MAGIC_EFFECT_SOUND_WHITE}, {"bubbles", MAGIC_EFFECT_BUBBLES}, {"dice", MAGIC_EFFECT_CRAPS}, {"giftwraps", MAGIC_EFFECT_GIFT_WRAPS}, {"yellowfirework", MAGIC_EFFECT_FIREWORK_YELLOW}, {"redfirework", MAGIC_EFFECT_FIREWORK_RED}, {"bluefirework", MAGIC_EFFECT_FIREWORK_BLUE}, {"stun", MAGIC_EFFECT_STUN}, {"sleep", MAGIC_EFFECT_SLEEP}, {"watercreature", MAGIC_EFFECT_WATERCREATURE}, {"groundshaker", MAGIC_EFFECT_GROUNDSHAKER}, {"hearts", MAGIC_EFFECT_HEARTS}, {"fireattack", MAGIC_EFFECT_FIREATTACK}, {"energyarea", MAGIC_EFFECT_ENERGY_AREA}, {"smallclouds", MAGIC_EFFECT_SMALLCLOUDS}, {"holydamage", MAGIC_EFFECT_HOLYDAMAGE}, {"bigclouds", MAGIC_EFFECT_BIGCLOUDS}, {"icearea", MAGIC_EFFECT_ICEAREA}, {"icetornado", MAGIC_EFFECT_ICETORNADO}, {"iceattack", MAGIC_EFFECT_ICEATTACK}, {"stones", MAGIC_EFFECT_STONES}, {"smallplants", MAGIC_EFFECT_SMALLPLANTS}, {"carniphila", MAGIC_EFFECT_CARNIPHILA}, {"purpleenergy", MAGIC_EFFECT_PURPLEENERGY}, {"yellowenergy", MAGIC_EFFECT_YELLOWENERGY}, {"holyarea", MAGIC_EFFECT_HOLYAREA}, {"bigplants", MAGIC_EFFECT_BIGPLANTS}, {"cake", MAGIC_EFFECT_CAKE}, {"giantice", MAGIC_EFFECT_GIANTICE}, {"watersplash", MAGIC_EFFECT_WATERSPLASH}, {"plantattack", MAGIC_EFFECT_PLANTATTACK}, {"tutorialarrow", MAGIC_EFFECT_TUTORIALARROW}, {"tutorialsquare", MAGIC_EFFECT_TUTORIALSQUARE}, {"mirrorhorizontal", MAGIC_EFFECT_MIRRORHORIZONTAL}, {"mirrorvertical", MAGIC_EFFECT_MIRRORVERTICAL}, {"skullhorizontal", MAGIC_EFFECT_SKULLHORIZONTAL}, {"skullvertical", MAGIC_EFFECT_SKULLVERTICAL}, {"assassin", MAGIC_EFFECT_ASSASSIN}, {"stepshorizontal", MAGIC_EFFECT_STEPSHORIZONTAL}, {"bloodysteps", MAGIC_EFFECT_BLOODYSTEPS}, {"stepsvertical", MAGIC_EFFECT_STEPSVERTICAL}, {"yalaharighost", MAGIC_EFFECT_YALAHARIGHOST}, {"bats", MAGIC_EFFECT_BATS}, {"smoke", MAGIC_EFFECT_SMOKE}, {"efeito69", MAGIC_EFFECT_EFEITO69}, {"efeito70", MAGIC_EFFECT_EFEITO70}, {"efeito71", MAGIC_EFFECT_EFEITO71}, {"efeito72", MAGIC_EFFECT_EFEITO72}, {"efeito73", MAGIC_EFFECT_EFEITO73}, {"efeito74", MAGIC_EFFECT_EFEITO74}, {"efeito75", MAGIC_EFFECT_EFEITO75}, {"efeito76", MAGIC_EFFECT_EFEITO76}, {"efeito77", MAGIC_EFFECT_EFEITO77}, {"efeito78", MAGIC_EFFECT_EFEITO78}, {"efeito79", MAGIC_EFFECT_EFEITO79}, {"efeito80", MAGIC_EFFECT_EFEITO80}, {"efeito81", MAGIC_EFFECT_EFEITO81}, {"efeito82", MAGIC_EFFECT_EFEITO82}, {"efeito83", MAGIC_EFFECT_EFEITO83}, {"efeito84", MAGIC_EFFECT_EFEITO84}, {"efeito85", MAGIC_EFFECT_EFEITO85}, {"efeito86", MAGIC_EFFECT_EFEITO86}, {"efeito87", MAGIC_EFFECT_EFEITO87}, {"efeito88", MAGIC_EFFECT_EFEITO88}, {"efeito89", MAGIC_EFFECT_EFEITO89}, {"efeito90", MAGIC_EFFECT_EFEITO90} }; Não esqueça de configurar exatamente como em const.h. Por exemplo, se no arquivo anterior o efeito 71 está configurado como: MAGIC_EFFECT_EFEITO71 = 0x46, //71 Então, você terá que configurar o mesmo efeito com os mesmos caracteres do nome desse efeito em tools.cpp (no código, digo configurar os caracteres exatamente iguais aos do arquivo anterior, após a vírgula >): {"efeito71", MAGIC_EFFECT_EFEITO71}, Compile e adicione o executável do distro à seu servidor. Vamos a configuração no seu servidor. Vá até o diretório da pasta lib (data/lib) e abra o arquivo 000-constant.lua. Nele, procure por: CONST_ME_ E então configure, logo após o último efeito (no caso, 68 seria: CONST_ME_INSECTS = 68), todos os efeitos com os mesmos caracteres dos quais você adicionou na source em const.h e tools.cpp. Se você configurou por exemplo, até o efeito número 80 nos arquivos anteriores, então no script da lib ficaria dessa forma: CONST_ME_DRAWBLOOD = 0 CONST_ME_LOSEENERGY = 1 CONST_ME_POFF = 2 CONST_ME_BLOCKHIT = 3 CONST_ME_EXPLOSIONAREA = 4 CONST_ME_EXPLOSIONHIT = 5 CONST_ME_FIREAREA = 6 CONST_ME_YELLOW_RINGS = 7 CONST_ME_GREEN_RINGS = 8 CONST_ME_HITAREA = 9 CONST_ME_TELEPORT = 10 CONST_ME_ENERGYHIT = 11 CONST_ME_MAGIC_BLUE = 12 CONST_ME_MAGIC_RED = 13 CONST_ME_MAGIC_GREEN = 14 CONST_ME_HITBYFIRE = 15 CONST_ME_HITBYPOISON = 16 CONST_ME_MORTAREA = 17 CONST_ME_SOUND_GREEN = 18 CONST_ME_SOUND_RED = 19 CONST_ME_POISONAREA = 20 CONST_ME_SOUND_YELLOW = 21 CONST_ME_SOUND_PURPLE = 22 CONST_ME_SOUND_BLUE = 23 CONST_ME_SOUND_WHITE = 24 CONST_ME_BUBBLES = 25 CONST_ME_CRAPS = 26 CONST_ME_GIFT_WRAPS = 27 CONST_ME_FIREWORK_YELLOW = 28 CONST_ME_FIREWORK_RED = 29 CONST_ME_FIREWORK_BLUE = 30 CONST_ME_STUN = 31 CONST_ME_SLEEP = 32 CONST_ME_WATERCREATURE = 33 CONST_ME_GROUNDSHAKER = 34 CONST_ME_HEARTS = 35 CONST_ME_FIREATTACK = 36 CONST_ME_ENERGYAREA = 37 CONST_ME_SMALLCLOUDS = 38 CONST_ME_HOLYDAMAGE = 39 CONST_ME_BIGCLOUDS = 40 CONST_ME_ICEAREA = 41 CONST_ME_ICETORNADO = 42 CONST_ME_ICEATTACK = 43 CONST_ME_STONES = 44 CONST_ME_SMALLPLANTS = 45 CONST_ME_CARNIPHILA = 46 CONST_ME_PURPLEENERGY = 47 CONST_ME_YELLOWENERGY = 48 CONST_ME_HOLYAREA = 49 CONST_ME_BIGPLANTS = 50 CONST_ME_CAKE = 51 CONST_ME_GIANTICE = 52 CONST_ME_WATERSPLASH = 53 CONST_ME_PLANTATTACK = 54 CONST_ME_TUTORIALARROW = 55 CONST_ME_TUTORIALSQUARE = 56 CONST_ME_MIRRORHORIZONTAL = 57 CONST_ME_MIRRORVERTICAL = 58 CONST_ME_SKULLHORIZONTAL = 59 CONST_ME_SKULLVERTICAL = 60 CONST_ME_ASSASSIN = 61 CONST_ME_STEPSHORIZONTAL = 62 CONST_ME_BLOODYSTEPS = 63 CONST_ME_STEPSVERTICAL = 64 CONST_ME_YALAHARIGHOST = 65 CONST_ME_BATS = 66 CONST_ME_SMOKE = 67 CONST_ME_INSECTS = 68 CONST_ME_EFEITO69 = 69 CONST_ME_EFEITO70 = 70 CONST_ME_EFEITO71 = 71 CONST_ME_EFEITO72 = 72 CONST_ME_EFEITO73 = 73 CONST_ME_EFEITO74 = 74 CONST_ME_EFEITO75 = 75 CONST_ME_EFEITO76 = 76 CONST_ME_EFEITO77 = 77 CONST_ME_EFEITO78 = 78 CONST_ME_EFEITO79 = 79 CONST_ME_EFEITO80 = 80 CONST_ME_EFEITO81 = 81 CONST_ME_EFEITO82 = 82 CONST_ME_EFEITO83 = 83 CONST_ME_EFEITO84 = 84 CONST_ME_EFEITO85 = 85 CONST_ME_EFEITO86 = 86 CONST_ME_EFEITO87 = 87 CONST_ME_EFEITO88 = 88 CONST_ME_EFEITO89 = 89 CONST_ME_EFEITO90 = 90 CONST_ME_NONE = 255 CONST_ME_LAST = CONST_ME_EFEITO90 Pronto novos efeitos adicionados. Creditos: Bizzle Espero que o tutorial seja de utilidade. Att~~ Krono
  17. Etapas de Estruturação de um Mapa Fala aí pessoal! Esse é um tutorial feito pelo Daniel e ele me deu a permissão de editá-lo para trocar algumas coisas e deixar um pouco completo pro pessoal aqui do XTibia. Estarei utilizando a mesma enumeração e imagens dele, então de cara vão os créditos para ele. Praticamente todo tutorial meu eu também sigo a explicação no mesmo sentido que estarei postando aqui, e quando eu faço um mapa também utilizo geralmente essa linha do tempo abaixo. Estruturar o mapa de maneira correta é muito importante para não deixar passar detalhes cruciais na consolidação de um bom mapa. Então, leia com atenção e tente seguir esses exemplos! Esse tutorial se aplica mais precisamente às construções, mas pode ser importante para qualquer tipo de mapa. Lembrando que as imagens são para ilustrar as etapas e não representam necessariamente o foco do tutorial. • 1º - Área A primeira coisa que você deve fazer ao iniciar o seu mapa é delimitar a área na qual você vai fazer a sua construção ou seja lá o que for. No caso desse tutorial, é aparentemente um templo ou algo do gênero. Delimite sua área com o ground que você deseja utilizar no resultado final e aproveite esse momento para mudar o quanto possível, afinal, depois de um tempo vai ficar complicado sair alterando a estrutura toda. Seja bem cuidadoso com essa parte. • 2º - Estrutura inicial Agora que você fez o molde da área, o próximo passo é fazer a estrutura de sustentação do local, as suas delimitações físicas, afinal, até o momento era só o chão. Defina quantos andares que você quer que a sua construção tenha, seja um prédio ou uma montanha, e faça a delimitação com paredes respeitando o que foi proposto antes! • 3º - Bordas As bordas são tão importantes quanto as delimitações de chão e paredes. Elas serão responsáveis por não deixar o seu mapa "solto", digamos assim, em relação ao exterior e também à objetos no interior da própria construção. Escolha sempre algo que combine bem com o que você deseja fazer. • 4º - Detalhamento inicial Na parte do detalhamento inicial, é tudo bem simples; Até o momento seu mapa só possui paredes, grounds e bordas. Lembrando que os telhados contam como bordas! Nessa parte é só você definir exatamente o que você quer que a construção se torne e, assim, começar a detalhar colocando o que é essencial para caracterizar o mapa como ele deve ser. Exemplo: se for uma igreja, colocar elementos de igreja; se for um depot, colocar elementos essenciais de depot, e por aí vai. • 5º - Estrutura final É a parte que precede o final e você vai colocar os elementos que têm alguma boa ligação com o tema do seu mapa, mas que não são necessariamente essenciais para formação do mesmo. Nesse exemplo da foto, pouca coisa é mudada, mas faz uma diferença interessante! • 6º - Detalhamento final Agora sim você vai acabar a sua estrutura com os elementos realmente não necessários, mas isso vai muito por conta do gosto do mapper. Tente não exagerar e utilizar somente coisas que, de um modo, farão sentido com o contexto. Nessa fase é onde a sua maior criatividade pode tornar algo simples e comum em um mapa muito bonito e que encha os olhos de quem olha! Então é isso, pessoal! É um tutorial bem básico! Refiz o texto sobre o meu estilo, mas baseado no conteúdo inicial do Daniel! Abraços e alguns créditos pra mim também!
  18. Bom galera dessa vez trago pra vcs um tutorial simples de como editar (formatar) textos em suas páginas PHP. 1°) Negrito Para deixar um texto em negrito basta definir esse texto com <b> (no inicio) e </b> (no final). Então o seguinte código: <b>Essa frase esta em negrito!</b> Teria esse efeito: Essa frase esta em negrito! 1.1°) Modo alternativo Outro modo de escrever em negrito é usando <strong> e </strong> Apesar do strong não ser destinado à isso tem o mesmo efeito de negrito. 2°) Sublinhado Para deixar um texto sublinhado basta definir esse texto com <u> (no inicio) e </u> (no final). Então o seguinte código: <u>Essa frase esta sublinhada!</u> Teria esse efeito: Essa frase esta sublinhada! 3°) Itálico Para deixar um texto em itálico basta definir esse texto com <i> (no inicio) e </i> (no final). Então o seguinte código: <i>Essa frase esta em italico!</i> Teria esse efeito: Essa frase esta em italico! 3.1°) Modo alternativo Outro modo de escrever em itálico é usando <em> e </em> 4°) Riscado Para deixar um texto riscado basta definir esse texto com <s> (no inicio) e </s> (no final). Então o seguinte código: <s>Essa frase esta riscada!</s> Teria esse efeito: Essa frase esta riscada! 5°) Mudando a fonte do texto Para mudar a fonte basta colocar <font face='FONTE QUE VC DESEJA'> (preste atenção aqui, pois o nome da fonte deve estar entre aspas simples!) no inicio e </font> no final da frase. Então o seguinte código: <font face='Times New Roman'> Fonte massa! </font> Teria esse efeito: Fonte massa! 6°) Mudando a cor do texto Para mudar a cor basta colocar <font color='COR (EM INGLES) QUE VC DESEJA ou código html'> (preste atenção aqui, pois a cor deve estar escrita em inglês e entre aspas simples! O mesmo serve para o código html, deve estar entre aspas simples!) no inicio e </font> no final da frase. Então o seguinte código: <font color='red'>Ta vermelho!</font> <font='blue'>Ta azul!</font> Teria esse efeito: Ta vermelho! Ta azul! 6.1°) Tabela de cores em html Aqui tem um link onde vc pode pegar o código html das cores de sua preferência para usar no código acima: http://www.flextool.com.br/tabela_cores.html 7°) Mudando o tamanho do texto Bom aqui tem uma diferença da formatação de texto normal. Existem 7 tamanhos de fonte em php: O tamanho 2 é o tamanho padrão dos textos. Para mudar o tamanho da fonte basta usar o código <font size='TAMANHO QUE VC DESEJA (de 1 a 7)'> (preste atenção aqui, pois o tamanho deve estar escrito entre aspas simples!) no inicio e </font> no final da frase. Então o seguinte código: <font size='5'>Tamanho 5!</font> Teria esse efeito: Tamanho 5 8°) Textos especiais (subscrito e sobrescrito) Para deixar um texto subscrito basta usar <sub> (no inicio) e </sub> (no final). Então o seguinte código: X<sub>5</sub> Teria o seguinte efeito: X5 (OBS: não ficaria em negrito! Eu apenas coloquei negrito para chamar atenção!) Para deixar um texto sobrescrito basta usar <sup> (no inicio) e </sup> (no final). Então o seguinte código: X<sup>3</sup> Teria o seguinte efeito: X3 (OBS: não ficaria em negrito! Eu apenas coloquei negrito para chamar atenção!) 9°) Iniciando uma nova linha Para iniciar uma nova linha basta usar <br> no inicio da frase que inicia a nova linha. Então o seguinte código: <br>Se liga, linha 1 <br> <br> <br>Agora linha 4 Teria o seguinte efeito: Obs.: Não necessita fechar esse comando usando </br> pois ao declarar um <br> ele já inicia outra linha mesmo que a anterior "não tenha sido fechada". 10°) Juntando os efeitos Você pode usar os comandos de size, color e face (fonte) em um só comando <font> da seguinte maneira: Ou seja, o seguinte código: <br><font face='times new roman' color='#0000FF' size='5'> Olha que loko! </font> Teria o seguinte efeito: Olha que loko! Vc pode concatenar todos os efeitos acima da forma que vc quiser, basta ter atenção! Por exemplo, o seguinte código: Aqui ta sem nada! <b>A partir daqui ta tudo em negrito... <font face='times new roman' color='##D2691E' size='6'>A partir daqui ta em negrito, azul, outra fonte, outro tamanho e em outra cor... </font> <i>A partir daqui ta em italico </i>Agora ta sem italico... </b>Agora ta sem negrito... </font>Agora ta da forma padrão! Teria o seguinte efeito: Aqui ta sem nada! [/size]A partir daqui ta tudo em negrito... A partir daqui ta em negrito, azul, outra fonte, outro tamanho e em outra cor... A partir daqui ta em italico Agora ta sem italico... Agora ta sem negrito... Agora ta da forma padrão![/size] _____________________________________________________________________________________ --------------------------------------------------------------------------------------------------------------------------- AGORA É A SUA VEZ!!! Poste aqui um texto de sua autoria e editado da forma ensinada do jeito que vc quiser! Eu darei REP+ a todo post que estiver editado de forma correta! ^^ E isso é tudo pessoal! ^^ _____________________________________________________________________________________ --------------------------------------------------------------------------------------------------------------------------- Créditos Eu (@Danihcv)
  19. Olá Ek tibianos, como vão vocês? Tudo correndo as mil maravilhas? Apresentando: Bom hoje vim apresenta-lhes o UFW, conhecem? Se a resposta for não, saibam que o UFW ou Uncomplicated Firewall nada mais é que o Firewall do Linux Ubuntu. Esse Firewall é um software de segurança pré instalado no sistema operacional Linux Ubuntu que restringe as portas de entrada e saída de dados do computador permitindo apenas conexões que estejam dentro das regras estabelecidas dentro das configurações do mesmo, essas regras podem ser modificadas de acordo com o uso do usuário, visando um maior ou menor acesso de outros computadores. Vejam a explicação na imagem a seguir: Supondo que você queira abrir um servidor de Tibia no Linux Ubuntu: Sendo assim você teria que abrir a porta 7171 no firewall, criando uma brecha para as conexões, e se você quisesse bloquear a conexão ao site, você teria que fechar a porta 8080 do Firewall. Por padrão esse software, vem ativado, porém com todas as suas portas abertas, sendo assim ele não restringe nenhuma conexão externa, ou seja, sua ação é nula. Como quase tudo no Linux Ubuntu, as configurações do firewall são via terminal, não que seja impossível a utilização gráfica, mas para isso seriam necessários upgrades no sistema. Sendo assim explicarei os comandos para configuração apenas via terminal. ufw status Verifica se o Firewall está ativo no sistema. Caso ele esteja ativo, mostrará também as regras de conexões configuradas. ufw default allow Altera o padrão que ao ativar o Firewall todas as portas venham abertas(porém não remove as regras criadas). ufw default deny Altera o padrão que ao ativar o Firewall todas as portas venham fechadas (porém não remove as regras criadas). ufw enable Ativa o Firewall. ufw disable Desativa o Firewall. Para configurar é simples, você pode Adicionar ou remover regras de acordo com o seu uso. Veja: Ao digitarmos o comando "ufw status" com o Firewall ativo, serão mostradas todas as regras ativas, e são elas que vão determinar o comportamento do Firewall para determinadas portas e conexões. To porta de conexão da regra Action Permissão de conexão(Permitida ou negada) From: conexão tem a permissão. Nesta parte podemos ver que pela regra A porta 80 (to) está aberta (allow) para a todas as conexões (Anywhere) Adicionando regras para conexões: Para adicionarmos utilizaremos o seguinte padrão no comando: ufw permisão from para quem -- Quando for para todas as portas ufw permisão from para quem any port porta -- Quando for para uma porta especifica Exemplos: 1º Neste exemplo permitir a conexão por qualquer porta para o ip 192.168.1.3: ufw allow from 192.168.1.3 Caso quisesse negar utilizaria o comando ufw deny from 192.168.1.3 2º Já neste iremos permitir a conexão apenas pela porta 22 ao ip 192.168.1.3 ufw allow from 192.168.1.3 to any port 22 Caso quisesse negar utilizaria ufw deny from 192.168.1.3 to any port 22 Removendo regras para conexões: Para adicionarmos utilizaremos o seguinte padrão no comando: ufw delete permisão from para quem -- Quando a regra seja de todas as portas ufw delete allow 80 permisão from para quem any port porta -- Quando a regra tiver uma porta especifica Exemplos: 1º Supondo que desejemos remover esta regra. Utilizaremos o comando: ufw delete allow 80 2º Neste outro exemplo, deletaremos agora esta regra: Para isso utilizaremos o comando: ufw delete allow from 192.168.1.3 Bom então é isso. Gostaram? Aprenderam? espero que esse tutorial sirva de base para entenderem um pouco melhor o grande sistema que é o Linux Ubuntu!. Um grande abraço Att ~~ Krono - Xtibia Créditos: Krono
  20. Bom galera, dessa vez venho trazer um tutorial bem simples sobre tabelas e como criá-las em suas paginas PHP. Então vamos ao que interessa. ___________________________________________________________________________________ Para definir o que estará dentro da tabela usamos <table> no inicio e </table> no final. Para definirmos o que estará entro de uma linha da tabela usamos <tr> no inicio e </tr> no final. *A linha por sua vez estará dentro da tabela, então primeiro declaramos o inicio da table e dps declaramos o inicio da linha. Para definirmos o que estará dentro de uma coluna usamos <td> no inicio e </td> no final. *A coluna por sua vez estará dentro da linha, que por sua vez estará dentro da tabela. Então primeiro declaramos o inicio da linha e dps declaramos o inicio da coluna. *Antes de começar uma nova coluna, finalize a anterior, para que não gere nenhum "bug". Para colocarmos um título às colunas devemos delimitar o mesmo usando <th> no inicio e </th> no final. *O titulo da coluna segue a mesma logica da coluna, ou seja, vc deve declarar uma linha para colocar os títulos dentro da mesma. *A diferença to th para o td é que o th coloca o seu texto em negrito. E no caso das paginas de sites de tibia, também coloca um fundo cinza escuro e altera a cor da letra para branco. Então vamos ver uma tabela de exemplo: <table> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> E esse seria o resultado: Titulo-Coluna-1 Titulo-Coluna-2 Titulo-Coluna-3 Coluna-1,linha-1 Coluna 2,linha-1 Coluna-1,linha-2 *Como pode-se ver, podem haver espaços vazios, os seja, uma linha pode ter mais colunas que outras. Dessa forma a coluna não terá valor algum nas demais linhas. Agora vamos colocar as bordas da nossa tabela. Para isso devemos adicionar as especificações da borda após decalararmos o inicio da table e colocamos tais especificações dentro do "comando" que usamos para dar o inicio à table. Obrserve: "Mas quais são as especificações da borda?" Bom, elas são basicamente 3: a espessura, o espaçamento e a cor. Códigos para os respectivos parametros: *Espessura: border="1" (nesse caso, a espessura da borda seria de 1 pixel) *Espaçamento: cellspacing="0" (nesse caso, não haverá espaçamento de uma borda pra outra entre 2 linhas/colunas. Assim fazemos uma borda simples, pois sem isso a borda da tabela ficaria com 2 linhas separadas, deixando um aspecto inusitado.) *Cor: bordercolor="#000000" (nesse caso a borda seria preta. Para ver o código da cor que vc deseja colocar, visite essa pagina de cores HTML e copie o código HTML da cor que vc qr e coloque dentro das aspas.) Então vamos ver um exemplo de uma tabela com bordas simples: <table [b]border="1" [b]cellspacing="0[/b]" [b]bordercolor="[url=null]#248685[/url]"[/b][/b]> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> Esse seria o resultado (estou usando uma pagina do Gesior para mostrar o resultado): Porém se vc fizer o teste aí com frases maiores dentro das colunas e etc. Verá que todo o conteúdo de dentro da tabela (e inclusive a própria tabela) estarão concentrados no canto das colunas (e no caso da tabela, a mesma estará concentrada no canto esquerdo da pagina). Então digamos que vc queira colocar a tabela no centro da pagina e que vc queira centralizar todo o conteúdo da tabela no centro de suas respectivas colunas. Vc teria que usar um "comando" que centraliza o conteúdo. E esse comando é <div align="center"> (onde tem center vc pode esolher entre left (esquerda), right (direita) e claro center (centro)) aí logo em seguida vc coloca o conteúdo a ser centralizado e fecha o mesmo com </div> Atenção! Para usar o div align para centralizar uma tabela vc deve primeiro declarar ele e em seguida declarar o inicio da tabela e então após declarar o fim da tabela vc deve logo em seguida declarar o fim do div. Exemplo para centralizar a tabela no centro da pagina: <div align="center"> <table> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> </div> Caso vc queira centralizar o conteúdo de uma coluna, vc deve declarar o div align após declarar o inicio da coluna. Exemplo de coluna com conteúdo centralizado no centro da mesma: <th> <div align="center"> Testando </div> </th> _____________________________________________________________________________________________ Caso vc queira fazer edições no conteúdo da tabela, aqui tem um tutorial sobre edição de textos em HTML: http://www.xtibia.com/forum/topic/233324-tutorial-formatando-textos-em-php/ ___________________________________________________________________________________________ E isso é tudo, pessoal! Espero que tenha dado para entender tudo de forma correta e simples. ^^ ___________________________________________________________________________________________ Créditos Eu (@Danihcv)
  21. Bom galera, dessa vez venho trazer um tutorial bem simples sobre tabelas e como criá-las em suas paginas PHP. Então vamos ao que interessa. ___________________________________________________________________________________ Para definir o que estará dentro da tabela usamos <table> no inicio e </table> no final. Para definirmos o que estará entro de uma linha da tabela usamos <tr> no inicio e </tr> no final. *A linha por sua vez estará dentro da tabela, então primeiro declaramos o inicio da table e dps declaramos o inicio da linha. Para definirmos o que estará dentro de uma coluna usamos <td> no inicio e </td> no final. *A coluna por sua vez estará dentro da linha, que por sua vez estará dentro da tabela. Então primeiro declaramos o inicio da linha e dps declaramos o inicio da coluna. *Antes de começar uma nova coluna, finalize a anterior, para que não gere nenhum "bug". Para colocarmos um título às colunas devemos delimitar o mesmo usando <th> no inicio e </th> no final. *O titulo da coluna segue a mesma logica da coluna, ou seja, vc deve declarar uma linha para colocar os títulos dentro da mesma. *A diferença to th para o td é que o th coloca o seu texto em negrito. E no caso das paginas de sites de tibia, também coloca um fundo cinza escuro e altera a cor da letra para branco. Então vamos ver uma tabela de exemplo: <table> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> E esse seria o resultado: Titulo-Coluna-1 Titulo-Coluna-2 Titulo-Coluna-3 Coluna-1,linha-1 Coluna 2,linha-1 Coluna-1,linha-2 *Como pode-se ver, podem haver espaços vazios, os seja, uma linha pode ter mais colunas que outras. Dessa forma a coluna não terá valor algum nas demais linhas. Agora vamos colocar as bordas da nossa tabela. Para isso devemos adicionar as especificações da borda após decalararmos o inicio da table e colocamos tais especificações dentro do "comando" que usamos para dar o inicio à table. Obrserve: "Mas quais são as especificações da borda?" Bom, elas são basicamente 3: a espessura, o espaçamento e a cor. Códigos para os respectivos parametros: *Espessura: border="1" (nesse caso, a espessura da borda seria de 1 pixel) *Espaçamento: cellspacing="0" (nesse caso, não haverá espaçamento de uma borda pra outra entre 2 linhas/colunas. Assim fazemos uma borda simples, pois sem isso a borda da tabela ficaria com 2 linhas separadas, deixando um aspecto inusitado.) *Cor: bordercolor="#000000" (nesse caso a borda seria preta. Para ver o código da cor que vc deseja colocar, visite essa pagina de cores HTML e copie o código HTML da cor que vc qr e coloque dentro das aspas.) Então vamos ver um exemplo de uma tabela com bordas simples: <table [b]border="1" [b]cellspacing="0[/b]" [b]bordercolor="[url=null]#248685[/url]"[/b][/b]> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> Esse seria o resultado (estou usando uma pagina do Gesior para mostrar o resultado): Porém se vc fizer o teste aí com frases maiores dentro das colunas e etc. Verá que todo o conteúdo de dentro da tabela (e inclusive a própria tabela) estarão concentrados no canto das colunas (e no caso da tabela, a mesma estará concentrada no canto esquerdo da pagina). Então digamos que vc queira colocar a tabela no centro da pagina e que vc queira centralizar todo o conteúdo da tabela no centro de suas respectivas colunas. Vc teria que usar um "comando" que centraliza o conteúdo. E esse comando é <div align="center"> (onde tem center vc pode esolher entre left (esquerda), right (direita) e claro center (centro)) aí logo em seguida vc coloca o conteúdo a ser centralizado e fecha o mesmo com </div> Atenção! Para usar o div align para centralizar uma tabela vc deve primeiro declarar ele e em seguida declarar o inicio da tabela e então após declarar o fim da tabela vc deve logo em seguida declarar o fim do div. Exemplo para centralizar a tabela no centro da pagina: <div align="center"> <table> <tr> <th>Titulo-Coluna-1</th> <th>Titulo-Coluna-2</th> <th>Titulo-Coluna-3</th> <tr> <td>Coluna-1,linha-1</td> <td>Coluna-2,linha-1</td> </tr> <tr> <td>Coluna-1,linha-2</td> </table> </div> Caso vc queira centralizar o conteúdo de uma coluna, vc deve declarar o div align após declarar o inicio da coluna. Exemplo de coluna com conteúdo centralizado no centro da mesma: <th> <div align="center"> Testando </div> </th> _____________________________________________________________________________________________ Caso vc queira fazer edições no conteúdo da tabela, aqui tem um tutorial sobre edição de textos em HTML: *Link ainda indisponível, estou criando o tópico ___________________________________________________________________________________________ E isso é tudo, pessoal! Espero que tenha dado para entender tudo de forma correta e simples. ^^
  22. Aqui no XTibia tem alguns tutoriais ensinando a botar novas mounts em seus servers, porém não achei nenhum que trouxesse uma informação fundamental: existe um limite de mounts que vc pode ter em seu server ao mesmo tempo. Por exemplo, em meu server o limite é de 50 mounts. Se eu colocar, no arquivo mounts.xml, 51 mounts, o player quando abrir a tela pra escolher a mount ou irá tomar debug, ou a mount simplesmente não estará lá. Tendo isso em mente, vamos ao tutorial: 1°) Colocando a criatura como mount Abra seu arquivo mounts.xml que se encontra na pasta data/XML. Dentro dele adicione a seguinte tag: Em vermelho vc irá colocar o id da mount. Para descobrir qual o id da mount que vc está adicionando, basta ver o id da mount anterior e colocar o numero seguinte. Por exemplo, a mount anterior a essa tem o id 19. Em azul vc irá colocar o looktype da criatura (monstro). Para descobrir o looktype do monstro que vc qr adicionar, basta ver o looktype no arquivo .xml do monstro. Por exemplo no arquivo Crystal spider.xml: Em verde vc irá colocar o nome que irá aparecer para os players na tela de escolher a mount. Por exemplo, se eu tivesse colocado essa tag em mounts.xml: O player iria visualizar o seguinte: Em laranja vc irá colocar a speed da mount, ou seja, a velocidade com que o player irá se locomover quando estiver montado na mount. E por fim em roxo vc irá colocar se pra usar a mount é necessário ser premium (premium="yes") ou se qualquer player, premium ou não, poderá usar a mount (premium="no"). 2°) Colocando mounts proprias É o mesmo jeito de configurar, porém o outfit (looktype) vc irá pegar pelo seu dat (e spr) editor. Por exemplo, eu peguei a mount Emperor Deer da versão 10.71 e coloquei em meu client 10.10. No meu editor de dat e spr, ficou assim: Ou seja, a minha tag pra essa mount ficaria assim: Em breve (talvez não tão em breve assim... hehehe) farei um tutorial de como adicionar essas sprites de mounts proprias pra seu client. Quando o fizer, postarei o link aqui para complementar mais o tutorial. E isso é tudo, pessoal! Se gostaram do tutorial, não esquece o REP+ sahusahusa Se têm alguma sugestão de tutorial para me dar, manda pm. Créditos: Eu (@Danihcv)
  23. Bom galera, sei que tem muita gente que não sabe como colocar letras com acentuação, ou mesmo caracteres especiais. Por isso venho trazer pra vocês a solução bem simples e rápida para esse problema. Bom, basta vc adicionar isso logo depois do <?PHP : header("Content-Type: text/html; charset=UTF-8",true); Ou seja, digamos que eu queira escrever apenas "ATUALIZAÇÃO" na pagina. Basta colocar o código no devido lugar e escrever o conteúdo normalmente. Ficaria assim: Esse código serve para que a página saiba qual a codificação que deve ser feita para poder ler os caracteres especiais. E isso é tudo, pessoal! Créditos: Eu (@Danihcv)
  24. Tutorial Básico sobre CreatureScripts CreatureScripts = São scripts que serão ativados após uma determinada ação criada pelo monstro ou personagem. Essas ações são determinadas como funções. Existem varias funções utilizadas para a criação de creaturescripts e estas são: onDeath(cid, corpse, killer)-- que é executada ao morrer. onPrepareDeath(cid, lastHitKiller, mostDamageKiller) -- semelhante a onDeath. onAttack(cid, target) -- executa ao atacar. onCombat(cid, target) -- semelhante ao onAttack. onLogin(cid) -- executa ao logar. onLook(cid, thing, position, lookDistance) -- executa ao dar look. onAdvance(cid, skill, oldLevel, newLevel) -- executa ao upar skills/levels. onStatsChange(cid, attacker, type, combat, value) -- executa ao perder ou ganhar life/mana/condições. onLogout(cid) -- executa ao deslogar. onKill(cid, target, lastHit) -- executa ao matar. onThink(cid, interval) -- executa em determinado tempo. onJoinChannel(cid, channelId, users) -- executa ao entrar em um chat. onReceiveMail(cid, sender, item, openBox) -- executa ao receber um parcel/carta. onReportBug(cid, comment) -- executa ao reportar bug. Para criar esse tipo de script, primeiramente vai na pasta data/creaturescripts/scripts e duplica um arquivo e salve com "nomedesejado"; Agora você vai determinar que função você vai precisar para criação do seu script. Para exemplo vou usar a função "onAdvance"(ao upar). Neste exemplo, quando o player upar level 100 ele irá ganhar 1kk: 1 function onAdvance(cid, skill, oldLevel, newLevel) 2 if getPlayerLevel(cid) >= 100 and getPlayerStorageValue(cid, 1234) < 1 then -- checa level e storage 3 doPlayerAddItem(cid, 2160, 100) -- entraga a premiação 4 setPlayerStorageValue(cid, 1234, 1) -- define a storage para 1, para evitar entregar o premio mais de uma vez 5 doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Parabéns, você ganhou 1kk por atingir level 100!") 6 doSendMagicEffect(getCreaturePosition(cid), 30) 7 end 8 return true 9 end Numerei as linhas para melhor entendimento, nos seus scripts vocês não devem numerar. linha 1 = Inicio da função onAdvance, essa linha recebe algumas informações do player que upou, como seu cid, seus skills o velho level e o novo level. Obs: cid = creature id, numero de identificação do player/monstro. linha 2 = Inicia-se um if onde verifica se o level do player é igual a 100 e verifica a storage do player . Se for verdadeiro, o script executa as linhas 3,4 e 5, senão pula direto a linha 6. linha 3 = Adiciona 100 itens com o id 2160 ao player. linha 4 = define a storage do player para que não pegue o premio duas vezes linha 5 = Manda uma mensagem parabenizando o player linha 6 = Solta o efeito de numero 30, na posição em que o player esta. linha 7 = Finaliza a verificação do if. linha 8 = Retorna verdadeiro. Obs: sempre é necessario ela linha no final de seu código. linha 9 = Finaliza a função onAdvance. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Por fim para funcionamento do seu script é necessario adicionar 2 tags: 1º- No "data/creaturescripts/creaturescripts.xml" 2º- No arquivo "data/creaturescripts/scripts/login.lua", Obs: se o script que você for fazer for de função onLogin, não precisa adicionar a segunda tag. 1º Tag: Vai em data/creaturescripts/creaturescripts.xml e cole a tag: <event type="advance" name="QualquerNome" event="script" value="nomedesejado.lua"/> O type="" , será o nome da função de seu script após a palavra "on" e sempre tudo em minusculo. O name="", use qualquer nome porem esse nome vai ser usado para registrar no script onLogin na tag2. O value="", é o nome com qual você salvou seu script. Agora em data/creaturescripts/scripts/login.lua, sempre antes do último return true: registerCreatureEvent(cid, "QualquerNome") QualquerNome é o name que você adicionou na tag1 do creaturescripts.xml. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Acho que é isso aew, espero ter ajudado a galera que esta iniciando. Dica para criação de scripts: Para melhor edição e organização use Notepad++: http://www.baixaki.c...ad/notepad-.htm E sempre pesquise por scripts prontos e tutoriais para ter uma base. CREDITOS: JHON pelo tutorial completo!
  25. ATENÇÃO! Este tutorial foi feito pelo tibiaa4e, portanto os créditos são 100% dele! Parte I – Básico do básico de Lua Começaremos por LUA porque é uma linguagem simples, que não precisa declarar variáveis e tudo mais. Aqui não explicarei as funções do otserver e sim como montar um script. Nessa primeira parte usarei o Português Estruturado que sinceramente não é útil quando você aprende a sintaxe da linguagem, porém é ótimo para você que está começando aprender o que está fazendo e não só copiando e colando. LEMBRANDO QUE PORTUGUÊS ESTRUTURADO NÃO É UMA LINGUAGEM É APENAS UM JEITO DE VOCÊ ENTENDER A SINTAXE DAS LINGUAGENS. Começando vamos explicar a sintaxe de um script bem básico mesmo. Aquele script que quando você da use em 100 gps ele vira 1 platinum coin Citar Em português estruturado ele ficaria assim : Citar Com português estruturado da para entender essa action Agora da para explicar melhor a estrutura de um arquivo lua de actions : ► Essa parte é a que diz ao servidor que essa função vai se ativar quando o player usar o item indicado no actions.xml. No caso é a função aoUsar ou seja quando o player clicar com o direito nesse item irá acontecer algo. ► O SE é uma condição, se estiver tudo certo dentro dele ele faz a condição contida no caso o id (numerodoitem) tem que ser 2148 (Gold Coin) e tem que ser do tipo 100 (No caso de itens juntáveis o tipo é a quantidade), faça remova ele e adicione UM item 2152 (platinum coin). ► Senão ou seja, se o item não for 2148 ou não ter tipo 100, não retorne ao começo do script e finalize. Espero que essa parte tenha esclarecido um pouquinho mais sobre actions. Agora vou explicar um pouco mais sobre algumas condições e suas sintaxes. Sintaxe do IF, Else e Elseif. A condição if de longe é a mais importante de todas as programações e é essencial para um script um pouco mais complexo ou para evitar que você faça 200 scripts para certas funções (comida do tibia por exemplo). Vocabulário do tio Ta4e Citar Única coisa que o lua pede é que cada item tenha um end para cada if colocado tenha um end, você também tem que entender a questão do if encadeado que será tema da próxima aula aqui. Mais para ela se tem que saber o básico de um If normal. Esse é o script anterior com adição de uma condição que se o player tiver 100 platinum coin ele se transforme em uma crustal coin. function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 2148 and item.type == 100 then doRemoveItem(item.uid,1) doPlayerAddItem(cid, 2152, 1) elseif item.itemid == 2152 and item.type == 100 then doRemoveItem(item.uid,1) doPlayerAddItem(cid, 2160, 1) else return FALSE end return TRUE endVocê percebe que eu alinhei o if e elseif a seu end, isso chama-se Estruturação, isso é muito importante já que para achar um erro será muito mais fácil E fica mais organizado seu script Você percebe que o IF tem um end no final da sua cadeia, pois todo IF tem que ter um end porém o ELSEIF se enquadra dentro do IF. O ELSEIF ajuda pois você diminui linhas de scripts e serve para outras funções mais avançadas que serão vistas nas próximas aulas. Lembrando também que a função toda função também tem seu END, isso ajuda no caso de você querer colocar duas funções no mesmo script (muito usado em movements). IF Encadeado O if encadeado ou cadeia de if, indica funções pouco mais complexas que o if solitário, porém não é nenhum bicho de 7 cabeças, se você fazer a estruturação do script. Aqui vai o script de exemplo, é um script muito mais complexo do que os do gps Citar Esse script é o que eu uso para minhas quest. Esse é um ótimo exemplo de if encadeado. Perceba que ele está estruturado. Claro que colorido é muito simples identificar cada else e end Agora vou explicar a sintaxe. ►A primeira parte pede que o uniqueid (é um numero especial usado apenas uma vez no mapa inteiro), seja 2300. ►Essa parte do queststatus é uma variável que será explicado a parte ►Esse If, checa se o player tem o valor da variável listada acima, senão ele manda a mensagem o “the chest is empty”. ►Esse outro if checa se o player tem a capacidade 29.50, senão ele manda a mensagem “You have found a demon helmet. Weighing 29.50 oz it is too heavy”. ►Chama-se cadeia de if porque as funções em preto só serão executados se todos os IFS forem verdadeiros, se apenas um não for ele já acusa o erro. Seria mais ou menos como tirar um RG Se você tiver Certidão de nascimento faça Se você tiver Foto 3x4 faça Se você tiver o papel faça Criar RG Senão pegue o papel no balcão Senão tire uma foto 3x4 Senão tirei certidão primeiro ,já que você não existe Perceba que você terá que ter tudo isso para fazer o RG senão tiver você não consegue tirar ►Voltando ao script perceba que todos tem seu respectivo end, isso é importantíssimo Variáveis Variáveis é uma parte da memoria na qual se guarda um valor ou informação, em outras linguagens elas tem tipos como de números inteiros, reais ou de letras, porém em lua não existe isso. O que facilita muito nossas vidas as variáveis são maneiras ou jeitos de você fazer scripts para outras pessoas ou por pura preguiça mesmo... São extremamente necessárias em scripts grandes na qual um item de mesmo id é repetido muitas vezes, e talvez depois seja necessário muda-lo Lembra do script anterior da quest a parte que da questatus Citar A quest status é uma variável, que pergunta ao servidor se o player tem o valor nele Se não tiver faça, ou seja -1 é igual a negativo ou negação, no caso se o programador quisesse que ele tivesse colocava 1 Essa parte é bem simples de se entender, já que variáveis servem para simplificar a vida de não programadores, porém deixam seu servidor mais pesado, não é coisa grande, porém como já disse a variável ocupa memoria, em torno de 3kb cada uma, mais em um otserver básico possuem muitas variáveis Elas podem ser indicadas em qualquer parte do script, e elas sempre recebem dados ou perguntam. Pode se fazer cálculos nas variáveis ou usar outras variáveis dentro dela sem problema nenhum. Sinais Matemáticos e de comparação Aqui vai uma coisa que confunde muita gente : ►= - Faz o item anterior receber algo Exemplo : gold = 2148 ►== - Verificação. É para checar Exemplo : if item.itemid == 2555 then ► Os sinais matemáticos são +, -, / e * . ►E como toda linguagem não existe , entre números 1,5 é 1.5 virgula é só para separar variáveis ►Para se checar pode ser usar == (igual a ), >= (maior ou igual a ), <= (menor ou igual a ) o sinal de diferente é agora com certeza é ~=. ►Pode se calcular os itens dentro de variáveis ou até dentro de funções. IF com varias condições Você já deve entender um pouco mais de scripts portanto agora colocarei scripts cortados Vamos a um exemplo : if item.itemid == 2694 then if item2.itemid == 1381 or item2.itemid == 1382 or item2.itemid == 1383 or item2.itemid == 1384 then doRemoveItem(item.uid,1) doPlayerAddItem(cid,2692,1) else return 0 end Nesse caso o item.itemid é aqueles itens que você pode dar use with (vara de pescar por exemplo) e o item2.itemid é o local a ser clicado. Então seria Se o item for 2694 e o segundo item for 1381 ou 1382 ou 1383 ou 1384 faça. Ou seja qualquer um desses itens é considerado válido. Essa é a básica desse tipo porém pode-se fazer umas mais complexas como essa debaixo que não existe em actions e é só para explicar : Citar Nesse caso o player teria que usar o item 1381 e o 1382 juntos ou o 1383 e 1384 juntos. É usado em movements, npcs e talk actions muito frequentemente. Parece fácil mais da para se confundir facinho ai. Quando usar IF e quando usar ELSEIF Essa parte é a final desse primeiro tutorial e serve apenas para dar uma idéia de como melhor seu script básico Como eu já disse o Elseif é uma é a junção de else + if e ele só vai executado depois se o if primário for falso. Ou seja ele é usado quando apenas uma das condicionais vai ser verdadeira , eu uso muito isso em npcs para o quests de npcs, mais podemos mostrar uns exemplos em actions. Já o if sempre será checado, bom para os ifs encadeados já que eles tem todos estarem certos ou errados. Exemplo de If e Elseif junto Citar ►Perceba que nesse caso é usado o elseif porque é impossível que o mesmo bau tenha o mesmo uniqueid (Como disse anteriormente cada uniqueid é usado apenas 1 vez no mapa e um item só tem 1 uniqueid). Então ou é um ou é outro. E ELSEIF não tem end. ►Nesse caso todos tem que ser reais para poder se executar o script, então é necessários ser if e ter seus ENDS. Comentários Para inserir comentários na linguagem lua é necessário adicionar – 2 hifens. Pode ser em qualquer parte do script (pelo amor de deus não coloque dentro de um if) normalmente usado para explicar o script ou colocar créditos Siglas e Dicionario id – Identificador ou seja no caso de otserver é o numero do item para o tibia. cid – Creature Id :Identificador da criatura, no caso a criatura que executa a ação, no caso o player. uid – Unique Id : Identificador único usado uma vez no mapa (em algumas funções ele serve como para indicar um id. actionid – Identificador de ação pode ser usado varias vezes no mapa, usado principalmente para aquele chão que afunda perto do DP.
×
×
  • Criar Novo...