Postado Setembro 4, 2017 7 anos Em 17/06/2014 em 10:58, xWhiteWolf disse: Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera. Enfim, vamos ao script: actions\scripts\mining.lua: terra = {351,352,353,354,355} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem [37] = 2155, -- green gem [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177 -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script: local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } o storage é onde vai salvar o seu nível chance é a chance de pegar um item cada vez que minera. k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10. experience é o storage que fica salvo sua experiencia. Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players. e no actions.xml: <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser. PS: Uma fotinha pra vcs verem Conteúdo Oculto Espero que tenham gostado! Como faço para que no nível 50 por exemplo, a pessoa minere em outra "terra" e só nessa terra de nível 50 drope os itens do nível 50+?
Postado Setembro 4, 2017 7 anos Autor Em 04/09/2017 em 06:31, Thayguroficial disse: Como faço para que no nível 50 por exemplo, a pessoa minere em outra "terra" e só nessa terra de nível 50 drope os itens do nível 50+? tem algumas formas de fazer isso, vou apresentar uma delas que eu pensei agora: essa é a função que retorna os drops que você pode ter, vamos modificar ela pra aceitar um parametro chamado "special" que será verdadeiro ou falso e nos dirá se a terra que vc tá minerando é do id special. function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end Mostrar conteúdo oculto function getDrops(cid, special) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then if i >= 50 and special then table.insert(drops, levels[i]) end end end return true end agora quando chamamos ela no nosso código getDrops(cid) nós vamos adicionar esse parametro especial: Mostrar conteúdo oculto getDrops(cid, isInArray(terraspecial, itemEx.itemid)) e aí lá em cima do código onde temos terra = {6573} vamos adicionar terraspecial = {6572} terra = {6573, 6572} da forma que o sistema está escrito vc precisa adicionar as terras especiais também na tabela de terra, se não ele não vai funcionar pra esses id's.
Postado Setembro 5, 2017 7 anos Em 04/09/2017 em 21:28, xWhiteWolf disse: tem algumas formas de fazer isso, vou apresentar uma delas que eu pensei agora: essa é a função que retorna os drops que você pode ter, vamos modificar ela pra aceitar um parametro chamado "special" que será verdadeiro ou falso e nos dirá se a terra que vc tá minerando é do id special. function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end Mostrar conteúdo oculto Mostrar conteúdo oculto function getDrops(cid, special) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then if i >= 50 and special then table.insert(drops, levels[i]) end end end return true end agora quando chamamos ela no nosso código getDrops(cid) nós vamos adicionar esse parametro especial: Mostrar conteúdo oculto Mostrar conteúdo oculto getDrops(cid, isInArray(terraspecial, itemEx.itemid)) e aí lá em cima do código onde temos terra = {6573} vamos adicionar terraspecial = {6572} terra = {6573, 6572} da forma que o sistema está escrito vc precisa adicionar as terras especiais também na tabela de terra, se não ele não vai funcionar pra esses id's. Eu adicionei esses novos códigos e quando eu uso a pick, aparece a mensagem (tick) que eu peguei mas não vem nada na minha backpack, quando eu tiro essa função ele volta a pegar: function getDrops(cid, special) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then if i >= 50 and special then table.insert(drops, levels[i]) end end end return true end Vou deixar em spoiler como ta no meu minig.lua: Mostrar conteúdo oculto terraspecial = {4485} terra = {4471,4485} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [20] = 2145, -- Small Diamond [50] = 2150, -- Small Amethyst [60] = 2147, -- Small Ruby [80] = 2144, -- Black Pearls [100] = 2143, -- White Pearls [120] = 7761, -- small enchanted emerald [140] = 7759, -- Small Enchanted Sapphiire [160] = 7762, -- Small Enchanted Amethyst [180] = 7760, -- Small Enchanted Ruby [200] = 2157 -- Pepita de Ouro } local config = { storage = 19333, chance = 70, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end function getDrops(cid, special) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then if i >= 50 and special then table.insert(drops, levels[i]) end end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) getDrops(cid, isInArray(terraspecial, itemEx.itemid)) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") doSendMagicEffect(getCreaturePosition(cid),98) doSendAnimatedText(getCreaturePosition(cid), 'Mining UP', 100, cid) if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 289) doSendAnimatedText(toPosition , 'TiickK!', 169) else doSendMagicEffect(toPosition, 288) doSendAnimatedText(toPosition , "Puuff!", 61) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end
Postado Setembro 5, 2017 7 anos Autor Os códigos que eu te passei tavam falando: Aonde está assim deve ficar desse outro jeito. Voce nao editou, vc simplesmente duplicou as coisas e isso por si só ja explica os erros :/
Postado Setembro 5, 2017 7 anos Em 05/09/2017 em 09:21, xWhiteWolf disse: Os códigos que eu te passei tavam falando: Aonde está assim deve ficar desse outro jeito. Voce nao editou, vc simplesmente duplicou as coisas e isso por si só ja explica os erros Perdão pela falta de atenção, consertei a burrada e funcionou os drop da "terraspecial" do jeito que eu queria, ta dropando só a partir daquele skill, porem a terra normal continua não caindo nada, faz o tick e não vem a skull e a small stone. Não deu nenhum erro na distro mining.lua Mostrar conteúdo oculto terraspecial = {4485} terra = {4471,4485} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [20] = 2145, -- Small Diamond [40] = 2150, -- Small Amethyst [60] = 2147, -- Small Ruby [80] = 2144, -- Black Pearls [100] = 2143, -- White Pearls [120] = 7761, -- small enchanted emerald [140] = 7759, -- Small Enchanted Sapphiire [160] = 7762, -- Small Enchanted Amethyst [180] = 7760, -- Small Enchanted Ruby [200] = 2157 -- Pepita de Ouro } local config = { storage = 19333, chance = 70, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid, special) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then if i >= 12 and special then table.insert(drops, levels[i]) end end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid, isInArray(terraspecial, itemEx.itemid)) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") doSendMagicEffect(getCreaturePosition(cid),98) doSendAnimatedText(getCreaturePosition(cid), 'Mining UP', 100, cid) if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 289) doSendAnimatedText(toPosition , 'TiickK!', 169) else doSendMagicEffect(toPosition, 288) doSendAnimatedText(toPosition , "Puuff!", 61) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end
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.