Ir para conteúdo

Ayron5

Barão
  • Total de itens

    239
  • Registro em

  • Última visita

  • Dias Ganhos

    7

Histórico de Reputação

  1. Upvote
    Ayron5 recebeu reputação de aline533 em Aprenda a por o target da PXG no seu servidor!   
    No meu tbm tive erro na compilação .-. jfsdjfshf aí me toquei no que era.
    Mano é que na minha source está assim 
    Note que se seguir o tutorial, essa parte
    g_painter->drawBoundingRect(Rect(dest + (animationOffset - getDisplacement() + 2)*scaleFactor, Size(28, 28)*scaleFactor), std::max<int>((int)(2*scaleFactor), 1));  Ela se encontra na minha pelo menos kkk aqui 
    if(m_showTimedSquare && animate) { Seguindo como está falando lá, vai ficar assim 
    Que na hora da compilação... Vai gerar um errinho e não vai compilar .-. 
    Então eu mudei e fiz assim... joguei tudo na 
    if(m_showStaticSquare && animate) { Com isso deu tudo certo... vejam ^^ 
    É isso... Vlw pelo tutor ^^ 
  2. Amei
    Ayron5 recebeu reputação de DanijoBR em Modern Acc layout poketibia.   
    Como essa área está parada a muito tempo, resolvi compartilhar um layout que editei de acordo com meu gosto.
    Deixei simplão mesmo, tá usável e fácil de editar.
    O que vale é ajudar. XD
    Créditos para otpk... e o Benny pois usei o dele como base.
     
    Imagem:
    Link: 
     
    Scan:
     
  3. Thanks
    Ayron5 recebeu reputação de raulcdj em Baú Que dá Outfit se tiver Level   
    Bom galera antes de tudo, pesquisei e não encontrei desse que dá a roupa se tiver o tal level pedido na script.
    Tou deixando bem explicado para melhor compreensão de todos. O script é simples e já foi testado, estando o mesmo 100% na minha base 8.54
    Vamos lá!
    Vá em data/actions/scripts e crie um arquivo Lua chamado > Outfitquest
    Feito isso dentro adicione esse código v
    Em actions.xml você adiciona v
    Explicação: 
    if item.uid == 12154 then 12154 é a unique id que você vai colocar no baú. Lembrando que vc pode mudar os valores. Obs: Mudando esse valor vc terá que deixar igual na da tag da actions.xml
    if getPlayerLevel(cid) >= 30 then 30 é o level que o player precisa ter para concluir a quest. Mude ao seu gosto! 
    questOut = getPlayerStorageValue(cid, 31503) 31503 é a storage da quest, recomendo não mudar/caso mude, deixe todos eles iguais pois eles se repetem no script.
    setPlayerStorageValue(cid, 181655, 1) 181655 é a storage da quest da roupa que vc vai querer que ele ganhe, mas vc me pergunta Ayron/Sepultura onde eu acho essa storage de roupa? 
    Simples, vá em data/XML e abra o outfits.xml Lá vc encontrará algo assim v
    <outfit id = "59" quest = "181655"> <list gender = "0" lookType = "1498" name = "Christmas" /> <!-- 0 mulher, 1 homem --> <list gender = "1" lookType = "1497" name = "Christmas" /> </ outfit> Note que o valor 181655 é o valor da quest que lista as roupas que deseja dar no baú 
    Atenção aqui ( o script dá a roupa automático de acordo com o sexo do player) ^ ^ 
     
    Bom se vc já fez tudo deixou as coisas OK falta a ultima parte. Abra o seu (rme map editor) e lá escolha o baú, feito isso aperte com o botão direito do mouse sobre ele
    e vá em propriedades, abrirá uma janelinha, na parte da Unique ID coloque o valor da unique da script que é o mesmo da tag na actions.xml = 12154 ficando assim v
    Pronto! salve o mapa e vá testar. ^ ^ 
    Espero ajudar alguém, e se ajudei deixa o Rep! aí para fortalecer a amizade  
    É isso, abraços!   
  4. Upvote
    Ayron5 deu reputação a akumah em [Encerrado] [Pokemon] ajuda confusion em players   
    @zipster98
    É exatamente isso, haha! O confusion em player é muito bugado, o mesmo não pode colocar pokémons e nem nada, ainda mais no OTClient que andar em diagonal é bem bugado.
     
    No newStatsuSystem.lua, da pasta lib procure por
    function doConfusion2(cid, cd, check) if not isCreature(cid) then return true end e, abaixo disso, coloque:
    if isPlayer(cid) then return true end
  5. Upvote
    Ayron5 deu reputação a Refe em Central de Aprendizado LUA: Desvios condicionais!   
    Bom, eu vou tentar trazer semanalmente umas dicas de programação, começando com LUA de após fechar todas as dicas eu irei começar o central de aprendizado em c++.
     
    Hoje, sendo a primeira "aula" eu irei explicar os desvios condicionais, que são:
    If else elseif Como utilizar IF?
    Basicamente, o "if" se trata de uma condição, sendo utilizado da seguinte forma:
    if <condição> then Como exemplo, irei fazer um desvio caso o nível do jogador seja maior ou igual a 15:
    if player:getLevel() >= 15 then Após isto, deve se colocar oque o script irá realizar caso a condição seja satisfeita.
    No exemplo a seguir ele irá printar para o console o nível do jogador:
    if player:getLevel() >= 15 then print(player:getLevel()) end Else e Elseif: caso condição não seja satisfeita
    Digamos que no script anterior eu queria que caso a condição não seja satisfeita o console printe "no", eu posso fazer com ajuda do "else":
    if player:getLevel() >= 15 then print(player:getLevel()) else print('no') end O elseif é mais "complexo", por exemplo: ele nega a condição anterior e adiciona uma nova condição.
    Quero que de acordo com o nome do jogador ele printe uma informação como exemplo:
    if player:getName() =="Refe" then print('feio') elseif player:getName() == "Sone" then print('lindo') elseif player:getName() == "Frenvius" then print('feio') end Resumo das dicas:
     
    If: Usado para adicionar uma condição
    Else: Nega a condição anterior, ou caso ela não seja satisfeita
    Elseif: Nega a condição anterior e adiciona uma nova condição.
  6. Upvote
    Ayron5 deu reputação a Yan Liima em Limite máximo de players em guild WEBSITE   
    Limite máximo de players em guild WEBSITE ?

    Bom, decidi postar essa modificação que fiz a muito tempo, pois vi que bastante gente queria
    Para Modern AAC e vi que ninguém soube ajudar. Como é algo bem simples e ta parado aqui faz tempo
    Decidi disponibilizar. Não só para Modern, mas para Gesior também!
    Estarei disponibilizando de duas maneiras:
    1º Será um valor configurado no proprio config.php, onde determinará o limite máximo de todas as guild.
    2º A verificação será feita por DB, onde terá um valor padrão para cada guilda criada, podendo ser alterado o valor de membros maximo.
    Ou seja, a guilda número UM pode ter máximo de 50 players, e a guilda número DOIS pode ter o máximo de 100.
    Vocês pode ser criativos e vender items que aumenta o limite ou fazer eventos/sorteios para aumentar...

    Enfim, vamos lá...
    Primeira maneira:
    Modern AAC:

    Gesior:
     
    Segunda maneira:
    Modern AAC:
     
    Gesior:

     
    Prontinho galera!!!
    Caso queiram para cmd in-game: LINK
  7. Amei
    Ayron5 recebeu reputação de Jaum152 em Como mudar essa barra de hp em baixo do nome do player?   
    Amigo é só pesquisar aqui no fórum...
     
     
  8. Upvote
    Ayron5 deu reputação a Refe em Adicionando mais tiles a visão do jogador!   
    Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT

    (Desculpe o merchant, era a unica imagem que eu tinha salvo)

    Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas.


    Em protocolgame.cpp ache:
    return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); e troque por:
    return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora, continuando em protocolgame.cpp ache:
    GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por:
    GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Continuando em protocolgame.cpp ache a função:
    void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Dentro da função encontre:
    A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } e troque por:
    if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache:
    if(newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Depedendo da Source, a parte será assim:

     
    Por:
    if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache:
    else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim:

     
    Por:
    else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Agora ache:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); E troque por:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora ache:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser:

     
    e troque por:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora ache:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser assim:

     
    E troque por:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite essa parte como quiser:
    static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; O modo de Edição é assim:

     

    Agora em map.cpp do OTCLIENT
    Ache:
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por:
    { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos:
    Flatlander - OTLAND - Criação
    Ceetros - Tradução


    Agora vamos deixar o OTCLIENT lindão.





    Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT)
    por:
    http://pastebin.com/tH7qyreW
    (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando)
    Creditos dessa parte:
    Edubart (Criador do OTCLIENT)
    Ceetros
     
    Caso tenha ajudado, dê um rep+
  9. Upvote
    Ayron5 deu reputação a Tony Araujo em [CREATURESCRIPT] Exp Aura Sytem (OTP Based)   
    [CREATURESCRIPT] Exp Aura System (OTP Based)
    Autor: Tony Araújo (OrochiElf)
     
    Vídeo demonstrativo: https://imgur.com/8OFTfL8 
    (por algum motivo não carregou link direto kk)
     
    Eai rapeize, beleza? Espero que sim. Bom, hoje vim trazer a vocês o sistema de Exp Aura, fiz ele baseado no do OTPokemon.
    Bom, o sistema funciona da seguinte forma, você mata um monstro e tem uma chance desse monstro criar uma aura, que no caso será um efeito que ficará se repetindo por determinado tempo, ou caso preferência, até o corpo do monstro sumir, caso apareça essa aura, você precisa ficar na posição do efeito para coletar esse bônus. É um sistema bem simples, porém legal (acredito eu kkkkkk).
    Bom, vamos lá.
     
    1. Vá em [data/creaturescripts/scripts] e lá crie um arquivo chamado (CODDINGS-ExpAura.lua), e dentro adicione:
    LINK DO HASTEBIN AQUI
     
    A configuração é bem simples, vamos lá:
    local EXPAURA = { aura_effect = 11, -- É o ID do efeito que irá ficar se repetindo, até o bonus ser coletado. gain_effect = 14, -- É o ID do efeito que irá aparecer quando o bonus for coletado. spawn_chance = 25, -- É a chance que este bônus tem de acontecer, sendo 25 = 25% use_specific_time = 15 -- Aqui você configura por quanto tempo o bônus esperará ser coletado, em segundos, porém caso prefira que espere até o corpo sumir, troque o número por false }  
    2. Continuando dentro do scripts, vá em (login.lua) e procure por:
    registerCreatureEvent E acima do primeiro resultado, você adicione:
    registerCreatureEvent(cid, "ExpAura+")  
    3. Agora vá no creaturescripts.xml e adicione a tag:
    <event type="kill" name="ExpAura+" event="script" value="CODDINGS-ExpAura.lua"/>  
    Bom galera, feito isso, está pronto para se divertir. Espero que gostem e façam bom proveito.
  10. Upvote
    Ayron5 deu reputação a Tony Araujo em [OTClient - Module] Caught Achievement v1.4 - Atualizado!   
    [OTClient - Module] Caught Achievement v1.4 - Atualizado
    Autor: Tony Araújo (OrochiElf)
     

     
    Fala meus bacanos, de boas? Espero que sim. Bom, há uns 4 anos atrás, cheguei a fazer  ultima atualização do sistema de Caught Achievement, que nada mais é do que aquele sistema da PxG, onde você ganha um determinado XP pela captura de um pokemon, além de mostrar quantas pokebolas foram utilizadas, porém, aquela versão não estava muito boa, pois era necessário fazer diversas adaptações para adição de novas pokebolas, fora o código que não estava mais me agradando, então resolvi fazer uma nova atualização e deixar o sistema "auto-adaptável", onde não é necessário mais nenhuma edição nele, pois ele recebe os dados do servidor e interpreta de forma automática, sendo assim, suportando um número ilimitado de pokebolas e sem burocracias. Bom, sem mais, vamos lá. 
     
    PS: Como não existe uma base única de servidor utilizada atualmente, e sim diversas, não tem como eu fazer um tutorial único e pré-destinado de instalação, então tentarei explicar mais ou menos o que é necessário fazer para o sistema funcionar perfeitamente, mas fiquem tranquilos, é algo beeem simples. 
     
     
    Primeiramente, precisaremos criar um arquivo no [data/lib], chamado (CODDINGS-CaughtWindow.lua) (sugestivo não? kkk) e dentro adicione o código:
    LINK DO HASTEBIN AQUI
     
    Bom, a configuração é bem auto explicativa, não tem muito mistério, vamos lá:
    ["Nome do Pokemon" = {portrait = Item ID do portrait, experience = Quantidade de Exp pelo Caught, storage_balls = Storage de armazenamento, aconselho seguir o fluxo} ex: ["bulbasaur"] = {portrait = 11989, experience = 3000, storage_balls = 15050},  
     
    Bom, segunda parte da instalação é o seguinte, agora nós vamos adicionar o contador de balls, acredito que o melhor local e o de mais fácil instalação, seria no script de catch do actions, então vá nesse arquivo e procure por esse código aqui
    doRemoveItem(item.uid, 1)  
    E então, acima dele, você adiciona:
    -- Caught Window System CaughtWindow.ballcount(cid, name, item.itemid) Sendo o (name) necessariamente o nome do pokemon, então caso a variável onde guarda esse valor seja diferente, você só arruma ali na função e pronto. 
     
    Bom, para finalizarmos, vamos agora enviar a sinalização de quando o pokemon é capturado. O servidor que estou usando aqui (não sei o nome dele, achei perdido no pc), ele possui uma lib onde existe essa função responsável, então acredito que possa existir no de vocês também. Procurem por algo como catch system, catch ou algo deste genero. Aqui, existe a função chamada: doCapturePokemon, tentem procurar por ela ou similar. 
    Dentro desta função, procure por essa função aqui, ou também, similar a ela: doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
    e logo acima, adicione:
    -- Caught Window System CaughtWindow.sendcaught(cid, poke) Seguindo a mesma lógica da anterior, a variavel (poke), necessariamente precisa ser o nome do pokemon. 
     
    Bom galera, feito isso, o sistema está perfeitamente instalado, bastando apenas vocês adicionarem o módulo no cliente. Só fazer o download dele aqui no tópico, que deixarei o .zip anexado, aconselho adicionarem ele dentro da pasta mods e não da modules, por conta do auto-carregamento de forma mais simplificada (no caso, não sendo necessário criar dependencia no game_interface), mas caso seu client não tenha, você pode criar esta pasta sem nenhum prejuízo.
     
    Bom, por hoje é isso rapeize, tamu junto e até a próxima xD
    [coddings]caughtwindow.rar
  11. Thanks
    Ayron5 deu reputação a Gengo em [OTClient] Sistema de Dialogo Otpokemon   
    [OTClient] Sistema de Dialogo Otpokemon
     
    Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,
    não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.
     
    1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client, extraia e coloque o modulo na pasta modules.
     
    2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:
     
    Feito o passo 1 e 2, vamos para a parte do servidor.
     
    1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:
     
    2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:
     
     
    Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.
     
    1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:
     
    2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:
     
     
    O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.
     
    Demostrativo dentro do game:

     
    Arquivos para download e o scan:
     
  12. Upvote
    Ayron5 deu reputação a Gengo em [OTClient] OTP Bank System   
    Estava fazendo esse modulo e decidi postar, para quem quiser é um modulo de banco igual do OTPokemon, segue o demostrativo.
     

     
     
    OBS: Download contém apenas o módulo e não está completo.
     
     
  13. Upvote
    Ayron5 deu reputação a Michyalex em [OTClient] House look PXG   
    Oi galera venho a postar o module House Look igual ao PXG que fiz hoje.
     
    No server vamos para a pasta de creaturescripts, no Look.lua colocamos o seguente
    local houseId = getHouseFromPos(position) if houseId and getItemNameById(thing.itemid):find("door") then if getHouseOwner(houseId) ~= 0 then house_owner = getPlayerNameByGUID(getHouseOwner(houseId)) else house_owner = "Nobody" end house_name = getHouseName(houseId) house_town = getTownName(getHouseTown(houseId)) house_size = getHouseTilesCount(houseId) house_price = getHousePrice(houseId) local house_information = string.format("house_data|%s|%s|%s|%u|%u", house_name, house_owner, house_town, house_size, house_price) return doSendPlayerExtendedOpcode(cid, 199, house_information) and false Esse codigo debe ser colocado como o if principal ou como um elseif no final do arquivo Look.lua

    Baixe o Modolo e ja era. Ficaria assim:

     
     
    PD: o modulo usa o opcode 199, lembrese de registrar o modulo no GAME_INTERFACE como
    - game_house

    Virustotal: https://www.virustotal.com/gui/file/58db3f2aa43c1297dc24b26e751e66a1acb6bdbbd3c0fecd27e35e789f7eb440/detection

    Credits:
    A mim por fazer
    PXG por fazer o desenho principal
     
    game_house.rar
  14. Upvote
    Ayron5 recebeu reputação de xmaster0 em NPC que vende informação   
    Dale! suave? deixo aqui um npc que fiz agora para meu servidor...
    Como fala no titulo, ele cobra uma certa quantia de dinheiro ou item, para dar uma informação, só configure certinho.
    É bem simples mas pode ajudar alguém  
    Lembrando que está testado e funcionando 100% 
     
    Vá em data/npc e crie um arquivo XML com o nome info e cole isso dentro...
    Salve e feche...
    Agora em data/npc/scripts crie um arquivo LUA com o nome info e cole dentro...
    Bom, é só isso espero ajudar alguém, se ajudei deixa o REP! Aí pra fortalecer a amizade  
    LEMBRANDO QUE DENTO DO ARQUIVO ESTÁ A EXPLICAÇÃO.  
  15. Upvote
    Ayron5 recebeu reputação de xmaster0 em Baú Que dá Outfit se tiver Level   
    Bom galera antes de tudo, pesquisei e não encontrei desse que dá a roupa se tiver o tal level pedido na script.
    Tou deixando bem explicado para melhor compreensão de todos. O script é simples e já foi testado, estando o mesmo 100% na minha base 8.54
    Vamos lá!
    Vá em data/actions/scripts e crie um arquivo Lua chamado > Outfitquest
    Feito isso dentro adicione esse código v
    Em actions.xml você adiciona v
    Explicação: 
    if item.uid == 12154 then 12154 é a unique id que você vai colocar no baú. Lembrando que vc pode mudar os valores. Obs: Mudando esse valor vc terá que deixar igual na da tag da actions.xml
    if getPlayerLevel(cid) >= 30 then 30 é o level que o player precisa ter para concluir a quest. Mude ao seu gosto! 
    questOut = getPlayerStorageValue(cid, 31503) 31503 é a storage da quest, recomendo não mudar/caso mude, deixe todos eles iguais pois eles se repetem no script.
    setPlayerStorageValue(cid, 181655, 1) 181655 é a storage da quest da roupa que vc vai querer que ele ganhe, mas vc me pergunta Ayron/Sepultura onde eu acho essa storage de roupa? 
    Simples, vá em data/XML e abra o outfits.xml Lá vc encontrará algo assim v
    <outfit id = "59" quest = "181655"> <list gender = "0" lookType = "1498" name = "Christmas" /> <!-- 0 mulher, 1 homem --> <list gender = "1" lookType = "1497" name = "Christmas" /> </ outfit> Note que o valor 181655 é o valor da quest que lista as roupas que deseja dar no baú 
    Atenção aqui ( o script dá a roupa automático de acordo com o sexo do player) ^ ^ 
     
    Bom se vc já fez tudo deixou as coisas OK falta a ultima parte. Abra o seu (rme map editor) e lá escolha o baú, feito isso aperte com o botão direito do mouse sobre ele
    e vá em propriedades, abrirá uma janelinha, na parte da Unique ID coloque o valor da unique da script que é o mesmo da tag na actions.xml = 12154 ficando assim v
    Pronto! salve o mapa e vá testar. ^ ^ 
    Espero ajudar alguém, e se ajudei deixa o Rep! aí para fortalecer a amizade  
    É isso, abraços!   
  16. Thanks
    Ayron5 recebeu reputação de Zbieracz em [Fechado] Base Pokémon XYZ RPG Online   
    Acabei de compilar.
    Tá aí pr quem está precisando... 
    Distro.
     
     
    TheForgottenServer.rar
  17. Upvote
    Ayron5 deu reputação a Michyalex em [Pokemon] AutoMegaEvolve talkactions   
    Oi galera, eu fiz um script faz muito tempo para autoMegaEvolve um pokemon com opçao de ativar ou desativar, nao e a gran coisa mais pode ser de ajuda para muitos.
    PD: sou spanhol e meu portuguesse não e o mais bom do mundo.

    Vamo lá: 
    ___________________ TALKACTIONS
    ● Cria um arquivo chamado autoMegaEvolve.lua em talkactions/script cole o script
     
    ● Depois adiciona em talkactions.xml
    <talkaction words="!autoMegaEvolve" hide="yes" case-sensitive="no" event="script" value="automegaevolve.lua"/> ___________________ ACTIONS
    ● Vai para actions/scripts/basic/goback.lua e pesquise por
    doCreatureSetLookDir(pk, 2) ● Acima dele cole o seguente
    if getPlayerStorageValue(cid, storages.MegaAutoEvolve) == 1 then goBackToMega(pk) end ___________________ LIBS

    ● Vai para data/libs/106-main functions.lua e no final cole o seguente

    ● Vai para ~main tables.lua e pesquise por
    storages = { ● Adicione o seguente no final do Json
    MegaAutoEvolve = 20010  
     
  18. Thanks
    Ayron5 recebeu reputação de M i s s em Baú Que dá Outfit se tiver Level   
    Bom galera antes de tudo, pesquisei e não encontrei desse que dá a roupa se tiver o tal level pedido na script.
    Tou deixando bem explicado para melhor compreensão de todos. O script é simples e já foi testado, estando o mesmo 100% na minha base 8.54
    Vamos lá!
    Vá em data/actions/scripts e crie um arquivo Lua chamado > Outfitquest
    Feito isso dentro adicione esse código v
    Em actions.xml você adiciona v
    Explicação: 
    if item.uid == 12154 then 12154 é a unique id que você vai colocar no baú. Lembrando que vc pode mudar os valores. Obs: Mudando esse valor vc terá que deixar igual na da tag da actions.xml
    if getPlayerLevel(cid) >= 30 then 30 é o level que o player precisa ter para concluir a quest. Mude ao seu gosto! 
    questOut = getPlayerStorageValue(cid, 31503) 31503 é a storage da quest, recomendo não mudar/caso mude, deixe todos eles iguais pois eles se repetem no script.
    setPlayerStorageValue(cid, 181655, 1) 181655 é a storage da quest da roupa que vc vai querer que ele ganhe, mas vc me pergunta Ayron/Sepultura onde eu acho essa storage de roupa? 
    Simples, vá em data/XML e abra o outfits.xml Lá vc encontrará algo assim v
    <outfit id = "59" quest = "181655"> <list gender = "0" lookType = "1498" name = "Christmas" /> <!-- 0 mulher, 1 homem --> <list gender = "1" lookType = "1497" name = "Christmas" /> </ outfit> Note que o valor 181655 é o valor da quest que lista as roupas que deseja dar no baú 
    Atenção aqui ( o script dá a roupa automático de acordo com o sexo do player) ^ ^ 
     
    Bom se vc já fez tudo deixou as coisas OK falta a ultima parte. Abra o seu (rme map editor) e lá escolha o baú, feito isso aperte com o botão direito do mouse sobre ele
    e vá em propriedades, abrirá uma janelinha, na parte da Unique ID coloque o valor da unique da script que é o mesmo da tag na actions.xml = 12154 ficando assim v
    Pronto! salve o mapa e vá testar. ^ ^ 
    Espero ajudar alguém, e se ajudei deixa o Rep! aí para fortalecer a amizade  
    É isso, abraços!   
  19. Haha
    Ayron5 recebeu reputação de nociam em GYM SYSTEM PFV   
    Absurdo.
     
    E faz mesmo, hj eu tenho esse sistema graças a ele @nociam gente boa de mais. 
  20. Upvote
    Ayron5 recebeu reputação de BrunooMaciell em Pesca   
    Aqui está! Fiz as Alterações no seu script, testei aqui e está 100% dá forma que vc pediu. ^^
     
     
     
  21. Upvote
    Ayron5 deu reputação a Yan Oliveira em Quest Log em Janela   
    Olá amigos do Xtibia, venho trazer um tutorial simples, mas interessante, que exibe uma caixa de diálogo com texto contendo todas as quests do seu servidor.
     
    Atenção: Testado somente em TFS 0.3/0.4
     
    Vamos lá!
     
    Vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado quest_log.lua e adicione o script:
     
    ---------------- QUEST LOG BY YAN18 ----------------- -- NOME DA QUEST NO ÍNDICE, O NÍVEL E STORAGE NO VALOR -- local quests = { ["Cerulean City"] = {level = 30, storage = 32500}, ["Fire Stone"] = {level = 50, storage = 32501}, ["Boost Machine"] = {level = 100, storage = 32502} } function onSay(cid, words, param) local quest_completada = "- Quests completadas: \n\n" local quest_incompleta = "\n- Quests não completadas: \n\n" for i, _ in pairs (quests) do if (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) < 1) then quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" elseif (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) >= 1) then quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" end end if quest_completada == "- Quests completadas: \n\n" then quest_completada = quest_completada .. " Nenhuma quest foi completada ainda. \n\n" elseif quest_incompleta == "\n- Quests não completadas: \n\n" then quest_incompleta = quest_incompleta .. " Todas as quests foram completadas." end local quest = quest_completada .. quest_incompleta return doShowTextDialog(cid, 1811, quest) end  
    Agora abra o talkactions.xml que fica em Data/Talkactions/talkctions.xml e adicione a tag:
    <talkaction words="!quest" event="script" value="quest_log.lua"/> Deixei o comando !quest ali em words na tag xml, mas você pode colocar outro comando de sua preferência.
     
    Explicação: Adicione todas as quests do servidor na tabela quests, colocando o nome dela como índice, o level e storage (preste bem atenção para colocar a storage correta) como valores. Em caso de dúvidas, só seguir o exemplo que fiz. Também fiz verificação para ver se todas as quests do jogo (que você colocar na tabela) foram feitas ou não, e também fiz verificação de nível do jogador por quest, ou seja, os jogadores só verão as quests que eles tem nível para fazer. De resto não tem muito o que mexer, só se quiser reduzir ou aumentar a quantidade de espaço entre as linhas, mas ai é da preferência de cada um. Caso queira retirar a verificação de nível do jogador (pare verem todas as quests) só mudar isso:
     
    for i, _ in pairs (quests) do if (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) < 1) then quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" elseif (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) > 1) quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" end end Para isso:
    for i, _ in pairs (quests) do if getPlayerStorageValue(cid, quests[i].storage) < 1 then quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" else quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" end end  
    Se fizer tudo corretamente, é para aparecer essa janela com as informações e nível da(s) quest(s):
     

     
    Essa janela é criada na função doShowTextDialog, e o segundo parâmetro dela é um item que aparece como ícone, geralmente deixam 0 (e recomendo deixar 0 como padrão), mas tem base que o id do item 0 aparece como algum item do jogo (as vezes montanhas ou outros itens de ambiente), então deixei um blackboard, até para ficar mais coerente hehe. Você também pode criar um item para representar essa janela, mas vai da preferência e criatividade de cada um. 
     
    Se você tiver source, pode até criar uma janela com título de "Quests" para ficar mais bonito a interface, mas vai de cada um.
     
    OBS: Em alguns servidores pode ser que dê crash na distro por conta do item passado no segundo parâmetro da função doShowTextDialog(cid, id_item, texto), precisa ficar atento nisso.
     
     
    Qualquer dúvida só perguntar!
     
    Abraços e fiquem com Deus!
  22. Upvote
    Ayron5 deu reputação a Poke X Ice em [RESOLVIDO] Pedido de Script : By Catcher   
    mande seu script de catch e donate bau
     
     
    vou passar meus scripts:
     
    Capturando colocando nick de quem capturou: by Eu
     
    servidor/data/lib/catch system.lua procure por:
     
    servidor/data/creaturescript/script/look.lua
     
     
    agora outro estou refazendo melhorando um pouco -'
  23. Upvote
    Ayron5 deu reputação a Gengo em Trava para barras   
    Eai mano blz?
    A localização desse lockButton fica na posta data/styles/30-miniwindow.otui, já o código em que faz a ação, ele se localiza em modules/corelib/ui/uiminiwindow.lua  
  24. Thanks
    Ayron5 deu reputação a GamerGoiano em Outfit Module para Poketibia (OTCLIENT)   
    @Ayron5 @mastof
    Experimentem trocar 
          local outfitColor = getOutfitColor(j*19 + i)
    por
          local outfitColor = getOufitColor(j*19 + i)

    E me manda aqui denovo pra eu ver o erro do terminal, se não der é pq vcs tão usando um otclient desatualizado

    ---------
    Ou então tenta substituir só o .otui 
  25. Upvote
    Ayron5 deu reputação a GamerGoiano em Module TELEPORT LIST (POKETIbIA)   
    Ja que eu comprei eu tenho o direito de repassar pra quem eu quiser!
    Comprei esse modulo de um cara e ele me passou infuncional, se alguém quiser ele pra editar, deixo aqui pra vocês:
    Como funciona: ao clicar em uma cidade, ele manda o comando !h saffron ou o nome da city.
    Download: https://www.dropbox.com/s/1dn9c2p25en8c8c/TP LIST.rar?dl=0
    Scan: https://www.virustotal.com/gui/file/06ef6e8655eadb9a0bb4f38ef5afaad354e3bb508e325ff9e392ae9f466b864b/detection
     
     

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...