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 20k
  • 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.

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

 

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.6k

Informação Importante

Confirmação de Termo