Ir para conteúdo
  • 0

Script meio complicado.


SamueLGuedes

Pergunta

Iaew galera tudo bem, hj vim pedi uns script que eu acho que e meio complicado. e para pokemon.

 

1º o primeiro eo seguinte, eu queria um script que quando passase pelo teleport, ou piso. ele nao pude-se mais usar Fly nem surf, nem ride. isso seria para outland, para os players nao voarem.

 

2º eu queria saber se tem como incrementar esse script do zipter < acho que e esse o nick dele nao me lembro. que e esse aqui:

 

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)
end
return true
end

 

 

tipo assim que quando puxa-se a alavanca sumona-se pokemons no local que os players estao indo. e tipo assim que tivesse tempo para eles aparecerem. tipo eu puxei a alavanca, ai passa 5 segundos começa a aparecer pokemons.

 

3º que quando terminasse de matar os pokes, ganha-se uma storage para poder puxar a proxima alavanca.

 

eu acho que e bem dificil de fazer esses scripts, mais sei la se alguem puder ajudar, eu agradeçeria muito. obrigado e abraçs. aguardando comentarios.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Substitua esta parte do order.lua de actions por essa:

----START FLY or RIDE or LEVITATE ---------
if (item2.uid == cid or getRecorderPlayer(topos) == cid) and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["ride"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then
--alterado v1.8 >>
if getPlayerStorageValue(cid, 6598754) == 1 or getPlayerStorageValue(cid, 6598755) == 1 then
return doPlayerSendCancel(cid, "You can't do it while in the PVP Zone!") --alterado v1.7
end
 
if #getCreatureSummons(cid) > 1 then --alterado v1.9
return doPlayerSendCancel(cid, "You can't do it right now!")
end
 
    if getPlayerStorageValue(cid, 91831) >= 1 then
        return doPlayerSendCancel(cid, "Você não pode usar fly/ride agora.")
    end
    
if getPlayerStorageValue(cid, 52480) >= 1 then
return doPlayerSendCancel(cid, "You can't do it while a duel!") --alterado v1.6
end
 
if getPlayerStorageValue(cid, 5700) >= 1 then --alterado v1.9
doPlayerSendCancel(cid, "You can't do that while is mount in a bike!")
return true
end
 
if getPlayerStorageValue(cid, 22545) >= 1 and (isInArray(skills["fly"], getPokemonName(mysum)) or isInArray(skills["levitate_fly"], getPokemonName(mysum))) then
return doPlayerSendCancel(cid, "You can't do that while in the Golden Arena!") --alterado v1.8
end
 
local pct = getCreatureHealth(mysum) / getCreatureMaxHealth(mysum)
doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "hp", 1 - pct)
 
if isInArray(skills["fly"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["fly"][math.random(1, #txt["fly"])].."", 1)
addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))
elseif isInArray(skills["levitate_fly"], getPokemonName(mysum)) then
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["levitate_fly"][math.random(1, #txt["levitate_fly"])].."", 1) --alterado v1.8
addEvent(goThere, 500, mysum, topos, "fly", isCreature(getCreatureTarget(cid)))
else
doPlayerSay(cid, ""..getPokeName(mysum)..", "..txt["ride"][math.random(1, #txt["ride"])].."", 1)
addEvent(goThere, 500, mysum, topos, "ride", isCreature(getCreatureTarget(cid)))
end
 
return true
end
E o movement:
function onStepIn(cid, item, position, fromPosition)
 
    if getPlayerStorageValue(cid, 91831) >= 1 then
        doPlayerSendTextMessage(cid, 27, "Agora você pode usar fly/ride.")
        setPlayerStorageValue(cid, 91831, -1)
    else
        doPlayerSendTextMessage(cid, 27, "Agora você não pode usar fly/ride.")
        setPlayerStorageValue(cid, 91831, 1)
    end
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Ok zipter vo testar aqui.

 

 

@edit

 

funciono aqui vlw cara.

 

agora uma duvida, o script que o amoeba edito:

 

 

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 = 2349, y = 2480, z = 14}, {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 = 2345, y = 2477, z = 14}, {x = 1056, y = 1058, z = 7}},
{3, {x = 2353, y = 2477, z = 14}, {x = 1056, y = 1059, z = 7}},
{4, {x = 2346, y = 2480, z = 14}, {x = 1056, y = 1060, z = 7}},
{5, {x = 2352, y = 2474, z = 14}, {x = 1056, y = 1061, z = 7}},
{6, {x = 2346, y = 2474, z = 14}, {x = 1056, y = 1062, z = 7}},
{7, {x = 2352, y = 2480, z = 14}, {x = 1056, y = 1063, z = 7}},
{8, {x = 2349, y = 2474, z = 14}, {x = 1056, y = 1064, z = 7}},
{9, {x = 2349, y = 2477, z = 14}, {x = 2438, y = 2493, z = 12}},
}

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])
addEvent(doCreateMonster, 5000, "Pikachu", d[3])
doPlayerSendTextMessage(pos, 27, "Good luck!")
doSendMagicEffect(getThingPos(pos), 14)
end
return true
end

 

tipo assim eu queria que pudesse escolher aonde que vai aparecer cada pokemon. que no caso ali eu ia fazer aparecer uns 15 pokemon. ai eu queria escolher aonde eles iriam aparecer.

 

e que esse script:

 

 

local fromPoss, toPoss = {x=2427, y=2487, z=15}, {x=2450, y=2487, z=15}
local posAlavanca = {x=2438, y=2492, z=15}
local alavancaActionId = 3231
local monstrosNaArea = 15 -- Quantos monstros precisam ser mortos ali pra aparecer a alavanca?

function onKill(cid, target, lastHit)
    if isPlayer(cid) and isMonster(target) then
        if isInArea(getThingPos(target), fromPoss, toPoss) then
            if getGlobalStorageValue(238192) <= monstrosNaArea-3 then
                setGlobalStorageValue(getGlobalStorageValue(238192)+1)
            elseif getGlobalStorageValue(238192) == monstrosNaArea-2 then
                local alavanca = doCreateItem(1946, 1, posAlavanca)
                doItemSetAttribute(alavanca, "aid", alavancaActionId)
                doCreatureSay(target, "Uma alavanca foi criada!")
                setGlobalStorageValue(238192, 0)
            end
        end
    end
    return true
end

 

estivesse ligado ao primeiro script ali. se possivel e claro

Editado por Bolz
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, onKill/onDeath não funcionam em PDA. No caso, você teria que "mover" esse código para exp2.0.lua.

Sobre este seu outro pedido, vou ver o quê posso fazer.

Link para o comentário
Compartilhar em outros sites

  • 0

Basta fazer tudo corretamente, que irá funcionar.

Troque aquele seu código da alavanca da Outland Main por esse:

 

 

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

 

 

 

Depois, crie um arquivo .lua em data/actions/scripts, com o seguinte conteúdo:

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[1], monsters[2])
end
checkMonsters(posi, posis, pos, new_aid)
end, 5*1000)
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[1], monsters[2])
end
checkMonsters(posi, posis, pos, new_aid)
end, 5*1000)
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[1], monsters[2])
end
checkMonsters(posi, posis, pos, new_aid)
end, 5*1000)
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[1], monsters[2])
end
checkMonsters(posi, posis, pos, new_aid)
end, 5*1000)
end
return true
end

A cada novo action id adicionado no código, não se esqueça de também colocá-lo na tag e na tabela aids.
Explicação:
local monsters = Definirá os monstros que irão nascer na wave, e a posição.
Modelo: {"Nome do monstro", posição}
local posi = Coordenadas da posição superior esquerda da área.
local posis = Coordenadas da posição inferior direita da área.
local pos = Onde a alavanca será criada, após eliminar cada wave.
Criando novas waves:
Primeiramente, tenha em mente que cada actionid representa uma nova wave. Se são 4 actionids, então serão 5 waves (4 actionids + a wave programada pela alavanca da Outland Main).
Quando você adicionar um novo actionid, não se esqueça de colocá-lo na tag e na tabela aids.
Cada elseif item.actionid == aids[número] then representa uma wave, sendo número = wave. LEMBRE-SE: esse número também representa a index na tabela aids. Portanto, se você colocar, por exemplo, esse número = 20, e não tiver 20 actionids na tabela, não funcionará.
Modelo:
elseif item.actionid == aids[wave/número/index do actionid na tabela aids] then
        local monsters = {{"Nome do monstro", posição}, {"Nome do monstro", posição}, {"Nome do monstro", posição}, {"Nome do monstro", posição}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
            checkMonsters(posi, posis, pos, new_aid) --Lembre-se: esse new_aid sempre será o actionid da alavanca+1.
        end, 5*1000)
Todas as waves estão configuradas para ocorrer em 5 segundos. Para alterar isso, basta mudar os 5*1000 para segundos*1000. Exemplo: 10 segundos-10*1000.
Configurei 5 waves, sendo os actionids: 19381, 19382, 19383, 19384.
OBS: A primeira wave não possui actionid, pois foi iniciada pelo código de entrada da Outland Main!
Segue como deixei as waves: -[wave/actionid] - Pokémons: pokémons que vêm na wave.
[1ª wave/sem actionid] - Pokémons: Pikachu e Magikarp.
[2ª wave/19381] - Pokémons: Pikachu, Magikarp e Caterpie.
[3ª wave/19382] - Pokémons: Pikachu, Magikarp, Caterpie e Metapod.
[4ª wave/19383] - Pokémons: Pikachu, Magikarp, Caterpie, Metapod e Butterfree.
[5ª wave/19384] - Pokémons: Pikachu, Magikarp, Caterpie, Metapod, Butterfree e Mewtwo.
Acrescentando: quando for configurar a última wave, configure normalmente como as outras. Quando todos os pokémons forem derrotados, será criada uma alavanca com actionid x. Então, em outro arquivo, você configura o quê quiser: se a alavanca criada levará para uma posição e dará os prêmios, ou se apenas teleportará, ou se, sei lá, matará os jogadores.
Então, na tag, você coloca o actionid que foi setado nesta última alavanca (em outras palavras, o actionid da alavanca da última wave + 1).
Espero que tenha entendido.
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Bem vou ler direito oque vc escreveu kk, eu nao entendo muita coisa. mais vou tentar configurar akie. se der certinho eu edito akie. =D vlws.


@edit

 

so mais uma duvida. como eu coloco a tag no actions.xml? e que tem 2 scripts ai sei la kk

Link para o comentário
Compartilhar em outros sites

  • 0

O do primeiro código, você não precisa alterar a tag.

Do segundo,

<action actionid="19381;19382;19383;19384" event="script" value="nome do arquivo.lua"/>

Isso com os actionids que testei.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Entendi, ja configurei tudo ja, vou testar jaja mando se funcionou =D.

 

@edit

 

ai deu esse erro akie. e do segundo script

 

 

[10/01/2014 19:22:13] [Error - Action Interface]
[10/01/2014 19:22:13] In a timer event called from:
[10/01/2014 19:22:13] data/actions/scripts/outland main.lua:onUse
[10/01/2014 19:22:13] Description:
[10/01/2014 19:22:14] attempt to index a number value
[10/01/2014 19:22:14] stack traceback:
[10/01/2014 19:22:14]     [C]: in function 'doCreateItem'
[10/01/2014 19:22:14]     data/actions/scripts/outland mainn.lua:6: in function 'checkMonsters'
[10/01/2014 19:22:14]     data/actions/scripts/outland main.lua:86: in function <data/actions/scripts/outland main.lua:82>
Link para o comentário
Compartilhar em outros sites

  • 0

Estranho, aqui funcionou direitinho.

EDIT: Não li por inteiro seu comentário.

Vou ver aqui a possível causa desse erro.

 

Você fez alguma alteração no script? Se sim, posso vê-la?

E, se você fez, teste o código do jeito que eu enviei, sem alterações.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

pelo oque eu percebi, ele esta dando erro na linha 6 do primeiro script, e na linha 86 do segundo script. um bom progama para saber as linhas do script, eo otscrip, sempre uso ele kk. Aqui está o primeiro script:

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 = {
    {9, {x = 2349, y = 2477, z = 14}, {x = 2438, y = 2493, z = 15}},
}
 
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)
local monsters = {{"Shiny venusaur", {x = 2438, y = 2489, z = 15}}, {"Shiny blastoise", {x = 2435, y = 2493, z = 15}}}
local posi = {x = 2449, y = 2488, z = 15}       --Coordenadas da posição superior esquerda da área.
local posis = {x = 2428, y = 2498, z = 15}      --Coordenadas da posição inferior direita da área.
local pos = {x = 2438, y = 2493, z = 15}        --Onde a alavanca será criada.
      
    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)
        doRemoveItem(item.uid, 1)
        addEvent(function()
            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

eo segundo:

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 = 2428, y = 2488, z = 15}       --Coordenadas da posição superior esquerda da área.
local posis = {x = 2449, y = 2498, z = 15}      --Coordenadas da posição inferior direita da área.
local pos = {x = 2438, y = 2492, z = 15}         --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 = 2437, y = 2495, z = 15}}, {"Magikarp", {x = 2438, y = 2495, z = 15}}, {"Caterpie", {x = 2439, y = 2495, z = 15}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
            checkMonsters(posi, posis, pos, new_aid)
        end, 5*1000)
    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
            checkMonsters(posi, posis, pos, new_aid)
        end, 5*1000)
    elseif item.actionid == aids[3] then
        local monsters = {{"Pikachu", {x = 2437, y = 2495, z = 15}}, {"Magikarp", {x = 2438, y = 2495, z = 15}}, {"Caterpie", {x = 2439, y = 2495, z = 15}}, {"Metapod", {x = 2437, y = 2491, z = 15}}, {"Butterfree", {x = 2445, y = 2495, z = 15}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
            checkMonsters(posi, posis, pos, new_aid)
        end, 5*1000)
    elseif item.actionid == aids[4] then
        local monsters = {{"Pikachu", {x = 2437, y = 2495, z = 15}}, {"Magikarp", {x = 2438, y = 2495, z = 15}}, {"Caterpie", {x = 2439, y = 2495, z = 15}}, {"Metapod", {x = 2437, y = 2491, z = 15}}, {"Butterfree", {x = 2445, y = 2495, z = 15}}, {"Mewtwo", {x = 2434, y = 2492, z = 15}}}
        doRemoveItem(item.uid, 1)
        addEvent(function()
            for i = 1, #monsters do
                doCreateMonster(monsters[i][1], monsters[i][2])
            end
            checkMonsters(posi, posis, pos, new_aid)
        end, 5*1000)
    end
    return true
end

eu acho que fiz algo errado kkk

Editado por Bolz
Link para o comentário
Compartilhar em outros sites

  • 0

Tenta pegar o código que enviei, sem alterações, e testa (os dois).

Uma coisinha: dependendo de como sua função ehMonstro esteja configurada, os jogadores terão que retornar o pokémon para a pokeball a cada wave "derrotada" para o código funcionar por completo.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

ainda continua o erro cara.

 

 

[10/01/2014 19:58:09] [Error - Action Interface]
[10/01/2014 19:58:09] In a timer event called from:
[10/01/2014 19:58:09] data/actions/scripts/outland main.lua:onUse
[10/01/2014 19:58:09] Description:
[10/01/2014 19:58:09] attempt to index a number value
[10/01/2014 19:58:09] stack traceback:
[10/01/2014 19:58:09]     [C]: in function 'doCreateItem'
[10/01/2014 19:58:09]     data/actions/scripts/outland mainn.lua:6: in function 'checkMonsters'
[10/01/2014 19:58:09]     data/actions/scripts/outland main.lua:86: in function <data/actions/scripts/outland main.lua:82>

 

eu mudei as position tudo certo, quando eu puxo a alavanca para ir a quest. eu mato os dois pokes que vem por primeiro mais dps da erro na hora de aparecer a alavanca, e observação a alavanca que eu cliquei para ir a quest, desapareçe eu vo para o local aonde eu vo matar os pokes, e logo da o erro. eu mato os pokes e nao aparece nada.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por zipter98
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...