Ir para conteúdo

Líderes


Conteúdo Popular

Mostrando conteúdo com a maior reputação desde 08-07-2019 em todas áreas

  1. 2 pontos
    Gengo

    [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.
  2. 1 ponto
    kttallan

    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 ||
  3. 1 ponto
    kttallan

    Duvidas Modules OTClient

    Essa parte no OTmod do servidor. Name: nome da pasta @onLoad: function de inicialização do module. @onUnload: function de terminação do module. se não tem nada é = nil isso é uma function da source do otcliente g_game é que faz a chamada! As outras questões você tem que estudar o module por completo para poder entender seu funcionamento..
  4. 1 ponto
    Yan Liima

    xTibia - Vagas Abertas 2019!

    Vagas abertas para quem quer fazer parte da equipe do xTibia! Se você gosta da comunidade, tem conhecimento em OTServs e deseja fazer parte da equipe, essa é a hora. Preencha o formulário que se encontra abaixo: >> Formulário << Estaremos validando e se for necessario estaremos entrando em contato, boa sorte! xD Caso haja duvidas com o cargo de mod/coordenador, veja: Moderador xTibia Coordenador xTibia
  5. 1 ponto
    Michyalex

    [DXP] PokeAlpha OpenSource

    Eai galera ja que parei de fazer meu projeito basado no DXP V3, vou disponibilizar por si algum quer olhar ou fazer algo com isso. Cabe destacar que as modificaçoes sao para ficar quase o igual ao PXG, vou destacar que sou spanhol e sim alguma palabra fica errada fala para mim ^^! ¿O que contem? - Arrumado as maiorias dos portraits e balls "Unmovable" - Maioria das spells sao agora ao estilo do PXG * Thunder bolt posiçao arrumada * Stone edge, Rock Slide posiçao arrumada * Invisible spell arrumada *Tongue grap modificada agora quita vida e nao deixa mover ao pokemon * Great Love, Night Daze, Entre outros adicionado o efeito central. - Items.xml 1000-1200 items con nome - Bike system arrumado com storage independente - OTClient o layout da camera refeito para parecer ao PXG - Spells com cors (bug com Mega) - Añadidos 30 efeitos. - Arrumado o look para parecer ao PXG - Price System, Mark trabalha com $ e nao Gold - House look arrumado nas sources para ficar como PXG - Arrumado os cors do minimap de algums items - Fly, Ride, Surf, tem as velocidades reais do PXG - Mensagems em portuguesse foi trocado por Ingleis a malhoria - Market com exemplo de venda de Mega direito - Muitos sprites arrumados, outfits, items, efeitos. - Exp por stages igual ao PXG - Modulo do Autoloot modificado ¿Maior BUG? - Statschange.lua (Creaturescripts) - Surf ainda nao arrumado Downloads: Scans: ¿Como faço para editar esse mapa? Créditos: DXP TEAM Comunidade do XTIBIA Smix Deadpool (City-Name Module) Michy (eu)
  6. 1 ponto
    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); }
  7. 1 ponto
    Vai na pasta data/globalevents e no arquivo globalevents.xml coloca: Na pasta data/globalevents/scripts cria um novo arquivo chamado save.lua e coloque isso dentro: Mas lembre-se o forum as vezes coloca uns caraters no texto que só pode ser vista com codificação ANSI exemplo: <[email protected]@[email protected] name="save" interv??al="1800" event="scrip???t" [email protected]="save.lua"/>??
  8. 1 ponto
    Segue o script, a configuração é alto explicativo, mas se tiver alguma duvida é só falar.
  9. 1 ponto
    local ring = { outfit = 123, -- outfit que ele ganha efeito = 1, -- efeito que fica nele iditem = 123, -- id do ring tempo = 1, -- tempo que ele fica transformado waittime = 1.5, -- tempo que pode usar dnv storage = 12345, -- não mexa } function onUse(cid, item, fromPosition, itemEx, toPosition) addEvent(function() if exhaustion.check(cid, storage) then doPlayerSendCancel(cid, "Espere um pouco") elseif ring.iditem == ring.iditem then doPlayerAddOutfit(cid, ring.outfit) doPlayerRemoveOutfit(cid, ring.tempo, ring.outfit) return false end end, ring.tempo) não sei bem se irá funcionar
  10. 1 ponto
    O NPC caminha junto com o player ate a hunt. Esse sistema é bem SIMPLES, um amigo me pediu, desenvolvi para ele e vim compartilhar com vocês Crie um arquivo lua em npcs e adicione : 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 local possnpc = { --- poss que o npc vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7}, {x=79, y=340, z=7} } local possplayer = { -- poss que o player vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7} } local pid = getNpcId() -- não mexa local config = { -- não mexa str = 150729, tempo = 30, } function andarnpc() for i, pos in ipairs(possnpc) do addEvent(doTeleportThing, 1000+400*(i-1), pid, pos) end end function andarplayer(cid) for i, posdois in ipairs(possplayer) do if isCreature(cid) then addEvent(doTeleportThing, 1000+500*(i-1), cid, posdois) end end end for _, player in pairs(getPlayersOnline()) do if msgcontains(msg, "hunt") and getPlayerStorageValue(player, config.str) >= os.time() then selfSay("Não posso atender você agora!", cid) break end if msgcontains(msg, "hunt") and getPlayerStorageValue(player, config.str) < os.time() then setPlayerStorageValue(cid, config.str, os.time() + config.tempo) selfSay("Vou te levar ate a caverna misteriosa !", cid) andarnpc() andarplayer(cid) break end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Configuração : Aqui é aonde o npc vai andar, são as mesma poss que o player vai andar, porem você tem que por uma ultima poss para o npc, nessa ultima poss você coloca a posição aonde o npc estava antes do jogador falar com ele ! local possnpc = { --- poss que o npc vai andar {x=81 ,y=339, z=7}, {x=82 ,y=339, z=7}, {x=83 ,y=339, z=7}, {x=84 ,y=339, z=7}, {x=85 ,y=339, z=7}, {x=86 ,y=339, z=7}, {x=79, y=340, z=7} } Essa é a poss do inicio, aonde o npc vai aparecer quando ele levar o jogador, não esqueca de colocar a posição correta, se não o npc vai ficar dentro da hunt com o player, e outros players não vão conseguir encontrar o npc. {x=79, y=340, z=7} -- poss aonde o npc tava antes de levar o player para a hunt OBS: Existe um tempo para poder falar com o NPC, caso o npc esteja levando algum player para a hunt, outro jogador não pode conversar com ele, ate que ele complete a caminhada, caso queira mudar o tempo edite aqui : tempo = 30, -- 30 = 30 segundos
  11. 1 ponto
    Marshmello

    [VIDEO AULA] Multi World System

    Salve Ekz Hoje Estou trazendo um video de como abrir 2 mundo em 1 só servidor REQUISITOS Ter as Sources do Seu Servidor
  12. 1 ponto
    Poccnn

    Look at attack

    Eu criei esse sistema de look at attack porquê eu acho ridículo quando o character fica atacando o oponente sem estar "olhando" para ele. O que ele faz? Ele volta o character que esteja atacando um oponente para o oponente. Ele não impede de andar ou de mudar de direção, porém ele vai ficar mantendo a direção voltada ao oponente. Vamos adicionar o sistema. Em: creaturescript/creaturescript.xml, adicione essa tag: Agora em: creaturescript/scripts, crie um arquivo lua e adicione isso: Dentro do mesmo diretório, abra o arquivo login.lua e adicione isso a ele onde existe outros semelhantes. Pronto. Instalado o seus sistema de look at attack. Agora quando o player atacar algum oponente, ele ficará "olhando" para ele.
  13. 1 ponto
    Brunds

    [OTX 0.3.6] Respawn Com Efeito (Tibia RL)

    Fala galera bom eu achei um código na otland que ao iniciar o tempo de respawn de um monstro no mapa mostra um efeito antes umas 3 vezes avisando e nasce o monstro igual ao tibia normal bom eu consegui colocar na minha source otx 0.3.6 e estou aqui para compartilhar com todos vocês vamos aos códigos na sua source. Procure as bibliotecas Spawn.cpp Procure por e substitua o código todo por obs: onde esta negrito é a área para editar o efeito que vai aparecer quando o monstro for nascer Procure por Neste código mude: Para: Procure por: Logo acima desse código vai ter Mude para: Spawn.h Procure por Substitua por Pronto seja feliz Vídeo demonstrativo
  14. 1 ponto
    Dragon Ball Hiper

    editor geral de otserv

    Show boa sorte na caminha , Ancioso para ver seu trabalho.'
  15. 1 ponto
    Bluester

    Base Otpokemon V1

    Esses são itens que estão dentro das houses e podem ser movidos ! Esses são itens que estão dentro das houses e podem ser movidos ! Galera, pra arrumar o bug do coin case trocado com a bag, vão na pasta do servidor e depois em mods, lá terá o arquivo "firstitems.XML", basta trocar o ID da coin case com o ID do iventory
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...