ошибки в macro-плагине
Модератор: 4epT
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
ошибки в macro-плагине
$.lastpm криво работает с именами с пробелами (есть альтернативное решение)
Re: ошибки в macro-плагине
В процессе написания [share] По пути Ведра. Макро на все профы., столкнулся с желанием писать в макросах так "@arg("aa bb cc",$n)".
Приветствую.
Надо было мне использовать в макросе команду @arg.
Так вот, был крайне удивлен, что <n> может быть только числом, но не переменной. Вот пример:
В первом случае мы увидим желаемое слово "bb", а во втором случае увидим "@arg("$s",$n)". Т.е. во втором случае макро-плагин даже не признал @arg за свою команду.
Хочу переменные во втором аргументе @arg!
Патчим (\openkore_ready\plugins\Macro\Parser.pm), функция "sub parseKw"
Было:
\d+ - вот это у нас виновато, что в обработку попадают команды @arg только с числом во втором аргументе.
Стало:
(\d+|\$\.?[a-z][a-z\d]*) - теперь у нас есть выбор. Или число, или какая-то переменная.
Дальше макро-плагин все сделает сам.
Кстати, разделителями слов в этой команде считаются: " ,.:;'"!?" (пробел, запятая, точка, двоеточие, точка с запятой, одинарная кавычка, двойная кавычка, восклицательный знак, вопросительный знак), а также пары символов "\r" и "\n".
Например:
Вот что нам выдаст консоль:
Приветствую.
Надо было мне использовать в макросе команду @arg.
Код: Выделить всё
@arg ("<argument>", <n>)
возвращает <n>ый текстовой <параметр>
Так вот, был крайне удивлен, что <n> может быть только числом, но не переменной. Вот пример:
Код: Выделить всё
$s = aa bb cc dd
log @arg( "$s", 2 )
$n = 2
log @arg("$s",$n)
Хочу переменные во втором аргументе @arg!
Патчим (\openkore_ready\plugins\Macro\Parser.pm), функция "sub parseKw"
Было:
Код: Выделить всё
if ($pair[0] eq 'arg') {
return $_[0] =~ /\@(arg)\s*\(\s*(".*?",\s*\d+)\s*\)/
}
Стало:
Код: Выделить всё
if ($pair[0] eq 'arg') {
return $_[0] =~ /\@(arg)\s*\(\s*(".*?",\s*(\d+|\$\.?[a-z][a-z\d]*))\s*\)/
}
Дальше макро-плагин все сделает сам.
Кстати, разделителями слов в этой команде считаются: " ,.:;'"!?" (пробел, запятая, точка, двоеточие, точка с запятой, одинарная кавычка, двойная кавычка, восклицательный знак, вопросительный знак), а также пары символов "\r" и "\n".
Например:
Код: Выделить всё
macro hh {
$s = aa bb, cc., dd::ee;ff'gg""h!ii?
$n = 1
log Строка: $s
log Разделителями слов считаются символы: " ,.:;'"!?", а также спец символы "\r" и "\n"
while ($n <= 9) as loop
log Слово номер $n: @arg("$s",$n)
$n++
end loop
}
Код: Выделить всё
macro hh
[macro][log] Строка: aa bb, cc., dd::ee;ff'gg""h!ii?
[macro][log] Разделителями слов считаются символы: " ,.:;'"!?", а также спец символы "\r" и "\n"
[macro][log] Слово номер 1: aa
[macro][log] Слово номер 2: bb
[macro][log] Слово номер 3: cc
[macro][log] Слово номер 4: dd
[macro][log] Слово номер 5: ee
[macro][log] Слово номер 6: ff
[macro][log] Слово номер 7: gg
[macro][log] Слово номер 8: h
[macro][log] Слово номер 9: ii
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
Re: ошибки в macro-плагине
+ 5 автору последнего поста очень спасло жизнь но всё равно осталось некоторая проблема (( как убрать из этих разделителей пробел? Заранее спасибо
Re: ошибки в macro-плагине
Приветствую.
smitovl, не знаю, зачем может понадобится удалять пробел из разделителя слов в @arg, но делается это так.
(openkore_ready/Plugins/Macro/Utilities.pm)
Вот в этой строчке между /[ и ]/ перечислены разделители. Удали пробел.
smitovl, не знаю, зачем может понадобится удалять пробел из разделителя слов в @arg, но делается это так.
(openkore_ready/Plugins/Macro/Utilities.pm)
Код: Выделить всё
# gets word from message
sub getWord {
my ($message, $wordno) = $_[0] =~ /^"(.*?)",\s?(\d+)$/s;
my @words = split(/[ ,.:;\"\'!?\r\n]/, $message);
my $no = 1;
foreach (@words) {
next if /^$/;
return $_ if $no == $wordno;
$no++
}
return ""
}
Код: Выделить всё
my @words = split(/[ ,.:;\"\'!?\r\n]/, $message);
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore