FI
dúvida

Portal Depois Da Luta...

Por Fillzy, 29 de set. de 2012 em Scripts

13
1.7k
FillzyF
29 de setembro de 2012 às 08:41

Gostaria de saber como fazer um teleport (portal) aparecer quando um player matasse um monstro em um quarto fechado, ou remover uma parece para q ele possa sair da sala tbm.

Alguem tem como me ajudar nisso?

LuckOakeL
29 de setembro de 2012 às 12:40

Tenho esse script aqui:

 

creaturescripts.xml:

 

<event type="death" name="MonsterTeleport" script="monsterteleport.lua"/>

 

monsterteleport.lua:

 

local tpId = 1387

local tps = {

["Monster"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30},

}

 

function removeTp(tp)

local t = getTileItemById(tp.pos, tpId)

if t then

doRemoveItem(t.uid, 1)

doSendMagicEffect(tp.pos, CONST_ME_POFF)

end

end

 

function onDeath(cid)

local tp = tps[getCreatureName(cid)]

if tp then

doCreateTeleport(tpId, tp.toPos, tp.pos)

doCreatureSay(cid, "O teleport irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1)

addEvent(removeTp, tp.time*1000, tp)

end

return TRUE

end

 

 

No monstro, adicione isso antes de </monster>:

 

<script>
<event name="MonsterTeleport"/>
</script>

 

Configs:

 

Vermelho: Nome do Monstro

Verde: Posição onde o teleport aparecerá

Amarelo: Posição de onde o teleport levará o player

Azul: Tempo até o teleport sumir

 

Editado Setembro 29 por LuckOake

FillzyF
30 de setembro de 2012 às 11:55

Eu testei aqui cara, não deu certo não, eu mato o monster e não acontece nada...

brigado pela ajuda, mas tem alguma solução pra isso? tentei outros scripts tbm mas nada ta fucionando...

jhon992J
30 de setembro de 2012 às 13:22

Não parei pra analisar o script do @LuckOake, mais usei como base.

Créditos pra ele então.

 

Vai em data/creaturescripts/scripts duplica um arquivo e nomeia para "tpKill" sem as aspas e nele cole:

local tpId = 1387
local tps = {
   ["Demon"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30}
}

function onKill(cid, target, lastHit)
local monster = getCreatureName(target)
if tps[monster] then
   doCreateTeleport(tpId, tps[monster].toPos, tps[monster].pos)
   doCreatureSay(cid, "O teleport irá sumir em ".. tps[monster].time .." segundos.", TALKTYPE_ORANGE_1)
   addEvent(removeTp, tps[monster].time*1000, tps[monster].pos)
end
return true
end

function removeTp(pos)
local position = {x=pos.x,y=pos.y,z=pos.z,stackpos=0}
for i=1, 255 do
   position.stackpos = i
   local tile = getTileThingByPos(pos)
   if tile.itemid == tpId then
       doRemoveItem(tile.uid)
   end
end
return true
end

 

Agora em creaturescripts.xml cole a tag:

<event type="kill" name="TpKill" event="script" value="tpKill.lua"/>

 

E no arquivo creaturescripts/scripts/login.lua antes do último return true cole a tag:

registerCreatureEvent(cid, "TpKill")

JuAnXtIbIaJ
30 de setembro de 2012 às 13:34

soque isso e um pedido nao duvida.

VodkartV
30 de setembro de 2012 às 14:59

soque isso e um pedido nao duvida.

 

se não for ajuda não comenta nada, rep- pela infração, criança.

JuAnXtIbIaJ
30 de setembro de 2012 às 15:12

não me chama de criança seu bosta

FillzyF
30 de setembro de 2012 às 16:38

Não parei pra analisar o script do @LuckOake, mais usei como base.

Créditos pra ele então.

 

Vai em data/creaturescripts/scripts duplica um arquivo e nomeia para "tpKill" sem as aspas e nele cole:

local tpId = 1387
local tps = {
["Demon"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30}
}

function onKill(cid, target, lastHit)
local monster = getCreatureName(target)
if tps[monster] then
doCreateTeleport(tpId, tps[monster].toPos, tps[monster].pos)
doCreatureSay(cid, "O teleport irá sumir em ".. tps[monster].time .." segundos.", TALKTYPE_ORANGE_1)
addEvent(removeTp, tps[monster].time*1000, tps[monster].pos)
end
return true
end

function removeTp(pos)
local position = {x=pos.x,y=pos.y,z=pos.z,stackpos=0}
for i=1, 255 do
position.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid == tpId then
	doRemoveItem(tile.uid)
end
end
return true
end

 

Agora em creaturescripts.xml cole a tag:

<event type="kill" name="TpKill" event="script" value="tpKill.lua"/>

 

E no arquivo creaturescripts/scripts/login.lua antes do último return true cole a tag:

registerCreatureEvent(cid, "TpKill")

 

 

Po cara, brigadão, finalmente fucionou...queria te da um +rep, mas não sei como, to procurando aki kkkkkk

Valeu ae cara :)

 

hum, tentei multiplicar esse script (pra criar o mesmo tipo de ação, mas em outro lugar)..porém não deu certo..

jhon992J
30 de setembro de 2012 às 16:42

Não precisa multiplicar o script, basta adicionar novas pos no msm script desse modo:

 

local tps = {
   ["Demon"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30},
   ["Dragon"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30},
   ["Rat"] = {pos = {x=16260, y=256, z=7}, toPos = {x = 16396, y = 223, z = 7}, time = 30}
}

 

Como no exemplo, se adiciona virgulas no final de cada tag para poder colocar outra em baixo.

 

E o rep é só clicar na "setinha verde" abaixo de um post de alguém que você queira reputar.

FillzyF
30 de setembro de 2012 às 17:48

local tpId = 1387
local tps = {
["Demon"] = {pos = {x=880, y=1313, z=7}, toPos = {x = 872, y = 1316, z = 7}, time = 60}
["Cyclops"] = {pos = {x=695, y=1209, z=7}, toPos = {x = 673, y = 1219 , z = 7}, time = 60}
}
function onKill(cid, target, lastHit)
local monster = getCreatureName(target)
if tps[monster] then
   doCreateTeleport(tpId, tps[monster].toPos, tps[monster].pos)
   doCreatureSay(cid, "Good job, leave this area in ".. tps[monster].time .." seconds.", TALKTYPE_ORANGE_1)
   addEvent(removeTp, tps[monster].time*1000, tps[monster].pos)
end
return true
end
function removeTp(pos)
local position = {x=pos.x,y=pos.y,z=pos.z,stackpos=0}
for i=1, 255 do
   position.stackpos = i
   local tile = getTileThingByPos(pos)
   if tile.itemid == tpId then
    doRemoveItem(tile.uid)
   end
end
return true
end

 

 

Fiz assim, mas esse erro ta aparecendo:

 

cannot open ...Tpkill...

} expected <to close { at line 2) near [

 

achei muito estranho pq na segunda linha não tem nenhum [

15790911
30 de setembro de 2012 às 17:51

Cara, começa a usar a barrinha search.... Tem uma ótima funçao hehe...

Aki o do Vodkart:

Aí ele manda os scripts de matar monstros abrir tp / Remover parede / ganhar storage..

 

http://www.xtibia.com/forum/topic/134875-matar-monstro-abrir-tp-remover-parede-ganhar-storage/page__st__20

LuckOakeL
30 de setembro de 2012 às 19:45

 

local tpId = 1387

local tps = {

["Demon"] = {pos = {x=880, y=1313, z=7}, toPos = {x = 872, y = 1316, z = 7}, time = 60},

["Cyclops"] = {pos = {x=695, y=1209, z=7}, toPos = {x = 673, y = 1219 , z = 7}, time = 60}

}

function onKill(cid, target, lastHit)

local monster = getCreatureName(target)

if tps[monster] then

doCreateTeleport(tpId, tps[monster].toPos, tps[monster].pos)

doCreatureSay(cid, "Good job, leave this area in ".. tps[monster].time .." seconds.", TALKTYPE_ORANGE_1)

addEvent(removeTp, tps[monster].time*1000, tps[monster].pos)

end

return true

end

function removeTp(pos)

local position = {x=pos.x,y=pos.y,z=pos.z,stackpos=0}

for i=1, 255 do

position.stackpos = i

local tile = getTileThingByPos(pos)

if tile.itemid == tpId then

doRemoveItem(tile.uid)

end

end

return true

end

 

 

Faltou uma vírgula.

 

Toda vez que você adicionar um novo monstro na tabela, coloque uma vírgula no final.

FillzyF
01 de outubro de 2012 às 16:41

muito estranho, agora não ta dando nenhum erro, mas só ta fucionando com o demon, o cyclops morre e não acontece nada, ja vi as coordenadas e estavam corretas, vi os scripts tbm, parecem estar corretos... alguem sabe o porque disso?

 

Consegui resolver um problema... era bobo (como eu imaginava)...Faltava uma letra maiuscula no nome do monster na data..

Brigadão ai a todos que me ajudaram.