Ir para conteúdo
  • Cadastre-se

Tyrisfall

Membro
  • Total de itens

    14
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Tyrisfall deu reputação a Johncore em Otg Server - Global 11x (sprites 13.30)   
    Otg Server é um projeto fork do The Forgotten Server 1.3, feito por brasileiros que visam sempre por estabilidade, um código mais clean, temos no projeto várias Datapacks como
    Global 11.0, Global 8.6, Global 8.0, RadBR 11.0, Evolutions 11.0, Yurots Classic 11.0, nossa base também é excelente para rodar projetos que são mapa Baiak ou ATS Custom pelo baixissimo uso de cpu e fix do Decay de itens.

    Todos são bem vindos para colaborar com o projeto... que não visa nenhum lucro financeiro, queremos apenas colaborar com a comunidade OTSERV,
    temos ouvido de muitas pessoas que procuram uma base estável, limpa, esse é o nosso objetivo nesse projeto.
     
    Estamos a procura de programadores/dev/webmaster que queiram ajudar / que tenham tempo e serão recompensados por isso.
     
    Nossa Datapack principal Global 11.00 contem as seguintes features:
    CAST SYSTEM ✅
    AUTOLOOT ✅
    WINTER UPDATE 2023 ✅
    SUMMER UPDATE 2023 ✅
    ADDONS 13.22 UPDATE ✅
    MONTARIAS 13.22 UPDATE ✅
    ITEMS 13.22 UPDATE ✅
    DAILY REWARD ✅
    IMBUEMENTS ✅
    PREY ✅
    EXERCISE WEAPONS ✅
    HIRELINGS NPCS ✅
    ANTI ROLLBACK ✅
     
     
    Github Global 11x:  💾
    https://github.com/otg-br/global-11x
    Clients e outras ferramentas:  💾
    https://github.com/otg-br/tools
    Github Otg Gesior:  💾
    https://github.com/otg-br/gesior
    Github Otg Otclientv8:  💾
    https://github.com/otg-br/otclientv8
    Wiki Otg:  💾
    https://github.com/otg-br/global-11x/wiki
     
     
    Creditos:
    TFS Team Erick Nunes Gui Bruxo Worthdavi LuSKT Leo Pereira Luan Luciano Cjaker Comedinhas Nekiro OTG Colaborators
  2. Obrigado
    Tyrisfall deu reputação a Bruxo Ots em [OTServBrGlobal 12.72] Khevaris Island - "REVISAR ITENS ESCONDIDOS APÓS DOWNLOAD"   
    Façam um pente fino, de nada.
     

     

  3. Obrigado
    Tyrisfall deu reputação a Hoshi em free for use 4 sprites.   
    Bom dia, Boa Tarde, Boa noite. aqui é o hoshi novamente... e eu queria passar umas sprites q tava fazendo. elas são bem basicas pois estou aprendendo ainda a criar... etc bom, mandarei as sprite logo abaixo. bom proveito "se tiver como ter ksdakskd"




  4. Obrigado
    Tyrisfall deu reputação a Sun em Novo no Tk! Explicação sobre ItemAttribute   
    ~ Olá galera, fiz parte do grupo por uns anos e fiquei 3 longos anos sem dar as caras
                                                     Antes pessoas me ajudavam, hoje, consigo ajudar as pessoas, e queria compartilhar com vocês conhecimento sobre itemAttribute!
                                                          essa função do tibia é maravilhosa, porém muitos não sabem seu potencial ou até mesmo não coloca ela em seus planos,
                                                        ela é bem simples porém deixa duvida em muitos, principalmente servidores de Poketibia que utiliza isso em quase tudo.
    getItemAttribute(uid, key) -- ## oque é get? get em inglês seria algo como obter, então a função traduzida seria, obter atributo do item! ## -- getItemAttribute(uid, key) -- ## UID seria direcionado a qual item eu estaria perguntando seu attributo, lembrando que eu obtenho isso com a key ##-- --## quando se pesquisa pelo atributo do item, o mais importante seria a chave que está contido no item, a key, no caso é uma {string} doItemSetAttribute(uid, key, value) -- ## oque é set? set seria algo como "definir", usamos para "dar" algo, traduzido fica definir atributo no item doItemSetAttribute(uid, key, value) -- ## uid novamente! seria o item a ser setado o attributo, chave, será algo que iremos colocar, como "defense" ## -- -- ## oque seria value? value seria o valor, como 1, etc já que é defense podemos fazer se tiver mais, defende mais ##  
    doItemEraseAttribute(uid, key) --## oque é do? do seria como "faça", na tradução seria, faça um corte no atributo do item doItemEraseAttribute(uid, key) --## uid novamente! será o item, a chave seria aque você setou no item, essa função retira o attributo!. ##--  
    exemplo dos Attribute sendo usados
     
    -- ## exemplo de catch seria o charmander ## -- Ensino = {"Charmander", 3200, 1515, 4} -- ## fazemos de exemplo que 3200 seria vida do charmander e 1515 seria o id do item do seu portfoil e 4 o sexo item = doCreateItemEx(12664, 1) -- ## 12664 seria o id da pokebola, 1 seria a quantia doPlayerAddItemEx(cid, item, true, CONST_SLOT_BACKPACK) doItemSetAttribute(item, "poke", 3200) -- ## vida do pokemon ## -- doItemSetAttribute(item, "nome", "Charmander") -- ## nome do pokemon ## -- doItemSetAttribute(item, "portrait", 1515) -- ## portrait do pokemon ## -- doItemSetAttribute(item, "gender", 4) -- ## 4 seria o sexo dele ## -- -- ## claro que ná hora de fazer seu system de catch irá ser assim, mas isso é apenas um exemplo de como irá funcionar ## -- -- ## lembrando que o valor do doItemSetAttribute pode ser além de numero. ## --  
                                               
                                                                     
     
     
                                                      Espero que muitos pratiquem ai, e que vocês tenham conseguido entender o tópico e se aventurem para usar a função!.
                                                                                                                                                 bye
     
  5. Curtir
    Tyrisfall deu reputação a EddyHavoc em [Original] Azeroth RPG   
    Azeroth Server










    Versão: 8.60
    Distro: TFS 0.4
    Mapa Base: Yourots Edited e Mix Yourots









    Features:




    > 7 Cidades:

    Azeroth
    Avalon
    Zatur
    Liberty Bay
    Gloria
    Sand Trap
    Tiquanda

    > Mapa RPG bem detalhado para Ots Low e Mid rate.
    > Inúmeras invasões automáticas, Low e High lvl (ou iniciadas pelo comando /raid "nome").
    > NPCs de Travel/Boat diferentes para cada cidade.
    > Mais de 70 quests (além das principais) espalhadas pelo mapa.
    > Quests especiais com NPCs
    > Arena PvP sem perda de items.
    > Sistema de Guerras pelo Castelo [entre guilds] (mais detalhes abaixo)
    > Sistema de Refinamento e Slot (mais detalhes abaixo).
    > Sistema de Mineração (mais detalhes abaixo)
    > Scripts e sistemas aprimorados para o servidor
    > Distro SEM erro algum

    > Principais Quests:

    Annihilator
    Blue Legs
    Pits of Inferno
    MMS
    The Inquisition
    The Death
    FireWalker Boots
    Demon Helmet
    Draken
    Hell Conquer

    > 23 Raids Automáticas e configuradas:






    > Sistema de Guerras pelo Castelo [Honor Castle, a oeste de Azeroth]

    Evento automático. Quando a guerra é anunciada as guilds podem batalhar pelo controle do castelo, dando use no monumento do último andar e permanecendo assim até a guerra acabar. O último jogador a ter o controle do castelo antes do tempo acabar será o vencedor, e sua guild se tornará dona do castelo. Todos os membros da Guild ganharão uma recompensa e poderão acessar o mapa do subsolo. Os membros de outras Guilds serão teleportados para o templo e não poderão acessar o castelo.

    O sistema envia mensagens a todos antes de o evento começar, quando começar, quando o dono do castelo muda, antes de se finalizar e ao finalizar, relatando o conquistador do castelo e a guild vencedora.











    Imagens:



















































































































































    Há vários novos sistemas adicionados.
    Um deles é Upgrade & Slot System






    Histórico:

    V 0.2











    V 0.3





    V 0.4



    V 1.0








    V 1.1








    Edição e postagem(leia):

    É Autorizado edições e repostagens do Azeroth Server (aliás, não posso proibir isso) mas peço a vocês que pelo menos respeitem o estilo do mapa. Eu não sei se poderei dar continuidade a ele, mas trata-se de um projeto RPG.

    Pensa só, Vmspk teve um trabalhão pra editar o server, ele fez tudo com mais amor do que o arroz que sua mãe faz com sazón, e você vai baixar, encher de teleportes e hunts quadradas, colocar armas com atk de 350000, sistemas VIPs sem propósito algum, vai copiar o tópico, retirar meus créditos e postar novamente? Reconsidere, pois não há nada mais desmotivador para um desenvolvedor do que isso, ver seu trabalho cair em desuso, como aconteceu com o Styller YourOts, Vancini e Baiak, que agora é um monstro sem pé nem cabeça (alguns gostam desse tipo de server, tudo bem, mas essa não é a proposta deste servidor).

    Se teve boas ideias e quer editar o servidor para postar, fique à vontade, mas não nos decepcione. !



    Não há teleports diretos para hunts ou quests.
    Não há items ou monstros editados(além dos trainers).
    Não há sistema VIP, VIP 2, VIP 3, VIP 345456364.
    Não há raids com monstros excessivamente fortes nas cidades iniciais.



    Créditos:
    < Unknow YourOts Edited >
    < Mix Yourots Team >
    < Crystal Server Team >
    < Tryller >
    < Mock >
    < TFS Team >
    < TonyHanks >
    < Centera World >
    < Vmspk >
    <EddyHavoc>










    DOWNLOADS





    > Opcionais



    Lista de Urilitários para OTServ


    > Servidor

    Houve problemas para encontrar um distro confiável. Vários TFS não funcionavam direito ou pareciam estar infectados, segundo o VirusTotal, mas ao que me parece o site deve ter mudado algo em suas configurações, por que até arquivos limpos, agora ficam com 16 + arquivos suspeitos no novo scan.

    Eu optei por usar um TFS 0.4. O distro foi testado com vários anti-virús, sem nenhum problema, e funciona perfeitamente com o Azeroth Server.


















    DOWNLOADS:





    Opção 1                                             Opção 2




                                           


    Somente DataPack (+ IpChanger e SqliteStudio)            Servidor Completo (DataPack + Distro e DLLs)














    Acc do GOD: vmspk/222222






    Comandos: !war para executar a guerra pelo castelo manualmente, !reset para interromper o funcionamento da war e !castle para limpar todos os dados, ou seja, o castelo volta a ser terra de ninguém.



    !info para saber mais sobre as novidades do Azeroth Server. Editável na pasta do Ot, em Notícias. Comando !bless e !rank disponíveis.



    Para saber os IDs das pedras e outras coisas vá ao Histórico, na versão 1.0.







    Se acha que ter um OtServ é só baixar, abrir e largar lá, ou ainda editar chars e equipamentos para você mesmo jogar e fazer o que quiser, garanto-lhe que não vai durar 2 dias. Conheça o mapa, crie eventos, interaja com os jogadores, faça torneios Pvp, marque datas para a Honor Castle, faça updates no mapa, crie monstros, hunts e quests, dê suporte e, o mais importante, mantenha o HELP aberto, sempre.












  6. Curtir
    Tyrisfall deu reputação a Johncore em Cidade Asylum 12.70   
    Asylum é uma cidade Custom bem legal que você encontra nos servidores Gunzodus e Exodus,
    Por ter esse conteúdo resolvi compartilhar com a comunidade OpenTibia que curte a cidade e gostaria de ter em seu servidor.
     
    Em breve estarei postando novos mapas aqui no fórum e o OTB compatível.
     
    Creditos: 
    gunzodus
    johncorex
    asylum.otbm asylum-house.xml asylum-spawn.xml
  7. Curtir
    Tyrisfall deu reputação a Bneto em Dungeon : Abismo de Nezuren   
    Olá pessoal, gostaria de disponibilizar uma dungeon que eu tive a ideia de fazer, ainda não finalizei os detalhes, mas assim que eu finalizar eu farei um update.
    No momento, gostaria de algumas criticas caso se houver, desde já, muito obrigado!
     
    Bom, primeiro vamos para a história do lugar!
     
    O Abismo de Nezuren
    PARTE I
     
    Nezuren é o reino dos elfos mais poderoso continente, nele há um lugar que guarda a entrada para um lugar sombrio e repleto de segredos.
    Elvidth Nezariel I, fez um calabouço para banir seres que ameaçavam o continente ou seu reinado e selou sua entrada.
    Após alguns anos, Nezariel se corrompeu pelo poder e passou a banir sesres da realeza, alguns guardas e várias outras criaturas para o abismo de Nezuren.
    O clima ficava cada vez mais tenso no continente e no reino dos elfos então, qualquer coisa que fosse entendido de maneira errada, teria sorte de ir para a prisão comum.
    Elvidth queria mais poder, então, ele teve uma visão de um ser dizendo a ele que ele ganharia mais poder e com isso mais domínio de terra, para isso, ele precisaria fazer um sacrifício.
    A entidade pediu o sacrificio de todos aqueles que ainda habitavam o abismo, o rei, nesta altura, já não se importava com os seres que lá foram jogados, já que são considerados opositores de seu reino.
    Elvidth foi até a entrada e então começou a conjurar as palavras que a entidade dizia em sua mente.
    Durante o encantamento, dava para ouvir alguns gritos, gemidos de dor, algo bom não estava acontecendo, mas ele continuava sem se importar com aqueles que lá sofriam.
    Até que no final, houve um clarão verde, os gritos pararam, houve silencio por algum momento e logo em seguida, a entidade disse à Nezariel:

    "-Muito bem Nezariel, você receberá meus poderes, a intensidade deles são referentes aqueles que adoram ao meu ser.
    Quanto mais pessoas você jogar dentro deste abismo, ela irá cultuar o meu ser e com isso, mais poder você terá.
    -Muito bem, agora com seu poder, sinto que agora posso realizar meu objetivo!"
     
    E durante alguns anos, Nezuren viveu seus piores dias, o continente agora estava ameaçado pela ganancia de Elvidth.
    Foi então que alguns reis e líderes decidiram se unir para formar uma aliança contra o enlouquecido tirano, Anões, Humanos, Elfos e Ciclopes foram a batalha contra Nezariel.
    Foi uma batalha de extrema importância, houve muitas baixas, mas no fim, encontraram uma solução, a única maneira de derrota-lo seria diminuindo as forças proveniente da entidade.
    Com isso em mente, resolveram entrar no abismo e derrotar toda criatura que lá residia, porém, sabendo disso, se prepararam para a batalha e entraram.
    Nezariel lutava contra o exercito da aliança enquanto os líderes lutavam contra o exercito da entidade que residia no abismo.
    Lá residiam criaturas muito poderosas, seres que transformaram-se no mal em que guardavam em seus corações, a entidade se alimentava desse ódio e ficava cada vez mais forte.
    A cada ser derrotado no abismo, Nezariel perdia suas forças ligadas à entidade, e assim, a cada morte das criaturas do abismo, Nezariel perdia sua confiança, foi aí que a aliança sentiu-se mais confiante.
    Com isso, foram para cima de Elvidth com tudo que tinham, aquele sentimento de vitória, de liberdade novamente não poderia escapar de suas mentes e corações.
    Nezariel então correu para a entrada do abismo pedindo a entidade que lhe ajudasse, a entidade disse que havia guerreiros derrotando os residentes do abismo, então, Nezariel antes da morte, conjurou um feitiço para prender todos aqueles que lá estavam e no fim, foi morto pela aliança.
    Durante algum tempo a aliança tentou de todas as formas para trazer novamente os líderes que lá ficaram, mas não obtiveram sucesso em se comunicar e tão pouco em tira-los de lá.
    Assim, fizeram uma homenagem à eles e daquele dia em diante, o continente é grato por tal feito de seus herois.
     
    PARTE II
    Anos se passaram, e agora já é possivel entrar no abismo, graças com a ajuda das fadas.
    Os novos líderes da aliança buscam guerreiros para realizar uma expedição de reconhecimento no local, já que há rumores de que Ferumbras estaria com planos de usar o local.
    Para isso, deve se ter em mente que sua vida poderá ser perdida, mas, a recompensa é satisfatoria.
    Receber destaque e respeito em todo territorio da aliança, quantia em dinheiro que deixaria qualquer um com inveja, quem não gostaria disso, não é?
    E já faz tanto tempo, não deve haver nada vivo lá embaixo.
    ------------------------------------------------------------------------------------------------------------------------------
    O que há lá embaixo?
    A entidade fez com que o abismo se tornasse um lugar onde o tempo não passa, logo, eles não puderam morrer...
    Primeiro, o local está repleto de corpos de criaturas demoniacas, no entanto, nem tudo está morto.
     
    Uh'Lamek
    Uh'Lamek, foi o guerreiro representante dos ciclopes, ele e os outros ficaram loucos por ficarem presos ali por tanto tempo, agora, o lugar é sua casa e qualquer visitante deverá tomar cuidado.
    Ele tem extrema força física e com poderes capaz de derrotar uma fila imensa de Juggernaut, não o subestime.
     
    Habilidades de Uh'Lamek
    Resistências:
    Físico: -10%
    Fogo: +25%
    Energia: +25%
    Gelo: +50%
    Sagrado: +10%
    Morte: -15%
    Terra: +65%
     
    Habilidades:
    Corpo a corpo: 600, 1400
    Fúria: Dobra a força de todos os ataques
    Ataque Onda: Ataca o chão com sua arma e propaga uma onda de energia causando dano de 500, causa status de Eletricutado.
    Redução de Defesa: Joga uma pedra que causa redução de defesa em 80% por 30 segundos.
    Força de Impacto: Ataca o chão com força extrema, causando uma onda de tremor, causando paralisia em 70%, seguido de explosão tipo Terra (300, 900). ( Causa dano nele mesmo )
     
    ----------------------------------------------------------------
     
     
     
    dungeon.otbm
  8. Obrigado
    Tyrisfall deu reputação a Afronator em Silverhand Library   
    Curti demais o mapa, mas meu remeres não abre por nada
  9. Gostei
    Tyrisfall recebeu reputação de Aventureiro com mapa em Silverhand Library   
    Silverhand Library
    Versão: 11.46
    Pos: x 1024, y 1036, z 7
    Download
    Scan

    primeira vez que to postando se tiver algo errado me avisa plz
     
     
     
  10. Gostei
    Tyrisfall deu reputação a Delkdors em Atlantis - Mapa Próprio   
    Mapa  -  Atlantis
     
    Download:
     
    Atlantis.otbm
     
    Varredura
     
    RME e Client utilizado para fazer o mapa
     
    primeira vez que postar se tiver algo
    errado ou algo para corrigir no mapa  me avise  pfv
     
     
     
  11. Obrigado
    Tyrisfall deu reputação a Cat em Lista completa de Magic Effects e Shoot Type   
    MagicEffects     CONST_ME_FIRST = 1,     CONST_ME_DRAWBLOOD = CONST_ME_FIRST,     CONST_ME_LOSEENERGY = 2,     CONST_ME_POFF = 3,     CONST_ME_BLOCKHIT = 4,     CONST_ME_EXPLOSIONAREA = 5,     CONST_ME_EXPLOSIONHIT = 6,     CONST_ME_FIREAREA = 7,     CONST_ME_YELLOW_RINGS = 8,     CONST_ME_GREEN_RINGS = 9,     CONST_ME_HITAREA = 10,     CONST_ME_TELEPORT = 11,     CONST_ME_ENERGYHIT = 12,     CONST_ME_MAGIC_BLUE = 13,     CONST_ME_MAGIC_RED = 14,     CONST_ME_MAGIC_GREEN = 15,     CONST_ME_HITBYFIRE = 16,     CONST_ME_HITBYPOISON = 17,     CONST_ME_MORTAREA = 18,     CONST_ME_SOUND_GREEN = 19,     CONST_ME_SOUND_RED = 20,     CONST_ME_POISONAREA = 21,     CONST_ME_SOUND_YELLOW = 22,     CONST_ME_SOUND_PURPLE = 23,     CONST_ME_SOUND_BLUE = 24,     CONST_ME_SOUND_WHITE = 25,     CONST_ME_BUBBLES = 26,     CONST_ME_CRAPS = 27,     CONST_ME_GIFT_WRAPS = 28,     CONST_ME_FIREWORK_YELLOW = 29,     CONST_ME_FIREWORK_RED = 30,     CONST_ME_FIREWORK_BLUE = 31,     CONST_ME_STUN = 32,     CONST_ME_SLEEP = 33,     CONST_ME_WATERCREATURE = 34,     CONST_ME_GROUNDSHAKER = 35,     CONST_ME_HEARTS = 36,     CONST_ME_FIREATTACK = 37,     CONST_ME_ENERGYAREA = 38,     CONST_ME_SMALLCLOUDS = 39,     CONST_ME_HOLYDAMAGE = 40,     CONST_ME_BIGCLOUDS = 41,     CONST_ME_ICEAREA = 42,     CONST_ME_ICETORNADO = 43,     CONST_ME_ICEATTACK = 44,     CONST_ME_STONES = 45,     CONST_ME_SMALLPLANTS = 46,     CONST_ME_CARNIPHILA = 47,     CONST_ME_PURPLEENERGY = 48,     CONST_ME_YELLOWENERGY = 49,     CONST_ME_HOLYAREA = 50,     CONST_ME_BIGPLANTS = 51,     CONST_ME_CAKE = 52,     CONST_ME_GIANTICE = 53,     CONST_ME_WATERSPLASH = 54,     CONST_ME_PLANTATTACK = 55,     CONST_ME_TUTORIALARROW = 56,     CONST_ME_TUTORIALSQUARE = 57,     CONST_ME_MIRRORHORIZONTAL = 58,     CONST_ME_MIRRORVERTICAL = 59,     CONST_ME_SKULLHORIZONTAL = 60,     CONST_ME_SKULLVERTICAL = 61,     CONST_ME_ASSASSIN = 62,     CONST_ME_STEPSHORIZONTAL = 63,     CONST_ME_BLOODYSTEPS = 64,     CONST_ME_STEPSVERTICAL = 65,     CONST_ME_YALAHARIGHOST = 66,     CONST_ME_BATS = 67,     CONST_ME_SMOKE = 68,     CONST_ME_INSECTS = 69,     CONST_ME_DRAGONHEAD = 70,     CONST_ME_ORCSHAMAN = 71,     CONST_ME_ORCSHAMAN_FIRE = 72,     CONST_ME_THUNDER = 73,     CONST_ME_FERUMBRAS = 74,     CONST_ME_CONFETTI_HORIZONTAL = 75,     CONST_ME_CONFETTI_VERTICAL = 76,     // 77-157 are empty     CONST_ME_BLACKSMOKE = 158,     CONST_ME_LAST = CONST_ME_BLACKSMOKE, // 159-166 are empty CONST_ME_REDSMOKE = 167, CONST_ME_YELLOWSMOKE = 168, CONST_ME_GREENSMOKE = 169, CONST_ME_PURPLESMOKE = 170, CONST_ME_EARLY_THUNDER = 171, CONST_ME_RAGIAZ_BONECAPSULE = 172, CONST_ME_CRITICAL_DAMAGE = 173, // 174 is empty CONST_ME_PLUNGING_FISH = 175,    ShootTypes     CONST_ANI_NONE = 0,     CONST_ANI_FIRST = 1,     CONST_ANI_SPEAR = CONST_ANI_FIRST,     CONST_ANI_BOLT = 2,     CONST_ANI_ARROW = 3,     CONST_ANI_FIRE = 4,     CONST_ANI_ENERGY = 5,     CONST_ANI_POISONARROW = 6,     CONST_ANI_BURSTARROW = 7,     CONST_ANI_THROWINGSTAR = 8,     CONST_ANI_THROWINGKNIFE = 9,     CONST_ANI_SMALLSTONE = 10,     CONST_ANI_DEATH = 11,     CONST_ANI_LARGEROCK = 12,     CONST_ANI_SNOWBALL = 13,     CONST_ANI_POWERBOLT = 14,     CONST_ANI_POISON = 15,     CONST_ANI_INFERNALBOLT = 16,     CONST_ANI_HUNTINGSPEAR = 17,     CONST_ANI_ENCHANTEDSPEAR = 18,     CONST_ANI_REDSTAR = 19,     CONST_ANI_GREENSTAR = 20,     CONST_ANI_ROYALSPEAR = 21,     CONST_ANI_SNIPERARROW = 22,     CONST_ANI_ONYXARROW = 23,     CONST_ANI_PIERCINGBOLT = 24,     CONST_ANI_WHIRLWINDSWORD = 25,     CONST_ANI_WHIRLWINDAXE = 26,     CONST_ANI_WHIRLWINDCLUB = 27,     CONST_ANI_ETHEREALSPEAR = 28,     CONST_ANI_ICE = 29,     CONST_ANI_EARTH = 30,     CONST_ANI_HOLY = 31,     CONST_ANI_SUDDENDEATH = 32,     CONST_ANI_FLASHARROW = 33,     CONST_ANI_FLAMMINGARROW = 34,     CONST_ANI_SHIVERARROW = 35,     CONST_ANI_ENERGYBALL = 36,     CONST_ANI_SMALLICE = 37,     CONST_ANI_SMALLHOLY = 38,     CONST_ANI_SMALLEARTH = 39,     CONST_ANI_EARTHARROW = 40,     CONST_ANI_EXPLOSION = 41,     CONST_ANI_CAKE = 42,     CONST_ANI_TARSALARROW = 44,     CONST_ANI_VORTEXBOLT = 45,     CONST_ANI_PRISMATICBOLT = 48,     CONST_ANI_CRYSTALLINEARROW = 49,     CONST_ANI_DRILLBOLT = 50,     CONST_ANI_ENVENOMEDARROW = 51, CONST_ANI_GLOOTHSPEAR = 53, CONST_ANI_SIMPLEARROW = 54, fonte: https://github.com/otland/forgottenserver/blob/master/src/const.h
      Lista com Gif
    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 (OBS: são as nuvens do exevo gran mas vis)
     
    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    (é quase igual, só que cresce mais, não consegui gif)
     
    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 (Ignorado)
    CONST_ME_BLOODYSTEPS = 63 (Ignorado)
    CONST_ME_STEPSVERTICAL = 64 (Ignorado)
     
    CONST_ME_YALAHARIGHOST = 65   
     
    CONST_ME_BATS = 66   
     
    CONST_ME_SMOKE = 67  
      
    CONST_ME_INSECTS = 68   
  12. Gostei
    Tyrisfall deu reputação a Jaurez em [WIP] OTXServer 12.31 Global Full + Kilmaresh (Issavi) + BESTIARY - QUICKLOOT   
    Olá amigo, depois de muito tempo sem mexer em otserver eu consegui fazer a compilação desse .exe, deu um trabalhão para concluir sem erros, sim deu trabalho pq eu estava a mais de 5 anos sem mexer nisso.
    Muita coisa mudou nesse tempo, inclusive "esse tal" de vcpkg.
    Resolvi, consegui, estou compilando sem ajuda de ninguém. Aliás, ajuda eu tive pesquisando erros de VCPKG.
    Cada erro eu pesquisava a respeito.
    Sei que muitos aqui do TK sabem resolver rapidinho cada erro mas não divulgam.
    Quem precisar de um 32 ou 64 é só me pedir.
    Ajudar quando se sabe não é tirar dinheiro de ninguém, se estão cobrando por isso eu não acho legal.
    Passar conhecimento para frente, ajudar, essa é a forma mais legal de sempre irmos em frente.
    Farei um tutorial que funciona de verdade e postarei aqui no TK assim que possível de como compilar sem erros de libmariadb, boost\asio.HPP e tantos outros erros.
  13. Gostei
    Tyrisfall deu reputação a xFatality em {Tutorial} NPC'S   
    Tutorial de NPCS

    Esse tutorial irá servir para quem gostar de fazer certo NPCs mais complexos com storages, varias missões e tudo mais.
    Usando como base o Jiddo system apenas para comprar e vender itens, pois não gosto de usar sistemas que facilitam

    Pois não criam scripters e sim preguiçosos, ainda mais quando o sistema é abandonado ai você se lasca

    O npc é dividido em duas partes :
    - Arquivo XML : Responsavel pelo visual e algumas propriedades dele (pelo jiddo system)
    - Arquivo Lua : Responvasel pelas falas e vendas (Lua puro)

    Visual do Npc

    Bem primeiro vamos explicar o visual de um npc,



    <npc name="Bonifacius" script="data/npc/scripts/default.lua" walkinterval="25" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="128" head="97" body="100" legs="115" feet="114" corpse="2212"/> </npc> Explicando parte a parte Name : Nome dele que aparecerá para todos. script : Arquivo lua do script dele walkinterval : De quanto em quanto milessegundos ele irá caminhar. floorchange : Se ele irá subir escadas ou cair em buracos. access : O valor de acesso dele, caso ele tenha um acesso 5 poderá usar todo os comandos de GODS. level,maglevel : É tosco, você pode fazer ele soltar magias (nunca tentei) e no caso isso contaria. Health Now : Sangue que terá max : Maximo de health (ja fizeram npc com life media) look type : Tipo de roupa dele, Caso queira ele como objeto use look typeex. head,body,legs,feet : Cor da cabeça,corpo,calça e pé do npc. corpse : Corpo caso ele morra (LOL não dá...) Esse é a base do arquivo xml do npc. Caso você queirá enfiar tosquisses pelo Jiddo System fica mais ou menos assim: <?xml version="1.0" encoding="UTF-8"?> <npc name="Bonifacius" script="data/npc/scripts/default.lua" walkinterval="25" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="128" head="97" body="100" legs="115" feet="114" corpse="2212"/> <parameters> <parameter key="module_shop" value="1"/> <parameter key="shop_buyable" value="banana,2676,2;grapes,2681,3;melon,2682,8;orange,2675,5;pumpkin,2683,10;chees e,2696,5;egg,2695,2;cookie,2678,2;meat,2266,5"/> <parameter key="message_greet" value="What you doing soldier ? Take your weapon and go war!"/> <parameter key="message_walkaway" value="Hey Hey, where you go ?"/> <parameter key="message_farewell" value="Bye bye brave soldier. Remember, peoples without head, don't transform in undeads."/> <parameter key="message_alreadyfocused" value="You are drunked ? You talk really talk to me ?"/> </parameters> </npc> <parameters> <parameter key="module_shop" value="1"/> <parameter key="shop_buyable" value="banana,2676,2;grapes,2681,3;melon,2682,8;orange,2675,5;pumpkin,2683,10;chees e,2696,5;egg,2695,2;cookie,2678,2;meat,2266,5"/> <parameter key="message_greet" value="What you doing soldier ? Take your weapon and go war!"/> <parameter key="message_walkaway" value="Hey Hey, where you go ?"/> <parameter key="message_farewell" value="Bye bye brave soldier. Remember, peoples without head, don't transform in undeads."/> <parameter key="message_alreadyfocused" value="You are drunked ? You talk really talk to me ?"/> </parameters> Esse é um exemplo basico de npc vendedor, que não faz muita coisa. module_shop : Quer dizer que ao falar trade ele irá abrir a janela tosca de venda de itens. shop_buyable : Isso faz tudo que tiver ai ele vender sendo a sintaxe parameter key="shop_buyable" value="nome inutil (inutil mesmo não serve para nada),id do produto,preço; Podendo você adicionar milhares e milhares, unico porém de você adicionar pelo XML é que não há possibilidade de fazer a venda por backpack (pelo menos até a versão que testei) message_farewell Mensagem de despedida Essas message tem alguns tipos explicados abaixo : Tudo isso acima deverá estar depois de message_ e as mensagens em default você poderá encontrar em npc/lib/npcsystem/npchandler.lua Se você fazer asneira lá os npcs não funfam cuidado o0 Ainda há o npc de barco, muito simples : <parameter key="travel_destinations" value="desert,1594,835,5,180;edron,931,825,6,90;"/> Sintaxe value="nome da cidade ,coordenada x,coordenada y,coordenada z ,valor;" local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new()) Ou seja npcs, que aquilo que mostrei no xml é suficiente você pode direcionar para o default.lua Eu disse que npcs feitos no XML, a opção de compra por backpack não é possivel Então para faze-la em um npc Lua ficará assim : local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local shopModule = ShopModule:new() npcHandler:addModule(shopModule) shopModule:addBuyableItem({'health potion'}, 7618, 45, 1, 'health potion') shopModule:addBuyableItem({'mana potion'}, 7620, 50, 1, 'mana potion') shopModule:addBuyableItemContainer({'bp hp'}, 2000, 7618, 900, 1, 'backpack of health potions') shopModule:addBuyableItemContainer({'bp mp'}, 2001, 7620, 1000, 1, 'backpack of mana potions') npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Nesse exemplo o npc vende health potion,mana potion e bp dos respectivos. Sendo a sintaxe shopModule:addBuyableItem({'nome inutil'}, id preço, quantidade ou sub tipo, 'nome inutil') Esse nome só serve para você não se perder, pois ao dizer trade ele aparecerá o nome do item pelo items.xml e não o que voce falou Sintaxe da backpack shopModule:addBuyableItemContainer({'nome'}, id da backpack, id, preço, sub tipo ou quantidade (caso seja agrupavel), 'nome inutil') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'rainbow') or msgcontains (msg, 'perch') then if getPlayerStorageValue(cid,30013) == 8 then selfSay('Yeah. But peguins, stoled my last crate of this. Please go lair of this plague and take again my itens. You go ?', cid) talkState[talkUser] = 1 else selfSay('You are a lier. Leave here!', cid) end elseif msgcontains(msg, 'mission') then if doPlayerRemoveItem(cid,7707,1) == 1 then selfSay('Congratulations. Give this for Willard.', cid) setPlayerStorageValue(cid,30013,10) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then selfSay('Great. Later report me asking mission.', cid) setPlayerStorageValue(cid,30013,9) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Esse npc ai é um simples de quest, você pode se basear nele para seu primeiro npc Vamos explicar umas coisas importantissimas talkState = Isso ai é a genialidade, a cada passo você pode mandar o player para um estagio. Se você leu meus tutos percebeu que ele é um vetor, mais por que ? Porque, ao ser uma variavel ele é armazenada no servidor certo ? Então se não fosse um vetor, o npc falando com dois ao mesmo tempo poderia se confudir e ferrar tudo literalmente Se você dominar o talkState dominará 50% de npcs de missões Storages = Isso também é indispensavel nos npcs, é sempre bom reservar uns para cada missão Para se ela tiver varias etapas você não se confudir, Ou usar o mesmo value para poder aproveitar no questlog (explicado no tutorial SUper Quests) O npc acima ele é 4º npc da minha quest global do meu otserver de testes. Ignore os erros de Inglês. if msgcontains(msg, 'rainbow') or msgcontains (msg, 'perch') then if getPlayerStorageValue(cid,30013) == 8 then selfSay('Yeah. But peguins, stoled my last crate of this. Please go lair of this plague and take again my itens. You go ?', cid) talkState[talkUser] = 1 else selfSay('You are a lier. Leave here!', cid) end Aqui ao você falar rainbow ou perch ele começa a girar essa parte do script. Ou seja no caso eh msgcontains se você falar Ele irá entender normalmente, e rodará o script. Caso fosse msg ai sim teria quer ser certinho (até maiscula e miniscula acho que ele duvidaria) No caso ele checa o storage 30013 se tem o valor 8, caso tenha ele fala aquela frase enorme e muda seu talkstate para 1 Se não tiver o storage com valor 8, ele te ofende. Esse storage 8 é adicionado no npc anterior. Se você tiver tudo certo ele tem pergunto algo, porém isso só será checado no talkstate 1 elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then selfSay('Great. Later report me asking {mission}.', cid) setPlayerStorageValue(cid,30013,9) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end Se você falar yes, ele manda você ir no penguim hell para você pegar os treco para ele. E te coloca o storage 30013 com valor 9. E veja que ele manda você falar mission quando completar Vamos supor (não supositorio), que você completou ela e falo mission para ele. O que iria checar ? elseif msgcontains(msg, 'mission') then if doPlayerRemoveItem(cid,7707,1) == 1 then selfSay('Congratulations. Give this for Willard.', cid) setPlayerStorageValue(cid,30013,10) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end Se você fala mission, ele automaticamente remoe o item 7707 (dado na quest) e parabeniza você. Dando o storage 30013 com valor 10 O valor necessario para o npc anterior voltar a falar com você. Caso você seja caloteiro ele já te desmente. Bem simples, não ? Claro que esse npc é minisculo. Porém ja da para seguir como base. Olhe a evolução dele. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'mission') then if getPlayerStorageValue(cid,2411) == -1 then selfSay('Entregue essa carta a minha irmã Clarice.', cid) setPlayerStorageValue(cid,2411,1) doPlayerAddItem(cid,8370,1) else selfSay('Eu ja te dei a carta, aguardo resposta', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Ai checamos se ele já fez a quest. No caso se tiver -1 (que nunca fez) ele poderá começa-la. E dará a carta ao player (item 8370 nem sei o que é) Ok. Essa parte ta montada, ele dá a carta. Situação : A NPC Clarice está cantarolando em sua casa, quando você chega com uma carta de seu irmão. Ela recebe de bom grado porém prescisa provar que recebeu. Porém seu jogador não sabe que existe storage value, então Você poderá enviar outra carta ou inventar que ela irá falar com ele. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'letter') then if getPlayerStorageValue(cid,2411) == 1 then selfSay('Ah você relmente tem a carta de meu amado irmão?', cid) talkState[talkUser] = 1 else selfSay('Ah seu fanfarao saia daqui', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid,8013,1) == 1 then setPlayerStorageValue(cid,2411,2) selfSay('Obrigada. Agora eu irei falar com ele sobre o assunto', cid) talkState[talkUser] = 0 else selfSay('Você não tem a carta dele', cid) end else selfSay('Então porque veio aqui ?', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Veja que ela é a prova de erros. Primeiro ao falar letter ela checa se você tem o storage com valor 1 (Ou seja, se você falo com ele) Se não falou ela já te manda pescar, se houver, ela já mete pergunta se você tem a carta Caso não já te manda pescar Caso sim ela tenta pergunta se voce tem a carta Caso diga não ela te manda pescar também, Caso fale sim ela tenta tirar sua carta, caso você tenha ela te agradece e coloca o storage com valor 2 Caso não tenha ela diz que você não tem a carta Vamos suport, que você aceitou e entregou a carta tudo certinho. Você deve voltar ao Valdemar para ele te dar algo não ? Situação : Você ja deu uma de carteiro e agora quer receber sua recompensa, então ao Oscar, Porém ele não é trouxa E como ele sabe se você ja fez tudo ? Uma dica começa com S e termina com orage... Vejam que eu usei a mesma palavra missão e adicionei um else. Se ele tiver o storage com valor 2 e falar missão, obviamente ele fez tudo e como é a ultima missão Não necessita fazer perguntas retoricas (sem resposta), então ele já da sua recompensa e ja fecha seu storage com 3. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new()) Se você observar ele tem 4 funções ai que nem foram usadas.[/left] onCreatureAppear(cid) : Ela faz uma ação quando o player entrar em seu raio de ação onCreatureDisappear(cid) : Ela faz uma ação quando o player sai do seu raio de ação. onCreaturesay(cid) : Quando o player fala algo. onThink(cid) : Seria ao pensar ao achar, não tenho certeza do que faz, porém é uma função muito usada. onCreatureMove(creature, oldPos, newPos) : Quando a criatura se move de um lugar para outro. local target = 0 local prevTarget = 0 local maxChaseDistance = 20 local origPos = 0 local origDir = NORTH local lastAttack = 0 local followTimeout = 10 local function isSkulled(cid) local skullType = getPlayerSkullType(cid) if(skullType >= 3) then return true end return false end local function goToOrigPos() target = 0 lastAttack = 0 selfFollow(0) doTeleportThing(getNpcCid(), origPos) end local function updateTarget() if(isPlayer(target) == FALSE) then goToOrigPos() elseif(not isSkulled(target)) then target = 0 selfSay("Now, behave in the future.") end if(target == 0) then local list = getSpectators(getNpcPos(), 8, 8, false) for i=1, table.getn(list) do local _target = list[i] if(_target ~= 0) then if(isPlayer(_target) == TRUE and isSkulled(_target)) then if(selfFollow(_target)) then target = _target if(target ~= prevTarget) then selfSay("We do not tolerate people like you here!") end prevTarget = target break end end end end end end function onCreatureAppear(cid) if(cid == getNpcCid()) then --Wake up call origPos = getNpcPos() --origLook = getCreatureDir(cid) end end function onCreatureDisappear(cid) if(target == cid) then goToOrigPos() end end function onCreatureMove(creature, oldPos, newPos) -- end function onThink() updateTarget() if(target == 0) then return end local playerPos = getCreaturePosition(target) local myPos = getNpcPos() if(myPos.z ~= playerPos.z) then goToOrigPos() return end if(math.abs(myPos.x - origPos.x) > maxChaseDistance or math.abs(myPos.y - origPos.y) > maxChaseDistance) then selfSay("I'll catch you next time.") goToOrigPos() return end if(lastAttack == 0) then lastAttack = os.clock() end if(os.clock() - lastAttack > followTimeout) then --To prevent bugging the npc by going to a place where he can't reach selfSay("You got me this time, but just wait.") goToOrigPos() return end if( (math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -200, -300, CONST_ME_BLOCKHIT) lastAttack = os.clock() end end Bem a função updateTarget faz ele apenas fixar a target (alvo) players com skull white ou red. Então deixe ela para outro dia. Vamos verificar a onThink function onThink() updateTarget() if(target == 0) then return end local playerPos = getCreaturePosition(target) local myPos = getNpcPos() if(myPos.z ~= playerPos.z) then goToOrigPos() return end if(math.abs(myPos.x - origPos.x) > maxChaseDistance or math.abs(myPos.y - origPos.y) > maxChaseDistance) then selfSay("I'll catch you next time.") goToOrigPos() return end if(lastAttack == 0) then lastAttack = os.clock() end if(os.clock() - lastAttack > followTimeout) then --To prevent bugging the npc by going to a place where he can't reach selfSay("You got me this time, but just wait.") goToOrigPos() return end if( (math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -200, -300, CONST_ME_BLOCKHIT) lastAttack = os.clock() end

    Explicando cada if.

    - Primeiro ele checa se ele tem target, se não tiver recomeça o ontarget
    - Segundo se ele verifica se o player está no mesmo andar que ele (coordenada z) se não tiver volta pro começo
    - Terceiro ele verifica se o player está muito longe (distancia maxima especificada acima), caso esteja ele fala
    mais ou menos "te pego na proxima" e volta pro seu respawn.
    - Quarto Ele muda seu ultima attack para o tempo atual do servidor
    - Quinto Ele verifica se ja passou o "tempo de descanso dele)
    - Se o tiver na posição certa de ataque, ele mete o sabugo no player espacando ele. Até o player morrer ou fugir.


    Entederam a logica ? Não !? Tudo bem. Vai treinando...
    Sinceramente esse npc é o mais complexo que ja vi.
    Eu entendi ele, porém não tenho animo de refaze-lo xD

    É Isso.


    Creditos : Tibiaa4e ( 99%) (Por Fazer).

    xFatality ( 1% ) (Por trazer ao TK).


    Obrigado,
    Abraços.
    Da para você fazer tudo do LUA no XML, porém eu acho estranho e apenas frescura do Jiddo e dos Developers do TFS (não sei developer em Português) Caso seja curioso olhe nos arquivos bankmax.xml, merchant.xml e postman.xml que estão em npc/lib Bem a parte XML já acabo, ou seja, ela é muito simples. NPCS EM LUA Aqui é a parte legal do npc na qual até certos scripters novos fazem coisas desnecessarias ou que pioram... A base do arquivo usando Jiddo System é Ai sempre virá uma bp cheia dos item especificado. Caso não saiba ao clicar com o direito no TRADE e usar buy with backpack virá com isso ai Essa é a parte facil até agora tentarei pensar aqui 25 minutos um jeito de explicar muita coisa xD NPCS de Missões Bem aqui ensinarei a fazer npcs de missões, isso mesmo até mesmo aqueles de post office, paradox (que eu até ja fiz) Como sempre ensinarei a logica, ou seja, darei conhecimento não ideias Assim já para ter uma ideia de um npc maior... É só seguir essa base... Vamos criar um passo a passo para que não compreendeu. NPCs tutoriais Situação : O npc Valdemar quer que você entregue uma carta a irmã dele chamada Clarice. Pense. Ele irá dar uma carta, e algo que controle se você ja recebeu a carta. Porque se você deu calote uma vez Que não se repita, ou seja, um storage value. Que será o 2411 (bem masculo) Caso você não tenha storage -1 e nem 2 só pode ser 1 (no caso dessa quest) então ele manda você termina o serviço PELO AMOR DE DEUS, SEMPRE ESTRUTURE SEU SCRIPT, SE NÃO VOCÊ IRÁ SE CONFUDIR COM ESSE SHOW DE ELSE E IF. Isso é a vantagem de se usar o Jiddo System, pois diminuiu a confusão. Porém como ja disse, é coisa de preguiçoso Mais cada um com o seu né... Aqui acaba o npc de missões. Eu expliquei apenas a parte dos ifs e elseifs. Isso é simples, agora depende de sua capacidade e criatividade. Melhor maneira de aperfeiçoar ? fazendo varios!!! Eu odeio npcs, quase morri de raiva de ter que fazer esses (serio ) Espero que aproveitem xD. Funções de NPcs Se você leu esse tuto até aqui, é porque não entendeu nada, ou seu interesso muito, por npcs. Lembra dos npc base ?. Pelo que você ja perceberam eu odeio npcs, então não usei muitas dessas funções. No tfs tem o npc cityguard que ataca todos os red skull que aparecem em seu raio. Vamos estuda-lo e aprender juntos!!! function onCreatureAppear(cid) if(cid == getNpcCid()) then --Wake up call origPos = getNpcPos() --origLook = getCreatureDir(cid) end end Quando a criatura aparece ele chama a função getNpcCid que checa o player que o npc está focado. Ai a variavel origPos vira a coordenada que ele está no momento. function onCreatureDisappear(cid) if(target == cid) then goToOrigPos() end end Quando o player sai da tela, ele verifica se o target (player que ele está focado também!?) é um player Se for ele volta para a posição anterior local function isSkulled(cid) local skullType = getPlayerSkullType(cid) if(skullType >= 3) then return true end return false end Essa função seria a base do npc, ele segue apenas players com skull. Poderiamos mudar essa função para ele seguir apenas player druids ? Claro!!! Como é um tutorial mudar o nome da função iriamos que remodelar todo o script (enche o saco) vamos apenas mudar dentro da função local function isSkulled(cid) local vocType = getPlayerVocation(cid) if(vocType== 2) or (vocType == 6) then return true end return false end Mudando só isso os druid iriam sofrer na mão desses npcs xD Da para fazer ele atacar apenas monstros ? (acho que sim) local function isSkulled(cid) local idType = isPlayer(cid) if (idType ~= 1) then return true end return false end No caso se for diferente de 1 ele arrebenta de magia. Teste essas modificações. Porém a ideia base é entender as funções e não só modifica-las. Pelo contrato da SVN tudo que você faz a partir dela é conteúdo livre e de total modificação. Porém tenha bom senso que não é facil fazer scripts assim. Então sempre mantenham os creditos, principalmente Se você modificou
  14. Obrigado
    Tyrisfall deu reputação a BrunoWots em Global Full 7.6, 7.7 e 7.4 sqlite acc 1/1   
    ⚫ Olá, venho aqui trazer um global (servfull 7.60 e 7.72 cipsoft) também roda 7.4, download junto com a distro compilada de graça, roda em sqlite, é só abrir e rodar o ot !!!!
     
     
                             Senha do account name é 1/1                          
                            senha do god é 111111/222222                         
    RealOTS
    ✔️-Tasks system 100%
    ✔️-CipSoft Engine
    ✔️-All Quests 100%
    ✔️-All NPCs 100%
    ✔️-Real Monsters 100%
    ✔️-Caves 100%
    ✔️-Real Damage 7.6
    ✔️-Trainer off
    ✔️-Mensage loot
    ✔️-Shared Experience
    ✔️-Poi + Acess 100%
    ✔️-Houses 100%
    ✔️-Livros e histórias 100%
    ✔️-Command /buy, !buy.
     
    ⚡ -Items old
    ⚡ - Monstros e Outfits
     
     
    ⚫ Algumas imagens do server, quests e hunts.
     
     
     
     
    ⚫ Downalod e Scamm:
    https://goo.gl/ztc2nP
    https://goo.gl/N52pP2
     
    Atualização:
    * Treiner offline adicionado no templo de thais junto com o npc de task Oldman.

    *Acesso rápido a poi depois de terminar a segunda sala pelo teleport, caso você morra.

  15. Curtir
    Tyrisfall recebeu reputação de Jeff Delay em Guild House   
    a questão do invite vc pode fazer ingame mesmo
    independente de ser guildhall ou não.
    pra invitar todos de uma guild basta por @nome da guild no aleta sio
    os comandos também funcionam no aleta grav (pra controlar quem tem acesso a cada porta)
    acho que existem outros comandos mas eu não lembro aqui, deve ter tudo na wiki.
     
  16. Curtir
    Tyrisfall deu reputação a DdJs em [12.20+] Houses pack - build your city   
    Pack de Houses
    V 12.x
     
    Construa sua cidade apenas abrindo espaços e adicionando as casas já prontas! Basta copiar e colar.
    Total de 20 casas no mesmo estilo com modelos diferentes.
     
    Download:
    Houses.otbm
     
    Imagens:
     
  17. Curtir
    Tyrisfall deu reputação a Tricoder em Elves hunt   
    Tamanho: 72 KB.
    Categoria: Mapa.
    Versão: 10.31
    Créditos: Slec
    Download: Elves TibiaKing.com.rar
    Scan: VirusTotal
     
    Screenshot;










  18. Curtir
    Tyrisfall deu reputação a DdJs em [12x+] Babylon Teleports Room   
    Baylon Teleports Room
    V 12.20+
     
    Download:
    TeleportsRoom_V12.otbm
    Position [X: 1089 Y: 1034 Z: 5]
     
     
    RME + Client:
    Remere's Map Editor (11-12+) + Client.rar
     
     
    Imagens:
     
  19. Obrigado
    Tyrisfall deu reputação a DdJs em [10.98] (REVAMP) Hellgore - Goroma   
    Hellgore - Goroma (REVAMP)
    V 10.98
     
    [area onde spawna o boss Morgaroth]
     
    Download:
    hellgore.otbm
    Position: [X: 1021 Y: 1003 Z: 9]
     
    Imagens:
     
  20. Obrigado
    Tyrisfall deu reputação a penisagudo em (Resolvido)item se transforma em estatua dentro da mochila quando eu relogo meu char   
    @Tyrisfall 
     
    1 - Database:
    - Acesse sua database;
    - Clique em player_items.
     
     
    - Depois clique em Estrutura:
     
     
    - Na linha itemtype, clique para mudar:
     
    - Depois, em Tipo:
     
     
    - Altere para INT e valor 11:
     
     
    - O resultado final deverá ser esse:
     
     
    - O mesmo procedimento deverá ser feito para itemtype e count para a tabela player_depotitems, player_inboxitems e player_rewards.
    - Ou apenas executar essas queries na database > SQL:
     
    ALTER TABLE `player_items` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_depotitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_inboxitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_rewards` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; 2 - Créditos
    mattyx14 (queries SQL)
    penisagudo (tutorial)
  21. Gostei
    Tyrisfall deu reputação a amoxicilina em Bulgari city   
    cidade Bulgari
    Versão: 11.x
     
    Baixar.
    Varredura.
    Scan - Aquivo.
     
    Tipo: RAR
    Tamanho: 982.98KB
    senha do arquivo: tibiaking
     
    Imagem
    Não esqueça de deixa seu curti, assim ajuda a mostra que realmente gostou do meu conteúdo.
  22. Obrigado
    Tyrisfall deu reputação a luanluciano93 em [OTX3 8.60] STYLLER 2019   
    STYLLER 2019 - CUSTOM YOUROTS 
     
    Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pela engine OTX, resolvi criar um projeto de servidor styller usando a OTX3 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações.
     
    # Atualizações:
    → Atualizações
     
    # Informações do Servidor e Sistemas:
    → Versão: 8.60
    → Engine: sources OTX3 nas revisões atuais.
    → Cidades, sistemas e quests.
     
    # Créditos:
    • luanluciano93
    • GOD Bon (mapa yourots)
    • mattyx14 e TFS team (pela engine do servidor)
    • @leoloko12 (mapa styller)
    • e outros
     
    # Download:
    - Download-1.
     
    Entre no clube STYLLER ...


     
    É isso pessoal, espero que gostem 
  23. Gostei
    Tyrisfall recebeu reputação de Afronator em Silverhand Library   
    Silverhand Library
    Versão: 11.46
    Pos: x 1024, y 1036, z 7
    Download
    Scan

    primeira vez que to postando se tiver algo errado me avisa plz
     
     
     
  24. Obrigado
    Tyrisfall recebeu reputação de DdJs em Temple of Sacrifice | 10.98   
    é um belo mapa, parabéns!
    obg por compartilhar ♥
  25. Gostei
    Tyrisfall deu reputação a DdJs em Imperial Temple | 10.98   
    Imperial Temple
    Version: 10.98
     
    Imperial_Temple10.98.rar
    [Scan]
     
     
    Type: .RAR
    Size: 5KB
    Position(s): [X: 1017 Y: 1022 Z: 7]
    File password: tibiaking
     

     
    Images:
     
     
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo