LE
dúvida

Checkar Monstros Em Área E Dar Storage

Por Leoxtibia, 22 de jun. de 2012 em Scripts

script
18
3.6k
LeoxtibiaL
22 de junho de 2012 às 20:48

Aí, será que alguém poderia me dizer como faço para checkar se tem monstros em uma certa área, e caso não tenha, dar storage aos players que estão na área?

O script é uma action que sumona os monstros em uma área, e em seguida...deve dar storage aos players que estão dentro dessa área, caso todos os monstros tenham sidos mortos. Se alguém puder...ajuda aí ^^

Editado Junho 22 por Leoxtibia

VodkartV
22 de junho de 2012 às 21:03

acho que teria que fazer um loop na área

Editado Junho 22 por Vodkart

LeoxtibiaL
22 de junho de 2012 às 21:07

Sim, eu tentei algo do tipo, com algumas coisas a mais.

 

for lugarx = 33,46 do

for lugary = 98,107 do

lugarpos = {x=lugarx, y=lugary, z=8, stackpos=253}

lugarcreature = getThingfromPos(lugarpos)

 

Mas não sei como fazer para verificar se os monstros já estão mortos, e adicionar o storage a todos os players da área =S

Editado Junho 22 por Leoxtibia

VodkartV
22 de junho de 2012 às 21:13

tenta assim:

 

storage,x = 875487, true
local toPosition,fromPosition = {x = 33, y = 98, z = 8},{x = 46, y = 107, z = 8} -- começo e final da area
for x = toPosition.x, fromPosition.x do
for y = toPosition.y, fromPosition.y do
local m = getTopCreature({x=x, y=y, z=fromPosition.z}).uid 
if m ~= 0 and isMonster(m) then
x = false
end
if x == true and m ~= 0 and isPlayer(m) then
setPlayerStorageValue(m,storage,1)
end
end
end

LeoxtibiaL
22 de junho de 2012 às 21:23

Testei, mas não funcionou =S Não deu nenhum erro também. Aqui vai o script:

 

 

 

 

 

 

 

No caso, quero que dê a storage 6456.^^

Editado Junho 23 por Leoxtibia

VodkartV
22 de junho de 2012 às 21:26

você trocou as pos e a storage no script que eu te mandei?

 

posta aqui o script que vc alterou

Editado Junho 22 por Vodkart

LeoxtibiaL
22 de junho de 2012 às 21:36

Sim, troquei sim. Acho que coloquei aquela parte no local errado, teria como mostrar o certo?

VodkartV
22 de junho de 2012 às 21:40

então, me manda o que vc alterou ai pra eu ver como ficou

LeoxtibiaL
23 de junho de 2012 às 11:27

Desculpa aí, minha net tinha caído ontem. Eu tinha colocado depois do end do for, mas não funcionou. =S

Editado Junho 23 por Leoxtibia

VodkartV
23 de junho de 2012 às 11:36

blz, posta como ficou o seu script pra mim ver o erro.

LeoxtibiaL
23 de junho de 2012 às 11:39

Aqui está..

 

 

local porta = {x=29,y=53,z=7}

local portal = {x=28,y=57,z=7}

local fromPos = {x=33, y=54, z=7}

local toPos = {x=35, y=58, z=7}

local position = {x=math.random(fromPos.x,toPos.x), y=math.random(fromPos.y,toPos.y), z=math.random(fromPos.z,toPos.z)}

local monsters = {"Rat", "Rotworm", "Snake"}

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if item.itemid == 1945 then

doTransformItem(item.uid,item.itemid+1)

doTransformItem(getThingfromPos(porta).uid, 5733)

doSendAnimatedText(porta, "CLICK", COLOR_BROWN)

for i=1, #monsters do

doCreateMonster(monsters, position)

end

 

storage,x = 6456, true

local toPosition,fromPosition = {x = 35, y = 58, z = 7},{x = 33, y = 54, z = 7} -- começo e final da area

for x = toPosition.x, fromPosition.x do

for y = toPosition.y, fromPosition.y do

local m = getTopCreature({x=x, y=y, z=fromPosition.z}).uid

if m ~= 0 and isMonster(m) then

x = false

end

if x == true and m ~= 0 and isPlayer(m) then

setPlayerStorageValue(m,storage,1)

end

end

end

 

 

elseif item.itemid == 1946 and getPlayerStorageValue(cid, 6456) >= 1 then

doTransformItem(item.uid,item.itemid-1)

doTransformItem(getThingfromPos(portal).uid, 5733)

doSendAnimatedText(portal, "CLICK", COLOR_BROWN)

else

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem permissão para usar esta alavanca")

end

return true

end

 

 

VincV
23 de junho de 2012 às 11:43

cara porque n usa getSpectators?

VodkartV
23 de junho de 2012 às 11:45

cara porque n usa getSpectators?

 

porque no meu serve não tem essa função!

aproveita que você entende da função e posta como ficaria usando getSpectators.

 

 

@leo

 

Não entendi seu script, está muito confuso, no caso teria que clicar na alavanca novamente para checar se tem os monstro na área, é isso?

Mas se o jogador puxasse a alavanca iria criar mais monstros, ou sejá, ele ficaria infinitamente na sala!

teria que fazer de outro jeito, me explica oque a alavanca tem que fazer...

Editado Junho 23 por Vodkart

LeoxtibiaL
23 de junho de 2012 às 12:04

Então, a primeira alavanca vai sumonar os monstros na área, e alavanca vai se transformar na 1946, assim que o player matar todos os monstros dessa área, vai ser dado o storage para ele usar a alavanca 1946, que abrirá uma passagem.

Editado Junho 23 por Leoxtibia

VincV
23 de junho de 2012 às 12:06

cara achei que isso tinha em todos função mais velha que seila

 

é facil usa

getSpectators(centerPos, rangex, rangey[, multifloor])

 

no caso desse script seria assim

m = getSpectators({x = 34, y = 56,z = 7}, 1, 2)
for i = 1,#m do
if isMonster(m[i]) then
x = false
end