Ir para conteúdo

zLockey9

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    zLockey9 recebeu reputação de Faisca em [Narutibia] Jinchuuriki System - Distro 0.4   
    No meu server esta dando o seguinte erro ( na foto acima ).
    nessa parte do Script ,
    return doAddCondition(cid, buff_bijuu) Se puder me ajudar Agradeço muito REP++
     
  2. Gostei
    zLockey9 recebeu reputação de Gabrielx17 em (Resolvido)Spell Izanami   
    O Izanami do meu server está assim:
     
    Creio que as posições no topo seja onde não será possível usar a spell
  3. Curtir
    Olá galera do TK !
    Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
     
    Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
     
    O que tem de diferente no NTO Hard ? 
    Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
     
    Veja algumas Imagens !
     
    O que tem nesse Pacote Full de Arquivos NTO Hard ? 
     
    Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor  IP Changer  
     
    DOWNLOAD  &  SCAN
     
     
    dbresetada.sql
  4. Curtir
    zLockey9 deu reputação a Dwarfer em (Resolvido)como por numeros quebrados na stage?   
    @guhcast Não fique com dúvidas, pergunte mesmo. Podem ter outras pessoas com a mesma dúvida que a sua.
    <stage minlevel="1" maxlevel="7" multiplier="12" /> <stage minlevel="8" maxlevel="50" multiplier="10" /> <stage minlevel="51" maxlevel="80" multiplier="8" /> <stage minlevel="81" maxlevel="100" multiplier="6" /> <stage minlevel="101" maxlevel="140" multiplier="1.5" /> <stage minlevel="141" maxlevel="200" multiplier="0.5" /> <stage minlevel="201" multiplier="0.05" /> Exemplifiquei os três últimos.
  5. Obrigado
    zLockey9 deu reputação a GamerGoiano em (Resolvido)[OTC] Tela buga ao entrar em teleporte   
    @zLockey9 Voce aumentou o tamanho da tela? se aumentou tamanho da tela tem que aumentar o network message max size no const.h da source 

    Também voce pode verificar no modulo game_things no things.lua, debaixo da function load abaixo de   local version = g_game.getClientVersion()
    Ve se tem:
    g_game.enableFeature(GameMagicEffectU16)
    g_game.enableFeature(GameDiagonalAnimatedText)

    Se não tiver os 2 enable feature, adiciona la e me fala se resolveu
  6. Curtir
    zLockey9 deu reputação a Jeanfersonsp em (Resolvido)bug no look e showvoc   
    Desativa o do Frag e o Jin look e dps apaga tudo do Showvoc e poe isso
  7. Obrigado
    zLockey9 deu reputação a Celulose em (Resolvido)[TFS-8.6] Erro no Mysql   
    SET GLOBAL max_allowed_packet = 16776192;  
    @zLockey9 
    ALTER TABLE `accounts` ADD `creation` INT NOT NULL DEFAULT 0 AFTER `email`;  
  8. Obrigado
    zLockey9 deu reputação a Celulose em (Resolvido)[TFS-8.6] Erro no Mysql   
    Mysql>
     
    ALTER TABLE `killers` ADD `war` INT(11) NOT NULL DEFAULT 0;
  9. Curtir
    zLockey9 deu reputação a Azzus22 em [[ Sistema de PET TFS 0.4 ]]   
    Fala galera do TK tudo belezura? Espero que sim com todo mundo...
    Peço caridosamente a moderação que me mova para a área correta caso eu tenha feito o post no lugar errado. ??
    Bom o que eu vim trazer na faixa para vocês é um sistema onde o jogador vai poder ter um PET que vai subindo até certo level e com isso vai ganhando mais força.
    Eu me baseei no sistema desse amiguinho aqui:
    @PsyMcKenzie
    Link para o Post do amiguinho. Onde eu vi que tava muito legal mas estavam faltando algumas verificações.
    Demorei para fazer esses scripts e toda a lógica mexendo apenas 2 horas por dia, por isso vou dar um alert:
    <<<< -------------------- >>>>
    "PAM: não me peça para mudar scripts ou adaptar de algum jeito pois eu não vou ter muito tempo para atender pedidos. Vou postar do jeito que está funcionando e se por acaso precisar de ajuste, peço para que outros scripters dêem a devida atenção. Obrigado pela compreensão amiguinhos ?"
    <<<< -------------------- >>>>
    Vamos lá, saiba que você vai ter que alterar várias partes de vários fontes, então deixa de preguiça e coloque a mão na massa...
    Espero que esse script incentive a continuação e aperfeiçõamento de mais desenvolvedores a trabalhar com a nossa comunidade.
     
    Na sua pasta de Movements Ex.: "Pasta do Ot Sever\data\movements" no arquivo movements.xml acrescente essas 2 tags:
    Na pasta scripts dentro da pasta Movements Ex.: "Pasta do Ot Server\data\movements\scripts" crie um arquivo com nome equippet.lua e cole isso dentro do arquivo
    Na pasta Actions Ex.: "Pasta do Ot Server\data\actions" no arquivo actions.xml cole a TAG:
    Na pasta Scripts em Actions Ex.: "Pasta do Ot Server\data\actions\scripts" crie um arquivo chamado catchpet.lua e cole isso dentro:
    Na pasta creaturescripts Ex.: "Pasta do Ot Server\data\creaturescripts" no arquivo creaturescripts.xml cole a TAG:
    No arquivo dentro da pasta Scripts em CreatureScripts Ex.: "Pasta do Ot Server\data\creaturescripts\scripts" com o arquivo login.lua aberto, procure por "registerCreatureEvent" e adicione abaixo de qualquer um, a seguinte linha de comando:
     
    Se o seu Ot server tiver o arquivo save.lua dentro da pasta de creaturescripts Ex.: "Pasta do Ot Server\creaturescripts\scripts\save.lua" você precisa adaptar o script abaixo para se adequar ao seu save.lua. caso seu ot server não tenha o arquivo save.lua apenas insira o script abaixo:
    Na pasta Monster Ex.: "Pasta do Ot Server\data\monster" no arquivo monster.xml você vai precisar inserir as tags dos pets que for adicionando, por exemplo no meu caso eu criei 5 níveis de pet e você vai entender porque na explicação mais a frente.
    Na pasta Scripts em Monster Ex.: "Pasta do Ot Server\data\monster\scripts" crie uma pasta chamada Pet e dentro dela o monstro deve ter o mesmo nome que está no arquivo "catchpet.lua" que criamos no começo do processo. Por exemplo no arquivo catchpet.lua que criamos o pet do Dragon Lord está definido como ["Dragon Lord Pet"] = {hp = 500, maxhp = 500, corpse = 7622, chance = 100, level = 0, experience = 0, basename = 'Dragon Lord Pet'} então o monstro deve ser Dragon Lord Pet seguido dos níveis: 0, 1, 2, 3, 4, 5, 6.
    Por exemplo dentro da pasta "Pasta do Ot Server\data\monster\scripts\Pet" tem que ter os monstros DragonLord Pet0.xml, DragonLord Pet1.xml, DragonLord Pet2.xml, DragonLord Pet3.xml
    ----------------------------------
    Na pasta lib Ex.: "Pasta do Ot Server\data\lib" acrescente no fim do arquivo 050-function.lua o script abaixo:
    Obs.: Esse script foi feito pelo amiguinho @Orochi Elf e ficou espetacular, parabéns cara... eu só precisei remover o local da variável item pq quando o script verificava itens na BP e nos Slots estava fechando o servidor. Mas o crédito é todo dele, ótimo desenvolvedor sem dúvida.
     Na pasta npc Ex.: "Pasta do Ot Server\data\npc" crie um arquivo com nome PetHealer.xml e acrescente o código abaixo:
    Na pasta Scripts de npc Ex.: "Pasta do Ot Server\data\npc\scripts" crie um arquivo com nome pethealer.lua e acrescente o código abaixo:
    Obs.: Esse script do TalkAlot não fui eu quem desenvolveu, foi alguém aqui do fórum mas tem muito tempo que eu peguei e uso e não lembro a quem devo os créditos, foi mal ai...
     
    Execute essa query no seu banco de dados:
    E agora finalmente a explicação do código:
    Bom primeiramente o sistema inicial estava utilizando actions e não movements, mas eu resolvi colocar como movements para evitar um pouco de transtorno na lógica apesar de não ter evitado muito...
    Bem, o sistema consiste em utilizar um item no corpse de um monstro morto para capturá-lo essa é a função do script: catchpet.lua
      as definições de monstros que podem ser capturados estão no objeto
    local mtrs = {
        ["Rat Pet"] = {hp = 500, maxhp = 1000, corpse = 2813, chance = 100, level = 0, experience = 0, basename = 'Rat Pet'},
        ["Dragon Lord Pet"] = {hp = 500, maxhp = 500, corpse = 7622, chance = 100, level = 0, experience = 0, basename = 'Dragon Lord Pet'}
    }
    Como podem ver o nome entre colchetes e o basename são iguais e tem que ser assim para não dar nenhum erro... o base name tem que ser o mesmo nome do monstro criado na pasta monster\Pet... na pasta como falei antes, o basename tem que ser acompanhado dos níveis no caso do Rat por exemplo, seria Rat Pet0.xml, Rat Pet1.xml, Rat Pet2.xml, até o nível que você determinar, esse sistema do jeito que está, habilita os pets até o nível 10.
    Os pets são como summons, então coisas relacionadas a ATK, DEF, Magias que os pets tem, tem que ser configuradas no arquivo do monstro. Por exemplo se eu quiser que um Rat nível 2 use UE, vou configurar isso no XML Rat Pet2.xml
    - hp e maxhp, são as configurações para o hp máximo e hp atual,
    - chance é a chance em % que o player tem de capturar o monstro,
    - corpse é o id do corpo que o player pode usar o item para capturar o monstro.
    na linha de comando "local itemcatch = doPlayerAddItem(cid, 9980, 1, false, 1, 3) -- Cristal que contem o monstro." o id 9980 é o item que vai armazenar as informações do pet e isso você pode mudar sem a necessidade de mexer no items.xml. 
    Obs.: Lembrando que se esse id for alterado, você precisa verificar nos fontes onde mais ele faz referência para esse id, por exemplo no save.lua na pasta data\creaturescripts\scripts
    Obs2.: não use itens stackáveis pois eles perdem a informação do pet quando você os movimenta, pelo menos nessa source que eu estou usando.
     
    O itemid definido na tag actions.xml é o item que vai ser usado na captura do monstro.
     
    No fonte do equippet.lua as informações cruciais são:
    Toda vez que que o pet é equipado com sucesso, uma linha é gravada na database com o xp do player atualmente, e quando desequipado com sucesso, essa linha é removida, e a diferença de exp adiquirida é acrescentada no Pet.
    Você pode alterar as condições de level do Pet dentro do método updateAttributes.
     
    O arquivo save.lua só foi alterado para avaliar algumas condições antes do player deslogar caso ele esteja com o pet.
     
    Para usar o pet, vc precisa estar com o item do pet capturado e colocar no slot da flecha, se as condições estiverem certas ele sumona o pet. Se o item for removido do slot e tiver com as condições corretas, ele remove o summon.
     
    O sistema não tem muitos efeitos especiais pois acredito que isso é uma coisa particular de cada Host.
    Se por acaso o pet for morto, o PetHealer pode trazê-lo de volta por uma quantia de 300k mas isso pode ser alterado no script é bem simples. Além disso o NPC PetHealer tem uma micro IA que explica como utilizar o Pet.
     
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Bom, espero que vocês gostem do sistema, testem e me avaliem nos comentários se tiverem algum problema e se for útil para você, da um REP++ ai ?
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
     
  10. Curtir
    zLockey9 deu reputação a Beeny em Extraindo sprite (pokepro, otpoke, etc)   
    eae, se n me engano esse rolê não funciona no gla/pxg. mas, tem outros jeitos de pegar lá tb
     
    links:
    ninjaripper - https://gamebanana.com/tools/download/5638
    dds converter - http://www.softsea.com/download/DDS-Converter.html
     
    scan:
    ninja ripper - https://www.virustotal.com/gui/file/60541e6a43661f0ee2e70c0a7cedb86d44a874e5376949db7a2e1f604fa5cdf1/detection
    dds - https://www.virustotal.com/gui/file/611d6bbb534b8a3210b2ca1e7954d6abc3055c6f2995833fbb04b6093f418263/detection
     
     
  11. Curtir
    zLockey9 deu reputação a Patrick Jean em Removendo Account Salt   
    Nome do Script: Removendo Account Salt
    Autor: Henke Rula
    Servidor Testado: OTX Server 9.8x e outras versões também serve
    Descrição: Mesmo tendo a opção no config.lua, não é retirado o salt do banco de dados.
    Então modifiquei nas sources forçando não criar o Salt na tabela.
    Requisitos: Sources do Servidor

    Abrir "iologindata.cpp" e procure por :
    query << "SELECT `name`, `password`, `salt`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accountId << " LIMIT 1"; E Troque por:
    query << "SELECT `name`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accountId << " LIMIT 1"; Logo abaixo verá essa opção que você deve remover:
    account.salt = result->getDataString("salt"); Procure por :
    query << "SELECT `id`, `password`, `salt`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `name` " << db->getStringComparer() << db->escapeString(name) << " LIMIT 1"; E troque por:
    query << "SELECT `id`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `name` " << db->getStringComparer() << db->escapeString(name) << " LIMIT 1"; Logo abaixo verá essa opção que você deve remover:
    account.salt = result->getDataString("salt"); Como podem verificar, eu removi o salt da consulta sql e removi a função também.
    O começo da consulta pode variar entre query e dbquery dependendo da sua distro.
     
    Procure por:
    password = salt + password; E troque por:
    password = password; E logo abaixo procure por:
    query << "INSERT INTO `accounts` (`id`, `name`, `password`, `salt`) VALUES (NULL, " << db->escapeString(name) << ", " << db->escapeString(password) << ", " << db->escapeString(salt) << ")"; E troque por:
    query << "INSERT INTO `accounts` (`id`, `name`, `password`) VALUES (NULL, " << db->escapeString(name) << ", " << db->escapeString(password) << ")"; A modificação é muito simples e 100% funcional e livre de bugs. (Testei e funcionou)
    Vale lembrar que essa modificação é muito útil para aqueles que querem ter seu servidor criando contas in-game ou por site.

    Estou aberto a sugestões e críticas construtivas.
  12. Curtir
    Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
     
    Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
    Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                   
    Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
    Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
     
    Downloads
    https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

    Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
     
  13. Curtir
    zLockey9 deu reputação a LeoTK em Códigos const.h,tools.cpp,000-constant prontos do 0 ao 700   
    Versão 8.54
    version 0.3.6 (Crying Damson)
     
    Ae galera estou compartilhando com vocês o código para quem for aumentar o limite de magic effects no servidor é trabalhoso então para ajudar a galera a não ficar horas fazendo resolvi trazer os códigos prontos xD
     
    Tópico atualizado 04/08/2018 as 23:57
    # Atualização
    Códigos atualizados do 427 para o 700
     
    const.h
     
     
    Tools.cpp
     
     
    000-constant.lua
     
     
    Espero que ajude alguém xD
     
  14. Curtir
    zLockey9 deu reputação a Makhai Drakon em [TUTORIAL] Como adicionar pokemons com {Icon System}.   
    Resolvi fazer este tutorial porque os que que encontrei estavam muito confusos e não entendi certas coisas.
     
    Programas utilizados:
    ObjectBuilder: http://www.4shared.com/rar/XsT3Kkgsba/ObjectBuilder034.html
    ItemEditor: http://www.4shared.com/file/232461654/31f90261/otitemeditor037.html
     
     
                                                                   [TUTORIAL] Como adicionar pokemons com {Icon System}.
     
     
    1- Abra o seu ObjectBuilder.
     
    2- Aperte Ctrl+O ou Clique em "File"/"Open".

     
    3- Clique em Browse.

     
    4- E abra a pasta onde fica seu tibia.spr e o tibia.dat.




     
    5- Caso for estendido marque a caixa.

     
    6- Após isto procure as outfit, corpse, ícone e portrait do pokemon desejado.







     
    obs: aconselho escrever os números em um bloco de notas

     
    7- Após isto abra o ItemEditor .
     
    8- Aperte Ctr+P ou Clique em "File"/"Preferences".

     
    9- Clique em Browse.

     
    10- E abra a pasta onde fica seu tibia.spr e o tibia.dat.




     
    11- Caso for estendido marque a caixa e confirme.

     
    12- Aperte Ctr+N ou Clique em "File"/"Open...".

     
    13- E abra a pasta onde fica seu item.otb.




     
    14- Crie 5 itens.

     
    15- Em Cliete ID coloque os IDs do portrait, corpse, 1 ícone on e 2 ícones off  que você pegou no ObjectBuilder.


     
    16- Deixe os atributos exatamente assim.
    Portrait

    Corpse

    Icone On

    Icone Use

    Icone Off

    obs: a partir daqui usara estes IDs 
    obs: aconselho escrever os números em um bloco de notas

     
    17- Por fim de save.
    .
     
    18- Agora vá em Data/Items e abra items.xml.
    Em algum local adicione isto!
    <item id="AAAAA" article="a" name="Icone."> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="BBBBB" article="a" name="Icone using"> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="CCCCC" article="a" name="Icone dead"> <attribute value="1" key="ispokeball"/> <attribute key="weight" value="100" /> <attribute key="slotType" value="feet" /> </item> <item id="DDDDD" article="a" name="EEEEE"> <attribute key="containerSize" value="10" /> <attribute key="decayTo" value="0" /> <attribute key="duration" value="300" /> </item> <item id="FFFFF" article="a" name="portrait"> <attribute key="weight" value="0" /> <attribute key="slotType" value="legs" /> </item> Em "AAAAA" coloque o ID do ícone on
    Em "BBBBB" coloque o ID do ícone use
    Em "CCCCC" coloque o ID do ícone off
    Em "DDDDD" coloque o ID do corpse
    Em "EEEEE" coloque fainted "nome do poke"
    Em "FFFFF" coloque o ID do portrait
     
    Salve e feche
     
    19- Agora vá em Data/Monster/Pokes 
    Copie alguma .xml e modifique o seu nome para o do pokemon desejado  depois abra-a
    <?xml version="1.0" encoding="UTF-8"?> <monster name="AAAAA" nameDescription="a BBBBB" race="CCCCC" experience="1500" speed="207" manacost="0"> <health now="270" max="270"/> <look type="DDDDD" head="90" body="100" legs="95" feet="113" corpse="EEEEE"/> <targetchange interval="2000" chance="0"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="1"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="97"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" chance="100" range="1" min="-50" max="-100"/> <attack name="Aqua Tail" interval="2805" chance="29" range="1"/> <attack name="Headbutt" interval="2705" chance="29" range="1"/> <attack name="Dragon Breath" interval="3040" chance="28" range="6"/> <attack name="Hyper Beam" interval="2899" chance="29" range="5"/> <attack name="Thunder Wave" interval="2993" chance="28" range="6"/> <attack name="Twister" interval="2852" chance="29" range="3"/> <attack name="Wing Attack" interval="3040" chance="28" range="6"/> <attack name="Thunder Punch" interval="2752" chance="29" range="1"/> <attack name="Fire Punch" interval="2952" chance="29" range="1"/> <attack name="Dragon Claw" interval="2900" chance="29" range="1"/> </attacks> <defenses armor="0" defense="0"> </defenses> <voices interval="5000" chance="10"> <voice sentence="FFFFF!"/> </voices> <loot> <item id="11449" chance="150" count="1" countmax="1"/> <item id="12159" chance="3000" count="1" countmax="1"/> <item id="13794" chance="10000" countmax="80"/> --snowball <item id="12275" chance="3000" count="1" countmax="1"/> <item id="12244" chance="70" count="1" countmax="1"/> <item id="12338" chance="10" count="1"/> --bag box --bag box </loot> <script> <event name="Spawn"/> </script> </monster> Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o ID da outfit do pokemon
    Em "CCCCC" coloque o a raça do pokemon
    Em "DDDDD" coloque o ID da outfit do pokemon  obs: no meu caso e 2241
    Em "EEEEE" coloque o ID corpse obs: no meu caso e 20758
    Em "FFFFF" coloque a fala do pokemon
    Lista de raças:
    fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost   Attacks Lembrando esses são os ataques que os pokemons selvagens soltara!   E possível ver os attacks em data/spells/scripts/ps   name = "Nome do attack" interval = "Intervalo para usar o attack" chance = Chance do attack ser acertado" obs: sempre deixe o melee 100 range = "Distancia mínima necessária para usar o attack"  
    Loot
     
    item id = "ID do item que será dropado"
    chance = "Chance do item ser dropado"
    count = "Mínimo de itens a ser dropado"
    countmax = "Máximo de itens a ser dropado"
     
    salve e feche
     
    20- Agora vá em Data/Monster e abra monster.xml
    Adicione esta tag
    1 - caso esteja em uma pasta
    <monster name="AAAAA" file="pokes/BBBBB/CCCCC.xml"/> 2 - caso apenas esteja na pasta pokes
    <monster name="AAAAA" file="pokes/CCCCC.xml"/> Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o nome da pasta onde ele esta
    Em "CCCCC" coloque o nome da .xml que você criou
     
    salve e feche
     
    21- Agora vá em Data/Lib e abra configuration.lua
     

    desça um pouco e se ver algo deste género
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {move1 = {name = "Aqua Tail", level = 10, cd = 12, dist = 1, target = 1, f = 50, t = "water"}, move2 = {name = "Thunder Wave", level = 12, cd = 16, dist = 1, target = 0, f = 70, t = "electric"}, move3 = {name = "Thunder Punch", level = 16, cd = 16, dist = 1, target = 1, f = 65, t = "electric"}, move4 = {name = "Fire Punch", level = 15, cd = 20, dist = 1, target = 1, f = 75, t = "electric"}, move5 = {name = "Dragon Claw", level = 22, cd = 16, dist = 1, target = 1, f = 60, t = "dragon"}, move6 = {name = "Dragon Breath", level = 40, cd = 20, dist = 1, target = 0, f = 80, t = "dragon"}, move7 = {name = "Twister", level = 46, cd = 24, dist = 1, target = 0, f = 80, t = "dragon"}, move8 = {name = "Wing Attack", level = 70, cd = 28, dist = 1, target = 0, f = 75, t = "flying"}, move9 = {name = "Hyper Beam", level = 70, cd = 24, dist = 1, target = 0, f = 190, t = "normal"}, move10 = {name = "Draco Meteor", level = 110, cd = 60, dist = 1, target = 0, f = 150, t = "dragon"}, }, Em "AAAAA" coloque o nome do pokemon
     
    Moves
    name = "Nome do attack"
    level = "Level mínimo para usar o attack"
    cd = "tempo para o attack recarregar"
    dist = "distancia mínima para usar o attack"
    target = "1 significa que precisa se alvo / 0 que não e necessário"
    f = "força do attack"
    t = "tipo do attack"
     
    Lista de tipos
    fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost
     

    Desça mais um pouco encontrara o fly
    caso seu pokemon tenha pegue o id da outfit do fly e subtraia 351 EX: 2242-351=1891
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {BBBBB, CCCCC}, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o ID do fly subtraído por 351 EX: 2242-351=1891
    Em "CCCCC" coloque a velocidade que dará
     
    obs: Surf e ride mesma coisa
     

    Desça mais um pouco encontrara o pokeballs
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {effect = 188, on = BBBBB, use = CCCCC, off = DDDDD, all = {BBBBB, CCCCC, DDDDD}}, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o ID do icon on
    Em "CCCCC" coloque o ID do icon use
    Em "DDDDD" coloque o ID do icon off
     

    Desça mais um pouco encontrara o icons
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = { on = BBBBB, off = CCCCC, use = DDDDD }, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o ID do icon on
    Em "CCCCC" coloque o ID do icon off
    Em "DDDDD" coloque o ID do icon use
     

    Desça mais um pouco encontrara o effectiveness mais não mecha nele
    Desça mais um pouco encontrara o pokes
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {offense = 4.5, defense = 10, specialattack = 12.2, vitality = 11.8, agility = 350, exp = 800, level = 80, wildLvl = 150, type = "ice", type2 = "ghost"}, Em "AAAAA" coloque o nome do pokemon
     
    offense = "offense que ganha por level"
    defense = "defense por level"
    specialattack = "special attack que ganha por level"
    vitality = "vida que o poke ganha pra cada vitality que tem"
    agility = "velocidade base dos pokes"
    exp = "experiência que dá a cada level que tem (somada a exp base, no xml do poke)"
    level = "level min pra usar o poke / offense base"
    wildlevel = "level que o pokemon selvagem será"
    type = "tipo do pokemon"
    type2 = "segundo tipo do pokemon" obs caso não tenha coloque no type"
     
    Lista de tipos
    fighting, normal, water, ground, rock, dark, psychic, flying, electric, poison, fire, ice, grass, dragon, bug, steel, ghost
     

    Desça mais um pouco encontrara o fotos
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = BBBBB, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o ID do portrait
     

    Desça mais um pouco encontrara o pokecatches
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {chance = BBBBB, corpse = CCCCC}, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque a chance de capturar o pokemon obs quanto maior o numero mais difícil fica
    Em "CCCCC" coloque o ID corpse
     

    Desça mais um pouco encontrara o newpokedex
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {gender = 500, level = 80, storage = 100, stoCatch = BBBBB}, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque 1 e um numero depois do pokemon anterior Ex o anterior é 666456 então coloque 666457
     
    gender = "género género do pokemon 500 = 50% de ser m ou f, 75 = 75% de ser f 25 = 25% de ser f, -1 = sem sexo  " obs se o server não tiver gender system não faz diferença
    level = "level min pra usar o poke " obs apenas afetará o pokedex
    storage = "Não mexa!"
    stoCatch = "coloque um numero depois do pokemon anterior Ex o anterior é 666456 então coloque 666457"
     

    Desça mais um pouco encontrara o oldpokedex
    Vá ate o ultimo e cole este código.
    {"AAAAA", BBBBB, CCCCC}, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o level min pra usar o poke
    Em "CCCCC" coloque o coloque um numero depois do pokemon anterior Ex o anterior é 1290 então coloque 1291
     
    10ª
    Desça mais um pouco encontrara o poevo
    Caso o pokemon que será adicionado tenha uma anti evolução
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {level = 150, evolution = "BBBBB", count = 1, stoneid = CCCCC, stoneid2 = DDDDD}, Em "AAAAA" coloque o nome da anti evolução pokemon
    Em "BBBBB" coloque o nome da evolução do pokemon
    Em "CCCCC" coloque o ID da stone que ira evoluir o pokemon
    Em "DDDDD" coloque o ID do segundo tipo stone que ira evoluir o pokemon obs opcional deixe 0 se não tiver stone
     
    Para saber o ID das stones desça um pouco o configuration.lua que terá uma lista
     
    level = "level mínimo para evoluir o pokemon"
    evolution = "nome do pokemon evoluído"
    count = "quantidade de stones necessárias"
    stoneid = "ID da stone que ira evoluir o pokemon"
    stoneid2 = "ID do segundo tipo stone que ira evoluir o pokemon" obs opcional
     
     
    11ª
    Desça mais um pouco encontrara o spcevo
    Caso o pokemon que será adicionado tenha uma evolução especial Ex gloom ele pode evoluir para vileplume ou bellossom
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = {[1] = {level = 65, evolution = "BBBBB", count = 1, stoneid = CCCCC, stoneid2 = DDDDD}, [2] = {level = 65, evolution = "EEEEE", count = 1, stoneid = FFFFF, stoneid2 = GGGGG}}, Em "AAAAA" coloque o nome da anti evolução pokemon
    Em "BBBBB" coloque o nome da 1ª evolução do pokemon
    Em "CCCCC" coloque o ID da stone que ira evoluir o 1º pokemon
    Em "DDDDD" coloque o ID do segundo tipo stone que ira evoluir o 1º pokemon obs opcional deixe 0 se não tiver stone
    Em "EEEEE" coloque o nome da 2ª evolução do pokemon
    Em "FFFFF" coloque o ID da stone que ira evoluir o 2º pokemon
    Em "GGGGG" coloque o ID do segundo tipo stone que ira evoluir o 2º pokemon obs opcional deixe 0 se não tiver stone
     
    Para saber o ID das stones desça um pouco o configuration.lua que terá uma lista
     
    level = "level mínimo para evoluir o pokemon"
    evolution = "nome do pokemon evoluído"
    count = "quantidade de stones necessárias"
    stoneid = "ID da stone que ira evoluir o pokemon"
    stoneid2 = "ID do segundo tipo stone que ira evoluir o pokemon" obs opcional
     
    12ª
    Desça mais um pouco encontrara o gobackmsgs mais não mecha nele
    Desça mais um pouco encontrara o specialevo
    Caso o pokemon que será adicionado tenha uma evolução especial Ex gloom ele pode evoluir para vileplume ou bellossom
     
    specialevo = {"Poliwhirl", "Gloom", "Tyrogue", "Eevee", "AAAAA"} Em "AAAAA" coloque o nome da anti evolução pokemon
     
    13ª
    Desça mais um pouco encontrara o specialabilities
    Caso queira colocar alguma habilidade no pokemon coloque
    Em "AAAAA" coloque o nome da anti evolução pokemon
     
    Coloque nas habilidades desejadas
     
    14ª
    Desça mais um pouco encontrara o auraSyst mais não mecha nele
    Desça mais um pouco encontrara o hitmonchans mais não mecha nele
    Desça mais um pouco encontrara o headbutt mais não mecha nele
    Desça mais um pouco encontrara o lookClans mais não mecha nele
    Desça mais um pouco encontrara o youAre mais não mecha nele
    Desça mais um pouco encontrara o passivesChances
    Caso queira colocar alguma especial no pokemon coloque
    Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque a chance de sair a passiva
     
    15ª
    Desça mais um pouco encontrara o pokesPrice
    Vá ate o ultimo e cole este código.
    ["AAAAA"] = BBBBB, Em "AAAAA" coloque o nome do pokemon
    Em "BBBBB" coloque o preço que o pokemon será vendido no npc
     
    salve e feche
     
    22- Agora vá em Data/Movements/ e abra o movements.xml
     

    Logo no começo voçe vera o Icone System
     
    Em <movevent type="Equip" itemid=
    Va ate o final da lista  coloque o id o ícone on-id do ícone off;             Ex 20740-20742;
    Ficara assim
     

    Em <movevent type="DeEquip
    Va ate o final da lista  coloque o id o ícone on-id do ícone off;             Ex 20740-20742;
    Ficara assim
     
    23- Agora vá em Data/Actions/ e abra o actions.xml
     
    Procure por Icone System
    Em <action itemid=
    Va ate o final da lista  coloque o id o ícone on-id do ícone off;             Ex 20740-20742;
    Ficara assim
     
    24- Caso tenha adicionado evolução vá em Data/Actions/Scripts e abra o evolution.lua
     
    Em local types =
    Vá ate o final da lista da stone que evolui o pokemon coloque o nome da anti evolução Ex , "Spearow" obs caso for 2 stones diferentes adicione nas 2
    Ficara assim
     
    25- Seja feliz
     
    Obrigado pela atenção qualquer duvida comente
    Caso ajudei REP+
    Creditos: 100% Ckfox
  15. Gostei
    zLockey9 recebeu reputação de LeoTK em NPC reconhecendo item por ITEMID e nao pela sprite   
    Será mais fácil você adicionar a mesma Sprite no client assim cada item pode usar um ID de Sprite diferente porém com a mesma imagem.
    Um exemplo na imagem ( cada item usará 1 sprite e não a mesma ?

    Ex: Item 1234 = sprite 10700 , item 1235 = sprite 10701 ...
  16. Curtir
    zLockey9 deu reputação a Zoakly em Sprites do NTOLost e derivados!!   
    Bom, vim aqui postar algumas sprites que tenho guardada aqui no PC elas iriam para meu projeto porem um AMIGO as vendeu para o Arkamed...
    E pensei porque não ferrar com o Arkamed?
     
    PRINTS
     
    DOWNLOAD'S
     
    PNG 
     
     
    Créditos
     
    REP+ amigos
  17. Obrigado
    zLockey9 deu reputação a L3K0T em (Resolvido)[Pedido] Efeito no Corpo   
    function onDeath(cid) local efeitom = 614 local efeitof = 615 if getPlayerSex(cid) == 1 then doSendMagicEffect(getPlayerPosition(cid), efeitom) else doSendMagicEffect(getPlayerPosition(cid), efeitof) end doRemoveCreature(cid) return TRUE end male e female.
     
    tag:
     
    <event type="death" name="Death" event="script" value="morto.lua"/>  
     
     
     
  18. Gostei
    zLockey9 recebeu reputação de King Laker em (Resolvido)Spell Izanami   
    @King Laker Ah claro .
     
    data/creaturescript/script/izanami.lua
    data/creaturescript/script/login.lua
    data/creaturescript/creaturescript.xml
    Se faltar algo é só me marcar e dizer
  19. Obrigado
    zLockey9 deu reputação a Gengo em (Resolvido)[Pedido] Skin System   
    Eai mano blz, vê se este script lhe atende suas necessidades ou pelo menos te de o caminho das pedras.
     
    Na pasta do seu servidor data/talkactions/script crie um arquivo com um nome skin.lua e coloque o seguinte codigo:
     
    Agora só registrar no talkactions.xml no arquivo  data/talkactions/talkactions.xml coloque a seguinte tag:
    Espero que lhe ajude.
     
    OBS: Altere o itemId e outfitId de acordo com o seu servidor.
     
  20. Curtir
    zLockey9 deu reputação a Absolute em [UP-LEVEL] Recompensa ao subir de level   
    Fala TKZIANOS de plantão WTF? AUEHAUHEA Mas ok...
     
    Venho hoje trazer a vocês um sistema de ganhar uma recompensa ao conquistar determinado nível (Configurável)
     
     
    Como funciona?

    Quando o jogador conquistar determinado level ele recebe como recompensa X item ou GOLD!
    Mais Absolute, o cara vai ficar se matando e upando de novo para ficar pegando a recompensa... NÃO! Quando o player conquista o level ele recebe uma STORAGE, essa storage faz com que salve isto, ou seja faz com que marque que o jogador já recebeu, se ele tentar burlar o sistema ele não vai receber pelo fato da tal STORAGE já estar gravada nele =p
     
     
     
    Em data/creaturescripts/scripts crie um arquivo chamado uplevelabsolute.lua e coloque o seguinte dentro:
     
    function onAdvance(cid, skill, oldLevel, newLevel) local config = { [50] = {item = 2160, count = 5}, [100] = {item = 2160, count = 15}, [150] = {item = 2160, count = 20}, [200] = {item = 2160, count = 25}, [250] = {item = 2160, count = 30}, [300] = {item = 2160, count = 50}, [350] = {item = 4891, count = 1}, [400] = {item = 4892, count = 1}, } if skill == 8 then for level, info in pairs(config) do if newLevel >= level and (getPlayerStorageValue(cid, 30700) == -1 or not (string.find(getPlayerStorageValue(cid, 30700), "'" .. level .. "'"))) then doPlayerAddItem(cid, info.item, info.count) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Parabéns, você atingiu o level "..newLevel.." e ganhou "..info.count.." "..getItemNameById(info.item)..".") local sat = getPlayerStorageValue(cid, 30700) == -1 and "Values: '" .. level .. "'" or getPlayerStorageValue(cid, 30700) .. ",'" .. level .. "'" setPlayerStorageValue(cid, 30700, sat) end end end return TRUE end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha:
    <event type="advance" name="UpAbsolute" event="script" value="uplevelabsolute.lua"/> Em data/creaturescripts/scripts/login.lua abaixo de registerCreatureEvent(cid, "Mail") adicione a seguinte linha:
    registerCreatureEvent(cid, "UpAbsolute") Pronto, você implantou o sistema em seu servidor.

     

    Como configurar:
    [50] = {item = 2160, count = 5}, [50] = level que o player vai receber a tal recompensa
    2160 = item que o player vai receber, no caso 2160 é o Crystal Coin
    count = 5 = quantidade do item, no caso 5 Crystal Coins
     
     
     
    Observação: Ao atingir o level o player receberá uma mensagem e o prêmio estará diretamente em sua backpack.

     
     
     
    Qualquer dúvida peço que poste =D
     
     
     
    Até o próximo sisteminha bb's.
  21. Curtir
    zLockey9 deu reputação a DdJs em Dark Complex | Cave Hunt | 8.60   
    Cave hunt - Dark Complex.
     
    Download: Here
     
    Scan: Here

    Imagens:
     

     
     

     
     

     
     

     

     

     
     

     

     

     

  22. Obrigado
    zLockey9 deu reputação a MatheusVidaLoka em [Actions] Novo gold   
    Fala galera do Tibia King, hoje venho trazer um actions a vocês, queria dizer que essa action já é velha, mas dei uma olhada no TK e não vi nada a respeito da action, então decidi postar para vocês.




    Qual a função da Action?



    É um novo tipo de gold que cada um vale 1kk, funcionando normal nas compras e vendas de itens em npcs, e nas trocas de crystal coin para o golda nugget (novo gold).




    Bom vamos ao script.




    Vá em data/actions/scripts e abra o arquivo crystal.lua, apague tudo o que está dentro, logo em seguida cole o script abaixo:









    Traduzindo:
    Vermelho: É o id da crystal coin, e a quantidade a ser trocada por 1 gold nugget (Novo Gold).
    Azul: É o id da gold nugget, e a quantidade de gold nugget.




    Logo em seguida, vá novamente em data/actions/scripts copie qualquer arquivo.lua e cole, em seguida renomeie-o para "goldnuggets" sem aspas, abra-o, apague tudo, e cole o script abaixo.




    Traduzindo:
    Laranja: É o que vai dizer quando o player trocar 1 gold nugget por 100 crystal coins.
    Verde: É o id da crystal coin, e a quantidade equivalente a 1 gold nugget.



    Logo em seguida, abra data/actions/actions.xml e adicione a tag abaixo.









    Traduzindo:
    Rosa: É o id do gold nuggets.
    Azul: O nome do arquivo.lua que você salvou.




    Depois disso abra data/items/items.xml, aperte CTRL + F, e digite 2157, ai você vai achar o item Gold Nugget que vai estar assim:








    Substitua tudo por isso:



    <item id="2157" article="a" name="gold nugget" plural="gold nuggets">
    <attribute key="weight" value="10"/>
    <attribute key="worth" value="1000000" />




    Traduzindo:
    Vermelho: Peso do gold nugget.
    Azul: Valor do item (como 1 crystal coin = 10k , 1 gold nugget = 1kk)




    Logo depois vá data/actions/scripts/other e abra o arquivo changegold.lua, susbistitua tudo oque está la dentro por esse script a seguir, e salve:




    -- By MatheusVidaLoka
    local coins = {
    [iTEM_GOLD_COIN] = {
    to = ITEM_PLATINUM_COIN, effect = TEXTCOLOR_YELLOW
    },
    [iTEM_PLATINUM_COIN] = {
    from = ITEM_GOLD_COIN, to = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_LIGHTBLUE
    },
    [iTEM_CRYSTAL_COIN] = {
    from = ITEM_PLATINUM_COIN, to = 2157, effect = TEXTCOLOR_LIGHTBLUE
    },
    [2157] = {
    from = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_TEAL
    }



    }



    function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then
    return false
    end



    local coin = coins[item.itemid]
    if(not coin) then
    return false
    end



    if(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then
    doChangeTypeItem(item.uid, item.type - item.type)
    doPlayerAddItem(cid, coin.to, 1)
    doSendAnimatedText(fromPosition, "$$$", coins[coin.to].effect)
    elseif(coin.from ~= nil) then
    doChangeTypeItem(item.uid, item.type - 1)
    doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX)
    doSendAnimatedText(fromPosition, "$$$", coins[coin.from].effect)
    end
    return true
    end



    Traduzindo:
    Vermelho: É o id do Gold Nugget.




    Por fim vá em data/actions/actions.xml, pule uma linha qualquer e cole isso, e salve:



    <action itemid="2157" event="script" value="other/changegold.lua"/>




    Traduzindo:
    Azul: É o id do gold nugget.
    Verde: O nome do arquivo que você salvou.

    Server testado em Ot 8.60 e funcionou corretamente.



    Creditos:



    MatheusVidaLoka



    JFLNT




    Se enfringi alguma regra do TK por favor me reporte.




    Desculpe-me pelos mal usos das ferramentas do TK (quotes,spoiler,CODES,etc) pois estou com certos problemas.

  23. Obrigado
    zLockey9 deu reputação a BrunoMaia em Old Tibia tirando limite de 255 efeitos   
    Foi testado no TheForgottenServer 0.3.6 no Tibia 8.54
     
    Como o client já está modificado, precisamos modificar a parte do servidor que envia os dados para o client.
    Vamos modificar dois métodos, addMagicEffect e sendMagicEffect.
    Entre na sua source 0.3.6
    Encontre o arquivo protocolgamer.cpp
    Você vai encontrar esse código
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint8_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddByte(type + 1); } Percebeu esse parametro uint8_t type?
    Vamos modificar para uint16_t type.
    Mas isso não vai adiantar nada se o msg->AddByte(type + 1) continuar desse jeito...
    Modifique ele para msg->AddU16(type + 1).
    O código modificado deve ficar desse jeito
     
    void ProtocolGame::AddMagicEffect(NetworkMessage_ptr msg,const Position& pos, uint16_t type) { msg->AddByte(0x83); msg->AddPosition(pos); msg->AddU16(type + 1); } Você já deve ter pegado a lógica...
    Onde tiver um método addMagicEffect com o parametro uint8_t type, tem que trocar por uint16_t type, o mesmo serve para sendMagicEffect.
    Mas como sei que tem pessoas que não gostam de trabalhar um pouco, vamos continuar com os arquivos para modificar.
    No mesmo arquivo procure por esse código
    void ProtocolGame::sendMagicEffect(const Position& pos, uint8_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } Temos alguém conhecido nos parametros, o uint8_t type, já sabemos o que devemos fazer, modifique ele para uint16_t type,
    Código deve está desse jeito
    void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type) { if(type > MAGIC_EFFECT_LAST || !canSee(pos)) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); AddMagicEffect(msg, pos, type); } } As alterações desse arquivos terminaram, salva as alterações.
    Vamos para outro arquivo, o protocolgamer.h
    Procure por esse código
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint8_t type); Novamente troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void AddMagicEffect(NetworkMessage_ptr msg, const Position& pos, uint16_t type); Procure por esse código
     
    void sendMagicEffect(const Position& pos, uint8_t type); Troque o uint8_t type por uint16_t type
    Código devera ficar desse jeito
    void sendMagicEffect(const Position& pos, uint16_t type); Salve as alterações e vamos para o outro arquivo, está cançado de modificar os códigos? é assim mesmo, se quer alguma coisa tem que se esforçar por ela.
    Vamos para o arquivo game.cpp
    Procure por esses códigos
    void Game::addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Troque os parametros uint8_t effect por uint16_t effect
    Dexando-os assim
    void Game::addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode /* = false */) { if(ghostMode) return; const SpectatorVec& list = getSpectators(pos); addMagicEffect(list, pos, effect); } void Game::addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode/* = false*/) { if(ghostMode) return; Player* player = NULL; for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it) { if((player = (*it)->getPlayer())) player->sendMagicEffect(pos, effect); } } Salve as alterações e vamos para o outro arquivo, game.h
    Procure por esse códigos, está ficando repetitivo, mas é assim mesmo
    void addMagicEffect(const Position& pos, uint8_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint8_t effect, bool ghostMode = false); Troque o uint8_t effect por uint16_t effect
    Código tem que ficar desse jeito
    void addMagicEffect(const Position& pos, uint16_t effect, bool ghostMode = false); void addMagicEffect(const SpectatorVec& list, const Position& pos, uint16_t effect, bool ghostMode = false); Essa foi rápido, salve as alterações e vamos para o outro arquivo, player.h
    Procure por esse código
    void sendMagicEffect(const Position& pos, uint8_t type) const Troque por esse código
    void sendMagicEffect(const Position& pos, uint16_t type) const Salve as alterações, esse foi o último arquivo
    Agora compile!
    Uma coisa que você deve saber, se você tentar entrar com o client que não esteja esperando valores do tipo uint16 e algum efeito for executado, vai da um erro no client, não da para jogar...
    Vamos baixar o client modificado.
     
    Download cliente com as seguintes configurações.
    Port:      7171
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Download cliente com as seguintes configurações.
    Port:      7272
    IP:         127.0.0.1
    Version: 8.54
    Clique aqui para baixar esse cliente
    Virus total desse client
     
    Modificações dos clientes foram feitos por mim.
    Reporte qualquer bug que ocorrer.
    Esse tutorial ensina como tirar o limite de 255 efeitos do tibia, se você não tiver mais de 255 efeitos colocados em sua source, então coloque para testar, não precisa colocar agora, e se você quiser pode colocar depois e já deixar seu client preparado para suporta mais de 255 efeitos.
    Tutorial para adicionar efeitos na sua source.
     
    Não deixe de agradecer...
  24. Obrigado
    zLockey9 deu reputação a Garou em Account Manager - Opção Manager   
    Nome: manager
    Tipo: C++
    Autor: Oneshot



    Estas são edições nas sources para criação de uma nova opção no vocations.xml que ativa ou desativa a escolha de certas vocações no Account Manager integrado aos servidores.



    Em vocations.h, procure por:


    bool attackable, needPremium; Substitua por: bool attackable, needPremium, manager; Procure por: bool isPremiumNeeded() const {return needPremium;} void setNeedPremium(bool v) {needPremium = v;} Adicione logo abaixo: bool isManagerOption() const {return manager;} void setAsManagerOption(bool v) {manager = v;} Em vocations.cpp, procure por: if(readXMLString(p, "needpremium", strValue)) voc->setNeedPremium(booleanString(strValue)); Adicione logo abaixo: if(readXMLString(p, "accountmanager", strValue) || readXMLString(p, "manager", strValue)) voc->setAsManagerOption(booleanString(strValue)); Procure por: needPremium = false; Adicione abaixo: manager = true; Finalmente, em player.cpp, procure por: if(it->first == it->second->getFromVocation() && it->first != 0) Substitua: if(it->first == it->second->getFromVocation() && it->first != 0 && it->second->isManagerOption() == true) Ainda em player.cpp, procure por: if(checkText(text, tmp) && it != Vocations::getInstance()->getLastVocation() && it->first == it->second->getFromVocation() && it->first != 0) Substitua: if(checkText(text, tmp) && it != Vocations::getInstance()->getLastVocation() && it->first == it->second->getFromVocation() && it->first != 0 && it->second->isManagerOption() == true) Recompile e seja feliz. O modo de uso é simples, no vocations.xml, basta escolher a vocação que você quer que não apareça no Account Manager, por exemplo: <vocation id="9" name="Fighter" description="a fighter" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="9"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation> E adicionar a opção manager com valor 0 ou 1 para não aparecer ou aparecer, respectivamente. <vocation id="9" name="Fighter" description="a fighter" needpremium="0" gaincap="25" gainhp="15" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="2" manamultiplier="3.0" attackspeed="2000" soulmax="100" gainsoulticks="120" fromvoc="9" manager="0"> <formula meleeDamage="1.0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.1" club="1.1" sword="1.1" axe="1.1" distance="1.4" shielding="1.1" fishing="1.1" experience="1.0"/> </vocation>


  25. Obrigado
    zLockey9 deu reputação a Storm em (Resolvido)Salvar Vocation   
    @zLockey9 Coloquei para relogar o player e evitar esse problema ;
    function onUse(cid, item, frompos, item2, topos) if getVocationInfo(getPlayerVocation(cid)).name == "Madara" then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ja é um madara!") return false else doPlayerSetVocation(cid, 14) doCreatureSay(cid, "Madara Owns!!", 19) doSendMagicEffect(getCreaturePosition(cid), 224) doRemoveCreature(cid) doCreatureChangeOutfit(cid, {lookType = 452}) setPlayerStorageValue(cid, 16200, 1) setPlayerStorageValue(cid, 300, (getPlayerVocation(cid))) doRemoveItem(item.uid) return true end return true end  

Informação Importante

Confirmação de Termo