Postado Dezembro 28, 2022 2 anos 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.
Postado Dezembro 28, 2022 2 anos 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 Dezembro 28, 2022 2 anos 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. Editado Dezembro 29, 2022 2 anos por koyotestark (veja o histórico de edições)
Postado Dezembro 30, 2022 2 anos 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 Dezembro 30, 2022 2 anos por Anderson Sacani Otimização do algoritmo (veja o histórico de edições)
Postado Janeiro 1, 2023 2 anos 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.