MO
pedido

Teria Como Fazer Isso?

Por MonsterOt, 11 de set. de 2012 em Scripts

script
17
1.9k
MonsterOtM
11 de setembro de 2012 às 10:29
local time = 3.25 -- bota aki só os segundos

local newpos = {x=125,y=47,z=7} -- local para onde o player será teleportado

local events = {} -- não modifique

 

local function doKickPlayer(cid)

if not isCreature(cid) then

events[cid] = nil

return

end

doTeleportThing(cid, newpos, false)

doSendMagicEffect(newpos, 10)

end

 

function onStepIn(cid, item, position, fromPosition)

if events[cid] then stopEvent(events[cid]) end

events[cid] = addEvent(doKickPlayer, time * 60 * 1000, cid)

return true

end

 

Teria como usar isso nesse script?

 

local config = {

fromPos = {x=118, y=49, z=6}, -- posição superior esquerda do mapa

toPos = {x=126, y=53, z=6}, -- posição inferior direita do mapa

}

 

pra macar uma area onde o player pode ficar sómente um certo tempo..

Editado Setembro 11 por MonsterOt

NoninhouhN
11 de setembro de 2012 às 16:29

Não entendo muito dessas paradas de script mas não custa tentar:

 

if isPlayer(getThingFromPos(fromPos)getThingToPos(toPos)) then

 

 

 

Ficando +/- assim:

 

function onStepIn(cid, item, position, fromPosition)

if events[cid] then stopEvent(events[cid]) end

if isPlayer(getThingFromPos(fromPos)getThingToPos(toPos)) then

events[cid] = addEvent(doKickPlayer, time * 60 * 1000, cid)

return true

end

 

 

 

Não tenhu ctz se vai dar certo...

Editado Setembro 11 por Noninhouh

NewtonnotwenN
11 de setembro de 2012 às 17:50

Use assim:

local time = 3.25 -- bota aki só os segundos

local newpos = {x=125,y=47,z=7}

local events = {} -- não modifique

 

local seilar = {x = 100, y = 100, z = 7}

local seilas = {x = 100, y = 100, z = 7}

 

function back(cid)

 

if isInArea(getCreaturePosition(cid), seilar, seilas) then

doTeleportThing(cid, newpos)

end

end

 

if isPlayer(cid) then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 1000, pid) ---- tempo (1000 = 1 segundo)

doSendMagicEffect(getCreaturePosition(pid), 10) --- Efeito

end

 

return true

end

Editado Setembro 11 por Newtonnotwen

MonsterOtM
11 de setembro de 2012 às 19:51

bota isso no creaturescripts?

NewtonnotwenN
11 de setembro de 2012 às 21:07

Não, ponha em movements, e adicione o actionid em um tile, quando o player pisar irá retornar ao lugar após tanto tempo.

 

Mais esqueci de adicionar isto no script:

 

Em data/movements/scripts crie um arquivo.lua nomeie para comeback e adicione:

function onStepIn(cid, item)

 

local time = 3.25 -- bota aki só os segundos

local newpos = {x=125,y=47,z=7}

local events = {} -- não modifique

 

local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar

local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar

 

function back(cid)

 

if isInArea(getCreaturePosition(cid), seilar, seilas) then

doTeleportThing(cid, newpos)

end

end

 

if isPlayer(cid) then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 1000, pid) ---- tempo (1000 = 1 segundo)

doSendMagicEffect(getCreaturePosition(pid), 10) --- Efeito (/z)

end

 

return true

 

end

Editando:

 

-Verde: Variáveis, qualquer duvida pergunte.

 

Em movements.xml adicione:

<movevent type="StepIn" actionid="1755" event="script" value="comeback.lua"/>

Se não souber adicionar o tile no RME pergunte.

Editado Setembro 11 por Newtonnotwen

MonsterOtM
11 de setembro de 2012 às 21:33

@Duvida

 

local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar

local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar

 

Nao entendi, na hora que pisa no tile ira começa um tempo nesse local que esta marcado ai em cima?

 

Nao tem como fazer isso só que com esse script?

ai só adicionar o tempo e tal que nao sei faze '-'

 

local config = {

fromPos = {x=118, y=49, z=6}, -- posição superior esquerda do mapa, da area em que esta mapeado o sistema.

toPos = {x=126, y=53, z=6}, -- posição inferior direita do mapa, da area em que esta mapeado o sistema.

areaGain = {x=122, y=47, z=6} -- area que ele sera teleportado, depois do tempo

}

 

function onThink(interval, lastExecution, thinkInterval)

local playersInArea = getPlayerInArea(config.fromPos, config.toPos)

if #playersInArea == 1 then

doTeleportThing(playersInArea[1], config.areaGain)

doSendMagicEffect(getCreaturePosition(playersInArea[1]), 10)

end

return true

end

 

function getPlayerInArea(fromPos, toPos)

local online = getPlayersOnline()

local players = {}

for i=1, #online do

if isInArea(getPlayerPosition(online), fromPos, toPos) then

players[#players+1] = online

end

end

return players

end

NewtonnotwenN
11 de setembro de 2012 às 21:48

É dessa posição: local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar

 

Até essa: local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar

 

Ou seja, todos tiles que estiverem entre essas duas posições será teleportado, assim sendo:

 

local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar --- Seria o tile mais a esquerda de cima.

local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar ---- Seria o tile mais direita de baixo.

Editado Setembro 11 por Newtonnotwen

MonsterOtM
11 de setembro de 2012 às 22:30

Deu esse erro:

 

http://imageshack.us/photo/my-images/594/errobh.png/

NewtonnotwenN
11 de setembro de 2012 às 22:48

Esqueci um end, coloca assim:

 

function onStepIn(cid, item)

 

local time = 3.25 -- bota aki só os segundos

local newpos = {x=125,y=47,z=7}

local events = {} -- não modifique

local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar

local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar

 

if not isCreature(cid) then return LUA_ERROR end

function back(cid)

 

if isInArea(getCreaturePosition(cid), seilar, seilas) then

doTeleportThing(cid, newpos)

end

end

 

if isPlayer(cid) then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 1000, pid) ---- tempo (1000 = 1 segundo)

doSendMagicEffect(getCreaturePosition(pid), 10) --- Efeito (/z)

end

 

return true

 

end

Editado Setembro 11 por Newtonnotwen

MonsterOtM
11 de setembro de 2012 às 23:14

continua dando o mesmo erro

NewtonnotwenN
11 de setembro de 2012 às 23:36

Acho que adicionei uma função atoa, esse deve funcionar:

 

local time = 3.25 -- bota aki só os segundos

local newpos = {x=125,y=47,z=7} --- onde ira teleporat

local events = {} -- não modifique

local seilar = {x = 100, y = 100, z = 7} --- de onde para teleportar

local seilas = {x = 100, y = 100, z = 7} --- ate onde para teleportar

 

function back(cid)

 

if isInArea(getCreaturePosition(cid), seilar, seilas) then

doTeleportThing(cid, newpos)

end

end

 

if isPlayer(cid) then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 1000, pid) ---- tempo (1000 = 1 segundo)

doSendMagicEffect(getCreaturePosition(pid), 10) --- Efeito (/z)

end

 

return true

 

end

MonsterOtM
11 de setembro de 2012 às 23:41

agora deu esse erro

 

http://imageshack.us/photo/my-images/145/errow.png/

NewtonnotwenN
12 de setembro de 2012 às 00:01

Testado, funcionou esse:

 

Em data/movements/scripts:

 

comeback.lua:

function onStepIn(cid, item)

 

if isPlayer(cid) then

addEvent(doCreatureExecuteTalkAction, 1, cid, 'hfsaufhsajf82', true)

end

return true

end

Em movements.xml:

<movevent type="StepIn" actionid="1755" event="script" value="comeback.lua"/>

Em data/talkactions/scripts:

 

talkacome.lua

function onSay(cid, words, param)

local to = {x = 666, y = 1031, z = 15} -- Para onde levara o player

local area1 = {x = 661, y = 1026, z = 15} -- Ponta de cima na esquerda na area que o tp leva

local area2 = {x = 671, y = 1036, z = 15} -- Ponta de baixo na direita na area que o tp leva

 

function back(cid)

if isInArea(getCreaturePosition(cid), area1, area2) then

doTeleportThing(cid, to)

end

end

 

if isPlayer(cid) then

addEvent(back, 5000, cid) -- tempo (1000 = segundo)

end

return true

 

end

Em talkactions.xml adicione:

<talkaction words="hfsaufhsajf82" event="script" value="talkcome.lua"/>

Editado Setembro 12 por Newtonnotwen

MonsterOtM
12 de setembro de 2012 às 00:22

Nao Funcionou =(

 

fiquei mais de 5 segundos nessa area

 

 

 

local area1 = {x = 128, y = 41, z = 7} -- Ponta de cima na esquerda na area que o tp leva

local area2 = {x = 140, y = 57, z = 7} -- Ponta de baixo na direita na area que o tp leva

 

e nao levo para essa

 

local to = {x = 125, y = 47, z = 7} -- Para onde levara o player
NewtonnotwenN
12 de setembro de 2012 às 00:26

Você pisou no tile com o action id?