Postado Janeiro 24, 2022 3 anos Olá Feetads, poderia explicar melhor como funcionará? talvez tenha uma forma mais fácil. Até onde entendi é parecido com o atual daily reward do tibia global. Eu fiz algo parecido no meu server, a diferença é que ele dá uma recompensa por dia, e caso fique 24hrs em pegar, ele volta na primeira. Dê uma olhada: local days = { -- [dia] = {itemId, itemCount, "ordem"}, [1] = {2160, 1, "first"}, [2] = {2160, 2, "second"}, [3] = {2160, 3, "third"}, [4] = {2160, 4, "fourth"}, [5] = {2160, 5, "fifth"}, [6] = {12328, 6, "sixth"}, -- stamina refill [7] = {2160, 7, "seventh"} }, function onUse(player, item, fromPosition, target, toPosition, isHotkey) local timeQuest = player:getStorageValue(Storage.dailyQuestTime) > 0 and player:getStorageValue(Storage.dailyQuestTime) or 0 if (timeQuest + 86400) >= os.time() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "You still can't get the next reward.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return true elseif (timeQuest + 172800) <= os.time() then player:setStorageValue(Storage.dailyQuest, 1) end local day = player:getStorageValue(Storage.dailyQuest) > 0 and player:getStorageValue(Storage.dailyQuest) or 1 local dayReward = days[day] if dayReward then local reward = ItemType(dayReward[1]) if reward:getId() ~= 0 then if player:getFreeCapacity() < reward:getWeight() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "You don't have capacity.") player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received ".. dayReward[2] .." ".. reward:getName() .. " as a reward for the ".. dayReward[3] .." day of daily quest.") player:addItem(reward:getId(), dayReward[2]) player:setStorageValue(Storage.dailyQuestTime, os.time()) if day == 7 then player:setStorageValue(Storage.dailyQuest, 1) else player:setStorageValue(Storage.dailyQuest, day + 1) end end end return true end Editado Janeiro 24, 2022 3 anos por luanluciano93 (veja o histórico de edições)
Postado Janeiro 25, 2022 3 anos Autor @luanluciano93 então acho que eh um pouco diferente desse daily reward (alias gostei do teu me deu uma ideia genial kkkkkkkk posso roubar?) o script funciona da seguinte maneira o action do bau seta a storage tempo pra +24h e seta a storage de dano extra pra +1 ai vem o creature ou o globalEvent que faria o seguinte, a cada 1 minuto checa os players onlines, e caso tenha passado 24 horas desde a ultima vez que ele fez a quest ele perderia a storage de dano extra e apareceria na tela dele que ele perdeu. pq checar a cada 1 minuto? pro cara nao entrar na quest, fazer uma parte deslogar esperar o check logar.... digamos que burlar o sistema então eu precisaria que algo ficasse constantemente checando se ja passou 24horas após ele fazer a quest. e cada vez que ele faz a storage é setada com os.time()+24h pra ele nao perder a storage e ficar tudo certinho. e pq checar constantemente? pro player nao ficar com esse dano extra por muito tempo eu poderia deixar pra checar a cada hora ou quando abrisse a quest por exemplo, mas teria algumas maneiras de burlar e continuar com o dano extra. e pq entre global ou creature? global > checka todos de uma vez (pode ser um peso grande pra distro pegar 300 pessoas online e checkar um por um, setar a storage....) creature > quando o player loga, ele começa um loop de onLogin a cada 1 minuto ele chama a função pra checar a storage, porém são varios loops em tempos aleatorios, e checar 300 players em tempos aleatorios pode fazer com que todo segundo esteja executando um loop e isso cause lag Editado Janeiro 25, 2022 3 anos por FeeTads faltou explicar sobre o pq precisar ser constante (veja o histórico de edições)
Postado Janeiro 26, 2022 3 anos 22 horas atrás, FeeTads disse: então acho que eh um pouco diferente desse daily reward (alias gostei do teu me deu uma ideia genial kkkkkkkk posso roubar?) CLARO. talvez um evento "onTargetCombat" não resolveria toda essa verificação? Por onde você checa esse dano extra?
Postado Janeiro 26, 2022 3 anos Autor 25 minutos atrás, luanluciano93 disse: CLARO. talvez um evento "onTargetCombat" não resolveria toda essa verificação? Por onde você checa esse dano extra? o proprio sistema do reset system ja checa function ResetSystem:applyBonuses(pid) local bonus = self:getInfo(pid) if (bonus and bonus.damage_percent) then if getPlayerStorageValue(pid, 888251) >= 1 then --se a storage da quest for mais ou igual a 1 bonusquest = getPlayerStorageValue(pid, 888251) -- recebe conforme a quantidade de vezes que fez a quest else bonusquest = 0; --se não seta pra 0 end setPlayerDamageMultiplier(pid, 1.0 + ((bonus.damage_percent+bonusquest) / 100.0)) else setPlayerDamageMultiplier(pid, 1.0) end end caso ele tenha a storage maior que 1, significa que ele fez a quest tantas vezes, o bonus recebe a storage e depois aplica, esse sistema de damage é direto na source tbm
Postado Janeiro 26, 2022 3 anos 7 minutos atrás, FeeTads disse: getPlayerStorageValue(pid, 888251) >= 1 e se você verificasse aqui o tempo da quest?
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.