KE

[Talkaction] Só Pode Executar Se Estiver Na Area Correta...

Por kevinsz, 21 de mar. de 2010 em Archived

script
7
844
kevinszK
21 de março de 2010 às 04:46

Pessoal.. tava tentando fazer um script que só pode ser executado em uma determinada area..

Olhe as areas..

 

function onSay(cid)
local area = {
{x=181, y=28, z=7},
{x=182, y=28, z=7},
{x=182, y=29, z=7},
{x=183, y=28, z=7},
{x=183, y=29, z=7},
{x=183, y=30, z=7},
{x=182, y=30, z=7},
{x=181, y=30, z=7},
{x=181, y=29, z=7}
}

 

Como que eu faço pra fazer uma verificação se ta em uma dessas posições?

Editado Março 21 por Focost

MatheusGladM
21 de março de 2010 às 08:48

se tem que fazer isso, eu nao sei se da pra fazer um que cheque todos os sqm mais voce pode fazer varios com essas areas

 

playerposition = {x=181, y=28, z=7}

pp = getPlayerPosition(cid)

 

if pp.x == playerposition.x and pp.y == playerposition.y and pp.z == playerposition.z then

 

....

 

ai se vai fazendo quadradinho por quadradinho por quadradinho

Editado Março 21 por MatheusMkalo

KydraiK
21 de março de 2010 às 18:58

Faz um teste:

function onSay(cid)
local playerPos = getCreaturePosition(cid)
if isInRange(playerPos, {x=181, y=28, z=7}, {x=183, y=30, z=7}) then
	ta na posição
else
	não ta
end
return TRUE
end

 

A função isInRange verifica se a posição está em uma área.

Editado Março 21 por kydrai

kevinszK
21 de março de 2010 às 21:24

@MatheusMkalo

Isso ai eu sei.. Porém o código fica muito extenso.. =/ Mesmo assim valeu por tentar ajudar..

 

@Kydrai

Faz um teste:

function onSay(cid)
local playerPos = getCreaturePosition(cid)
if isInRange(playerPos, {x=181, y=28, z=7}, {x=183, y=30, z=7}) then
	ta na posição
else
	não ta
end
return TRUE
end

 

A função isInRange verifica se a posição está em uma área.

 

 

Na hora de fazer funcionar não deu certo =/

[Error - TalkAction Interface] 
data/talkactions/scripts/teste.lua:onSay
Description: 
data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
stack traceback:
data/lib/032-position.lua:2: in function 'isInRange'
data/talkactions/scripts/teste.lua:27: in function <data/talkactions/scripts/teste.lua:1>

Editado Março 21 por Focost

joaohdJ
22 de março de 2010 às 13:16

Tenta esse:

 

local area = {
     {x=181, y=28, z=7},
     {x=182, y=28, z=7},
     {x=182, y=29, z=7},
     {x=183, y=28, z=7},
     {x=183, y=29, z=7},
     {x=183, y=30, z=7},
     {x=182, y=30, z=7},
     {x=181, y=30, z=7},
     {x=181, y=29, z=7}
}

function onSay(cid, words)

        if isInArray(area, getCreaturePosition(cid)) then
                           doPlayerSendTextMessage(cid,20,"Pode.")
        else
                           doPlayerSendTextMessage(cid,20,"Não pode;")
        end
        return TRUE
        end

 

flw

kevinszK
22 de março de 2010 às 14:08

@Apocarai

Eu já tinha testado assim, porém no seu script só vai ficar aparecendo Não pode;

Mesmo estando em umas das posições.. Fiz até o teste só do seu script.. e mesmo tando na posição aparece não pode;

satan666S
26 de março de 2010 às 11:21

seria isso.

 

function onSay(cid)
local pos,area = getCreaturePosition(cid),
local minx,maxx = 181,183
local miny,maxy = 28,30
local z = 7
if	(pos.z == z)	and
	(pos.x >= minx and maxx <= pos.x)and
	(pos.y >= miny and maxy <= pos.y)then
	return TRUE
else
	return FALSE
end
return TRUE
end