ra4o сказал(а):
Переменная меняет значение ! Посмотрите, что у Вас происходит, если "$phase"=True ! Постоянно вызывается функция , которая создаёт подсказку , эта подсказка в цикле непрерывно пересоздаётся , в итоге в левом-верхнем углу мелькает окно подсказки, после второго нажатия HotKey подсказка перестанет пересоздаваться и будет отображаться статично (ведь Вы её не убираете). Вынесите создание HotKey вне цикла , зачем его постоянно пересоздавать ? Значение переменной легко проверить , дописав вывод её значения в консоль , например :
Global $phase = false
HotKeySet("w", "changephase")
While 1
if $phase then
ToolTip("Зашёл", 0, 0)
EndIf
sleep(100)
WEnd
func changephase()
$phase = not $phase
ConsoleWrite('$phase='&$phase&@CR)
EndFunc
В подобные циклы включайте небольшую паузу. Для эксперимента - запустите скрипт без паузы в цикле и с паузой и сравните нагрузку на процессор .
Я вставлял сюда Exit и ничего не происходило.
While 1
if $phase then
Exit 0
EndIf
WEnd
Hotkey переназначаю, т.к. у меня идёт проверка, что если я в активном окне, то hotkeyset с функцией, иначе сбрасываю функцию.
Интересно тем, что если я отдельно в скрипте воссоздам ваш вариант - всё работает, но в моём скрипте почему-то не работает.
Сейчас для теста поставил, чтобы когда в варкрафте при $phase = true жал 2, но ноль действий. Бинд на w вне цикла. Все другие функции работают.
Вот полный скрипт:
#include <GUIConstants.au3>
#include <File.au3>
if FileExists ( "config.ini" ) <> True Then
_FileCreate ("config.ini")
Dim $config_key[5][2] = [ [ "1skill", "" ], [ "2skill", "" ], [ "3skill", "" ], [ "5skill", "" ], [ "6skill", "" ] ]
Dim $config_res[2][2] = [ [ "x", "" ], [ "y", "" ]]
IniWriteSection("config.ini", "Keys", $config_key, 0)
IniWriteSection("config.ini", "Resolution", $config_res, 0)
EndIf
GUICreate("Установка разрешения", 240, 120)
GUICtrlCreateLabel("Введи своё разрешение экрана", 35, 10)
$res_x = IniRead("config.ini", "Resolution", "x", "0")
$res_y = IniRead("config.ini", "Resolution", "y", "0")
$x = GUICtrlCreateInput($res_x, 50, 30, 60)
$y = GUICtrlCreateInput($res_y, 120, 30, 60)
$okbutton = GUICtrlCreateButton("Ввёл", 65, 60, 100)
GUICtrlCreateLabel("@Made by Krip1", 77, 95)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "GUI Event", "А зачем тогда запускал?")
Exit 0
Case $msg = $okbutton
ExitLoop
EndSelect
WEnd
IniWrite("config.ini", "Resolution", "x", GUICtrlRead($x))
IniWrite("config.ini", "Resolution", "y", GUICtrlRead($y))
GUIDelete ( )
; Окно с дополнениями
$dopwindow = GUICreate("Дополнения", 350, 240)
GUICtrlCreateLabel("ФЕЙЗЫ ПОКА ЧТО НЕ РАБОТАЮТ.", 15, 5)
GUICtrlCreateLabel("Автокаст фейзов на", 15, 30)
$PhaseAutoCast = GUICtrlCreateInput("", 130, 26, 30)
GUICtrlCreateLabel("На какую кнопку будут юзатся Фейзы?", 15, 55)
$phasebindini = GUICtrlCreateInput("", 230, 51, 30)
GUICtrlCreateLabel("Можно использовать комбинацию, но тогда Alt это !,", 15, 100)
GUICtrlCreateLabel("Cntrl это ^, а Shift это +.", 15, 120)
GUICtrlCreateLabel("Например !w - это Alt+W, ", 15, 150)
GUICtrlCreateLabel("^d - это Cntrl+D, +2 - это Shift+2.", 15, 170)
$backbutton = GUICtrlCreateButton("Назад", 120, 200, 100)
; Окно с настройками биндов
$mainchange = GUICreate("Настройка биндов", 300, 260)
GUICtrlCreateLabel("На сочетание с какой клавишей биндить?", 45, 20)
local $radio1 = GUICtrlCreateRadio ("Alt", 40, 50, 40)
local $radio2 = GUICtrlCreateRadio ("Ctrl", 90, 50, 40)
local $radio3 = GUICtrlCreateRadio ("Shift", 140, 50, 40)
local $radio4 = GUICtrlCreateRadio ("Без сочетания", 190, 50, 110)
; Загрузка бинда из файла ini
Select
Case IniRead("config.ini", "keys", "combokey", "") == "!"
GUICtrlSetState($radio1, $GUI_CHECKED)
Case IniRead("config.ini", "keys", "combokey", "") == "^"
GUICtrlSetState($radio2, $GUI_CHECKED)
Case IniRead("config.ini", "keys", "combokey", "") == "+"
GUICtrlSetState($radio3, $GUI_CHECKED)
Case Else
GUICtrlSetState($radio4, $GUI_CHECKED)
EndSelect
; Ввод биндов
GUICtrlCreateLabel("Введи свои бинды клавиш", 73, 95)
$1 = GUICtrlCreateInput(IniRead("config.ini", "keys", "1skill", ""), 90, 150, 20)
$2 = GUICtrlCreateInput(IniRead("config.ini", "keys", "2skill", ""), 130, 150, 20)
$3 = GUICtrlCreateInput(IniRead("config.ini", "keys", "3skill", ""), 170, 150, 20)
$5 = GUICtrlCreateInput(IniRead("config.ini", "keys", "5skill", ""), 130, 120, 20)
$6 = GUICtrlCreateInput(IniRead("config.ini", "keys", "6skill", ""), 170, 120, 20)
GUICtrlCreateLabel("Ульт", 200, 153)
$dopbutton = GUICtrlCreateButton("Дополнения", 90, 190, 100)
$okbutton = GUICtrlCreateButton("Ввёл", 90, 220, 100)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $dopbutton
GUISetState(@SW_HIDE)
GUISwitch($dopwindow)
GUISetState(@SW_SHOW)
Case $msg = $backbutton
GUISetState(@SW_HIDE)
GUISwitch($mainchange)
GUISetState(@SW_SHOW)
Case $msg = $okbutton
MsgBox(0, "GUI Event", "Поехали!")
ExitLoop
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "GUI Event", "Не забывай обо мне")
Exit 0
EndSelect
WEnd
; Запись бинда комбинирующей клавиши в файл ini
Select
Case BitAND(GUICtrlRead($Radio1), $GUI_CHECKED); Will evaluate to 1 := True or 0 := False
IniWrite("config.ini", "keys", "combokey", "!")
Case BitAND(GUICtrlRead($Radio2), $GUI_CHECKED); Same
IniWrite("config.ini", "keys", "combokey", "^")
Case BitAND(GUICtrlRead($Radio3), $GUI_CHECKED); Same
IniWrite("config.ini", "keys", "combokey", "+")
Case Else
IniWrite("config.ini", "keys", "combokey", "")
EndSelect
IniWrite("config.ini", "keys", "1skill", GUICtrlRead($1))
IniWrite("config.ini", "keys", "2skill", GUICtrlRead($2))
IniWrite("config.ini", "keys", "3skill", GUICtrlRead($3))
IniWrite("config.ini", "keys", "5skill", GUICtrlRead($5))
IniWrite("config.ini", "keys", "6skill", GUICtrlRead($6))
GUIDelete ()
; Задержка для нажатий клавиш 0.005 сек
Opt("SendKeyDownDelay", 5)
; Разрешение экрана из config.ini
Global $Resolution_X = IniRead("config.ini", "Resolution", "x", "")
Global $Resolution_Y = IniRead("config.ini", "Resolution", "y", "")
;Бинды клавиш из config.ini
Global $1skill = IniRead("config.ini", "Keys", "1skill", "")
Global $2skill = IniRead("config.ini", "Keys", "2skill", "")
Global $3skill = IniRead("config.ini", "Keys", "3skill", "")
Global $5skill = IniRead("config.ini", "Keys", "5skill", "")
Global $6skill = IniRead("config.ini", "Keys", "6skill", "")
Global $ComboKey = IniRead("config.ini", "Keys", "ComboKey", "")
Global $phaseon = false
; Индексы скиллов - НЕ ТРОГАТЬ!
Global $1skillPosInd_X = 0.795
Global $2_5skillPosInd_X = 0.85
Global $3_6skillPosInd_X = 0.900
Global $TopSkillsPosInd_Y = 0.88
Global $DownSkillsPosInd_Y = 0.95
; Индексы скиллов - НЕ ТРОГАТЬ!
HotKeySet("w", "ChangePhase")
; Рабочий процесс программы
While 1
if WinWaitActive("Warcraft III") Then
if $phaseon Then
Send(2)
endif
if $1skill <> "" then HotKeySet($ComboKey&$1skill, "OnAutoCast1")
if $2skill <> "" then HotKeySet($ComboKey&$2skill, "OnAutoCast2")
if $3skill <> "" then HotKeySet($ComboKey&$3skill, "OnAutoCast3")
if $5skill <> "" then HotKeySet($ComboKey&$5skill, "OnAutoCast5")
if $6skill <> "" then HotKeySet($ComboKey&$6skill, "OnAutoCast6")
EndIf
; Когда вышли из WarCraft
if WinWaitNotActive("Warcraft III") Then
if $1skill <> "" then HotKeySet($ComboKey&$1skill, "off")
if $2skill <> "" then HotKeySet($ComboKey&$2skill, "off")
if $3skill <> "" then HotKeySet($ComboKey&$3skill, "off")
if $5skill <> "" then HotKeySet($ComboKey&$5skill, "off")
if $6skill <> "" then HotKeySet($ComboKey&$6skill, "off")
EndIf
WEnd
; Пустая функция, чтобы сбросить с кнопки бинд, пока не в WarCraft
func off()
EndFunc
func ChangePhase()
$phaseon = not $phaseon
EndFunc
; Функции для клика правой по скиллам
Func OnAutoCast1()
$cur_pos_mouse = MouseGetPos()
MouseClick("right", $Resolution_X*$1skillPosInd_X, $Resolution_Y*$DownSkillsPosInd_Y, 1, 0)
MouseMove($cur_pos_mouse[0], $cur_pos_mouse[1], 0)
EndFunc
Func OnAutoCast2()
$cur_pos_mouse = MouseGetPos()
MouseClick("right", $Resolution_X*$2_5skillPosInd_X, $Resolution_Y*$DownSkillsPosInd_Y, 1, 0)
MouseMove($cur_pos_mouse[0], $cur_pos_mouse[1], 0)
EndFunc
Func OnAutoCast3()
$cur_pos_mouse = MouseGetPos()
MouseClick("right", $Resolution_X*$3_6skillPosInd_X, $Resolution_Y*$DownSkillsPosInd_Y, 1, 0)
MouseMove($cur_pos_mouse[0], $cur_pos_mouse[1], 0)
EndFunc
Func OnAutoCast5()
$cur_pos_mouse = MouseGetPos()
MouseClick("right", $Resolution_X*$2_5skillPosInd_X, $Resolution_Y*$TopSkillsPosInd_Y, 1, 0)
MouseMove($cur_pos_mouse[0], $cur_pos_mouse[1], 0)
EndFunc
Func OnAutoCast6()
$cur_pos_mouse = MouseGetPos()
MouseClick("right", $Resolution_X*$3_6skillPosInd_X, $Resolution_Y*$TopSkillsPosInd_Y, 1, 0)
MouseMove($cur_pos_mouse[0], $cur_pos_mouse[1], 0)
EndFunc