Jump to content
Close

Leaderboard


Popular Content

Showing content with the highest reputation since 10/18/19 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. 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.
  3. 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
  4. 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.
  5. 6 points
    vyctor17

    [Show-Off] Vyctor17

    Oi Tk, faz um tempo que eu postei alguns módulos que eu fiz, para o OTclient, agora vou mostrar um pouco de como eles foram implementados em um projeto de teste. vou fazer um breve explicação sobre o o funcionamento e depois colocarei um GIF ou Video mostrando in-game. Raridade em monstros e items. Monstros: a raridade em monstros aumenta seu poder de ataque e vida baseado na raridade. Para monstros existem 4 Tiers de raridade, Comum, Épico, Lendário e Único um monstro com raridade acima de comum sempre protegendo um bau com recompensas. Items: Os items tem variação de raridade baseado em um encantamento obtido via Gemas, Essas raridades são dividas em 5 Tiers de raridade, Comum, Magico, Épico, Lendário e Único. a imagem não contem item e monstros únicos Gemas de encantamento. As gemas de encantamento melhoram um item e só podem ser utilizadas uma vez por item, existem duas gemas uma pode dar de um a três atributos novos ao item e outra de um a seis, a partir do numero de atributos novos gerados no item é definido sua raridade. As gemas podem ser obtidas através de mineração ou em baus de recompensa. Baus de recompensa. São gerados junto a monstros de raridade acima de comum dependo de qual bau o monstro protege mais forte ele é, exemplo um monstro épico protegendo um bau de ouro é mais forte que um épico protegendo um bau normal. Para abrir o bau você terá que fazer o Lockpick no bau. Wasp lendária protegendo bau da fortuna. Pescaria. Nada de muito explicativo só uma pesca comum, para obter peixes para Cooking ou para Alquimia. Lockpick. Nada de muito novo também. Montaria Nada muito diferente também, só existem três pontos diferentes da montaria no meu server para o do global que são, as montarias tem vida e se ela "morrer" você é desmontado, as montarias em quanto montado te libera magias, a montaria tem um slot próprio para poder ser equipada. Magias e inventario. Todas classes podem usar qualquer magia mas as magias são vinculadas as items, então para ter a magia liberada a pessoa tem que estar com o item equipado para aumentar a quantidade magias criei mais dois slots no inventario um slot para montaria e mais um anel. Vou ficar devendo falar sobre o craft e a alquimia, pois ainda estou trabalhando neles. deixar um agradecimento especial a galera do discord do TK que me ajudou com ideias e me guiando para melhorar sistemas existentes . Qualquer duvida ou sugestão para os sistemas acima ou para qualquer outro tipo de sistema que você acha que poderia ficar legal em conjunto com esses sistemas ficarei ligado nos comentários desse tópico. Obrigado pela atenção. Bonus:
  6. 5 points
    ITALOx

    {Evento} System Bomberman

    Salve Tibiaking. Hoje trago um evento bomberman Ele é bem simples e para poketibia, estou postando pq o mesmo que comprou o sistema para DBO e o desenvolvedor deu pra ele de poketibia... então ele autorizou postar aqui. então vou deixar o download ai pra vocês usar :D Explicação de algumas coisas: primeiro de tudo. o sistema não é do meu "gosto" e eu não sei como posso ajudar a configurar. se você entende um pouco de lua não vai precisar.. aos que não entende ver se alguém possa te ajudar aqui. :D Download: Bombermon.rar Scan: https://www.virustotal.com/gui/file/834e6b0fcd7d05c1e8eef9ce9d01033a68dd6a8a5bbbb63e88ba993b2410eb63/detection Bom uso para todos! Créditos: Marshmello - por desenvolver Ivisson - Comprador e autor do evento. Eu por postar aqui. Vídeo de demonstração: Obs: creio que não é o mesmo que o cara que fez isso. possa ser diferente. não sei :D
  7. 4 points
    Site: https://www.baiaksuper.com/ Crie sua conta aqui: https://www.baiaksuper.com/?subtopic=createaccount Introdução Baiak Super Queridos jogadores, sejam todos bem-vindos ao Baiak Super! Esta será a nossa primeira temporada e estamos bastante animados para nos encontrarmos com vocês. Sintam-se à vontade para sugerir algo que adorariam ver no Baiak Super, estamos respondendo todos e todas em nosso Facebook: https://fb.me/baiaksuper.Confira abaixo alguns sistemas disponíveis no Baiak Super..• Anti Rollback • Guild Level • Castle 24h • Cast System • Emote Spells • War System • Push Cruzado • Critical • Dodge • Exclusive Area • Sistema de Raids (Bosses) • Auto Loot • Daily Monster • Novo Sistema de Trainers • Sistema de Loteria • E muito mais.. Informações do Servidor • Experience: 350x (Stages) | Magic: 7x | Skill: 20x | Loot: 5x | Spawn: 1x | Protection Level: 100Eai, animado para jogar o servidor com seus amigos? Conte para a gente! A inauguração será no dia 8 de Novembro de 2019 (08/11/2019) às 16:00. Conto com sua presença; Que nos encontremos logo.Um forte abraço,Baiak Super Team
  8. 4 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:
  9. 4 points
    Apenas um exemplo, podendo usar este modelo com wieldPosition para verificar se o item é capacete, armadura, bota, calça, anel ou amuleto, ou usar weaponType para verificar se o item é sword, axe, club, distance, shield, wands, rods ou munição. local accepted_items = {2160} local function isItemAccepted(itemId) local item = getItemInfo(itemId) if isInArray(accepted_items, itemId) then return true elseif item.wieldPosition == 1 or item.wieldPosition == 2 or item.wieldPosition == 4 or item.wieldPosition == 7 or item.wieldPosition == 8 or item.wieldPosition == 9 then -- capacete, armadura, bota, calça, anel, amuleto return true elseif item.weaponType > 0 then -- sword, axe, club, distance , shield, wands, rods, ammunition return true end return false end E lembrando que os valores de wieldPosition são: CONST_SLOT_HEAD = 1 CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 Estou postando isso porque precisei e não encontrei aqui.
  10. 3 points
    Eyeless

    Mapa de Rookgaard completo - 8.6

    Mapa de Rookgaard - 8.6: -Todas as hunts originais + quests; -O mapa acompanha a pasta de NPC's com seus respectivos scripts; -"The Oracle" não está no mapa mas está presente na pasta de NPC's, porém o mapa não acompanha as áreas das vocações pós-seleção, apenas a ilha de Rookgaard; -A área premimum / P.Z. de Rookgaard está desativada, permitindo qualquer jogador sem P.A. acessar a área, portanto para ativar a P.Z. basta editar no R.M.E. Em breve será postado na seção de servidores um OT completo e configurado em TFS (TheForgottenServer) com este mapa + site. Localização do templo: X=32097 / Y=32219 / Z=7 Imagens: Scan: https://www.virustotal.com/gui/file/a08c6b8930bc2f6f2218f50fe5812580de6c5fe20cce20b65beb44826d933819/detection Download (9.2 MB): 4shared: https://www.4shared.com/zip/Cfbv0l45iq/Rookgaard_86.html? Link do próprio post/fórum: Rookgaard 8.6.zip
  11. 3 points
    Pifafa

    Tibinha Yurtos Baiak Hard [8.60]

    Olá a todos, hoje trago para vocês o servidor novo: www.tibinha.com Pequeno servidor com bastante coisas pra fazer! Host-BR www.tibinha.com Temos como mapas, Roshamuul, Catacumbas e em Breve Livraria ( 8.60 adaptado) Se está a procura de um OT serio e bacana de se jogar aqui está. Pode ser jogado com client normal usando todos os bots do 8.60. Servidor é Free, tudo pode dentro dele, mas é necessário dedicação! Sinta-se a vontade para jogar a maquina que hospeda esse pequeno servidor está paga por 1 ano e 7 meses. Algumas Fotos! Transição de telas e etc com efeitos!
  12. 3 points
    Nutopia 10.98 Créditos: Nugo Download: Nutopia v3.rar Scan Versão antiga:
  13. 3 points
    Lyu

    ANSWERED Guild Bonus

    Tente isso, fiz aqui rapidinho mas não testei (acredito que funcione como você espera) data/movements/scripts/guildexp.lua if not guildExperienceBonus then guildExperienceBonus = 0 -- default value; no guild end function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local guild = player:getGuild() if guild then guildExperienceBonus = guild:getId() player:sendTextMessage(MESSAGE_INFO_DESCR, 'Sua guild agora possui o bônus em experiência.') player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) end return true end data/movements/movements.xml <movevent event="StepIn" actionid="33462" script="guildexp.lua" /> data/events/scripts/player.lua --[[ Atenção, procure a função Player:onGainExperience(source, exp, rawExp) Adicione o código abaixo antes do último return exp ]] local guild = self:getGuild() if guild and guild:getId() == guildExperienceBonus then exp = exp * 1.2 -- 20% bonus end
  14. 3 points
    Vodkart

    ANSWERED Soft e Firewalker Boots.

    para que usar 2 códigos se pode fazer somente 1? usa assim: nome do seu script.lua local ret = { [10021] = {id = 6132, price = 10000, effect = CONST_ME_FIREWORK_BLUE}, [10022] = {id = 9933, price = 20000, effect = CONST_ME_FIREWORK_RED} } function onUse(cid, item, fromPosition, itemEx, toPosition) local t = ret[item.itemid] if not t then return true elseif not doPlayerRemoveMoney(cid, t.price) then doPlayerSendCancel(cid, "You need "..t.price.." golds.") return true end local pos = getThingPos(cid) doSendMagicEffect(pos, t.effect) doTransformItem(item.uid, t.id) return true end tag: <action itemid="10021;10022" event="script" value="nome do seu script.lua"/> ---------------------- OBS: não dá para ver o vídeo.
  15. 3 points
    Yinz

    ANSWERED Botão para Whatsapp

    CSS .zaptable { position: absolute; margin-left: 60%; text-align: left; background: #01010185; border: 2px solid #8595bb; padding: 9px 8px 6px 47px; border-radius: 0 0 10px 10px; color: #fff; margin-top: -2px; font: 400 9pt Verdana, Arial, Times New Roman, sans-serif; box-shadow: 6px 6px 50px 2px #23d100; z-index: 10000; transition: all 600ms ease-out } .zaptable:hover { box-shadow: 2px 2px 18px 1px #03ff0d; border: 2px solid #03ff0d; background: #343f58; transition: all 500ms ease-out; z-index: 10000; cursor: pointer } .zaptable img { position: absolute; margin-left: -47px; margin-top: -8px; width: 43px } .zaptable small { transition: all 500ms ease-out; display: none } .zaptable:hover small { transition: all 500ms ease-out; display: block } DIV <a href="https://chat.whatsapp.com/FFd7zZAdq5KHt7x6qd4Dr9" target="_blank"> <div class="zaptable"> <div class="zapbox"> <img src="./layouts/tibiacom/images/themeboxes/whats.png"><strong>Whatsapp Group: </strong>Nome do Servidor<br> <strong>Limit of members </strong> 200 <small style="color: #00c51d;text-shadow: 1px 1px black;text-align:center;">Click here to enter!</small> </div> </div> </a>
  16. 3 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+ ====================================================================================
  17. 3 points
    local corpse = Tile(target:getPosition()):getTopDownItem() if not corpse or not corpse:isContainer() then return false end if corpse:getType():isCorpse() and corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == player:getId() then return true end
  18. 2 points
    Os 3 estão anexados
  19. 2 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.
  20. 2 points
    DdJs

    Winterland | 10.98

    Winterland Version: 10.98 Winterland.rar [Scan] Type: .RAR Size: 38KB Position(s): [X: 1020 Y: 1035 Z: 7] File password: tibiaking Images:
  21. 2 points
    movie

    Jail System & Talkaction - TFS 1.3

    Tentarei criar o seguinte comando então: /jail nome,tempo /unjail nome Outra coisa, o PVP será aberto na prisão? Fiz aqui rapidinho sendo que a prisão não é PVP. Em talkactions, crie um arquivo lua com o nome jail.lua local posPrison = Position(x,y,z) function onSay(player, words, param) if not player:getGroup():getAccess() then return true end if player:getAccountType() < ACCOUNT_TYPE_GOD then return false end local split = param:split(",") local preso = (split[1]) local tempo = (split[2]) tempo = tempo * 60 * 24 if not preso then player:sendCancelMessage("A player with that name is not online.") return false end if not tempo then player:sendCancelMessage("Insufficient parameters.") return false end if preso:getStorageValue(41234) > os.time() then player:sendCancelMessage("The player ".. preso .." is already arrested.") return false end if preso and tempo then preso:setStorageValue(41234, (tempo) + os.time()) preso:getPosition():sendMagicEffect(11) preso:sendTextMessage(MESSAGE_STATUS_DEFAULT, "You were arrested until ".. tempo .." days.") preso:teleportTo(posPrison) posPrison:sendMagicEffect(11) else player:sendCancelMessage("You need to inform the player and the time (in days) he will be stuck.") end return true end Em talkactions, crie um arquivo lua com o nome unjail.lua function onSay(player, words, param) if not player:getGroup():getAccess() then return true end if player:getAccountType() < ACCOUNT_TYPE_GOD then return false end local targetPlayer = Player(param) if targetPlayer == nil then return false end if not targetPlayer then player:sendCancelMessage("Insufficient parameters.") return false end if targetPlayer:getStorageValue(41234) <= os.time() then player:sendCancelMessage("The player ".. targetPlayer .." is already free.") return false end local town = targetPlayer:getTown():getTemplePosition() if targetPlayer then targetPlayer:setStorageValue(41234, 0) targetPlayer:getPosition():sendMagicEffect(11) targetPlayer:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Congratulations ".. targetPlayer ..", now you are free.") targetPlayer:teleportTo(town) else player:sendCancelMessage("The player is offline.") end return true end Em talkactions.xml adicione as seguintes tags <talkaction words="/jail" separator=" " script="jail.lua" /> <talkaction words="/unjail" script="unjail.lua" /> Agora em creaturescript, crie um arquivo chamado unjail.lua function onLogin(player) player:registerEvent("unjailLogin") player:registerEvent("unjailThink") local town = player:getTown():getTemplePosition() if player:getStorageValue(41234) > 0 then player:teleportTo(town) player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Congratulations ".. player ..", now you are free.") player:getPosition():sendMagicEffect(11) end end function OnThink(creature, interval) local player = creature:getPlayer() local town = player:getTown():getTemplePosition() if player:getStorageValue(41234) > 0 then player:teleportTo(town) player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Congratulations ".. player ..", now you are free.") player:getPosition():sendMagicEffect(11) end end Em creaturescript.xml adicione as seguintes tags <event type="login" name="unjailLogin" script="unjail_creature.lua"/> <event type="think" name="unjailThink" interval="60" script="unjail_creature.lua"/> Não é necessário registrar no login.lua Qualquer erro me avisa aqui que eu tento arrumar pra você.
  22. 2 points
    Todo mundo que sabe jogar cs, cria coisa boa no mundo de Tibia, se tá com o Lyuzinhuh, sai coisa boa. Sucesso!
  23. 2 points
    http://theforgottentibia.servegame.com:8080/ LANÇAMENTO ÀS 8h DA NOITE DESSA SEXTA-FEIRA! Mas o test server já ta rolando, dá uma olhada no site! O que faz ele ser diferente do Tibia / The Forgotten Server? Não tem vocações Todo mundo começa como um simples ser-humano com pontos pra serem distribuidos entre os skills Não precisa treinar skills Cada level que você passa você recebe pontos pra serem distribuidos entre os skills. Quanto maior o seu level, menos pontos você ganha. essa gif não é atual Todos clubs, sword e axes tem dano baseado no skill Strenght Armas corpo-a-corpo e armas à distância dão hit crítico (vê no site seção sobre Critical Hit!) Você pode usar duas armas ao mesmo tempo A velocidade de ataque vai dobrar (fixar em 200%) mas o ataque da arma vai diminuir em 10%. Armas à distância tem o dano baseado em Strenght e/ou Dexterity Armas corpo-a-corpo de duas mãos podem causar sangramento Você não precisa abrir os monstros enquanto caça (talvez nem usar o mouse) Só precisa dar ctrl + click no item que deseja lootear automaticamente, e há também um modo de atacar ao pressionar a barra de espaço. Não precisa recarregar a munição Basta colocar tudo no quiver. O dano máximo das wands e rods pode ser aumentado Quando você avança o skill de intelligence você aumenta o dano máximo da wand. A mesma coisa acontece pra faith e rod. O acesso às spells é baseado apenas nos skills intelligence e faith Não tem requerimento de level ou magic level, você só precisa aumentar o intelligence e faith pra ter novas magias. Para usar runas e ter mais dano com spells e runas é preciso ter mais magic A tela tem 1 sqm a mais Você pode dar um título pro seu char (quando dá look) Se tiver os skills necessários você pode ser um mage, um supporter, um knight ou um ranger. Skills Magic Mais dano com spell, runa e dá mais mana. Vitality Mais vida Strenght Mais dano com armas corpo-a-corpo e armas à distância de duas mãos Defence Aumenta a defesa quando tá usando escudo e quando tá sem também (só com arma) Dexterity Mais velocidade de ataque, velocidade de movimento e dano com armas à distância Intelligence Mais mana e acesso pra magias e runas ofensivas Faith Mais mana e acesso pra magias e runas de suporte Endurance Mais cap e vida O SERVER VAI ABRIR ÀS 20h DESSA SEXTA-FEIRA!!! Mas o test server já ta rolando, checa o site!
  24. 2 points
    Namikaze

    Namikaze Show Off

    Voltei a mexer no RME 😙
  25. 2 points
    Yinz

    Nakjila Layout 1x

    Valeu mat, qualquer parada tô aqui p te ajudar. Gesior, mas da pra adapta-lo pra qualquer AAC.
  26. 2 points
    @MatCollier Eu testei e ta funcionando, tenta desta forma: local item = player:addItem(2086, 1) item:setActionId(1000)
  27. 2 points
    Waypoint teleport system é um dispositivo de teletransporte. O principal objetivo de um waypoint é fornecer viagens rápidas entre as áreas que um jogador descobriu. Esse sistema foi desenvolvido por Oen432. (Apenas traduzi) Demonstração: Instalação Abra data/movements/movements.xml. Adicione XML: <movevent event="StepIn" actionid="4236" script="waypoints.lua" /> Abra data/creaturescripts/creaturescripts.xml. Adicione XML: <event type="ModalWindow" name="WaypointsModal" script="modal_windows.lua"/> Faça o Download de waypoints.rar abaixo, no final do tópico. Copie waypoints.lua para data/movements/scripts/waypoints.lua. Copie modal_windows.lua para data/creaturescripts/scripts/modal_windows.lua. Configuração Todas as configurações estão em - data/movements/scripts/waypoints.lua.WINDOW_ID - ignore.BUTTON_ACCEPT - ignore.BUTTON_CLOSE - ignore.WAYPOINTS_STORAGE - base storage id, mude se já está sendo usado esse (garanta que de WAYPOINTS_STORAGE para WAYPOINTS_STORAGE + Number of waypoints, as storages não estejam sendo utilizadas em outro código).WAYPOINTS - lista de waypoints disponíveisname - nome que será mostrado na lista e quando o waypoint for ativadoposition - posição do piso no mapa, aqui é onde o jogador será teleportado Download waypoints-1_0_0.rar
  28. 2 points
    JulianoZN

    Aumentar campo de visão 0.3.x

    Este é um tutorial mostrando como adicionar mais blocos à janela do OTClient. ( Aumente a tela) em const.h Procure por : #define NETWORKMESSAGE_MAXSIZE Para evitar alguns Bug de renderização em alguns locais do mapa aumente o valor Protocolgame.cpp Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : Procure Por: Substitua por : <><>>>><><><><> Esses 2 ultimo não e obrigatório Procure Por: Substitua por : -----------------------------------------------------------------------protocolgame.cpp FIM------------------------------------------------------------------------------------ Agora em: Map.h Procure Por: Altere os valor do jeito que você quiser o meu coloquei 15 x 15 Substitua por : ----------------------------------------------------------------------Map.h FIM ---------------------------------------------------------------------------------------------- Agora No OTClient : Map.cpp Utilizei: 0.6.6 Procure Por: Substitua por :
  29. 2 points
    ERROR na linha 27 portal2:remove(1) end, 1*60*1000, 26394, 1, posCorpo) Está apenas faltando um () portal2:remove(1) end, (1*60*1000, 26394, 1, posCorpo)
  30. 2 points
    luanluciano93

    ANSWERED Botão para Whatsapp

    Fez o cursinho gratuito de 10 min de HTML e já quer vir aqui tirar dinheiro dos leigos. Chegou a chamar um membro de burro em outro tópico só porque ele escreveu uma palavra em inglês errada. Você deve estar no lugar errado, aqui é um fórum onde o pessoal se ajuda e ninguém ganha nada em troca, então se não quer ajudar não atrapalhe. Já que você é tão gênio, produza conteúdo e poste.
  31. 2 points
    Quero deixar claro para quem for baixar! Utilizem o servidor apenas como base de arquivos. O mesmo não possui estrutura para grande quantidade de jogadores. Alguns scripts eu fiz quando estava começando a aprender. O site possui bug de proteção, podendo ser invadido. Então utilizem como base de arquivos também. No mais, é isso. O servidor encontra-se sem bugs. Infelizmente aconteceu esse vazamento, não tem oq fazer. É isso. Agora todos podem ter um servidor de qualidade XD
  32. 2 points
    <?xml version="1.0" encoding="ISO-8859-1"?> <npc name="Caçador de Dragon Lord" script="data/npc/scripts/NpcDragonLord.lua" floorchange="0" walkinterval="0"> <health now="100" max="100"/> <look type="39" head="24" body="25" legs="100" feet="118" addons="0"/> <parameters> <parameter key="message_greet" value="Olá |PLAYERNAME|, você gostaria de fazer uma {missao}?" /> </parameters> </npc> ------ /\ Arquivo NPC XML Para TFS 0.4 ------ \/ Arquivo .Lua do Npc local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local qntdade = 1800 local stoTime = 96494 local stoKill = 96495 local premio = 129385600 --em exp! local msg = string.lower(msg) local left = math.ceil((getPlayerStorageValue(cid, stoTime) - os.time())/(24 * 60 * 60)) --nao mexe! if (msgcontains(msg, 'task') or msgcontains(msg, 'missao')) then if getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) > 0 then local faltaMatar = getPlayerStorageValue(cid, stoKill) local jaMatou = math.abs(getPlayerStorageValue(cid, stoKill)-qntdade) local prazo = os.date("%d/%m/%y %X", getPlayerStorageValue(cid, stoTime)) selfSay("Você ainda não matou os "..qntdade.." dragons lord, atualmente você matou ".. (jaMatou)..", resta "..faltaMatar..". Seu prazo é de até "..prazo..".", cid) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left <= 0 and getPlayerStorageValue(cid, stoKill) ~= -1 then selfSay("Infelismente você não matou as "..qntdade.." dragons lord a tempo. Se você quiser, você pode tentar fazer denovo a missao.", cid) setPlayerStorageValue(cid, stoTime, -1) setPlayerStorageValue(cid, stoKill, -1) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) == -1 then local prazo = os.date("%d/%m/%y %X", getPlayerStorageValue(cid, stoTime)) selfSay("Você tem que esperar pelo menos 1 semana para poder pegar essa tarefa denovo. O prazo de acaba dia ".. prazo..".", cid) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) == 0 then selfSay("Obrigado! você matou os "..qntdade.." dragons lord em menos de 1 semana. Aqui esta sua recompensa! Lembre-se que você pode fazer esta task quantas vezes quiser,desde que tenha concluído 1 semana contado a partir do dia de inicio.", cid) doPlayerAddExp(cid, premio) --premio setPlayerStorageValue(cid, stoKill, -1) talkState[talkUser] = 0 return true else if getPlayerStorageValue(cid, stoTime) ~= -1 and getPlayerStorageValue(cid, stoKill) == -1 then setPlayerStorageValue(cid, stoTime, -1) --soh pra evitar problemas... end selfSay("Olá! Eu sou caçador de dragons lord. Você quer me ajudar a matar dragons lord?", cid) talkState[talkUser] = 1 end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then selfSay("Ótimo! Você precisa matar pelo menos "..qntdade.." Dragons Lord em um prazo de 1 semana para eu te dar a recompensa. Aceita?", cid) talkState[talkUser] = 2 elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 2 then local semana = 7 * 24 * 60 * 60 setPlayerStorageValue(cid, stoTime, os.time()+semana) setPlayerStorageValue(cid, stoKill, qntdade) local sto = getPlayerStorageValue(cid, stoTime) selfSay("Você já pode começar a matar Dragons Lord! Volte aqui quando matar "..qntdade.." dragons lord para ser recompensado. O prazo é até ".. os.date("%d/%m/%y %X", sto) ..".", cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) ---- Adicione Essa Linha no Monstro Dragon Lord Depois do Loot <script> <event name="TaskDragonLord"/> </script>
  33. 2 points
    luanluciano93

    [TFS 1.2] Lucky Clover Amulet

    Resultado sobre o que pesquisei ... Em data/events/scripts/monster.lua tem uma função que pelo que me parece gera o loot do monstro: function Monster:onDropLoot(corpse) if configManager.getNumber(configKeys.RATE_LOOT) == 0 then return end local player = Player(corpse:getCorpseOwner()) local mType = self:getType() if not player or player:getStamina() > 840 then local monsterLoot = mType:getLoot() for i = 1, #monsterLoot do local item = corpse:createLootItem(monsterLoot[i]) if not item then print('[Warning] DropLoot:', 'Could not add loot item to corpse.') end end if player then local text = ("Loot of %s: %s"):format(mType:getNameDescription(), corpse:getContentDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_LOOT, text) end end else local text = ("Loot of %s: nothing (due to low stamina)"):format(mType:getNameDescription()) local party = player:getParty() if party then party:broadcastPartyLoot(text) else player:sendTextMessage(MESSAGE_LOOT, text) end end end Existe um parte nele que usa a função corpse:createLootItem(monsterLoot), ou seja a função createLootItem que esta em data/lib/core/container.lua: function Container.createLootItem(self, item) if self:getEmptySlots() == 0 then return true end local itemCount = 0 local randvalue = getLootRandom() if randvalue < item.chance then if ItemType(item.itemId):isStackable() then itemCount = randvalue % item.maxCount + 1 else itemCount = 1 end end if itemCount > 0 then local tmpItem = self:addItem(item.itemId, math.min(itemCount, 100)) if not tmpItem then return false end if tmpItem:isContainer() then for i = 1, #item.childLoot do if not tmpItem:createLootItem(item.childLoot[i]) then tmpItem:remove() return false end end end if item.subType ~= -1 then tmpItem:setAttribute(ITEM_ATTRIBUTE_CHARGES, item.subType) end if item.actionId ~= -1 then tmpItem:setActionId(item.actionId) end if item.text and item.text ~= "" then tmpItem:setText(item.text) end end return true end Você poderia usar esta linha: if randvalue < item.chance then Para aumentar a chance do item se tiver com o uso do amuleto.
  34. 2 points
    @362501 ao invés de fazer um comentário desse tipo, tente conhecer o servidor ao menos, ler com mais atenção as informações do game. Particularmente não gosto de tibia e nunca joguei(sou o famoso Tibia Nutela, hahaha, sempre fui dos derivados), mas todo e qualquer game precisa ser mantido online. Caso não esteja satisfeito, tente conversar com os administradores do game, tenho certeza que eles gostariam de ouvir sua opinião como player para desenvolver um servidor cada vez melhor. Dê uma chance ao servidor, espere uma resposta do autor do tópico sobre esse assunto e veja como funciona o premium account, talvez não seja abusivo como você pensa ser. @Tópico: Parabéns e boa sorte com o servidor!
  35. 2 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 \/
  36. 1 point
  37. 1 point
    WooX

    { Show Off } E-Baiak RPG

    Caramba, o mapa parece muito bom, ta de parabéns.
  38. 1 point
    Lyu

    [Procura-se Jobs]Lyu Freelancer (LUA, C++)

    Visualizar Anúncio Lyu Freelancer (LUA, C++) Sobre mim : Salve TK, me chamo Moisés e sou conhecido como Lyu. Estudo programação há mais ou menos 5 anos (Autodidata) e tenho referências de donos dos maiores servidores da atualidade. Costumo trabalhar bastante com protocolo 8.60 (tfs 0.3.7 até 1.3) mas também faço serviços para protocolos mais atuais. Como demonstração, irei deixar um vídeo exclusivo do melhor Bomberman (desenvolvido por mim e @Danyel Varejao). Se tem algo que eu sou focado, é em manter a organização dos meus códigos. Como exemplo, irei deixar a configuração do meu Bomberman abaixo.. Bomberman = { name = 'Bomberman', days = { [0] = {'10:00', '22:00'}, [1] = {'10:00', '22:00'}, [2] = {'23:50', '23:57'}, [3] = {'10:00', '22:00'}, [4] = {'10:00', '22:00'}, [5] = {'10:00', '22:00'}, [6] = {'04:21', '22:00'} }, antimc = false, joinpos = {x = 999, y = 1000, z = 7}, time = {warmup = 10, finish = 5, left = 3600, protection = 5, expiredrops = 10, bomb = {detonate = 3, kickspeed = 50}}, min = {level = 80, players = 1}, explosiveitems = {10744}, bombid = 9468, drops = { ['speed'] = { max = 900, description = 'Aumenta a sua velocidade.', [2195] = {upgrade = 50, chance = 45}, [6132] = {upgrade = 75, chance = 37} }, ['range'] = { max = 4, description = 'Aumenta o tamanho da explosão de suas bombas.', [8304] = {upgrade = 1, chance = 45} }, ['bomb'] = { max = 4, description = 'Aumenta a quantidade de bombas que você pode plantar.', [10503] = {upgrade = 1, chance = 45} }, ['special'] = { description = 'Faz suas explosões atravessarem todos os objetos explosíveis.', [10013] = {duration = 10, chance = 10} }, ['life'] = { max = 4, description = 'Adiciona vida ao seu personagem.', [11393] = {upgrade = 1, chance = 10} }, ['shield'] = { description = 'Cria um campo de proteção contra qualquer tipo de explosão.', [8905] = {duration = 5, chance = 15} }, ['kick'] = { description = 'Esta bota lhe permite chutar qualquer tipo de explosivo sem ferir seus pés.', [9932] = {chance = 7} } }, spawns = { [1] = {x = 1177, y = 1031, z = 7}, [2] = {x = 1167, y = 1031, z = 7}, [3] = {x = 1157, y = 1031, z = 7}, [4] = {x = 1177, y = 1021, z = 7}, [5] = {x = 1167, y = 1021, z = 7}, [6] = {x = 1157, y = 1021, z = 7}, [7] = {x = 1177, y = 1011, z = 7}, [8] = {x = 1167, y = 1011, z = 7}, [9] = {x = 1157, y = 1011, z = 7} }, lifes = { [1] = {square = COLOR_DARKGREY, outfit = {lookHead = 0, lookBody = 95, lookLegs = 95, lookFeet = 0}}, [2] = {square = COLOR_RED, outfit = {lookHead = 0, lookBody = 113, lookLegs = 113, lookFeet = 0}}, [3] = {square = COLOR_YELLOW, outfit = {lookHead = 0, lookBody = 79, lookLegs = 79, lookFeet = 0}}, [4] = {square = COLOR_LIGHTGREEN, outfit = {lookHead = 0, lookBody = 82, lookLegs = 82, lookFeet = 0}} }, rewards = {{2160, 50}, {2352, 1}}, registers = {'BMThrow', 'BMDirection', 'BMPush'} } Entre em contato comigo pelo Discord: Lyuzera#8767 Anunciante Lyu Date 06/03/2019 Preço Categoria Procura-se Jobs  
  39. 1 point
    Reporte qualquer bug encontrado. - Mudanças: * opcode adicionado * Monstros andando em cima de corpos * War system arrumado * Anti-divulgação melhorado * Cast system arrumado * Crash bugs arrumados * Adicionado exhaust ao comprar/vender items * Account manager com opção para cidades * /ghost stacking arrumado * !disband arrumado * Erros no linux arrumado * Aleta som arrumado * Bug nos rings arrumado * Adicionado suporte para Visual Studio * Remover battle ao entrar em PZ * Não pode jogar lixo em casas * Salt removido - Downloads: * Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32.rar * Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64.rar * Requisitos: Microsoft Visual C++ 2010 Redistributable Package (x32)/Microsoft Visual C++ 2010 Redistributable Package (x64) * Source + datapack: https://github.com/Fir3element/3777/archive/master.zip - Scans: * Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/ * Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/ * Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
  40. 1 point
    Joaovettor

    ANSWERED [TFS1.2] Novo exeta res

    local combat = Combat() combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) combat:setArea(createCombatArea(AREA_SQUARE1X1)) function onTargetCreature(creature, target) if target:getMaxHealth() > ((30*target:getMaxHealth())/100) then --- Vai checar se a vida do monstro é maior que 30% return doChallengeCreature(creature, target) end end combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(creature, variant) return combat:execute(creature, variant) end Tente assim
  41. 1 point
    underewarr

    Pago - Edição Client 11

    me adicione discord eu te ensino. underewar#0705
  42. 1 point
    Excelente história e post parabéns!!!
  43. 1 point
    Eh pq ta sem o arquivo Mapa-Spawns.otbm Mapa-houses.otbm... Estou te ajudando e vc nao me da rep+
  44. 1 point
    Matk

    Evento Safe Zone TFS 1.x+

    Ideia bem criativa! Ficou legal o evento, parabéns!
  45. 1 point
    underewarr

    [TFS 1.2] Lucky Clover Amulet

    Em data/events/scripts/player.lua, procure essa função: function Player:onGainExperience(sourc e, exp, rawExp) Agora ache o fim dela: return exp end end Movement script Não testei assim que chegar em casa eu testo vlw.
  46. 1 point
    Rayo

    [Baiak 8.6] Formação de Equipe

    Eu mandei uma mensagem no teu privado!
  47. 1 point
    Yinz

    Envy Layout TFS 1x

    Let the world explode. Envy.rar Scan https://www.virustotal.com/pt/file/907d2
  48. 1 point
    xWhiteWolf

    Callbacks de creaturescripts

    Fala galera do TK, hoje eu vim trazer pra vocês uma coisa que se perdeu em todos esses anos de OT e que é uma das coisas mais importantes prum scripter intermediário/avançado. São as explicações dos respectivos callbacks de creaturescripts. Espero que ajude bastante gente Créditos: 90% Zonnebloem (um gringo ai que postou isso das sources) e 10% pra mim por completar oque ele não tinha escrito e arrumado umas coisas que ele escreveu errado. ____________________________ CREATURE EVENTS TIPOS: _________________ TFS 0.2 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="think" function onThink(cid, interval) type="kill" function onKill(cid, target) type="death" function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified) type="preparedeath" function onPrepareDeath(cid, killer) TFS 0.3/0.4 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="think" function onThink(cid, interval) type="kill" function onKill(cid, target, lastHit) type="death" function onDeath(cid, corpse, deathList) type="preparedeath" function onPrepareDeath(cid, deathList) type="statschange" function onStatsChange(cid, attacker, type, combat, value) type="combat" function onCombat(cid, target) type="target" function onTarget(cid, target) type="look" function onLook(cid, thing, position, lookDistance) type="textedit" function onTextEdit(cid, item, newText) type="outfit" function onOutfit(cid, old, current) type="push" function onPush(cid, target) type="follow" function onFollow(cid, target) type="attack" function onAttack(cid, target) type="areacombat" function onAreaCombat(cid, tileItem, tilePosition, isAggressive) type="cast" function onCast(cid, target) type="direction" function onDirection(cid, old, current) type="reportbug" function onReportBug(cid, comment) type="sendmail" function onSendMail(cid, receiver, item, openBox) type="receivemail" function onReceiveMail(cid, sender, item, openBox) type="traderequest" function onTradeRequest(cid, target, item) type="tradeaccept" function onTradeAccept(cid, target, item, targetItem) type="joinchannel" function onJoinChannel(cid, channel, users) type="leavechannel" function onLeaveChannel(cid, channel, users) TFS 1.0 type="login" function onLogin(cid) type="logout" function onLogout(cid) type="think" function onThink(cid, interval) type="preparedeath" function onPrepareDeath(cid, killer) type="death" function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified) type="kill" function onKill(cid, target) type="advance" function onAdvance(cid, skill, oldLevel, newLevel) type="modalwindow" function onModalWindow(cid, modalWindowId, buttonId, choiceId) type="textedit" function onTextEdit(cid, item, text) type="changehealth" function onChangeHealth(cid, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType) type="changemana" function onChangeMana(cid, attacker, manaChange) type="extendedopcode" function onExtendedOpcode(cid, opcode, buffer) ____________________________ INFORMAÇÃO SOBRE OS TIPOS: _________________ antes de tudo tenha em mente que os tipos só serão executados no player ou monstro em que eles forem registrados; Registrar no login.lua vai fazer com que ele seja executado em todos os players assim q eles logarem. Se deve ser executado somente por alguns monstros, registre no monstro em questão no xml dele. login Quando é executada: - Quando um player loga Parametros: - cid = creatureid do player que logou quando está return false: - nada registra creature event: - não ~~~~ logout Quando é executada: - quando um player desloga pelo logout do próprio cliente. Não acontece se o player morrer, for disconectado ou xlogs Parametros: - cid = creatureid do player que deslogou quando está return false: - Player não vai conseguir deslogar registra creature event: - não ~~~~ advance Quando é executado: - Toda vez que um player avançar de level, magic level ou qualquer outra skill Parametros: - cid = creature id do player que avançou - skill = tipo da skill que o player avançou vide tabela abaixo (note que vc pode utilizar tanto o nome SKILL_FIST quanto o numero 0) SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 - oldlevel = level antes do player avançar - newlevel = o novo level após avançar quando está return false: - ele não vai avançar o nível Registra creature event: - sim (isso significa que vc pode colocar pra ele registrar um outro creatureevent dentro desse script após alcançar X level) ~~~~ think Quando é executada: - Pelo tempo Parametros: - cid = creatureid do monstro ou player - interval = intervalo entre cada checagem OU em que intervalo deve ser executada, 500 é 0.5 segundo. quando está return false: - nada Registra creature event: - sim ~~~~ kill Quando é executada: - Ao matar um player/monstro Parametros: - cid = creatureid do player ou do monstro que mata - target = creatureid do player ou monstro que é morto quando está return false: - O target não morrerá, ele ficará com 0 de vida e a barra sumirá para os inimigos.Ele precisará se curar para que sua barra de vida volte registra creature event: -sim ~~~~ death Quando é executada: - Quando um player ou monstro morrem Parametros: - cid = creatureid do player monstro que morre - corpse = corpo do monstro ou player que morre exemplo de adicionando 3 crystal coins no corpo que morreu. doAddContainerItem(corpse.uid, 2160, 3) - deathlist = uma table com o nome de todos que mataram, sendo na ordem o deathlist[1] oque deu o ultimo hit e o deathlist[2] sendo oque deu mais dano. quando está return false: - O corpo não será criado Registra creature event: - Sim ~~~~ preparedeath Quando é executada: - Quando um monstro ou player está prestes a morrer (pode ser usada em scripts que devem ser executados no segundo antes do player morrer) Parameters: - cid = creatureid do player ou monstro que está prestes a morrer - deathlist = uma tabela com o nome dos atacantes quando está return false: - o player ou monstro não irá morrer (mesma história do kill) Registra creature event: - Sim ~~~~ statschange quando é executada: -Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana) Parametros: - cid = creatureid do player ou monstro q ganha/perde vida/mana - attacker = creatureid do player ou monstro que causou a mudança na health/mana - type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo: STATSCHANGE_HEALTHGAIN = 0 STATSCHANGE_HEALTHLOSS = 1 STATSCHANGE_MANAGAIN = 2 STATSCHANGE_MANALOSS = 3 - combat = o tipo de combat que causou a alteração, sendo esses tipos: COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 - value = valor da mudança quando está return false: - O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas Registra creature event: - Sim ~~~~ combat Quando é executado: - Quando um player ou monstro starta um combat (qualquer tipo de ataque) Parametros: - cid = creatureid do player ou monstro que usa o combat - target = creatureid do player ou monstro que sofre o combat quando está return false: - O player ou monstro não será capaz de levar ataques, isso também inclui que ele não poderá dar target em alguém/algo . Isso pode ser usado para criar monstros que não possam levar ataques ou fazer players ficarem imunes a dano por um certo tempo. Registra creature event: - Sim _______________________________________________________________________________________________ Agora começa a graça da coisa: ~~~~ target Quando é executado: - Quando um player ou monstro dá target em um player/mostro (follow/attack) Parametros: - cid = creatureid do player ou monstro que dá o target - target = creatureid do player ou monstro que é targeted quando está return false: - O player/monstro não poderá dar target.. alguns testes com monstros revelaram que o monstro ainda consegue te atacar então acho que essa função só serve para player Registra creature event: - Sim ~~~~ look Quando é executado: - Quando um player dá look em algo Parametros: - cid = creatureid do player que dá o look - thing = objeto/player/monstro que o player dá look - position = não tenho certeza se é a posição do objeto que é dado look ou se é a minha posição. - lookDistance = distancia entre esse objeto e eu. quando está return false: - Não aparece a mensagem de look na tela Registra creature event: - Sim ~~~~ textedit Quando é executado: - Quando um player edita um texto em algum item writeable (livros por exemplos) Parametros: - cid = creatureid do player - item = item que está sendo modificiado - newText = texto novo que foi escrito quando está return false: - O player não conseguirá editar o texto, quando ele tentar dar ok o item continuará com o mesmo texto.. Pode ser usado numa quest com muito RPG pra checar se a senha que o player escreveu no livro é a correta. Registra creature event: - sim ~~~~ outfit Quando é executado: - Quando um player ou monstro muda de outfit Parametros: - cid = creatureid do player ou monstro que muda de outfit - old = outfit antiga - current = outfit atual (após ter trocado) quando está return false: - a troca de outfit será cancelada e o player/monstro voltará para a antiga outfit Registra creature event: - sim ~~~~ push Quando é executado: - Quando um player tenta empurrar um monstro ou um player Parametros: - cid = creatureid do player que empurrar - target = creatureid do player ou monstro que é empurrado quando está return false: - O player não conseguirá empurrar (arrastar o oponente com o mouse). É bastante util em eventos para que eles não possam ficar se empurrando Registra creature event: - sim ~~~~ follow Quando é executado: - Quando um player dá follow em algum monstro ou player ou até num NPC Parametros: - cid = creatureid do player que dá o follow - target = creatureid da criatura (monstro/npc/player) que é seguida quando está return false: - O follow não irá ocorrer Registra creature event: - Sim ~~~~ attack Quando é executado: - Quando um player ou monstro ataca (melee, spells não contam) Parametros: - cid = creatureid do player ou monstro que ataca - target = creatureid do player ou monstrp que sofre o ataque quando está return false: - O player/monstro não irá atacar, é bastante útil em sistemas que vc queira deixar uma certa criatura imune a ataques mas que ela ainda possa morrer pra spells Registra creature event: - Sim ~~~~ areacombat Quando é executado: - Quando um player ou monstro starta um combat em área (usa uma spell ou dano em área) Parametros: - cid = creatureid do player ou monstro que usa o combat - tileItem = player que está dentro da area - tilePosition = posição do player que está dentro da area - isAggressive = se esse combat em área é agressivo ou não, lembre-se que magias como exura gran mas res fazem combat em área mas esse combat não é agressivo porque ela cura em área quando está return false: - o combat é cancelado Registra creature event: - Sim ~~~~ cast Quando é executado: - Quando um player ou monstro solta uma magia Parametros: - cid = creatureid do player ou monstro que usa a magia - target = creatureid do player ou monstro que sofre o dano da magia quando está return false: - a magia não é lançada Registra creature event: - sim ~~~~ direction Quando é executado: - Quando uma criatura (NPC/Player/Monster) muda de direção Parametros: - cid = creatureid do player ou monstro que mudará de direção - old = direção antiga - current = direção atual, após ter mudado, vide tabela abaixo: NORTH = 0EAST = 1 SOUTH = 2 WEST = 3 SOUTHWEST = 4 SOUTHEAST = 5 NORTHWEST = 6 NORTHEAST = 7 atente-se no fato de que não é possível virar pras direções 4,5,6 e 7 mas você utilizá-las num script que cheque a direção entre dois players, daí sim seria possível (como é no caso do exiva) quando está return false: - A criatura não será capaz de mudar de direção Registra creature event: - Sim ~~~~ reportbug Quando é executado: - Quando um player reporta um bug Parametros: - cid = creatureid do player que reportou o bug - comment = comentário que ele adicionou ao reportar quando está return false: - O report será cancelado e não será enviado. Pode ser usado num script avançado de reports onde se o player não tiver escrito nenhum comentário ou tiver escrito determinadas palavras o envio será cancelado (pra evitar spams) Registra creature event: - Sim ~~~~ sendmail Quando é executado: - Quando um player manda uma carta/parcel para outro Parametros: - cid = creatureid do player que mandou a correspondencia - receiver = creatureid do player que irá receber essa correspondencia - item = item que foi enviado (id dele) - openBox = conteúdo (no caso de parcel) quando está return false: - Correspondência não será enviada. É util pra registrar um log de todas as trocas entre players e pegar hackers. Registra creature event: - Sim ~~~~ receivemail Quando é executado: - Quando um player recebe uma carta/parcel de outro Parametros: - cid = creatureid do player que recebou a correspondência - sender = creatureid do player que enviou a correspondência - item = item recebido - openBox = conteúdo da correspondencia (no caso de ser uma parcel) quando está return false: - Ele não receberá a correspondência. Registra creature event: - Sim ~~~~ traderequest Quando é executado: - Quando um player dá trade Parametros: - cid = creatureid do player que deu o trade - target = creatureid do player que ele tentou iniciar uma troca - item = item que foi iniciada a troca (se for uma backpack cheia de coisas dentro esse item será uma table com todos os itens) quando está return false: - A troca não será executada. É útil para scripts de itens vip onde o player não possa trocar determinados itens Registra creature event: - Sim ~~~~ tradeaccept Quando é executado: - Quando um player aceita a troca com outro) Parametros: - cid = creatureid do player que aceitou a troca (você) - target = creatureid do player que aceitou a troca (cara com quem você trocou) - item = items que você deu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens - targetItem = items que você recebeu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens quando está return false: - a troca não será concluída. Registra creature event: - Sim ~~~~ joinchannel Quando é executado: - Quando um player entra num channel (aqueles canais tipo trade/ help chat/ info/ guild/ etc...) Parametros: - cid = creatureid do player que entrou no chat - channel = canal que o player entrou.. vide lista abaixo: CHANNEL_GUILD = 0 CHANNEL_PARTY = 1 CHANNEL_RVR = 3 CHANNEL_HELP = 9 CHANNEL_DEFAULT = 0xFFFE CHANNEL_PRIVATE = 0xFFFF - users = outros usuários do canal. quando está return false: - O player não conseguirá entrar no channel Registra creature event: - Sim OBS: a mesma coisa vale pra função leavechannel, só que o return false o player não conseguirá sair do channel. Espero que isso ajude bastante gente, eu não expliquei os types da versão 1.0 porque é basicamente a mesma coisa e pelos parametros dá pra você ter uma ideia doque é oque. :]
  49. 1 point
    Ivens Pontes

    [AJUDA] Error latestnews.php

    CREATE TABLE IF NOT EXISTS `guild_membership` ( `player_id` int(11) NOT NULL, `guild_id` int(11) NOT NULL, `rank_id` int(11) NOT NULL, `nick` varchar(15) NOT NULL DEFAULT '', PRIMARY KEY (`player_id`), KEY `guild_id` (`guild_id`), KEY `rank_id` (`rank_id`)) ENGINE=InnoDB CREATE TABLE IF NOT EXISTS `announcements` ( `id` int(10) NOT NULL auto_increment, `title` varchar(50) NOT NULL, `text` varchar(255) NOT NULL, `date` varchar(20) NOT NULL, `author` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; ALTER TABLE player_deaths ADD unjustified TINYINT(1) UNSIGNED NOT NULL DEFAULT FALSE alter table `player_deaths` add `killed_by` INT NOT NULL;
  50. 1 point
    function onUse(cid, item, frompos, item2, topos) if not getHouseByPlayerGUID(getPlayerGUID(cid)) then doPlayerSendTextMessage(cid,22,"You still do not have a house, buy a talking '!buyhouse' front of her.") return true end doTeleportThing(cid, getHouseEntry(getHouseByPlayerGUID(getPlayerGUID(cid)))) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end
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...