1

Тема: AHK: включение/выключение меток не останавливая работу скрипта в целом

Предыдущая тема, адресованная моей публикации, оказалась мало объясненная и неконструктивная. Я же не получил никаких материализованных желаемых результатов.

Очередной раз хочу обратиться за помощью к опытным пользователям, но уже более разъясненной конкретикой.


Во-первых, при запуске скрипта - отыгровки не работали сразу (режим ожидания).

Во-вторых, по нажатию F1 отыгровки запускались, а именно метка "UnloadGun" (UnloadGun в свою очередь запускает TakeGun).

В-третьих, при очередном нажатии на F1 - метки останавливались. Другими словами, входили в режим ожидания до следующего запуска (и так по кругу).

F1 - ЗАПУСК [>]; F1 - ПАУЗА [=]; и т.д.


Вот пример никчемного нубо-скрипта:

global TazerOut:=0, WeaponDrawn:=0
toggle := true
Return

if ( dokl = 1 )
F1::
if dokl = 1
{
dokl = 0
toggle := (!toggle)
addChatMessage("{696969}[ {FFD700}={696969} ]")
SetTimer, UnloadGun, off
SetTimer, TakeGun, off
}
else
{
dokl = 1
addChatMessage("{696969}[ {228B22}>{696969} ]")
SetTimer, UnloadGun, 10
}
Return

UnloadGun:
	if (WeaponDrawn = 1)
	{
		if not (getPlayerWeaponId() = 24) and (getsexbyskin(getPlayerSkinId()) = "1") and (TazerOut = 2) 
		{
			SendChat("/me поставил пистолет «Desert Eagle» на предохранитель, после чего вставил в кобуру")
			WeaponDrawn:=0, TazerOut:=0
		}
		if not (getPlayerWeaponId() = 24) and (getsexbyskin(getPlayerSkinId()) = "2") and (TazerOut = 2) 
		{
			SendChat("/me поставила пистолет «Desert Eagle» на предохранитель, после чего вставила в кобуру")
			WeaponDrawn:=0, TazerOut:=0
		}
		Sleep 2100
		goto UnloadGun
	}
	else
		goto TakeGun
Return

TakeGun:
	if (WeaponDrawn = 0)
	{
		if ((getPlayerWeaponId() = 24) and (TazerOut != 2))
		{
			Random, randu, 1, 4
			if (randu = 1) {
				SendChat(/me достав пистолет из кобуры)
			}
			else if (randu = 2) {
				SendChat(/me достав пистолет из тактического чехла)
			}
			TazerOut:=2
			WeaponDrawn:=1
		}
		Sleep 2100
		goto TakeGun
	}
	else
		goto UnloadGun
Return

#if !toggle

Еще раз повторюсь, это лишь наглядный пример. Не стоит воспринимать его субъективно.


Заранее спасибо! Без репутации не останитесь.

2

Re: AHK: включение/выключение меток не останавливая работу скрипта в целом

Поскольку приводится "кусок" кода, целостно понять алгоритм не представляется возможным. Вывод сделан на основании представленного примера.
Обе метки организуют логическую петлю, по которой переходят оператором "goto". Это можно исключить из сценария, как избыточное, объединив обе метки в цикл, который организуется таймером, который в свою очередь включается по "F1", в котором для этого используется переключатель "toggle".


TazerOut:=0, WeaponDrawn:=0
Return
F1::
	if (toggle := !toggle) {
		addChatMessage("{696969}[ {FFD700}={696969} ]")
		SetTimer, Cycle, 10
	} else {
		addChatMessage("{696969}[ {228B22}>{696969} ]")
		SetTimer, Cycle, Off
	}
Return

Cycle:
	if (WeaponDrawn)
	{
		if not (getPlayerWeaponId() = 24) and (getsexbyskin(getPlayerSkinId()) = "1") and (TazerOut = 2) 
		{
			SendChat("/me поставил пистолет «Desert Eagle» на предохранитель, после чего вставил в кобуру")
			WeaponDrawn:=0, TazerOut:=0
		}
		if not (getPlayerWeaponId() = 24) and (getsexbyskin(getPlayerSkinId()) = "2") and (TazerOut = 2) 
		{
			SendChat("/me поставила пистолет «Desert Eagle» на предохранитель, после чего вставила в кобуру")
			WeaponDrawn:=0, TazerOut:=0
		}
		Sleep 2100
	}
	else
	{
		if ((getPlayerWeaponId() = 24) and (TazerOut != 2))
		{
			Random, randu, 1, 2
			if (randu = 1) {
				SendChat("/me достав пистолет из кобуры")
			}
			else if (randu = 2) {
				SendChat("/me достав пистолет из тактического чехла")
			}
			WeaponDrawn:=1, TazerOut:=2
		}
		Sleep 2100
	}
Return

Довольно грубое предположение о том, что в место, где обсуждаются знания, люди приходят за репутацией. В Вашей благодарности никто не нуждается, ровно как никто не обязан Вам помогать.

3

Re: AHK: включение/выключение меток не останавливая работу скрипта в целом

KusochekDobra, ну вот, наконец-то! То, что мне нужно.

Спасибо Вам большое, очень помогли!