Ir para conteúdo

Thalles Vitor

Conde
  • Total de itens

    989
  • Registro em

  • Última visita

  • Dias Ganhos

    32

Histórico de Reputação

  1. Upvote
    Thalles Vitor recebeu reputação de rafersiq em [AJUDA] erro no Loot dos pokes   
    Se você estiver de ADM, não vai dropar mesmo, por quê na source tem uma FLAG barrando drops para ADMs.
  2. Upvote
    Thalles Vitor recebeu reputação de GeanPro em Erro Spawn/Monster   
    Geralmente esse erro é por quê o monstro não existe no monsters.xml/não existe o arquivo na pasta monsters.
  3. Thanks
    Thalles Vitor deu reputação a BlazerX em [OTC] Trainer Card   
    Trainer Card
    Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.
     

     
    Como funciona?
    O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
    você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.
     

     
    Script do servidor:
    Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua
     
    Coloque a seguinte tag no arquivo do creaturescripts.xml:
    <event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/> Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:
    registerCreatureEvent(cid, "TrainerCard")
     
    Módulo otClient:
    Coloque o módulo na pasta do seu otClient em modules/ 
    Para abrir o módulo pressione a tecla Ctrl+Shift+Q
     

     
    Imagem do módulo:

     

     
    A base que foi utilizada do servidor foi a DarkXPoke.
    O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida,
    o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente
    diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera.
    Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional.
     

     
    Créditos:
     
  4. Thanks
    Thalles Vitor deu reputação a kttallan em PokéMaster X   
    Olá pessoal, me chamo Allan Harlen sou dono e criador da marca PokéMaster X. Sou bastante conhecido na área por algumas pessoas, já participei de diversos projetos conhecidos (enfase ao PokéAlpha e DarkxPoke) Nessa caminhada já estou com quase 9 anos de Tibia/Pokétibia e creio que consegui desenvolver um dos melhores e mais dinâmicos servidores online, que por sinal foi vazada. Por causa desse motivos nunca formei uma equipe, até agora! No decorrer desse 1 ano e meio de servidor a minha base foi vazada e vendida de diversas formas por membros da minha própria "equipe", como oque eu mais temia já havia acontecido resolvi hoje tomar a decisão de estruturar uma equipe mais preparada com os ideias que pretendo para o futuro do meu servidor. O PokéMaster X nunca foi um servidor grande (particularmente sempre gostei de poucos players, é mais fácil organizar e atualizar, levando em consideração também que sou o único que tinha o poder de resolver os problemas, então poucos players já eram o suficiente para me dar bastante trabalho, rsrs), tendo chegado no auge a seus 150 players e diariamente uma média de 30 a 60 players (isso varia bastante), a verdade é que meu servidor já tem tempo no mercado, é difícil atrair novos players, sendo que a diferença que impacta no game como level/itens e afins eles não conseguiram alcançar, porém eu sempre tento inovar, desda abertura do servidor eu lanço atualizações a cada 2 semanas em média, consegui isso graças a grande interação que minha equipe de tutores/gms tem com os players, modificando o game de acordo com o gosto dos players (claro, tudo conforme o possível e avaliando a proposta do game).
    Resumindo, venho por meio desse tópico procurar membros que tenham interesse em entrar na minha equipe, atualmente é formada por apenas 3 pessoas de minha confiança, porém são pessoas que não tem o conhecimento de algumas áreas importantes como Mapa/Programação (que é o que eu preciso) e só dão support in-game.
     
    A grande maioria de vocês já tem conhecimento do meu projeto por causa do vazamento, porém a base postada é de 1 ano atrás, já houve muita mudança! Vou mostrar um pouco do nosso servidor para vocês!
     
    Nosso servidor conta com 2 continentes próprios (Feito exclusivamente por mim), sendo eles Kanto e Hoenn!
     
     
    Também de nossa exclusividade o nosso OTcliente com um designer mais aberto e de estrutura quase móvel!
     
    Também temos um sistema de proteção em 2 fatores, sendo necessário o player digitar sua senha antes registrada para poder se mover após logar no servidor, evitando assim problema com hackers!
     
    Sistema de Held Itens (Todos eles funcionam, com excessão do Y-Ghost)
     
    Sistema de Multi-Addons, para pokémons normais e pokémons shinys.
     
     
    Sistema de Smeargle, sendo eles do 1 ate o 10, com sistema de reset dos sketch!
     
     
    Sistema de Fusão de Held/Fragmentos/Itens/Smeargle.
     
     
    Sistema de Survival Arena (Semelhante a Golden Arena, porém você ganha pontos por pokémons eliminados que podem ser trocados por prêmios).
     
     
    Embedded Tower (Um pouco diferente da PxG, sendo a área mais complexa com as recompensas diferenciadas, Tower NV5+ só em equipe!).
     
     
    Sistema de Daily Kill/Daily Catch/Daily Itens (Esse aqui é exclusivo do nosso servidor, no caso você entrega itens os itens que ele pediu e ganha o valor do item 2x)
     
    Market System
     
     
    Brotherhood System (Diferente da PxG a nossa BH é uma confederação e não uma quest, onde há 1 quest interna no nosso atual sistema).
     
     
    Particle Aura
     
     
    Clones Quest
     
     
    Sistema de PokéCard
     
     
    Berries System (Diferente da PxG, aqui você tem que coletar as berries nas arvores e depois planta-las em sua casa).
     
     
    Como vocês viram, o nosso servidor tem diversos sistemas próprios e em sua grande maioria desenvolvida por mim, porém dou crédito a grande programadores que me ajudaram bastante no decorrer da caminhada (Viktor [Tibiaking], Victor, Gustav e outros).
     
    Necessito de novos membros com as seguintes habilidades.
     
    Mapper (Intermédiario, não necessita saber manjar 100%, se tiver um conhecimento bom e usável talvez você possa ingressar!) Programador (Lua, C++, eu aprendi bastante a desenvolver sistemas em lua, porém peco bastante no C++ e OTC, necessito de uma pessoa nessa área). Outros (Se você tiver uma habilidade que seja diferencial e acha que vai agregar na equipe, é só me mandar uma mensagem informando-as).  
    Pequena observação! O PokéMaster X está aberto a 1 ano e 4 meses, nesse período de tempo o servidor nunca foi resetado, conseguimos (eu, tutores e players) manter um balanceamento muito grande no game referente a economia e atualizações, porém minha atual situação não dá conta de evoluir o servidor sozinho fazendo com que eu perca a grande maioria dos players que conquisto com divulgação e marketing, o servidor tem bastante conteúdo, porém tem muita coisa a ser feita, coisas pequenas que influenciam no game até sistemas bem elaborados que já estão no papel. Eu particularmente tenho bastante experiência na área de Mapas, essa é minha área, porém por ser a única pessoa a mexer no servidor tive que desenvolver conhecimento em outras áreas, chegando até o desenvolvimento de sistemas que é uma área muito boa, porém demanda tempo e é esse período tempo que eu não invisto em X coisa pois estou trabalhando em Y coisa que eu perco o tempo, exerço 3 funções acabando não dando conta de nenhuma, obrigado pela atenção.
    Outra observação importante, os membros que tem a intenção de entrar na equipe para ter acesso aos dados, sinto em lhe dizer, mas não conseguiram. A única vantagem de ter minha base vazada é que dá para trabalhar muito bem em cima dela, tanto na fase de testes quanto na produção.
    Peço que os interessados entre em contato por PM informando seus atributos e talvez se do interesse de ambos termos uma conversa mais elaborada!
    Lembrando que o servidor está Online, e você pode acessar e conferir os sistemas a qualquer momento.
    || www.pokemasterx.com.br ||
     
     
     
  5. Thanks
    Thalles Vitor deu reputação a XZero em [Resolvido] Revelando Bot mesmo no Ghost   
    @vinicius231 Vai na linha 154 e adiciona isso: https://pastebin.com/sqRfUYWp
    local x = getTopCreature(toPos).uid if isPlayer(x) and getPlayerGroupId(x) > 1 then     doPlayerSendTextMessage(x, 20, "O Player "..getCreatureName(cid).." esta pescando nesse local.") end
  6. Thanks
    Thalles Vitor deu reputação a Deadpool em [OTClient] Lock Button | MiniWindow   
    Então, voltei hoje praticamente a mexer com otserv. Formatei o pc e perdi todas as minhas coisas.. Dai, baixei um servidor ai, e to voltando a estudar no otcliente. Então, vou postar uma pequena feature, o botão de bloquear a miniwindow na tela, segue a imagem a baixo:
    (é algo besta, porem é util. Eu baixei o WOP, pois estou usando pra um projeto, e como eu fiz isso dae, resolvi postar huehe)

     
    Bem, essa feature funciona da seguinte forma: Se você colocar a window em qualquer lugar da tela, a window vai ficar lá imóvel, e mesmo que você feche ou desloge, a window vai ficar lá, a menos que você aperte no botão de novo(como na imagem), podendo mover novamente pra onde quiser.
     
    Arquivos: 
    em data/modules/corelib/ui jogue isto dentro, subistitua se mandar
    feature.rar
     
    em data/styles jogue isto dentro, subistitua se mandar
    30-miniwindow.rar
     
    feature.rar
    30-miniwindow.rar
  7. Thanks
    Thalles Vitor deu reputação a Gengo em [OtClient] Mensagem Personalizada   
    Hoje venho trazer um sistema que pode deixar seu servidor com um diferencial dos demais, espero que vocês possam aprender algo com esse sistema e criar outros tipos de personalização nas mensagens.
     
     
    O que seria essa personalização?
    Seria uma personalização da mensagem do broadcast, em vez de ficar aquela mensagem vermelha no meio da tela, você pode escolher sua própria cor para a mensagem, no fim do tópico demonstrarei com imagens para que você possa entender melhor.
     
     
    Script:
    Procure pela pasta no seu otclient em modules/game_textmessage e abra o arquivo textmessage.otui e substitua por esse:
     
    Agora na mesma pasta abra o arquivo textmessage.lua e procure pela função displayMessage e debaixo de:
    if msgtype == MessageSettings.none then return end Coloque o seguinte script:
     
     
     Feito essas alterações a personalização já deve estar funcionando, para testar você pode utilizar o seguinte comando:
     
    /bc green | O torneio mundial da Elite Four se iniciará em 15min. → Onde /bc é o comando broadcast 
    → green é a cor que deseja personalizar, pode ser tanto em hexa como o nome da cor 
    → mensagem qualquer
    → É necessário colocar o pipeline |  caso queira colocar uma outra cor, senão ele assumirá como padrão a cor vermelha do broadcast.
     
    Caso você não tenha o script do broadcast, porem é impossivel não ter já que é padrão nos servidores, vou deixar disponível aqui:
     
     
    Imagens de como fica in-game:
     
    Eai, vai ficar de fora? 
    Implemente já essa personalização e torne-se um servidor diferenciado dos demais.
  8. Thanks
    Thalles Vitor deu reputação a BlazerX em Security House [OtPokemon]   
    Security House
    Fala galera do Xtibia, como minha primeira de muitas contribuições, hoje venho trazer para vocês um sistema bem bacana visto no otPokemon.
     

     
    Como funciona?
    Basicamente o script não deixa que outras pessoas invitado nas houses pegue seus itens,
    somente o dono ou alguém invitado com aleta som pode pegar os itens da house.
     

     
    Script:
    Coloque na posta do seu servidor em data/creaturescript/ e coloque o nome securityHouse.lua
     
     
    Coloque a seguinte tag no arquivo do creaturescripts.xml:
    <event type="moveitem" name="securityHouse" event="script" value="player/securityHouse.lua"/>  
    Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:
    registerCreatureEvent(cid, "securityHouse")  

     
    É só isso mesmo, espero que a comunidade goste, pois estarei trazendo muito mais scripts.
     
    Observações:
    Caso haja algum erro na execução do script ou você esteja tendo problemas, só darei suporte aqueles que deixaram seu rep+
  9. Thanks
    Thalles Vitor deu reputação a Pluzetti2104 em Doação surpresa   
    Olá boa tarde, bom eu recebi de um colega um mini pack de sprites retiradas de um servidor, nao sei qual foi o servidor, porem elas nao me interessam, entao vim compartilhar com voces.
     

     
    No pack que está para download conté isso ai...bom proveito.
    doacao.rar
  10. Thanks
    Thalles Vitor deu reputação a JulianoZN em [TFS 0.3.6] Campo de visão > Max view Tiles   
    Obs: ja tem tutoriais aqui no xtibia porem estão tendo problemas entao vamos lá
    Antes de começar lembre-se esse codigo nao da de usar o old cliente depois
     
    Oque Precisa ?
    Source do Servidor  e    Source do OtClient
     
    Source usada: 
     
    Para nao dar bug na hora de subir escada ou desce, aumente o máximo de tiles que poderá ser carregado
    const.h
    procure por #define NETWORKMESSAGE_MAXSIZE 15360 mude para #define NETWORKMESSAGE_MAXSIZE valor que voce quer <OBS isso e para a quantidade de pixel será possivel receber sem bugar> #define NETWORKMESSAGE_MAXSIZE 1000000000 --- Valor que coloquei no meu  
    protocalgame.cpp
     
    procure por
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz)); }  
    Substitua por
     
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; 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)); }  
    procure por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); if(oldPos.y > newPos.y) // north, for old x { msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if(oldPos.y < newPos.y) // south, for old x { msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if(oldPos.x < newPos.x) // east, [with new y] { msg->AddByte(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if(oldPos.x > newPos.x) // west, [with new y] { msg->AddByte(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } } } } Substitua por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); 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); } } } }  
    Procure por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); }  
    Substitua por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); }  
    Procure por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up if(newPos.z == 7) //going to surface { 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.z - 3, 18, 14, 3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y + 1 - 6, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); }  
    Substitua por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //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); } Procure por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + 9, oldPos.y - 1 - 6, newPos.z, 1, 14, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, oldPos.y + 7, newPos.z, 18, 1, msg); } Substitua por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { 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); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y + Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); }  
    Agora no Map.h
    Procure por
    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;  
    Substitua por
    static const int32_t maxViewportX = 15; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 15; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14; static const int32_t maxClientViewportY = 8;  
    Agora no map.cpp do Otclient
    Procure por
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Substitua por
    { AwareRange range; range.left = 15; //Change this to = maxClientViewportX range.top = 15; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } ou por { AwareRange range; range.left = 14; //Change this to = maxClientViewportX range.top = 8; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); }  
  11. Thanks
    Thalles Vitor deu reputação a LeoTK em [Craft System PXG] Editado by Brunds   
    Fala galera então eu peguei o craft system deste tópico Clique Aqui e dei uma editada mudei os valores do tempo pra ficar certinho eu editei para o meu nto mas ficou legal então resolvi compartilhar eu fiz uma alteração no meu client no item 5941 que é o wooden stake quem quiser fazer a mesma alteração fique avontade a alteração que eu fiz foi para deixar o wooden stake igual o wood item 5901 agrupavel bom o método está logo abaixo é isso  fiquem com a script
     
    Script
     
    action xml
    <action itemid="ID DO ITEM" event="script" value="NOME DO ARQUIVO.lua"/>  
    print da modificação que fiz no wooden stake mudando ele para Stackable < ou empilhavel,agrupavel bom se estiver usando o OBJ vai tar agrupavel e no item editor vai estar stackable so marque essa opção no client e no item.otb e depois retire a marcação de multiuso do item no item.otb e no client ficando assim
     
    Itemeditor

     
    Client

     
    Link de download das outfits do lenhador
     
    Download das sprites de troca de Outfit:
    Créditos: (Bluester);
                        GabrielTXU;
                        Overllord;
                        Zipter98;
    PxG pelas sprites.
  12. Thanks
    Thalles Vitor deu reputação a lSainty em [OPEN-SOURCE] POKEMASTERX   
    Você diz o menu ali com pokedex, bag, vara e etc? Se for, é em game_pokemon/pokemon.otui, todas as opções ficam na menuWindow.
  13. Thanks
    Thalles Vitor deu reputação a Yan Liima em [Sistema] Trade Points   
    #Introdução
    Reparei que muitas pessoas estão atrás desse sistema que o DBOBR & NTOBR usa, e atualmente o VitorSubhi postou um, porém é necessário modificar as sources. Apesar de achar o dele bem melhor, estarei deixando este meu sistema(não é necessário mexer nas sources).
     
    #Funcionamente
    O jogador vai até um NPC e compra um papel, após ter comprado ele pode estar dando trade nesse papel e negociando com algum jogador, em troca de qualquer item. Ao finalizar a negociação, os points são transferidos/removidos(caso houver points na conta). Também é possivel comprar o papel por comando, estarei disponibilizando ambos para vocês.
     
    #Alguns prints:
     
    Estarei deixando o script para vocês em inglês, modifique como quiser ;D
    Então vamos lá...
     
    #Instalação
    Em data/lib crie um arquivo chamado tradepoints.lua cole isto dentro:
     
    Em data/creaturescript/tradepoints.lua:
     
    TAG:
    <event type="tradeaccept" name="Trade_Points" event="script" value="tradepoints.lua"/> <event type="traderequest" name="Trade_Points_Request" event="script" value="tradepoints.lua"/> login.lua:
    registerCreatureEvent(cid, "Trade_Points") registerCreatureEvent(cid, "Trade_Points_Request") NPC XML:
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Frodo" script="data/npc/scripts/trade_points.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="275" head="114" body="113" legs="113" feet="113" corpse="2212"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="message_greet" value="Hello |PLAYERNAME|. I sell some utensils and Premium Points Transfer for you to transfer points to other players, remember to buy use '10' to 10 points." /> </parameters> </npc> Data/npc/scripts/trade_points.lua:
     
    Caso queira que a compra do papel seja feita por talkactions, aqui está:
     
    TAG:
    <talkaction words="!sellpoints;/sellpoints" event="script" value="trade_points.lua"/>  
    Prontinho xD
    Agradecimentos ao Junior(lordzetros) por ajudar na função scanContainer e ao @VitorSubhi
  14. Thanks
    Thalles Vitor deu reputação a Walox em [OPEN-SOURCE] POKEMASTERX   
    Eu não sei se  ai ajudar muito a vocês, mas eu tenho o cliente que eles usaram como base juntamente com a sources.... Provavelmente seja compativel ou pode faltar funções mais ai é com vocês rsrs
    Seguem o Link: https://mega.nz/#F!wIwzkDxA!kIDcEyVUNOfMPO1R3Zj8Qw
  15. Thanks
    Thalles Vitor deu reputação a Markowiicz em Markowicz's show off   
    Fala aí galera, tranquilo?
    Aqui vai um show off do mapa do PokeChaos, que é desenvolvido por mim, Markowicz.
    Criticas construtivas são bem vindas.


    Uma parte de Fuchsia:


    Parte venenosa em fuchsia: 


    Uma parte da Saffari Zone:


    Passagem do Snorlax em Celadon, conforme o anime:


    Partes da Floresta de Viridian:


    Mt.Moon/Stone Village:


    Área fantasma:


    E por fim, ginásio de Vermilion:

    Observações:
    Esses mapas foram desenvolvidos entre 2015 e 2017, desde então, quaisquer update em relação ao meu conteúdo, eu irei postar como resposta desse tópico.

  16. Thanks
    Thalles Vitor deu reputação a XZero em [OPEN-SOURCE] POKEMASTERX   
    Eu  já tinha em mãos esse servidor faz um tempinho, fiquei sabendo que ele foi roubado e o ladrão ta faturando, sendo esse ot: http://www.pokemasterx.com.br/
  17. Thanks
    Thalles Vitor deu reputação a JulianoZN em [OPEN-SOURCE] POKEMASTERX   
    Direto e rápido \/ Créditos : Dono do servidor Rodrigo e kttallan Postando a pedido dele FEATURES ~~ - SHINY CHARM SYSTEM - POKE CARD SYSTEM - VARIAS QUESTS COMO CYBER E CLONES - DAILY QUESTS - 3° GERAÇÃO - SISTEMA DE CLAN, DUNGEUN DE CLAN E SKILL DE CLAN - EMBEDDED TOWER - BROTHERHOOD - Market System FILES BASE POKEMASTERX SERVIDOR>> https://www.mediafire.com/file/5xumyzyoyoap089/servidor.zip/file SOURCES>> https://www.mediafire.com/file/gmsgv5adofj9ms5/source.zip/file CLIENTE>> https://www.mediafire.com/file/p123k5566ir5ztf/OTC.zip/file SITE>> https://www.mediafire.com/file/w6k8v379p076chz/html.zip/file Créditos pelo excetuável Windows
    Deadpool
     
    Download ><
    https://www.mediafire.com/file/9b9otysmodss0b7/dll_e_.exe.rar/file
     
    Scanner >< Creditos <> JulianoZN
    https://www.virustotal.com/gui/file/09454a58b8e4b6e93cac68d3491af25cda0840c480e03a52b1403e821cdd27c7/detection
     
    Créditos pelo excetuável Windows
    Drakopoulos
     
    Download ><
    https://www.mediafire.com/file/h5llyn57j8z9d1c/MasterX_Visual_C++_x64_+_Dlls.7z/file
     
    Scanner >< Creditos <> JulianoZN
    https://www.virustotal.com/gui/file/775b33bb559284abe78df63524cd6ce421c85dccd36d333ec827681acd80b998/detection
     
    Créditos pelo cliente/source
    Walox
     
    Download >< Mega.nz
    https://mega.nz/#F!wIwzkDxA!kIDcEyVUNOfMPO1R3Zj8Qw
    >>>>>QUEBRADO /\
     
    Créditos pelo reupload cliente/source
    JulianoZN
     
    Download >< Mega.nz
    https://mega.nz/folder/5qZFTIgS#8jkI6r-44bIdkS0fkKXiUw
    >>>>>QUEBRADO /\
     
     
    Scanner > Baixando para fazer o scanner
     
     
     
     
     
    Prints

     

     

     
    Scanner
    Servidor >
    https://www.virustotal.com/gui/file/d3878f934f4953705e042c67472b06ee52180b49b1e46791d6595bbb47b63ff7/detection
     
    Source >
     
    https://www.virustotal.com/gui/file/e1d9df90d4a3f3da091d7d4a652a1a04200ee858bbec7511de6653c5872fc4e8/detection
     
    OTC
     
    https://www.virustotal.com/gui/file/b2ef9894a65c2baf3a42b9d72fde57d7112e5bee958374f0e2fe272fa2a002ba/detection
     
    Site
    https://www.virustotal.com/gui/file/668974f55994e084a5e0a02307e10ec8abddaae9416aca1c9c695ae655087154/detection
     
  18. Thanks
    Thalles Vitor deu reputação a PoRaI em OTClient Module Maker   
    Bom, tem um tempo que eu tinha começado a desenvolver esse programa mas havia parado. Estou voltando com ele e vou trazer exclusivamente para o XTibia. Um programa para criar janelas para o OTClient. Ele ainda está um tanto quanto incompleto, mas, estou fazendo este post para mostrar o progresso dele. Quando as principais funções estiverem prontas, irei publica-lo e irei lançar constantes atualizações. É algo que eu vou usar, então, irei trabalhar bem nele.
     
    GIFS:

    Um plano que eu tinha em mente:

    Conforme vou atualizando, vou postando aqui. Qualquer duvida ou sugestão, deixe ai nos comentários. :3
  19. Upvote
    Thalles Vitor deu reputação a Yan Liima em TENHO VPS GOOGLE CLOUD MAS NAO CONSIGO DEIXAR ONLINE   
    Corrigindo, ele criou 9 maquinas por conta que nas anteriores ele não conseguiu resolver. Mas na ultima deu certo, mas ele usa apenas uma.
  20. Thanks
    Thalles Vitor deu reputação a Strogman em PokeVkS   
    E aí, galera!
    Hoje venho apresentar para vocês um incrível projeto que está por vim chamado PokeVKS!
     
      O PokeVKS tem como foco trazer um game intuitivo e agradável pensando nos jogadores. O PokeVKS é um jogo sem fins lucrativo que utilizará de doações para manter o jogo online e sua manutenção e atualizações.
      Hoje o PokeVKS tem dois membros na equipe, um que cuida do mapa e site e, outro que cuida da parte de programação, o motivo de ter só dois na equipe foi opcional pós ainda não temos necessidades de ter mais membros. O jogo se encontra com apenas a primeira geração de pokemons, e podendo vir mais através do tempo com atualizações, mas até o momento se encontrar somente com essa, alem de também o server ser feito praticamente do 0.
      O PokeVKS sempre visará nos players, assim sempre estaremos atentos a sugestões e opiniões de jogadores.
     
  21. Thanks
    Thalles Vitor deu reputação a raulcdj em Sistema de remover addon do pokemon   
    Ola pessoa hoje venho trazer para comunidade Xtibia o sistema de remove addon do pokemon não esta 100% na hora que você remove addon da esse erro "OnUse" 
    Bom vamos la.
    Lembrando que não  fui eu o criador foi o " TheRatazana do otserver brasil" eu tentei e não deu certo então ele me ajudo espero que ajude vocês.
    se estiver no lugar errado peço desde já desculpa pois nunca criei um topico aqui para scripts. 
     
    vai em Servidor / data / actions addon
     
    Pra que funcione legal, você precisa adicionar isso aqui na linha 30 do seu sistema
    doSetItemAttribute(pb, "addonItem", item.itemid) ele tem que fica assim no Actions.
     
    function onUse(cid, item, fromPosition, itemEx, toPosition)
                    
                     local addons = {
                    -- Snorlax
                    [13847] = {pokemon= "Snorlax", looktype = 1558, nome = "Bear Cap", fly =  0, ride = 0, surf = 1560},
                    [13848] = {pokemon= "Snorlax", looktype = 1561, nome = "Polar Bear Cap", fly =  0, ride = 0, surf = 1557},
                    [13849] = {pokemon= "Snorlax", looktype = 1564, nome = "Chef Costume", fly =  0, ride = 0, surf = 1563},
                    [13850] = {pokemon= "Snorlax", looktype = 1567, nome = "Obelix Costume", fly =  0, ride = 0, surf = 1566},
                    [13851] = {pokemon= "Snorlax", looktype = 1571, nome = "Sushilax", fly =  0, ride = 0, surf = 1572},
                    [13852] = {pokemon= "Snorlax", looktype = 1569, nome = "The Gray", fly =  0, ride = 0, surf = 1570},
                    
                    -- Shiny Snorlax
                    [13847] = {pokemon= "Shiny Snorlax", looktype = 1580, nome = "Bear Cap", fly =  0, ride = 0, surf = 1582},
                    [13848] = {pokemon= "Shiny Snorlax", looktype = 1574, nome = "Polar Bear Cap", fly =  0, ride = 0, surf = 1575},
                    [13849] = {pokemon= "Shiny Snorlax", looktype = 1577, nome = "Chef Costume", fly =  0, ride = 0, surf = 1579},
                    [13850] = {pokemon= "Shiny Snorlax", looktype = 1584, nome = "Obelix Costume", fly =  0, ride = 0, surf = 1583},
                    [13851] = {pokemon= "Shiny Snorlax", looktype = 1589, nome = "Sushilax", fly =  0, ride = 0, surf = 1590},
                    [13852] = {pokemon= "Shiny Snorlax", looktype = 1586, nome = "The Gray", fly =  0, ride = 0, surf = 1587},
                    
                    -- Shiny Charizard
                    [13857] = {pokemon= "Shiny Charizard", looktype = 1603, nome = "white spot", fly =  1602, ride = 0, surf = 0},
                    [13854] = {pokemon= "Shiny Charizard", looktype = 1607, nome = "Traveler Bag", fly =  1606, ride = 0, surf = 0},
                    [13853] = {pokemon= "Shiny Charizard", looktype = 1604, nome = "Charla Flower", fly =  1605, ride = 0, surf = 0},
                    [13856] = {pokemon= "Shiny Charizard", looktype = 1608, nome = "Skull Dragon", fly =  1609, ride = 0, surf = 0},
                    
                    -- Charizard
                    [13857] = {pokemon= "Charizard", looktype = 1593, nome = "white spot", fly =  1592, ride = 0, surf = 0},
                    [13854] = {pokemon= "Charizard", looktype = 1595, nome = "Traveler Bag", fly = 1594, ride = 0, surf = 0},
                    [13853] = {pokemon= "Charizard", looktype = 1597, nome = "Charla Flower", fly = 1596, ride = 0, surf = 0},
                    [13855] = {pokemon= "Charizard", looktype = 1599, nome = "helmet Dragon", fly = 1598, ride = 0, surf = 0},
                    [13856] = {pokemon= "Charizard", looktype = 1600, nome = "Skull Dragon", fly =  1601, ride = 0, surf = 0},
                   }
                    
                    if #getCreatureSummons(cid) > 0 then
                                    doPlayerSendCancel(cid, "Por favor, de volta seu pokemon.")
                                    return false
                    end     
                    local addon = addons[item.itemid].looktype
                    local fly = addons[item.itemid].fly
                    local ride = addons[item.itemid].ride
                    local surf = addons[item.itemid].surf
     
                    local pb = getPlayerSlotItem(cid, 8).uid
                    local pk = addons[item.itemid].pokemon
     
                    if getItemAttribute(pb,"poke") ~= pk then
                                    doPlayerSendCancel(cid, "Desculpe, voce não pode usar este addon nesta pokemon.")
                    return false
                    end
     
                    if getItemAttribute(pb,"addon") >= 0 then
                                    doRemoveItem(item.uid, 1)
                                    doPlayerSendTextMessage(cid, 27, "Parabens! Agora seu pokemon vai usar o addon.")
                                    doSetItemAttribute(pb,"addon",addon)
                                    doSetItemAttribute(pb,"addonfly",fly)
                                    doSetItemAttribute(pb,"addonride",ride)
                                    doSetItemAttribute(pb,"addonsurf",surf)
                                    doSetItemAttribute(pb, "addonItem", item.itemid)
                                    return true
                    end     
     
    return true
    end
     
    vai em Servidor\data\talkactions\scripts cria um arquivo lua e mude o nome para addon
     
    function onSay(cid, words, param, channel)
        if #getCreatureSummons(cid) > 0 then
            doPlayerSendCancel(cid, "Please back your pokemon.")
            return false
        end
        local pokeball = getPlayerSlotItem(cid, 8).uid
        if getItemAttribute(pokeball,"addon") <= 0 then
            doPlayerSendCancel(cid, "Nenhum addon para remover.")
            return false
        end
        
        doPlayerAddItem(cid, getItemAttribute(pokeball, "addonItem"))
        doPlayerAddItem(cid, getItemAttribute("addonItem"))
        doSetItemAttribute(pokeball, "addon", 0)
        doSetItemAttribute(pokeball, "addonfly", 0)
        doSetItemAttribute(pokeball, "addonride", 0)
        doSetItemAttribute(pokeball, "addonsurf", 0)
        doSetItemAttribute(pokeball, "addonItem", 0)
        doPlayerSendTextMessage(cid, 28, "Você removeu o addon do seu pokemon.")
        return true
    end
     
    agora vai em talkaction.xlm e coloca essa tag la
     
     <talkaction words="/addonsRemove" access="1" event="script" value="addons.lua"/>
  22. Thanks
    Thalles Vitor deu reputação a Ayron5 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 ^^ 
  23. Thanks
    Thalles Vitor deu reputação a Ayron5 em Custom Health Bar   
    Mano, vai estar assim lá na source.
     Aí vc vai procurar por isso 
     
     E substituir ele pra isso 
    Ficando assim...
    Tenta aí ^^ 
  24. Thanks
    Thalles Vitor deu reputação a Benny em [OTClient] Cor no nome por tag (ADM;GM;HELP)   
    PREVIEW:
     
     
    CÓDIGO:
     
    Abra o creature.cpp da source do seu otclient e procure por: 
    void Creature::setHealthPercent(uint8 healthPercent) Substitua tudo por:
    void Creature::setHealthPercent(uint8 healthPercent) { if(m_name.find("[ADM]")!=std::string::npos) m_informationColor = Color(0x00, 0x2a, 0xff); else if(m_name.find("[GM]")!=std::string::npos) m_informationColor = Color(0x00, 0xff, 0x0c); else if(m_name.find("[HELP]")!=std::string::npos) m_informationColor = Color(0xff, 0x00, 0x00); else if(healthPercent > 92) m_informationColor = Color(0x00, 0xBC, 0x00); else if(healthPercent > 60) m_informationColor = Color(0x50, 0xA1, 0x50); else if(healthPercent > 30) m_informationColor = Color(0xA1, 0xA1, 0x00); else if(healthPercent > 8) m_informationColor = Color(0xBF, 0x0A, 0x0A); else if(healthPercent > 3) m_informationColor = Color(0x91, 0x0F, 0x0F); else m_informationColor = Color(0x85, 0x0C, 0x0C); m_healthPercent = healthPercent; callLuaField("onHealthPercentChange", healthPercent); if(healthPercent <= 0) onDeath(); } Explicação:
     
    [ADM] é a tag (Qualquer personagem que tenha [ADM] no nome)
    Color(0x00, 0x2a, 0xff) é a cor. No caso, você tem que usar cores RGB Hexadecimais, pode encontrar uma tabela AQUI e completar com 0x.
    Exemplo:
    A cor amarela tem como código: #FFFF00
    Ficaria assim: Color(0xFF, 0xFF, 0x00)
     
    Qualquer dúvida, à disposição!
    Créditos: @Refe
     
    Abração!!
     
  25. Thanks
    Thalles Vitor deu reputação a Benny em [OTClient] Shiny Name   
    PREVIEW:

     
    CÓDIGO:
    Procure essa parte em creature.cpp:
    if(drawFlags & Otc::DrawNames) { if(g_painter->getColor() != fillColor) g_painter->setColor(fillColor); m_nameCache.draw(textRect); }  
    Troque por:
    if (drawFlags & Otc::DrawNames) { if (g_painter->getColor() != fillColor) g_painter->setColor(fillColor); CachedText shiny; shiny.setText("Shiny"); shiny.setFont(g_fonts.getFont("verdana-11px-rounded")); Rect shinyrect = Rect(point.x - shiny.getTextSize().width() / 2.0, point.y - 26, shiny.getTextSize()); if (m_name.find("Shiny") != std::string::npos) { char* shinys = "Shiny"; std::string nname = m_name; nname.erase(0, 5); m_nameCache.setText(nname); m_nameCache.draw(textRect); g_painter->setOpacity(0.5); g_painter->setColor(Color(255, 255, 0)); shiny.draw(shinyrect); g_painter->resetColor(); g_painter->resetOpacity(); m_nameCache.setText(m_name); } else { m_nameCache.draw(textRect); } }  
    Créditos: @Refe
  • Quem Está Navegando   0 membros estão online

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