1 (изменено: Empire, 2016-11-24 22:54:43)

Тема: Остановить LOOP по заданной клавише

Есть простой скрипт- флудер. С помощью SAMP UDF, определяет местоположение персонажа в игре, в зависимости от местоположения - флудит разный текст.

Start:
if (IsRange(2656, 2474, 10, 10))
{
name:="Primer1"
}
else if (IsRange(2955, 2747, 10, 10))
{
name:="Primer2"
}

Loop
{ 
SendChat("/command" name)
sleep 1000
}
return

Проблема:
Раньше LOOP останавливали с помощью Reload, когда не было GUI, это не вызывало никаких проблем. Сейчас, после выполнения RELOAD, перезагружается GUI, сворачивается игра. Это не очень удобно.

Вопрос:
Как организовать прерывание LOOP (именно прерывание, не паузу) по заданной клавише, при этом не перезагружая весь скрипт?

2

Re: Остановить LOOP по заданной клавише

Loop
{ 
SendChat("/command" name)
sleep 1000
GetKeyState, Key, 2 ;прерывание цикла на клавишу "2"
if Key = D
break
}
return

3

Re: Остановить LOOP по заданной клавише

Oomniq

Спасибо, все работает. Теперь другая проблема. Дело в том, что клавиши задаются через GUI. Как правильно записать переменную в GetKeyState?

4

Re: Остановить LOOP по заданной клавише

knopka:="f2"
Gui,Add,Text,,Клавиша для прерывания цикла:
Gui,Add,Hotkey,vknopka,%knopka%
Gui,Add,Button,default gOK,Принять
Gui,Show,,Задание клавиши
return

ok:
;GuiControlGet,knopka,,knopka ;если не нужно закрывать диалог, то заменить этой строчкой ту, что ниже
Gui,Submit
Loop
{ 
SendChat("/command" name)
sleep 1000
GetKeyState, Key, %knopka%
if Key = D
break
}
return

5

Re: Остановить LOOP по заданной клавише

Oomniq

Если в GUI указать сочетание клавиш, допустим ALT+7, то не работает. Если указать одну клавишу - останавливается, только если зажать клавишу. Если один раз быстро нажать - флудить дальше.

6

Re: Остановить LOOP по заданной клавише

knopka:="f2"
Gui,Add,Text,,Клавиша для прерывания цикла:
Gui,Add,Hotkey,vknopka,%knopka%
Gui,Add,Button,default gOK,Принять
Gui,Show,,Задание клавиши
return

ok:
	GuiControlGet,knopka,,knopka   
	Hotkey, % knopka, Stop
	Gui,Hide 
	
Send: 
	Send /command
	SetTimer, Send, -1000
	return
	
Stop:
	SetTimer, Send, Off
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: Остановить LOOP по заданной клавише

serzh82saratov
Не работает такой вариант. Еще и скрипт начинает работать нестабильно, иногда прерывается LOOP, начинает заново флудить.

8

Re: Остановить LOOP по заданной клавише


i:=0
knopka:="!7"
Gui,Add,Text,,Клавиша для прерывания цикла:
Gui,Add,Hotkey,vknopka,%knopka%
Gui,Add,Button,default gOK,Принять
Gui,Show,,Задание клавиши
return

ok:
	GuiControlGet,knopka,,knopka   
	Gui,Hide
loop
{
Hotkey, % knopka, stop
if i = 1
break
SendChat("/command" name)
sleep, 1000
}
return

stop:
i:=1
return

9

Re: Остановить LOOP по заданной клавише

Oomniq

После прерывания, LOOP не запускается второй раз

10

Re: Остановить LOOP по заданной клавише

Empire пишет:

После прерывания, LOOP не запускается второй раз

Вроде бы нигде не была заявлена такая необходимость.

Вариант без переназначения горячей клавиши:


knopka:="!7"
Gui,Add,Text,,Клавиша для прерывания цикла:
Gui,Add,Hotkey,vknopka,%knopka%
Gui,Add,Button,default gOK,Принять
Gui,Show,,Задание клавиши
return

ok:
	i:=0
	GuiControlGet,knopka,,knopka   
	Gui,Hide
loop
{
Hotkey, % knopka, stop
if i = 1
break
SendChat("/command" name)
sleep, 1000
}
Hotkey, % knopka, ok
return

stop:
i:=1
return

11

Re: Остановить LOOP по заданной клавише

Oomniq

Отличный вариант. Благодарю за помощь!