Ir para conteúdo

Featured Replies

Postado
  • Autor
7 minutos atrás, koyotestark disse:

mas é exatamente isso jovem, a porta vai checar se vc tem os 4 storages, se sim, ela abre e te seta um storage, esse storage vai te bloquear a porta e vc so pode abrir ela 48h depois. vc pode fazer como eu, colocar um limitador no local que vai enfrentar o boss, no meu caso, tem uma alavanca, essa alavanca checa se eu tenho o storage do boss, se tiver ela nao ativa pq eu ja enfrentei ele, ela é por tempo, q sera 24h , no meu caso, é pra ganhar recompensa, mas da pra usar como acesso a porta etc. o importante é o storage e a checagem.

mas de qualquer forma depois que ele ganhar a storage apos matar os 4 bosses ela nao iria ficar pra sempre? ou seja, apos matar o boss 1 vez os 4, poderá passar pela porta sempre no periodo de 48h.

preciso que para passar por essa porta seja necessario fazer acesso no minimo a cada 48h, acesso leia-se matar os 4 bosses.

 

  • Respostas 19
  • Visualizações 680
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Experimenta alterar a linha: setPlayerStorageValue(pid, t, 1)   para: setPlayerStorageValue(pid, t, os.time() + 300) ou: setPlayerStorageValue(pid, t, (os.time() + 300))

  • Para teste utilize um tempo menor: setPlayerStorageValue(pid, t, os.time() + 5*60) -- 5 minutos Veja se funciona

  • seria melhor adicionar uma storage pra cada boss, ai o script da porta checa os 4, se faltar 1 não deixa passar, seria esse sistema que vc quer? Se faltar 1ou mais dos 4 o player não passa..? Outr

Posted Images

Postado

há duas maneiras de se fazer isso que você precisa. Se eu entendi corretamente.. 

1.  Cada boss morto, o player que bateu nele, recebe a storage desse boss por 48h.

Obs: esse tempo já começa a contar assim que mata o boss, este seria o momento que o player recebe a storage dele no evento onDeath lá em creaturescripts. O player teria acesso a porta durante todo o tempo em que as storages dos 4 bosses estiverem ativa. Caso acabar o tempo de 1 boss, a porta não se abrirá para este player novamente.

 

2. Cada boss morto, o player que bateu nele recebe a storage desse boss, porém sem tempo, apenas com um valor simples.

2.1 Assim sendo, o script deverá ficar na porta. Este script faria uma checagem e se o player possuir a storage dos 4 bosses, ele recebe uma outra storage responsável pelo acesso a porta, e esta sim, teria o tempo, começando a contar ao abrir a porta pela primeira vez. E quando este tempo acabar, o player atualiza storage de cada boss, setada para 0 de novo.

Obs: Assim sendo, o player poderia passar pela porta quantas vezes for preciso, durante 48h

 

Uma observação importante para você testar e ficar atendo a possível situação..
Um palyer com as storages dos bosses ativa abre e fica parado na porta, mantendo ela aberta e outros players podem passar pela porta se não tiver as storages.

 

Uma solução para isso seria ao invés da porta se abrir, ela apenas teleporta o player de dentro para fora e vice-versa.

Outra solução, ao invés de uma porta, coloque um script em um chão (nesse caso não precise da porta), caso o player não tiver a storage dos bosses, ele simplesmente não passa no SQM.

Postado

2.1 Assim sendo, o script deverá ficar na porta. Este script faria uma checagem e se o player possuir a storage dos 4 bosses
foi +- isso que eu quis dizer, ao abrir a porta, ela zera os storages, e da um novo, que seria o storage da checagem. se ele tentar entrar na porta novamente ela vai dzer "vc porecisa esperar X minutos para entrar novamente"
----------------
Edit

Com uma action de quest diaria, fiz uma adaptação pra ela checar 3 storages em ordem, monstro um, dois e tres, se eu ir nela e nao tiver matado algum, ela vai me informar "mate tal monstro" mas em ordem, exemplo, matei monstro 3, vou dar use na alavanca, ela vai dizer, vc precisa matar o boss um, mas ai ainda falta tambem o 2. mas da pra botar um texto mais explicativo no cancel.

Segue aqui uma demonstração, cada um daqueles tres baus funcionam como um monstro que me da uma storage. ao usar os tres consigo usar a action << e ela zera os tres storages, pra que eu precise adquiri-los novamente e se tentar novamente aparece essa mensagem "programei pra duas horas".
Não é uma porta, daria pra fazer, mas ai eu teria que tentar e estou sem tempo, e ainda acho que uma alavanca  que te teleporta seria melhor que uma porta.
Se quiser experimentar, é só falar que eu posto aqui o script.

image.thumb.png.bdc2e94379798d34575ff5fee22b1d8b.png

Editado por koyotestark (veja o histórico de edições)

Postado

Ao invés de usar function onDeath, eu usaria o function onKill, e desta maneira:

local monster = {
    [1] = { name = "Energy Soul", storage = 6640 },
    [2] = { name = "Mazoran", storage = 6641 },
    [3] = { name = "Brother Freeze", storage = 6642 },
    [4] = { name = "Fleshcrawler", storage = 6643 },
}

function onKill(cid, target, lastHit)
    local time = os.time()
    if not isPlayer(target) then
        for i = 1, #monster, 1 do
            local name, storage = monster[i].name, monster[i].storage
            if getCreatureName(target) == name then
                if getPlayerStorageValue(cid, storage) <= time then
                    setPlayerStorageValue(cid, storage, time + (48 * 60 * 60))
                    doCreatureSay(cid, "I killed the " .. name .. "!", TALKTYPE_ORANGE_1)
                end
            end
        end
    end
    return true
end

 

Editado por Anderson Sacani
Otimização do algoritmo (veja o histórico de edições)

Postado
  • Autor
Agora, Anderson Sacani disse:

Ao invés de usar function onDeath, eu usaria o function onKill, e desta maneira:


local monster = {
    [1] = { name = "Energy Soul", storage = 6640 },
    [2] = { name = "Mazoran", storage = 6641 },
    [3] = { name = "Brother Freeze", storage = 6642 },
    [4] = { name = "Fleshcrawler", storage = 6643 },
}

function onKill(cid, target, lastHit)
    local time = os.time()
    if not isPlayer(target) then
        for i = 1, #monster, 1 do
            local name, storage = monster[i].name, monster[i].storage
            if getCreatureName(target) == name then
                if getPlayerStorageValue(cid, storage) <= time then
                    setPlayerStorageValue(cid, storage, time + (48 * 60 * 60))
                    doCreatureSay(cid, "I killed the " .. name .. "!", TALKTYPE_ORANGE_1)
                end
            end
        end
    end
    return true
end

 

o que mudaria o ondeath para o onkill ?

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo