Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''script''.

  • 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. Olá pessoal, vocês provavelmente já deve ter visto este mesmo tutorial feito por mim postado nos tutoriais de mapping, bem, de fato, estou reformulando ele, acrescentando informações e arrumando o necessário. Modificando Seu Map Editor •Sumário• Grounds Grounds (z-order) Grounds (telhados) Doodads Doodads (efeito 3 em 1 [1]) Doodads (efeito 3 em 1 [2]) IMPORTANTE Faça um BACKUP do seu map editor antes de começar as modificações! GROUNDS Primeiramente, vou ensiná-lo a adicionar grounds ao seu map editor, siga os passos: PASSO 1: Abra seu map editor! PASSO 2: Escolher o que iremos modificar, no caso, vamos fazer um ground novo com auto-border. Vamos trabalhar com o TILE de ID: 11077, é um mais recente, se o seu não estiver com esse id procure por outro PASSO 3: abra a pasta do RME/data/8.6 e abra o arquivo grounds.xml (não esqueça de fazer um backup) PASSO 4: Vá até o final do script e antes da linha onde tem </materials> Adicione: <brush name="X1" type="ground" server_lookid="x2" z-order="4000"> <item id="X3" chance="2500"/> <border align="outer" id="999"/> <border align="inner" to="none" id="1"/> </brush> X1: Nome do seu novo ground x2: ID do ground X3: ID do ground Oresto nao mexa! se for adicionar outra ground so vai mudar esta linha <border align="outer" id="999"/> de 999 para 998, não pode ter igual no script PASSO 5: Agora na pasta do seu rme também e data/8.6 procure pelo script tilesets.xml, abra-o, aperte CTRL + F e coloque 'terrain', ele vai te levar até a linha, lá coloque na primeira linha: <brush name="NOME DO SEU ITEM"/> Salve e fexe junto com o ground. Vá em nature, e lá vai estar o seu item, no auto-border! PASSO 6: agora vamos adicionar borda ao ground. vá na pasta do rme em data/8.6 e abra o script borders. outra vez vá até o final do script e antes de </materials> Adicione: <border id="999"> <borderitem edge="n" item="a"/> <borderitem edge="e" item="b"/> <borderitem edge="s" item="c"/> <borderitem edge="w" item="d"/> <borderitem edge="cnw" item="e"/> <borderitem edge="cne" item="f"/> <borderitem edge="csw" item="g"/> <borderitem edge="cse" item="h"/> <borderitem edge="dnw" item="i"/> <borderitem edge="dne" item="j"/> <borderitem edge="dsw" item="k"/> <borderitem edge="dse" item="l"/> </border> Perceba que ali no border id foi colocado 999, que está também no group, isso serve para eles ficarem interligados. Agora é a parte mais complicada, mas eu resumi para voces, cada letra a cima represeta uma direção, norte, sul, leste, oeste, centroeste, etc.. Se o seu id for diferente procure pela imagem A= 11016 B= 11017 C= 11018 D= 11019 E= 11020 F= 11021 G= 11022 H= 11023 I= 11024 J= 11025 K= 11026 L= 11027 No meu caso usando esses ids meu script vai ficar assim: <border id="999"> <borderitem edge="n" item="11016"/> <borderitem edge="e" item="11017"/> <borderitem edge="s" item="11018"/> <borderitem edge="w" item="11019"/> <borderitem edge="cnw" item="11020"/> <borderitem edge="cne" item="11021"/> <borderitem edge="csw" item="11022"/> <borderitem edge="cse" item="11023"/> <borderitem edge="dnw" item="11024"/> <borderitem edge="dne" item="11025"/> <borderitem edge="dsw" item="11026"/> <borderitem edge="dse" item="11027"/> </border> Exemplo: Z-ORDER Agora mostrarei a função do Z-order Observem: <brush name="grass" type="ground" server_lookid="4526" z-order="3500"> <item id="4526" chance="2500"/> <item id="4527" chance="10"/> <item id="4528" chance="25"/> <item id="4529" chance="25"/> <item id="4530" chance="25"/> <item id="4531" chance="25"/> <item id="4532" chance="25"/> <item id="4533" chance="25"/> <item id="4534" chance="15"/> <item id="4535" chance="25"/> <item id="4536" chance="25"/> <item id="4537" chance="25"/> <item id="4538" chance="20"/> <item id="4539" chance="20"/> <item id="4540" chance="20"/> <item id="4541" chance="20"/> <item id="470" chance="0"/> <border align="outer" id="2"/> <border align="inner" to="none" id="1"/> </brush> Nos outros tutoriais eu não expliquei essa parta justamente para deixar mais simples agora, perceba que este é o grass com a borda pequena, ou seja, após adicionado o grass no piso e em seguida outros grounds ele vai ficar assim: Mas se mudarmos a z-order dele para 9000 vai ficar diferente: Isso acontece quando o z-order dele passa a ficar maior que o dos outros, então, fica por cima dos mesmos. Se mudarmos o z-order do grass de 9000 para 0, todas as outras bordas vão ficar por cima, por exemplo: Isso acontece por que o z-order dos outros tiles ficou maior que o grass. •--• •--• •--• •--• •--• •--• •--• •--• •--• •--• •--• •--• •--• •--• A próxima função é a friend name: <brush name="grass (alternate border)" type="ground" server_lookid="9044" z-order="5100"> <item id="9043" chance="2500"/> <item id="9044" chance="10"/> <item id="9045" chance="25"/> <item id="9046" chance="25"/> <item id="9047" chance="25"/> <item id="9048" chance="25"/> <item id="9049" chance="25"/> <item id="9050" chance="25"/> <item id="9051" chance="15"/> <item id="9052" chance="25"/> <item id="9053" chance="25"/> <item id="9054" chance="25"/> <item id="9055" chance="20"/> <item id="9056" chance="20"/> <item id="9057" chance="20"/> <item id="9058" chance="20"/> <border align="outer" id="120"/> <border align="outer" to="none" id="120"/> <friend name="grass"/> </brush> <friend name="grass"/> É bem simples! Ao adicionar este ground no grass normal, não vai criar borda, pois os dois são 'verdes' (iguais) e não é preciso, veja o que acontece quando tem essa tag e quando não tem: Agora algo mais simples chance="1"/> Que tem em todos os grounds, você ja deve saber o que seria, no caso, se tivermos um ground com 5 pisos diferentes: chance="100"/> chance="90"/> chance="80"/> chance="70"/> chance="60"/> O Maior numero (chance) vai ser o tile que mais vai sair no mapa. Caso encontre as seguintes tags: <border super="true" align="inner" ground_equivalent="777"> <border super="true" align="inner" to="none" ground_equivalent="777"> Não se assuste! Estas duas tags classificam ele, para que não aja outra borda na hora de adicionar no mapa, e sim o própio ground, é como se a borda fosse para dentro, veja na imagem: TELHADOS Vou lhes ensinar a construir grounds em forma de telhado, grounds normais ao adicionados no mapa 'escuro' não criam borda, mas os 'roofs' sim, é bem simples Novamente grounds.xml antes de: </materials> Adicione: <brush name="Telhado" type="ground" server_lookid="10884" z-order="8000"> <item id="10884" chance="1"/> <border align="outer" to="none" id="998"/> </brush> No server_lookid só ponha o id do seu telhado, no item id, o id do telhado também, perceba que no border align eu coloquei 998, lembra no tutorial 1 que era 999? não pode repetir então preste atenção pra não fazer 'cagada'. Após ter adicionado isso no script abra o borders.xml Vá até o final e antes da linha: </materials> Adicione: <border id="998"> <borderitem edge="n" item="x"/> <borderitem edge="w" item="x"/> <borderitem edge="s" item="x"/> <borderitem edge="e" item="x"/> <borderitem edge="cnw" item="y"/> <borderitem edge="cne" item="y"/> <borderitem edge="csw" item="y"/> <borderitem edge="cse" item="y"/> <borderitem edge="dnw" item="z"/> <borderitem edge="dne" item="z"/> <borderitem edge="dsw" item="z"/> <borderitem edge="dse" item="z"/> </border> Esta parte é igual ao outro tutorial, você vai substituir o x pela seguinte ordem: X: Y: Z: Após ter feito isso (se a ordem de IDS do seu map estiver igual ao meu) vai ficar assim: <border id="998"> <borderitem edge="n" item="10889"/> <borderitem edge="w" item="10891"/> <borderitem edge="s" item="10886"/> <borderitem edge="e" item="10892"/> <borderitem edge="cnw" item="10890"/> <borderitem edge="cne" item="10888"/> <borderitem edge="csw" item="10887"/> <borderitem edge="cse" item="10885"/> <borderitem edge="dnw" item="10896"/> <borderitem edge="dne" item="10895"/> <borderitem edge="dsw" item="10894"/> <borderitem edge="dse" item="10893"/> </border> Após ter feito isso vá em data/8.6 e abra o tilesets.xml de ctrl + f e digite: Roofs Na primeira linha coloque: <brush name="Telhado"/> Abra o RME, vá em terrain/roofs. Resultado: DOODADS Vamos Trabalhar com o grass tuft (morto) Procure pelo id: 10737-10740 ou veja pela imagem: Abra a data/8.6 do seu map editor e vá em doodad.xml, antes da linha: </materials> Coloque: <brush name="Nature Morta" type="doodad" server_lookid="x" draggable="y" on_blocking="false" thickness="25/100"> <item id="z" chance="4"/> <item id="z" chance="10"/> <item id="z" chance="10"/> <item id="z" chance="10"/> </brush> X: ID Do item, a imagem que vai aparecer la no auto-border Y: Esta opção vai dizer se o grass poderá ser colocado no escuro sem nada em baixo ou somente em cima de um ground, veja a imagem. (exemplo) Z: ID dos grass tufts marrons, coloque o id dos 4, no meu caso vai ficar assim ! <brush name="Nature Morta" type="doodad" server_lookid="10740" draggable="true" on_blocking="false" thickness="25/100"> <item id="10740" chance="4"/> <item id="10739" chance="10"/> <item id="10738" chance="10"/> <item id="10737" chance="10"/> </brush> Agora abra o tilesets.xml, de CTRL + F e digite 'nature' e desca até doodad Pronto já pode utilizar sua nova auto-border! Também no doodad.xml antes da linha: </materials> Adicione: <brush name="Nature Morta2" type="doodad" server_lookid="x" draggable="true" on_blocking="false" thickness="10/100"> <item id="y" chance="70"/> <item id="y" chance="60"/> <item id="y" chance="50"/> <item id="y" chance="40"/> <item id="y" chance="30"/> <item id="y" chance="20"/> <item id="y" chance="10"/> </brush> E Utilizando esses itens: Vai ficar assim: <brush name="Nature Morta2" type="doodad" server_lookid="10735" draggable="true" on_blocking="false" thickness="10/100"> <item id="10741" chance="70"/> <item id="10743" chance="60"/> <item id="10742" chance="50"/> <item id="10764" chance="40"/> <item id="10736" chance="30"/> <item id="10763" chance="20"/> <item id="10735" chance="10"/> </brush> Agora vá em tilesets.xml de ctrl + f 'nature' vá em doodad e adicione <brush name="Nature Morta"/> Abra o mapa editor e divirta-se ! DOODAD 3 EM 1 Como você viu, essa imagem ao lado do título é um item formado por vários outros itens posicionados estrategicamente pelo map editor, existe uma função que faz você criar um item que adicione tudo de uma vez: vamos trabalhar o item id 11385~11392 vá em data/8.6 e abra o doodads.xml Vá até a ultima linha e antes da linha: </materials> Adicione: <brush name="estatuanova" type="doodad" server_lookid="11387" draggable="true" on_blocking="true" thickness="15/100"> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="11389"/> </tile> <tile x="1" y="0" z="0"> <item id="11387"/> </tile> <tile x="2" y="0" z="0"> <item id="11390"/> </tile> <tile x="1" y="0" z="-1"> <item id="11385"/> </tile> <tile x="0" y="-1" z="-1"> <item id="11392"/> </tile> </composite> </brush> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- •• <brush name="estatuanova" type="doodad" server_lookid="11387" draggable="true" on_blocking="true" thickness="15/100"> <composite chance="10"> Brush name: Nome do item que será adicionado no mapa editor! server_lookid: ID do item cuja a imagem aparecerá na palette. draggable: Avançado, será esplicado melhor em outro tutorial, não mexa. on_blocking: Será explicado em outro tutorial, não mexa. thickness: Será explicado em outro tutorial, não mexa. Composite chance: Não mexa. <tile x="0" y="0" z="0"> <item id="11389"/> </tile> <tile x="1" y="0" z="0"> <item id="11387"/> </tile> <tile x="2" y="0" z="0"> <item id="11390"/> </tile> <tile x="1" y="0" z="-1"> <item id="11385"/> </tile> <tile x="0" y="-1" z="-1"> <item id="11392"/> </tile> Perceba que o X=0 no momento isso significa que X=Y=Z quando X=0 Se X for Igual a 1 ele pularia um Piso a direita > / Se Y for igual a 1 ele pularia um piso a para baixo (sendo Y=\/ [1] e Y=/\ [-1] < / Se Z For igual a 0 ele permanece no mesmo andar (7), porém quando o Z for igual a -1 ele Subira um andar (6). OOOOO OOOOO OOOOO Se o item X for 0 ele permanecerá na posição: XOOOO OOOOO OOOOO Se o item X for 1 ele mudará para posição (>) OXOOO OOOOO OOOOO Se o item X for -1 ele mudará para a posição (<) X OOOOO OOOOO OOOOO Se o item Y for 0 ele permanecerá na mesma posição XOOOO OOOOO OOOOO OU OXOOO OOOOO OOOOO Se o item Y for 1 ele decerá um piso OOOOO XOOOO OOOOO Se o item Y for -1 ele subirá um piso X OOOOO OOOOO OOOOO Se o item Z for 0 ele permanecerá no floor autal (7) OOOOO OOOOO OOOOO Se o item Z for 1 ele decerá para o floor (8) -- Se o item Z for -1 ele subira para o floor (6) -- ItemID: Coloque o id do item conforme o X,Y,Z Vamos ver outro exemplo ! Sabemos que: X=0 - Permanece no Local X= -1 - Pula um piso a esquerda X=1 - Pula um piso a direita Então: X=0 - X=-1 < X=1 > Vamos pegar os IDS 11385-11392! O ID 11389 vai ser o primeiro o X dele seria X=0 - Y=nulo Z=nulo Ele é o primeiro mas não é o centro! O ID 11387 vai ser o segundo no X o X dele vai ser X=1 (lembrando que x pula uma casa a direita, veja a imagem) Y=nulo Z=nulo O ID 11390 vai ser o terceiro na ordem X o X dele deve ser X=2 (por que ele pulou dois pisos a direita) Y=nulo Z=nulo O ID 11385 vai ser o primeiro na Ordem X porém no floor (7) Sendo assim o X dele Sera X=2, pois ele esta depois do id 11389 Y=nulo Z=-1 (lembrando que o Z=-1 sobe um andar) O ID 11392 será o negativo na ordem Y porém positivo 1 Na ordem X Sendo que está para > (direita) X=1 Sendo que Y negativo sobe uma casa Y=-1 Sendo que ele está no mesmo floor que o id 11385 Z=-1 Por último abra o tilesets.xml, pressione Ctrl + f e digite TOWN, coloque a linha: <brush name="estatuanova"/> DOODAD 3 EM 1 [2] Dando continuidade ao Doodads vou lhes ensinar a fazer Doodads 'ALTERNATIVE', sabe alguns itens do mapa editor que você preciona a tecla 'Z' e o item muda de direção (lado)? É Praticamente isso. Vamos trabalhar com os seguintes itens : ID: 11868-11887 ID: 11868-11887 ID: 11915-11916 Vamos Começar com o mais simples ! Abra a pasta do Map editor e vá em data/8.6/doodads.xml Como sempre antes da linha: </materials> Adicione: <brush name="novo1" type="doodad" server_lookid="A" draggable="true" on_blocking="false" thickness="10/10"> <alternate> <item id="B" chance="10"/> </alternate> <alternate> <item id="C" chance="10"/> </alternate> </brush> A: id do item, o que vai ficar de imagem no palette B: id do item normal, quando for adicionado, vamos colocar o id da tocha apagada C: id do segundo item, ou seja, quando você apertar 'Z' vai aparecer este item. Vai ficar assim: <brush name="novo1" type="doodad" server_lookid="11915" draggable="true" on_blocking="false" thickness="10/10"> <alternate> <item id="11915" chance="10"/> </alternate> <alternate> <item id="11916" chance="10"/> </alternate> </brush> Vá em tilesets.xml de ctrl + f, digite town e coloque: <brush name="Nature Morta"/> Agora na hora de abrir coloque sua tocha no mapa, depois aperte Z, perceba que ela vai mudar ! Normal: Depois que apertou o Z: Agora vamos complicar um pouco: Abra o doodads.xml novamente e adicione o script: <brush name="novo2" type="doodad" server_lookid="XXXX" draggable="true" on_blocking="true" thickness="10/10"> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="XXXX"/> </tile> <tile x="1" y="0" z="0"> <item id="XXXX"/> </tile> <tile x="2" y="0" z="0"> <item id="XXXX"/> </tile> <tile x="0" y="1" z="0"> <item id="XXXX"/> </tile> <tile x="1" y="1" z="0"> <item id="XXXX"/> </tile> <tile x="2" y="1" z="0"> <item id="XXXX"/> </tile> <tile x="0" y="2" z="0"> <item id="XXXX"/> </tile> <tile x="1" y="2" z="0"> <item id="XXXX"/> </tile> <tile x="2" y="2" z="0"> <item id="XXXX"/> </tile> <tile x="0" y="3" z="0"> <item id="XXXX"/> </tile> <tile x="1" y="3" z="0"> <item id="XXXX"/> </tile> <tile x="2" y="3" z="0"> <item id="XXXX"/> </tile> </composite> </alternate> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="XXXX"/> </tile> </composite> </alternate> </brush> O server_lookid como sempre é a imagem do item, qualquer item eu vou colocar o id 11856. Vamos trabalhar: Temos X=Y=Z sendo X=0 significa que se X=Y=Z permanece no local atual, então vamos adicionar o primeiro item Vamos usar os numeros 1-12 para representar cada ID O Item id 1 já está pronto ! Sendo que o itemid 2 está a uma posição a direita ele fica como X=1 Y=0 Z=0 Sendo que o itemid 3 está dois pisos a direita ele aumenta um X sendo: X=2 Y=0 Z=0 Sendo que o itemid 4 permanece na posição do itemid 1 porém uma casa abaixo ele fica X=0 Y=1 Z=0 Sendo que o itemid 5 permanece na posição Y porém uma casa a direita ele aumenta um X ficando: X=1 Y=1 Z=0 Sendo que o itemid 6 permanece na posição X e pula dois pisos a direita ele fica: X=2 Y=1 z=0 Sendo que o itemid 7 desce duas casas o Y dele é modificado porém ele permanece no X do primeiro item ficando: X=0 Y=2 Z=0 Sendo que o itemid 8 fica na mesma posição Y do itemid 7 só pulando uma casa a direita ele fica: X=1 Y=2 Z=0 Sendo que o itemid 9 fica na mesma posição X do itemid 7 pulando duas casas ele fica: X=2 Y=2 Z=0 Sendo que o itemid 10 permanece no X pulando ters casas para baixo o Y dele é o ultimo positivo ficando: X=0 Y=3 Z=0 Sendo que o itemid 11 permanece com o ultimo Y positivo pulando uma casa a direita só modifica o X ficando: X=1 Y=3 Z=0 Sendo que o itemid 12 é o ultimo na posição Y só modifica o X, que pula duas casas, ficando ! X=2 Y=3 Z=0 Modo avançado: [1] - x/y/z = 0/0/0 [2] - x/y/z = 1/0/0 [3] - x/y/z = 2/0/0 [4] - x/y/z = 0/1/0 [5] - x/y/z = 1/1/0 [6] - x/y/z = 2/1/0 [7] - x/y/z = 0/2/0 [8] - x/y/z = 1/2/0 [9] - x/y/z = 2/2/0 [10] - x/y/z = 0/3/0 [11] - x/y/z = 1/3/0 [12] - x/y/z = 2/3/0 O resultado fica: <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="11868"/> </tile> <tile x="1" y="0" z="0"> <item id="11864"/> </tile> <tile x="2" y="0" z="0"> <item id="11873"/> </tile> <tile x="0" y="1" z="0"> <item id="11869"/> </tile> <tile x="1" y="1" z="0"> <item id="11856"/> </tile> <tile x="2" y="1" z="0"> <item id="11874"/> </tile> <tile x="0" y="2" z="0"> <item id="11870"/> </tile> <tile x="1" y="2" z="0"> <item id="11856"/> </tile> <tile x="2" y="2" z="0"> <item id="11876"/> </tile> <tile x="0" y="3" z="0"> <item id="11871"/> </tile> <tile x="1" y="3" z="0"> <item id="11856"/> </tile> <tile x="2" y="3" z="0"> <item id="11877"/> </tile> </composite> </alternate> Agora como estamos estudando utilizar o 'Z' vamos acrescentar no script: <composite chance="10"> <tile x="0" y="0" z="0"> <item id="11878"/> </tile> <tile x="1" y="0" z="0"> <item id="11879"/> </tile> <tile x="2" y="0" z="0"> <item id="11881"/> </tile> <tile x="3" y="0" z="0"> <item id="11882"/> </tile> <tile x="0" y="1" z="0"> <item id="11865"/> </tile> <tile x="1" y="1" z="0"> <item id="11860"/> </tile> <tile x="2" y="1" z="0"> <item id="11860"/> </tile> <tile x="3" y="1" z="0"> <item id="11860"/> </tile> <tile x="0" y="2" z="0"> <item id="11883"/> </tile> <tile x="1" y="2" z="0"> <item id="11884"/> </tile> <tile x="2" y="2" z="0"> <item id="11886"/> </tile> <tile x="3" y="2" z="0"> <item id="11887"/> </tile> </composite> O Meu ja está feito, porém esse /\ é diferente do anterior não confunda ! Como eu ja fiz e expliquei em cima eu vou passar a formula do segundo ra vocês intenderem melhor: [1] - x/y/z = 0/0/0 [2] - x/y/z = 1/0/0 [3] - x/y/z = 2/0/0 [4] - x/y/z = 3/0/0 [5] - x/y/z = 0/1/0 [6] - x/y/z = 1/1/0 [7] - x/y/z = 2/1/0 [8] - x/y/z = 3/1/0 [9] - x/y/z = 0/2/0 [10] - x/y/z = 1/2/0 [11] - x/y/z = 2/2/0 [12] - x/y/z = 3/2/0 Juntando tudo e adicionando: <alternate> </alternate> O Script fica: <brush name="novo2" type="doodad" server_lookid="11856" draggable="true" on_blocking="true" thickness="10/10"> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="11868"/> </tile> <tile x="1" y="0" z="0"> <item id="11864"/> </tile> <tile x="2" y="0" z="0"> <item id="11873"/> </tile> <tile x="0" y="1" z="0"> <item id="11869"/> </tile> <tile x="1" y="1" z="0"> <item id="11856"/> </tile> <tile x="2" y="1" z="0"> <item id="11874"/> </tile> <tile x="0" y="2" z="0"> <item id="11870"/> </tile> <tile x="1" y="2" z="0"> <item id="11856"/> </tile> <tile x="2" y="2" z="0"> <item id="11876"/> </tile> <tile x="0" y="3" z="0"> <item id="11871"/> </tile> <tile x="1" y="3" z="0"> <item id="11856"/> </tile> <tile x="2" y="3" z="0"> <item id="11877"/> </tile> </composite> </alternate> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="11878"/> </tile> <tile x="1" y="0" z="0"> <item id="11879"/> </tile> <tile x="2" y="0" z="0"> <item id="11881"/> </tile> <tile x="3" y="0" z="0"> <item id="11882"/> </tile> <tile x="0" y="1" z="0"> <item id="11865"/> </tile> <tile x="1" y="1" z="0"> <item id="11860"/> </tile> <tile x="2" y="1" z="0"> <item id="11860"/> </tile> <tile x="3" y="1" z="0"> <item id="11860"/> </tile> <tile x="0" y="2" z="0"> <item id="11883"/> </tile> <tile x="1" y="2" z="0"> <item id="11884"/> </tile> <tile x="2" y="2" z="0"> <item id="11886"/> </tile> <tile x="3" y="2" z="0"> <item id="11887"/> </tile> </composite> </alternate> </brush> Agora abra o map editor, selecione o item e coloque no mapa, se você apertar a tecla Z vai mudar a ponte, pra cima ou pro lado
  2. Sistema De Refinação Olá Galera Do Xtibia Primeira Mente Quero Fala Que Esse È o meu Primeiro Topico Entao Porfavor Pode Dexa Suas Criticas Em Baixo Bom O Script Que venho trazer Aqui Hoje Para O Xtibia E Um Sistema De Refinação, Sei Que Ja tem Algums Sistema De Refinação No Xtibia Mais Esse Esta Diferente Bom Na Verdade São 2 Script De Refinação o 1º Quando Falha A Refinação O Item Quebra o 2º Quando Falha Em vez De volta 1 Ou Quebra, O Item Fica Como Esta Ex: Se o Item Ta +5 E falha ele Continua +5 Entao Vamos La! Vai Em: Data/actions/scripts/upgrade.lua Adicione A seguinte Tag: <action itemid="8300" event="script" value="upgrade.lua"/> Agora O 2 Script Em: Data\actions\scripts\upgrade2.lua Bom Seria esse O Script!! Creditos: by Mock the bear (MTB) > Por Produzir O Script Isac313 "Eu" > Por Melhorar O Script Ajudei?? Da REP+ Aew? Atenciosamente: Isac313
  3. Sua base toda vez que morre perde uma certa % de HP/MANA, ao chegar A 0 de HP/MANA ele não volta mais? Aqui esta a solução! Pasta > Servidor > Data > Creaturescripts > creaturescripts.XML Adicione isso em uma das linha: <event type="think" name="hpmanareal" event="script" value="hpmanareal.lua"/> Pasta > Servidor > Data > Creaturescripts > Scripts > hpmanarea.lua Crie o arquivo hpmanarea.lua e cole isso: function onThink(cid, interval) if isPlayer(cid) then local playerMaxHealth = getCreatureMaxHealth(cid) local playerHealth = getCreatureHealth(cid) local playerMaxMana = getCreatureMaxMana(cid) local playerMana = getCreatureMana(cid) doPlayerSendTextMessage(cid,23,"HP: "..playerHealth.."/"..playerMaxHealth..". ||| MANA: "..playerMana.."/"..playerMaxMana..".") end return TRUE end Pasta > Servidor > Data > Creaturescripts > Scripts > Login.lua Adicione isso antes do ultimo "END" do seu codigo: registerCreatureEvent(cid, "hpmanareal") Discord do meu servidor: https://discord.gg/34b5PeJT4P
  4. Qm puder me dizer tambem se tem um macro de mensagem para otclient eu agradeçeria
  5. normal item: 15:19 You see a morning star (Atk:25, Def:11). It weighs 54.00 oz. rare: 15:19 You see a [sharpened] morning star (Atk:29, Def:11). It weighs 54.00 oz. [atk: +18%] creaturescripts.xml: <event type="login" name="randomstats_register" script="randomstats.lua"/> <event type="kill" name="randomstats_loot" script="randomstats.lua"/> randomstats.lua: local rare_popup = true local rare_text = "*rare*" local rare_effect = true local rare_effect_id = CONST_ME_MAGIC_GREEN local tiers = { [1] = { prefix = 'rare', showattr = true, -- attr prefix will be shown instead extra = {0, 0}, chance = { [1] = 10000, -- chance for basic stat [2] = 5000 -- chance for second stat } }, [2] = { prefix = 'epic', extra = {7, 20}, -- additional percent bonus chance = { [1] = 3333, [2] = 25000 } }, [3] = { prefix = 'legendary', extra = {20, 35}, chance = { [1] = 1000, [2] = 100000 -- 2 bonuses always } }, } --! attributes local attr = { atk = { name = 'atk', prefix = 'sharpened', percent = {7, 25}, }, def = { name = 'def', prefix = 'fortified', percent = {7, 25}, }, extradef = { name = 'extra def', prefix = 'balanced', percent = {7, 25}, }, arm = { name = 'arm', prefix = 'flawless', percent = {7, 20}, }, hitchance = { name = 'accuracy', prefix = 'accurate', percent = {10, 25}, }, shootrange = { name = 'range', prefix = 'powerful', percent = {17, 34}, }, charges = { name = 'charges', prefix = 'charged', percent = {30, 45}, }, duration = { name = 'time', prefix = 'unique', percent = {35, 50}, }, --[[ not available in 1.1 attackSpeed = {}, extraAttack = {}, ]] } local stats = { [1] = {ITEM_ATTRIBUTE_ATTACK, attr.atk}, [2] = {ITEM_ATTRIBUTE_DEFENSE, attr.def}, [3] = {ITEM_ATTRIBUTE_EXTRADEFENSE, attr.extradef}, [4] = {ITEM_ATTRIBUTE_ARMOR, attr.arm}, [5] = {ITEM_ATTRIBUTE_HITCHANCE, attr.hitchance}, [6] = {ITEM_ATTRIBUTE_SHOOTRANGE, attr.shootrange}, [7] = {ITEM_ATTRIBUTE_CHARGES, attr.charges}, [8] = {ITEM_ATTRIBUTE_DURATION, attr.duration}, -- not available in 1.1 -- [9] = {ITEM_ATTRIBUTE_ATTACKSPEED, attr.attackSpeed}, -- [10] = {ITEM_ATTRIBUTE_EXTRAATTACK, attr.extraAttack}, } function stat_getItemDuration(item) local it_id = item:getId() local tid = ItemType(it_id):getTransformEquipId() if tid > 0 then item:transform(tid) local vx = item:getAttribute(ITEM_ATTRIBUTE_DURATION) item:transform(it_id) item:removeAttribute(ITEM_ATTRIBUTE_DURATION) return vx end return 0 end function loot_attrToVal(item, attr) local id = ItemType(item:getId()) local v = { [ITEM_ATTRIBUTE_ATTACK] = id:getAttack(), [ITEM_ATTRIBUTE_DEFENSE] = id:getDefense(), [ITEM_ATTRIBUTE_EXTRADEFENSE] = id:getExtraDefense(), [ITEM_ATTRIBUTE_ARMOR] = id:getArmor(), [ITEM_ATTRIBUTE_HITCHANCE] = id:getHitChance(), [ITEM_ATTRIBUTE_SHOOTRANGE] = id:getShootRange(), [ITEM_ATTRIBUTE_CHARGES] = id:getCharges(), [ITEM_ATTRIBUTE_DURATION] = stat_getItemDuration(item), -- not available in 1.1 -- [ITEM_ATTRIBUTE_ATTACKSPEED] = item:getAttackSpeed(), -- [ITEM_ATTRIBUTE_EXTRAATTACK] = item:getExtraAttack(), } return v[attr] end function assign_loot_Stat(c) local rares = 0 local h = c:getItemHoldingCount() if h > 0 then for i = 1, h do local available_stats = {} local it_u = c:getItem(i - 1) local it_id = ItemType(it_u:getId()) if it_u:isContainer() then local crares = assign_loot_Stat(it_u) rares = rares + crares else if not it_id:isStackable() then local wp = it_id:getWeaponType() if wp > 0 then if wp == WEAPON_SHIELD then -- type shield table.insert(available_stats, stats[2]) elseif wp == WEAPON_DISTANCE then -- type bow table.insert(available_stats, stats[1]) table.insert(available_stats, stats[5]) table.insert(available_stats, stats[6]) -- not available in 1.1 -- table.insert(available_stats, stats[9]) elseif wp == WEAPON_WAND then -- type wand table.insert(available_stats, stats[6]) -- not available in 1.1 -- table.insert(available_stats, stats[9]) elseif isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, wp) then -- melee weapon if it_id:getAttack() > 0 then table.insert(available_stats, stats[1]) end if it_id:getDefense() > 0 then table.insert(available_stats, stats[2]) end if it_id:getExtraDefense() ~= 0 then table.insert(available_stats, stats[3]) end -- not available in 1.1 -- table.insert(available_stats, stats[10]) end else -- armors, amulets, runes and rings if it_id:getArmor() > 0 then table.insert(available_stats, stats[4]) end if it_id:getCharges() > 0 then table.insert(available_stats, stats[7]) end local eq_id = it_id:getTransformEquipId() if eq_id > 0 then table.insert(available_stats, stats[8]) end end end end if #available_stats > 0 then -- skips it all if it's empty local tier = math.random(1, #tiers) if #tiers[tier].chance > 0 then local statsStored = 0 local stats_used = {} for stat = 1, #tiers[tier].chance do if #available_stats > 0 then -- stops if no more stats available if stat - 1 == statsStored then -- checks when it's time to stop adding stats if math.random(1, 100000) <= tiers[tier].chance[stat] then statsStored = statsStored + 1 local selected_stat = math.random(1, #available_stats) table.insert(stats_used, available_stats[selected_stat]) table.remove(available_stats, selected_stat) end end end end if #stats_used > 0 then rares = rares + 1 local stat_desc = {} for stat = 1, #stats_used do local v = math.random( stats_used[stat][2].percent[1], stats_used[stat][2].percent[2] ) + math.random( tiers[tier].extra[1], tiers[tier].extra[2] ) local basestat = loot_attrToVal(it_u, stats_used[stat][1]) it_u:setAttribute(stats_used[stat][1], basestat + math.abs(basestat * v / 100)) table.insert(stat_desc, '[' .. stats_used[stat][2].name .. ': +' .. v .. '%]') end if tiers[tier].showattr then for stat = 1, #stats_used do it_u:setAttribute(ITEM_ATTRIBUTE_NAME, "[" .. stats_used[stat][2].prefix .. "]" .. it_u:getAttribute(ITEM_ATTRIBUTE_NAME)) end it_u:setAttribute(ITEM_ATTRIBUTE_NAME, it_u:getAttribute(ITEM_ATTRIBUTE_NAME) .. " " .. it_id:getName()) else it_u:setAttribute(ITEM_ATTRIBUTE_NAME, tiers[tier].prefix .. " " .. it_id:getName()) end it_u:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, table.concat(stat_desc, "\n")) end end end end end return rares end function find_loot_Container(pos) local rares = 0 local c = Tile(pos):getTopDownItem() if c ~= nil then if c:isContainer() then rares = rares + assign_loot_Stat(c) if rares > 0 then if rare_popup then local spectators = Game.getSpectators(pos, false, true, 7, 7, 5, 5) for i = 1, #spectators do spectators[i]:say(rare_text, TALKTYPE_MONSTER_SAY, false, spectators[i], pos) end end if rare_effect then pos:sendMagicEffect(rare_effect_id) end end return true end end end function onKill(player, target, lastHit) if (not isSummon(target)) then addEvent(find_loot_Container, 2, target:getPosition()) end return true end function onLogin(player) player:registerEvent("randomstats_loot") return true end Créditos : zbisu
  6. Tibia Server Mapa Global Eae pessoal, venho trazer a vocês um servidor de Tibia com mapa igualzissimo ao do Tibia Original. Com Rookgard e muito mais, claro não fui eu quem fiz este servidor magnifico. Mais venho traze-lo para vocês fazerem dele sua base e ter um servidor muito melhor de Tibia. Como nós sabemos nenhum servidor vem sem bugs, então é issu vo postar algumas imagems e espero que gostem. Muitas coisas ainda vocês terão de configurar como onde o player ínicial irá nascer e etc.. Este servidor estava sendo utilizado com site então você terá de fazer suas auterações. Cidades Newbie Island (Rookgaard) + Island of Destiny Ankrahmun Ab'Dendriel Carlin Darashia Edron Yalahar Kazordoon Liberty Bay Port Hope Svargrond Thais Venore Farmine Zao Cormaya Algumas imagems: Como eu ja disse este servidor não foi eu em que fui, mais venho pelo o menos trazer a vocês. Créditos Dener Diegoli Team e ao Membro Shekys do xtibia por contribuições enorme no projeto. Kurobisu (Por Trazer aqui pro Xtibia) Downloads OTServer Completo: >>( Kurobisu Download Otserv )<< Download Client Normal de Tibia 8.6: >>( Kurobisu Download Client )<< Download do SqliteStudio para quem for usar via account manager: >>(Kurobisu Download SqliteStudio)<< O 4Shared ja tem seu proprio ( Scanner ) então pelo visto não precisa. Estou também abrindo este tópico para caso alguém tenha alguma dúvida ou ache algum bug possa reporta-lo para mim, e eu concerteza tentarei ajuda-lo. Então como muitos sabem o tópico deve ter regras, e aqui não será diferente. Regras Poste suas dúvida aqui caso tenha alguma, caso acho algum bug poste aqui também. Tentarei ajudar o maximo possivel. Gosto do tópico? Lhe ajudei?Rep+ Não ajudei? Tentarei melhorar
  7. Me Ajudem Pfv to tentando colocar um systema de invasao no meu otserve mais ta dando esse erro ja tentei consertar mais nao conseguir me ajudem pfv
  8. Alissow OTs 4.11! Esta versão 4.11 foi meio apressada, só adicionamos as features novas do 8.6. Aproveitem. Créditos: Alissow Comedinha Luis Nirk TFS Team Viniply Xedegux Sobre o OT/Mapa: Principais quests: -Annihilator -Inquisition Quest -Pits of inferno -Demon Oak -Solar axe quest -HOTA -MPA quest -The Challenger Monstros: -Total monstros: 10292 -Total spawn: 5587+ Cidades: -12 Cidades -200 Houses+- Raids/Invasões: -Rat -Orshabaal -Ghazbaran -Giant spider/The old window -Ferumbras -Morgaroth Spells: -Magias editadas para balanceamento das vocações Changelog Atualização [3.4 BETA]: - Removido áreas não usadas no mapa, diminuindo o tamanho em MBs - Adicionado Anti Magebomb System - Corrigido bugs no npc addon - Adicionado sistema onde os npcs falam sozinhos (Igual como foi adicionado no global). First ;] - Adicionado Elf village em Venonh ( bem parecida com a do global ;]) - Potions desaparecem quando usadas - Corrigido sistema de Up - Corrigido sistema de Monster Counter - Nova dragon lair em Mirand Theraan (Subsolo) - Adicionado porta de level, que protege leveis baixos acessarem os demons da cidade de Flam - Ampliado deserto da cidade de Mirand Theraan - Adicionado Ilha de Goroma - Adicionado Forbidden islands - Ampliado floresta da cidade de alfon e colocado área de macacos parecida com Banuta. - Ligação de alfon com Mirand Theraan - Corrigido bugs reportados nas portas das casas - Corrigido posição dos buracos e escadas - Adicionado beds em todas as casas - Corrigido bugs em casas de yalahar - Adicionado Blue legs quest ( Koshei The Deathless global) - Corrigidas quase todas as areas de Yalahar - Teleports em Yalahar substituidos por NPCs de teleport do global - Corrigido pequenos erros no npc Capitao Coruja, e adicionado viagem à goroma - diminuido ataque do Eye of the seven - Ice rapier agora quebra - Corrigido npc Banker - Adicionado quase todos os items 8.5 - Adicionado medusa - Adicionado Todos os outfits novos - Corrigido NPC Banker (que dava dinheiro) Script By Ta4e - Corrigido Annihilator Quest - Adicionado Notice System - Adicionado novo distro, compilado por Comedinha Atualização nº 2 [3.4]: Otserv atualizado... Corrigido debugs frequentes Corrigido debugs na magia exevo pan Corrigido bugs nos npcs Roy e Firewalker Adicionados mais novos items 8.5, agora temos 90% dos items novos... Atualização 3.5 [06/08/2009]: - Cidade principal (dorion) totalmente reformada - corrigido blue legs quest - Corrigido alavancas de compra de potions - Adicionado alavancas de compra de runas - Corrigido npc Bank - Adicionado NPC King Arthas, que vende promotion - Adicionado npc Rashid, que vende items. - Arrumado Wild Growth rune - Arrumado Utani Hur - Magias reajustadas - Novo estilo de server save - Ilha de mystic reformulada (by Nirk) - Adicionado nova magia para knights "Exkordium". - Adicionado nova magia para mages (promoted) "Exura Seil". - Adicionado nova magia para mages (promoted) "Exevo Gran Frigo". (arrumar -> sem exhausted nem gasta mana) - Adicionados novos monstros. - Adicionado quest challenge (lvl 250) - Corrigido bug do Dead Cyclops - Bug aol Arrumado - Poi Modificada - Corrigido teleports ghouls yalahar - Modificada demon helmet quest, assim como o premio da quest - Corrigido nome do Hallowed axe - Corrigido bug das houses - Corrigido bug dos items andaveis Atualização Patch 3.5.1 [07/08/2009]: - Corrigido erro na inicialização do Ot - Bug das potions corrigido - Bug do aol corrigido (pelomenos pra mim) - Bug dos outfits corrigido - Corrigido erros nas escadas na ilha PvP - O monstro The Fastest Turtle agora não morre, se tornando um monstro apenas para atrapalhar - Retirada suposta quest dos 3 hellhounds e 1 minishabaal - Adicionado teleport de retorno na Ferumbras Tower - Corrigido posições da raid de The old widow - Corrigido bug das escadas nas minas de demons - Corrigido alguns bugs vistos no mapa Atualização 3.6 [10/08/2009]: - Arrumado bugs criticos - Arrumado comando !promote/!demote - Atualizado Items.xml - Bug das Beds arrumado - Modificações na cidade, como, nature e caves - Nova sala de treino - Adicionado comando !highscores Atualização 3.7! Beta [18/12/2009]: - Guildhall support (Elf) - Nova deathlist(Elf, OpenTibia SVN) - Frags funcionando (Elf) - Atualizado monstros e items (slawkens, KaczooH, Elf) - Novas talkactions: /commands, /wp, /storage, /config, /promote & /demote. (slawkens) - Novas funções lua - Novos creatureevents (slawkens, Elf) - Novos configuráveis (Elf, slawkens) - Modificado ataque de monstros existentes (especialmente outfits e velocidade) (Elf) - Monstros reorganizados & atualizados (Nem todos) (slawkens) - Melhorado sistema de banimentos (Elf) - Reescrita janela de Rule Violation (Elf) - Arrumado Stamina (Elf, OpenTibia SVN) - Casas agora são salvas nas modificações do dono (Elf) - Escadas de yalahar funcionando perfeitamente (Elf, Talaturen) - Sistema de nado & waterball completo (slawkens) - Monstros invisiveis não são mais mandandos ao client (anti bot) (OpenTibia SVN) - Anti-dash (OpenTibia SVN) - Sistema de leilão de casas, possibilidade de usar site para vender casas (house_actions table) (OpenTibia SVN, Elf) - Salvando bot actions para /logs/bots por cada player. Por exemplo, bot pode enviar mensagem com mais de 255 caracteres (slawkens) - Novos raid events- item spawning & disappearing and more (Elf) - Modificações no NPC system (Elf) - NPCs OutfitModule (Elf) - Completo 8.53 support, com wars (Elf) - Completo 8.54 support (Elf) - Arrumado NPC voices (Elf) - Players serão informados quando o Gamemaster logar ou ficar invisivel (slawkens) - Arrumado Player Deaths (Elf, slawkens) - Arrumado Abuso de PZ (slawkens) - Portas agora não ajudam players a entrar em PZ (slawkens) - Magic level formula (OpenTibia SVN, KaczooH) - Memory leaks (Elf) - Queries optimization (Talaturen) - Janelas podem ser abertas do lado de fora da casa- agora apenas GMs podem fazer isso (slawkens) - arrumado Efeitos para o Ghost (GM)- configuravel (slawkens) - Corrigido >> Ghost debugging players (OpenTibia SVN, Elf) - Corrigido erro na promotion (Elf) - Corrigido vários erros no console. (slawkens) - Corrigido Spam de magias (Elf) - Corrigido stamina premium (Elf) - Corrigido Clean (Elf) - Corrigido vários outfits (Elf) - Corrigido Ghost (Elf) - Todas as correções no OpenTibia SVN (Open Tibia SVN, Elf) - Corrigido Todos os crashes possiveis (Elf) - Npcs Corrigidos (Comedinha) - Distro Reformulado (comedinha) - Bugs de reports arrumados (Comedinha) - Novos outfits (Alissow) - Actions Arrumadas (Comedinha) - Libs trocadas (Comedinha) - Talkactions bugadas arrumadas (Comedinha) - Reforma na área Sul da cidade Dorion (Alissow) - Adicionado monstros 8.54 (Alissow) - Corrigido bug das potions infinitas (Alissow) Atualização 3.7 Patch 1 [27/12/2009]: - Rampa na frente da loja de foods retirada (Alissow) - Arrumado bugs de mapa em anknor (Alissow) - Bug na Lib dos npcs corrigido (Alissow) - Bug do acc manager arrumado! (Alissow) - Magias "Exkordium" e "Ice Storm" arrumadas (Alissow) - Monstros 8.54 funcionando (Alissow) - 2º Addon Yalaharian arrumado (Alissow) - Addons Warmaster adicionados no NPC Addoner (Alissow) - Pequenas modificações na cidade principal, Dorion, para melhora da jogabilidade (Alissow) - Comando /Deathlist retirado (Alissow) - Magic Wall Rune arrumada (Alissow) - Quest Annihilator arrumada (Alissow) - "Your depot contain x items" Arrumado (Alissow) - Addons reorganizados, mais facil aggora (Alissow) - Tempo de Red skull e Black skull reduzidos para 24 e 42 horas (Alissow) - Reduzida porcentagem de morte (Alissow) - Acrescentado chance de critical hits (Alissow) - ShowHealingDamage Adicionado (Alissow) - Várias partes do mapa remapeadas (Alissow) - NPCs para recarga de Soft boots & Firewalker boots arrumados [Não testado] (Alissow) - Comando !frags arrumado! (Alissow) - Agora é possivel fazer addons sem precisar do comando !buypremium (Alissow) Atualização 3.8 [17/01/2010]: - Arrumado bug nas escadas do Dlair (Alissow) - Todos os bugs nos NPCs arrumados (Comedinha) - Novas talkactions [a pedidos] (Comedinha) - Deathlist arrumada (Comedinha) - Novo Distro (Comedinha) - MySQL Atualizada (Comedinha) - Firewarker boots não é mais gasta quando não está usando (Comedinha) - Problemas com items no Rashid arrumados (Alissow, Comedinha, Comunidade) - O NPC Banker foi corrigido, mas achei mais seguro retira-lo, visto que ninguem usava e poderia causar outro tipo de bug - Ilha (Sim aqui é uma ilha) de Zao adicionada (Alissow, Barker) - Monstros 8.54 aperfeiçoados (Alissow, Markithu, Zkum) - Reduzido danos da magia Exkordium (Alissow) - Os npcs Dark Rodo e Rachel vendem Blank Runes (Alissow) - Magias que não hitavam anteriormente foram arrumadas (Alissow) - Comando !buypremium arrumado (Alissow) - Arena PVM - Mais conhecida como Arena Svargrond - FUNCIONANDO!!! (Alissow) - Magia LightChain Retirada (Alissow) - Adicionado um sisteminha legal no templo (Alissow) - NPC Rashid retirado (Alissow) Atualização 3.8 Minor Patch 1 [17/01/2010]: - Comando Deathlist retirado novamente, fizemos testes equivocados. Se você é uma das 16 pessoas que baixou a versão anterior (3.8) não precisa baixar esta, basta retirar o comando !deathlist e /deathlist do seu Talkactions.xml, Os comandos causam quedas no servidor. Atualização 3.9 [15/02/2010]: - Cidade principal (Dorion) reformada, novo templo, novo depot, novo porto, novos npcs :] (Alissow) - Adicionado Reputation System (Comedinha, Cybermaster) - Adicionado !bless system (Comedinha) - /info melhorado (Comedinha) - Jail System (Comedinha) - Bug chatinho nos tiles pretos arrumado. - Magic Wall Funcionando! (Alissow) - Agora você pode fazer bolos e pães :] (Comedinha, Jean, Ojani) - Adicionado sistema de casamento (Comedinha, ScorpiOOn93, Alissow) - Loot The Fastest Turtle diminuido (Alissow) - Loot e experiencia do Feromous mais baixo (Alissow) - Sistema de parceis para Dorion funcionando (Alissow) - Guildwar System (Comedinha) - Anti MageBomb System (Comedinha, Huggen) - Adicionado Anti Nuker - Esse funciona! (Comedinha) - Adicionado Map Marks, para os players novos (Alissow, Comedinha) Atualização 4.0 [15/02/2010]: - Cidade Mountain totalmente reformada (Alissow) - Montanha de Goblins de Dorion reformada (Alissow) - Demonic Castle de Dorion reformado (Alissow) - Cidade de Venonh modificada (Luis) - Distro atualizado, funcionando nos clients 8.54, 8.55, 8.56 e 8.57 (Comedinha) - Comando !bless retirado (Alissow) - O NPC Ermes não vende mais items de decoração (Alissow) - Arrumado bugs na Ferumbras Tower (Alissow) - O comando !AFK on agora mantem o player parado (Comedinha) - Arrumado bugs nas escadas da área de DeathFans (Alissow) - Comando !Deathlist funcionando! (Alissow, Doidinmapper, GT Thionix) - Sistema de REP atualizado (Comedinha) - Sistema de Polls (Comedinha) - Banco por comandos (Comedinha) - Novos comandos de addon e accounts (Comedinha) - Sistema de futebol completo! (Comedinha) - Sistema Antibot (Comedinha) - Magia Spared Hur modificada (Alissow, Orzeleagle) - Adicionado sistema de montaria (Alissow, unknown666) - Adicionado Canivetes (Alissow, Siramix) - Nova hunt Subaquatica (Luis) Atualização 4.11! [11/07/2010]: - Versão 8.6, todos os items, outfits e monstros novos (Comedinhasss, Fireelement) - Adicionados os novos monstros 8.6 (Alissow) - Bug das potions arrumado (Comedinha, Matheusmkalo, Gabriel linhares, Fireelement) - Erros das runas arrumado (Comedinha, Gabriel linhares, Matheusmkalo, fireelement) Download Servidor: 4shared Tamanho: 17,416 KB Download: http://www.4shared.com/file/ez8XKrju/860_Alissow_Ots_411.html Link protegido: http://lix.in/-8d4bc0 Scan VirusTotal: http://www.virustotal.com/pt/analisis/983abb574dbb957a75aa1fd29eb804065f775e6a0c43216aa277686d32bce22a-1263702373 Atenção - Acc do God: god/god - LEIA o tópico antes de postar qualquer coisa ou duvida - Reportem se houver algum bug - A database fica na pasta schemas+Database - Proibido o uso do nosso distro sem o nosso consenso, obrigado. Andei percebendo que há muitos mapas feitos por mim em outros servidores postados aqui no xtibia, eu não sei se vocês sabem, mas isso é PLÁGIO. Eu não sou uma pessoa egoista, tudo que eu posto aqui no XTibia é para ser compartilhado, mas desde que mantenham os devidos créditos. Será denunciado qualquer tipo de "roubo" sem minha autorização para beneficio próprio. Eu sei que vocês não se importam muito com isso, eu também não deveria me importar, mas é o tempo e a dedicação de outra pessoa que vocês estão roubando, então peço gentilmente aos que tem conhecimento desses mapas, que me apontem. Não tem graça trabalhar horas e horas e ser roubado em dois minutos.
  9. Ae galera do xtibia vo postar para voces o bronson server nao esta completo mais vo posta aki mesmo asim tem algumas hunts /ir ja entegrado espero que gostem --------- Map e Proprio --------- Boss e exclusivo do bronson server Hunt's bem elaboradas para nao tornar mt facil nem muito dificil --------- Atualizaçoes --------- Sempre que tiver tempo vou continuar atualizando corrigindo bugs E completanto o Ot server ate que fique 100% Vou postar alguns print's Mapa 70% full Hunt de cyc City principal Boss the necromancer Download Scan nao consegui fazer o scan entao vai o print mesmo' rs Creditos: Mixsoft Criador do map "nao sei o nome" Samurela Por posta o map todos aqueles que peguei scripts E a mim Gosto RP+
  10. Exemplo de uso: !bank balance - mostra quanto de dinheiro você tem !bank deposit 100 - deposita 100 gold !bank withdraw 50 - retira 50 gold !bank transfer 30 God - transfere 30 gold para o player God !bank deposit all - deposita todo seu dinheiro !bank withdraw all - retira todo o seu dinheiro Créditos: slawkens Vá na pasta mods e crie um arquivo chamado command-bank.xml e coloque isso nele: <?xml version="1.0" encoding="UTF-8"?> <mod name="command-bank" version="1.0" author="slawkens" contact="slawkens@gmail.com" enabled="yes"> <config name="command-bank-config"><![CDATA[ transferDisabledVocations = {0} -- disable non vocation characters ]]></config> <talkaction words="!bank" event="script"><![CDATA[ domodlib('command-bank-config') local config = { transferDisabledVocations = transferDisabledVocations } local function validAmount(amount) return (isNumber(amount) and amount > 0 and amount < 4294967296) end local function getAmount(amount, cid, f) return (amount == 'all' and f(cid) or tonumber(amount)) end local function getPlayerVocationByName(name) local result = db.getResult("SELECT `vocation` FROM `players` WHERE `name` = " .. db.escapeString(name)) if(result:getID() == -1) then return false end local value = result:getDataString("vocation") result:free() return value end function onSay(cid, words, param, channel) if(param == '') then doPlayerPopupFYI(cid, "Bank management manual.\n\n" .. "!bank balance - show your account balance\n" .. "!bank deposit 100 - deposit 100 gold\n" .. "!bank withdraw 50 - withdraw 50 gold\n" .. "!bank transfer 30 God - transfer 30 gold to player God\n\n" .. "Tip: you can also use 'all' as amount.\n" .. "!bank deposit all - deposit all gold you have\n" .. "!bank withdraw all - withdraw all gold from your bank account" ) return true end local t = string.explode(param, " ", 2) local command = t[1]:lower() if(command == 'balance') then doPlayerSendCancel(cid, "Your account balance is " .. getPlayerBalance(cid) .. " gold.") elseif(command == 'deposit') then if(not t[2]) then doPlayerSendCancel(cid, "Amount is required.") return true end local amount = getAmount(t[2], cid, getPlayerMoney) if(validAmount(amount) and getPlayerMoney(cid) >= amount and doPlayerDepositMoney(cid, amount)) then doPlayerSendCancel(cid, amount .. " gold has been deposited.") else doPlayerSendCancel(cid, "Not enough money to deposit.") end elseif(command == 'withdraw') then if(not t[2]) then doPlayerSendCancel(cid, "Amount is required.") return true end local amount = getAmount(t[2], cid, getPlayerBalance) if(validAmount(amount) and getPlayerBalance(cid) >= amount and doPlayerWithdrawMoney(cid, amount)) then doPlayerSendCancel(cid, amount .. " gold has been withdrawn.") else doPlayerSendCancel(cid, "Not enough money to withdraw.") end elseif(command == 'transfer') then if(not t[2]) then doPlayerSendCancel(cid, "Amount is required.") return true end if(not t[3]) then doPlayerSendCancel(cid, "Player name to transfer is required.") return true end local amount, target = tonumber(t[2]), t[3] if(getPlayerGUID(cid) == getPlayerGUIDByName(target)) then doPlayerSendCancel(cid, "You cannot transfer money to yourself.") elseif(isInArray(config.transferDisabledVocations, getPlayerVocation(cid))) then doPlayerSendCancel(cid, "Your vocation cannot transfer money.") elseif(not validAmount(amount) or getPlayerBalance(cid) < amount) then doPlayerSendCancel(cid, "Not enough money to transfer.") else local targetVocation = getPlayerVocationByName(target) if(not playerExists(target) or not targetVocation or isInArray(config.transferDisabledVocations, targetVocation) or not doPlayerTransferMoneyTo(cid, target, amount)) then doPlayerSendCancel(cid, "This player does not exist on this world or have no vocation.") else doPlayerSendCancel(cid, "You have transferred " .. amount .. " gold to \"" .. target .."\".") end end else doPlayerSendCancel(cid, "Invalid command usage. Use '!bank' to view manual.") end return true end ]]></talkaction> </mod>
  11. Créditos: EddyHavoc e Slawkens. Objetivo Esse script mostra quem deu look em você. Ao player dar look em você, aparecerá uma mensagem avisando. Tutorial Acesse a pasta MODS e crie um arquivo chamado lookingatyou.xml, coloque isso dentro do arquivo: <?xml version="1.0" encoding="UTF-8"?> <mod name="peeper" version="1.0" author="" contact="" enabled="yes"> <config name="peeper-config"><![CDATA[ -- anonymously or display peeper name? anonymous = "no" -- ignore players with access (will not show message when they look on someone) hiddenAccess = 3 -- message color (type) messageType = MESSAGE_STATUS_DEFAULT ]]></config> <event type="look" name="peeper-event" event="script"><![CDATA[ domodlib('peeper-config') local config = { anonymous = getBooleanFromString(anonymous), hiddenAccess = hiddenAccess, messageType = messageType } function onLook(cid, thing, position, lookDistance) if(isPlayer(thing.uid) and getPlayerAccess(cid) < config.hiddenAccess) then doPlayerSendTextMessage(thing.uid, config.messageType, (config.anonymous and "Someone" or getPlayerName(cid)) .. " is looking at you.") end return true end ]]></event> <event type="login" name="peeper-login" event="buffer"><![CDATA[ registerCreatureEvent(cid, "peeper-event") _result = true ]]></event> </mod>
  12. Como funciona? O meu código faz o seguinte, ele registra a quantidade de players online em tal hora no dia (configurável) em um bloco de notas.. Para que eu vou usar isso? Ai vai da sua criatividade, eu mesmo uso para identificar quais são os horários de picos e também para saber se tem um crescimento de players ao passar dos dias. Aqui vai um exemplo de como ele registra os players: http://prntscr.com/2vb4zt Vamos ao script: Em globalevents.xml coloque essa tag: <globalevent name="Monitor_Online" interval="60000" event="script" value="monitoronline.lua"/> Em interval se o seu tfs não for 0.4, coloque 60 Agora na pasta scripts crie um arquivo lua chamado monitoronline.lua e adicione isso dentro: function onThink(interval, lastExecution) local file = io.open("./monitoronline.txt", "a") local hora = {"7:30","11:30","13:30","15:30","17:30","20:30","22:30"} if table.find(hora, os.date("%H:%M")) then file:write("\n Players Online: ".. #getPlayersOnline() .." \n ["..os.date("%x").."] ["..tostring(os.date("%X")):sub(1, 5).."]") file:close() end return true end E pronto, seu sistema já vai estar funcionando, o arquivo de texto aparece na pasta do seu executável.. Eu sincronizei ele com minha página web, se quiserem o código em PHP me mande PM. http://jogar.snowotserv.com/monitoramento.php Créditos: Keilost - 100%
  13. Eae pessoal blz?? eu peguei o ditto system postado pelo Wend e feito pelo Gabrielbsales(Featzen), então só mudei algumas tags e modifiquei um pouco e dei umas melhorias, bem pequenas só que vão ajudar, creio eu Então vamos parar de blábláblá em começar o tutorial! Primeiramente vá em Data/actions/scripts/order.lua e Procure por: -------- TRANSFORM ---------- Apague tudo aqui dentro, até o: -------- LIGHT ------------ Ai dentro ditto coloque isto: Pronto Agora esta transformando e copiando as habilidades e tudo! Agora Para o ditto e shiny ditto reverter a transformação . Crie um arquivo chamado dittorevert.lua em data/talkactions e coloque isto dentro: e em talkactions.xml coloque isto: <talkaction words="!revert" event="script" value="dittorevert.lua"/> Pronto sistema 100% só que ele está com nome, poder, força tudo igual! para resolver isto vamos em lib/level system.lua abra e procure por isto: e substitua por isto: Pronto Agora o Shiny ditto ta com 75% de força do poke transformado e o ditto com 50% de força do pokemon transformado Agora para identificar que é um ditto/shiny ditto vamos em creaturescript/scripts/look.lua, abra e procure por: table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n") substitua por: if getItemAttribute(thing.uid, "ehditto") == 1 then table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.." (Ditto).\n") elseif getItemAttribute(thing.uid, "ehshinyditto") == 1 then table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.." (Shiny Ditto).\n") else table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n") end Em actions/scripts/goback.lua procure por: e apague! em lib/Some Functions.lua procure por: e substitua por: function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel... if not isCreature(cid) then return true end doRemoveCondition(cid, CONDITION_INVISIBLE) doRemoveCondition(cid, CONDITION_OUTFIT) doCreatureSetHideHealth(cid, false) end Ainda em Some functions procure por: if getCreatureName(pokemon) == "Ditto" then if isTransformed(pokemon) then local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin")) doItemSetAttribute(pokeball.uid, "transLeft", left) end end e apague e para finalizar procure por: if getCreatureName(pokemon) == "Shiny Ditto" then if isTransformed(pokemon) then local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin")) doItemSetAttribute(pokeball.uid, "transLeft", left) end end e Apague!!!!!!! Pronto Agora sim Sistema 100% Esta Copiando Habilidades, força diminuida do pokemon normal e identificação do Ditto e Shiny Ditto! Acredito que vai ajudar a muitos! Créditos Gabrielbsales Por criar o Script Wend por fazer um tutorial mais completo Zet0N0Murmurou (Summer Slyer) por adaptar e melhorar o script para o Shiny Ditto! UP
  14. Colocando pokebar (a barrinha que troca de pokemon) no seu pda sem level. Se quiser que eu faça com pda com level comentem ai. PDA SEM LEVEL 1. Vá na pasta data\actions\scripts\goback.lua e embaixo da parte: function onUse(cid, item, frompos, item2, topos)coloque: sendAllPokemonsBarPoke(cid)2. Vá na pasta data\lib\catch system.luaProcure por: setPlayerStorageValue(cid, 854788, 'done') ende embaixo coloque: sendAllPokemonsBarPoke(cid)3. Vá na pasta data\lib\cooldown bar.lua Procure por: endreturn retende embaixo coloque: 4. Vá na pasta data\lib\some functions.lua Troque por esse: 5. Vá na pasta data\talkactions\talkactions.xml Coloque essa tag: <talkaction words="/poke" case-sensitive="no" event="script" value="poke.lua"/>depois crie um data\talkactions\scripts\poke.lua Coloque o game_barpoke dentro da pasta modules. Download: www.mediafire.com/download/8bavucwof24bkxv/game_barpoke.rar Créditos: Soulviling Caotic
  15. hsz

    [Systems] Bomberman

    Ajuda a montar map ?[/sup] talkactions.xml <talkaction words="z;Z" event="script" value="bomb.lua"/> BOMB.lua function getPlayersInRange(position, radiusx, radiusy) local creaturesList = {} for x = -radiusx, radiusx do for y = -radiusy, radiusy do if not (x == 0 and y == 0) then local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z}) if creature.type == 1 then table.insert(creaturesList, creature.uid) end end end end local creature = getTopCreature(position) if creature.type == 1 then if not(table.find(creaturesList, creature.uid)) then table.insert(creaturesList, creature.uid) end end return creaturesList end function isPositionInArray(haystack, needle) for i = 1, #haystack do if haystack[i].x == needle.x and haystack[i].y == needle.y and haystack[i].z == needle.z then return true end end return false end local t = { from = {x=490, y=495, z=9}, to = {x=504, y=505, z=9}, storage = { placed = 10001, max = 10002, radius = 10003 }, delay = 3000, bombID = 10570, effect = CONST_ME_FIREAREA, blockID = 9468, text = "BOOM!", temple = {x=498, y=541, z=9}, exceptions = { {x=490, y=495, z=9}, {x=491, y=495, z=9}, {x=490, y=496, z=9}, {x=503, y=495, z=9}, {x=504, y=495, z=9}, {x=504, y=496, z=9}, {x=490, y=505, z=9}, {x=491, y=505, z=9}, {x=490, y=504, z=9}, {x=503, y=505, z=9}, {x=504, y=505, z=9}, {x=504, y=504, z=9} } } function reset() local dummy = doCreateItem(10570, 1, {x=486,y=498,z=9}) for x = t.from.x, t.to.x do for y = t.from.y, t.to.y do local pos = {x=x,y=y,z=t.from.z} local i1, i2, i3 = getTileItemById(pos, 8304).uid, getTileItemById(pos, 8306).uid, getTileItemById(pos, 8310).uid if i1 > 0 then doRemoveItem(i1) end if i2 > 0 then doRemoveItem(i2) end if i3 > 0 then doRemoveItem(i3) end if queryTileAddThing(dummy, pos, 4) == RETURNVALUE_NOERROR and not isPositionInArray(t.exceptions, pos) then doCreateItem(t.blockID, 1, pos) end end end doRemoveItem(dummy) end local function boom(pos, cid) local v = getTileItemById(pos, t.bombID).uid if isPlayer(cid) and isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) - 1) doCreatureSay(cid, t.text, TALKTYPE_ORANGE_2, false, nil, pos) doSendMagicEffect(pos, t.effect) local c = getTopCreature(pos).uid if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then doSendMagicEffect(pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(c), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING) doPlayerAddLevel(a[1], 1) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() end else local b = getTileItemById(pos, t.blockID).uid if b > 0 then doSendMagicEffect(pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end end end local N, E, W, S, l = 1, 1, 1, 1, getPlayerStorageValue(cid, t.storage.radius) function loopDir(dir) local _pos = {x=pos.x+(dir=="E" and E or dir=="W" and -W or 0), y=pos.y+(dir=="N" and -N or dir=="S" and S or 0), z=pos.z} if queryTileAddThing(v, _pos, 4) == RETURNVALUE_NOERROR or getTileItemById(_pos, t.blockID).uid > 0 then doSendMagicEffect(_pos, t.effect) local c = getTopCreature(_pos).uid if isPlayer(c) and isInRange(getThingPos(c), t.from, t.to) then doSendMagicEffect(_pos, CONST_ME_GIFT_WRAPS) doTeleportThing(c, t.temple) doSendMagicEffect(t.temple, CONST_ME_MORTAREA) local n1, n2 = getPlayerName(c), getPlayerName(cid) doBroadcastMessage(n1==n2 and n1 .. " killed " .. (getPlayerSex(c) == 0 and "her" or "him") .. "self!" or n1 .. " was killed by " .. n2 .. "!", MESSAGE_STATUS_WARNING) local a = getPlayersInRange({x=497, y=500, z=9}, 7, 5) if #a < 2 then doBroadcastMessage(getPlayerName(a[1]) .. " has won the match!", MESSAGE_STATUS_WARNING) doPlayerAddLevel(a[1], 1) doTeleportThing(a[1], t.temple) doSendMagicEffect(t.temple, CONST_ME_FIREWORK_RED) reset() reset() return "endgame" end else local b = getTileItemById(_pos, t.blockID).uid if b > 0 then doSendMagicEffect(_pos, CONST_ME_BLOCKHIT) doRemoveItem(b) local r = math.random(10) if r < 4 then doCreateItem(r==1 and 8304 or r==2 and 8306 or r==3 and 8310, 1, _pos) end return false end end elseif queryTileAddThing(v, _pos, 4) == 3 then return false end return true end while N <= l do local q = loopDir("N") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else N = N + 1 end end while E <= l do local q = loopDir("E") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else E = E + 1 end end while W <= l do local q = loopDir("W") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else W = W + 1 end end while S <= l do local q = loopDir("S") if q == "endgame" then return doRemoveItem(v, 1) elseif not q then break else S = S + 1 end end end doRemoveItem(v, 1) end function onSay(cid, words, param, channel) if isInRange(getThingPos(cid), t.from, t.to) then setPlayerStorageValue(cid, t.storage.placed, math.max(getPlayerStorageValue(cid, t.storage.placed), 0)) setPlayerStorageValue(cid, t.storage.max, math.max(getPlayerStorageValue(cid, t.storage.max), 1)) setPlayerStorageValue(cid, t.storage.radius, math.max(getPlayerStorageValue(cid, t.storage.radius), 1)) if getPlayerStorageValue(cid, t.storage.placed) < getPlayerStorageValue(cid, t.storage.max) then doCreateItem(t.bombID, 1, getThingPos(cid)) addEvent(boom, t.delay, getThingPos(cid), cid) setPlayerStorageValue(cid, t.storage.placed, getPlayerStorageValue(cid, t.storage.placed) + 1) end return true end end lever.lua function getPlayersInRange(position, radiusx, radiusy) local creaturesList = {} for x = -radiusx, radiusx do for y = -radiusy, radiusy do if not (x == 0 and y == 0) then local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z}) if creature.type == 1 then table.insert(creaturesList, creature.uid) end end end end local creature = getTopCreature(position) if creature.type == 1 then if not(table.find(creaturesList, creature.uid)) then table.insert(creaturesList, creature.uid) end end return creaturesList end local t, n, storage = { {x=496, y=537, z=9}, {x=497, y=537, z=9}, {x=498, y=537, z=9}, {x=499, y=537, z=9} }, { {x=490, y=495, z=9}, {x=504, y=505, z=9}, {x=504, y=495, z=9}, {x=490, y=505, z=9} }, { placed = 10001, max = 10002, radius = 10003 } function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 1946 then return doTransformItem(item.uid, item.itemid - 1) end local v = getPlayersInRange({x=497, y=500, z=9}, 7, 5) if #v > 0 then return doPlayerSendCancel(cid, "Please wait for the current match to end.") end local players = {} for i = 1, #t do local v = getTopCreature(t[i]).uid players[i] = isPlayer(v) and v or nil end if #players < 2 then return doPlayerSendCancel(cid, "You need at least 2 players to enter.") end local first = players[1] and 1 or players[2] and 2 or players[3] and 3 or players[4] and 4 for i = 1, 4 do if players[i] then setPlayerStorageValue(players[i], storage.placed, 0) setPlayerStorageValue(players[i], storage.max, 1) setPlayerStorageValue(players[i], storage.radius, 1) doSendMagicEffect(t[i], CONST_ME_TELEPORT) doTeleportThing(players[i], n[i]) doSendMagicEffect(n[i], CONST_ME_TELEPORT) end end doTransformItem(item.uid, item.itemid + 1) return true end Items.xml <item id="2195" name="boots of haste"> <attribute key="weight" value="750" /> <attribute key="slotType" value="feet" /> <attribute key="speed" value="40" /> <attribute key="showattributes" value="1" /> <attribute key="showduration" value="1" /> <attribute key="decayTo" value="0" /> <attribute key="duration" value="30" /> </item> ... <item id="8304" name="eternal flames"> <attribute key="moveable" value="0" /> </item> ... <item id="8306" name="pure energy"> <attribute key="moveable" value="0" /> </item> ... <item id="8310" name="neutral matter"> <attribute key="moveable" value="0" /> </item> ... <item id="10570" article="a" name="war crystal"> <attribute key="moveable" value="0" /> </item> movements.xml <movevent type="StepIn" itemid="10764" event="script" value="bombtiles.lua"/> <movevent type="AddItem" itemid="10764" tileitem="1" event="script" value="bombtiles.lua"/> <movevent type="StepIn" itemid="8304" event="script" value="powerups.lua"/> <movevent type="StepIn" itemid="8306" event="script" value="powerups.lua"/> <movevent type="StepIn" itemid="8310" event="script" value="powerups.lua"/> bombtiles.lua function onStepIn(cid, item, pos, fromPos) if math.abs(pos.x - fromPos.x) == math.abs(pos.y - fromPos.y) then if item.actionid == 100 then doItemSetAttribute(item.uid, "aid", 0) else doItemSetAttribute(getTileItemById(fromPos, 10764).uid, "aid", 100) doTeleportThing(cid, fromPos, false) end end end function onAddItem(moveItem, tileItem, position, cid) if not isInArray({8304, 8306, 8310, 9468, 10570}, moveItem.itemid) then doRemoveItem(moveItem.uid) end end powerups.lua local t = { from = {x=490, y=495, z=9}, to = {x=504, y=505, z=9}, storage = { max = 10002, radius = 10003 } } function onStepIn(cid, item, pos, fromPos) if isInRange(pos, t.from, t.to) then if item.itemid == 8304 then local n = getPlayerStorageValue(cid, t.storage.max) if n < 3 then setPlayerStorageValue(cid, t.storage.max, n + 1) doRemoveItem(item.uid) doSendMagicEffect(pos, CONST_ME_FIREATTACK) end elseif item.itemid == 8306 then local n = getPlayerSlotItem(cid, CONST_SLOT_FEET) if n.itemid ~= 2195 then doPlayerAddItem(cid, 2050, 1) doPlayerAddItem(cid, 2050, 1) doPlayerAddItem(cid, 2050, 1) doDecayItem(doPlayerAddItem(cid, 2195, 1)) doPlayerRemoveItem(cid, 2050, 1) doPlayerRemoveItem(cid, 2050, 1) doPlayerRemoveItem(cid, 2050, 1) doRemoveItem(item.uid) doSendMagicEffect(pos, CONST_ME_ENERGYHIT) end elseif item.itemid == 8310 then local n = getPlayerStorageValue(cid, t.storage.radius) if n < 4 then setPlayerStorageValue(cid, t.storage.radius, n + 1) doRemoveItem(item.uid) doSendMagicEffect(pos, CONST_ME_GROUNDSHAKER) end end end end RETIRADO DE http://otland.net/f81/bomberman-73864/ AJUDA A MONTA O MAP POR FAVOR POSTE EM BAIXO O MAP COM AS COODENADAS cerTAS
  16. Olá gente é o seguinte, to usando otclient e to colocando sons nas citys do meu server, e eu queria saber como eu poderia colocar 2 tipos de sons ( Musicas ) nas mesmas coordenadas, tipo, a pessoa vai nessa tal posição " X, Y, Z " ai quando a pessoa entra nessa tal coordenada começa a tocar uma musica, e quando a pessoa sair e entrar nessa mesma coordenada começa a tocar outro tipo de musica, sendo que na mesma coordenada da 1° musica ^^ script localizada na pasta Mudules/Rcsound SOUNDS_CONFIG = { soundChannel = SoundChannels.Music, checkInterval = 500, folder = 'music/', noSound = 'No sound file for this area.', } SOUNDS = { -- PVP {fromPos = {x=936, y=1025, z=13}, toPos = {x=952, y=1043, z=13}, priority = 1, sound="Balada.ogg"}, {fromPos = {x=953, y=1016, z=13}, toPos = {x=990, y=1047, z=13}, priority = 1, sound="Pvp.ogg"}, } ---------- -- Sound local rcSoundChannel local showPosEvent local playingSound -- Design soundWindow = nil soundButton = nil function toggle() if soundButton:isOn() then soundWindow:close() soundButton:setOn(false) else soundWindow:open() soundButton:setOn(true) end end function onMiniWindowClose() soundButton:setOn(false) end function init() for i = 1, #SOUNDS do SOUNDS[i].sound = SOUNDS_CONFIG.folder .. SOUNDS[i].sound end connect(g_game, { onGameStart = onGameStart, onGameEnd = onGameEnd }) rcSoundChannel = g_sounds.getChannel(SOUNDS_CONFIG.soundChannel) -- rcSoundChannel:setGain(value/COUNDS_CONFIG.volume) soundButton = modules.client_topmenu.addRightGameToggleButton('soundButton', tr('Sound Info') .. '', '/images/audio', toggle) soundButton:setOn(true) soundWindow = g_ui.loadUI('rcsound', modules.game_interface.getRightPanel()) soundWindow:disableResize() soundWindow:setup() if(g_game.isOnline()) then onGameStart() end end function terminate() disconnect(g_game, { onGameStart = onGameStart, onGameEnd = onGameEnd }) onGameEnd() soundWindow:destroy() soundButton:destroy() end function onGameStart() stopSound() toggleSoundEvent = addEvent(toggleSound, SOUNDS_CONFIG.checkInterval) end function onGameEnd() stopSound() removeEvent(toggleSoundEvent) end function isInPos(pos, fromPos, toPos) return pos.x>=fromPos.x and pos.y>=fromPos.y and pos.z>=fromPos.z and pos.x<=toPos.x and pos.y<=toPos.y and pos.z<=toPos.z end function toggleSound() local player = g_game.getLocalPlayer() if not player then return end local pos = player:getPosition() local toPlay = nil for i = 1, #SOUNDS do if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then if(toPlay) then toPlay.priority = toPlay.priority or 0 if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then toPlay = SOUNDS[i] end else toPlay = SOUNDS[i] end end end playingSound = playingSound or {sound='', priority=0} if(toPlay~=nil and playingSound.sound~=toPlay.sound) then g_logger.info("RC Sounds: New sound area detected:") g_logger.info(" Position: {x=" .. pos.x .. ", y=" .. pos.y .. ", z=" .. pos.z .. "}") g_logger.info(" Music: " .. toPlay.sound) stopSound() playSound(toPlay.sound) playingSound = toPlay elseif(toPlay==nil) and (playingSound.sound~='') then g_logger.info("RC Sounds: New sound area detected:") g_logger.info(" Left music area.") stopSound() end toggleSoundEvent = scheduleEvent(toggleSound, SOUNDS_CONFIG.checkInterval) end function playSound(sound) rcSoundChannel:enqueue(sound, 0) setLabel(clearName(sound)) end function clearName(soundName) local explode = string.explode(soundName, "/") soundName = explode[#explode] explode = string.explode(soundName, ".ogg") soundName = '' for i = 1, #explode-1 do soundName = soundName .. explode[i] end return soundName end function stopSound() setLabel(SOUNDS_CONFIG.noSound) rcSoundChannel:stop() playingSound = nil end function setLabel(str) soundWindow:recursiveGetChildById('currentSound'):getChildById('value'):setText(str) end
  17. Olá companheiros do xTibia Venho por meio deste post pedir com que me ajudem a criar um script de boss room para um servidor OTX .2 ... Sei que é antigo e quase ninguém usa mais ... porém eu baixei um e estou editando e fiz diversas modificações e seria jogar tempo fora e tanta dedicação ... voltei a mexer com Ot's depois de 10 anos e não sabia essas diferenças ... A minha duvida é a seguinte ... eu gostaria de um script de boss room que o jogador ou os jogadores pudessem fazer esse boss 1x a cada 24hrs ao puxar a alavanca ... ! com uma mensagem escrita o seguinte caso o jogador ja tivesse feito o boss ... "Você ja participou hoje volte amanhã" basicamente é isso ... obrigado =D
  18. Gyns Poketibia ______________________ Olá,hoje irei mostrar meus NPC de gym de poketibia 1° NPC Brock Vá em Data/Npc/scripts e crie um arquivo lua com o nome de "Brock.lua" e cole isto dentro: Após ter feito isto vá em data/npc e crie um arquivo xml com o nome "Brock" e cole isto dentro: 2°Npc Mysty Vá em data/npc/scripts e crie um novo arquivo lua com o nome de "misty.lua" e cole isto dentro: Após ter feito isto vá em data/npc e crie um arquivo xml com o nome de "misty.lua" e cole isto dentro: 3°Npc Blaine Vá em data/npc/script crie um novo arquivo lua com o nome de "blaine.lua" e cole isto dentro: Após ter feito isto vá em data/npc/ e crie um arquivo xml com o nome de "Blaine.xml" e cole isto dentro 4°npc koga Vá em data/npc/scripts/ crie um novo arquivo com o nome de "Koga.lua" e cole isto dentro: Após ter feito isto vá em data/npc e crie um novo arquivo xml com o nome "koga.xml" e cole isto dentro: 5° npc Lt.Surge (Já ta ficando chato fazer aqui :X) Vá em data/npc/scripts e crie um arquivo lua com o nome de "surge.lua" e cole isto dentro: Após ter feito isto vá em data/npc e crie um arquivo xml com o nome "Surge" e cole isto dentro: 6° npc erika Vá em data/npc/scripts e crie um arquivo lua com o nome de "erika.lua" e cole isto dentro: Vá em data/npc/ e crie um arquivo com o nome... a se ja sabe cole isto dentro: 7° NPC Sabrina Vá em data/npc/scripts e crie um arquivo lua com o nome "Sabrina" e cole isto dentro: Após ter feito isto vá em data/npc e crie um arquivo xml com o nome sabrina e cole isto dentro: 8° NPC Giovanni Vá em data/npc/scripts crie o arquivo lua com o nome giovanni e cole isto dentro: Vá em data/npc e crie o seu arquivo xml com o nome de giovanni e cole isto dentro P.S:Também funcionara em um server que não tem lvl system porém irá dar um minimo erro na hora de ligar,até.
  19. JGNoya

    Exp Potion

    Alguém tem um script de exp potion funcionando em 8.60 ? Eu testei alguns aqui , mas a maioria deu erro , tipo o player reloga e acaba o bônus , coisa que não deveria acontecer , já o outro que eu testei não tem esse problema , mas quando usa , depois que acaba o tempo , diz que ainda está sob efeito e não da pra usar outra potion '-'. Esse script , mesmo relogando ele continua funcionando , mas depois que acaba o efeito , não da pra usar novamente: e esse cancela o bônus se o player reloga : Se alguém tiver um script de exp potion que funcione sem bugar ou conseguir arrumar algum desses que postei , ia me ajudar muito .
  20. Contrato alguém que saiba mexer com Site poketibia E script Pago em dinheiro Meu contato :(87)996376074
  21. PokeB (Poketibia Base 9.60) Agora OpenSource!!! O que terá: Voar, Montar, Cortar, Teleportar, Quebrar rocha, Nadar, ... Captura de Pokémons - sistema de pokebolas. Nurse Joy - que cura todos os pokémons da mochila de uma só vez. Líderes de Ginásio Evoluções (Pedras evolutivas e Nível) Treinamento Pokémon (boost machine) 151 Pokémons - será a base. Sistema de Pokedex M1 à M12 - ataques dos pokémons. entre outras coisas... Como falado será a 'base' do poketibia! Download: Server: http://www.4shared.com/zip/9FZYhupj/Server_PokeB.html Source: http://www.4shared.com/zip/C3HMIt8_/Sources_PokeB.html Cliente: http://www.4shared.com/zip/Gmhv34hv/OtClient_PokeB.html [novo] Server PokeB 1.0: http://www.4shared.com/rar/PauHbetg/Server_PokeB_10.html? [novo] Cliente PokeB 1.0: http://www.4shared.com/rar/IokY3r3J/OtClient_PokeB_10.html? Conta GOD: Login: admin senha: 123456 SourceForge: SourceForge: https://sourceforge.net/projects/pokeb/ Server poketibia que pode ajudar: Poketibia Ricardo: Server: http://www.4shared.com/rar/ygFwSXUP/Server_Pokemon_Dash_by_Ricardo.html Source: http://www.4shared.com/rar/-OMFGhHg/Sources_Pokemon_Dash_by_Ricard.html PDA: http://www.4shared.com/rar/tSmomesU/Serv_PDA_pro_forum_v_10.html Erondino: http://tibiapoketibia-erondino.weebly.com/ Utilitários: RME: (Windows) http://remeresmapeditor.com/rmedl.php?file=RME-win-2.2.msi Ot Item Editor: http://www.4shared.com/rar/6Y72VWpG/ot_item_editor_960.html Sprite Editor/ Dat Editor: Spr Editor: http://www.xtibia.com/forum/topic/202369-spr-editor-854981-versao-13/ Storms Editor: http://www.xtibia.com/forum/topic/216960-986-storms-sprite-dat-editor/ Ultimate Tibia Editor: http://www.xtibia.com/forum/topic/206196-ultimate-tibia-editor/?fromsearch=1 Dev: http://www.4shared.com/zip/Ug4cmrtA/The_Forgotten_Dev-Cpp.html Outros: SprEx(extrator de sprites): http://knoxstudio.net/jo3bingham/SprEx/SprEx.rar O que foi feito: Imagens: Embreve!!!
  22. Bom já existe um Sistema de tm no forum porem o meu é diferente. Vamos lá!! Bom Funciona assim: Cada Pokemon Pode Ter 3 TMs Adicionadas, OBS: Se O Pokemon tiver 12 magias ele pode ter 15 se voce adicionar 3 TMs nele. Como Usar O Sistema: Bom Basta Seguir o Tutorial e O Comando para Usar eu Recomendo que coloquem em Hotkeys na parte Shift+f1,Shift+f2,Shift+f3 Coloque os Seguintes Comandos tm1,tm2,tm3 OBS: a TM Nao Substitui Magia e Sim Adiciona , Por isso Vai por sequencia se voce usa a primeira tm no seu pokemon, para usar ela voce vai usar o comando tm1. se voce usa a segunda tm no seu pokemon para usar ela voce vai usar o comando tm2 mesma coisa com o tm3 Lembrando que Já possui as 50 TMs funcionando perfeitamente Vamos ao Tutorial: 1°: Crie um Arquivo Em "data/action/script" Chamado tm.lua e cole este script Dentro: Agora em Data/Action/Action.xml voce vai por a seguinte tag: <action itemid="12595-12644" event="script" value="tm.lua"/> Bom Recomendo voce por esta tag no ORDER 2°: Vá em Data/Lib/Crie um Arquivo Chamado "tm lib.lua" e cole o seguinte script dentro dele: 3°: Agora vá em data/talkaction/script/ Abra seu move1.lua e apague TUDO que estiver dentro e cole isto: 4°: Agora em Talkaction/Script/ Apague Tudo que estiver dentro do Seu "cd.lua" e cole isto dentro: 5°: Agora em Data/Talkaction/Talkaction.xml Coloque estas tags: <talkaction words="tm1" case-sensitive="no" event="script" value="move1.lua"/> <talkaction words="tm2" case-sensitive="no" event="script" value="move1.lua"/> <talkaction words="tm3" case-sensitive="no" event="script" value="move1.lua"/> 6°: o item.otb e item.xml (é recomendado baixar) Apois baixar voce vai pegar o item.xml e o item.otb e vai copiar eles e depois vai em data/item/apaga o item.otb e o item.xml e cola o item.otb e o .xml que voces baixaram. neles possui as tms adicionadas ao server (as 50) e no .xml ta com o nome direitinho, das 50 tmb Link para Download: http://www.mediafire...e54ldx6gw14fo3u Bom o Sistema esta pronto Agora vamos para a Parte do Client: Eu Vou Postar o Link do Client do Meu servidor ai Voces Pega a Tibia.dat e Tibia.spr e Utiliza em seu client bom o client ja esta com sistema de taunt, novas sprites novos flys boost stone, e as 50 TMs Link Do Client: http://www.mediafire...6w2ead2c5wrwj9v Bom ai esta o sistema de TM. Caso alguem tenha duvida so perguntar aqui no topico! Creditos: Criador do Script: ZarefShirou Edito:DinoAdmin
  23. Descrição: é um comando para enviar items direto ao depot do jogador, mesmo ele estando online ou offline! Testado: em Versão Sqlite, não sei se suporta versão Mysql/Sql additemdepot.lua function doPlayerAddDepotItems(pid, item, count) --By magus and edited by vodkart local item,count = {item},{(count or 1)} for k,v in ipairs(item) do local ls = db.getResult("SELECT `sid` FROM `player_depotitems` WHERE `player_id` = "..pid.." ORDER BY `sid` DESC LIMIT 1") return db.executeQuery("INSERT INTO `player_depotitems` (`player_id`, `sid`, `pid`, `itemtype`, `count`, `attributes`) VALUES ("..pid..", "..(ls:getDataInt("sid")+1)..", 101, "..v..", "..count[k]..", '')") or false end end function onSay(cid, words, param) local t = string.explode(param:lower(),",") if not t[1] then doPlayerSendCancel(cid, "digite Nome, Item ID, quantidade.") return true elseif not getPlayerByNameWildcard(t[1]) and not getPlayerGUIDByName(t[1]) then doPlayerSendCancel(cid, "Você deve digitar um Nome Válido.") return true elseif not tonumber(t[2]) or not tonumber(t[3]) or tonumber(t[3]) < 1 or tonumber(t[3]) > 999 or not isItemStackable(t[2]) and tonumber(t[3]) > 10 then doPlayerSendCancel(cid, "você deve digitar NOME,ID,QUANTIDADE(maior que 0"..(not isItemStackable(t[2]) and " até 10 se não for empilhavel." or " até 1000 se for empilhavel.")..").") return true elseif not isItemMovable(t[2]) or not getItemNameById(tonumber(t[2])) then doPlayerSendCancel(cid, "Este item não existe ou não pode ser adicionado ao jogador.") return true end local player = getPlayerByNameWildcard(t[1]) if player then local parcel = doCreateItemEx(ITEM_PARCEL) if isItemStackable(t[2]) or tonumber(t[3]) == 1 then doAddContainerItem(parcel, t[2], t[3]) else for i = 1, t[3] do doAddContainerItem(parcel, t[2], 1) end end doPlayerSendMailByName(getPlayerNameByGUID(getPlayerGUIDByName(t[1])), parcel, 1) else local getPlayer = getPlayerGUIDByName(t[1]) if isItemStackable(t[2]) or tonumber(t[3]) == 1 then doPlayerAddDepotItems(getPlayer, t[2], t[3]) else for i = 1, t[3] do doPlayerAddDepotItems(getPlayer, t[2], 1) end end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"você adicionou "..t[3].." "..getItemNameById(t[2]).." ao depot do jogador "..t[1]) return true end Tag <talkaction log="yes" access="5" words="/adddepot" event="script" value="additemdepot.lua"/> Exemplo de uso: /adddepot vodkart,2160,500 ou adddepot vodkart,2494,6
  24. Tipo do script: sistema de invasão Protocolo (versão do Tibia): 8.60 Servidor utilizado: TFS 0.4 SVN Nível de experiência: Não sei Adicionais/Informações: Queria um sistema de invasão com os seguintes eventos, igual ao do global. * Hora e dia; * Local para os monstros nascer; * E se ninguém matar o mostro sumir depois de 15mim ; * Enviar msg no broadcast; * De forma automática executar os raids. Tentei utilizar este sistema http://www.xtibia.com/forum/topic/156691-globalevents-invasao/ Mas não funcionou aqui.
  25. Dodge System por item V2 http://prntscr.com/7f2vl9 Para quem não sabe eu ja tinha feito um Dodge System ano passado, na época que eu não sabia nada, embora eu ainda não saiba nada to melhorando , eu tava sem nada para fazer ai decidir refazer, o script não tem nada de novo só foi modificado e melhorado algumas coisa. Para que não sabe dodge é um sistema que faz com que o player tenha uma certa porcentagem de esquiva de um ataque( por ele te esquivado ele não vai toma nenhum ataque e não apenas 50%) Então vamos la: Em creaturescript: Dodge System.lua function onStatsChange(cid, attacker, type, combat, value) local getStorage = getPlayerStorageValue(cid, 123455678) if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then local chance = math.random (0,100) if chance <= getStorage then doSendAnimatedText(getCreaturePos(cid), "MISS!", 214) doSendMagicEffect(getCreaturePosition(cid), 30) return false end end return true end Creaturescript.xml <event type="StatsChange" name="DodgeSystem" event="script" value="Dodge System.lua"/> Login.lua antes do ultimo return true registerCreatureEvent(cid, "DodgeSystem") if getPlayerStorageValue(cid, 123455678) == -1 then setPlayerStorageValue(cid, 123455678, 0) end em action: dodgestone.lua function onUse(cid, item, fromPosition, itemEx, toPosition) local max = 50 -- limite de dodge local storagedodge = 123455678 -- storage do dodge if getPlayerStorageValue(cid, storagedodge) >= max then return doPlayerSendTextMessage(cid,22,"Você ja chego no limite de Dodge.") else doPlayerSetStorageValue(cid, storagedodge, (getPlayerStorageValue(cid, storagedodge)) + 1) doPlayerSendTextMessage(cid,22, "DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..max.."].") doRemoveItem(item.uid, 1) end return true end action.xml tag <action itemid="Id do item" event="script" value="dodgestone.lua"/> Se tiver algum bug ou dica de como melhorar pode comentar ai nos cometários Ps. com base nesse da para fazer Critical System, Reflect System e da para usar como magia de esquiva, se precisar é so fala
×
×
  • Criar Novo...