Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Nie działa?] "Egzekutor"


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam pewien problem, gdyż napisałem już dość skomplikowany skrypt do AutoIt, z racji tego, że jest on do gry 3D, to niektóre rzeczy ulegają zmianie, ogłupiając bota. Bot ma wykonywać sekwencje która powinna zająć mu około 1 minuty. Chciałem ustawić timer, który odliczałby się niezależnie i jeżeli czas jednego wykonywania pętli while przekroczyłby dajmy na to 3 minuty, to miałby grę wyłączyć, i zacząć pętlę ( właściwa pętla bota ) od nowa.

 

Żeby nie było, że się nie staram to mam coś takiego ( w uproszczeniu oczywiście ) :

 

 

While 1
$ms = 180000
$timer = TimerInit()



Komendy bota

If (TimerDiff($timer) > $ms) Then
Sleep(300)
Send("{ESC}")
Sleep(400)
MouseClick("left",840,566)
Sleep(2500)
ContinueLoop
EndIf

Komendy bota

If (TimerDiff($timer) > $ms) Then
Sleep(300)
Send("{ESC}")
Sleep(400)
MouseClick("left",840,566)
Sleep(2500)
ContinueLoop
EndIf

Komendy bota

I tak dalej i tak dalej
Wend

 

Czyli jak widzicie, są komendy bota i przeplatają się one z jakby takim checkpointem który rzekomo sprawdza ile czasu minęło, i jeżeli minęło więcej niż zmienna $ms, to powinien wykonywać tą sekwencję. Problem w tym ,że jak bot się zatnie to czasami nie dokończy komend i nie dojdzie do tego checkpointu. Czy jest może jakaś forma globalnego odliczania i ew. globalnego resetu tej pętli właściwej bota ? Byłbym bardzo wdzięczny, bo próbowałem po swojemu i nic ;(

Opublikowano

sprawdzanie czasu opakuj w pętle w adlibregister() co 180 sekund.

 

Co do aktualnego kodu, to pewnie nie zerujesz timera po przejściu pętli (najlepiej zeruj go na początku pętli)

Opublikowano

Nie do końca ogarniam jak działa ta funkcja... Zrobiłem coś takiego :

 

AdlibRegister("Bot")
Func Bot()
If (TimerDiff($timer) > $ms) Then
 Sleep(300)
  Send("{ESC}")
  Sleep(100)
  MouseClick("left",840,566)
  Sleep(2500)
  EndIf
EndFunc
While 1
$ms = 120000
$timer=0
$timer = TimerInit()

WEnd

 

Plus jest taki problem, że nie mogę w AdlibRegister"bot" dodać "continue loop" ponieważ, jest to poza loopem.

Opublikowano

OK. Szkoda, że autoit nie obsługuje wielowątkowości, bo można by to zrobić prościej i lepiej... Nie można by, bo to co jest w Bot() (dokładniej w Bot() po spełnieniu pierwszego warunku) ma się wykonywać przed każdą komendą bota, nie zwróciłem na to uwagi wcześniej

Na razie chyba wystarczająco dobre rozwiązanie.

 

global $timer = 0
global $ms = 120000
Func timeOut()
If (TimerDiff($timer) > $ms) Then
 Sleep(300)
  Send("{ESC}")
  Sleep(100)
  MouseClick("left",840,566)
  Sleep(2500)
  return true
EndIf
return false
EndFunc
While 1
$timer = TimerInit()
if (timeOut()) then ContinueLoop
;;komendy bota
if (timeOut()) then ContinueLoop
;;komendy bota
WEnd

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...