Ir para conteúdo
  • 0

Adicionar um chão(tile) nesse script


eduardo0001

Pergunta

Gostaria que me ajudassem a adicionar um piso, nessa função, lembrando versão do 10.90 TFS 1.2 !!! Aí é o seguinte, nesse script você quebra a pedra e depois de um certo tempo aparece uma outra pedra no lugar da que foi quebrada, porém quando aparece a pedra, também aparece um buraco preto e eu quero adicionar um piso para que o script tenha looping, sem o piso o item de pedra não da spawn.

Explicando melhor:
1º o chão tem a pedra normal
2º bati na pedra e ela quebrou retornando gold nuggets
3º a pedra vai spawnar!
4º mas ela volta com um buraco preto nela.
5º quando quebro a pedra com esse buraco ela não volta!!!!
6º preciso quebrar a pedra e adicionar um chão para ela novamente quando chegar na função doTransformItem eu creio que o chão fica preto por causa disso e se eu remover essa função a pedra não volta e não aparece nada no chão!


Veja na imagem!!!!

Spoiler

sssssssss.png

 

function event_rockGrow(rockPos, old_id)	local rock =  (getThingfromPos(rockPos).uid)	doTransformItem(rock, old_id)	doSendMagicEffect(rockPos, 3)end


Script original: 
  

Spoiler

-- Script by: Lwkass
-- Mod: Vittu
-- Version: 2.0
-- Tested in: TFS 0.4
---------------------------
-- Configurations --
---------------------------
local STORAGE_SKILL_LEVEL = 10002
local STORAGE_SKILL_TRY = 10003
local config = {
levels = {
{level = {0,9}, quant = {1,2}, percent = 5},
{level = {10,19}, quant = {2,4}, percent = 10},
{level = {20,29}, quant = {3,6}, percent = 15},
{level = {30,39}, quant = {4,8}, percent = 20},
{level = {40,49}, quant = {5,10}, percent = 25},
{level = {50,59}, quant = {6,12}, percent = 30},
{level = {60,69}, quant = {7,14}, percent = 30},
{level = {70,79}, quant = {8,16}, percent = 35},
{level = {80,89}, quant = {9,18}, percent = 35},
{level = {90,99}, quant = {10,20}, percent = 40},
{level = {100}, quant = {11,22}, percent = 50}
},
rocks = {1356, 1285, 3607, 3616}, -- Id das rochas que podem ser quebradas
stones = {},  -- Modelo = {rock_id, rock_id}
default_stone = 2157, -- pedra padrão
rock_delay = 480, -- Tempo de volta da rocha (Em segundos)
bonus_chance = 3, -- Chance (em porcentagem) de se conseguir um bonus de exp
bonus_exp = 1 -- Bonus extra
}


------------------------------------
-- END Configurations ---
------------------------------------
function getMiningLevel(cid)
return getPlayerStorageValue(cid, STORAGE_SKILL_LEVEL)
end
function setPlayerMiningLevel(cid, n)
setPlayerStorageValue(cid, STORAGE_SKILL_LEVEL, n)
end
function addMiningLevel(cid, n)
setPlayerMiningLevel(cid, getMiningLevel(cid) + (isNumber(n) and n or 1))
setMiningTry(cid, 0)
end
function getMiningInfo(cid)
for i = 1, #config.levels do
min = config.levels.level[1]; max = config.levels.level[2]
if (getMiningLevel(cid) >= min and getMiningLevel(cid) <= max) then
return {quantity = {min = config.levels.quant[1], max = config.levels.quant[2]}, chance = config.levels.percent}
end
end
end
function getStoneByRock(rockid)
for i = 1, #config.stones do
if (config.stones[2] == rockid) then
return config.stones[1]
end
end
return config.default_stone
end
function getMiningTries(cid)
return getPlayerStorageValue(cid, STORAGE_SKILL_TRY)
end
function setMiningTry(cid, n)
setPlayerStorageValue(cid, STORAGE_SKILL_TRY, n)
end
function addMiningTry(cid, bonus)
setMiningTry(cid, getMiningTries(cid) + 1 + (bonus and config.bonus_exp or 0))

if (getMiningTries(cid) >= getMiningExpTo(getMiningLevel(cid))) then -- Up
doPlayerSendTextMessage(cid, 22, "You advanced from level " .. getMiningLevel(cid) .. " to level ".. (getMiningLevel(cid) + 1) .." in mining.")
 
if ((getMiningLevel(cid)+1) == getMiningMaxLevel()) then
doPlayerSendTextMessage(cid, 22, "Max level reached in mining.")
end
 
addMiningLevel(cid)
doSendMagicEffect(getCreaturePosition(cid), math.random(28,30))
setMiningTry(cid, 0)
end
end
function getMiningExpTo(level)
return ((level*1.5)+((level+1)*7))
end
function getMiningMaxLevel()
return config.levels[#config.levels].level[#config.levels[#config.levels].level]
end
---------------------------

function onUse(cid, item, fromPosition, itemEx, toPosition)
rock = { id = itemEx.itemid, uid = itemEx.uid, position = toPosition }
player = { position = getCreaturePosition(cid) }

if (getMiningLevel(cid) < 0) then
setPlayerMiningLevel(cid, 0)
end

if (isInArray(config.rocks, rock.id)) then
addMiningTry(cid)

if (math.random(1,100) <= getMiningInfo(cid).chance) then
local collected = math.random(getMiningInfo(cid).quantity.min, getMiningInfo(cid).quantity.max)
doPlayerAddItem(cid, getStoneByRock(rock.id), collected)
doPlayerSendTextMessage(cid, 22, "You got " .. collected .. " gold" .. (collected > 1 and "s" or "") .. " nuggets.")
 
if (math.random(1,100) <= config.bonus_chance) then -- Bonus calc
addMiningTry(cid, true)
doSendAnimatedText(player.position, "Bonus!", COLOR_ORANGE)
end
 
event_rockCut(rock)
else
if (math.random(1,100) <= (10-getMiningInfo(cid).chance/10)) then
doPlayerSendTextMessage(cid, 22, "You got nothing.")
event_rockCut(rock)
else
doSendMagicEffect(rock.position, 3)
doSendAnimatedText(rock.position, "Poff!", COLOR_GREEN)
end
end
else
doPlayerSendCancel(cid, "This can't be cut.")
end
end
function event_rockCut(rock)
addEvent(event_rockGrow, config.rock_delay * 1000, rock.position, rock.id)

doTransformItem(rock.uid, 3610)
doSendMagicEffect(rock.position, 3)
doSendAnimatedText(rock.position, "Tack!", COLOR_GREEN)
doItemSetAttribute(rock.uid, "name", "A trunk of " .. getItemNameById(rock.id))
end
function event_rockGrow(rockPos, old_id)
local rock = getThingFromPos(rockPos).uid
doTransformItem(rock, old_id)
doItemSetAttribute(rock, "name", getItemNameById(old_id))
doSendMagicEffect(rockPos, 3)
end

 

sssssssss.png.e6cc8548efdcb7bfb4c552da3231cadb.png

Editado por eduardo0001
explicando melhor
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

O que está acontecendo é o seguinte:

Está transformando o chao em pedra e por isso o chao deixa de existir ficando preto.

 

Nessa parte do script:

Citar

function event_rockGrow(rockPos, old_id)
local rock = getThingFromPos(rockPos).uid

 

Antes da variavel rock, adiciona isso:

Citar

rockPos.stackpos = 1

 

Agora ele vai pegar o item que estiver acima do chao.

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, Poccnn disse:

O que está acontecendo é o seguinte:

Está transformando o chao em pedra e por isso o chao deixa de existir ficando preto.

 

Nessa parte do script:

 

Antes da variavel rock, adiciona isso:

 

Agora ele vai pegar o item que estiver acima do chao.

Antes da variável rock você fala entre function e local? Observe abaixo:

 

Spoiler

function event_rockGrow(rockPos, old_id)

***SE FOR AQUI NÃO DEU o chão permanece mas a pedra não da spawn**
local **NEM AQUI o arquivo da Warning e não carrega*** rock = getThingFromPos(rockPos).uid

    doTransformItem(rock, old_id)

    doSendMagicEffect(rockPos, 3)

end

 

 

 

 

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

  • 0

Isso demonstra que existe outro erro, mas um ja foi resolvido.

O que voce tem que fazer agora é o seguinte: verifica se ele esta encontrando algum item para ser transformado, caso nao, modifica a stackpos para uma acima e tenta denovo até encontrar o item, ao final, caso nao encontre o item, verifique sse a posição esta correta.

Link para o comentário
Compartilhar em outros sites

  • 0
10 minutos atrás, Poccnn disse:

Isso demonstra que existe outro erro, mas um ja foi resolvido.

O que voce tem que fazer agora é o seguinte: verifica se ele esta encontrando algum item para ser transformado, caso nao, modifica a stackpos para uma acima e tenta denovo até encontrar o item, ao final, caso nao encontre o item, verifique sse a posição esta correta.

@Poccnn Acabei de tentar colocando:

 

function event_rockGrow(rockPos, old_id)
	rockPos.stackpos = TESTEI -2,-1, 0, 1, 2, 3
	local rock =  (getThingfromPos(rockPos).uid)
	doTransformItem(rock, old_id)
	doSendMagicEffect(rockPos, 3)
end

O único que faz a pedra aparecer é o ZERO mas fica com buraco.
no código original tem umas linhas que eu removi pois estavam dando erro.
Esta função "doItemSetAttribute" qual o objetivo dela? Você conhece?
não funciona "getItemNameById"

Spoiler

function event_rockCut(rock)
    addEvent(event_rockGrow, config.rock_delay * 1000, rock.position, rock.id)

    doTransformItem(rock.uid, 3610)
    doSendMagicEffect(rock.position, 3)
    doSendAnimatedText(rock.position, "Tack!", COLOR_GREEN)    ---------REMOVIDA não funciona em TFS 1.2
    doItemSetAttribute(rock.uid, "name", "A trunk of " .. getItemNameById(rock.id))   ---------REMOVIDA não funciona em TFS 1.2
end

function event_rockGrow(rockPos, old_id)
    local rock = getThingFromPos(rockPos).uid
    doTransformItem(rock, old_id)
    doItemSetAttribute(rock, "name", getItemNameById(old_id))   ---------REMOVIDA não funciona em TFS 1.2
    doSendMagicEffect(rockPos, 3)
end


 

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

  • 0

O objetivo dessa função é modificar ou adicionar atributos ao item; como no caso o nome do item foi modificado.

 

Eu uso versao 0.3.6, portanto nao saberia dizer o que vai servir ou nao na versao que tu usas. 

Pelo visto, esse script é de mineração ou algo do tipo. Ele ao minerar um item, transforma-se em outro item de id 3610.

Pergunto-lhe: quando da execução ele transforma o item nesse de id 3610? E quando retorna para o antigo id é ai que o tile fica preto?

 

Faz a seguinte modificacao dessa funcao event_rockGrow

Citar

function event_rockGrow(rockPos, old_id)

rockPos.stackpos = 1

 local rock = getThingfromPos(rockPos)

if rock.itemid == 3610 then

doTransformItem(rock.uid, old_id)

else

doCreateItem(old_id,rockPos)

end

doSendMagicEffect(rockPos, 3)

end

 

Link para o comentário
Compartilhar em outros sites

  • 0

@Poccnn Estou editando o post, na verdade foi um erro de observação, funcionou com esse código que você me passou exceto pela função "doCreateItem"  então apenas removi a função "else" . Muito obrigado pela ajuda!!!

function event_rockGrow(rockPos, old_id)
rockPos.stackpos = 1
 local rock = getThingfromPos(rockPos)
if rock.itemid == 3610 then
doTransformItem(rock.uid, old_id)
else
doCreateItem(old_id,rockPos)
end
doSendMagicEffect(rockPos, 3)
end

 

Editado por eduardo0001
Melhorando a explicação
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...