Jump to content
Close

Leaderboard


Popular Content

Showing content with the highest reputation since 11/20/18 in all areas

  1. 21 points
    Classic Yurots V 8.60 Eu acompanhei de perto o desenvolvimento deste servidor e sabia que sairia coisa boa dali, mas só quando obtive acesso aos arquivos que pude entender a dimensão do negocio, sendo assim, eu posso afirmar que este é um dos se não o melhor datapack baseado no antigo YurOTS. O datapack está limpo, você não vai encontrar um script em qualquer uma das pastas que não esteja em uso no servidor, alem disto muito tempo foi gasto reescrevendo e revisando os scripts do servidor para garantir máxima performance. Os mais novos em OpenTibia talvez não saibam, mas os famosos Baiaks e Styllers de hoje em dia foram baseados neste mapinha que teve seu inicio já na versão 7.5 e seu declínio nas versões 8.4 onde foi visto pela ultima vez devido ao surgimento de derivados do mesmo (Baiak e Styller). Devido ao fato dos mapas Baiak e Styller serem derivados do YurOTS, se você tem um projeto de mapa Baiak ou Styller, este é um excelente datapack para você usar como base. Por que o servidor está sendo postado? Este servidor foi desenvolvido ao longo de 2 anos pelo Wesley (conhecido aqui no fórum como @KOLISAO), alguns meses atrás o servidor foi finalizado e colocado online, embora hoje em dia, sem contato com times de jogadores, é difícil popular um servidor novo e sem nome logo na abertura, com isso a inauguração não foi como esperado e conseguiu uma média de apenas 30 jogadores. Frustado por 2 anos de muito trabalho não dar o resultado esperado, ele decidiu desistir do servidor, foi então que eu fiz uma proposta em troca do servidor e obtive acesso ao mesmo. O que eu não sabia na época era que outras duas pessoas alem de mim tiveram acesso a todos os arquivos, uma dessas pessoas é um amigo do próprio Wesley na vida real, ele conversou com este amigo e deletou os arquivos do computador dele. A segunda pessoa em questão, eu não tenho certeza de como obteve estes arquivos, mas ele atualmente está vendendo estes arquivos sem autorização. Quando fiquei ciente disto, entrei em contato com o Wesley e o informei sobre o que estava acontecendo, ele ficou surpreso e revoltado por alguém estar lucrando em cima de seus esforços. Neste momento pedi permissão a ele para postar o servidor aqui no fórum, e ele me concedeu. Informações sobre o servidor Como dito anteriormente, muito tempo foi gasto neste servidor e tudo foi feito com o maior cuidado possivel. Vou deixar aqui as informações sobre o que contem no servidor, informações que foram divulgadas pelo próprio Wesley na data de inauguração. Vídeo com algumas Quests do servidor Outras informações podem ser encontradas no tópico de show-off do período em que o servidor ainda estava em desenvolvimento. Extra + Créditos Juntamente com o servidor estarei postando a source e o site do mesmo, porem o site será postado em um tópico diferente devido a esta não ser a área correta do fórum para isso. A source do servidor é OTX2, foram feitas pequenas modificações na source para melhor formatação em partes do datapack, como QuestLog e outros. Além disto, a source também possui 2 sistemas muito procurados que até o presente momentos não eram públicos, sendo estes Push Cruzado e Cast com Setas. Ambos os sistemas já estão instalados na source, porem futuramente irei postar ambos os códigos juntamente com tutorial de instalação para os que quiserem adicionar por si mesmos. Créditos Como já mencionei diversas vezes neste tópico, o responsável pelo desenvolvimento do servidor e site foi o @KOLISAO, portanto todos os créditos nesta parte vão para ele. Eu fui o responsável por adicionar o Push Cruzado na source e fazer uma pequena modificação no Cast com Setas. Obs: quando eu obtive acesso aos arquivos o Cast com Setas já estava instalado na source, eu não tenho informação se o código foi desenvolvido por ele ou por um terceiro. Links para Download Como eu estava fazendo algumas modificações para hostear o servidor futuramente, eu tenho ele online em uma VPS para os que quiserem dar uma olhada mais de perto tanto no servidor como no site. Link para acesso: http://classic-styller.com Obs: O servidor está rodando com uma source diferente da postada no tópico. Servidor Download - Scan Source Download - Scan Site
  2. 21 points
    Feliz 2019! Eu desejo que todos tenham um próspero início de ano, agradeço por tudo que aconteceu no Tk no ano passado. Um caloroso obrigado a todos vocês que contribuem nas seções de tutoriais e suporte, vocês são fodas! Separei alguns dos tópicos mais interessantes postados em 2018, eles serão promovidos na página oficial do Tk no face todos os dias até 10/janeiro! Deixe seu joinha em: https://www.facebook.com/TibiaKing/ 👍 #MDA Acompanhe as publicações em: https://www.facebook.com/TibiaKing/ Programado para os próximos dias: 25/12 • OTHire 7.4 Empera server + Port Hope + spr + dat + website • Snow rain system todos ACC • Paletas organizadas para map editor 10.x e 11.x • OTclient, adicionar novos outfits COMPLETO • Ice Map • SadSoul - OLD Karmia 7.72 | Mysql | OTHIRE | Client | Website 26/12 • RME Solução de bugs • OTCLIENT Criando um botão • War system 0.4 fix cast system • Magnus task system tfs 1.2 • Hell Dungeon cave hunt 11.40 • Pacote de OTs clássicos 8.10 • Teleport com janela tfs 1.3 • Nightmare seal dungeon cavehunt 11.40 27/12 • Adicionar novos elementos tfs 0.3.6 • Água transparente • Compilar tfs otx windows • Asura tower cave hunt 11.40 • Teleport System • TFS 0.4.3 edição exclusiva • Labia system 8.60 • Ancient scarab lair cavehunt 8.60 28/12 • Top fraggers system • Carlin Revamp 2.0 • Sistema bancário tfs 1.2 • Sistema de honra tfs 1.2 • Adicionar sprites, editar itens e gerar .otb • Os melhores packs 860 antigos e atuais 29/12 • Video-tutorial arrumando shop tibia 11.x • Servidor DBOTeach 8.6 Htdocs + Database + Client + Server • Poke X CaZzy 1.0 • Como proteger suas sprites • NTO Ultra 8.60 • Transformar imagem em odb 30/12 • Silverhand Livrary Map • [Lua & C++] getOtsysTime() + getPlayerPing(cid) + doPlayerSendPing(cid) • Tutorial mudar versão do mapa • Baú SAO - Sistema de quest • Fire Palace - Cave hunt 8.60 • Global Save + Restarter • Giant Spiders - Cave Hunt 8.60 • Tile party tfs 1.1+ 31/12 • Tutorial preencher items.otb facilmente • Pack de websites NTODBO • Update ProtocolGame::AddPlayerStats - TFS 1.3 & OTX 3 • Evellor Island Map • Limpar characters Inativos / Account vazias • Como criar um website POKETIBIA 01/01 • Deeplings loach cavehunt 11.40 • Creature information Offset • Spy System • Video-tutorial criando client 10.x • Divulgar pag do face no site • ReCAPTCHA by google • Yielothax Nest cave hunt 11.40 • Channel Help Mute tfs 0.4 02/01 • Hydra mountain cave hunt 8.60 • Alvos específicos em spells de area • Emote spells dinâmico • Hp/Mp 100/100 sem bugs • Guild id 0 doesn't exist - Como corrigir • Dragons Dungeon cave hunt 8.60 • Otclient last version • Store items tfs 1.2 • Nto Brasil attack speed tfs 0.3/0.4 • Medusa Sanctuary cave hunt 8.60 03/01 • Custom Depot 8.60 • Fix tfs 0.4 slot bug • Double exp com aviso • Deep desert - Skeleton elite warriors 11.40 (summer update) • The Secret Tomb cave hunt 11.40 • OTXServer 3.1 (10.X - 11.X) - COMPILADO 64 BITS (WINDOWS) - PURO/LIMPO (COM SCAN) • Remover Battle ao entrar em pz • Mathtime, GetStrTime • In game account manager tfs 1.3 OTX3 • Action de casulos de bixos • Fly system tfs 0.4 • Undeads Tower Cave hunt 8.60 04/01 • Como criar um site na umbler • Tiny Editor • Certificado SSL gratuito para o NGINX em UBUNTU 16.04 • Material kit • Airetsam Kit • Código para evitar Nuker • Askarak Demon cavehunt 11.40 • Warzone 4, 5, 6 new asuras falcons • Maps Deepling Ancestorial Grounds and Sunken Temple • Fortbay city cidade completa 11.40 05/01 • [TFS 1.1+] Guild Dungeon Lever (Com tempo) • [TFS 1.2] Exercise Weapons • Bog raider Island 8.60 • War Golem's cave hunt 8.60 • getPlayerSecureMode (cid) / getPlayerFightMode (cid) • [TFS 0.4 / TFS 1.x] Wand/Rod Elemental • Modal elemental Wand • Reunindo fragmentos 8.60 • Area hardcore tfs 1.1 06/01 • Comando Y cores • Adicionar restrição de level e vocação em itens • Tibia dark skin • Wyvern mountain cavehunt 8.60 • Toll clan cavehunt 8.60 • Hero fortress cavehunt 8.60 • Lost tomb cavehunt 8.60 • Ilha pequena 11.49 • Dark Complex cavehunt 8.60 • Crystal Spiders cavehunt 11.40 07/01 • Arcan Isle cavehunt 8.60 • Forbbiden Village 8.60 • Demons dungeon cavehunt 8.60 • Fortress castle 24h 8.60 • Pharaos tomb cavehunt 8.60 • Warlocks Hunt 8.60 • Minotaur Camp 8.60 • Training center 11.40 • Lizard Chosen Cave 11.40 • Dwarf cave treiners 11.40 • Republic Bay 10.77 • Grimeleech dungeon cavehunt 11.40 08/01 • Functions tfs 1.0 • Item temporário tfs 1.x • Spell cooldown janela própria • Monstros que morreram antes de criar tfs 1.3 • Sprite extractor tibia asset 11 to latest tibias client 11.89 • Evento snowball php mapa • Town portal system (dota 2) • Docker na criação de ots • Hidden trap - igual nto br • Criar OTsev em VPS + Site • Teleport Soulpoints • Comando !bless tfs 1.3 • Serialize/Unserialize Strings to Number • Remover item de um player • Testar proteção de client free Obrigado aos membros que publicaram os conteúdos:
  3. 20 points
    WooX

    Tutorial - Push cruzado e sua história

    Push Cruzado Como prometido, hoje eu vou ensinar como implementar o push cruzado. Este tutorial é feito especificamente para a versão 2 do OTX, porem, devido a simplicidade do código (sério, é muito simples, você vai se surpreender), acredito que possa ser implementado em qualquer source code disponível atualmente. Antes do tutorial vou falar sobre como surgiu o "sistema" e de como o mesmo ficou popular entre os jogadores de Baiak, então senta que lá vem história. Se você não tem interesse na história de como surgiu e se popularizou e só está aqui pelo tutorial de como implementar, pule para o final do tópico. História Familiar para alguns e desconhecido para muitos outros, o que afinal é esse tal de push cruzado que alguns tanto falam? Para entender como surgiu, teremos que voltar alguns anos no tempo, em uma época que OTX não existia e o TFS 1.x ainda era um sonho distante, época essa em que a maioria dos servidores com protocolo 8.60 utilizavam como engine a velha TFS 0.3.6. Foi neste período que alguns jogadores de enforced descobriram este bug, isso mesmo que você leu, o push cruzado é na verdade um bug! Mas calma! é apenas um bug inofensivo, mesmo assim, não deixa de ser um bug, que hoje em dia é divulgado como feature nos servidores. Antes de entrar mais a fundo nessa questão, vou terminar de explicar como ele foi descoberto, como ele pode ser utilizado e as vantagens que ele concede aos jogadores que sabem como utiliza-lo. Nos saudosos dias em que o protocolo 8.60 estava no seu auge na comunidade OpenTibia (70% da Otserv List era composta por servidores 8.60), poucos tinham acesso para a até então recente TFS 0.4 (nesta época TFS 0.4 não era pública, e só podia ser obtida doando uma quantia aos desenvolvedores). Até então, era raro encontrar servidores rodando com TFS 0.4, mais raro ainda um servidor enforced/war, mas assim como uma agulha no palheiro, ele estava lá, Mega-War, o que eu acredito que tenha sido o primeiro servidor de war 8.60 a usar a recente distro. OTServList em 2011 E foi neste servidor que o push cruzado foi descoberto, por jogadores dedicados a se aperfeiçoarem no PvP, estes foram os primeiros e os que deram origem ao que hoje se conhece como enforcedeiros (jogadores assíduos de servidores de war, com uma habilidade surreal no PvP). Mas algumas questões ficam no ar, TFS 0.4 era realmente recente, porem o protocolo 8.60 já existia há um bom tempo no TFS 0.3, então porque este bug não foi descoberto antes? porque neste servidor em especifico se outros servidores de war 8.60 já existiam? A resposta é: este bug surgiu justamente no TFS 0.4, para ser mais especifico na rev 3777, tanto é que a versão anterior do TFS (0.3) não continha este bug e nas revisões seguintes do TFS 0.4 ele foi corrigido, com isto o push cruzado se "perdeu", existindo somente no TFS 0.4 (Rev 3777). Devido a isto, os servidores privados de enforced (onde se encontra a maioria dos enforcedeiros hoje em dia) e alguns servidores baiaks utilizam TFS 0.4 até hoje, mesmo existindo opções excelentes em comparação, como TFS 1.x e OTX, tudo devido a este bugzinho que se popularizou muito entre alguns jogadores ao longo do anos. Mas como o push cruzado se popularizou tanto a ponto de chegar ao que é hoje? Os enforcedeiros tinham um estilo único de PvP, fazendo jogadas que para muitos até hoje não é possível sem o uso de bot. Com o tempo, estes jogadores foram gravando e postando vídeos no Youtube de suas jogadas, para muitos dos que assistiam, tal nível de habilidade só podia ser atingido com auxílio do bot, os mais humildes, aqueles que aceitavam que aquilo era possível sem o uso de bot, entravam nestes servidores de war com a intenção de aprender, não só o push cruzado, mas o push a distancia, a velocidade para realizar jogadas e a visão de jogo num geral. Alguns dos vídeos antigos da época do Mega-War. Neste ultimo vídeo em especial, é possivel ver o push cruzado sendo realizado por volta de 1:22 e 3:20 de vídeo. No inicio de 2013, sem motivo aparente o Mega-War simplesmente fechou. Mas onde há demanda, sempre haverá oferta, com isso surge o ainda mais famoso Total-War. O Mega-War foi o inicio para essas estrelas do PvP, mas foi no Total-War que a coisa realmente cresceu. Com cada vez mais vídeos de jogadores exibindo jogadas espetaculares, mais aparecia os chamados novatos (jogadores que admiravam os enforcedeiros e tinham interesse em aprender e praticar as técnicas usadas), na época do Mega-War, dava pra contar nos dedos a quantidade de pessoas que sabiam fazer o push cruzado, afinal, era uma coisa totalmente nova, com poucos meses do Total-War online esse numero cresceu exponencialmente, o servidor ficou no seu auge por cerca de 1 ano e alguns meses. Alguns vídeos de enforcedeiros no Total-War (incluindo o meu 😊). Poucos sabem disso, mas eu era GM no Total-War, ajudei no servidor por alguns meses até ter um desentendimento com o dono, nesse momento eu decidi abrir o meu próprio servidor enforced. Eu acompanho a comunidade brasileira de OpenTibia desde 2010, mas nunca tinha levado a sério a ideia de ter meu próprio servidor até então, foi nessa época que eu criei a minha conta aqui no TibiaKing, pois o antigo XTibia (lugar onde eu conheci o que era OpenTibia) havia fechado. No ano de 2014 encontrar as sources do TFS 0.4 já não era mais problema, estavam por todo lugar. Eu peguei um datapack com mapa de venore (assim como o Mega e Total-War) e coloquei online, nesse período eu comecei a estudar a fundo como funcionava OTServers. Devido a testes de diversas versões diferentes de source, já na época eu percebi que push cruzado era algo exclusivo do TFS 0.4 (isso explica porque o dono do Total-War se recusava a fazer um upgrade), era também tempo do inicio do repositório do OTX que se mostrava promissor em relação ao TFS 0.4. Cerca de 1 ano depois da abertura do meu servidor eu decidi tentar adicionar o cruzado nas sources do OTX2, uma pessoa dedicada com um objetivo, mas sem saber de nada, por semanas eu comparei o código de ambas as sources, arquivo por arquivo (haja dedicação), e por fim consegui adicionar ao OTX (quando eu descobri o que era, eu confesso que de imediato me arrependi de ter gasto tanto tempo com isso). Com essa alteração eu resetei e reinaugurei meu servidor, o servidor era chamado de Ultra-War, mas ficou mais conhecido por todos como Sv2 porque o servidor era hosteado em 3 locais diferentes, e 1 dos locais era aqui no Brasil, este era conhecido como Sv2. O Ultra-War foi o primeiro servidor a ter o push cruzado sem utilizar do TFS 0.4, na época OTX já estava se tornando muito popular pois dava uma sensação de ping menor ao jogar, rodando o servidor com OTX e em 3 hosts diferentes, os poucos players que sobraram no Total-War migraram para o Ultra-War, e assim como o Total-War ocupou o lugar do Mega-War no seu fim, o Sv2 passou a segurar esta tocha. Alem dos já antigos enforcedeiros, jogadores novos não paravam de vir de todos os lugares, muitos deles quando aprendiam e aperfeiçoavam as técnicas iam logo aplicar em servidores UP Level (principalmente Baiaks), foi ai que o push cruzado se popularizou fora do enforced, com os jogadores pedindo aos administradores para adicionarem algo que eles sequer tinham noção do que era. Vídeos do jogador que eu acredito ser o maior responsável pela popularidade do PvP no estilo enforced nos Baiaks. Enfim... a história acaba por aqui (até porque ficou longa pra kct), no final das contas a história não foi sobre o push cruzado em si, mas sobre o enforced e os enforcedeiros num geral. Agora vamos para a parte que todos querem ver. O que é e como utilizar O push cruzado nada mais é do que permitir que o jogador empurre (push) outros jogadores e criaturas enquanto se movimenta ao mesmo tempo, basicamente é apenas isso. O que isso proporciona ao jogador, ai já é outra historia (brincadeira, depois dessa ultima, chega de história), isso permite ao jogador executar jogadas que sem o push cruzado seriam executadas de maneira bem mais lenta, e até mesmo jogadas que seriam impossíveis de serem realizadas sem o uso do famoso cruzado. Veja abaixo alguns exemplos. Tutorial Como eu mencionei antes, o push cruzado é na verdade um bug, caso implementado, isso possibilita aos jogadores realizarem jogadas que sem ele seriam impossíveis. Se mesmo ciente disto você deseja seguir em frente, basta seguir os passos abaixo. Pronto, com isso você pode habilitar ou desabilitar o push cruzado diretamente pelo config.lua, sem a necessidade de recompilar a source. Créditos Me, myself and I.
  4. 19 points
    Salve salve pessoal, no inicio desse ano estava dando uma estudada e mexendo com a TFS 0.4 rev3884, e vi que havia alguns bugs e que não tinha Cast incluso. Com base nisso decidi atualizar e otimizar a source, já que ainda ela é uma das mais utilizadas no mundo de Otserv. Um rapaz tinha me procurado e comprado ela por um preço razoavel, mas ao descobrir que ele estava revendendo por um preço bem maior, decidi compartilhar esse meu trabalho com vocês! Acredito que possa ser uma das melhores REV atualmente. Conto com o seu feedback, caso haja algum bug, algo que tenha que mudar/optimizar, não exite em avisar aqui no tópico. Toda ajuda será bem vinda xD The Forgotten Server, Tibia Versão: 8.60 O que contém nela? Dentro da pasta contém o config.lua com todas as tag já adicionadas. Não esquecam de executar a Query do Cast na sua DB: Downloads uint8(Effects até 255) Distro: TheForgottenServer.exe Src + datapack: Source & Data ------------------------------------------------------- Downloads uint16(Effects até 65534) Distro: TheForgottenServer.exe Src + datapack: Source & Data É necessário fazer a modificação do Hexadecimal no cliente. Aqui tem um já pronto: Cliente.exe (só será necessario se utilizar a src com o uint 16.) ------------------------------------------------------- Scans: Distro(uint8) & Distro(uint16) Source Cliente Obs: Os virus detectado é um falso positivo, então não se preocupem! E para quem se interessa em saber onde se localiza os code do Cast, aqui está uma imagem. Você pode achar procurando por "//CAST" Façam um ótimo aproveito 😄
  5. 18 points
    DEV C++, aprenda a compila uma source TFS! Downloads(Baixe de acordo as configurações do seu windows): DEV C++ CONFIGURADO PARA 32BITS DEV C++ CONFIGURADO PARA 64BITS REV 3884 TFS 0.4 Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos. ====================================== Abra o DEV C++: ====================================== ====================================== Abra a Source: ====================================== ====================================== Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev: ====================================== ============================================================= ====================================== Aguarde carregar todos os arquivos: ====================================== ====================================== Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK: ====================================== ====================================== Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo: ====================================== ====================================== Se der tudo certo em Log vai estar como mostra a imagem abaixo: ====================================== ====================================== Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou! ====================================== =========================================== Só isso galera tutorial rápido resumido e útil! Créditos Natanael Beckman! =========================================== Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar: Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone. Abra o DEV-C++, clique em File> New> Project: Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos: Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp. No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros: -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs: -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK. Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project: Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9: OpenSSL 0.9.8 1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa! Clica aqui \/
  6. 17 points
    Yinz

    Telara-ATS

    Resolvi postar o projeto pra download, o servidor foi testado online e está funcionando SEM nenhum erro ou BUG. Testado em ubuntu, 14.04, OTX, 10~11. Download Telara.rar Database.sql (não está resetada, se preferir baixa do GIT do malucoo) Website.rar Scan Scan 18/01/2019 — Adicionado Boss Room, funciona como sistema de Raids — Corrigido todos teleports dos Trainers. — Adicionado 130+ Teleports próprios, diversos do DJ aqui do forum. — Adicionado Veradin npc que vende Addons & Montarias pelos Crown Tokens. — Autoloot modificado pelas srcs, com controle de items pelo banco de dados. — Mapa totalmente diferente, é pra ser um baiak por ser teleports, mas um baiak CUSTOM, nunca vi nenhum online por ai, venho dizendo o diferente me atraí, espero que te atraía também, uma coisa linda dessas. — Tentei trazer as mais diferentes quests que eu possuia no Thoria & Alvoria, e hunts também, então tudo que você verá, nunca fui visto em outros baiaks. — Foi adicionado todos items de Djin, Zão, Magicians, no Rashi no objetivo de simplificar e não ter vários npcs pra uma coisa só. — Adicionado system de task bolado do lobão você pode ver mais informações aqui — Foi adicionado NPC que venda items de Imbuiment — Adicionada Roshamuz, podendo ir pelo barco. — Sistema de Crown Token, cada level upado & chances de droparem de mobs, você pode ver mais aqui — Adicionado bônus exp para players que estiverem com cast aberto, criado pelo E um site totalmente novo para um servidor novo. Screens;
  7. 15 points
    Salve salve galera do TK! Hoje vos trago o Wodbo Wars versão 5.9(de 2016) Creio que muitos daqui que joga dbo deve conhecer esse servidor, atualmente ele está online! Pra quem não sabe eu já fui da equipe, ajudei a dar inicio ao projeto, corrigindo bugs, scripts,mexendo com site,db etc... Por conta de mesquice do Arkam, ele me tirou da equipe e ai rolou treta entre eu e ele. Muitos já devem saber a história. Enfim... Decidi trazer para vocês pois faz muito tempo que a galera vive enchendo o saco para mim postar. E como esse servidor não tem nenhum valor para mim, só guardava e não postava por respeito ao Matheus P.(Arkam), mesmo tendo nossas intrigas, ele é um grande rapaz. Decidi postar, já que o mesmo não liga mais! Imagens: Bom, não estarei postando a distro original, estarei deixando a que ele utilizou no inicio. Recomendo vocês baixarem alguma src(source) e compilarem. Recomendo utilizar a do @Fir3element. No site dele oficial tem um bug de gerar várias vezes a RK, concertei isso para vocês. Assim podendo gerar apenas uma vez! A base utilizado nesse servidor foi o Dbo Hunter(criado pelo Renan), esse servidor tem umas gambiarras, mas creio que irá ajudar muitas pessoas que não tem muita experiência de começar do 0. Utilizem como base, sejam criativos e entre pra concorrência DOWNLOAD: Créditos: Matheus Pacheco(Arkam or Arkamed) Yan Liima(Night) As vezes certas pessoas se aproveita de outras para poder chegar longe. ;( Façam um bom aproveito, abraços!
  8. 14 points
    Yan Liima

    [System] Trade Points

    #Introdução Reparei que muitas pessoas estão atrás desse sistema que o DBOBR e 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 Então vamos lá... #Instalação Em data/lib crie um arquivo chamado tradepoints.lua cole isto dentro: Em data/creaturescripts/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á: Prontinho xD Agradecimentos ao @lordzetros por ajudar na função scanContainer. obs: testado em TFS 0.4
  9. 13 points
    movie

    Evento Safe Zone TFS 1.x+

    Lembrando que esse tópico é para TFS 1.X+, sendo que eu testei ele no TFS 1.3 e creio que não funciona em 1.0. A versão para TFS 0.x está sendo desenvolvida pelo @Yan Liima que em breve irá disponibilizar para nós Safe Zone Event ==================================================================================== Lembrando que não irei disponibilizar o mapa do evento pois não fiz nenhum digno para postar. Caso alguém queira fazer, me mande que eu anexo ao tópico. O mapa deverá ser "quadrado" e não deve ter nenhum piso que não seja possível andar. ==================================================================================== Fala pessoal, como vocês estão? Eu vi esse evento em um outro OTServ e resolvi mandar pra um colega (Vulgo @luanluciano93) e desenvolvermos juntos o evento. Para instalar o evento, por favor tenha um pouco de noção sobre como um script e os diretórios do seu OTServ. ==================================================================================== Deixarei um vídeo aqui embaixo para demonstrar como ele funciona: ==================================================================================== Primeiramente, teremos apenas três arquivos, uma lib, um globalevents e um movements. ==================================================================================== Na pasta lib, crie uma outra pasta chamada events. Dentro da pasta events, crie um arquivo chamado safezone.lua -- Evento Safe Zone feito por Movie (#Movie#4361) e LuanLuciano93 -- -- Por favor não remova os créditos -- -- Evento testado em TFS 1.3 -- SAFEZONE = { teleportTimeClose = 1, positionTeleportOpen = Position(923, 956, 5), positionEnterEvent = Position(913, 586, 7), storage = 12149, actionId = 6412, protectionTileId = {9562, 9563, 9564, 9565}, levelMin = 50, maxPlayers = 20, reward = {9020, 10}, lifeColor = { [1] = 94, -- red [2] = 77, -- orange [3] = 79 -- yellow }, positionEvent = {firstTile = {x = 904, y = 580, z = 7}, tilesX = 18, tilesY = 12} } function safezoneTeleportCheck() local tile = Tile(SAFEZONE.positionTeleportOpen) if tile then local item = tile:getItemById(1387) if item then item:remove() local totalPlayers = safezoneTotalPlayers() if totalPlayers > 0 then Game.broadcastMessage("The safeZone event will begin now with ".. totalPlayers .." participants.!", MESSAGE_STATUS_WARNING) print("> SafeZone Event will begin now [".. totalPlayers .." players.].") createProtectionTiles() else print("> SafeZone Event ended up not having the participation of players.") end else Game.broadcastMessage("The safeZone event was opened and will close in ".. SAFEZONE.teleportTimeClose .." minutes.", MESSAGE_STATUS_WARNING) local teleport = Game.createItem(1387, 1, SAFEZONE.positionTeleportOpen) if teleport then teleport:setActionId(SAFEZONE.actionId) end addEvent(safezoneTeleportCheck, SAFEZONE.teleportTimeClose * 60000) end end end function safezoneTotalPlayers() local x = 0 for _, player in ipairs(Game.getPlayers()) do if player:getStorageValue(SAFEZONE.storage) > 0 then x = x + 1 end end return x end local function totalProtectionTile() local totalPlayers = safezoneTotalPlayers() if totalPlayers >= 5 then return totalPlayers - 3 else return totalPlayers - 1 end end function createProtectionTiles() local totalPlayers = safezoneTotalPlayers() if safezoneTotalPlayers() == 1 then for _, player in ipairs(Game.getPlayers()) do if player:getStorageValue(SAFEZONE.storage) > 0 then player:setStorageValue(SAFEZONE.storage, 0) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) local itemType = ItemType(SAFEZONE.reward[1]) if itemType:getId() ~= 0 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received ".. SAFEZONE.reward[2] .." ".. itemType:getName() .. " as a reward for first place in the safezone event.") player:addItem(itemType:getId(), SAFEZONE.reward[2]) end Game.broadcastMessage("SafeZone Event is finish. Congratulation to the player ".. player:getName() .." for being the event champion!", MESSAGE_STATUS_WARNING) end end elseif totalPlayers > 1 then local createTiles, totalTiles = 0, totalProtectionTile() local tileX = SAFEZONE.positionEvent.firstTile.x local tileY = SAFEZONE.positionEvent.firstTile.y local tileZ = SAFEZONE.positionEvent.firstTile.z local tilesX = SAFEZONE.positionEvent.tilesX local tilesY = SAFEZONE.positionEvent.tilesY local protectionTileId = SAFEZONE.protectionTileId while createTiles < totalTiles do local randomX = math.random(tileX, tileX + tilesX) local randomY = math.random(tileY, tileY + tilesY) local newPosition = Position({x = randomX, y = randomY, z = tileZ}) local tile = Tile(newPosition) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then local randomTile = math.random(protectionTileId[1], protectionTileId[4]) local tileProtection = Game.createItem(randomTile, 1, newPosition) if tileProtection then tileProtection:getPosition():sendMagicEffect(CONST_ME_ENERGYHIT) addEvent(deleteProtectionTiles, 5000, newPosition, randomTile) createTiles = createTiles + 1 end end end end addEvent(safezoneEffectArea, 5000, SAFEZONE.positionEvent.firstTile, SAFEZONE.positionEvent.tilesX, SAFEZONE.positionEvent.tilesY) addEvent(checkPlayersinProtectionTiles, 4000) addEvent(createProtectionTiles, 6000) end end function deleteProtectionTiles(position, tileId) local tile = Tile(position) if tile then local item = tile:getItemById(tileId) if item then item:getPosition():sendMagicEffect(CONST_ME_POFF) item:remove() end end end function checkPlayersinProtectionTiles() local protectionTileId = SAFEZONE.protectionTileId for _, player in ipairs(Game.getPlayers()) do if player:getStorageValue(SAFEZONE.storage) > 0 then local tile = Tile(player:getPosition()) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then if player:getStorageValue(SAFEZONE.storage) > 1 then player:setStorageValue(SAFEZONE.storage, player:getStorageValue(SAFEZONE.storage) - 1) local lifes = player:getStorageValue(SAFEZONE.storage) player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) local outfit = player:getSex() == 0 and 136 or 128 if lifes == 1 then local lifeColor = SAFEZONE.lifeColor[1] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) elseif lifes == 2 then local lifeColor = SAFEZONE.lifeColor[2] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) end player:setStorageValue(SAFEZONE.storage, lifes) else player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end end end end end function safezoneEffectArea(firstTile, tilesX, tilesY) local fromPosition = firstTile local toPositionX = fromPosition.x + tilesX local toPositionY = fromPosition.y + tilesY for x = fromPosition.x, toPositionX do for y = fromPosition.y, toPositionY do local position = Position({x = x, y = y, z = fromPosition.z}) if position then position:sendMagicEffect(CONST_ME_SMALLPLANTS) end end end end Como configurar a LIB? SAFEZONE = { teleportTimeClose = 1, -- Tempo em minutos para fechar o teleporte. positionTeleportOpen = Position(923, 956, 5), -- Posição onde o teleporte será aberto. positionEnterEvent = Position(913, 586, 7), -- Posição onde o player irá nascer dentro do evento storage = 12149, -- Não mexa actionId = 6412, -- Não mexa protectionTileId = {9562, 9563, 9564, 9565}, -- Não mexa levelMin = 50, -- Level minimo para participar do evento maxPlayers = 20, -- Maximo de players para entrar no evento. reward = {9020, 10}, -- Prêmio: ID, quantidade lifeColor = { [1] = 94, -- red [2] = 77, -- orange [3] = 79 -- yellow }, positionEvent = {firstTile = {x = 904, y = 580, z = 7}, tilesX = 18, tilesY = 12} -- Explicarei ali embaixo } Em vermelho, é a configuração do "firstTile". Em verde, é a distância entre o "firstTile" e o final da arena, que é o "tilesX". Em azul, é a distância entre o "firstTile" e o final da arena, que é o "tilesY". OBS: Lembrem de incluir o firstTile na distância, seja do tilesY ou tilesX. ==================================================================================== Parte da LIB configurada, agora vamos para o GlobalEvents. Dentro da pasta Globalevents, abra a pasta scripts e crie o arquivo safezone.lua dofile('data/lib/events/safezone.lua') function onTime(interval) if safezoneTotalPlayers() == 0 then safezoneTeleportCheck() else print(">> SafeZone event is already running.") end return true end Agora vamos ao arquivo globalevents.xml e adicionaremos a seguinte TAG <globalevent name="Safe Zone" time="10:47:00" script="safezone.lua" /> Sendo que o "time" será o horário que irá ocorrer o evento. ==================================================================================== A LIB e o GlobalEvents configurado, vamos para a última parte, que é o Movements. Dentro da pasta movements, abra a pasta scripts e crie um arquivo chamado safezone.lua dofile('data/lib/events/safezone.lua') function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end if player:getGroup():getAccess() then player:teleportTo(SAFEZONE.positionEnterEvent) return true end if player:getLevel() < SAFEZONE.levelMin then player:sendCancelMessage("You need level " .. SAFEZONE.levelMin .. " to enter in safezone event.") player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end if player:getItemCount(2165) >= 1 then player:sendCancelMessage("You can not enter stealth ring in the event.") player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local ring = player:getSlotItem(CONST_SLOT_RING) if ring then if ring:getId() == 2202 then player:sendCancelMessage("You can not enter stealth ring in the event.") player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end end for _, check in ipairs(Game.getPlayers()) do if player:getIp() == check:getIp() and check:getStorageValue(SAFEZONE.storage) > 0 then player:sendCancelMessage("You already have another player inside the event.") player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end end if safezoneTotalPlayers() >= SAFEZONE.maxPlayers then player:sendCancelMessage("The event already has the maximum number of participants.") player:teleportTo(fromPosition) player:getPosition():sendMagicEffect(CONST_ME_POFF) return false end local outfit = player:getSex() == 0 and 136 or 128 local treeLifeColor = SAFEZONE.lifeColor[3] player:setOutfit({lookType = outfit, lookHead = treeLifeColor, lookBody = treeLifeColor, lookLegs = treeLifeColor, lookFeet = treeLifeColor}) player:sendTextMessage(MESSAGE_INFO_DESCR, "You entered the safezone event, good luck.") player:teleportTo(SAFEZONE.positionEnterEvent) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) player:setStorageValue(SAFEZONE.storage, 3) return true end Agora vamos ao arquivo movements.xml e adicionaremos a seguinte TAG <movevent event="StepIn" actionid="6412" script="safezone.lua"/> Sendo que essa actionid é a mesma que você configurou na LIB. ==================================================================================== Enfim, é isso pessoal, caso tenham algum problema tentarei ajudá-los mas posso demorar a responder haha Créditos à mim e ao Luan ( @luanluciano93 ) ==================================================================================== Em breve o Yan disponibilizará o evento para TFS 0.X+ ====================================================================================
  10. 13 points
    Coltera

    Show OFF - Mapping

    HUNTS: Estarei postando algumas imagens do meu projeto * (Mapa simples e poucos detalhes) * --------------------------------------------------- Atualização: 06/07/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 14/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 27/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/02/2019 --------------------------------------------------- 1 2 3 CIDADE: --------------------------------------------------- Atualização: 27/01/2019 --------------------------------------------------- 1 2 3 4 5 6 7 8 9
  11. 12 points
    Algumas pessoas vieram me pedir esse código, então hoje eu tirei um tempinho pra trazer pra vocês. O que faz Este código faz com que seja possivel ver através do look, quem jogou uma Magic Wall ou um Fire Bomb, isso é útil quando aquele amigo noob taca uma Magic Wall onde não deveria e diz que não foi ele, com esse código não tem como se esconder. Como implementar Este código foi testado apenas em TFS 0.x e OTX2, mas acredito que pode facilmente ser adaptado para TFS 1.x. Originalmente eu fiz este código para ser usado com a Magic Wall, mas ele pode ser implementado em qualquer spell que utilize COMBAT_PARAM_CREATEITEM. Script original da Magic Wall local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Basta substituir o return doCombat pelo código abaixo. ret = doCombat(cid, combat, var) if ret then local mWall = getTileItemById(variantToPosition(var), 1497).uid doItemSetAttribute(mWall, "description", string.format("It was cast by: %s.", getCreatureName(cid))) end return ret O código completo deve ficar parecido com este. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) ret = doCombat(cid, combat, var) if ret then local mWall = getTileItemById(variantToPosition(var), 1497).uid doItemSetAttribute(mWall, "description", string.format("It was shot by: %s.", getCreatureName(cid))) end return ret end Note que 1497 é o ID da Magic Wall, para items como Fire Field e outros, o ID deve ser substituído. Créditos
  12. 12 points
    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!
  13. 11 points
    O Warmen começou a tomar forma no inicio de 2010, embora a história comece muito antes.Cada membro de nossa equipe tem sua própria história com o MMORPG da velha escola, o Tibia.Isso causou um profundo impacto em nossas vidas, de uma maneira ou de outra.Este servidor é uma homenagem à comunidade que jogou e ouviu falar do Warmen.Nós selecionamos recursos que apreciamos ao longo dos anos jogando, além de introduzirmos recursos personalizados a um servidor de muitas historias.Nosso objetivo é levar nossa visão de qualidade e conteúdo para toda a comunidade.Gostamos de trabalhar nisso, esperamos que você goste de jogar.Atenciosamente, Equipe Warmen. Added Website, create account now! https://warmen-ats.online/?subtopic=createaccount Team, Yinz - Founder, Developer Web, Mapper.Movie - Founder, Engine Developer, Mapper. Recursos, Versão 8.60. Nossos NPCs foram construídos a partir do zero, não apenas isso soluciona grandes vazamentos de memória, mas também melhorou a experiência geral do jogo. Monstros também são construídos a partir do zero. Eles têm roupas totalmente precisas, identificações de cadáveres, experiência, saúde, saques, resistências, imunidades e muito mais. Você também notará vários saldos PvP, como uma exaustão ao soltar itens ou equipar amuletos. Há também novos recursos relacionados ao PvP, como diversos eventos. Você também vai contar com diversos comandos in-game. • Mapa próprio. • Novas vocações. • Novas magias. • Novos Bosses. • Novos respawns. • Novas quests. • Invasões automáticas. • Novos sistemas. • Um novo website moderno. e diversas outras novidades.. Aguarde, o recomeço. https://web.facebook.com/warmenonline/ https://discord.gg/YvMtVw7
  14. 11 points
    Storm

    [REMAKE] Nto B&W

    Olá usuários do TibiaKing, hoje disponibilizarei para vocês uma base de NTO das antigas, lançada no final de 2014. Essa base teve uma repercussão muito forte, pois deu origem a diversos servidores e todos os servidores daquela época tinha a base B&W. Eu mesmo joguei e aproveitei bastante aquela época e foi graças aquela época que hoje sou um programador. Link da base B&W antiga: [8.54] Servidor + Client Naruto B&W [EXCLUSIVO] Sendo assim, vamos lá: Primeiramente, vocês terão que entender o tipo de mudança que eu fiz no servidor. O primeiro de tudo é que eu não mexi em personagens, spells itens e etc. Mechi apenas na parte de infraestrutura do servidor, deixando ele estável, arrumando a database e organizando a bagunça feita pelo cara que postou a base. Segundo, irei sim mexer em personagens itens e tal, mas somente depois que vocês disponibilizarem para mim os bugs encontrados através deste tópico, o qual futuramente irei lançar uma nova versão com esses bugs corrigidos. E por terceiro, com essas mudanças que eu fiz, essa base será ótima para o inicio de servidores. -- CRÉDITOS [] Eytor [] [ADM] Johnatan [] Madara Rinnegan [] quemtuacha ( Source ) Caso queiram saber o que contém na base, basta acessar o link da base antiga. Agora uma parte importante. Eu removi todos os bugs da distro do client, inclusive aquele do limite dos sprites que não dava para se remover com o OB. Agora, quem está lendo isso deverá entrar in-game e ir testando, procurando bugs e denunciando aqui para que eu possar remover e disponibilizar para vocês, é só mandar como resposta aqui quaisquer forem os bugs encontrados. Uma prova para vocês, vejam essa imagem deliciosa de como a distro está agora: Vamos a parte mais esperada agora Servidor & Scan Client & Scan Source & Scan -- by quemtuacha ATENÇÃO: O scan acusou algumas DLL's como vírus. Geralmente, os antivirus acusam arquivos que são desconhecidos do windows como ameaças, mas que na verdade não causam absolutamente nada e são essenciais para funcionamento de programas.
  15. 11 points
    Kamity

    SHOW OFF - Launcher 'Kamity'

    Eae galera do TK, vim mostrar para vocês um projeto meu que esta em andamento Launcher Update baseado na temática do Cliente 12 do global. Contato Discord: Guilherme#3515 Github: Yokaito Features ▸ Mostrando numero real de players online do servidor. ▸ Autoupdate ▪ Verifica no seu site se existe uma nova versão caso exista o launcher baixa o zip e extrai na pasta do usuário. ◈ PS: Ou seja não precisa colocar todo o cliente em si para baixar de novo apenas os arquivos modificados. ▸ Barra de progresso de download e extração com % em real time. ▸ Tag dentro do launcher mostrando a versão atual do cliente do seu servidor. ▸ Box (Direita) de Boss spawnado no servidor. ▸ Ultima newsticker lançada no seu site. ▸ Box (Esquerda) de Top level do servidor com outfit. ▸ Nome ot, background, logo, lista do boss com horário para cada dia da semana, todo totalmente configuráveis. Upcoming Features ▸ Botão para saber o horário do próximo boss (atualmente aparece apenas o que foi spawnado). PS: Estou em processo de finalização de edição do layout do Launcher junto com as features que citei logo acima. Versão Final do launcher. Essa e a primeira release dele. Tudo que for implementado daqui pra frente sao novas features. Todas que citei acima foram implementadas com sucesso. Créditos Base: Launcher AutoUpdate C# (Usei como inspiração para o back-end reescrevendo o código e adicionando novas funcionalidades e validações para erros). Kamity: Novas validações, novo layout e novas features.
  16. 11 points
    Explicação: Este sistema proporciona ao jogador a compra de determinada cave por "X" tempo, cada conta poderá comprar somente 1 cave por vez... Lá o jogador poderá upar livremente. Também poderá chamar um amigo para upar na sua cave!! O sistema é o mais completo do mercado, vou estar falando do mesmo abaixo. OBS: Não esqueça de executar a query para funcionar!! Exclusive Cave System Features Dentro do pacote terá duas versões: versão 1 : É para vendar as caves em money(Gold's) Versão 2: É para vender as caves por items, por exemplo por moedas especiais como scarab coins(ID 2159) O sistema é feito por banco de dados O tempo da cave é mostrado em tempo real Você poderá chamar um amigo para sua cave e também remove-lo quando quiser. Existe um globalevents especifico para mostrar no default quando uma cave ficou disponível para venda! (Irá informar o nome da cave o preço dela!) Você poderá configurar a cave para vender por exemplo: - Level minimo e máximo! - Tempo de duração da cave - Se precisa ser premium account para comprar a cave! Quando o tempo da cave expira tanto o dono da cave como o friend invitado são removidos da cave, mesmo estando offline ou online! Comandos exclusivos: Comando para dono da cave: /mycave - Mostra informações da sua cave, como: - Nome da cave - Nome do seu amigo de cave(caso tiver invitado) - Quando tempo falta para expirar o tempo da sua cave /addcavefriend - Adiciona um amigo seu para que ele possa entrar e sai da sua cave quando quiser... Obs: Tem um exhausted de 1 hora(configurável) para não ficar toda hora tirando e colocando amigo na cave. /removecavefriend - Remove o seu amigo da sua cave(caso ele esteja dentro da cave tanto offline quanto online, ele é removido) /cavetime - Mostra quando tempo falta para expirar a sua cave Comando para amigo invitado da cave: /cavefriendtime - Mostra quando tempo falta para expirar a cave que ele invitado. /caveleave - Comando para ele se kikar da cave que está invitado. Comandos adicionais importante para todos: /cavelist -- Mostra em uma janela todas as caves do servidor /cave ID -- Neste comando você terá que usar o ID da cave que deseja saber as infor,ações, por exemplo: /cave 1 -- Irá mostrar em uma janela todas as informações desta cave, como: -Nome da cave -Preço da cave -Level Minimo e Level Maximo para comprar a cave -Se nesta cave precisa ser Premium Account para comprar ou não. /cavepurchase -- Filtra em uma janela somente as caves que estão disponíveis para compra. ---------------------------------------------------------------------------------------------------------------------------------------------------- Configurações: Vá na lib e irá se deparar com duas tabelas... Esta primeira tabela é onde você irá adicionar novas caves e atribuir as configurações, exemplo: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}} } [1] -- Entre os colchetes é o ID da cave, favor colocar e ordem. name = "Demon Hunter" -- Entre as aspas "" Você atribui o nome da cave price = 1000 -- Preço em gps da sua cave(caso use a versão que vende em gps) level = {min = 8, max =30} -- Aqui voce coloca o level min e max que o jogador tem que ser para comprar a cave time = 4 -- Tempo em horas que o jogador poderá ficar na cave premium = false -- Se para comprar a cave terá que ser premium (false ou true) enter = {x = 284, y = 223, z = 7} -- Pos de entrada da cave from = {x = 275, y = 219, z = 5}, -- Aqui você deverá pegar a pos do começa da cave to = {x = 302, y = 240, z = 7} - - -- Aqui você deverá pegar a pos final da cave!(como se fosse um quadrado. e como adicionar mais caves por exemplo? Assim: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}}, [3] = {name = "Ciclops Cave", price = 5000, level = {min = 20, max = 50}, time = 2, premium = true, enter = {x = 198, y = 320, z = 7}, from = {x = 200, y = 340, z = 7}, to = {x = 250, y = 390, z = 7}} } ---------------------------------------------------------------------------------------------------------------------------------------------------- explicando a segunda tabela: exclusives_caves_config = { storage = 547575, check = 547576, comand_add_exaust = {hours = 1, storage = 547577}, -- tempo para nao ficar toda hora tirando e colocando amigo mensagem = "[Exclusive Cave System] Você foi removido ou o tempo da %s cave expirou!", serve_mensagem = "[Exclusive Cave System] A cave %s acabou de ficar liberada para venda por %d Gold's, aproveitem para compra-la no NPC!" } storage -- nao mexer! check -- não mexer!! comand_add_exhausted -- é o tempo que jogador poderá voltar a invitar outro jogador, está configurado para 1 hora!! mensagem -- não mexa serve_mensagem -- não mexa tbm kkk Só baixar e executar as querys!! Cave System.rar
  17. 11 points
    ~ • • ~ É com muita satisfação que venho anunciar esse grupo que vem crescendo dentro da comunidade, a Academia de Mapping. Composta atualmente por mais de 30 membros, em maioria Mappers, o grupo tem como objetivo compatilhar experiências e ajudar quem está iniciando no Mapping. Iniciei esse projeto para incentivar mais pessoas a praticarem Mapping, pois sei que muitos tem vontade de aprender, e saibam que não estão sozinhos. Mapping se torna prático, divertido e desestressante, se você se permitir tentar! • ~ Participe: Clique aqui para entrar no Grupo! ~ • Alguns dos participantes da Academia prepararam carinhosamente algumas amostras de seus mapas para compartilhar com a vocês, peço que se os Mappers pronunciem-se no tópico apresentando-se, divulguem seus projetos e falem um pouco sobre vocês! 💪 @Coltera @DdJs @Huni @Sharck @Clauis @Storm @Nolis @Walox @KOLISAO @Marco Oliveira @tataboy67 @Sphynx1 @Loide @WooX Obrigado a todos por tirarem um tempo pra separar o conteúdo, não poderia ter feito esse tópico sem a ajuda de vocês! Quer aprender a fazer seus próprios mapas? Junte-se a nós, todos os dias tem alguém online que pode te ajudar com dicas, instruções ou opiniões. Se você não for mapper pode acessar o grupo como Visitante e acompanhar os trabalhos divulgados. Além disso, você pode avançar seu Ranking dentro do grupo, os Rankings servem para mostrar o que cada mapper é capaz de fazer, e são definidos por auto-avaliação. • ~ Clique aqui para entrar no Grupo! ~ •
  18. 10 points
    Atualização de 29/06/2019. Olá meus amigos, essa é a minha última contribuição free que faço na área de OTserver, fiz uma atualização bem completa do Gesior comparando com os que existem disponíveis, não vou falar muito pois grande parte já conhecem... Vou apenas posta algumas imagem das mudanças feitas. Sempre gostei de evoluir e de oferecer aos demais uma facilidade de obter um material grátis e de qualidade, nunca utilizei meu pouco conhecimento para prejudicar os demais, pelo o contrario sempre foi na intenção de ajudar e se em algum momento falhei, falhei inconscientemente. - Foi mudado algumas imagens de layout para renovar a estrutura. - Server Info + Most Power Ful Guilds na mesma estrura. - Create Account exigindo senhas com letras minusculas, maiúsculas e números, fortalecendo a segurança do seu cliente e dificultando futuras dores de cabeças. - Adicionado o mecanismo que identifica os valores de Premuim Points e Backup Points. - Algumas mudanças de layout. - Nome do player abaixo linkado. - Adicionado um Box de doação, com a intenção apenas de complementar o layout enriquecendo a pagina. - Fixado o bug edit town, e melhorado o layout. - Characters.php refeito, nesta imagem é uma visão de uma conta com access admin. - Visão normal. - Inventário completo. - Guilds com visão ampliada. - Detalhes... - Novo SHOP com as estrutura de layout melhorada e modernizada. - Sem BUGs lembre-se do CTRL + F5 para atualizar os cookies nesta pagina. - Detalhes... - Detalhes... - Detalhes... - Histórico do SHOP... DOWNLOAD SITE SHOP.LUA XAMPP 1.7.3 DATABASE LIMPA MYSQL DATABASE COMPLETA MYSQL TUTORIAIS ÚTEIS E COMPATÍVEIS PARA O SITE: PAGSEGURO AUTOMATICO SHOPGUILD BACKUP_POINTS SISTEMA VIP_TIME Créditos: Gesior.pl(WEBMaster) Felipe Monteiro(WEBMaster, WEBDesigner) Natanael Beckman(WEBNada) Nailan (WEBMaster) Ivens Pontes (WEBMaster) Marcio Porto (WEBMaster) Danyel Varejão (Programmer LUA, C++)
  19. 10 points
    The Magician's Library Version: 10.98 Magician's Library 10.98.rar [Scan] Type: .Rar Size: 229KB Position(s): [X: 1011 Y: 1030 Z: 10] File password: tibiaking Images:
  20. 9 points
    Yinz

    Nakjila Layout 1x

    Olá, tava olhando aqui um antigo HD que por acaso não estava funcionando e acabei conseguindo recuperar algumas coisas, então como estou afastado do forum estarei disponibilizando aqui. Version: TFS 1x+ Download: Nakjila Virustotal: AQUI Images:
  21. 9 points
    luanluciano93

    [OTX3 8.60] STYLLER 2019

    STYLLER 2019 - CUSTOM YOUROTS Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pela engine OTX, resolvi criar um projeto de servidor styller usando a OTX3 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações. # Atualizações: → Atualizações # Informações do Servidor e Sistemas: → Versão: 8.60 → Engine: sources OTX3 nas revisões atuais. → Cidades, sistemas e quests. # Créditos: • luanluciano93 • GOD Bon (mapa yourots) • mattyx14 e TFS team (pela engine do servidor) • @leoloko12 (mapa styller) • e outros # Download: - Download-1. Entre no clube STYLLER ... É isso pessoal, espero que gostem
  22. 9 points
    eae, se n me engano esse rolê não funciona no gla/pxg. mas, tem outros jeitos de pegar lá tb links: ninjaripper - https://gamebanana.com/tools/download/5638 dds converter - http://www.softsea.com/download/DDS-Converter.html scan: ninja ripper - https://www.virustotal.com/gui/file/60541e6a43661f0ee2e70c0a7cedb86d44a874e5376949db7a2e1f604fa5cdf1/detection dds - https://www.virustotal.com/gui/file/611d6bbb534b8a3210b2ca1e7954d6abc3055c6f2995833fbb04b6093f418263/detection
  23. 9 points
    WooX

    DarkTheme e AutoComplete para Notepad++

    Atualização 05/05/2019: Olá a todos, acredito que muitos além de mim utilizam o Notepad++ para trabalhar com códigos, é por isso que hoje venho trazer um tema que eu mesmo fiz e um AutoComplete atualizado para o Notepad++. AutoComplete. Para quem não está familiarizado, o AutoComplete é uma função do Notepad++ que completa funções ou palavras assim que você começa digita-las. Neste AutoComplete que estou disponibilizando, possui todas as funções existentes no TFS 0.3.7 e 0.4. Para instalar o AutoComplete, primeiro você deve ativar a função no seu Notepad++. Para isso vá em Configurações -> Preferencias -> Autocompletar e deixa as configurações como mostra a seguir. Em seguida, basta colocar o arquivo lua.xml no seguinte diretório do Notepad++. Notepad++\plugins\APIs Atualização: Dark Theme. Eu fiz este tema porque detesto o tema original do Notepad++, todo aquele branco chega a arder os olhos e é muito cansativo ficar olhando pra quem programa muito tempo utilizando a ferramenta. Este tema não traz consigo somente a alteração da cor do fundo, mas um destaque de cor verde a cada função existente no AutoComplete. Um código Lua utilizando o tema, fica assim. Além disso, o tema não dá suporte apenas para a Linguagem Lua, mas também para C++, PHP, MySQL, Javascript, XML, HTML, CSS e INI. Para realizar a instalação do tema, basta ir em Configurações -> Importar -> Importar Tema(s) e escolher o arquivo DarkCode.xml. Atualização: Pronto! Após realizado todos os procedimentos, basta reiniciar seu Notepad++ que todas as alterações terão efeito. É isso, acredito que possa ser útil no dia a dia de quem desenvolve em Lua. Ultima atualização: 05/05/2019.
  24. 9 points
    Ú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
  25. 9 points
    Boa tarde pessoal, me ausentei por um bom tempo e continua sendo difícil pra eu poder continuar mexendo com OTs diariamente, mas por um longo tempo eu me prometi que faria um tutorial de como começar seu servidor a partir da configuração da máquina usada, tudo isso baseado no tutorial do @sirarcken que postou como configurar a Google VM pro tibia. Bom, acho que um pouco mais de 1 ano depois do tutorial dele, resolvi finalmente dar uma "atualizada" e postar um usando, como o próprio título fala, Nginx + MariaDB ao invés de Apache+MySql. Por que dessa troca? Pois bem, fiz algumas pesquisas e todas indicavam um melhor desempenho com o Nginx ao invés do Apache por ter um melhor gerenciamento de memória, portanto ficou mais flúido, além de ser Open Source e bem mais seguro também. O mesmo se aplica ao MariaDB. Bom, fiz uma série de apenas 2 vídeos no youtube, o primeiro ensinando a configurar a máquina desde o 0, o segundo ainda não cheguei a postar, mas vai ser exatamente a partir da compilação do servidor até ligar ele usando IP do site No-IP. Bom, sem mais delongas, espero que gostem. Na descrição do vídeo tem um link com todos os comandos usados durante o mesmo. Obs.: Não quero que prestem atenção à qualidade de edição do vídeo pois não sei mexer muito bem com editores hahaha e também não gosto de frescura, gosto de ir direto ao ponto. Obs. 2: Quando eu postar o segundo vídeo, editarei este post adicionando o link para o tópico. Créditos: Eu @sirarcken Google valuebound.com EDIT> COMO HAVIA DITO: 2ª PARTE:
  26. 9 points
    Salve galera bom eu achei um script de lenhar antigo fui atrás tentei editar deu fail então recebi ajuda de alguns membros e enfim consegui trazer isso para vocês para muitos pode ser um simples sistema de cortar arvore mas com ele da para usar a criatividade e usar para muitas outras coisas como por exemplo mina para minerar minérios/ arvores com frutos para colher e por ai vai. Bom o script faz o seguinte você usa o machado em uma arvore configurável e você fica com a roupa de lenhador corta a arvore fica o toco dela e depois de um tempo a arvore volta ao normal para ser cortada novamente e assim você ganha itens configuráveis. Membros que ajudaram no script @JoviM @lordzetros Criador do script original @PsyMcKenzie Corrigido por @Storm Testado na versão 0.3.6 / 8.54 Outfit de lenhador 8.54 V outfit obd 854_1248.obd = Homem outfit obd 854_1249.obd = Mulher 8.60 V outfit obd 860_1248.obd = Homem outfit obd 860_1249.obd = Mulher Action.xml <action itemid="ID DO MACHADO" event="script" value="NOME DO SCRIPT.lua"/> Script V Vídeo demonstrativo Espero que gostem do script
  27. 9 points
    Olá a todos. Bom eu percebi que tem algumas pessoas levando vantagem em cima de um programa gratuito disponível na internet, então resolvi postar ele para todos usarem gratuitamente é um programa que além de criar a pasta cab muda a file name/mask do aplicativo, assim fazendo com que ele necessite abrir o data.cab criado por você trazendo enfim a proteção.cab para os clientes de hoje, o problema que existe nele é que ele coloca diversos falsos positivos no cliente fazendo com que qualquer anti-virus detecte o cliente do servidor como uma ameaça assim excluindo do computador e consequentemente faz com que o servidor perca jogadores, mas já que tem pessoas levando vantagem sobre esse programa gratuito na internet e cobrando horrores para passar esse programa e um tutorial de como fazer isso eu vou disponibilizar aqui para uso gratuito de todos. O Nome do programa em questão é Enigma Virtual Box Link para acessar o site oficial para baixar o programa https://enigmaprotector.com/en/downloads.html Bom agora irei mostrar como fazer o procedimento com um vídeo obs: estarei usando uma versão inferior mas o procedimento é o mesmo Após esse processo o cliente fica dessa forma Scan do cliente https://www.virustotal.com/#/file/c560af8310c672d88f20649178036220cc20b00e074959e9a14975727a8ec936/detection Scan da data.cab https://www.virustotal.com/#/file/2a43b080250ff3e02a1d3d5409f765e70cd4385bca748bae1f0b4b35bbd9e00b/detection Bom é isso pessoal o intuito é acabar com essa cilada Aproveito para falar sim que existe programadores que realmente criam programas próprios e realmente cria uma boa proteção mas não é o que esta acontecendo aqui ultimamente então o intuito e acabar com essas pessoas que estão se aproveitando desse programa para querer enganar falando que a proteção foi criada por eles etc... sendo que é um programa gratuito e disponível na internet
  28. 9 points
    Coltera

    [Show OFF] - Shopping Modal

    Novo Shopping in-game usando Modal via Banco de Dados! Será que fica bom? Oque vocês acham?
  29. 8 points
    Namikaze

    Namikaze Show Off

    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.
  30. 8 points
    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
  31. 8 points
    WooX

    Gesior - Classic-Yurots 2019

    Gesior 2012 V. Classic-Yurots Como dito anteriormente no tópico do servidor, este é o Gesior 2012 editado pelo @KOLISAO. Este Gesior foi editado para ser usado exclusivamente com o servidor Classic-Yurots, porem pode ser utilizado em outros datapacks desde que as sources sendo utilizadas sejam TFS 0.4 ou OTX2. Se você ainda não viu o tópico sobre o servidor em questão, vale apena conferir, link para acesso abaixo. Conteúdo Assim como o servidor, muito tempo foi gasto modificando este Gesior, tanto na parte de imagens e layout (front-end) como na criação de novas paginas e funções (back-end). Resumindo, agora esta é uma das se não a melhor versão disponível do Gesior 2012. Eu garanto que vale apena baixar e conferir. Bom, como eu possuo um exemplar do site online, eu não irei postar imagens do mesmo. Você pode conferir as paginas e features do site do link abaixo. Link para acesso: http://classic-styller.com Futuramente porem, eu irei fechar o site, quando este dia chegar, eu irei atualizar o tópico com imagens e adicionar uma descrição detalhada sobre o que contem no mesmo. Créditos Este Gesior foi feito com base no Gesior 2012 postado pelo @Natanael Beckman, caso queira conferir o post original, segue link abaixo. Todas as edições realizadas no site, tanto front-end como back-end foram realizadas pelo @KOLISAO, portanto, os créditos são dele e do Natanael. Link para Download Alerta Antes do link, um alerta. No momento do Scan, 9 de 44 engines acusaram os arquivos como maliciosos, eu acredito que seja apenas um falso positivo devido aos scripts contidos no site, porem eu não posso garantir que os arquivos sejam de fato inofensivos, portanto, baixe os arquivo por sua conta e risco. Download - Scan Obs: Link para download de uma database limpa e compatível com o site se encontra no post do servidor.
  32. 8 points
    Fiquei um tempo sem postar nada, hj eu trago até vcs um cliente 11.44.5516 atualizado com as sprites do tibia 12.03.7844. Essa versão 11 se conecta com o login.php do site, ou seja, tem acesso ao servidor. Se dá algum problema não tenho certeza, só sei que estou jogando com ele e até então não deu erro. Assista ao vídeo com o 11.44 funcionando. Como podem ver no vídeo, as novas sprites estão funcionando sem crash do cliente e nem do servidor. Mounts.xml, outfits.xml e items.xml devem ser configurados no seu servidor. Cliente 11.44.5516 está atualizado com as novas sprites e com ip 127.0.0.1 ( localhost ), não mostrei os demais itens para não ficar um vídeo muito longo. Download: Tibia 11.44.5516 versão 12.rar Scan: Virus Total Abraços e bom proveito do conteúdo. Não se esqueça de dar um REP+ bem bacana! Créditos: Cipsoft pelos sprites e cliente
  33. 8 points
    Yinz

    GODLike Layout 1x

    Olá, tava olhando aqui um antigo HD que por acaso não estava funcionando e acabei conseguindo recuperar algumas coisas, então como estou afastado do forum estarei disponibilizando aqui. Version: TFS 1x+ Download: GODLike Virustotal: AQUI Images:
  34. 8 points
    JZDJ

    Download Clients 11+ IP 127.0.0.1

    Olá galera do TK. Hoje eu trago vários clientes de Tibia 11+ com IP 127.0.0.1. Vi que alguns usuários não estão conseguindo algumas versões 11 então resolvi postar aqui. Estou disponibilizando o EXECUTÁVEL DO CLIENTE. Para que funcione é só colocar na pasta BIN da versão correspondente. Também disponibilizei a pasta completa compactada. Vamos ao que interessa. Tibia 11.43.5504 127.0.0.1-11.43.5504.exe SCAN do cliente Pasta completa: Tibia 11.43.5504.rar SCAN pasta completa Tibia 11.44.5516 127.0.0.1-11.44.5516.exe SCAN do cliente Pasta completa: Tibia 11.44.5516.rar SCAN pasta completa Tibia 11.46.5556 127.0.0.1-11.46.5556.exe SCAN do cliente Pasta completa: Tibia 11.46.5556.rar SCAN pasta completa Tibia 11.47.5640 127.0.0.1-11.47.5640.exe SCAN do cliente Pasta completa: Tibia_11_47.5640.rar SCAN pasta completa Tibia 11.47.5674 127.0.0.1-11.47.5674.exe SCAN do cliente Pasta completa: Tibia_11_47.5674.rar SCAN pasta completa Tibia 11.48.5712 127.0.0.1-11.48.5712.exe SCAN do cliente Pasta completa: Tibia_11_48.5712.rar SCAN pasta completa Tibia 11.48.5753 127.0.0.1-11.48.5753.exe SCAN do cliente Pasta completa: Tibia_11_48.5753.rar SCAN pasta completa Tibia 11.49.5813 127.0.0.1-11.49.5813.exe SCAN do cliente Pasta completa: Tibia_11_49.5813.rar SCAN pasta completa Tibia 11.49.5884 127.0.0.1-11.49.5884.exe SCAN do cliente Pasta completa: Tibia_11_49.5884.rar SCAN pasta completa Tibia 11.49.5921 127.0.0.1-11.49.5921.exe SCAN do cliente Pasta completa: Tibia_11_49.5921.rar SCAN pasta completa Tibia 11.49.5983 127.0.0.1-11.49.5983.exe SCAN do cliente Pasta completa: Tibia_11_49.5983.rar SCAN pasta completa Tibia 11.49.6018 127.0.0.1-11.49.6018.exe SCAN do cliente Pasta completa: Tibia 11.49.6018.rar SCAN pasta completa Tibia 11.49.6030 127.0.0.1-11.49.6030.exe SCAN do cliente Tibia 11.49.6030.rar SCAN pasta completa Tibia 11.50.6055 127.0.0.1-11.50.6055.exe SCAN do cliente Tibia 11.50.6055.rar SCAN pasta completa Tibia 11.51.6099 127.0.0.1-11.51.6099.exe SCAN do cliente Tibia 11.51.6099.rar SCAN pasta completa Tibia 11.52.6104 127.0.0.1-11.52.6104.exe SCAN do cliente Tibia 11.52.6104.rar SCAN pasta completa Tibia 11.55.6239 127.0.0.1-11.55.6239.exe SCAN do cliente Tibia 11.55.6239.rar SCAN pasta completa Tibia 11.56.6239 127.0.0.1-11.56.6239.exe SCAN do cliente Tibia 11.56.6239.rar SCAN pasta completa Tibia 11.57.6239 127.0.0.1-11.57.6239.exe SCAN do cliente Tibia 11.57.6239.rar SCAN pasta completa Tibia 11.58.6239 127.0.0.1-11.58.6239.exe SCAN do cliente Tibia 11.58.6239.rar SCAN pasta completa Tibia 11.58.6239 ATUALIZADO 127.0.0.1-11_58.6239.exe ATUALIZADO SCAN do cliente Tibia 11.58.6239 ATUALIZADO.rar SCAN pasta completa Tibia 11.59.6424 127.0.0.1-11.59.6424.exe SCAN do cliente Tibia 11.59.6424.rar SCAN pasta completa Tibia 11.60.6457 127.0.0.1-11.60.6457.exe SCAN do cliente Tibia 11.60.6457.rar SCAN pasta completa Tibia 11.65.6492 127.0.0.1-11.65.6492.exe SCAN do cliente Tibia 11.65.6492.rar SCAN pasta completa Tibia 11.65.6507 127.0.0.1-11.65.6507.exe SCAN do cliente Tibia 11.65.6507.rar SCAN pasta completa Tibia 11.66.6516 127.0.0.1-11.66.6516.exe SCAN do cliente Tibia 11.66.6516.rar SCAN pasta completa Tibia 11.70.6535 127.0.0.1-11.70.6535.exe SCAN do cliente Tibia 11.70.6535.rar SCAN pasta completa Tibia 11.70.6543 127.0.0.1-11.70.6543.rar SCAN do cliente Tibia 11.70.6543.rar SCAN pasta completa Tibia 11.70.6548 127.0.0.1-11.70.6548.rar SCAN do cliente Tibia 11.70.6548.rar SCAN pasta completa Tibia 11.70.6555 127.0.0.1-11.70.6555.rar SCAN do cliente Tibia 11.70.6555.rar SCAN pasta completa Espero que eu tenha ajudado. Créditos: A Cip pelos clientes e a mim por ter alterado os ips nos mesmos. REP+ é sempre bom e não dói. Abraços. ATT , Jaurez/JZDJ
  35. 8 points
    Phineasz

    Cidade [8.60]

    Meu primeiro mapa feito, estou despertando essa habilidade de mapear com ajuda de alguns integrantes da comunidade. @Coltera, @Nolis e @Astra Moskov. Obrigado pelas dicas, criticas construtivas. Pretendo melhorar o máximo possível. Download: https://www.mediafire.com/file/40nckfpf5whqlzh/Phineasz.rar/file Scan: https://www.virustotal.com/#/file/34702d03e5859f8060c5d10f8ab21966aa0d1758f3125db83407dc4ef7862290/detection
  36. 8 points
    Yinz

    Telara Baiak Futuristico.

    Olá, eu me chamo Yinz "Pedro", sou dono do Thoria e já tive outros projetos, sempre foram de mapa proprio, custom, algo diferente. O diferente me chama muita atenção, por isso depois dá minha ultima frustração com mapa próprio "não ter jogadores" eu resolvi abrir um Baiak. Ah, mas você gosta de low rates, rpg, mapa todo bonitinho e bla bla bla e agora vai abrir um baiak cheio de teleports? - Sim, vou. Para quem não sabe, o mapper @Nolis mais foda que eu admiro bastante liberou o Futurístico, e eu sempre achei seu trabalho fodastico apesar de não estar terminado. Então resolvi abrir, por ser algo totalmente diferente, e que não falta muitas coisas, eu basicamente tenho tudo. Ainda não resolvi qual site usar, mas queria usar algo diferente, longe de tibiarl layout. Tenho algumas ideias, de niveis de monstros, magias customs, segunda promotion, sistema de tokens (colocar recompensas por leveis, quests, tasks, manter online), enfim. Como eu nunca abri um Baiak, estou atrás de uma equipe, alguém para me auxiliar, com sistemas, ideias, o que precisa ter um baiak, como manter, com eventos etc. Se for alguém que entenda de lua é melhor ainda. Não vou citar Programador, Scripter, nada disso, basta ter uma noção e querer fazer algo maneiro, eu não sei muito de nada disso, mas sei pouco de tudo. você pode me chamar aqui, por pm ou no discord Yinz#7439
  37. 7 points
    Depois de milhões de anos sem programar porcaria nenhuma... Eu desenvolvi este sistema como um método de estudo. (C++) Este sistema foi inspirado no Auto Loot System por @psychonaut. (OTland) Criei o mesmo na versão mais recente do tfs. Auto Loot System for TFS 1.3 Como funciona? Simples, quando você mata um monstro e abre o corpo (você precisa clicar no corpo), os itens vão para o seu personagem. Instalando em actions.cpp, encontre: if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } e mude isso para: if (corpseOwner != 0 && !player->canOpenCorpse(corpseOwner)) { return RETURNVALUE_YOUARENOTTHEOWNER; } else { if (player->canOpenCorpse(corpseOwner) && player->autoLootList.size() != 0) { if (player->getCapacity() > 100 * 100) { //Minimum of Capacity for autoloot works. (100 CAP) for (Item* item : container->getItemList()) { if (player->getItemFromAutoLoot(item->getID())) { std::ostringstream msgAutoLoot; msgAutoLoot << "You looted a " << item->getItemCount() << "x " << item->getName() << "."; g_game.internalMoveItem(container, player, CONST_SLOT_WHEREEVER, item, item->getItemCount(), nullptr); player->sendTextMessage(MESSAGE_INFO_DESCR, msgAutoLoot.str()); } } } else { player->sendTextMessage(MESSAGE_INFO_DESCR, "Sorry, you don't have enough capacity to use auto loot, so it has been disabled. (100+ capacity is required)"); } } } em player.h, abaixo de: std::unordered_set<uint32_t> VIPList; adicione isso: std::set<uint32_t> autoLootList; ainda em player.h encontre: bool hasLearnedInstantSpell(const std::string& spellName) const; adicione em baixo: void addItemToAutoLoot(uint16_t itemId); void removeItemFromAutoLoot(uint16_t itemId); bool getItemFromAutoLoot(uint16_t itemId); em player.cpp no final do arquivo, adicione: void Player::addItemToAutoLoot(uint16_t itemId) { autoLootList.insert(itemId); } void Player::removeItemFromAutoLoot(uint16_t itemId) { autoLootList.erase(itemId); } bool Player::getItemFromAutoLoot(const uint16_t itemId) { return autoLootList.find(itemId) != autoLootList.end(); } em luascript.cpp encontre: registerMethod("Player", "getFightMode", LuaScriptInterface::luaPlayerGetFightMode); e adicione em baixo: registerMethod("Player", "addItemToAutoLoot", LuaScriptInterface::luaPlayerAddItemToAutoLoot); registerMethod("Player", "removeItemFromAutoLoot", LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot); registerMethod("Player", "getItemFromAutoLoot", LuaScriptInterface::luaPlayerGetItemFromAutoLoot); registerMethod("Player", "getAutoLootList", LuaScriptInterface::luaPlayerGetAutoLootList); ainda em luascript.cpp encontre essa função: int LuaScriptInterface::luaPlayerGetFightMode(lua_State* L) { // player:getFightMode() Player* player = getUserdata<Player>(L, 1); if (player) { lua_pushnumber(L, player->fightMode); } else { lua_pushnil(L); } return 1; } abaixo dela, adicione: int LuaScriptInterface::luaPlayerAddItemToAutoLoot(lua_State* L) { // player:addItemToAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->addItemToAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerRemoveItemFromAutoLoot(lua_State* L) { // player:removeItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } player->removeItemFromAutoLoot(itemId); pushBoolean(L, true); return 1; } int LuaScriptInterface::luaPlayerGetItemFromAutoLoot(lua_State* L) { // player:getItemFromAutoLoot(itemId) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint16_t itemId; if (isNumber(L, 2)) { itemId = getNumber<uint16_t>(L, 2); } else { itemId = Item::items.getItemIdByName(getString(L, 2)); if (itemId == 0) { lua_pushnil(L); return 1; } } if (player->getItemFromAutoLoot(itemId)) { pushBoolean(L, true); } else { pushBoolean(L, false); } return 1; } int LuaScriptInterface::luaPlayerGetAutoLootList(lua_State* L) { // player:getAutoLootList() Player* player = getUserdata<Player>(L, 1); if (player) { std::set<uint32_t> value = player->autoLootList; if (value.size() == 0) { lua_pushnil(L); return 1; } int index = 0; lua_createtable(L, value.size(), 0); for(auto i : value) { lua_pushnumber(L, i); lua_rawseti(L, -2, ++index); } } else { lua_pushnil(L); } return 1; } em luascript.h encontre: static int luaPlayerGetFightMode(lua_State* L); adicione a baixo: static int luaPlayerAddItemToAutoLoot(lua_State* L); static int luaPlayerRemoveItemFromAutoLoot(lua_State* L); static int luaPlayerGetItemFromAutoLoot(lua_State* L); static int luaPlayerGetAutoLootList(lua_State* L); em iologindata.cpp encontre: //load storage map query.str(std::string()); query << "SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { do { player->addStorageValue(result->getNumber<uint32_t>("key"), result->getNumber<int32_t>("value"), true); } while (result->next()); } e adicione em baixo: query.str(std::string()); query << "SELECT `autoloot_list` FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if ((result = db.storeQuery(query.str()))) { unsigned long lootlistSize; const char* autolootlist = result->getStream("autoloot_list", lootlistSize); PropStream propStreamList; propStreamList.init(autolootlist, lootlistSize); int16_t value; int16_t item = propStreamList.read<int16_t>(value); while (item) { player->addItemToAutoLoot(value); item = propStreamList.read<int16_t>(value); } } acima de: //save inbox items adicione: query.str(std::string()); query << "DELETE FROM `player_autoloot` WHERE `player_id` = " << player->getGUID(); if (!db.executeQuery(query.str())) { return false; } PropWriteStream propWriteStreamAutoLoot; for (auto i : player->autoLootList) { propWriteStreamAutoLoot.write<uint16_t>(i); } size_t lootlistSize; const char* autolootlist = propWriteStreamAutoLoot.getStream(lootlistSize); query.str(std::string()); DBInsert autolootQuery("INSERT INTO `player_autoloot` (`player_id`, `autoloot_list`) VALUES "); query << player->getGUID() << ',' << db.escapeBlob(autolootlist, lootlistSize); if (!autolootQuery.addRow(query)) { return false; } if (!autolootQuery.execute()) { return false; } em sua database, execute esta query CREATE TABLE player_autoloot ( id int NOT NULL AUTO_INCREMENT, player_id int NOT NULL, autoloot_list blob, PRIMARY KEY (id) ); agora vá em data/scripts/talkactions e crie esse arquivo LUA autoloot.lua local talk = TalkAction("!autoloot") function talk.onSay(player, words, param) local i = player:getAutoLootList() local cache = "Check your loot list: " local split = param:split(",") local action = split[1] if param == "list" then if i then for _, item in ipairs(i) do cache = cache .. (ItemType(item)):getName() .. ", " end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your list is empty! Add some item and try again.") return false end player:sendTextMessage(MESSAGE_INFO_DESCR, cache:sub(1, -3)) return false end if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:sendCancelMessage("You're already autolooting this item.") return false end player:addItemToAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You're now auto looting " .. itemType:getName()) return false elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getName() == '' then player:sendCancelMessage("There is no item with that id or name.") return false end end if player:getItemFromAutoLoot(itemType:getId()) then player:removeItemFromAutoLoot(itemType:getId()) player:sendTextMessage(MESSAGE_INFO_DESCR, "You removed the " .. itemType:getName() .. " from your loot list.") else player:sendCancelMessage("This item does not exist in your loot list.") end return false end player:sendTextMessage(MESSAGE_EVENT_ORANGE, "Auto Loot commands (items are automatically moved to your bp if you open monster corpse):"..'\n'.."!addloot add, nameItem - add item to auto loot by name"..'\n'.."!autoloot remove, itemName - remove item from auto loot by name"..'\n'.."!autoloot list - list your current auto loot items") return false end talk:separator(" ") talk:register() É isso, espero que gostem do sisteminha Se você encontrar algum bug, deixe-me saber. Falta fazer: Optimizar a mensagem de loot. Adicionar ModalWindow. Cheers~
  38. 7 points
    Global 11/12x [v32] - New Falcons - New Asuras - Warzone 4,5,6 - Exercise Training - Raids 100% - Monstros 100% - Trainer Offline 100% - Trainer Online 100% - Taming system funcionando 100%; - Database completa - War System 100% - Global MAP Full - Store 100% - Imbuement - Prey System - Entre outros sistemas. Projeto no: GITHUB Scan Vírus Total IMAGES Créditos:
  39. 7 points
    Salve galera bom tinha uns membros do fórum atrás do sistema de chuva porém estava confuso e totalmente configuravel apenas por math.random então com ajuda do @xWhiteWolf agora o script esta totalmente sem math.random e eu detalhei tudo dentro do script como configurar etc... tópico original Aviso 1º: Mude a tag do globalevents.xml para interval=1 Aviso 2º: Todas as explicações estão dentro do script basta ler Vídeo demonstrativo 2019-10-04 01-44-37.mp4 Vamos as modificações basicamente substitua o arquivo que fica em data/globalevents/scripts/rain.lua abra ele e cole esse código dentro Aproveitando fiz uma modificação na direção que a chuva cai caso quiser a modificação vá em data/globalevents/scripts/lib e abra o arquivo rain.lua e substitua tudo que tiver lá por esse código Créditos: @Guilherme. @xWhiteWolf @LeoTK Elexonic (Otland)
  40. 7 points
    Dwarfer

    Goblin Merchant Quest

    Falaaaaa, galerinha! Bem, hoje compartilho com vocês o código da Goblin Merchant Quest que é a quest dos coryms lá de venore 😁. Na verdade, estou compartilhando as duas primeiras missões. A depender do feedback, se o pessoal se interessar pelo tipo de conteúdo, compartilho as outras missões. Acredito que a quest pode ser aproveitada em servidores com foco no RPG ou apenas para levar algo diferente ao servidor. Lembrando que o código é para TFS 0.4. Para saber mais sobre a quest: https://www.tibiawiki.com.br/wiki/Goblin_Merchant_Quest As falas do NPC Rafzan estão 99% iguais ao global. Aquele 1% vagabundo🎵 é de algumas adaptações que fiz. Adaptei os itens que foram utilizados na quest, já que não possuía os itens utilizados na quest do global por ter feito em uma versão anterior a atual. No entanto, está facilmente editável para vocês também colocarem os ids que desejarem. Configuração: Em data/lib crie o arquivo Goblin Merchant Quest.lua e cole isto dentro: No items.xml (Escolha os ids que preferir e edite de forma semelhante, mostrarei os que escolhi): ---> Para a missão 1: * cracked stone (id 1285) <item fromid="1285" toid="1292" article="a" name="stone" /> * skull stone (id 10023) <item id="10023" article="a" name="skull stone"> <attribute key="description" value="It is used to mark the way." /> <attribute key="decayTo" value="1285" /> <attribute key="duration" value="60" /> <attribute key="weight" value="950" /> </item> * skulls (id 2229) <item id="2229" article="a" name="skull" plural="skulls"> <attribute key="weight" value="2180" /> </item> O resultado ficou assim: --->Para a missão 2: * perfume gatherer (id 2007) <item id="2007" article="a" name="perfume gatherer"> <attribute key="weight" value="250" /> <attribute key="description" value="It is empty. The first odour you'r looking for is special snail slime." /> </item> Em data/actions/scripts, crie o arquivo rafzan_mission01.lua e cole isto dentro: Em data/actions/scripts, crie o arquivo rafzan_mission02.lua e cole isto dentro: No actions.xml, adicione as linhas: <action itemid="2229" script="rafzan_mission01.lua" /> <!-- id da placa --> <action itemid="2007" script="rafzan_mission02.lua" /> <!-- id do perfume gatherer --> E por último, mas não menos importante, em data/npc crie o arquivo Rafzan.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Rafzan" script="rafzan.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="61"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="shop_buyable" value="backpack,1988,10;bag,1987,4;fishing rod,2580,150;rope,2120,50;shovel,2554,10;scythe,2550,12;torch,2050,2;worm,3976,1;" /> <parameter key="shop_sellable" value="fishing rod,2580,30;rope,2120,8;shovel,2554,2;" /> </parameters> </npc> Lembrando que coloquei somente os itens que existiam na versão que utilizei. Em data/npc/scripts, crie o arquivo rafzan.lua e cole isto dentro: Qualquer dúvida na configuração que tenha ficado, é só se basear na própria quest do global. É isso, beijinhos 😘.
  41. 7 points
    Gengo

    [OTClient] 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.
  42. 7 points
    Lyu

    Cam System 10.98 (TFS 1.3)

    Olá TK, hoje venho publicar um sistema bem interessante que venho mexendo há algumas semanas, estou falando do Cam System, um sistema de nível avançado que coleta packets durante a jogatina e forma uma gravação daquele momento, onde você poderá assistir à essa gravação quantas vezes quiser, como um replay, porém o sistema está limitado somente para fins de estudos e curiosidades. Não recomendo utilizar em seu servidor, pois como está limitado, também está rodando dentro do TFS e pode pesar, já que não tive tempo para otimizá-lo e criar um server próprio somente para assistir às gravações. Também não está serializando/deserializando em arquivos.cam, está salvando na memória. Mais uma vez, não utilize, só estude a principal funcionalidade do sistema. Bom, o gist já está publicado, você pode acessá-lo aqui ou então baixar a source já com o sistema incluso pronto pra rodar (Lembrando que utilizei a última versão do forgottenserver-master, confira aqui) Download da Source: src with cam.zip Scan: https://www.virustotal.com/gui/file/3392c1c31d8bbab5cdc2f7e3c0c766749f3238efd2c36c80575480283b15fc32/detection Para começar uma nova gravação, utilize /replay start Para parar uma gravação e salvá-la, utilize /replay stop feito isso, para assisti-la, deslogue sua conta e na janela de login, deixe o accountname vazio e no password informe replaylist Então é isso, se algum Programador estiver afim de aplicar otimizações/serialização ao sistema, fique à vontade para contribuir. Este sistema é incrível e pode muito bem dar certo. 😄 Vídeo de demonstração:
  43. 7 points
    * Apresentação * Bom, galera, tá tudo explicado no vídeo de como funciona o evento [Manual e Automático], como configurar o arquivo e tudo mais. Arquivos do evento estão anexado no tópico, assim como o vírus scan também, :). * Vídeo * * Comandos * !taro abrir Utilizado por staffs para abrir o evento [Manual] !taro fechar Utilizado por staffs para fechar o evento [Manual] !taro encerrar Utilizado por staffs para encerrar o evento [Manual] !taro kick,nome_jogador Utilizado por staffs e PLAYERS para kickar alguém do evento * Links * Vírus scan: https://www.virustotal.com/pt/file/7b30879de2745ef020a06de135dae7bd80673eb0d5d2f80b22b1f2a6db5158e0/analysis/1548894947/ Download: Taro Event - Lordzetros.zip Dúvidas, sugestões, críticas ou bugs? Deixe abaixo,
  44. 7 points
    Salve galera bom demorou mas consegui trazer esse conteúdo para vocês com ajuda de diversos amigos créditos no final do tópico. Bom vamos lá é um conjunto de configurações + script que vai permitir todas as skills do servidor ficar limitada até 250 Primeiramente vamos até o config.lua do servidor e deixa a Rate Magic em 0.01 Ficando assim rateMagic = 0.01 Logo depois disso vamos ao vocation.xml e procure por manamultiplier="1.2" Use o notepad++ Aperte ctrl + H para substituir todos os manamultiplier="1.2" por manamultiplier="1.0" manamultiplier="1.0" Essa modificação vai permitir a sua magic level chegar a 250 Depois faça isso com as demais skills Club / Sword / Axe / Distance / Shield / Fishing - Mude todos para 1.0 Depois disso agora vamos instalar os scripts para criar limites para as skills não bugarem e também vamos configurar a rate do magic level para não bugar também Vá em data/creaturescripts/creaturescripts.xml e adicione essas tags <!-- Skills Block / Stages Skills --> <event type="advance" name="skillblock" event="script" value="skillblock.lua"/> <event type="login" name="skillblock2" event="script" value="skillblock2.lua"/> <event type="death" name="skillblock3" event="script" value="skillblock3.lua"/> <event type="advance" name="skillblock4" event="script" value="skillblock4.lua"/> <event type="login" name="skillblock6" event="script" value="skillblock6.lua"/> Agora abra o login.lua e adicione isso registerCreatureEvent(cid, "skillblock") registerCreatureEvent(cid, "skillblock2") registerCreatureEvent(cid, "skillblock3") registerCreatureEvent(cid, "skillblock4") Crie o arquivo skillblock.lua e adicione isso dentro Lembre-se coloque um numero anterior ao limite ou seja o limite de fist e 250 mas no maxLevel esta 254 Crie o Arquivo skillblock2.lua e adicione isso dentro Crie o Arquivo skillblock3.lua e adicione isso dentro Crie o Arquivo skillblock4.lua e adicione isso dentro Crie o Arquivo skillblock5.lua e adicione isso dentro Crie um Arquivo skillblock6.lua e adicione isso dentro Algumas imagens mostrando funcionando no meu caso eu configurei para enviar a mensagem em uma channel caso se interessar nesse sistema basta seguir o link Clicando Aqui Créditos: @movie @Coltera @lordzetros @Yan Liima @aspira Night Wolf
  45. 7 points
    movie

    Real Baiak - Uma nova experiência.

    E aí pessoal, beleza!? Venho mostrar para vocês em um Baiak totalmente inovador. O servidor se chama: Beleza... mas existem tantos baiak's, o que terá de novo nesse?? Mapa próprio (Exatamente, chega de baiak's com mapas repetitivos e óbvios) RPG (SIM! É possível juntar RPG com Baiak e eu irei te provar isso!) Quests inéditas (Mistérios estarão presentes nesse servidor e você não vai descansar até achar o resultado dele!) Outfits (Os Retro Outfits estarão presentes para você curtir ainda mais) Magias Medievais (Ahh, as famosas magias estarão com um efeito único e mais medieval que você pode esperar!) Sistema de Survival (Você vai amar esse sistema de survival, repleto de efeitos!!) PVP (Afinal, estamos falando de Baiak! O nosso PVP será totalmente ajustado e balanceado) Hunts (Como todo baiak, teremos teleports para hunts, contudo grande parte será pelo mapa, para você descobrir todos os nossos mistérios!) Bosses (Você nunca viu bosses tão realistas e bem feitos! Eu te garanto!) Castle (Além dos inúmeros eventos que teremos, esse em especial terá um sistema totalmente inovador!) Mini-prints para tirar um pouco da sua curiosidade! Tem alguma ideia para melhorar ainda mais o servidor? Deixe nos comentários abaixo! Discord https://discord.gg/RkngfTq
  46. 7 points
    Darcio Antonio

    Criando um Botão OT CLIENTE

    game_topslot.zi Bom o scan do arquivo está ai. https://www.virustotal.com/#/file/5a0b17722b93fd4c9117086b80ad24442c305a05723680cad34ec50138ef30bc/detection
  47. 7 points
    DdJs

    Imperial Temple | 10.98

    Imperial Temple Version: 10.98 Imperial_Temple10.98.rar [Scan] Type: .RAR Size: 5KB Position(s): [X: 1017 Y: 1022 Z: 7] File password: tibiaking Images:
  48. 7 points
    DdJs

    [TFS 0.4] Bow Mágico

    Faz um tempo que eu postei algo aqui nessa parte do fórum sobre uma wand elemental a pedido de um membro. Quando fiz o post, uns dias depois alguém veio no meu inbox perguntando se eu tinha algo parecido relacionado a bow e acabou que eu apaguei as mensagens e não me recordo o nome da pessoa para poder marca-la aqui, e também só agora me lembrei disso e resolvi vir aqui postar. Eu não tenho conhecimento nenhum disso, muito menos sobre cálculos de formulas ou se existe outro mais sofisticado. Se alguém que entende do assunto quiser fazer melhorias, correções, etc, sinta-se a vontade. Introdução: Para quem já jogou o foxworld open tibia, ou algum outro otserver baiak/custom já deve ter visto um "magic bow" lá entre os itens vips/donates que dispara sozinho arrows, sem precisar das arrows em seu devido slot. Pois bem, isso é um negocinho bem simples que serve para leigos que nem eu no assunto colocar no ot uma arminha diferente. O ponto disso é que não tem nenhum segredo na "criação", você só altera um bow para ele funcionar como uma viper star. Mas de tudo é bem interessante e permite que o paladin tenha o 'slot extra' vago para usar de outra forma. Guia: Vamos lá! O bow que eu vou usar vai ser o Elethriel's Elemental Bow (ID: 8858) . É um bow interessante para se usar, ele tem um sprite bonito e não pode-se obter no jogo (o que facilita bastante). Os tiros eu usei as Shiver Arrows que combina com a cor do bow e possibilita colocar o elemento de envenenamento do alvo de gelo. Você pode usar o bow que quiser e alterar para o tipo de tiro que achar melhor. Veja dicas no final do tutorial. Em items.xml de CTRL F, coloque 8858 e vá até o Elethriel's Bow e deixe da seguinte forma: O attack, range e nome você poe a seu gosto. Em weapons.xml de CTRL F, coloque 8858 e vá até o Elethriel's Bow e deixe da seguinte forma: O level você poe a seu gosto. Em weapons/scripts crie um arquivo magicbow.lua e coloque isso dentro: Guia: setCombatParam(xCombat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) Tipo de dano que causará no alvo (você pode alterar para fogo, terra, etc). local condition = createConditionObject(CONDITION_FREEZING) Tipo de efeito que ficará no alvo (você pode alterar para fogo, terra, etc). addDamageCondition(condition, 100, 2000, -20) O alvo vai sofrer com o dano de 20 hit points a cada 2000 milissegundos, você pode notar outras duas linhas como essa de 10 e 5, os danos vão abaixando gradativamente, de 20 passa para 10 a cada 1000 milissegundos e 5 a cada 1000 milissegundos. Tipos de conditions, shottypes e como calcular formulas você pode encontrar variados tutoriais e aulas aqui no fórum mesmo. Isso é tudo, pessoal. Depois desses três passinhos simples, estará tudo pronto! Dicas: Ideias úteis: Funcionamento:
  49. 7 points
    LeoTK

    Cliente NTO Under Full Sprites by Phsilva!

    Salve galera meu amigo phsilva pediu para eu postar o cliente do servidor dele o NTO Under e vou confessar que o cliente dele ta muito top tem muita coisa boa o cliente esta tão completo que poderia fazer um servidor baseado nesse cliente espero que vocês curtam e ajude os projetos de nto que estão por ai eu com certeza vou usar no meu bom vamos lá Eu não vou postar prints para não estragar a surpresa kkk NTO UNDER-NTO ACADEMY.zip SCAN DO CLIENTE
  50. 7 points
    DdJs

    Fury's Dungeon | 10.98

    Fury's Dungeon Version: 10.98 Download: Type: .Rar Size: 84KB Position: [X: 1027 Y: 1011 Z: 10] File password: tibiaking Scan: Images:
This leaderboard is set to Sao Paulo/GMT-03:00

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...