Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Em 14/01/2021 em 21:30, Endless disse:

Olá meus senhores, tem muita gente que pede serviços em relação a Gerar Outfits Animadas do seu cliente, o que muitos não sabem é que existe esse sistema de Gerar as Outfit animadas gratuitamente na internet e ele foi desenvolvido pelo Gesior.pl (Polones), então todo o crédito deste tutorial em relações a códigos vão para ele.

Primeiro de tudo, o que é esse Sistema de Gerar Outfits Animadas?

Basicamente é 1 Sistema Web que vai ler o teu tibia.spr / tibia.dat e seu items.otb e gerar todas suas outfit do seu cliente em forma de frames e na hora de exibir o sistema utiliza uma script em php que fica responsável por montar 1 gif utilizando esses frames.
O resultado é algo como isto:

Exemplo.gif.9aedc0c14765687d67d83a5ec64e9cd1.gif

Existe 2 formas de utilizar o sistema, eu vou ensinar a mais fácil, para quem quiser vou deixar o link do código fonte e vocês podem simplesmente estar clonando o repositório e fazer suas alterações a vontade. (Sim, ele é open source e.e).

Código Fonte: https://github.com/gesior/open-tibia-library 

Explicando como utilizar o sistema:

1° acesse o link => https://item-images.ots.me/generator/

Você deve visualizar algo como isto: 

1.thumb.png.73462bd42d51640153b884b7254aa0e1.png

Percebam que ele vai pedir os seguintes dados: 
-Client Version:
-Sprite file:
-Dat file:
-Otb file:


Antes de sair adicionando, precisamos configurar nosso cliente para que o sistema consiga reconhecer ele. Abra seu cliente no object builder. Agora vá na área de effects e apague todos os efeitos. Sim apague TODOS, agora vá até Tools->Spriter Otimizer

2.png.4532255b24f988ee1fd85813e60e5c8d.png

Clique em start e você vai ter 1 retorno parecido com isto:

3.png.f206b621ee6025350a650c74f6719846.png

Agora aperta CTRL+SHIFT+S, vamos salvar esse cliente em 1 pasta separada (você só vai usar ele pra esse sistema, então fique tranquilo, você não vai apagar o original). Na hora de salvar deixe desmarcado as 3 opções (Extended, Transparency, Improved Animations).

4.thumb.png.524f90d639e1e0818e5dda48b3a5a820.png

Tendo feito isso, agora vamos voltar para o site. 
Em Client Version você vai digitar a versão de seu cliente. Exemplo: Se for 8.60 digite 860
Em sprite file você vai selecionar o tibia.spr do seu cliente que você exportou (esse sem efeitos)
Em dat file você vai selecionar o tibia.dat do seu cliente que você exportou (esse sem efeitos)
Em otb file você vai selecionar o items.otb do seu servidor.

Agora clique em Load Files. Você deve ter 1 retorno parecido com isto:


5.thumb.png.0cab3a96397aee54e95d95f90e5c8114.png

Agora clique em Generate Imagens e ele vai começar a gerar os frames das suas outfits.

6.png.ae029982f5cb71a8010525d068ce5d99.png

Ao terminar ele vai efetuar sozinho o download das outfits.

7.png.eea87e9e4295897aedeca82130c991b7.png


Agora acesse este repositório no github e baixe os arquivos: https://github.com/gesior/open-tibia-library/tree/master/tools/colored-outfit-images-generator

Tendo feito o download, você vai extrair a pasta outfits.zip que você baixo e extrair a pasta que você clonou o repositório. Ao extrair o arquivo outfits.zip você vai encontrar 1 pasta chamada outfits_anim, dentro dela você deve ter algo como isto:

image.png.4615a2ec0583befee7952088d1c8389e.png

Cada pasta é referente a 1 looktype do seu cliente.
Agora copie a pasta 'outfits_anim' que está dentro da pasta outfits que você extraiu e cole dentro da pasta do repositório que foi clonado. Ficando assim:

8.thumb.png.f9cbfd3eda05385ebc20e069c5408da2.png

Pronto, agora você somente precisa deixar essa pasta em 1 servidor web e utilizar a mesma via requisição. Exemplo:
Se você for exibir uma outfit, você pode exibir da seguinte forma:


<img src="http://seudominio.com/nomedapastaqueestaoosarquivos/animoutfit.php/?id=270">

 

Esse id será o looktype que você deseja. Lembrando que: Você pode colocar 1 script pra puxar a outfit de cada vocação e chamar esse diretório, ele vai exibir a imagem já com o diretório correto.

Sugestão de uso: Para derivados de NTO/DBO e afins, você pode utilizar para exibir as outfits de transformações de cada Personagens, algo como isto:


Exemplo2.thumb.gif.d03462bfabd012c455f11a37c0dce354.gif

 

Outra opção é exibir na lista de Ranking no menu da direita (Normalmente Tibia Classico faz isso)
A criatividade fica por conta de vocês.
 

Créditos:
Gesior.pl por todo o código e disponibilizar para a comunidade em 1 Forum Gringo
A mim por disponibilizar o tutorial para a comunidade.

Excelente tutorial maninho!!

Funcionou perfeitamente, a parte ali do github nem precisei fazer pq meu server tem a pasta outfits no site ai só larguei lá dentro

 

Link para o post
Compartilhar em outros sites
6 horas atrás, vine96 disse:

Excelente tutorial maninho!!

Funcionou perfeitamente, a parte ali do github nem precisei fazer pq meu server tem a pasta outfits no site ai só larguei lá dentro

 


Muito obrigado, fico feliz que tenha conseguido!!

Quem eu sou?
Meu nome é Waliston, mais conhecido como Endless, estudante de Análise e Desenvolvimento de Sistemas, e desenvolvedor da Falcon Games. Atuo no Ramo de OtServer desde 2017, porém desde 2019 venho me especializando em Desenvolvimento Web e Segurança Web..

Meus Projetos:

Falcon Games

Meu Github:

https://github.com/WalistonBelles

Meu Discord:
Endless#5410

Minhas Contribuições atualmente pra Comunidade:

[SHOWOFF] OTClient Showoff Módules
[DESIGN]
 3 FREE Game Ui Design

[TUTORIAL] Instalando MyAAC em sua máquina

[TUTORIAL] Restringindo a Listagem de Diretórios(URL) do Servidor Apache
[TUTORIAL] Proteção contra DDoS utilizando Mod-evasive no Apache

[SISTEMA] Plugin MyAAC Listagem de Items automática
[SISTEMA] Gerador de Outfits Automática para o Site

[SISTEMA] Sistema de Troca de Vocação para MyAAC
[SISTEMA] Plugin MyAAC Auction System
[SISTEMA] Sistema de Exibir Monstros por Level


Algum trabalho meu te ajudou? Quer apoiar meu trabalho? Faça uma doação!!
Picpay: @walistonbelles
Paypal: [email protected]

Link para o post
Compartilhar em outros sites
  • 11 months later...

O meu não deu certo, não sei porque. Se eu jogar na pasta outfits ele da certo, mais não anima.

 

Senhoras e senhores, se alguma resposta lhe ajudou, marque-a como a melhor resposta e de ponto positivo, assim você incentiva quem lhe ajudou a continuar ajudando!!.

Link para o post
Compartilhar em outros sites
  • 1 year later...
  • Moderador

Tem que rodar como localhost para funcionar.
O link atual da ots esta off, o método ainda funciona.

Editado por Underewar (veja o histórico de edições)

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Anderson Sacani
      Estou criando um servidor com base nos scripts de TFS 1.x e voltado ao público da america latina por causa do baixo ping na VPS... Argentina, Bolívia, Brasil, Chile, entre outros, portanto sei que falamos em português e nossos vizinhos em espanhol.
      Todos os sistemas do meu servidor são pensados para terem traduções e venho por meio deste tópico compartilhar à vocês algumas dessas funções:
       
      Antes de qualquer coisa, você precisará adicionar a seguinte variável em alguma biblioteca:
      USER_LANGUAGE = 1022118443  
      Agora que adicionou essa variável em alguma biblioteca, poderá adicionar as seguintes funções na mesma biblioteca, porém a baixo da variável USER_LANGUAGE.
       
      A primeira função serve para retornar qual idioma o player está usando:
      --[[ getLanguage, how to use: player:getLanguage() ]] function Player.getLanguage(self) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return "portuguese" else return "spanish" end else print("getLanguage: Only works on players..") end end Um exemplo de como usar: player:getLanguage()
       
      A segunda função serve para alterar o idioma do player. O ideal é que seja usada na primeira vez em que o player loga no servidor:
      --[[ setLanguage, how to use: player:setLanguage("portuguese") ]] function Player.setLanguage(self, language) local value = 0 if self:isPlayer() then if language == "portuguese" then value = 0 elseif language == "spanish" then value = 1 else print("setLanguage: Only two options available. Choose one of them: 'portuguese' or 'spanish'.") end return self:setStorageValue(USER_LANGUAGE, value) else print("setLanguage: Only works on players..") end end Exemplos de como usar:
      player:setLanguage("portuguese")
      ou
      player:setLanguage("spanish")
       
      A terceira e não menos importante função, serve para mandar uma mensagem de texto ao jogador, porém ele receberá no idioma em que escolheu:
      --[[ sendLanguageTextMessage, how to use: local portugueseMessage = "Ola, tudo bom? Isto aqui é um algoritmo!" local spanishMessage = "Hola todo bien? Esto de aqui es un algoritmo!" player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage,spanishMessage) ]] function Player.sendLanguageTextMessage(self, type, portugueseMessage, spanishMessage) if self:isPlayer() then if self:getStorageValue(USER_LANGUAGE) < 1 then return self:sendTextMessage(type, portugueseMessage) else return self:sendTextMessage(type, spanishMessage) end else print("sendLanguageTextMessage: Only works on players..") end end Um exemplo de como usar:
      player:sendLanguageTextMessage(MESSAGE_EVENT_ADVANCE, portugueseMessage, spanishMessage)
      O primeiro parâmetro é o tipo de mensagem, o segundo parâmetro será a mensagem em português e o terceiro parâmetro será em espanhol.
    • Por danielsort
      A minha poke ball nao esta funcionando como contador aonde consigo ageitar isso?
       
       

    • Por yurikil
      Saudações a todos, venho por meio deste tópico pedir uma ajuda no qual estou tentando fazer a muito tempo. Já vi alguns post aqui mesmo no TK, mas nenhum eu tive êxito. Por isso venho pedir um socorro de como eu consigo aumentar a quantidade de MagicEffects acima de 255 no meu NewClient OTC? Se alguém puder fortalecer ficarei muito grato!!
    • Por Vodkart
      Uma função que ao invés de usar o "cid" para pegar o valor de uma storage, usa o ip do jogador.
       
      baseado neste pedido:
       
       
       
       
      INSTALAÇÃO:
       
       
      Execute essa query:
       
      CREATE TABLE `ip_storages` (         `ip` int NOT NULL default 0,         `key` int NOT NULL default 0,         `value` varchar(255) NOT NULL default 0         )  
      funções para serem adicionadas na lib:
       
      function setIpStorageValue(ip, key, value) local func = db.executeQuery or db.query local query = db.getResult("SELECT `value` FROM `ip_storages` WHERE `key` = "..key.." AND `ip` = "..ip) if query:getID() == -1 then return func("INSERT INTO `ip_storages` (`ip`, `key`, `value`) VALUES ("..ip..", "..key..", "..value..")") end return func("UPDATE `ip_storages` SET `value` = "..value.." WHERE `key` = "..key.." AND `ip` = "..ip) end function getIpStorageValue(ip, key) local ret = db.getResult("SELECT `value` FROM `ip_storages` WHERE `ip` = "..ip.." AND `key` = "..key) if ret:getID() == -1 then return -1 end return ret:getDataInt("value") or ret:getDataString("value") end  
       
       
       
      exemplo de uso:
       
      pegar baú a cada X horas:
       
      function onUse(cid, item, fromPosition, itemEx, toPosition)     local storage, hours = 18000, 24     local ip = getPlayerIp(cid)     local item = 2160     if getIpStorageValue(ip, storage) - os.time() <= 0 then         doPlayerSendTextMessage(cid,22,"Tome seu prêmio.")         setIpStorageValue(ip, storage, os.time()+hours*3600)         doPlayerAddItem(cid, item, 100)          return true     end      return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Espere para pegar um novo item!") end  

      ou só podendo pegar 1x:
       
      function onUse(cid, item, fromPosition, itemEx, toPosition)     local storage, ip = 18000, getPlayerIp(cid)     local item = 2160     if getIpStorageValue(ip, storage) > 1 then     doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"voce ja pegou o item!") return true     end         doPlayerSendTextMessage(cid,22,"Tome seu prêmio.")         setIpStorageValue(ip, storage, 1)         doPlayerAddItem(cid, item, 100)          return true end
       
    • Por Rogex Joyz
      Um script simples (sei que existe outros parecidos/iguais, este funcionou perfeitamente pra tfs 0.4), mas que coloca todo um RPG naquela quest/hunt que você quer montar. No caso uma mystic flame fica ao lado (editável) de um empty coal basin (id: 1485) e após colocar um item (editável) em cima desta coal basin, a mystic flame passa a teleportar para um local pré destinado (Funciona exatamente igual ao de acesso as tumbas de Ankrahmun do global). Sem o item no local correto, ela é apenas uma mystic flame sem destino podendo andar em cima dela sem que nada aconteça. Para voltar, coloque outra mystic flame no destino com o AID 19383 (esta mystic flame faz o player retornar sem sacríficio). Vamos ao script ?
      ?
      créditos: Andu
       
      Em movements.xml adicione estas duas linhas:
       
      <movevent type="StepIn" actionid="19382" event="script" value="flametp.lua" />
      <movevent type="StepIn" actionid="19383" event="script" value="flametp.lua" />
       
      Em movements crie um arquivo lua com o nome flametp e adicione dentro dele: 
       
      function onStepIn(cid, item, position, fromPosition) local tileActionID = 19382 -- actionid inserida na primeira mystic flame (a do sacrifício) local tileActionIDBack = 19383 -- actionid inserida na segunda mystic flame (a de retorno sem sacrifício) local coin = 8978 -- id do item que precisará estar na coal basin para que a mystic flame teleporte o player local teleportTo = {x=12687, y=3426, z=14}-- posição em que o player será teleportado ao fazer o sacrifício local teleportBack = {x=14012, y=33793, z=15}-- posição em que o player irá voltar no momento que passar pela mystic flame sem sacrifício local itemPosition = {x=14012, y=33788, z=15, stackpos=STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE} local getItem = getThingFromPos(itemPosition)-- posição em que o item de sacrifício terá que estar para ativar a primeira mystic flame if isPlayer(cid) == TRUE then if item.itemid == 1397 and item.actionid == tileActionID then if getItem.itemid == coin then doRemoveItem(getItem.uid, 1) doTeleportThing(cid, teleportTo) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) doSendMagicEffect(getThingPos(item.uid), CONST_ME_TELEPORT) doSendMagicEffect(itemPosition, 15) end elseif item.itemid == 1397 and item.actionid == tileActionIDBack then doTeleportThing(cid, teleportBack) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) doSendMagicEffect(getThingPos(item.uid), CONST_ME_TELEPORT) end end return TRUE end
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo