1

Тема: AHK: Как сделать полную остановку цикла?

Как сделать полную остановку цикла Loop после нажатия клавиши F2?

if chatInput contains /дежурный
{
	RegExMatch(chatInput, "\/дежурный (\d+) (\d+)", dez)
	If (dez1 > 0) and (dez1 < 6) and (dez2 > 0) and (dez2 < 61)
	{
		addChatMessage(Color_Norm  "[AHK]:Отключить /дежурныйофф")
		SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " dez1 "")
		Loop
		{
			sleep % (dez2 * 60000)
			SendChat("[Дежурcтво] Докладывает " Nameplauer " | Палата №" dez1 ".")
		}
	}
	Else
	{
		addChatMessage(Color_Norm  "[AHK]:Используйте: /дежурный ''Палата'' ''Интервал''")
	}
}

2

Re: AHK: Как сделать полную остановку цикла?

Нужно на нажатие F2 повесить, к примеру, loop_stop := 1. А в цикле всё время проверять значение  loop_stop. Если оно равно 1, то выполнить комнду Break.

Кстати, частый вопрос. Нужно в FAQ добавить.

3

Re: AHK: Как сделать полную остановку цикла?

ypppu
Можешь кодом дать?
Туго доходит((

4

Re: AHK: Как сделать полную остановку цикла?

Floop пишет:

ypppu
Можешь кодом дать?


bLoop:=0
Loop
{
	if(bLoop)
		break
	tooltip % A_Index
} msgbox Loop end
return

F2::bLoop:=1

5 (изменено: Phoenixxx_Czar, 2017-12-13 04:59:15)

Re: AHK: Как сделать полную остановку цикла?

Кхм.. А я бы посоветовал сделать таймером. И переделать проверку на команду, как-то так мне кажется будет лучше:

+ открыть спойлер
if (RegExMatch(chatInput, "^\/дежурный"))
{
	if (RegExMatch(chatInput, "^\/дежурный ([1-6]) (\d{1,2})$", out))
	{
		If (out2 >= 1 && out2 <= 60)
		{
			post_active := 1
			post_palata := out_1
			addChatMessage(Color_Norm  "[AHK]:Отключить /дежурныйофф")
			SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " post_palata)
			SetTimer, AutoPost, % out2 * 60000
		}
		else
			addChatMessage(Color_Norm  "[AHK]: Используй меньше 60-ти минут!")
	}
	Else
		addChatMessage(Color_Norm  "[AHK]: Используйте: /дежурный [Палата] [Интервал]")
}

; код

AutoPost:
if (post_active)
	SendChat("[Дежурcтво] Докладывает " Nameplauer ". Палата №" post_palata ".")
Return

К тому же если смотреть с РП стороны, то твое Имя уже пишется перед сообщением. А так же знак "|" - является мг знаком.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

6

Re: AHK: Как сделать полную остановку цикла?

Phoenixxx_Czar
Если нужно уйти с дежурства то как его остановить?

7

Re: AHK: Как сделать полную остановку цикла?

MandarinKa02
Как сделать что бы

	if(bLoop)
		break
	tooltip % A_Index

Чекал каждую секунду? У меня получается что он её черает когда задержка пройдёт

if chatInput contains /дежурный
{
	RegExMatch(chatInput, "\/дежурный (\d+) (\d+)", dez)
	If (dez1 > 0) and (dez1 < 6) and (dez2 > 0) and (dez2 < 61)
	{
		addChatMessage(Color_Norm  "[AHK]:Отключить нажмите ''F2''")
		SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " dez1 "")
		bLoop:=0
		Loop
		{
			sleep % (dez2 * 60000)
			if(bLoop)
			{
				break
				tooltip % A_Index
			}
			SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Палата №" dez1 ".")
		}
		return
		F2::bLoop:=1 addChatMessage(Color_Norm  "Вы закончили дежурство") SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Закончил дежурить в палате №" dez1 "")
	}
	Else
	{
		addChatMessage(Color_Norm  "[AHK]: Используйте: /дежурный [Палата 1-5] [Интервал 1-60]")
	}
}

8

Re: AHK: Как сделать полную остановку цикла?

Floop, SetTimer, AutoPost, off

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

9

Re: AHK: Как сделать полную остановку цикла?

Phoenixxx_Czar
Можешь сделать в код что бы на F2 нажимаешь и цикл полностью отключается)) Плюсом не обижу

10 (изменено: Diman_Express, 2017-12-13 20:55:38)

Re: AHK: Как сделать полную остановку цикла?

Floop,


SetTimer, Script1
return

Script1:
if chatInput contains /дежурный
{
	RegExMatch(chatInput, "\/дежурный (\d+) (\d+)", dez)
	If (dez1 > 0) and (dez1 < 6) and (dez2 > 0) and (dez2 < 61)
	{
		addChatMessage(Color_Norm  "[AHK]:Отключить /дежурныйофф")
		SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " dez1 "")
		Loop
		{
			sleep % (dez2 * 60000)
			SendChat("[Дежурcтво] Докладывает " Nameplauer " | Палата №" dez1 ".")
		}
	}
	Else
	{
		addChatMessage(Color_Norm  "[AHK]:Используйте: /дежурный ''Палата'' ''Интервал''")
	}
}
return

F2::
SetTimer, Script1, off
return

11 (изменено: Floop, 2017-12-13 23:22:10)

Re: AHK: Как сделать полную остановку цикла?

Diman_Express
Ничего не вышло всё также выдаёт доклад в чат((
Совет MandarinKa02 помог, но там он ждёт задержку и только потом срабатывает Break.

12 (изменено: MandarinKa02, 2017-12-13 23:22:26)

Re: AHK: Как сделать полную остановку цикла?

F2::
SetTimer, Script1, Delete
return

13

Re: AHK: Как сделать полную остановку цикла?

MandarinKa02
Спасибо тебе большое плюсом не обидел))
Да но теперь если просто ввести /дежурный то флудит
http://skrinshoter.ru/i/131217/tSc5H5an.png

14

Re: AHK: Как сделать полную остановку цикла?

Floop, пробуй:

if (RegExMatch(chatInput, "^\/дежурный"))
{
	if (RegExMatch(chatInput, "^\/дежурный ([1-6]) (\d{1,2})$", out))
	{
		If (out2 >= 1 && out2 <= 60)
		{
			post_active := 1
			post_palata := out_1
			addChatMessage(Color_Norm  "[AHK]:Отключить /дежурныйофф")
			SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " post_palata)
			SetTimer, AutoPost, % out2 * 60000
		}
		else
			addChatMessage(Color_Norm  "[AHK]: Используй меньше 60-ти минут!")
	}
	Else
		addChatMessage(Color_Norm  "[AHK]: Используйте: /дежурный [Палата] [Интервал]")
}

; код

AutoPost:
if (post_active)
	SendChat("[Дежурcтво] Докладывает " Nameplauer ". Палата №" post_palata ".")
Return

F2::
if (post_active)
	SetTimer, AutoPost, off
return
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

15 (изменено: Floop, 2017-12-14 09:53:38)

Re: AHK: Как сделать полную остановку цикла?

Phoenixxx_Czar
Тут если писать просто /дежурный то он выдаёт подсказку как правильно написать и доклад хотя его вообще тогда не тадо.
http://skrinshoter.ru/i/141217/GP1cBJSz.png

16

Re: AHK: Как сделать полную остановку цикла?

Floop, поставьте точки в конце предложений:
http://forum.script-coding.com/viewtopi … 12#p122212;
http://forum.script-coding.com/viewtopi … 38#p122238;
http://forum.script-coding.com/viewtopi … 55#p122255;
http://forum.script-coding.com/viewtopi … 59#p122259.

17

Re: AHK: Как сделать полную остановку цикла?

Floop, косяк в твоем коде где-то..

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

18 (изменено: MandarinKa02, 2017-12-21 19:36:15)

Re: AHK: Как сделать полную остановку цикла?

Phoenixxx_Czar, неа. Косяк таки в вашем коде.


if (RegExMatch(chatInput, "^\/дежурный"))
{
	if (RegExMatch(chatInput, "^\/дежурный ([1-6]) (\d{1,2})$", out))
	{
		If (out2 >= 1 && out2 <= 60)
		{
			post_active := 1
			post_palata := out_1
			addChatMessage(Color_Norm  "[AHK]:Отключить /дежурныйофф")
			SendChat("/r [Дежурcтво] Докладывает " Nameplauer ". Заступаю на дежурство в палату " post_palata)
			SetTimer, AutoPost, % out2 * 60000
		}
		else
			addChatMessage(Color_Norm  "[AHK]: Используй меньше 60-ти минут!")
	}
	Else
		addChatMessage(Color_Norm  "[AHK]: Используйте: /дежурный [Палата] [Интервал]")
}
return;<--------------------------------забыли
; код

AutoPost:
if (post_active)
	SendChat("[Дежурcтво] Докладывает " Nameplauer ". Палата №" post_palata ".")
Return

F2::
if (post_active)
	SetTimer, AutoPost, off
return

19

Re: AHK: Как сделать полную остановку цикла?

MandarinKa02, дак это он должен был сам сделать, это лишь проверка.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

20

Re: AHK: Как сделать полную остановку цикла?

Через KeyWait проще.