Чтобы добавлять мобов, которых еще нету в файле.Kissa2k писал(а):При чем тут эта ересь?
xConf.pl - меняем на ходу mon_control/pickupitems/items
Модератор: 4epT
Эм.. Окей, плагин вроде был сделан для совместного использования с macro плагином, т.е. изменение настроек по условию (другими словами на автомате). Я опять не так понял? оОvit писал(а):Чтобы добавлять мобов, которых еще нету в файле.
Если пользователю нужно добавить настройки на монстра, то нахрена ему пользоваться этим плагином - можно все самому поменять в конфигах.
Зачем нужны лишние проволочки?
Аааа, теперь понятно!!!4epT писал(а):хочу сделать проверку, чтоб нюб вводит "mconf zizipuka 1", а кора и говорит, типо нет такого моба (в файле tables\monsters.txt)
а @monsters это, как я понимаю, глобальная переменная, т.е. хэш который содержит ID и имена мобов с файла tables\monsters.txt. Может тут я и ошибаюсь (возможно это и не @monsters).
Только в %monsters содержаться, имхо, мобы которых Кора видит вокруг себя!
А содержимое файла tables\monsters.txt читается в %monsters_lut.
Причем ключи этого хэша - ID мобов, так что просто искать по имени не получится.
Вот как то так:
Код: Выделить всё
while (($key,$value) = each %monsters_lut) {
print "$key=$value\n";
}
Код: Выделить всё
my $found = 0;
while (($key,$value) = each %monsters_lut) {
last if ($found = (lc($value) eq lc($mob)));
}
print "\u\L$mob is $key \n" if $found;
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
4epT, а ты попробуй, сотри его содержимое, запусти ОК, и посмотри, чо будет.
Добавлено спустя 1 минуту 30 секунд:
Kissa2k
Ну почему же "зачем ... если макрос". А зачем с собой таскать mon_control отдельно, если, грубо говоря, макрос сам может создать его начинку?
ЗЫ: Это я несерьёзно, не обращайте внимания.
Добавлено спустя 1 минуту 30 секунд:
Kissa2k
Ну почему же "зачем ... если макрос". А зачем с собой таскать mon_control отдельно, если, грубо говоря, макрос сам может создать его начинку?
ЗЫ: Это я несерьёзно, не обращайте внимания.
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
нид чуть-чуть хелп:
допустим есть переменная:
как мне её разбить на 2 части:
хотел смудрить что-то типо:
не вышло однако
хм.. вот идейка зародилась:
может строку разбиватьв массив @var а потом как-нить смотреть элементы массива, и если @var[0] и @var[1] это не цифры, то склеить их в $key ??
допустим есть переменная:
Код: Выделить всё
$args =Lord of Death 0 1 0
Код: Выделить всё
$key = Lord of Death
$value = 0 1 0
Код: Выделить всё
my $key =~ /^\D+/;
my $value =~ /\d/;
($key, $value) = split(" ", $args, 2);
хм.. вот идейка зародилась:
может строку разбиватьв массив @var а потом как-нить смотреть элементы массива, и если @var[0] и @var[1] это не цифры, то склеить их в $key ??
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
kM, ну ты как всегда скажешь обо всём и ни о чём одновременно. Вечно переспрашивать приходится
Я бы всё до конца понил, если бы ты сказал куда это конкретно прилепить.. В $value??
небольшие поправки:
1. не <space>, а \s
2. числа могут иметь значения -1, а в items_control.txt ещё и больше 9 (количество которое оставлять на руках)
Добавлено спустя 16 минут 18 секунд:
кароче вопросс вроде как снят, процедура parseMonControl рулит (блин DInvalid об этом написал ещё на 2-й странице)
вот она моя заветная строчечка:
теперь $args = Lord of Death 0 1 0
понимаем как нам нужно, слова отдельно, циферки отдельно
я так думаю к хренам собачим проверка синтаксиса что мы там написали после имени моба.. нада же для каждого файла, для каждого значения своё писать.. или написать?
Добавлено спустя 15 минут 26 секунд:
kM, скажи пожалуста в процедуре cleanup, по уму я должен обнулить все переменные (хэши, массивы) которые у меня вообще есть в плагине??
Добавлено спустя 48 секунд:
или только те, который задаются в самом начале (не в процедурах)??
Добавлено спустя 1 час 5 минут 43 секунды:
хм, походу тока те которые в начале..
Добавлено спустя 21 минуту 32 секунды:
..тихо сам с собою я веду беседу..
хм, ладно продолжу..
у меня была такая фишка, что когда вводишь mconf all, то плагинчек ищет в файле такой ключ и выводит значение:
(Тут строчка разбивается по пробелам, не очень удобный вариант, т.к. имя моба может состоять из нескольких слов)
заменил на:
теперь, когда вводишь mconf all, плагин не видит all, т.к. видино нету цифр, есть идеи как подправить?
Я бы всё до конца понил, если бы ты сказал куда это конкретно прилепить.. В $value??
небольшие поправки:
1. не <space>, а \s
2. числа могут иметь значения -1, а в items_control.txt ещё и больше 9 (количество которое оставлять на руках)
Добавлено спустя 16 минут 18 секунд:
кароче вопросс вроде как снят, процедура parseMonControl рулит (блин DInvalid об этом написал ещё на 2-й странице)
вот она моя заветная строчечка:
Код: Выделить всё
my ($key, $value) = lc($args) =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
понимаем как нам нужно, слова отдельно, циферки отдельно
я так думаю к хренам собачим проверка синтаксиса что мы там написали после имени моба.. нада же для каждого файла, для каждого значения своё писать.. или написать?
Добавлено спустя 15 минут 26 секунд:
kM, скажи пожалуста в процедуре cleanup, по уму я должен обнулить все переменные (хэши, массивы) которые у меня вообще есть в плагине??
Код: Выделить всё
sub cleanup {
message "cleaning up\n";
undef $args;
undef $key;
undef $value;
undef @lines;
undef $what;
undef $is;
undef @new;
}
или только те, который задаются в самом начале (не в процедурах)??
Добавлено спустя 1 час 5 минут 43 секунды:
хм, походу тока те которые в начале..
Добавлено спустя 21 минуту 32 секунды:
..тихо сам с собою я веду беседу..
хм, ладно продолжу..
у меня была такая фишка, что когда вводишь mconf all, то плагинчек ищет в файле такой ключ и выводит значение:
Код: Выделить всё
my ($key, $value) = split(' ', $args, 2);
заменил на:
Код: Выделить всё
my ($key, $value) = lc($args) =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
Попробуй вывести в консоль значения $key и $value, увидиш где собака зарылась.4epT писал(а):заменил на:теперь, когда вводишь mconf all, плагин не видит all, т.к. видино нету цифр, есть идеи как подправить?Код: Выделить всё
my ($key, $value) = lc($args) =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
ну, если по чесноку, то у меня так и стоит:
key и value пустые (если вводить mconf all)
проблема-то собственно ясна где, а именно в хитром шаблоне.
он же ищет нам сначало слова (грубо говоря) потом цифры
а т.к. когда вводим "all" тут нету цифр, то строчка не проходит.
пытался добавить, чтобы цифры "повторялись 0 или 1 раз":
кароче нада погрыться регэксп так чтобы он понил что я хочу от него
Код: Выделить всё
my ($key, $value) = $args =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
message "key: $key, value: $value \n";
проблема-то собственно ясна где, а именно в хитром шаблоне.
он же ищет нам сначало слова (грубо говоря) потом цифры
а т.к. когда вводим "all" тут нету цифр, то строчка не проходит.
пытался добавить, чтобы цифры "повторялись 0 или 1 раз":
тогда key читается, а записывать цифры в value отказывается (если они есть)([\s\S]+?) ([\-\d\.]+[\s\S]*)?
кароче нада погрыться регэксп так чтобы он понил что я хочу от него
Код: Выделить всё
my ($key, $value) = $args =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
$key=$args if !$key;
message "key: $key, value: $value \n";
П.С.
- Видишь пробел?пытался добавить, чтобы цифры "повторялись 0 или 1 раз":
([\s\S]+?) ([\-\d\.]+[\s\S]*)?
- Нет...
- А он есть!!!
Код: Выделить всё
([\s\S]+?)\тутапробел([\-\d\.]+[\s\S]*)?
а когда вводишь all то после него пробела то нет.
Но можно сделать так: - но так делать ненада!!!
Код: Выделить всё
($key, undef, $value) = lc($line) =~ /([\s\S]+?)(?:\s|(\z))(?(2)|([\-\d\.]+[\s\S]*))/;
Последний раз редактировалось DInvalid Вт янв 15, 2008 2:24 am, всего редактировалось 1 раз.
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
DInvalid, ну и где ты был, когда я себе мозг ипал?
всё гениальное просто
добавил 18.01.08
бляха, вот не люблю когда люде изменюят текст своего сообщения так получается что я тебя за какую-то фигню поблагодарил, а за что иммменно не понятно, а ведь у тебя было написана вещь:
всё гениальное просто
добавил 18.01.08
бляха, вот не люблю когда люде изменюят текст своего сообщения так получается что я тебя за какую-то фигню поблагодарил, а за что иммменно не понятно, а ведь у тебя было написана вещь:
Код: Выделить всё
my ($key, $value) = $args =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
[b]$key = $args if !$key;[/b]
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
Люди, помогите. Есть у нас такая вот процедурка:
на вход её поступает имя моба, потом проверяем есть ли ото в нашем хэше. Если есть, то мы выходим из хэша и пишем и его имя и ИД. Если не нашли моба, то пишем что не нашли.
Итак, вводим 2 раза одно и тоже имя моба.
первый раз моба нахим, а при втором запуске не находим.. и т.д.
Получается что мы ищем по хэшу наше значение, если находим, то выходим из него, а второй раз мы продолжаем с того места на котором закончили..
как сделать так, чтобы хэш каждый раз читался с "начала"?
Код: Выделить всё
sub fi {
my (undef, $mob) = @_;
my ($id,$name) = undef;
my $found = 0;
while (($id,$name) = each %monsters_lut) {
last if ($found = (lc($name) eq lc($mob)));
}
if ($found) {
message "Name: $name ID: $id\n";
$name = undef;
}
else { message "Monster '$mob' is no found"}
}
Итак, вводим 2 раза одно и тоже имя моба.
первый раз моба нахим, а при втором запуске не находим.. и т.д.
Получается что мы ищем по хэшу наше значение, если находим, то выходим из него, а второй раз мы продолжаем с того места на котором закончили..
как сделать так, чтобы хэш каждый раз читался с "начала"?