Bom dia, estou com problema em uma coisa, até pensei ter resolvido e exclui um post desse que havia feito porém n deu certo, bom vamos la...
Eu uso um script para healar no jogo, ele tem 2 opções diferentes para curar, sendo uma com magia, e outra com potion.
Ambas tem colldown diferentes, ou seja, eu posso usar uma magia de cura e uma potion ao mesmo tempo.
Meu problema é que meu script ele esta checando a minha vida perfeita, usando a magia perfeita, e usando a potion perfeita, mas quando é para usar a magia e a potion juntas, ele n à faz... ou usa um ou usa outro...
Muitas vezes ele está em um "Sleep" de um tipo de cura, por isso n usa o outro ao mesmo tempo.
E eu n poderia junta-los, pois tem 2 ou 3 tipo de magias de cura que ele checa, e 2 ou 3 tipos de potions que ele checa para usar na sua devida necessidade...
teria alguma forma de eu coloca-los para fazerem ao mesmo tempo, ignorando o outro tipo de cura?
Fazer mais de uma coisa ao mesmo tempo... Topic is solved
Moderator: Gio
Re: Fazer mais de uma coisa ao mesmo tempo... Topic is solved
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.
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).
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, 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
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)
}
}
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: Fazer mais de uma coisa ao mesmo tempo...
entendi, muito obrigado man!!
usei esse SetTimer e deu certo =D
usei esse SetTimer e deu certo =D
Re: Fazer mais de uma coisa ao mesmo tempo...
@Gio bom dia meu irmão, estava pensando aqui e surgiu uma dúvida.
se eu colocar um sleep dentro de um settimer, ele causara colldown no programa inteiro?
por exemplo:
claro que ao invéz de 10 segundos que seriam o "OLA" ali, mudariam para 12...
porém isso influenciaria o "OI" também?
se eu colocar um sleep dentro de um settimer, ele causara colldown no programa inteiro?
por exemplo:
Code: Select all
#Persistent
SetTimer, OLA, 10000
SetTimer, OI, 3000
Return
OLA:
ToolTip, Olá teste
Sleep, 2000
ToolTip, Olá novamente
Return
OI:
ToolTip, Oi testando
Return
porém isso influenciaria o "OI" também?
Re: Fazer mais de uma coisa ao mesmo tempo...
Bom dia Nauany.
Esse tipo de dúvida é relativamente simples de ser tirada com um teste.
Na configuração padrão, o SetTimer suspende a rotina em andamento mesmo que ela esteja executando um Sleep.
Exemplo: No script abaixo, um Sleep, 20000 (20s) foi interrompido pela rotina do SetTimer aos 8.95s:
Cabe destacar que no AutoHotkey existem configurações para ajustar a interruptibilidade de threads específicos. No caso do comando SetTimer, por exemplo, existe inclusive um parâmetro no próprio comando que controla a prioridade dele.
Esse tipo de dúvida é relativamente simples de ser tirada com um teste.
Na configuração padrão, o SetTimer suspende a rotina em andamento mesmo que ela esteja executando um Sleep.
Exemplo: No script abaixo, um Sleep, 20000 (20s) foi interrompido pela rotina do SetTimer aos 8.95s:
Code: Select all
#Persistent
SetTimer, OLA, 1000
SetTimer, OI, 10000
Return
OLA:
ToolTip, Olá teste
Sleep 20000
Return
OI:
ToolTip, Oi testando
Return
Cabe destacar que no AutoHotkey existem configurações para ajustar a interruptibilidade de threads específicos. No caso do comando SetTimer, por exemplo, existe inclusive um parâmetro no próprio comando que controla a prioridade dele.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: Fazer mais de uma coisa ao mesmo tempo...
ahh sim, abri aqui pra ver agora, e realmente usa mesmo..
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 42 guests