Ir para conteúdo

Simples Sistema De Mineração [Diferente]


Leoxtibia

Posts Recomendados

Bem, estava sem nada para fazer, e resolvi criar esse sistema de mineração. Ele é simples, porém é diferente ^^. Diante mão, obrigado a jhon992 por me tirar algumas dúvidas e me ajudar.

 

Explicando o script: O player precisa "carregar" o vagão que está vazio, usando um item na pedra. Depois, ao puxar a alavanca, o vagão se move e quando chega no final, assim que o player pisar num certo tile, o vagão voltará a posição inicial e uma pedra surgirá emcima de um local. Então, é só o player usar a garrafa (id 2007) em um destilador (id 5469) que se transformará em um vial de mercury. Ao usar o vial na pedra, poderá ganhar itens que são aleatórios. O vídeo abaixo explica como instalar e também mostra o script em funcionamento. Então, vamos ao script:

 

 

Primeiramente, em data/actions/scripts crie um arquivo.lua chamado mineracao.lua e cole isto dentro:

 

local pedras = {8751, 8749, 8748, 8750} --- PEDRAS QUE PODERAO SER MINERADAS

local vagon = {x=210,y=434,z=7,stackpos=2} --- local inicial do vagão

function onUse(cid, item, fromPosition, itemEx, toPosition)
  if isInArray (pedras, itemEx.itemid) == TRUE and itemEx.actionid == 3478 then
 if getTileItemById(vagon, 7131).uid > 0 and doPlayerSendTextMessage(cid, 22, "Você colocou a pedra no vagão, use a alavanca para movê-lo") then
	doTransformItem(getThingfromPos(vagon).uid,10037)
	   doSendMagicEffect(toPosition, 3)
		 doSendMagicEffect(vagon, 38)
	  else
		   doPlayerSendCancel(cid, "O vagão está em uso. Espere ele voltar.")
end
 end
end

 

Como no próprio script já tem, nessa linha local pedras = {8751, 8749, 8748, 8750} você deve colocar os ids das pedras que poderão ser mineradas. Depois, é preciso que você, pelo map editor, coloque o actionid 3478 nas pedras.

E em actions.xml adicionar a tag: <action itemid="4874" script="mineracao.lua"/>. Nesse caso, o item que será usado para minerar vai ser o dwarven pickaxe, caso prefira outro, é só mudar onde tem 4874, com o id do seu item.

 

Ainda em data/actions/scripts, crie outro arquivo.lua e renomeie para vagonlever.lua e cole isto dentro:

 

local positions = {
 {x=210,y=434,z=7, stackpos=1}, ---- posição inicial do vagao
 {x=211,y=434,z=7, stackpos=1},  --[
 {x=212,y=434,z=7, stackpos=1},   ------------Posição onde o vagão irá andar
 {x=213,y=434,z=7, stackpos=1},   ------------ ||
 {x=214,y=434,z=7, stackpos=1},  --]
 {x=215,y=434,z=7, stackpos=1} ---- ultima posição do vagão
		}  


function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.actionid == 6666 and getTileItemById(positions[1], 10037).uid > 0 then
	moveVagon()
else
	doPlayerSendCancel(cid, "O vagão ainda não está carregado")
 end
end

function moveVagon()
for i=1, #positions do
   vagon_uid = getTileItemById(positions[i], 10037).uid
		if vagon_uid > 0 then
				if #positions ~= i and doRemoveItem(vagon_uid,1) then
						doCreateItem(10037,1, positions[i+1])
						addEvent(moveVagon, 500)
						break
				end
		end
end
end

 

O script é autoexplicativo, você só vai precisar adicionar desde a posição inicial do vagão até o último. Com o seu map editor, adicione o aid 6666 na alavanca. Em actions.xml adicione a tag: <action actionid="6666" event="script" value="vagonlever.lua"/>.

 

Em data/actions/scripts, novamente, crie outro arquivo e renomeie para cleanstone.lua, e cole isto dentro:

 

local items = {2149, 2145, 2147}   ----- items que vão aparecer
local stone = {x=216,y=434,z=7, stackpos=1}	 ---- onde o coal será adicionado

function onUse(cid, item, fromPosition, itemEx, toPosition)

if item.itemid == 2007 and itemEx.itemid == 5469 then
	doRemoveItem(item.uid)
	 local flask = doPlayerAddItem(cid, 7488)
	 doItemSetAttribute(flask, "description", "This flask contains mercury. It is great to use on minerals.")
		doPlayerSendTextMessage(cid, 22, "You have gained a flask of mercury.")

elseif item.itemid == 7488 and itemEx.actionid == 3459 then
   local randomChance = math.random(1, #items)
	doTransformItem(itemEx.uid,items[randomChance])
	 doSendMagicEffect(stone,6)
	  doRemoveItem(item.uid)
 end
end

 

A tag: <action itemid="2007;7488" event="script" value="cleanstone.lua"/>

 

Nessa parte, você vai editar nessa linha: local items = {2149, 2145, 2147} os items que aparecerão ao "limpar" a pedra com o vial de mercury. No meu caso, coloquei small diamond, small ruby e small emerald. E na outra linha abaixo, o local onde a pedra será adicionada. Perceba que o script já faz com que o vial de mercúrio só possa ser usado nas pedras de action 3459 (você não precisa adicionar nada de action aqui), para evitar que pudessem ser usadas nas outras pedras espalhadas pelo mapa.

 

E por último, em movements/scripts crie um arquivo.lua e renomeie para coal.lua:

 

local final = {x=215,y=434,z=7, stackpos=2} ------ posição onde o vagão cheio chegará
local stone = {x=216,y=434,z=7} ------ local onde aparecerá a pedra
local vagon = {x=210,y=434,z=7, stackpos=1} ------ local inicial do vagão

function onStepIn(cid, item, position, fromPosition)
if getTileItemById(final, 10037).uid > 0 then
  doRemoveItem(getThingfromPos(final).uid,1)
	local mina = doCreateItem(8751, 1, stone)  
	doItemSetAttribute(mina, "aid", 3459)  
		doSendMagicEffect(stone, 34)
			doSendMagicEffect(final, 2)
			  doCreateItem(7131, 1, vagon)  
				doSendMagicEffect(vagon, 10)
	 end
  return true
end

 

E a tag em movements.xml: <movevent type="StepIn" actionid="16540" event="script" value="coal.lua"/>

 

Depois, é só colocar o actionid 16540 no chão na frente de onde será adicionada a pedra (veja vídeo). E ao player pisar, tcharam! a pedra vai aparecer.

Bom, é isso aí, ainda estou começando em scripting mas espero ter ajudado alguém, esse script também pode servir como exemplos de tutoriais e talz ^^. Vlw, abraço.

Editado por Leoxtibia
Link para o comentário
Compartilhar em outros sites

eu curti bastante o sistema, ta bacana, se eu fosse você colocaria chance para minerar os itens "bom"...

outra coisa, oq é essa parte no script:

 

&amp;amp;amp;amp;amp;gt; 

 

Editado por Vodkart
Link para o comentário
Compartilhar em outros sites

Vlw pelos comments aí. E essa parada mto loka, é por causa da formatação do xtibia. Mas já consertei, vlw ^^

&amp;amp;amp;amp;amp;amp;gt;

 

Quanto aos itens, é só editar nessa linha: local items = {2149, 2145, 2147}, colocando os ids dos items.

Editado por Leoxtibia
Link para o comentário
Compartilhar em outros sites

sim amg eu vi ali

estou falando para colocar chances em porcentagem

 

local items = {

{id = 2149, count = 1, chance = 10},

{id = 2145, count = 2, chance = 20},

{id = 2147, count = 10, chance = 40}

}

Editado por Vodkart
Link para o comentário
Compartilhar em outros sites

Ahh kk, tinha entendido outra coisa kk ... Agora tenho que sair, mas depois vou fazer isso sim, vlw pela ideia.

 

@edit

 

Como o Vodkart tinha dado a ideia, segue o script de "limpar" a pedra, com chance:

 

local items = {
{id = 2149, count = 5, chance = 10},
{id = 2145, count = 3, chance = 60}, 
{id = 2147, count = 6, chance = 20}
}  
local stone = {x=216,y=434,z=7, stackpos=1}     ---- onde o coal será adicionado 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if item.itemid == 2007 and itemEx.itemid == 5469 then
       doRemoveItem(item.uid)
        local flask = doPlayerAddItem(cid, 7488)
        doItemSetAttribute(flask, "description", "This flask contains mercury. It is great to use on minerals.")
           doPlayerSendTextMessage(cid, 22, "You have gained a flask of mercury.")

elseif item.itemid == 7488 and itemEx.actionid == 3459 then
       for i=1, #items do
       quant = math.random(items[i].count)
       percent = items[i].chance
          if math.random(1, 100) <= percent then
             doRemoveItem(itemEx.uid)
              doPlayerAddItem(cid, items[i].id, quant)
                doSendMagicEffect(stone,6)
                 doRemoveItem(item.uid)
            else
               doSendMagicEffect(stone,CONST_ME_POFF)
        end
      end
  end
end

 

 

Editado por Leoxtibia
Link para o comentário
Compartilhar em outros sites

  • 1 month later...

O cara , aqui não funciono ... eu uso o item ( 4874 ) ele diz " Você colocou a pedra no vagão, use a alavanca para movê-lo " aí eu clico na alavanca aparece... " O Vagão ainda não está carregado " ele aparece até um " efeito " como sê fosse enxer o vagão mais não fica... tipo assim , digamos que não carrega o trêm a pedra não vai . só da um efeitozinho . podem me ajudar ?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...