Что нового

Проблема с TimerInit

shanluu

Новичок
Сообщения
3
Репутация
0
Здравствуйте. Вообще пишу бота и возникла проблема.
Для того чтобы скиллы использовались по КД, необходимо использовать таймер.

вот рабочий пример:
[box title=пример]
Код:
;объявляем переменные
Global Skill1 = TimerInit()
Global SKill1Delay = 2000
Global Skill1Button = '{NUMPAD2}'

;используем в цикле
$fDiff = TimerDiff($Skill1)
	if $fDiff>=$SKill1Delay Then
	       ControlSend($hWnd, "", "", $Skill1Button)
	       $Skill1 = TimerInit()
	EndIf

[/box]

Всё бы хорошо, но для эстетического вида написал функцию, т.к 1 строчка в коде будет красивее выглядеть чем 5.

[box title=функция]
Код:
;всё также объявляем переменные в начале скрипта
Global Skill1 = TimerInit()
Global SKill1Delay = 2000
Global Skill1Button = '{NUMPAD2}'

;код функции
Func SkillUse($SName,$SDelay,$SButton)
	Local $sDif = TimerDiff($SName)
		if $sDif >= $SDelay Then
			ControlSend($hWnd,"","",$SButton)
			$SName = TimerInit()
		EndIf
EndFunc

;вызываем ее
SkillUse($Skill1,$Skill1Delay,$Skill1Button)

[/box]

Проблема в том, что функция после использования плюёт на строчку $SName = TimerInit() и следвательно начинает всегда входить в условие if $sDif >= $SDelay.
Если заменить последнюю строчку на $Skill1= TimerInit(), то всё отлично. Но если это сделать, то суть функции пропадает.

Прошу помощи в решении данной проблемы.

Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 
Автор
S

shanluu

Новичок
Сообщения
3
Репутация
0
пример рабочий, т.к на данный момент использую именно так.
Вопрос был достаточно конкретный и разжёванный. Прошу ответить по существу.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
shanluu [?]
Прошу ответить по существу
Мы и отвечаем. Пример ваш нерабочий.


Если я вас правильно понял:
Код:
;всё также объявляем переменные в начале скрипта
Global $Skill1 = TimerInit()
Global $SKill1Delay = 2000
Global $Skill1Button = '{NUMPAD2}'

;код функции
Func SkillUse(ByRef $SName,$SDelay,$SButton)
    Local $sDif = TimerDiff($SName)
        if $sDif >= $SDelay Then
            ControlSend($hWnd,"","",$SButton)
            $SName = TimerInit()
        EndIf
EndFunc

;вызываем ее
SkillUse($Skill1,$Skill1Delay,$Skill1Button)

Работать будет как вы задумали. Но отмечу - подобная организация не лучшая.
 
Автор
S

shanluu

Новичок
Сообщения
3
Репутация
0
Да, действительно, работает как и планировалось =)
А чем данная организация плоха ? Рад выслушать адекватную критику
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
shanluu,
описанная в этой теме проблема, происходит на почве непонимания ТС (то есть Вами, shanluu) правил области действия переменных (локальные/глобальные переменные) и правил передачи параметров при вызове функции (по значению/по ссылке).
Это базовые понятия в программировании (вообще, а не только в AutoIt).
Начинать разговор о качестве организации структуры кода, если собеседник плавает в основах... Зачем же?
 
Верх