Ir para conteúdo

Featured Replies

Postado
  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!   :smile:

 

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+?

  • Respostas 122
  • Visualizações 20.1k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • tem sim, eu só não coloquei porque o próprio tibia ja tem um sistema de exhausted padrão de 1 segundo entre ações contendo itemEx (que é configurável pelo config.lua)

  • dá ué..  terra = {65783} . . . isInArray(terra, itemEx.uid) agora só vai dar pra minerar nos pisos que tiverem unique id 65783. A constante de level é o seguinte.. a fórmula da experiência necessá

  • sim ué.. pra upar do 50 pro 51 a conta é a seguinte: (51*51/k) - (50*50/k) que é igual a 1300 - 1250 = 50 picaretadas.

Postado
  • 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


agora quando chamamos ela no nosso código 

 

getDrops(cid)

 

 nós vamos adicionar esse parametro especial:

 

Mostrar conteúdo oculto

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.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  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


agora quando chamamos ela no nosso código 

 


getDrops(cid)

 

 nós vamos adicionar esse parametro especial:

 

Mostrar conteúdo oculto

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

 

Postado
  • 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 :/

 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado
  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

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo