|
You last visited: Today at 20:46
Advertisement
cpu last hoch
Discussion on cpu last hoch within the AutoIt forum part of the Coders Den category.
05/20/2011, 17:11
|
#1
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
cpu last hoch
hi ich hab mir ein script erstellt was bei einem game die skilltasten drückt,
es läuft auch nur was ich nicht nachvollziehen kann das der timer immer beschleunigt und irgendwann die cpulast zu hoch wird das ich den script mit dem taskmanáger schließen muss.
Code:
#include <Timers.au3>
#include <Misc.au3>
#include <array.au3>
HotKeySet("{ESC}", "_end")
HotKeySet("{PAUSE}" , "_pause")
Local $pause = True
Local $fRunning = True
Local $aArray[7][2] = [ _
["2", 1010], _
["3", 1020], _
["4", 1030], _
["5", 1040], _
["6", 1050], _
["7", 1060], _
["8", 1070] _
]
Global $hDll, $fRunning
$hDll = DllOpen("user32.dll")
AdlibRegister("_CheckStrg",100)
While Sleep(50)
If $fRunning Then
_go()
While $fRunning
WEnd
EndIf
WEnd
Func _CheckStrg()
AdlibUnRegister("_CheckStrg")
If _IsPressed("31",$hDll) Then
Do
Sleep(10)
Until Not _IsPressed("31",$hDll)
$fRunning = Not $fRunning
ToolTip("",180 ,200)
EndIf
AdlibRegister("_CheckStrg",100)
EndFunc
Func _go()
$hTimer = _TimerInit($aArray)
EndFunc
While 1
Sleep(100)
WEnd
Func _TimerInit($aArray)
Local Static $hTimerGUI
If $hTimerGUI = 0 Then $hTimerGUI = GUICreate("")
For $i = 0 To UBound($aArray) - 1
_Send("{" & $aArray[$i][0] & "}")
Next
_TimerUpdate("SET", $aArray, 0, 0)
_Timer_SetTimer($hTimerGUI, 100, "_TimerUpdate")
Return $hTimerGUI
EndFunc ;==>_TimerInit
Func _TimerUpdate($hWnd, $nMsg, $iIDTimer, $iTime)
Local Static $aArray, $aInitial, $iUbound
If $hWnd = "SET" Then
$aArray = $nMsg
$aInitial = $nMsg
$iUbound = UBound($aArray) - 1
Return
EndIf
For $i = 0 To $iUbound
$aArray[$i][1] -= 100
If $aArray[$i][1] <= 0 Then
_Send("{" & $aArray[$i][0] & "}")
$aArray[$i][1] = $aInitial[$i][1]
EndIf
Next
EndFunc ;==>_TimerUpdate
Func _Send($sKey)
Local $hTimer
If $fRunning Then Return
Send($sKey)
ToolTip("Shooter Läuft",180 ,200)
$hTimer = TimerInit()
Do
Sleep(10)
If Not $fRunning Then ExitLoop
If $fRunning = True Then
ToolTip("",180 ,200)
EndIf
Until _Timer_KillAllTimers($hTimer)
EndFunc ;==>_Send
Func _pause()
If $pause = False Then
$pause = True
$fRunning = True
Else
$pause = False
EndIf
While $pause = True
$fRunning = True
ToolTip("Pause", 180, 200)
Sleep(200)
WEnd
ToolTip("")
EndFunc ;==>pause
Func _end()
DllClose($hDll)
Exit
EndFunc ;==>_end
|
|
|
05/21/2011, 14:07
|
#2
|
elite*gold: 1
Join Date: Dec 2009
Posts: 36
Received Thanks: 44
|
hast du das ganze in einer while schleife?
|
|
|
05/21/2011, 14:26
|
#3
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
|
Die Zeile sollte noch ein Sleep beinhalten:
PHP Code:
While $fRunning
WEnd
|
|
|
05/24/2011, 09:38
|
#4
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
so hab dort noch ein sleep eingefügt es ergab sich auch eine leichte verbesserung leider beschleunigt der timer immer noch von allein.
gibts da noch andere möglichkeinten oder kann man das auch anders lösen?
|
|
|
05/24/2011, 16:01
|
#5
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
sag dochmal ganz kurz was das programm eigentlich machen soll =)
|
|
|
05/25/2011, 16:10
|
#6
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
hab ich doch im ersten post schon geschrieben!
auch der script is dort gepostet!
also :
der script hat die tasten von 2 - 8 als zu drückende reserviert.
diese tasten sind von einem spiel von mir als skilltasten belegt.
desweiteren soll er diese tasten zur eingestellten zeit drücken,
jeweils jede sekunde +/- ein paar tausendstel.
der script wird mit der taste 1 gestartet (ursprünglich die STRG- taste)
wobei eine box angezeigt wird, das er läuft,
beim nochmaligen drücken wird er gestoppt.
die taSTE ESC beendet den script und die taste pause pausiert ihn.
für welches game ist mit sicherheit irrelevant.
|
|
|
05/25/2011, 23:24
|
#7
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
dann verstehe ich nicht warum du das ganze nicht einfach so aufbaust:
Code:
#include <misc.au3>
Dim $timer, $run = False
While Sleep(50)
If _IsPressed(31) Then
$timer = 0
$run = True
ToolTip('Shooter läuft')
EndIf
If _IsPressed(13) Then
$run = False
ToolTip('Pause')
EndIf
If _IsPressed('1B') Then Exit
If $run And TimerDiff($timer)>=1000 Then
For $i=2 To 8
Send($i)
Next
$timer = TimerInit()
EndIf
WEnd
|
|
|
05/26/2011, 00:22
|
#8
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
dir ist schon bewusst das ifpressed die user32.dll braucht?
also da ich nicht immer nur eine sekunde eingeben möchte sondern diesen script ausbauen will auf eine gui wo ich tasten abwählen und zeiten einstellen kann.
die skills laufen nicht alle nur eine sekunde sondern alle unterschiedlich desshalb ist da ein 2d array drinn und wenn ich die genaue zeit eintrage komme ich mit deinem vorschlag beileibe nicht weiter.
sonnst hätte ich ja gleich
$c=0
hotkeyset("{1}", 's')
func s()
$c=1
hotkeyset("{1}", 'x')
while 1
if $c=0 then exitloop
send("2345678")
sleep(1000)
wend
endfunc
func x()
$c=0
hotkeyset("{1}", 's')
endfunc
schreiben können.
|
|
|
05/26/2011, 01:19
|
#9
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
mit einem gui wird das ganze noch viel einfacher, da du die timerzeiten ja direkt auslesen kannst.
hier könntest du sogar die einzelnen sends noch seperat starten/stoppen.
in dem falle mit verschiendenen zeiten würde natürlich $timer[8] definitert werden, und die timerdiff abfrage in der forschleife stehen.
der rest wäre identisch.
also etwa so:
Code:
#include <misc.au3>
Dim $timer[7], $run = False, $msg[2] = ['Shooter läuft', 'Pause']
Dim $zeit[7] = [1010, 1020, 1030, 1040, 1050, 1060, 1070]
While Sleep(50)
If _IsPressed(31) Then
ToolTip($msg[$run])
$run = Not $run
EndIf
If _IsPressed('1B') Then Exit
If $run Then
For $i=0 To 6
If TimerDiff($timer[$i])>= $zeit[$i] Then
Send($i+2)
$timer[$i] = TimerInit()
EndIf
Next
EndIf
WEnd
(habe mal start und pause auf eine taste gelegt aus alter gewohnheit)
wobei die $zeit[7] variable später ja sogar noch entfallen würde, und ersetzt werden würde durch inputs slider oder was auch immer du planst
finde das ganze so immernoch deutlich einfacher als das ganze auf 10 funktionen aufzuteilen.
Edit:
hier mal eine variante wie man mit beliebig vielen tasten das ganze mit gui definieren könnte:
Code:
Dim $array[1][4], $run = False, $label[2] = ['Start', 'Stop']
$array[0][0] = -1
$gui = GUICreate("Bot", 220, 170)
$listview = GUICtrlCreateListView("Key|Delay", 10, 10, 100)
$del = GUICtrlCreateButton('Delete', 120, 10, 90, 25)
$add = GUICtrlCreateButton('Add', 120, 40, 90, 25)
GUICtrlCreateGroup('Key', 120, 70, 40, 45)
$key = GUICtrlCreateInput('', 125, 85, 30, 25)
GUICtrlCreateGroup('Delay', 160, 70, 50, 45)
$delay = GUICtrlCreateInput('', 165, 85, 40, 25)
$start = GUICtrlCreateButton('Start', 120, 130, 90, 30)
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $start
$run = Not $run
GUICtrlSetData($start, $label[$run])
Case $add
$found = False
For $i=0 To UBound($array)-1
If $array[$i][0] = -1 Then
$array[$i][1] = GUICtrlRead($key)
$array[$i][2] = GUICtrlRead($delay)
$array[$i][0] = GUICtrlCreateListViewItem($array[$i][1]&'|'&$array[$i][2], $listview)
$found = True
ExitLoop
EndIf
Next
If Not $found Then
$ubound = UBound($array)
ReDim $array[$ubound+1][4]
$array[$ubound][1] = GUICtrlRead($key)
$array[$ubound][2] = GUICtrlRead($delay)
$array[$ubound][0] = GUICtrlCreateListViewItem($array[$ubound][1]&'|'&$array[$ubound][2], $listview)
EndIf
Case $del
$selected = GUICtrlRead($listview)
GUICtrlDelete($selected)
For $i=0 To UBound($array)-1
If $array[$i][0] = $selected Then
$array[$i][0] = -1
ExitLoop
EndIf
Next
EndSwitch
If Not WinActive($gui) And $run Then
For $i=0 To UBound($array)-1
If $array[$i][0] <> -1 And TimerDiff($array[$i][3]) >= $array[$i][2] Then
Send($array[$i][1])
$array[$i][3] = TimerInit()
EndIf
Next
EndIf
WEnd
wie man sieht ist das ganze hier schon um einiges komplexer, da wir eine unbekannte zahl an zu sendenden zeichen haben =)
|
|
|
05/26/2011, 07:40
|
#10
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
als gui hatte ich mir eher sowas vorgestellt
das is jetzt nur der gui teil den ich in dem script habe die variablen sind jeweils in den arrays eingetragen wie ich die tasten abwählen kann wüste ich so noch nicht aber probieren muss man immer :
PHP Code:
$gui_einstellungen = GUICreate("Einstellungen Taste und Zeit", 221, 261, 220, 130) $Checkbox1 = GUICtrlCreateCheckbox("Taste 2", 10, 5, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox2 = GUICtrlCreateCheckbox("Taste 3", 10, 30, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox3 = GUICtrlCreateCheckbox("Taste 4", 10, 55, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox4 = GUICtrlCreateCheckbox("Taste 5", 10, 80, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox5 = GUICtrlCreateCheckbox("Taste 6", 10, 105, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox6 = GUICtrlCreateCheckbox("Taste 7", 10, 130, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox7 = GUICtrlCreateCheckbox("Taste 8", 10, 155, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox8 = GUICtrlCreateCheckbox("Taste 9", 10, 180, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $time1 = GUICtrlCreateInput("1", 150, 5, 40, 20) GuiCtrlCreateUpDown(-1) $time2 = GUICtrlCreateInput("1", 150, 30, 40, 20) GuiCtrlCreateUpDown(-1) $time3 = GUICtrlCreateInput("1", 150, 55, 40, 20) GuiCtrlCreateUpDown(-1) $time4 = GUICtrlCreateInput("1", 150, 80, 40, 20) GuiCtrlCreateUpDown(-1) $time5 = GUICtrlCreateInput("1", 150, 105, 40, 20) GuiCtrlCreateUpDown(-1) $time6 = GUICtrlCreateInput("1", 150, 130, 40, 20) GuiCtrlCreateUpDown(-1) $time7 = GUICtrlCreateInput("1", 150, 155, 40, 20) GuiCtrlCreateUpDown(-1) $time8 = GUICtrlCreateInput("1", 150, 180, 40, 20) GuiCtrlCreateUpDown(-1) $save_button = GUICtrlCreateButton("OK", 32, 210, 40, 17, 0) $cancel = GUICtrlCreateButton("Exit", 110, 210, 40, 17, 0) GUISetState(@SW_SHOW)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
Case $Checkbox1 Case $Checkbox2 Case $Checkbox3 Case $Checkbox4 Case $Checkbox5 Case $Checkbox6 Case $Checkbox7 Case $Checkbox8 Case $time1 Case $time2 Case $time3 Case $time4 Case $time5 Case $time6 Case $time7 Case $time8 Case $save_button GUISetState(@SW_HIDE) ExitLoop Case $cancel GUISetState(@SW_HIDE) Exit EndSwitch WEnd ;EndFunc
$staste1 = GUICtrlRead($time1) $staste2 = GUICtrlRead($time2) $staste3 = GUICtrlRead($time3) $staste4 = GUICtrlRead($time4) $staste5 = GUICtrlRead($time5) $staste6 = GUICtrlRead($time6) $staste7 = GUICtrlRead($time7) $staste8 = GUICtrlRead($time8) ;$staste9 = GUICtrlRead($time9) $taste1 = $staste1*1010 $taste2 = $staste2*1020 $taste3 = $staste3*1030 $taste4 = $staste4*1040 $taste5 = $staste5*1050 $taste6 = $staste6*1060 $taste7 = $staste7*1070 $taste8 = $staste8*1080 ;$taste9 = $staste9*1090
und das ist mein kompletter script inclusiver aller alten einträge:
PHP Code:
#include <Timers.au3> #include <Misc.au3> #include <array.au3> #include <cui.au3> #include <GUIConstantsEx.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <WindowsConstants.au3> #cs #Include <Constants.au3> #NoTrayIcon
Opt("TrayMenuMode",1) ; Standard Traymenüeinträge (Skript pausieren/beenden) werden nicht angezeigt.
; Wir erzeugen 2 Gruppen von Options-Menüfeldern $radio1 = TrayCreateItem("Radiobutton1", -1, -1, 1) TrayItemSetState(-1, $TRAY_CHECKED) $radio2 = TrayCreateItem("Radiobutton2", -1, -1, 1) $radio3 = TrayCreateItem("Radiobutton3", -1, -1, 1)
TrayCreateItem("") ; Die Menüeinträge von den Radiobuttons können durch eine Trennlinie oder einen anderen Menüpunkt getrennt werden
$radio4 = TrayCreateItem("Radiobutton4", -1, -1, 1) $radio5 = TrayCreateItem("Radiobutton5", -1, -1, 1) TrayItemSetState(-1, $TRAY_CHECKED) $radio6 = TrayCreateItem("Radiobutton6", -1, -1, 1)
TrayCreateItem("")
$aboutitem = TrayCreateItem("Über") TrayCreateItem("") $exititem = TrayCreateItem("Beenden")
TraySetState()
While 1 $msg = TrayGetMsg() Select Case $msg = 0 ContinueLoop Case $msg = $aboutitem Msgbox(64, "Über:", "AutoIt3-Tray-Beispiel mit Gruppen von Menüeinträgen.") Case $msg = $exititem ExitLoop EndSelect WEnd
Exit #ce
#cs #Region ### START Koda GUI section ### Form= $gui = GUICreate("WarpFire_Skill_Shooter_by_DeepWare", 401, 151, 192, 114) $gui_menu = GUICtrlCreateMenu("Menu") $gui_einstellungen = GUICtrlCreateMenu("Einstellungen", $gui_menu) $gui_menu_einstellung = GUICtrlCreateMenuItem("Einstellung", $gui_einstellungen) $gui_menu_user = GUICtrlCreateMenu("User", $gui_menu) $gui_menu_load = GUICtrlCreateMenuItem("Load", $gui_menu_user) $gui_menu_save = GUICtrlCreateMenuItem("Save", $gui_menu_user) $gui_menu_exit = GUICtrlCreateMenuItem("Exit", $gui_menu) GUISetState(@SW_SHOW) Dim $gui_AccelTable[7][2] = [["!a", $gui_menu],["!e", $gui_einstellungen],["!k", $gui_menu_einstellung],["!u", $gui_menu_user],["!l", $gui_menu_load],["!s", $gui_menu_save],["!x", $gui_menu_exit]] GUISetAccelerators($gui_AccelTable) #EndRegion ### END Koda GUI section ###
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
Case $gui Case $gui_menu_einstellung _einstellungen() Case $gui_menu_load Case $gui_menu_save Case $gui_menu_exit _end() EndSwitch WEnd #ce ;_einstellungen() ;Func _einstellungen() $gui_einstellungen = GUICreate("Einstellungen Taste und Zeit", 221, 261, 220, 130) $Checkbox1 = GUICtrlCreateCheckbox("Taste 2", 10, 5, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox2 = GUICtrlCreateCheckbox("Taste 3", 10, 30, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox3 = GUICtrlCreateCheckbox("Taste 4", 10, 55, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox4 = GUICtrlCreateCheckbox("Taste 5", 10, 80, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox5 = GUICtrlCreateCheckbox("Taste 6", 10, 105, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox6 = GUICtrlCreateCheckbox("Taste 7", 10, 130, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox7 = GUICtrlCreateCheckbox("Taste 8", 10, 155, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $Checkbox8 = GUICtrlCreateCheckbox("Taste 9", 10, 180, 80, 20) GuiCtrlSetState(-1, $GUI_CHECKED) $time1 = GUICtrlCreateInput("1", 150, 5, 40, 20) GuiCtrlCreateUpDown(-1) $time2 = GUICtrlCreateInput("1", 150, 30, 40, 20) GuiCtrlCreateUpDown(-1) $time3 = GUICtrlCreateInput("1", 150, 55, 40, 20) GuiCtrlCreateUpDown(-1) $time4 = GUICtrlCreateInput("1", 150, 80, 40, 20) GuiCtrlCreateUpDown(-1) $time5 = GUICtrlCreateInput("1", 150, 105, 40, 20) GuiCtrlCreateUpDown(-1) $time6 = GUICtrlCreateInput("1", 150, 130, 40, 20) GuiCtrlCreateUpDown(-1) $time7 = GUICtrlCreateInput("1", 150, 155, 40, 20) GuiCtrlCreateUpDown(-1) $time8 = GUICtrlCreateInput("1", 150, 180, 40, 20) GuiCtrlCreateUpDown(-1) $save_button = GUICtrlCreateButton("OK", 32, 210, 40, 17, 0) $cancel = GUICtrlCreateButton("Exit", 110, 210, 40, 17, 0) GUISetState(@SW_SHOW)
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit
Case $Checkbox1 Case $Checkbox2 Case $Checkbox3 Case $Checkbox4 Case $Checkbox5 Case $Checkbox6 Case $Checkbox7 Case $Checkbox8 Case $time1 Case $time2 Case $time3 Case $time4 Case $time5 Case $time6 Case $time7 Case $time8 Case $save_button GUISetState(@SW_HIDE) ExitLoop Case $cancel GUISetState(@SW_HIDE) Exit EndSwitch WEnd ;EndFunc
$staste1 = GUICtrlRead($time1) $staste2 = GUICtrlRead($time2) $staste3 = GUICtrlRead($time3) $staste4 = GUICtrlRead($time4) $staste5 = GUICtrlRead($time5) $staste6 = GUICtrlRead($time6) $staste7 = GUICtrlRead($time7) $staste8 = GUICtrlRead($time8) ;$staste9 = GUICtrlRead($time9) $taste1 = $staste1*1010 $taste2 = $staste2*1020 $taste3 = $staste3*1030 $taste4 = $staste4*1040 $taste5 = $staste5*1050 $taste6 = $staste6*1060 $taste7 = $staste7*1070 $taste8 = $staste8*1080 ;$taste9 = $staste9*1090
HotKeySet("{ESC}", "_end") ;HotKeySet("{F1}" , "_einstellungen")@sw HotKeySet("{PAUSE}" , "_pause") $pause = True $fRunning = True ; 2-D Array erstellen, der in der ersten Spalte die Tasten, und in der zweiten den cooldown enthält.
Local $aArray[7][2] = [ _ ["2", $taste1], _ ["3", $taste2], _ ["4", $taste3], _ ["5", $taste4], _ ["6", $taste5], _ ["7", $taste6], _ ["8", $taste7] _ ] ;["2", 15100], _ ;["3", 1050], _ ;["4", 4050], _ ;["5", 10050], _ ;["6", 15050], _ ;["7", 30100], _ ;["8", 18100] _ ; Array aus dem GUI heraus befüllen.. ; um das ganze ins Rollen zu bringen ...
Global $hDll, $fRunning $hDll = DllOpen("user32.dll") ;$fRunning = True
AdlibRegister("_CheckStrg",100)
While Sleep(250) If $fRunning Then _go() While $fRunning WEnd EndIf WEnd
Func _CheckStrg() ; Adlib deaktivieren ; (Sonst wird die Funktion nochmals aufgerufen, wenn Strg länger als 100 ms gedrückt) AdlibUnRegister("_CheckStrg")
; Wenn Strg gedrückt If _IsPressed("31",$hDll) Then ; Warte, bis nicht mehr gedrückt Do Sleep(10) Until Not _IsPressed("31",$hDll)
; Wechel den Zustand von $fRunning $fRunning = Not $fRunning ;ConsoleWrite("$fRunning = " & $fRunning & @CRLF) ToolTip("",180 ,200)
EndIf
; Und wieder aktivieren. AdlibRegister("_CheckStrg",100) EndFunc
;#ce
; -> Timer Initialisieren. Der Array mit Tasten wird dabei an die Funktion übergeben Func _go() $hTimer = _TimerInit($aArray) EndFunc ; so kannst man den Timer stoppen: ;~ _Timer_KillAllTimers($hTimer)
; Und hier einfach rumdösen. While 1 Sleep(100) WEnd ;EndFunc
Func _TimerInit($aArray) ; Die Timer-Funktionen benötigen ein Fenster. Local Static $hTimerGUI If $hTimerGUI = 0 Then $hTimerGUI = GUICreate("")
; Alle Tasten durchgehen und senden. For $i = 0 To UBound($aArray) - 1 _Send("{" & $aArray[$i][0] & "}") Next
; _TimerUpdate den Array in die Funktion _TimerUpdate (s.u.) übertragen _TimerUpdate("SET", $aArray, 0, 0) ; Alle 100 ms _TimerUpdate aufrufen, in der dann für jede Taste geprüft wird, ; ob der cooldown schon abgelaufen ist _Timer_SetTimer($hTimerGUI, 100, "_TimerUpdate")
; Timer-GUI zurückgeben, damit man den Timer auch löschen Return $hTimerGUI EndFunc ;==>_TimerInit
Func _TimerUpdate($hWnd, $nMsg, $iIDTimer, $iTime) Local Static $aArray, $aInitial, $iUbound
If $hWnd = "SET" Then $aArray = $nMsg ; $aArray wird die cooldowns enthalten, die heruntergezählt werden $aInitial = $nMsg ; $aInitial wird die Werte, die der Array von _TimerInit hatte behalten. $iUbound = UBound($aArray) - 1 Return EndIf
; Alle Zeilen des Arrays durchgehen For $i = 0 To $iUbound ; cooldown runterzählen $aArray[$i][1] -= 100 If $aArray[$i][1] <= 0 Then ; wenn cooldown abgelaufen, tasten senden und ; alten cooldown wiederherstellen _Send("{" & $aArray[$i][0] & "}") $aArray[$i][1] = $aInitial[$i][1] EndIf Next EndFunc ;==>_TimerUpdate
#cs Func shoot($sSend, $iSleep) Local $iTimer If Not $fRunning Then Return
; Tasten senden Send($sSend)
; Warten bis angegebene Zeit abgelaufen $iTimer = TimerInit() Do Sleep(10) If Not $fRunning Then ExitLoop Until _Timer_KillAllTimers($hTimer)
EndFunc ;==>shoot #ce Func _Send($sKey) Local $hTimer If $fRunning Then Return ; Tasten senden ;Send("2345678") Send($sKey) ToolTip("Shooter Läuft",180 ,200) ; Warten bis angegebene Zeit abgelaufen $hTimer = TimerInit() Do Sleep(10) If Not $fRunning Then ExitLoop If $fRunning = True Then ToolTip("",180 ,200) EndIf ;ExitLoop Until _Timer_KillAllTimers($hTimer) ;ToolTip("",100 ,50) ;Until TimerDiff($iTimer) >= $iSleep ;Send($sKey) EndFunc ;==>_Send
Func _pause() If $pause = False Then $pause = True $fRunning = True ;AdlibUnRegister("_Send", 100) Else $pause = False ;AdlibRegister("_Send", 100) EndIf While $pause = True $fRunning = True ToolTip("Pause", 180, 200) Sleep(200) WEnd ToolTip("") EndFunc ;==>pause
Func _end() DllClose($hDll) Exit EndFunc ;==>_end
;==>alter code #cs
#include <Misc.au3> HotKeySet("{ESC}", "_end")
Global $hDll, $fRunning $hDll = DllOpen("user32.dll") $fRunning = False
AdlibRegister("_CheckStrg",100)
While Sleep(250) If $fRunning Then Send("1") Send("2")
While $fRunning shoot("3", 10000) ; sende 3, warte 10.000ms shoot("4", 3000) ; Sende 4 warte 3.000ms shoot("5", 1000) ; Sende 5 warte 1.000ms shoot("6", 1000) ; Sende 6 warte 1.000ms shoot("7", 1000) ; Sende 7 warte 1.000ms shoot("8", 1000) ; Sende 8 warte 1.000ms WEnd EndIf WEnd
Func _CheckStrg() ; Adlib deaktivieren ; (Sonst wird die Funktion nochmals aufgerufen, wenn Strg länger als 100 ms gedrückt) AdlibUnRegister("_CheckStrg")
; Wenn Strg gedrückt If _IsPressed("11",$hDll) Then ; Warte, bis nicht mehr gedrückt Do Sleep(10) Until Not _IsPressed("11",$hDll)
; Wechel den Zustand von $fRunning $fRunning = Not $fRunning ConsoleWrite("$fRunning = " & $fRunning & @CRLF) EndIf
; Und wieder aktivieren. AdlibRegister("_CheckStrg",100) EndFunc
Func shoot($sSend, $iSleep) Local $iTimer If Not $fRunning Then Return
; Tasten senden Send($sSend)
; Warten bis angegebene Zeit abgelaufen $iTimer = TimerInit() Do Sleep(10) If Not $fRunning Then ExitLoop Until TimerDiff($iTimer) >= $iSleep
EndFunc ;==>shoot
Func _end() DllClose($hDll) Exit EndFunc ;==>_end
#ce
wie du siehst steht viel gui drinn die erste gui sollte urspünglich zum veröffentlichen sein und eine iniread inisave funktion beinhalten ich glaube es geht aber auch anders um die eingetragenen werte zu behalten beim nächsten start des programms.die traygui hatte ich so aus der hilfe genommen um sie anzupassen damit ich den script im tray killen kann wenn der mal wieder rumlaggt aber ich glaub das is schon eingebaut normalerweise.
ich bin noch nicht sonderlich bewandert mit dieser thematic von autoit und muss noch viel lernen.
|
|
|
05/26/2011, 12:54
|
#11
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
ich würde dir persöhnlich ja von einem solch "eingeschränkten" gui abraten.
willst du es dennoch so lösen, solltest du dir angewöhnen mit schleifen zu arbeiten.
man könnte das ganze so zusammenfassen:
Code:
Dim $checkbox[8], $time[8], $run = False
$gui_einstellungen = GUICreate("Einstellungen Taste und Zeit", 221, 261, 220, 130)
For $i=0 To 7
$checkbox[$i] = GUICtrlCreateCheckbox('Taste '&$i+2, 10, 5+$i*25, 80, 20)
GuiCtrlSetState(-1, 1)
$time[$i] = GUICtrlCreateInput(1, 150, 5+$i*25, 40, 20)
GuiCtrlCreateUpDown(-1)
Next
$save_button = GUICtrlCreateButton("OK", 32, 210, 40, 17, 0)
$cancel = GUICtrlCreateButton("Exit", 110, 210, 40, 17, 0)
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $save_button
$run = True
Case $cancel
Exit
EndSwitch
If $run Then
; ...
EndIf
WEnd
in den run teil wäre nurnoch eine for schleife einzufügen, welche mit einem eintrag dein script am laufen hält.
würde dir auch immer empfehlen das ganze über das gui steuerbar zu halten. eine oberfläche wird im allgemeinen lieber genutzt, als tastenkombos (kannst ja auch beides nutzen). also einfach einen start/pause button einfügen.
|
|
|
05/26/2011, 18:03
|
#12
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
Quote:
Originally Posted by lolkop
dann verstehe ich nicht warum du das ganze nicht einfach so aufbaust:
Code:
#include <misc.au3>
Dim $timer, $run = False
While Sleep(50)
If _IsPressed(31) Then
$timer = 0
$run = True
ToolTip('Shooter läuft')
EndIf
If _IsPressed(13) Then
$run = False
ToolTip('Pause')
EndIf
If _IsPressed('1B') Then Exit
If $run And TimerDiff($timer)>=1000 Then
For $i=2 To 8
Send($i)
Next
$timer = TimerInit()
EndIf
WEnd
|
diesen teil deine codes habe ich mal getestet ansich nicht schlecht nur soll die taste pause für eine scriptpause sein, also pause gedrückt ich kann die taste 1 normal drücken, ohne das er meine skilltasten drückt.
der script aollte auch mit der taste 1 gestartet und in wartestellung gehen !
also: taste 1 gedrückt script drückt skilltasten taste1 nochmal script geht in wartestellung, taste pause gedrückt script lässt sich nichtmehr mit taste 1 starten es sei denn pause wurde beendet.
evtl. probier mal meinen kompletten code aus und schau in der console was er macht.
ich hab dir auch eine pm geschickt und dank dir trotzdem schonmal für deine großen hilfen.
ich teste noch die anderen scriptteile von dir und berichte!
PHP Code:
#include <misc.au3>
Dim $timer[7], $run = False, $msg[2] = ['Shooter läuft', 'Pause']
Dim $zeit[7] = [1010, 1020, 1030, 1040, 1050, 1060, 1070]
While Sleep(50)
If _IsPressed(31) Then
Do ;[B][COLOR="Red"]mein teil[/COLOR][/B]
Sleep(10) ;[B][COLOR="Red"]mein teil[/COLOR][/B]
Until Not _IsPressed(31) ;[B][COLOR="Red"]mein teil[/COLOR][/B]
ToolTip($msg[$run])
$run = Not $run
EndIf
If _IsPressed('1B') Then Exit
If $run Then
For $i=0 To 6
If TimerDiff($timer[$i])>= $zeit[$i] Then
Send($i+2)
$timer[$i] = TimerInit()
EndIf
Next
EndIf
WEnd
dieser code funktioniert zuverlässiger keine ahnung warum hab den teil den ich geändert hab markiert!
evtl kannst du mir erklären warum der durch meine 3 zeilen zuverlässiger läuft?
|
|
|
05/26/2011, 19:05
|
#13
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
naja wenn ich mir dein ursprungs script anschaue, sieht es für mich so aus als hättest du dir einfach viele codeschnipsel aus anderen scripten zusammen kopiert, welche du für brauchbar hältst.
wenn ich alleine deine pause funktion gesehen habe...
das problem bei diesen "fremden" scripten ist, dass sie in der regel recht stümperhaft geschrieben sind.
will ich beispielsweise eine pause in einem programm haben, so erstelle ich mir einfach einen zustand. dieser wird in einer variable gespeichert.
zb:
Code:
$script_laeuft = False
solange $script_laeuft nicht wahr ist soll meine dauerschleife einfach garnichts machen (pausieren quasi)
Code:
; zustand des scriptes für den anfang auf pause setzen
Dim $script_laeuft = False
; endlosschleife starten
While 1
; wenn das script läuft unser eigentliches script laufen lassen
If $script_laeuft Then ; "If $script_laeuft Then" is semantisch gesehen äquvalent zu If "$script_laeuft = True Then" also, wenn $script_laeuft wahr ist tuhe folgendes...
; eigentliches script
EndIf
Wend
jetzt können wir ausserhalb dieser eigentlichen scriptfunktion einen weg definieren wie $script_laeuft auf True oder False gesetzt werden kann.
der einfachste weg wäre eine key abfrage wie du sie wolltest.
wenn die 1 gedrückt wird, soll $script_laeuft umgestellt werden.
hierfür eignet sich logischerweise die logische "not" verknüpfung am besten.
semantisch gesehen hat not folgende funktion:
Code:
Not True = False
Not False = True
angenommen unser $script_laeuft zustand ist Wahr (True), dann wäre Not $script_laeuft in diesem falle False. andersrum logischerweise das selbe. somit erreichen wir einen zustandswechsel in einer einzigen zeile mit
Code:
$script_laeuft = Not $script_laeuft
es wird quasi immer der gegenteilige zustand angenommen.
wollen wir dies zb bei tastendruck "1" anwenden, setzen wir einfach das ganze in eine If abfrage:
Code:
If _IsPressed(31) Then $script_laeuft = Not $script_laeuft
und schon haben wir einen weg unser script mit einer taste (in diesem falle der 1) zu starten und zu stoppen.
Code:
#include <misc.au3>
; zustand des scriptes für den anfang auf pause setzen
Dim $script_laeuft = False
; endlosschleife starten
While 1
;möglichkeit für zustandswechsel einbauen
If _IsPressed(31) Then $script_laeuft = Not $script_laeuft
; wenn das script läuft unser eigentliches script laufen lassen
If $script_laeuft Then ; "If $script_laeuft Then" is semantisch gesehen äquvalent zu If "$script_laeuft = True Then" also, wenn $script_laeuft wahr ist tuhe folgendes...
; eigentliches script
EndIf
Wend
soweit zur theorie. erschwerend kommt hierbei allerdings noch der fakt hinzu, das _IsPressed eine funktion ist, welche wahr zurück gibt, wenn die jeweilige taste gedrückt ist.
dies wird im millisekunden takt geprüft. hierraus folgt, das sobald die taste länger als eine millisekunde gedrückt wird (was immer der fall ist), der zustand sehr oft gewechselt wird.
Code:
taste gedrückt 1ms -> zustand geht von False auf True
taste gedrückt 2ms -> zustand geht von False auf True auf False
...
um wiederholungen zu vermeiden, muss hier noch eine schleife eingebaut werden, die nach dem tastendruck wartet, bis sie losgelassen wurde.
letztendlich könnte das script so aussehen:
Code:
#include <misc.au3>
; zustand des scriptes für den anfang auf pause setzen
Dim $script_laeuft = False
; endlosschleife starten
While 1
;möglichkeit für zustandswechsel einbauen
If _IsPressed(31) Then
$script_laeuft = Not $script_laeuft
Do
Until Not _IsPressed(31)
EndIf
; wenn das script läuft unser eigentliches script laufen lassen
If $script_laeuft Then ; "If $script_laeuft Then" is semantisch gesehen äquvalent zu If "$script_laeuft = True Then" also, wenn $script_laeuft wahr ist tuhe folgendes...
; eigentliches script
ToolTip('Script Läuft')
Else
ToolTip('Script läuft nicht! (ist pausiert)')
EndIf
Wend
solange du nicht in der lage bist diese einfache funktionsweise zu verstehen, wirst du probleme haben überhaupt scripte schreiben zu können.
|
|
|
05/26/2011, 19:19
|
#14
|
elite*gold: 0
Join Date: Dec 2009
Posts: 126
Received Thanks: 16
|
thx für das ausführliche erläutern ich lese mir das ganze intensiv durch,
wenn ich ruhe zu hause hab (3 * kids + frau = keine ruhe) was meisst abends spät der fall ist oder morgends wenn alle weg sind XD.
ja du hast recht ich bekomme öfter schnipsel ohne spezifische erklärung dazu.
ps:
schau dir mal meinen edit oben an ich habe deinem code 3 zeilen hinzu gefügt im spoiler.
bist du evtl ts mäßig zu erreichen oder via icq dann pm mir bitte deine daten.
|
|
|
05/26/2011, 19:29
|
#15
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
warum das so "besser" läuft habe ich eben gerade erklärt.
ich bin auch in icq unter 316 575 686 erreichbar.
allerdings bin ich da recht wählerisch was kontakte angeht, mit denen ich schreibe, bzw denen ich helfe :P
|
|
|
 |
Similar Threads
|
CPU RPM zu hoch
03/13/2011 - Technical Support - 3 Replies
Aloah Community,
ich habe ein kleines Problemchen. Und zwar ist es dass mein CPU Lüfter sich ein bisschen zu schnell dreht, so schnell das es etwas lauter wird, was beim Zocken nicht stört beim Schlafen jedoch schon. Suche einen gesunden Mittelwert.
Zur Zeit dreht er mit 1400 RPM, das finde ich ein bisschen viel, dafür dass ich nur Surfe etc.
Sobald ich ins BIOS gehe und dort die Lüftersteuerung aktiviere, auf "Leise" schalte, dreht der Lüfter sich mit 400RPM, das ist meiner Meinung...
|
Wie Lad ich neue SF hoch?
01/18/2011 - Metin2 Private Server - 1 Replies
Moin Com ,
Kann mir wer helfen neue Sf hochzuladen und die anderen zu löschen?
Möchte die SF von kay.
DANKE
|
Wie hoch mit dem EQ?
11/21/2010 - Metin2 - 18 Replies
Hey
habe heute auf Lykanthra angefangen,da ich gestern gebannt wurde...
Hab direkt mal bissjen EQ geholt und exp ring doppeldrop etc.
Jetzt wollt ich ma fragen wie hch ich ca. komme wenn ich mit dem eq lvl bis morgen.
Also EQ:
Mönchspp+9 schutz+3
schwert+9 db+3 5halbis 10teufel 5ohnmacht
Schild,helm etc.+6 ohne bonis :/
Dann Tipp+9 Hast+4 10schwertdef 1500tp 10TP Absorbi
|
Ich lvl accs hoch
07/01/2010 - Trading - 12 Replies
ICh möchte an bieten accounts hoch zu leveln hier erstmal die spiele die ich level:
Combat arms (eu)(zz nicht spielbar)
cabal(de)
s4 leauge
pennergame
und noch viele mehr ich nehme psc e*gold dshinis und ich nehme nie mehr als 25€psc(außer es ist wirklich sone arbeit wie 50-60 lvl machen)
|
All times are GMT +1. The time now is 20:48.
|
|