Post by Gio » 04 Oct 2019, 12:01
Bom dia Nauany.
Bom, não conheço o jogo a que você se refere, mas pelo que você descreveu, entendo que o script está operando um comando Sleep ao final de uma rotina e isso está impedindo-o de efetuar uma nova checagem até que o sleep termine.
De fato, este é o comportamento do comando Sleep. Ele basicamente "adormece" o script inteiro pelo tempo indicado. Então se você precisa que o script faça alguma outra coisa durante o período de cooldown, você deve elaborar uma rotina diferente.
Eis alguns exemplos do que você pode usar para elaborar uma rotina de cooldown que não interrompe o script inteiro:
1. SetTimer.
O comando SetTimer roda uma rotina a cada X milisegundos (ou seja, ele roda e depois espera os X milisegundos para rodar novamente, mas enquanto espera, o script continua ativo, fazendo o que mais estiver programado). No exemplo a seguir, uma mensagem é exibida a cada 3 segundos e a outra a cada 10 segundos. Veja que a espera de uma não interrompe a espera da outra.
Code: Select all
#Persistent
SetTimer, OLA, 10000
SetTimer, OI, 3000
Return
OLA:
ToolTip, Olá teste
Return
OI:
ToolTip, Oi testando
Return
2. Loop, If, A_Now
Você pode criar uma rotina em loop que não faz nada enquanto um tempo X não passar. Isso pode ser feito comparando o tempo da última vez que a rotina rodou com o tempo atual
do relógio do computador (e agindo somente se a diferença for maior que um determinado valor, do contrário simplesmente deixa reiniciar o loop).
Code: Select all
#Persistent
TEMPO_CURA := A_Now
TEMPO_POCAO := A_Now ; Tempo inicial para comparação.
Loop
{
If (A_Now - TEMPO_CURA >= 3)
{
ToolTip, 3 segundos se passaram da cura!
TEMPO_CURA := A_Now
}
If (A_Now - TEMPO_POCAO >= 10) ; Compara o tempo atual com o tempo anterior. Se a diferença for maior ou igual a 10 segundos, executa o bloco abaixo.
{
ToolTip, 10 segundos se passaram da poção!
TEMPO_POCAO := A_Now ; Sempre que rodar a rotina, devemos reconfigurar o tempo anterior para ser o tempo daquele momento (para fazer uma nova espera com o if)
}
}
Tente modificar seu script para implementar esperas mais inteligentes nas rotinas, como as demonstradas acima. Se após tentar ainda tiver alguma dúvida poste o código dele para que possa verificar o que pode ser feito
Bom dia Nauany.
Bom, não conheço o jogo a que você se refere, mas pelo que você descreveu, entendo que o script está operando um comando Sleep ao final de uma rotina e isso está impedindo-o de efetuar uma nova checagem até que o sleep termine.
De fato, este é o comportamento do comando Sleep. Ele basicamente "adormece" o script inteiro pelo tempo indicado. Então se você precisa que o script faça alguma outra coisa durante o período de cooldown, você deve elaborar uma rotina diferente.
Eis alguns exemplos do que você pode usar para elaborar uma rotina de cooldown que não interrompe o script inteiro:
1. SetTimer.
O comando SetTimer roda uma rotina a cada X milisegundos (ou seja, ele roda e depois espera os X milisegundos para rodar novamente, mas enquanto espera, o script continua ativo, fazendo o que mais estiver programado). No exemplo a seguir, uma mensagem é exibida a cada 3 segundos e a outra a cada 10 segundos. Veja que a espera de uma não interrompe a espera da outra.
[code]#Persistent
SetTimer, OLA, 10000
SetTimer, OI, 3000
Return
OLA:
ToolTip, Olá teste
Return
OI:
ToolTip, Oi testando
Return[/code]
2. Loop, If, A_Now
Você pode criar uma rotina em loop que não faz nada enquanto um tempo X não passar. Isso pode ser feito comparando o tempo da última vez que a rotina rodou com o tempo atual
do relógio do computador (e agindo somente se a diferença for maior que um determinado valor, do contrário simplesmente deixa reiniciar o loop).
[code]#Persistent
TEMPO_CURA := A_Now
TEMPO_POCAO := A_Now ; Tempo inicial para comparação.
Loop
{
If (A_Now - TEMPO_CURA >= 3)
{
ToolTip, 3 segundos se passaram da cura!
TEMPO_CURA := A_Now
}
If (A_Now - TEMPO_POCAO >= 10) ; Compara o tempo atual com o tempo anterior. Se a diferença for maior ou igual a 10 segundos, executa o bloco abaixo.
{
ToolTip, 10 segundos se passaram da poção!
TEMPO_POCAO := A_Now ; Sempre que rodar a rotina, devemos reconfigurar o tempo anterior para ser o tempo daquele momento (para fazer uma nova espera com o if)
}
}[/code]
:arrow: Tente modificar seu script para implementar esperas mais inteligentes nas rotinas, como as demonstradas acima. Se após tentar ainda tiver alguma dúvida poste o código dele para que possa verificar o que pode ser feito :thumbup: