Líderes
-
-
-
-
Kyle Bellini
MembroPontos70Total de itens
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/14/21 em todas áreas
-
Sistema de Estoque para NPC's.
Sistema de Estoque para NPC's.
luanluciano93 e 5 outros reagiu a Tottin por uma resposta no tópico
6 pontosExplicação do Sistema Recentemente foi levantada uma ideia de Sistema no Discord da Academia de Programação: O sistema consiste em dar maior liberdade pro mercado e tirar a parte monótona dos NPCS que basicamente sempre vendem/compram tudo ao mesmo preço, assim ficando muito longe da realidade de 1 verdadeiro vendedor. A ideia é que o NPC venda produtos com base no que ele tenha em estoque, logo para ele vender 1 Blusa ele 1° irá precisar comprá-la de alguém. Exemplificando: O NPC só irá vender aquilo que comprar, se ele comprar 1 Blusa ele irá disponibilizar para vender 1 Blusa, se ele comprar 7 Blusas, ele irá disponibilizar pra vender 7 Blusas, ao acabar elas, o seu estoque fica vazio e ele deixa de vender até comprar mais. O preço que o NPC paga pelo seus produtos é baseado na quantidade de seu estoque, e o valor que ele cobra ao vender os produtos é definido previamente em 1 configuração. Exemplo: Quanto + item do mesmo produto o NPC tiver, + barato ele irá pagar nos mesmos, visto que ele já possui 1 estoque grande e na teoria esse produto não é um produto que possui 1 saída muito fácil. Ao mesmo tempo, quanto menor a quantidade de 1 mesmo produto em seu estoque, mais caro ele irá pagar, já que seu estoque sobre aquele produto é pequeno, o que indica que: Ou ele é muito raro, ou ele vende muito fácil, por isso o NPC irá demonstrar + interesse por ele. O preço que o NPC cobra é definido previamente e pode ser alterado sempre que desejar. Abaixo, o preço de 1 Pearl Shield que o NPC não possui em estoque: E agora, após o NPC ter comprado 10 Shields do mesmo: Enfim, agora que o sistema já foi previamente explicado, vamos a instalação: 1º Vá para data/lib/ e crie 1 arquivo chamado npc_system.lua, nele você irá adicionar o seguinte código: 2º Agora vá para data/npcs, crie 1 arquivo chamado: negociante.xml, nele você irá adicionar o seguinte código: 3º Agora vá para data/npcs/scripts, crie 1 arquivo chamado: negociante.lua, nele você irá adicionar o seguinte código: Instalação finalizada, as áreas configuráveis do sistema estão informadas na lib. Créditos: Academia de Programação: Por ter levantado a ideia do sistema. @Endless: Por ter ajudado em uma questão de lógica. E a mim por ter feito. (Eu acho). Informações adicionais: -> O sistema foi testado e não apresentou problemas, porém se vierem a encontrar falhas, favor reportar para que eu possa manter o tópico atualizado/corrigido. -> Eu faço correções no sistema caso esteja errado, mas não faço adaptações pro seu servidor. Caso queira variações do sistema, favor enviar seu pedido no discord da Academia de Programação, ou em meu privado: Admin#9865.6 pontos -
Gerador de Outfits Automática para o Site
Gerador de Outfits Automática para o Site
premii e 3 outros reagiu a Endless por uma resposta no tópico
4 pontosOlá 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: 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://outfit-images.ots.me/generator/ Você deve visualizar algo como isto: 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 Clique em start e você vai ter 1 retorno parecido com isto: 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). 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: Agora clique em Generate Imagens e ele vai começar a gerar os frames das suas outfits. Ao terminar ele vai efetuar sozinho o download das outfits. 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: 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: 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: 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.4 pontos -
Spell - Piertotum Locomotor
Spell - Piertotum Locomotor
Capitao wyz e um outro reagiu a Kyle Bellini por uma resposta no tópico
2 pontosE aí, pessoal! Esses dias eu estava na vibe Harry Potter e antes de dormir acabei tendo a ideia de fazer uma spell inspirada na magia Piertotum Locomotor. Criei ela, e decidi compartilhar com vocês auhauah Funcionamento: Dois golems serão invocados e aprisionarão o inimigo com pedras durante um certo período. (R.I.P qualidade) Vamos ao código (deixei alguns comentários explicando, mas está bem fácil de compreender o funcionamento, se tiver alguma dúvida pode comentar no tópico). Primeiro, crie um arquivo.lua, e cole o script dentro: Feito isso, no arquivo spells.xml recomendo que deixem o parâmetro (needtarget="1"). Exemplo de tag: <instant name="Piertotum Locomotor" words="Piertotum Locomotor" lvl="200" mana="1000" needtarget="1" prem="0" exhaustion="10000" groups="1,1500" icon="87" needlearn="0" event="script" value="hogwarts/piertotum locomotor.lua"> <vocation id="1"/> <vocation id="2"/> </instant>2 pontos -
Sistema de Estoque para NPC's.
2 pontosMuito criativo esse sistema e você desenvolveu muito bem, parabéns!! Porém fazer por table storage, fica bem limitado o sistema, afinal, como você deve saber, existe uma certa quantia de caracteres/números que uma storage suporta. ° Um dos BUGS consiste em: O jogador vender 1000 itens de uma vez por um preço maior, e depois comprar o mesmo item e quantidade por um preço menor, refazer esses passos e fazer dinheiro fácil. Sobre a limitação do storage, você pode criar tabelas usando database ou criar um arquivo txt ou lua para salvar os dados e acessar quando quiser.2 pontos
-
Como colocar STORAGE GLOBAL, Nesse Script
local leverCooldown = {1, "hour"} -- Configure o tempo para usar novamente. Ex.: {30, "sec"}, {2, "min"}, {5, "hour"}, {3, "day"} local cooldownStorage = 91801 -- só modifique se necessário local items = { {pos = {x = 431, y = 285, z = 7}, itemid = 2129}, {pos = {x = 441, y = 284, z = 7}, itemid = 5943}, {pos = {x = 440, y = 290, z = 7}, itemid = 2363}, } local monsters = { {pos = {x = 436, y = 285, z = 7}, name = "Wolf"}, } local config = { onSpawnMonster = CONST_ME_TELEPORT, -- efeito lançado quando monstro é criado onRemoveItem = CONST_ME_BLOCKHIT, -- efeito lançado quando item é removido missingItem = CONST_ME_POFF, -- efeito lançado quando não encontrou o item para remover } -- 255 faz com que não lance efeito algum local function mathtime(table) -- by dwarfer if table[1] == 0 then return 0 end local unit = {"sec", "min", "hour", "day"} for i, v in pairs(unit) do if v == table[2] then return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1) end end end function onUse(cid, item, frompos, item2, topos) if getGlobalStorageValue(cooldownStorage) > os.time() then doPlayerSendCancel(cid, "Espere 1h para usar a alavanca novamente.") return true end local missing_items, remove_items = false, {} for _, itemcheck in pairs (items) do local i = getTileItemById(itemcheck.pos, itemcheck.itemid).uid if i < 1 then missing_items = true if tonumber(config.missingItem) and config.missingItem ~= 255 then doSendMagicEffect(itemcheck.pos, config.missingItem) end else table.insert(remove_items, i) end end if missing_items then return doPlayerSendCancel(cid, "Está faltando algum item.") else for _, iuid in pairs (remove_items) do if tonumber(config.onRemoveItem) and config.onRemoveItem ~= 255 then doSendMagicEffect(getThingPos(iuid), config.onRemoveItem) end doRemoveItem(iuid) end for _, monsterinfo in pairs (monsters) do local m = doCreateMonster(monsterinfo.name, monsterinfo.pos, false) if isCreature(m) and tonumber(config.onSpawnMonster) and config.onSpawnMonster ~= 255 then doSendMagicEffect(getThingPos(m), config.onSpawnMonster) end end setGlobalStorageValue(cooldownStorage, mathtime(leverCooldown) + os.time()) end return true end1 ponto
-
NPC Premiun Points
1 pontose eu nao me engano em 2012 fiz um npc disso... achei o link na otland function getAccountPoints(cid) local res = db.getResult('select `premium_points` from accounts where name = \''..getPlayerAccount(cid)..'\'') return res:getDataInt("premium_points") < 0 and 0 or res:getDataInt("premium_points") end function doAccountRemovePoints(cid, count) return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` ='"..getPlayerAccount(cid).."'") end o 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 shopWindow = {} local t = { [2195] = 1, [2493] = 25, [2361] = 30, [8851] = 20, [8925] = 30, [2640] = 50, [2494] = 100, [9932] = 50, [2472] = 70, [8931] = 100 } local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks) if t[item] and getAccountPoints(cid) < t[item] then selfSay("You need "..t[item].." points to buy this item.", cid) else doAccountRemovePoints(cid, t[item]) doPlayerAddItem(cid, item) selfSay("Here your item!", cid) end return true end if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then for var, ret in pairs(t) do table.insert(shopWindow, {id = var, subType = 0, buy = ret, sell = 0, name = getItemNameById(var)}) end openShopWindow(cid, shopWindow, onBuy, onSell) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())1 ponto
-
NPC Premiun Points
1 ponto
-
Sistema de Estoque para NPC's.
1 pontoAh verdade, achei que ele iria comprar mais caro, por exemplo (20 gp), e se ele tivesse muito desses itens já em estoque, vender mais barato, pela lei da oferta e demanda...1 ponto
-
Sistema de Estoque para NPC's.
1 pontoSobre a limitação gerada por utilizar storage, sim de fato com o tempo pode ser tornar 1 problema. Porém sobre o bug de vender por X preço e recomprar mais barato, ele na verdade não existe, a não ser que o usuário cause esse bug. Basicamente, na tabela dos items é definido o preço base de compra e o preço de venda, o preço de compra nunca será aumentado, indiferente da quantidade desse item no estoque, ele vai apenas reduzir o preço, se o player vender 1000 unidades de 1 única vez, ele iria vender as 1000 unidades pelo preço 10, e quando fosse comprar, iria pagar 20 por cada unidade. Então, a não ser que a pessoa defina o preço de compra superior ao preço de venda, esse bug eu acredito que não iria acontecer. Mas em geral, obrigado pelo feedback.1 ponto
-
Exp Hardcore
Exp Hardcore
Breniinx reagiu a Kyle Bellini por uma resposta no tópico
1 pontoA quantidade de XP que o jogador irá receber tu consegue definir nas variáveis "exp", "nexp", e "newexp", basta alterar as operações matemáticas que estão sendo feitas dentro delas. Modifiquei pra que o cálculo seja feito em cima do level do jogador inimigo, assim fica algo mais proveitoso e menos "fixo". Testa aí e me fala:1 ponto -
Sistema de Estoque para NPC's.
1 pontoO estoque não reseta com o server save, a única forma de alterar o estoque seria comprando os items que o npc tem disponível para venda. O tópico já foi criado na área de sistemas para tfs 0.x1 ponto
-
Habdel Show-off
1 ponto1 ponto
- Broadcast ao matar o monstro
1 pontoEm creaturescripts/scripts crie um arquivo.lua: function onDeath(cid, corpse, deathList) local killer = isCreature(deathList[1]) and (isPlayer(deathList[1]) and getPlayerName(deathList[1]) or getPlayerName(getCreatureMaster(deathList[1]))) or "Something" addEvent(doBroadcastMessage, 1, "WOW! "..killer.." has killed "..getCreatureName(cid).."!", MESSAGE_STATUS_WARNING) return true end No creaturescripts.xml: <event type="death" name="broadOnKill" event="script" value="NOMEDOARQUIVO.lua"/> No arquivo do monstro, antes de </monster>, adicione: <script> <event name="broadOnKill"/> </script> Para retirar dos monstros que você quer, é só retirar a parte do script referente a isso.1 pontoLíderes está configurado para São Paulo/GMT-03:00 - Broadcast ao matar o monstro
Informação Importante
Confirmação de Termo