Страница 1 из 2
Как в макросе заставить работать 'pause @rand (4, 8)' ?
Добавлено: Пн дек 04, 2006 1:38 pm
demm
Как в макросе заставить работать "pause @rand (4, 8)".
И можно-ли чтобы @rand выдавала не только целые значения, но и значения с десятичной частью (к примеру 5.13, 6.28, 4.33, etc).
Добавлено: Пн дек 04, 2006 2:57 pm
piroJOKE
А ты значала разберись, работает ли pause с дробными значениями!
Добавлено: Пн дек 04, 2006 3:11 pm
demm
Кора далеко, проверить не могу работатет pause с дробными или нет.
Если пауза не работает с дробными, то второй вопрос снимается, но остается открытым первый...
Добавлено: Пн дек 04, 2006 3:17 pm
piroJOKE
Ну... как насчет взять скажем числа 400...800 и поделить на 100?

Добавлено: Пн дек 04, 2006 3:30 pm
demm
Минуты две вникал и не понял как это поможет...
Дело в том что pause не работает с другими командами\переменными
Допустим возьмем следующее:
$i = 10
pause $i
log i$
через секунду получаем запись в консоле "10"
Берем значение 40, 100, тоже самое запись через секунду в консоль вылетает, т.е. паузы на 10, 40, 100 секунд нету.
Может конечно я туплю, но максимум до чего я додумался это вызывать другой макрос...
call rand_pause_4_8
Код: Выделить всё
macro rand_pause_4_8 {
$i = @random ("4", "5", "6", "7", "8")
if ($i == 4) goto four
if ($i == 5) goto five
if ($i == 6) goto six
if ($i == 7) goto seven
if ($i == 8) goto eight
pause 8
goto end
:four
pause 4
goto end
:five
pause 5
goto end
:six
pause 6
goto end
:seven
pause 7
:end
}
Но как вернутся обратно?
Добавлено: Пн дек 04, 2006 3:41 pm
piroJOKE
@eval вообще видел когда-нибудь?
Добавлено: Пн дек 04, 2006 3:54 pm
demm
@eval (<аргумент>)
оценивает данный <параметр>
@eval (<argument>)
evaluates the given <argument>
что там, что там - непонятно что делает...
смотрю примеры макросов,
примерно такое должно работать?
pause @eval (@rand (4,8))
зачем тогда @eval, почему @rand напрямую не может сообщить время паузы?
Добавлено: Пн дек 04, 2006 4:09 pm
piroJOKE
...а вообще что-то и у меня не выходит...
"eval" все пучком вычисляет, но... пауза не меняется. О_о
Добавлено: Пн дек 04, 2006 4:15 pm
piroJOKE
Плакалъ (изврат, но работает):
Код: Выделить всё
macro izvrat {
$i = 1
$maxi = @rand (4, 8)
while ($i <= $maxi) as looop
log shit!
pause 1
$i++
end looop
}
А вот это не работает. Почему?...
Код: Выделить всё
macro sss {
$i = 15
log $i now pause...
pause $i
#^^^ don't worked
pause @eval( $i )
#^^^ don't worked too
log ...end pause $i
}
Добавлено: Вт дек 05, 2006 7:12 pm
demm
Нашел решение.
Открываем plugins\macro\Script.pm
находим
##########################################
# pause command
} elsif ($line =~ /^pause/) {
my ($tmp) = $line =~ /^pause\s+(\d+)/;
if (defined $tmp) {$self->{timeout} = $tmp}
$self->{line}++;
меняем на
##########################################
# pause command
} elsif ($line =~ /^pause\s+/) {
my ($tmp) = $line =~ /^pause\s+(.*)/;
my $result = parseCmd($tmp);
if (defined $result) {$self->{timeout} = $result}
$self->{line}++;
всё: pause @rand; pause $i - работает
времени до конца оттестить не было, так что могут выскочить баги...
Добавлено: Вт дек 05, 2006 7:22 pm
piroJOKE
Еррр, чувак, мне как челу не понимающему перловские разборки, поясни плз смысл изменения!
(Или - не сам делал?)
ЗЗЫ: На будущее, плззззз, сначал тесть, патом выкладуй!

Добавлено: Вт дек 05, 2006 7:31 pm
demm
Делал сам на основе других команд,
в перле тоже непонимаю ничего, но плагиат с других комманд рулит.
Взял команду лог и попытался разобратся почему она понимает переменные, а pause нет.
тут все пляшется от parseCmd
не уверен насчет того что выделено жирным, что это грамотно записано
} elsif ($line =~ /^pause\s+/) {
my ($tmp) = $line =~ /^pause\s+(.*)/;
но при тесте ранд и подстановке переменно все работает...
приеду домой буду дальше тестить...
Добавлено: Вт дек 05, 2006 7:35 pm
piroJOKE
Если запашет успешно, пиши телегу Анарчо (автору макро-плагина), пусть правит!

Добавлено: Вт дек 05, 2006 7:39 pm
demm
Хотелось бы чтоб знающие перл описали правильно я сделал то что выделил или нет?
Добавлено: Вт дек 05, 2006 9:32 pm
kLabMouse
demm
ЫЫ. Как знающий слегка перл. Скажу. ПРАВИЛЬНО. И даже стоит телегу автору написать чтоб доделал.