Jump to content

(Resolvido)Script não funciona


Go to solution Solved by Spooky Ghost,

Recommended Posts

Estou com um problema no script de spell, é uma spell de trap que cria itens em volta do player. Ao usa-lá, não acontece nada, mas também não aparece nenhum erro na distro.

 

Spoiler

function isWalkable(pos, creature, pz, proj)

if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
return false
end

local creature = getTopCreature(pos)
if creature.type > 0 then
return false
end

if getTilePzInfo(pos) and not pz then
return false
end

local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end

function onCastSpell(cid, var)

if isPlayer(cid) and exhaustion.check(cid, 5750) == TRUE then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, 5750) .. " segundos para usar novamente.")
return false
end

exhaustion.set(cid, 5750, 2)
local pos = getThingPosition(getCreatureTarget(cid))
for x = -1,1 do
for y = -1,1 do
posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
if isWalkable(posicao) and posicao ~= {x = pos.x,y = pos.y,z = pos.z} then
doCreateItem(5750,1,posicao)
end
end
end
addEvent(function()
for x = -1,1 do
for y = -1,1 do
posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
if getTileItemById(posicao, 5750).uid > 0 then
doRemoveItem(getTileItemById(posicao, 5750).uid)
end
end
end
end,5*1000)
return true
endfunction isWalkable(pos, creature, pz, proj)

if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
return false
end

local creature = getTopCreature(pos)
if creature.type > 0 then
return false
end

if getTilePzInfo(pos) and not pz then
return false
end

local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end

function onCastSpell(cid, var)

if isPlayer(cid) and exhaustion.check(cid, 5750) == TRUE then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, 5750) .. " segundos para usar novamente.")
return false
end

exhaustion.set(cid, 5750, 2)
local pos = getThingPosition(getCreatureTarget(cid))
for x = -1,1 do
for y = -1,1 do
posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
if isWalkable(posicao) and posicao ~= {x = pos.x,y = pos.y,z = pos.z} then
doCreateItem(5750,1,posicao)
end
end
end
addEvent(function()
for x = -1,1 do
for y = -1,1 do
posicao = {x = pos.x + x, y = pos.y + y, z = pos.z}
if getTileItemById(posicao, 5750).uid > 0 then
doRemoveItem(getTileItemById(posicao, 5750).uid)
end
end
end
end,5*1000)
return true
end

 

Link to post
Share on other sites

Spoiler

<instant name="prision" words="prision" lvl="200" mana="100" aggressive="1" range="6" blockwalls="1" needtarget="1" exhaustion="0" needlearn="0" event="script" value="prision.lua">
<vocation id="1"/>
</instant>

 

 

Spoiler

local duracao = 5 -- tempo em segundos para remover os item q apareçe
local idItem = 5750 -- id do item

function onCastSpell(cid, var)

local waittime = 5 -- Tempo de cdr
local storage = 15288

if exhaustion.check(cid, storage) then
return false
end

exhaustion.set(cid, storage, waittime)
local pos = getThingPosition(getCreatureTarget(cid))
posTile1 = {x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}
posTile2 = {x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}
posTile3 = {x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}
posTile4 = {x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}
posTile5 = {x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}
posTile6 = {x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}
posTile7 = {x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}
posTile8 = {x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}
posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8}

for i=1, #posAll do
	if isWalkable(posAll[i]) then
		doCreateItem(idItem, 1, posAll[i])
	end
end 
addEvent(removeItem, duracao*1000, posAll)

return true
end

function isWalkable(pos, creature, pz, proj)
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
	local creature = getTopCreature(pos)
    if creature.type > 0 then	return false end
	if getTilePzInfo(pos) and not pz then return false end
	local n = not proj and 3 or 2
	for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
	end
return true
end

function removeItem(posAll)
	for i=1, #posAll do
		for j=0, 255 do
			pos_stack = {x=posAll[i].x,y=posAll[i].y,z=posAll[i].z,stackpos=j}
			removeTile = getThingfromPos(pos_stack)
			if removeTile.itemid == idItem then
				doRemoveItem(removeTile.uid)
			end
		end
	end
end

 

 

Link to post
Share on other sites

  • Solution

Tem um jeito bem simples de fazer, já que não funcionou desta forma q falei testa lá e vê se funciona, eu testei e foi se não funcionar desta forma simples ai eu já não sei kkk

 

local storage = 454254
local time = 10.0 -- Exaust da spell

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) -- Aqui coloque o ID do objeto

local arr = {
    {1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1},
    {1, 1, 2, 1, 1},
    {1, 1, 1, 1, 1},
    {1, 1, 1, 1, 1},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
    if exhaustion.check(cid, storage) then
        doPlayerSendCancel(cid, "Exhaustion ...")
        return doSendMagicEffect(getCreaturePosition(cid), 2)
    end
    
    exhaustion.set(cid, storage, time) 
    return doCombat(cid, combat, var)
end

 

dps vai em data/item/items.xml e procura o item e coloca essa tag nele:

 

<attribute key="decayTo" value="0" />
<attribute key="duration" value="XXX" />

muda o xxx pelo tempo q vc quer q o item fique.

 

depois que fazer todas as alterações você terá q reiniciar o server para salvar os novos atributos do item e se quiser uma área menor onde vai criar os item colocque assim:

 

local arr = {
    {0, 0, 0, 0, 0},
    {0, 1, 1, 1, 0},
    {0, 1, 2, 1, 0},
    {0, 1, 1, 1, 0},
    {0, 0, 0, 0, 0},
}
 

 

 

 

 

 

Edited by Spooky Ghost (see edit history)
Link to post
Share on other sites

Eu estava olhando seu script q você postou e tem certeza que não deu erro? pq isso aqui:

 

endfunction isWalkable(pos, creature, pz, proj)

eu nunca vi isso '-'  da um espaço entre o end e function e ve se funciona, ficando assim:

 

end
function isWalkable(pos, creature, pz, proj)

linha 57.

Link to post
Share on other sites

É por isso que eu não gosto de OTX  e.e

Eu testei os 3 script em TFS e foi de boas tanto em 8.60 e 8.54

 

Spoiler

aff.thumb.jpg.691da93110d0e6068aa084577dcb05e6.jpg

 

Faça como eu mude para TFS e seja feliz!

Mas já que não sei o motivo de não funcionar, utilize aquele método dos items.xml e se foi útil marque como melhor reposta para "fechar o tópico".

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Confirmação de Termo