Ir para conteúdo
  • Cadastre-se

KotZletY

Héroi
  • Total de itens

    4072
  • Registro em

  • Última visita

  • Dias Ganhos

    85

Histórico de Curtidas

  1. Curtir
    KotZletY deu reputação a lordzetros em Fly System com modal 1.3   
    Introdução
       Estive procurando no fórum e não encontrei esse sistema de TP para versões com modal, aliás, até achei um semelhante, só que possuía algumas instabilidades e também com uma ideia de waypoints (que estava também fazendo dessa forma, mas não vem ao caso o motivo disso não ser viável no Tibia). O que trago aqui é algo mais simples, porém o necessário.
       O sistema de TP é muito importante em alguns servidores que fogem um pouco de RPG (não que seja exclusivamente para estes), ele possibilita viagens de um local para outro em instantes, como por exemplo, do Templo para o Depot ou para qualquer outra localização configurada no script (a seu gosto). Uma coisa adicional que coloquei no script, foi de listar também a house do jogador que utilizar o comando, onde você poderá configurar se será necessário pagar ou não para o mesmo ser teleportado, enfim, dê uma olhada no código depois, tá tudo comentado.
     
    Informações do sistema
    - Locais configuráveis
    - Configurável se é necessário pagar ou não para determinado local
    - Configurável a quantidade de dinheiro de cada local
    - Condições ao utilizar o comando (Protect Zone e tempo para utilizar o comando novamente)
    - É requisitado o jogador está possuindo a quantia necessária para o teleport
     
    Instalação
     
    1 - crie um arquivo chamado teleportSystem.lua em data/talkactions/scripts/ e cole o código abaixo:
     
    2 - Em seguida, cole este trecho de código em data/talkactions/talkactions.xml abaixo de algum semelhante:
     

    3 - Agora crie um arquivo chamado modalTpSystem.lua em data/creaturescripts/scripts/ e cole o código abaixo nele:
     
    4 - E para finalizar, cole este código em data/creaturescripts/creaturescripts.xml abaixo de um semelhante:
     
     
    Explicação do script
    A única coisa que você vai mexer é no teleportSystem, onde terá a opção de configurar os preços, locais, etc.
    Configurando as houses:

    houses_modal = Se será habilitado o player teleportar para a house dele
    house_pago = Se será pago o teleport para a house
    house_custo = Custo do teleport para a house, caso seja pago

    Configurando o local:

    nome = Nome do local a ser mostrado na janela
    pago = Se ele vai ser pago ou não, coloque false caso queira que não cobre nada do jogador
    custo = Caso tenha colocado como pago, o custo do teleport para o local
    pos = Posição do local (X,Y,Z)
     
    Quando for adicionar outro, copie esta mesma parte acima e altera o número [3] para [4] e os outros dados também, assim por diante.
    O restante também tá explicado no script, basta ler.
     
    Demonstração
    UTILIZE O COMANDO !fly

     
    Enfim, script simples, tem para outras versões, mas como falei, não tinha encontrado ainda para 1.x com esse funcionamento. Qualquer coisa, só comentar, .
  2. Obrigado
    KotZletY recebeu reputação de otaviokta em (Resolvido)TALKACTIONS 0.4   
    @amora murder asudhausdhasd.
     
    @Syn Reward show. Sempre que alguém resolver um pedido de suporte seu marca como melhor resposta e não esqueça do rep!
  3. Curtir
    KotZletY deu reputação a Huni em Lothus Online™ - Project RPG   
    Última Atualização: 18/06/2019, 02:07 BRT
     
    OBS: Esse é apenas um resumo do Lothus Online!
     
    [+] O Projeto
     
    Por conta de alguns acontecimentos, a equipe decidiu modificar o nome de World of Tibia para Lothus.
     
    Facebook do projeto: https://www.facebook.com/LothusOnline
     
    O projeto foi iniciado á 6 meses,  Lothus Online conta com 2 integrantes e será baseado no mundo de Azeroth. E estaremos trazendo esse mundo fantástico e misterioso para os tibianos. Meu objetivo é criar um novo estilo de jogo, com sistema de PVP competitivo: Battleground e Arena e PVE: Dungeon e Raid. A primeira versão do jogo será simples, e ao longo da história e dos acontecimentos de Azeroth, o mundo ganhará conteúdos novos.
     

     
    A Origem dos Mundos
     
    Ninguém sabe exatamente como o universo começou. Alguns teorizam que uma explosão cósmica catastrófica espalhou as jóias do infinito nos mundos na imensidão da Grande Escuridão – mundos que um dia teriam formas de vida maravilhosas e fofas. Outros acreditam que o universo foi criado por uma única entidade todo-poderosa. Embora as origens exatas do universo caótico permaneçam incertas, está claro que uma raça de seres poderosos surgiu para trazer estabilidade a esses vários mundos e assegurar um futuro seguro para os seres que seguissem seus passos.
     
    Os titãs, deuses colossais que tinham a pele metálica, dos cantos distantes do cosmo, exploraram o universo recém nascido e se fixaram nos planos encontrados para trabalhar nele. Eles moldaram os mundos elevando imponentes montanhas e cavando vastos oceanos. Espiraram céus e criaram atmosferas. Tudo partindo de um plano, criar ordem a partir do caos. Eles deram poder a raças primitivas para cuidar e manter a integridade dos seus respectivos planos.
     
    Comandado pela elite conhecida como o Panteão, os titãs trouxeram ordem a cem milhões de mundos espalhados ao longo da Grande Escuridão do Além, durante os primeiros anos de criação. O benevolente Panteão que buscava proteger estes mundos estruturados, sempre estava vigilante contra a ameaça de ataque das entidades extra-dimensionais vis da Espiral Etérea. O Caos Inferior, uma dimensão etérea de magias caóticas que conectada a inúmeros mundos do universo, era lar de um número infinito de seres malignos que só buscavam destruir a vida e devorar as energias vivas do universo. Incapazes de conceber o mal em qualquer forma, os titãs tentaram achar um modo de terminar com a constante ameaça dos demônios.
     

    Facções:
     
    Alliance
     

     
    As nobres raças da aliança estão unidas por altivas tradições de nobreza, honra, fé, justiça e sacrifício. Os muito povos dessa facção contribuem com sabedoria técnica arcana e espiritual para alcançar um mundo pacifico e justo.
     
     
    Horde
     
     
     
    As altivas nações da horda estão unida por uma frágil aliança de convivência de um mundo hostil que buscava destruí-las. Determinadas, ferozes e as vezes monstruosas, a horda valoriza a força e a honra, mas luta para manter agressividade sob controle.
     


    [-] Mapa
     
    O mundo de Azeroth é a terra natal de várias raças, as mais notáveis sendo os elfos (elfos da Noite, elfos Nobres, elfos de Sangue e outros), humanos, anões, taurinos, goblins, trolls, gnomos e dragões.
     

     

     

     

     

     
     
     
     
     

     
    [-] Sistema Profissão 
    – Profissões de produção:
             Encatamento: Encantar Itens (dando ML, resistência, etc)
              Ferraria: Criar itens com ataque e armadura mais fortes
              Alquimia: Criar poções mais fortes (Buffs, regeneração mais alto, etc)
     – Profissões de coleta:
             Herborismo: Coletar Plantas (Alquimia)
             Mineração: Coletar Minérios (Ferreiro)
               Destruição de equipamentos: Coletar magia dos itens (Encatamento)
     

     


    [-] Equipe
    Como a primeira versão será MVP, preciso de uma Equipe dedicada (não precisa ser profissional e sim força de vontade, querer aprender , ter ideias bacana, e querer inovar sempre e ter disciplina). Sou Mapper e mexo com mapa já tem 8 anos. E nossas vagas disponíveis:
     
    Scripter  Spriter Designer Mapper  
    Para se inscrever,  é só me add no discord:  Marcelo Weis#1024
     
  4. Curtir
    KotZletY deu reputação a Markowiicz em Markowiicz's show off   
    Hello!

    Oi gente! Estarei postando algumas imagens de mapas meus, que foram desenvolvidos por mim para um servidor, e outros como trabalhos freelancers. Espero que gostem ?
    E ah, qualquer crítica construtiva é sempre bem-vinda.
    Edit.: Abram as imagens, não sei por qual motivo aparente elas ficaram borradas, WTF.

     
     
     

    Mapas de 2016.:
     

     
     

    Mapas de 2017.:
     
     
     
     
     
     
     

    Mapas de 2018/2019, sendo meus trabalhos mais recentes.:
     
     
     
     
     
     
     
    É isso pessoas, ao longo do tempo eu (quem sabe) vou atualizando esse tópico com mais imagens, beijão! 
    ❤️
  5. Curtir
    KotZletY deu reputação a L3K0T em COLOCANDO MAIS OPÇÕES DE CORES NO NOME DOS NPC (OTCLIENT)   
    Fala galera, hoje estarei ensinando como vocês podem colocar mais cores na função GameBlueNpcNameColor  ali nome dos NPCS, hoje criei  e separei 11 funções uma pra cada cor pra vocês usarem como quiser, *as vezes o servidor não combina só com os nomes AZUIS, que tal um ROSA? hehe.
     
     
     
    TUTORIAL SOURCE OTCLIENT
     
    Abra o arquivo const.h 
     
    ache
     
    GameEnhancedAnimations = 59, em baixo cole
     
    GameRedNpcNameColor = 60, GamePinkNpcNameColor = 61, GameBabyPinkNpcNameColor = 62, GameOrangeNpcNameColor = 63, GameYellowNpcNameColor = 64, GameLightGreenNpcNameColor = 65, GameGreenNpcNameColor = 66, GameLightBlueNpcNameColor = 67, GamePurpleNpcNameColor = 68, GameBrownNpcNameColor = 69, GameBlackNpcNameColor = 70,  
    abra o arquivo creature.cpp
     
    ache
     
    if(g_game.getFeature(Otc::GameBlueNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x66, 0xcc, 0xff);  
    mude para
     
    if(g_game.getFeature(Otc::GameRedNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xff, 0x00, 0x00); if(g_game.getFeature(Otc::GamePinkNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xff, 0x6e, 0xb4); if(g_game.getFeature(Otc::GameBabyPinkNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xff, 0xc1, 0xc1); if(g_game.getFeature(Otc::GameOrangeNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xff, 0x7f, 0x00); if(g_game.getFeature(Otc::GameYellowNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xff, 0xd7, 0x00); if(g_game.getFeature(Otc::GameLightGreenNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x7c, 0xcd, 0x7c); if(g_game.getFeature(Otc::GameGreenNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x00, 0xcd, 0x66); if(g_game.getFeature(Otc::GameLightBlueNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x87, 0xce, 0xff); if(g_game.getFeature(Otc::GameBlueNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x00, 0x9a, 0xcd); if(g_game.getFeature(Otc::GamePurpleNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xab, 0x82, 0xff); if(g_game.getFeature(Otc::GameBrownNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0xcd, 0xaa, 0x7d); if(g_game.getFeature(Otc::GameBlackNpcNameColor) && isNpc() && m_healthPercent == 100 && !useGray) fillColor = Color(0x82, 0x82, 0x82);  
    Agora compile seu Otclient.
     
     
     
    USANDO AS CORES NO OTCLIENT
     
    no otclient vai em em \modules\gamelib abra o arquivo const.LUA
     
    ache
     
    GameEnhancedAnimations = 59 em baixo cole
     
    GameRedNpcNameColor = 60 GamePinkNpcNameColor = 61 GameBabyPinkNpcNameColor = 62 GameOrangeNpcNameColor = 63 GameYellowNpcNameColor = 64 GameLightGreenNpcNameColor = 65 GameGreenNpcNameColor = 66 GameLightBlueNpcNameColor = 67 GamePurpleNpcNameColor = 68 GameBrownNpcNameColor = 69 GameBlackNpcNameColor = 70  
     
    agora vá em \modules\game_things abra o arquivo things.lua
     
    ache
     
    local version = g_game.getClientVersion() em baixo coloca a cor que deseja que os npc tenha há falei rosa lá em cima né, vamos por rosa.
     
    g_game.enableFeature(GamePinkNpcNameColor)
    *se quiser muda o ROSA pra outra cor é só muda GamePinkNpcNameColor para uma dessa ai em baixo dentro dos ()
     
     
    cores:
     
    GameRedNpcNameColor // Vermelho GamePinkNpcNameColor //Rosa GameBabyPinkNpcNameColor //Rosa bebe GameOrangeNpcNameColor //Laranja GameYellowNpcNameColor //Amarelo GameLightGreenNpcNameColor //Verde Claro GameGreenNpcNameColor //Verde Escuro GameLightBlueNpcNameColor //Azul Claro GamePurpleNpcNameColor //Roxo GameBrownNpcNameColor //Marrom GameBlackNpcNameColor //Preto feito isso, é só SALVAR. NPCs coloridos hehe
     
     
    PREVIEW
     

     
    ATÉ MAIS  
     
    CRÉDITOS: EU  
     
     
     
     
     
     
     
  6. Gostei
    KotZletY deu reputação a L3K0T em AUMENTANDO TELA DE VISÃO OTCLIENTE EM REV3884 8.60 0.4   
    REV3884 TFS 0.4 OTC 0.6.6

     
    OBSERVAÇÃO:
    Bom galera hoje vim trazer um código de expansão de visão para o otclient alterado por mim,  usado somente para rev3884 e então se você usa um tfs 0.3.6 ou tfs 1.0 não vai dar certo,
    *Esse código foi alterado por mim para ser usado apenas para rev3884, procolo 8.60 e TFS 0.4 que no caso não achei e resolvi compartilhar essas alterações.
     
     
     
    1° TUTORIAL 1 SOURCE DO SEU SERVIDOR.
     
    Abra Protocollgame.cpp 
     
    1 Ache
    ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && //(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz)); ALTERE PARA:
     
    ((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));  
     
    2 Ache:
     
    GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg);  
    ALTERE PARA:
     
    GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg);  
     
    3 Ache:
     
    if(oldPos.y > newPos.y) // north, for old x { msg->put<char>(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if(oldPos.y < newPos.y) // south, for old x { msg->put<char>(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if(oldPos.x < newPos.x) // east, [with new y] { msg->put<char>(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if(oldPos.x > newPos.x) // west, [with new y] { msg->put<char>(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } ALTERE PARA:
     
    if (oldPos.y > newPos.y) { // north, for old x msg->put<char>(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->put<char>(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->put<char>(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->put<char>(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); }  
     
    4 ache
     
    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);  
    Altere para
     
    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);  
     
    5 ache
     
    GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.z - 3, 18, 14, 3, skip);  
    ALTERE PARA
     
    GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip);  
     
    6 ACHE
     
    GetMapDescription(oldPos.x - 8, oldPos.y + 1 - 6, newPos.z, 1, 14, msg);  
    ALTERE PARA
     
    GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg);  
     
    7 ACHE
     
    GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); ALTERE PARA
     
    GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg);  
     
    8 Ache
     
    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);  
    Altere para
     
    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);  
     
    9 ache
     
    GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip);  
    Altere para
     
    GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip);  
     
    10 ache
     
    GetMapDescription(oldPos.x + 9, oldPos.y - 1 - 6, newPos.z, 1, 14, msg);  
    Altere para
     
    GetMapDescription(oldPos.x + Map::maxClientViewportX+1, oldPos.y - (Map::maxClientViewportY+1), newPos.z, 1, ((Map::maxClientViewportY+1)*2), msg);  
     
    AGORA EM MAP.H
     
     
    ache
     
    static const int32_t maxViewportX = 11; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; altere para:
     
    static const int32_t maxViewportX = 18; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 18; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14; static const int32_t maxClientViewportY = 12;  
    Pronto agora é só compilar a source do seu servidor 8.60 rev3884
     
     
    PARTE 2 OTCLIENT 0.6.6
     
    abra o map.cpp da source do otclient 
     
    ache
     
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } ALTERE PARA
     
    void Map::resetAwareRange() { AwareRange range; range.left = 14; //Change this to = maxClientViewportX range.top = 12; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } COMPILE A SOURCE DO OTCLIENT E PRONTO!!! ESPERO TER SANADO VÁRIAS DÚVIDAS DE AUMENTAR TELA DO OTCLIENT EM REV3884.
    CRÉDITOS: Pra mim pela alterações funcionais. e pelo Flatlander por disponibilizar para tfs 0.3.6 e 1.0 pois esse está alterado pra tfs 0.4
     
     
     
  7. Gostei
    KotZletY deu reputação a L3K0T em Colocando Limite no CTRL- ZOOM MAPA   
    Bom galera como o própio titulo já diz... colocando limite no ctrl- no otclient 0.6.6  pra não ficar vendo todo o mapa.
     
     
    vá em modules\game_interface
     
     
    Ache:
     
    limitedZoom = false Altere para
     
    limitedZoom = true  
    Ache
     
    gameMapPanel:setMaxZoomOut(513) altere para
     
    gameMapPanel:setMaxZoomOut(15) fácil né?? espero ter ajudado alguém  
  8. Curtir
    KotZletY deu reputação a KR3 em Layout NTO WAR LEGENDS [NEW ATT]   
    Fala guys, vim trazer [+] um layout para vocês que estão iniciando um projeto de narutibia, eu já postei outros aqui no forum, nto brasil, e nto ultimate 2017
    esse ainda é o do ultimate mas a rapazeada do war legends editou um pouquinho mais colocou apenas um slider mas resolvi atualizar, aqui. para vocês.
     
    creditos: Nto War Legend
     
    Então é isso até mais fassa bom uso.
     
     
    PRINTS
     
    LAYOUT
     
    SCAN
     
  9. Curtir
    KotZletY deu reputação a Reds em [Spell] Chuva de Flechas 2.0   
    Olá, há muitos anos publiquei um script no tibiaking de uma spell onde acontecia uma chuva de flechas, agora em 2019 eu refiz vários dos scripts do meu antigo servidor e este foi um deles.
    Basicamente eu simplifiquei o código (não tinha conhecimento suficiente para isso na época) e corrigi um dos bugs que existia, enfim segue o script:
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -60, -1, -60, 5, 5, 4, 7) function onTargetCombat(cid, target) local posCid = getCreaturePosition(cid) local posTarget = getCreaturePosition(target) doSendDistanceShoot(posCid, posTarget, CONST_ANI_ONYXARROW) end setCombatCallback(combat, 4, "onTargetCombat") local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end xml:
    <instant name="Chuva de Flechas" words="chuva de flechas" lvl="80" manapercent="25" prem="1" soul="0" aggressive="0" exhaustion="1000" selftarget="1" needlearn="0" event="script" value="especiais/mas shadow.lua"> <vocation id="2"/> <vocation id="6"/> </instant>  
    Vou publicar o mesmo gif de demonstração pois a funcionalidade segue praticamente a mesma:
    https://giphy.com/gifs/r0DNAlUJKUxeo
     
    Espero que tenham gostado e notado como um código pode ser bem mais simples do que parece..
  10. Curtir
    KotZletY deu reputação a Reds em Utilizando o Visual Studio Code, Notepad++ nunca mais   
    Fala galera, por muito tempo utilizei o notepad++ para desenvolver meus códigos em lua. Agora voltando a desenvolver meu servidor, utilizo o Visual Studio Code e digo que ajuda muito em relação ao notepad++.
     
    Vantagens:
    1) Você pode abrir a pasta de seu servidor, tendo uma estrutura semelhante a um projeto Java por exemplo, tudo isso de uma forma bem fácil. Se não me engano o notepad++ tem uma funcionalidade parecida, mas acredito que a maioria aqui não usa.
    Para fazer isso é só utilizar o atalho CTRL + K + O, ou file > Open Folder e selecionar a pasta de seu servidor.
     
    2) Diversos atalhos. Com o VS Code, você pode utilizar atalhos, como o CTRL + P, ao fazer isso ele abre um box no topo da IDE onde o desenvolvedor pode escrever o nome do arquivo e ele encontra dentro do projeto.
     
     
    Fazia mais de ano que eu não abria meu servidor, então eu não lembrava de diversas coisas, como os monstros que dropavam o item 10566, então com o Visual Studio Code, eu consegui descobrir que eu não tinha configurado nenhum monstro para dropar aquele item. Para fazer essa pesquisa utilizei o atalho CTRL + SHIFT + F, onde ele pesquisa alguma palavra em específica entre os arquivos do seu projeto. 
     
    E muitos outros, que você pode encontrar pesquisando pela internet.
     
    3) Diversas extensões. Com o VS Code você pode instalar diversas extensões que auxiliam no seu desenvolvimento, por enquanto adicionei a padrão de Lua. Com ela, ao escrever códigos Lua é utilizado intellisense, facilitando muito no desenvolvimento.
     
     
    4) Criação de snippets para utilização das funções do Tibia.
     
    5) Muito mais.. Utilizo há algum tempo o VS Code para desenvolvimento de front e sempre descubro coisas novas sobre ele..
     
    O VS Code esta disponível em: https://code.visualstudio.com/download.
     
  11. Curtir
    KotZletY deu reputação a L3K0T em Torneio System Completo 4 vezes ao dia + NPC + RANK apenas PARA SITE   
    Bom pessoal eu resolvi compartilhar o meu sistema de torneio para poketibia que fiz para meu projeto, ele tem a função de ocorrer 4 vezes ao dia....Falando apenas com o 1 NPC Nick da cidade aonde você por....
     
    Como funciona ? Mata todos e o ultimo que sobrar na arena de batalha é o ganhador!
     
    1° Pasta LIB copie um arquivo e deverá renomear para torneio ficando torneio.lua apaga tudo que tem dentro e add
     
    torneio = { awardTournament = 2148, ---moeda usada para entra no torneio-- awardAmount = 1000, -- quantidade de moeda que o player vai ganhar ao vencer o torneio-- playerTemple = {x = 893, y = 499, z = 15}, --pra onde vai o player quando morrer ?-- tournamentFight = {x = 894, y = 538, z = 15}, --centro da arena torneio combate-- area = {fromx = 866, fromy = 508, fromz = 15, tox = 922, toy = 572, toz= 15},--canto acima direito da arena combate-canto esquerdo abaixo da arena combate-- waitPlace = {x = 969, y = 544, z = 15}, --centro da sala de espera-- waitArea = {fromx = 957, fromy = 536, fromz = 15, tox = 983, toy = 552, toz= 15}, --canto esquerdo acima da sala de espera--canto abaixo esquerdo da sala de espera-- startHour1 = "07:50:00", --horario do aviso?-- endHour1 = "08:00:00",--horario que começa?-- startHour2 = "11:50:00",--horario do aviso?-- endHour2 = "12:00:00",--horario do aviso?-- startHour3 = "17:50:00",--horario do aviso?-- endHour3 = "18:00:00",--horario do aviso?-- startHour4 = "22:50:00",--horario do aviso?-- endHour4 = "23:00:00",--horario do aviso?-- price = 500,--valor para entrar no torneio ? 500 dollar no caso-- revivePoke = 12344,--aqui é revive se tiver e se não tiver não precisa mexer-- } function getPlayersInArea(area) local players = {} for x = area.fromx,area.tox do for y = area.fromy,area.toy do for z = area.fromz,area.toz do local m = getTopCreature({x=x, y=y, z=z}).uid if m ~= 1 and isPlayer(m) then table.insert(players, m) end end end end return players end apaga os coments do scripts acima com --blablabla--
     
     
     
    2° GLOBALEVENTS vá na pasta globalevents/scripts copia um arquivo que voc?ê deverá renomear para torneio ficando torneio.lua e add
     
    function onTime() if #getPlayersInArea(torneio.area) > 1 then doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez") return true end for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do puxar = math.random(-2, 2) doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z}) end doBroadcastMessage("O torneio Iniciou!") return true end ou dependendo do tfs pode ser
     
    function onTimer() if #getPlayersInArea(torneio.area) > 1 then doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez") return true end for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do puxar = math.random(-2, 2) doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z}) end doBroadcastMessage("O torneio Iniciou!") return true end  
     
     
    agora em globalevents.xml add as tag
     
    <globalevent name="TournamentStart1" time="08:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart2" time="12:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart3" time="18:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart4" time="23:00" event="script" value="torneio.lua"/>
    ou
     
    <globalevent name="TournamentStart1" timer="08:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart2" timer="12:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart3" timer="18:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart4" timer="23:00" event="script" value="torneio.lua"/>  
     
    ainda em globalevents vá em globalevents/scripts copie outro arquivo e renomeia para, msgtorneio ficando msgtorneio.lua e add
     
    local i = { ["07:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["07:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["07:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["11:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["11:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["11:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["17:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["17:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["17:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["22:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["22:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["22:59"] = {nome = "As inscrições do Torneio fecharam!"}, } function onThink(interval, lastExecution) hours = tostring(os.date("%X")):sub(1, 5) tb = i[hours] if tb then doBroadcastMessage(hours .. " - " .. tb.nome .. "") end return true end agora as tag globalevents.xml add
     
    <globalevent name="msg torneio" interval="60000" event="script" value="msgtorneio.lua"/>  
    pronto agora vamos mexer com actions...
     
    3° ACTIONS para o player receber a recompensa... vá em actions/scripts copie um arquivo lá e renomeia para torneio ficando torneio.lua e add
     
    function onUse(cid, item) local torneios = 1 if #getCreatureSummons(cid) >= 1 then doPlayerSendCancel(cid, "Volte seu pokémonDBR!") else if #getPlayersInArea(torneio.area) > 1 then doPlayerSendTextMessage(cid, 20 ,"Só o ultimo que ficar na arena, poderá abrir está porta! ") return true end doTeleportThing(cid, torneio.playerTemple) doBroadcastMessage("[Torneio] Parabéns ao treinador "..getCreatureName(cid).." foi o ganhador do torneio de hoje, verifique o rank em nosso site www.seusite.com!") doPlayerAddItem(cid,2148,300) addTopt(cid, torneios) doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"[Torneio] Você já venceu "..(getTopt(cid,torneio)).."x, Parabéns.") doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount) return true end end agora a tag de actions.xml add
     
    <action uniqueid="18279" event="script" value="torneio.lua"/>  
    *18279 é unique ID que vc terá que por numa porta alavanca o que for pra depois o ultimo player clicar...
     
     
     
    4° NPC vá na pasta npc/scripts copia um arquivo e você deverá renomear para torneio ficando torneio.lua e add
     
    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, 'torneio') or msgcontains(msg, 'enter') then if getPlayerItemCount(cid, torneio.revivePoke) >= 1 then selfSay('Voce nao Pode entrar no torneio com {revives}, por favor guarde eles e volte a falar comigo novamente.', cid) return true end selfSay('Voce quer Participar no torneio por '..torneio.price..' de Dollars?', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'yes') or msgcontains(msg, 'sim') then if os.date("%X") < torneio.startHour1 or os.date("%X") > torneio.endHour1 then if os.date("%X") < torneio.startHour2 or os.date("%X") > torneio.endHour2 then if os.date("%X") < torneio.startHour3 or os.date("%X") > torneio.endHour3 then if os.date("%X") < torneio.startHour4 or os.date("%X") > torneio.endHour4 then selfSay('As inscrições para o torneiro ainda não abriram, volte ás 07:50 AM, 11:50 AM, 17:50 AM ou ás 22:50 PM todo os dias', cid) return true end end end end if doPlayerRemoveMoney(cid, torneio.price) then doTeleportThing(cid, torneio.waitPlace) doPlayerSendTextMessage(cid, 21, "Bem vindo, esta e a sala de espera, voce espera aqui enquanto o torneio nao começa.") else selfSay('Voce não tem ('..torneio.price..') Dollars.', cid) end else selfSay('Certeza que voce não quer Participar? Ok, ate a Proxima', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) bom agora volte um pasta e copia um arquivo.xml e renomeia para torneio ficando torneio.xml e add
     
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Nick" script="torneio.lua" walkinterval="999000" floorchange="0"> <health now="150" max="150"/> <look type="1245" head="20" body="100" legs="50" feet="99" corpse="2212"/>] <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Sou o NIKE, Encarregado pelo Torneio diario caso queira entrar diga: {torneio}."/> </parameters> </npc> 5° importa para seu mysql o código
     
    ALTER TABLE `players` ADD `torneio` int(11) NOT NULL default '0'; agora a vá na pasta lib copia um arquivo.lua e renomeia para torneio e add ficando torneio.lua
     
    function getTopt(cid) local check4 = db.getResult("SELECT `torneio` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1") return check4:getDataInt("torneio") <= 0 and 0 or check4:getDataInt("torneio") end function addTopt(cid,amount) db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."+"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end function removeTopt(cid,amount) db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."-"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end function setTopt(cid,value) db.executeQuery("UPDATE `players` SET `torneio` = "..value.." WHERE `id` = "..getPlayerGUID(cid)) end 6° pronto torneio 4 vezes ao dia + npc + rank para site como usar o rank no site ? vai em htdocs/template/seulayout/index.tpl e add em algum lugar lá
     
    <div class="top-box"> {include_php file='torneio.php'} </div>  
    agora vá em htdocs criar um novo text com nome torneio.php e add
     
    <?PHP //** Connection to the database **// $ots = POT::getInstance(); $ots->connect(POT::DB_MYSQL, connection()); $SQL = POT::getInstance()->getDBHandle(); //** Top Players + online status By Kavvson **// $money_list = $SQL->query('SELECT name,torneio FROM players ORDER BY torneio DESC LIMIT 5')->fetchAll(); $i = 1; foreach($money_list as $money_chr){ echo '<center>'; echo $i.'. <a href="/pt/index.php/character/view/'.urlencode($money_chr['name']).'">'; $player = $ots->createObject('Player'); $player->find($money_chr['name']); echo '<font color="'; echo ($player->isOnline()) ? 'green' : 'green'; echo '">'; echo ''.$money_chr['name'].'</b></a></font>'; echo' Torneio Ganhos: '.$money_chr['torneio'].'</B>'; $i++; } for( $i; $i <= 1; $i++ ){ echo $i.'. <br><i>Empty</i><br /><br />'; } echo '</center>';  
     
    isso ai pessoal é completo eu fiz pro meu PokémonDBR que tinha fechado então resolvi compartilhar.... qualquer copia favor bote devido créditos e não quero ver ninguém vendendo meu scripts....
     
    Créditos a mim... qualquer dúvida falando que não sou o dono aqui minha página da PokémonDBR e agora somos otPokémon World Online  http://facebook.com/otpwonline
     
  12. Curtir
    KotZletY deu reputação a Designer Walox em PokeZring - Shining Legends [SHOW OFF]   
    BOM GALERA PRETENDO MANTER ATUALIZAÇÕES DESTA PAGINA SEMANALMENTE.
    BASICAMENTE ESTE É MEU SERVIDOR QUE EDITO QUANDO NÃO TENHO NADA PARA FAZER : / 
    ESPERO QUE GOSTEM RSRS 
    Lembrando que somente irei mostrar as modificações que eu fizer no OTCLIENTE ?
    SISTEMA DE CAPTURA
    sem criticas ofensivas por favor!! 
      Ocultar conteúdo
     

     

     
     
     
     
    Sistema de addons
      Ocultar conteúdo
     

     

     


     
     
     
     
     
    sistema de Loja
      Ocultar conteúdo
     

     

     

     

     

     
    Sistema de casino 50%
      Ocultar conteúdo
     

     
     
     
    Tutorial em Jogo
      Ocultar conteúdo  
     
     
     

     
    Sistema de Pokémons iniciais
      Ocultar conteúdo
     
    Sistema de boost Stone 
      Ocultar conteúdo
     
     
     
    Sistema de Teleport
      Ocultar conteúdo
     
    É ISSO  ESPERO QUE TENHAM GOSTADO RSRS
     
    FACEBOOK: https://www.facebook.com/PokeZRingOnline
    YOUTUBE: https://www.youtube.com/channel/UCgJHPztxiFFpWGUI9ty3xJA
    DISCORD: https://discord.gg/5rWrD4k
  13. Curtir
    KotZletY deu reputação a Reds em C++ Efeito no critico   
    Boa tarde, há algum tempo não posto scripts por falta de sugestão, porém hoje navegando encontrei um pedido muito antigo que não foi fechado, talvez o criador do tópico já concluiu, mas vou disponibilizar para outras pessoas que queiram o código.
    O tópico era: 
    No tfs 0.4 rev 3884 tem a mesma configuração para envio de critico, então para iniciar, você deve ir até o arquivo weapons.cpp e colocar abaixo de:
     
    player->sendCritical();
    o seguinte:
    target->sendCritical();
     
    Em creature.cpp adicione no final do arquivo o seguinte:
    void Creature::sendCritical() const
    {
        if(g_config.getBool(ConfigManager::DISPLAY_CRITICAL_HIT))
            g_game.addMagicEffect(getPosition(), MAGIC_EFFECT_MIRRORVERTICAL);
    }
     
    E em creature.h adicione na linha abaixo de:
    void setLossSkill(bool _skillLoss) {skillLoss = _skillLoss;}
    o código:
    void sendCritical() const;
     
     
    Depois só compilar e testar.
     
    Imagem mostrando o resultado (apenas alterei o magicEffect):

     
     
    Edit1: notei que foi publicado em Aulas de Scripting ao invés de "Códigos", porém ao editar o tópico não posso mover para outro lugar.
  14. Curtir
    KotZletY deu reputação a Gengo em Player Info OTPokemon   
    [OTClient] Health Player Info OTPokemon
     
    Eae galerinha do TibiaKing, hoje venho trazer mais uma contribuição para a comunidade, um módulo indêntico ao do OtPokemon.
    Mesmo que seja simples a instalação, tem sempre aquele que não sabe onde deve colocar o módulo, peço então que tenha paciência quanto a esse simples tutorial, aos demais aqueles que já sabem, peço que ao menos leia a Observações do módulo.
     
         1º Faça o download do módulo.
     
        2º Extraia o módulo para a pasta do seu otClient em /modules ficando assim:
     
     
    Feito o passo 1 e 2 creio que já estará funcionando, isto se você fez tudo certinho.
     
    •Observações do módulo•
     
    Demonstrativo do módulo no jogo.

  15. Curtir
    KotZletY deu reputação a Cat em Elements - Advanced Mining System (skills + coins + levels)   
    Trago a vocês esse sistema, originalmente produzido para um servidor custom 8.60. (testado em 0.4 - firelement). Acredito que será mais útil pra vocês do que pra mim nesse momento. Se alguém puder acrescentar informações a respeito do uso em diferentes tfs agradeço. ?
     
     
     
    INFORMAÇÕES
    P = Posso mineirar vários itens nesse sistema?
    R = Sim, existem quatro elementos e quatro categorias, possibilitando gerar até 16 produtos finais nas minas. Essa configuração pode ser editada facilmente. Caso queira usar da maneira como o script está feito, ao mineirar você poderá coletar as seguintes pedras:

     
     
    P = Mas as pedras caem aleatoriamente?
    R = Não, esse mining possui um SKILL, conforme você mineira o skill aumenta e consecutivamente o seu LEVEL. Inicia com pedras Light, depois pure, rare e massive. Você pode editar facilmente o modo como a exp sobe, os leveis necessários para executar cada ação e as pedras.
     
     
    P = Qual a utilidade das pedras elementares?
    R = Na ideia original, projetei o sistema para que as pedras fossem gastas ao comprar itens em baús, mas fica a seu critério como utilizá-las. Por exemplo, um colar de proteção earth/ice precisaria ser pago com pedras de earth e ice. Incluirei no tópico o script utilizado no baú e o script para trocar as pedras quando atingir 100 unidades cada. Veja o exemplo:
     

     
    INSTALAÇÃO
    Em data/actions/script crie um arquivo .lua chamado elementalmining e cole o código dentro:
    local config = { maxmininglevel = 100, storagemining = 10000, expperlevel = 1000, experiencemining = 10001 } local stone = { blue = {8637, 8633, 9798, 1354}, green = {8640, 8636, 9791, 1353}, lightblue = {8638, 8634, 9790, 12344}, red = {8639, 8635, 9788, 1355}, } local stones = { crystal = {stone.blue[1], stone.green[1], stone.lightblue[1], stone.red[1]}, lcrystal = {stone.blue[2], stone.green[2], stone.lightblue[2], stone.red[2]}, pcrystal = {stone.blue[3], stone.green[3], stone.lightblue[3], stone.red[3]}, scrystal = {stone.blue[4], stone.green[4], stone.lightblue[4], stone.red[4]}, } local ore = { blue = {2146, 7759, 5905, 8302}, green = {2149, 7761, 12396 ,8298}, lightblue = {2150, 7762, 12575, 8303}, red = {2147, 7760, 5906, 8299}, } local ores = { ore.blue[1], ore.blue[2], ore.blue[3], ore.blue[4], ore.green[1], ore.green[2], ore.green[3], ore.green[4], ore.lightblue[1], ore.lightblue[2], ore.lightblue[3], ore.lightblue[4], ore.red[1], ore.red[2], ore.red[3], ore.red[4]} local levels = { { level = {0,19}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4]}, items = {ores[1],ores[5], ores[9], ores[13]}, iselect = 0, bstart = 1, gstart = 2, lbstart = 3, rstart = 4, chance = 10, -- 30 qtdmax = 1, expgainmin = 1, --15 expgainmax = 1 --50 }, { level = {20,49}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4]}, items = {ores[1],ores[2], ores[5], ores[6], ores[9],ores[10], ores[13], ores[14]}, iselect = 1, bstart = 1, gstart = 3, lbstart = 5, rstart = 7, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {50,69}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4]}, items = {ores[1],ores[2], ores[3], ores[5], ores[6], ores[7], ores[9],ores[10], ores[11], ores[13], ores[14], ores[15]}, iselect = 2, bstart = 1, gstart = 4, lbstart = 7, rstart = 10, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {70,89}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4], stones.scrystal[1], stones.scrystal[2], stones.scrystal[3], stones.scrystal[4]}, items = {ores[1],ores[2], ores[3], ores[4], ores[5], ores[6], ores[7], ores[8], ores[9],ores[10], ores[11], ores[12], ores[13], ores[14], ores[15], ores[16]}, iselect = 3, bstart = 1, gstart = 5, lbstart = 9, rstart = 13, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 }, { level = {90,100}, stone = {stones.crystal[1], stones.crystal[2], stones.crystal[3], stones.crystal[4], stones.lcrystal[1], stones.lcrystal[2], stones.lcrystal[3], stones.lcrystal[4], stones.pcrystal[1], stones.pcrystal[2], stones.pcrystal[3], stones.pcrystal[4], stones.scrystal[1], stones.scrystal[2], stones.scrystal[3], stones.scrystal[4]}, items = {ores[1],ores[2], ores[3], ores[4], ores[5], ores[6], ores[7], ores[8], ores[9],ores[10], ores[11], ores[12], ores[13], ores[14], ores[15], ores[16]}, iselect = 3, bstart = 1, gstart = 5, lbstart = 9, rstart = 13, chance = 10, qtdmax = 1, expgainmin = 1, expgainmax = 1 } } function onUse(cid, item, fromPosition, itemEx, toPosition) local getMiningLevel = getPlayerStorageValue(cid, config.storagemining) local getMiningExp = getPlayerStorageValue(cid, config.experiencemining) if getMiningLevel == -1 then setPlayerStorageValue(cid, config.storagemining, 0) end if getMiningExp < 0 then setPlayerStorageValue(cid, config.experiencemining, 0) end if (isInArray(stones.crystal, itemEx.itemid) or isInArray(stones.lcrystal, itemEx.itemid) or isInArray(stones.pcrystal, itemEx.itemid) or isInArray(stones.scrystal, itemEx.itemid)) then for a = 1, #levels do min = levels[a].level[1]; max = levels[a].level[2] if (getMiningLevel >= min and getMiningLevel <= max) then if isInArray(levels[a].stone, itemEx.itemid) then if (math.random(1, 100) <= levels[a].chance) then quantity = math.random(1, levels[a].qtdmax) experience = math.random(levels[a].expgainmin, levels[a].expgainmax) if isInArray(stone.blue, itemEx.itemid) then iselection = math.random(levels[a].bstart, levels[a].bstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.green, itemEx.itemid) then iselection = math.random(levels[a].gstart, levels[a].gstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.lightblue, itemEx.itemid) then iselection = math.random(levels[a].lbstart, levels[a].lbstart + levels[a].iselect) collect = levels[a].items[iselection] end if isInArray(stone.red, itemEx.itemid) then iselection = math.random(levels[a].rstart, levels[a].rstart + levels[a].iselect) collect = levels[a].items[iselection] end if getMiningLevel == 100 then doSendMagicEffect(toPosition, 9) doPlayerSendTextMessage(cid, 22, text) doPlayerAddItem(cid, collect, quantity) elseif getMiningLevel <= 99 then if getMiningExp >= config.expperlevel then doSendMagicEffect(getCreaturePosition(cid), 49) setPlayerStorageValue(cid, config.storagemining, getMiningLevel + 1) setPlayerStorageValue(cid, config.experiencemining, getMiningExp - config.expperlevel) text = "You collected " ..quantity.. " matter" ..(quantity > 1 and "s" or "").. ". \n You have gained " ..experience.. " experience points in Mining. \n You advanced from mining skill level " ..getMiningLevel.. " to mining skill level " ..(getMiningLevel + 1).. "." else setPlayerStorageValue(cid, config.experiencemining, getMiningExp + experience) text = "You collected " ..quantity.. " matter" ..(quantity > 1 and "s" or "").. ". \n You have gained " ..experience.. " experience points in Mining. \n" ..(config.expperlevel - getMiningExp - experience).. " experience points left to next level. \nCurrent Mining Skill: " ..getMiningLevel.. "." end doSendMagicEffect(toPosition, 9) doPlayerSendTextMessage(cid, 22, text) doPlayerAddItem(cid, collect, quantity) end else doSendMagicEffect(toPosition, 3) doSendAnimatedText(getCreaturePosition(cid), "Working!", COLOR_WHITE) end else doPlayerSendTextMessage(cid, 22, "You need to get better in Mining to mining this.") end end end else doSendMagicEffect(getCreaturePosition(cid), 2) doPlayerSendTextMessage(cid, 22, "You can't mining this.") end end  
    Em data/actions/actions.xml use: 
    <!-- MINING --> <action itemid="2553" event="script" value="elementalmining.lua"/>  
    Se tiver dúvidas a respeito de como configurar pergunte no tópico. As partes editáveis são: Local config, local Stone, local Ore, local Levels. Note que local Levels indica que algumas pedras só podeerão ser mineiradas ao ter mining level superior.
     
    Configurações das pedras:
    Em data/items/items.xml troque os nomes de cada pedra (os nomes ficam a seu critério ;p)
    <item id="2149" article="a" name="light earth substance" plural="light earth substance">         <attribute key="weight" value="1000" /> </item> <item id="2146" article="a" name="light ice substance" plural="light ice substance">         <attribute key="weight" value="1000" /> </item> <item id="2147" article="a" name="light fire substance" plural="light fire substance">         <attribute key="weight" value="1000" /> </item> <item id="2150" article="a" name="light energy substance" plural="light energy substance">         <attribute key="weight" value="1000" /> </item> <item id="7761" article="a" name="pure earth substance" plural="pure earth substance">         <attribute key="weight" value="1000" /> </item> <item id="7759" article="a" name="pure ice substance" plural="pure ice substance">         <attribute key="weight" value="1000" /> </item> <item id="7760" article="a" name="pure fire substance" plural="pure fire substance">         <attribute key="weight" value="1000" /> </item> <item id="7762" article="a" name="pure energy substance" plural="pure energy substance">         <attribute key="weight" value="1000" /> </item> <item id="12396" article="a" name="rare earth matter" plural="rare earth substance">         <attribute key="weight" value="1000" /> </item> <item id="6551" article="a" name="rare ice substance" plural="rare ice substance">         <attribute key="weight" value="1000" /> </item> <item id="6550" article="a" name="rare fire substance" plural="rare fire substance">         <attribute key="weight" value="1000" /> </item> <item id="12575" article="a" name="rare energy substance" plural="rare energy substance">         <attribute key="weight" value="1000" /> </item> <item id="8298" name="massive earth substance" plural="massive earth substance">         <attribute key="weight" value="1000" /> </item> item id="8302" name="massive ice substance" plural="massive ice substance">         <attribute key="weight" value="1000" /> </item> <item id="8303" name="massive energy substance" plural="massive energy substance">         <attribute key="weight" value="1000" /> </item> <item id="8299" name="massive fire substance" plural="massive fire substance">         <attribute key="weight" value="1000" /> </item> TRANSFORMAR PEDRAS EM MOEDAS
    Em data/actions/scripts/tools crie um arquivo .lua e nomeie como changecoin:
    local COINS = { LIGHT = { EARTH_SUBSTANCE = 2149, ICE_SUBSTANCE = 2146, ENERGY_SUBSTANCE = 2150, FIRE_SUBSTANCE = 2147 }, PURE = { EARTH_SUBSTANCE = 7761, ICE_SUBSTANCE = 7759, ENERGY_SUBSTANCE = 7762, FIRE_SUBSTANCE = 7760 }, RARE = { EARTH_SUBSTANCE = 12396, ICE_SUBSTANCE = 6551, ENERGY_SUBSTANCE = 12575, FIRE_SUBSTANCE = 6550 }, MASSIVE = { EARTH_SUBSTANCE = 8298, ICE_SUBSTANCE = 8302, ENERGY_SUBSTANCE = 8303, FIRE_SUBSTANCE = 8299 } } local TRANSFORM = { [COINS.LIGHT.EARTH_SUBSTANCE] = { TO = COINS.PURE.EARTH_SUBSTANCE }, [COINS.LIGHT.ICE_SUBSTANCE] = { TO = COINS.PURE.ICE_SUBSTANCE }, [COINS.LIGHT.ENERGY_SUBSTANCE] = { TO = COINS.PURE.ENERGY_SUBSTANCE }, [COINS.LIGHT.FIRE_SUBSTANCE] = { TO = COINS.PURE.FIRE_SUBSTANCE }, [COINS.PURE.EARTH_SUBSTANCE] = { FROM = COINS.LIGHT.EARTH_SUBSTANCE, TO = COINS.RARE.EARTH_SUBSTANCE }, [COINS.PURE.ICE_SUBSTANCE] = { FROM = COINS.LIGHT.ICE_SUBSTANCE, TO = COINS.RARE.ICE_SUBSTANCE }, [COINS.PURE.ENERGY_SUBSTANCE] = { FROM = COINS.LIGHT.ENERGY_SUBSTANCE, TO = COINS.RARE.ENERGY_SUBSTANCE }, [COINS.PURE.FIRE_SUBSTANCE] = { FROM = COINS.LIGHT.FIRE_SUBSTANCE, TO = COINS.RARE.FIRE_SUBSTANCE }, [COINS.RARE.EARTH_SUBSTANCE] = { FROM = COINS.PURE.EARTH_SUBSTANCE, TO = COINS.MASSIVE.EARTH_SUBSTANCE }, [COINS.RARE.ICE_SUBSTANCE] = { FROM = COINS.PURE.ICE_SUBSTANCE, TO = COINS.MASSIVE.ICE_SUBSTANCE }, [COINS.RARE.ENERGY_SUBSTANCE] = { FROM = COINS.PURE.ENERGY_SUBSTANCE, TO = COINS.MASSIVE.ENERGY_SUBSTANCE }, [COINS.RARE.FIRE_SUBSTANCE] = { FROM = COINS.PURE.FIRE_SUBSTANCE, TO = COINS.MASSIVE.FIRE_SUBSTANCE }, [COINS.MASSIVE.EARTH_SUBSTANCE] = { FROM = COINS.RARE.EARTH_SUBSTANCE }, [COINS.MASSIVE.ICE_SUBSTANCE] = { FROM = COINS.RARE.ICE_SUBSTANCE }, [COINS.MASSIVE.ENERGY_SUBSTANCE] = { FROM = COINS.RARE.ENERGY_SUBSTANCE }, [COINS.MASSIVE.FIRE_SUBSTANCE] = { FROM = COINS.RARE.FIRE_SUBSTANCE } } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then return false end local COIN = TRANSFORM[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) elseif(COIN.FROM ~= nil) then doChangeTypeItem(item.uid, item.type - 1) doPlayerAddItem(cid, COIN.FROM, ITEMCOUNT_MAX) end return true end  
    Em data/actions/actions.xml acrescente:
    <action itemid="2149" event="script" value="tools/changecoin.lua"/> <action itemid="2146" event="script" value="tools/changecoin.lua"/> <action itemid="2150" event="script" value="tools/changecoin.lua"/> <action itemid="2147" event="script" value="tools/changecoin.lua"/> <action itemid="7761" event="script" value="tools/changecoin.lua"/> <action itemid="7759" event="script" value="tools/changecoin.lua"/> <action itemid="7762" event="script" value="tools/changecoin.lua"/> <action itemid="7760" event="script" value="tools/changecoin.lua"/> <action itemid="12396" event="script" value="tools/changecoin.lua"/> <action itemid="6551" event="script" value="tools/changecoin.lua"/> <action itemid="12575" event="script" value="tools/changecoin.lua"/> <action itemid="6550" event="script" value="tools/changecoin.lua"/> <action itemid="8298" event="script" value="tools/changecoin.lua"/> <action itemid="8302" event="script" value="tools/changecoin.lua"/> <action itemid="8303" event="script" value="tools/changecoin.lua"/> <action itemid="8299" event="script" value="tools/changecoin.lua"/>  
    Script adicional:
    Bau/Chest - Comprar mesmo item com duas moedas diferentes  
    Isso é tudo, façam bom uso!
  16. Curtir
    KotZletY deu reputação a Celulose em Erro> WARNING: max_allowed_packet might be set too low for binary map storage. [21/4/2019 22:53:39] Use the following query to raise max_allow_packet: SET GLOBAL max_allowed_packet = 16776192;   
    abre o phpmyadmin (se você usa mysql) e adiciona em sql !
     
    SET GLOBAL max_allowed_packet = 16776192;
  17. Curtir
    KotZletY deu reputação a LeoTK em [Qualquer ACC] Limitador de caracteres   
    Salve galera bom achei um código bem simples porém que pode ajudar bastante gente para evitar criar por exemplo guildas com nomes muito grande ou qualquer outra coisa que queiram colocar limite de caracteres para usar
     
    Código
     
    data-ls-module='charCounter' maxlength='10' Bom é necessário adicionar esse código na linha que é colocado o nome de algo por exemplo no arquivo create_guilds.php do modern acc seria adicionado nessa linha
     
    echo "<input type='text' data-ls-module='charCounter' maxlength='10' name='name'><br />"; Dessa forma não permite o nome da guilda ultrapassar 10 caracteres
     

  18. Gostei
    KotZletY deu reputação a DdJs em Heroes Ruins | Cave Hunt | 8.60   
    Heroes Ruins
    Version: 8.60
     
    Download:

     
    Type: .Rar
    Size: 28KB
    Position(s): [X: 1029 Y: 1016 Z: 8]
    File password: tibiaking
     
    Scan:

     
    Images:
     
     
  19. Gostei
    KotZletY deu reputação a Cat em Lista completa de Tibia Clients na versão 7.x   
    TIBIA CLIENT 7.x
     
    PRINCIPAIS
    tibia74.zip tibia755.zip tibia76.zip tibia781.zip tibia79.zip tibia792.zip
     
    OUTROS
    Tibia701.zip Tibia702.zip Tibia713.zip Tibia721.zip Tibia723.zip Tibia724.zip Tibia726.zip Tibia727.zip Tibia741.zip Tibia75.zip Tibia772.zip Tibia77.zip Tibia78.zip 
     
    Sobre Updates do Tibia: https://www.tibiawiki.com.br/wiki/Updates_e_Patches
    About Tibia Updates: https://tibia.fandom.com/wiki/Updates
     
  20. Curtir
    KotZletY deu reputação a KOLISAO em [ShowOff] Aura System - ClassicYurots 8.6   
    Apenas um showoff do sistema de aura do meu servidor
     
     
     
    Aproveite e assista os outros vídeos do servidor no canal.
     
  21. Curtir
    KotZletY deu reputação a Namikaze em Blood City Remake   
    Download link acima ^ 
     
    Hellou!!
    Estou modificando um Mapa, tentando deixar a cidade mais bonita porém com traps que deixe o PvP atraente com mais mecânicas,scaps etc. Também tentar passar mais seriedade e inserir um pouco de Rpg. Faço sozinho tenho pouco tempo e sabe lá Deus quando vai ficar pronto kkkk.
    Segue as fotenhas ?:
     
     
                                                       Templo

     
                                 Loja de Munições,Crossbow e Bow

     
     Terraço da Loja, Com alvos para treinas as flechadas no coração da morena

     
                 Loja de Utilitários Com umas Mecanicaszinhas para PvP.

     
    Um dos acessos para uma parte digamos alta da cidade. mw ai é o fino.

     
     
     
     
     
     
     
     
     
     
     
  22. Obrigado
    KotZletY recebeu reputação de Faisca em [Narutibia] Jinchuuriki System - Distro 0.4   
    Salve rápázyádá, recentemente estava de rolê pelo tk, e vi um tópico com o seguinte pedido: "Jinchuuriki System", pra que não conhece irei da um breve resumo.
     
    Para quem conhece o anime naruto sabe sobre as bijuus, e que elas foram seladas em shinobis destinados a carregar tamanha responsabilidade devido a cada biju ter um poder destruidor, como por exemplo a bijuu raposa de nove caldas(Kyuubi), selada dentro do personagem principal chamado de Naruto Uzumaki, a Kyuubi quando dominada, dá ao usuário uma grotesca quantidade de chakra, assim como jutsus e muito mais, cada bijuu tem sua especialidade, jutsus de defesa, assim como a própia defesa e resistência do usuário a tais jutsus, mas claro para você ter a bijuu, é necessário que você sele-a dentro de você, através de um dos jutsus proibidos, como o Shiki Fuujin usado por Minato o 4º Hokage e também pai de naruto, ao usar o selo ele consome a alma de quem usa levando-o a morte após o termino do jutsu, minato como hokage não poderia deixar a kyuubi destruir a vila, então ele invoca o Selo Consumidor do Demônio Morto(Shiki Fuujin) conhecido também como Selo Ceifeiro da Morte, e sela a kyuubi dentro de seu própio filho salvando a vila e morrendo como herói, e naruto desde então passa a ser o Jinchuuriki da raposa de nove caldas.
     
     
    Tendo uma ideia básica de como funciona, vamos a explicação do sistema, que não é diferente.
     
    Ao usar um jutsu(spell) de selo em algum bijuu(monstro), você terá ele selado dentro de você e obterá os jutsus de acordo com cada bijuu, mas para isso, a vida(hp) da bijuu deve está menor que 20%(configurável), e então você durante 2(configurável) dias, terá ele selado dentro de você e poderá usar os jutsus, ao acabar esse tempo você irá perdelo, assim como os jutsus.
    Sistema criado e testado na versão 8.60 usando uma distro na versão 0.4, mesmo assim pode funcionar em versões inferiores!!
     
    Siga os passos corretamente que é sucesso.
     
    Vá em data/lib e crie um arquivo chamado JinchuurikiSystem.lua e coloque o seguinte code dentro:
     
    A tabela está de acordo com a ordem de bijuus existente desde o bijuu de 1 calda, até a biju de nove caldas, então você irá mexer somente em qual ou quais jutsus(spells) cada bijuu irá usar, mais precisamente aqui:
    spells = {""} entre aspas coloque a quantidade que seja de jutsus(spell), como por exemplo:
    Tk no Jutsu 1- Tk no jutsu 2, separados por virgula, assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2"} Lembrando que o nome das spells não é a que fica em words, é que  fica em name na xml, por exemplo:
    eu tenho um jutsu chamado kai, quem joga narutibia sabe pra que serve, para usar ela, usamos o nome que está em words, e a que fica em name, será que vai ser mostrada quando for usar, entretanto a função que faz o player aprender a spell, segui pelo nome:
    <instant name="Kai!" words="kai" note que contém uma exclamação no nome da spell, então vai ter que ir exclamação e tudo junto, ficando assim:
    spells = {"Tk no jutsu 1", "Tk no jutsu 2", "Kai!"} e então quando o player for usar a spell pelo words kai, a spell será usada.
     
    Agora vá em data/spells/scripts crie um arquivo chamado selojin.lua e coloque o seguinte code dentro:
     
    Agora vá em data/spells/scripts crie um arquivo chamado buff bijuu.lua e coloque o seguinte code dentro:
     
     
    a tag que você irá colocar na spells.xml para esse jutsu(spell) será a seguinte:
    <instant name="Shiki Fuujin" words="shiki fuujin" lvl="1" mana="1" prem="0" exhaustion="10" enabled="1" needtarget="1" event="script" value="selojin.lua"> </instant> <instant name="Buff Jin" words="buff jin" lvl="1" mana="0" prem="0" selftarget="1" exhaustion="1000" enabled="1" event="script" value="buff bijuu.lua"> </instant>  
     
    Agora vá em data/talkactions/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse comando serve para você checar quanto tempo você tem de Jinchuuriki, e qual bijuu está selado dentro de você.
    A tag da talkactions.xml para esse jutsu(spell) é a seguinte:
    <talkaction words="!jincheck" event="script" value="jincheck.lua"/>  
    Agora vá em data/globalevents/scripts e crie um arquivo chamado jincheck.lua e coloque o seguinte code dentro:
     
    Nota: esse script checa a cada um minuto, os players online na qual o tempo de Jinchuuriki já expirou, e então remove, para assim ele não continuar com os jutsus.
     
    A tag do globalevents.xml desse script é a seguinte:
    <globalevent name="JinSystem" interval="60000" script="jincheck.lua"/>  
    Agora pra finalizar vá em data/creaturescripts/scripts e crie um arquivo chamado jinsystem.lua e adicione o seguinte code:
     
    e a tag do creaturescripts.xml desse script é a seguinte:
    <!-- Jinchuuriki System --> <event type="look" name="JinSystemLook" event="script" value="jinsystem.lua"/> <event type="death" name="JinSystemDeath" event="script" value="jinsystem.lua"/> <event type="login" name="JinSystemLogin" event="script" value="jinsystem.lua"/> <event type="logout" name="JinSystemLogout" event="script" value="jinsystem.lua"/>  
    Nota: na spells.xml que não precisam ter uma vocação especifica para ser usada e devem conter a tag:
    needlearn="1" contendo essa tag, a spell não irá aparecer para nenhum player e não poderá ser usado até que o player sele a bijuu, após ser aprendida quando o player sela a bijuu, irá aparecer no comando !jutsus que em servidores normais é o spellbook e o !spells, em quanto o player não selar, ele não ver e nem pode usar.
     
    bijuu_outfit é o id da looktype que o player vai ganhar ao usar o buff(se você tem outro buff ou speel que faça o mesmo, remova-o ou então remova a função doSetCreatureOutfit da minha buff, assim não gerando conflito e ficando o outfit que deseja).
    skill_p é a quantidade de pontos que ao usar o buff da bijuu, vai add no player.
    time_buff é quanto tempo o buff vai ficar no player valendo também para a looktype.
    effBuff é o id do efeito que vai sair em cima do player quando ele usar o buff.
     
    Pronto, basta configura a spells que cada bijuu(monstro), e pronto.
    Acho que não preciso explicar como configurar, no própio script deixei umas observações.
     
    É totalmente proibido levar meu sistema para outro blog, site ou fórum, fiz esse sistema exclusivamente para membros da comunidade do TibiaKing.
     
     
    Quaisquer erros, sugestões, críticas(construtivas), fiquem a vontade, caso tenha alguma duvida sobre tal parte do script, ou não entendeu alguma parte de como configurar, basta comentar que estarei dando suporte.
     
    Script feito por mim.
     
     
     
    Abraços, bom uso, e boa noite! xD
  23. Curtir
    KotZletY deu reputação a chavoz em Shiny Charm Pokemon   
    Ola Amigos,
    Eu vi que ninguém ainda publicou o sistema Shiny Charm. Muitos servidores já o possuem. Eu crio um para o meu. Eu os compartilho.
     
    Voces precisam da função onSpawn em creaturescript, na atualidade axo que devem ter todos em seu servidor.
    Tambem precisa a funcao getSpectators, eu tenia adicionada nas sources default do meu distro (TFS 0.4)
    Edite seu spawn.lua. nas primeras lineas
    local shinysSpawn = { "Dodrio", "Rhydon", "Ariados", "Politoed", "Espeon", "Umbreon", "Stantler", "Mr. Mime", "Crobat", "Magmar", "Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate" } local function doShiny(cid) if not isCreature(cid) then return true end local name2, pos2 = "Shiny ".. getCreatureName(cid), getThingPos(cid) doRemoveCreature(cid) doSendMagicEffect(pos2, 18) local shi = doCreateMonster(name2, pos2, false, true) setSto(shi, 74469, 1) end function onSpawn(cid) local name = getCreatureName(cid) if not isSummon(cid) and pokes[name] then if isInArray(shinysSpawn, name) then if getSto(cid, 74469)<=0 and getSto(cid, 22546)<=0 and getSto(cid, 637500)<=0 and getSto(cid,"golden")<=0 then if math.random(1, 120) == 1 then local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then sendMsg(list[i],27,"[Shiny Charm] Acaba de nacer un Shiny "..name.."! No fue por causa de Shiny Charm!") end end doShiny(cid) return true else --check for Charms local ch=1 local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then ch = ch + 1 if getSto(list[i],13082)>=1 then ch = ch+1 end--2x super if math.random(1, 120) <=ch then doShiny(cid) sendMsg(list[i],27,"[Shiny Charm] Felicidades grande aventurero! Nacio un Shiny "..name.." cerca tuyo por causa de tu Shiny Charm!") return true end end end ------ end end end Explicação: Basicamente, esta edição é o que está perguntando se há jogadores ao redor do Pokemon selvagem no nascimento. Se houver algum, peça para cada um deles se eles tiverem um feitiço brilhante Normal ou Especial. Se houver algum, então existe a possibilidade de que, se falhar na primeira vez que fique brilhante, ele pede novamente para cada jogador que encontrar.
    O encanto brilhante dos jogadores pode ser acumulado, se houver 3 jogadores ao redor de um Charizard (exemplo), haverá mais chances de ele se tornar Brilhante (já que ele passa pelo ciclo 3 vezes).
    Eu espero que você entenda.
     
    Edits: voce pode mudar aki no siguiente texto, 20, 20 e a distancia em SQM que o pokemon vai procurar jogadores (no mesmo andar na uma hunt).
    13081 e 13082 sao storages do shiny charm e shiny charm Especial (doble chance do normal)
    (1, 120) o rate do aparicao do Shiny selvagem. local ch = 1 e rate extra do shiny charm normal, e ch=ch+1 sumaria o doble do normal (2). Se o random do 1,120 e menor o iguai que ch, entao shiny selvagen aparece.
    local ch=1 local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then ch = ch + 1 if getSto(list[i],13082)>=1 then ch = ch+1 end--2x super if math.random(1, 120) <=ch then  
    Peço desculpas pelo meu português, a verdade é que não sou Br, sou chileno. Eu envio uma saudação a todos!
    Créditos: Chavoz (eu)
    Voce pode publicar o sistema no outros forum, mais lembre dos Creditos pfv!
    Eu convido você a experimentar meu servidor do Pokemon, ta Online. O site é Pokexmortal.com.  Tenho sistemas varios como Market, Pokebar, Cast, Etc.
  24. Curtir
    KotZletY recebeu reputação de Griloz em AJUDA COM THEOTX CRASHANDO SOZINHO   
    Este tópico foi movido para a área correta. Esta é uma mensagem automática!
    Pedimos que leia as regras do fórum!
     
  25. Obrigado
    KotZletY recebeu reputação de LeoTK em (Resolvido)Spell regenerando mana por segundos   
    @Christinacsa
     
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo