SA
pedido

Script meio complicado.

Por SamueLGuedes, 09 de jan. de 2014 em Scripts

..
script
37
2.4k
zipter98Z
10 de janeiro de 2014 às 20:24

Opa, acho que já encontrei o erro. Fui testar novamente, deu esse erro. Aí, fiz umas coisinhas no código, e funcionou perfeitamente.

 

 

function checkMonsters(area1, area2, pos, aid)
local monstros = getMonstersInArea(area1, area2)
local continue = true
    if #monstros < 1 then
        continue = false
        local a = doCreateItem(1945, 1, pos)
        doItemSetAttribute(a, "aid", aid)
        doSendMagicEffect(pos, 14)
    end
    if continue == true then
        addEvent(checkMonsters, 1000, area1, area2, pos, aid)
    end
end   
function getMonstersInArea(area1, area2)
local monsters = {} 
    for x = area1.x, area2.x do
        for y = area1.y, area2.y do
            for z = area1.z, area2.z do
                monsterpos = {x=x,y=y,z=z,stackpos=253}
                monster = getThingFromPos(monsterpos)
                if ehMonstro(monster.uid) then
                    table.insert(monsters, monster.uid)
                end
            end
        end
    end
    return monsters
end
local function getRecorderPlayer(pos, cid)
local ret = 0
if cid and isPosEqual(getThingPos(cid), pos) then
return cid
end
local s = {}
s.x = pos.x
s.y = pos.y
s.z = pos.z
for a = 0, 255 do
s.stackpos = a
local b = getTileThingByPos(s).uid
if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
ret = b
end
end
return ret
end
 
------------[[ Configurações. ]]------------
local cfg = {
{1, {x = 1056, y = 1056, z = 7}, {x = 1056, y = 1057, z = 7}}, --{valor da storage do clan, posição que o jogador deve ficar, posição para qual o mesmo será teleportado},
{2, {x = 1057, y = 1056, z = 7}, {x = 1056, y = 1058, z = 7}},
{3, {x = 1058, y = 1056, z = 7}, {x = 1056, y = 1059, z = 7}},
{4, {x = 1059, y = 1056, z = 7}, {x = 1056, y = 1060, z = 7}},
{5, {x = 1060, y = 1056, z = 7}, {x = 1056, y = 1061, z = 7}},
{6, {x = 1061, y = 1056, z = 7}, {x = 1056, y = 1062, z = 7}},
{7, {x = 1062, y = 1056, z = 7}, {x = 1056, y = 1063, z = 7}},
{8, {x = 1063, y = 1056, z = 7}, {x = 1056, y = 1064, z = 7}},
{9, {x = 1064, y = 1056, z = 7}, {x = 1056, y = 1065, z = 7}},
}
 
local rank = {
need = true, --Precisará estar em x rank? [true/sim] [false/não]
what_rank = 5, --Se colocar true acima, configure aqui o rank necessário.
}
-----------[[ Fim das configurações. ]]---------
 
function onUse(cid, item, frompos, item2, topos)
      
    for a, b in pairs(cfg) do
        local pos = getRecorderPlayer(b[2])
        if not isPlayer(pos) then
            return doPlayerSendCancel(cid, "One or more players aren't in the correct clan's place.")
        elseif rank.need == true then
            if getPlayerStorageValue(pos, 862281) <= (rank.what_rank - 1) then
                return doPlayerSendCancel(cid, "One or more players aren't at rank "..rank.what_rank..".")
            end
        end
    end
 
    for c, d in pairs(cfg) do
        local pos = getRecorderPlayer(d[2])
        doTeleportThing(pos, d[3])
        doPlayerSendTextMessage(pos, 27, "Good luck!")
        doSendMagicEffect(getThingPos(pos), 14)
        addEvent(function()
            local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}}
            local posi = {x = 1049, y = 1054, z = 7}       --Coordenadas da posição superior esquerda da área.
            local posis = {x = 1057, y = 1061, z = 7}      --Coordenadas da posição inferior direita da área.
            local pos = {x = 1053, y = 1058, z = 7}        --Onde a alavanca será criada.
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
            checkMonsters(posi, posis, pos, 19381)
        end, 5*1000)
    end
    return true
end

 

 

Editado Janeiro 10 por zipter98

SamueLGuedesS
10 de janeiro de 2014 às 21:53

Ok vo testar daki a poko, ai eu mando resposta =D.


Tipo assim, eu cliquei pra ir na quest, tudo bem apareceu os pokes ea alavanca, OBS: a alavanca aparece ao mesmo tempo que os pokes, poderia colocar pra aparecer quando mata-se?, continuando apareceu a alavanca, eu cliquei nela, ai os pokes apareceram de novo, mas a proxima alavanca nao. e normal isso?

zipter98Z
11 de janeiro de 2014 às 13:29

Como assim? A alavanca está aparecendo ao mesmo tempo que os pokémons? Ué, aqui tá funcionando do jeito que programei: após matar a wave de pokémons, uma alavanca aparece. 5 segundos após clicar nela, aparecerá a nova wave. E assim vai. Só que na última wave, a alavanca criada não terá uso.

Está usando qual base? PDA?

De qualquer maneira, só você confirmar se está ocorrendo esse erro (não sei como, já que está tudo programado certo, e, até porquê, como já disse, aqui está perfeito), que faço uma proteçãozinha.

Editado Janeiro 11 por zipter98

SamueLGuedesS
11 de janeiro de 2014 às 13:38

Tipo assim, eu uso PDA, ai quando eu clico na alavanca para todo mundo ir na quest. aparece os dois pokes por primeiro, e aparece a alavanca junto com eles, ai eu mato os pokes. ai eu clico na alavanca de novo, e nao acontece nada.

zipter98Z
11 de janeiro de 2014 às 13:42

Erro no console?

Ah, poderia verificar se a nova alavanca possui o actionid programado para assumir?

Editado Janeiro 11 por zipter98

SamueLGuedesS
11 de janeiro de 2014 às 13:44

Eu nao vi, vo ver pera ai.

 

 

@EDIT

 

nenhum erro, ta normal o console.

Editado Janeiro 11 por Bolz

zipter98Z
11 de janeiro de 2014 às 15:39

Resolvido pelo Skype.

 

Caso os códigos que passei anteriormente estejam funcionando, não precisa alterar. Altere apenas se NÃO estiver.

Vale relembrar que a "primeira versão" dos códigos se encontram em meu primeiro comentário desta página, juntamente com a explicação. Estão todos editados, da maneira que testei em meu servidor.

 

Código de entrada na Outland Main Quest:

 

 

function checkMonsters(area1, area2, pos, aid)
local monstros = getMonstersInArea(area1, area2)
local continue = true
    if #monstros < 1 then
        continue = false
        local a = doCreateItem(1945, 1, pos)
        doItemSetAttribute(a, "aid", aid)
        doSendMagicEffect(pos, 14)
    end
    if continue == true then
        addEvent(checkMonsters, 1000, area1, area2, pos, aid)
    end
end   
function getMonstersInArea(area1, area2)
local monsters = {} 
    for x = area1.x, area2.x do
        for y = area1.y, area2.y do
            for z = area1.z, area2.z do
                monsterpos = {x=x,y=y,z=z,stackpos=253}
                monster = getThingFromPos(monsterpos)
                if ehMonstro(monster.uid) then
                    table.insert(monsters, monster.uid)
                end
            end
        end
    end
    return monsters
end
local function getRecorderPlayer(pos, cid)
local ret = 0
if cid and isPosEqual(getThingPos(cid), pos) then
return cid
end
local s = {}
s.x = pos.x
s.y = pos.y
s.z = pos.z
for a = 0, 255 do
s.stackpos = a
local b = getTileThingByPos(s).uid
if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
ret = b
end
end
return ret
end
 
------------[[ Configurações. ]]------------
local cfg = {
{1, {x = 1056, y = 1056, z = 7}, {x = 1056, y = 1057, z = 7}}, --{valor da storage do clan, posição que o jogador deve ficar, posição para qual o mesmo será teleportado},
{2, {x = 1057, y = 1056, z = 7}, {x = 1056, y = 1058, z = 7}},
{3, {x = 1058, y = 1056, z = 7}, {x = 1056, y = 1059, z = 7}},
{4, {x = 1059, y = 1056, z = 7}, {x = 1056, y = 1060, z = 7}},
{5, {x = 1060, y = 1056, z = 7}, {x = 1056, y = 1061, z = 7}},
{6, {x = 1061, y = 1056, z = 7}, {x = 1056, y = 1062, z = 7}},
{7, {x = 1062, y = 1056, z = 7}, {x = 1056, y = 1063, z = 7}},
{8, {x = 1063, y = 1056, z = 7}, {x = 1056, y = 1064, z = 7}},
{9, {x = 1064, y = 1056, z = 7}, {x = 1056, y = 1065, z = 7}},
}
 
local rank = {
need = true, --Precisará estar em x rank? [true/sim] [false/não]
what_rank = 5, --Se colocar true acima, configure aqui o rank necessário.
}
-----------[[ Fim das configurações. ]]---------
 
function onUse(cid, item, frompos, item2, topos)
      
    for a, b in pairs(cfg) do
        local pos = getRecorderPlayer(b[2])
        if not isPlayer(pos) then
            return doPlayerSendCancel(cid, "One or more players aren't in the correct clan's place.")
        elseif rank.need == true then
            if getPlayerStorageValue(pos, 862281) <= (rank.what_rank - 1) then
                return doPlayerSendCancel(cid, "One or more players aren't at rank "..rank.what_rank..".")
            end
        end
    end
 
    for c, d in pairs(cfg) do
        local pos = getRecorderPlayer(d[2])
        doTeleportThing(pos, d[3])
        doPlayerSendTextMessage(pos, 27, "Good luck!")
        doSendMagicEffect(getThingPos(pos), 14)
        addEvent(function()
            local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}}
            local posi = {x = 1049, y = 1054, z = 7}       --Coordenadas da posição superior esquerda da área.
            local posis = {x = 1057, y = 1061, z = 7}      --Coordenadas da posição inferior direita da área.
            local pos = {x = 1053, y = 1058, z = 7}        --Onde a alavanca será criada.
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
        end, 5*1000)
        addEvent(function()
            local posi = {x = 1049, y = 1054, z = 7}       --Coordenadas da posição superior esquerda da área.
            local posis = {x = 1057, y = 1061, z = 7}      --Coordenadas da posição inferior direita da área.
            local pos = {x = 1053, y = 1058, z = 7}        --Onde a alavanca será criada.
            checkMonsters(posi, posis, pos, 19381)
        end, 5500)
    end
    return true
end

 

 

Código das waves 2 em diante:

function checkMonsters(area1, area2, pos, aid)
local monstros = getMonstersInArea(area1, area2)
local continue = true
    if #monstros < 1 then
        continue = false
        local a = doCreateItem(1945, 1, pos)
        doItemSetAttribute(a, "aid", aid)
        doSendMagicEffect(pos, 14)
    end
    if continue == true then
        addEvent(checkMonsters, 1000, area1, area2, pos, aid)
    end
end   
function getMonstersInArea(area1, area2)
local monsters = {} 
    for x = area1.x, area2.x do
        for y = area1.y, area2.y do
            for z = area1.z, area2.z do
                monsterpos = {x=x,y=y,z=z,stackpos=253}
                monster = getThingFromPos(monsterpos)
                if ehMonstro(monster.uid) then
                    table.insert(monsters, monster.uid)
                end
            end
        end
    end
    return monsters
end
 
function onUse(cid, item, frompos, item2, topos)
 
local aids = {19381, 19382, 19383, 19384}   --Action IDs.
local posi = {x = 1049, y = 1054, z = 7}       --Coordenadas da posição superior esquerda da área.
local posis = {x = 1057, y = 1061, z = 7}      --Coordenadas da posição inferior direita da área.
local pos = {x = 1053, y = 1058, z = 7}         --Onde a alavanca será criada.
 
    if not isInArray(aids, item.actionid) then return true end
local new_aid = item.actionid + 1
 
    if item.actionid == aids[1] then
        local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}, {"Caterpie", {x = 1052, y = 1058, z = 7}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
        end, 5*1000)
        addEvent(function()
            checkMonsters(posi, posis, pos, new_aid)
        end, 5500)
    elseif item.actionid == aids[2] then
        local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}, {"Caterpie", {x = 1052, y = 1058, z = 7}}, {"Metapod", {x = 1053, y = 1058, z = 7}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
        end, 5*1000)
        addEvent(function()
            checkMonsters(posi, posis, pos, new_aid)
        end, 5500)
    elseif item.actionid == aids[3] then
        local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}, {"Caterpie", {x = 1052, y = 1058, z = 7}}, {"Metapod", {x = 1053, y = 1058, z = 7}}, {"Butterfree", {x = 1054, y = 1058, z = 7}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
        end, 5*1000)
        addEvent(function()
            checkMonsters(posi, posis, pos, new_aid)
        end, 5500)
    elseif item.actionid == aids[4] then
        local monsters = {{"Pikachu", {x = 1050, y = 1058, z = 7}}, {"Magikarp", {x = 1051, y = 1058, z = 7}}, {"Caterpie", {x = 1052, y = 1058, z = 7}}, {"Metapod", {x = 1053, y = 1058, z = 7}}, {"Butterfree", {x = 1054, y = 1058, z = 7}}, {"Mewtwo", {x = 1055, y = 1058, z = 7}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
        end, 5*1000)
        addEvent(function()
            checkMonsters(posi, posis, pos, new_aid)
        end, 5500)
    end
    return true
end

Editado Janeiro 11 por zipter98