Ir para conteúdo
  • Cadastre-se

(Resolvido)Script não funciona


Ir para solução Resolvido por Spooky Ghost,

Posts Recomendados

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 para o post
Compartilhar em outros 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 para o post
Compartilhar em outros sites

Eu editei poucos scripts para OTX ainda, mas acho que não seja esse o problema, quando você conjura a spell o player fica parado? voce tinha colocado a tag q eu enviei ou a que você estava anteriormente?

Editado por Spooky Ghost (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

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},
}
 

 

 

 

 

 

Editado por Spooky Ghost (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Spooky Ghost Dessa forma funcinou perfeitamente. Obrigado pela ajuda, queria entender poque os outros scripts não funcionaram :hum::hum: pior que tenho mais 2 scripts sem funcionar, no 854 funcionavam normal, mas no 860 tá assim

Editado por MarkCharlotte (veja o histórico de edições)
Link para o post
Compartilhar em outros 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 para o post
Compartilhar em outros 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 para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo