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.