xConf.pl - меняем на ходу mon_control/pickupitems/items

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

Kissa2k писал(а):При чем тут эта ересь?
Чтобы добавлять мобов, которых еще нету в файле.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

vit писал(а):Чтобы добавлять мобов, которых еще нету в файле.
Эм.. Окей, плагин вроде был сделан для совместного использования с macro плагином, т.е. изменение настроек по условию (другими словами на автомате). Я опять не так понял? оО
Если пользователю нужно добавить настройки на монстра, то нахрена ему пользоваться этим плагином - можно все самому поменять в конфигах.
Зачем нужны лишние проволочки?
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

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;
Ищем есть ли моб в этом списке.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

pJ, ты походу не так врубился чего я хочу. Если "не нуп" очистил monsters.txt, то он НЮБ, ибо я имею в виду tables\monsters.txt

DInvalid, спс, будем тестить :Yahoo!:
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

4epT, а ты попробуй, сотри его содержимое, запусти ОК, и посмотри, чо будет. :twisted:

Добавлено спустя 1 минуту 30 секунд:

Kissa2k
Ну почему же "зачем ... если макрос". А зачем с собой таскать mon_control отдельно, если, грубо говоря, макрос сам может создать его начинку? :twisted:
ЗЫ: Это я несерьёзно, не обращайте внимания.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

#Remove all lines below to have Kore auto-generate this table
Ты хоть раз его чистил? Хоть 1 причина его чистить? (Полный русишь?)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

4epT
Типичная причина его "чистить" - "чтобы мобы назывались, как у меня".
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

нид чуть-чуть хелп:
допустим есть переменная:

Код: Выделить всё

$args =Lord of Death 0 1 0
как мне её разбить на 2 части:

Код: Выделить всё

$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 ?? %)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

4epT
Хинт: Последние символы могут быть только:
\t <space> [0-9]
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

kM, ну ты как всегда скажешь обо всём и ни о чём одновременно. Вечно переспрашивать приходится :(

Я бы всё до конца понил, если бы ты сказал куда это конкретно прилепить.. В $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]*)/;
теперь $args = Lord of Death 0 1 0
понимаем как нам нужно, слова отдельно, циферки отдельно :)

я так думаю к хренам собачим проверка синтаксиса что мы там написали после имени моба.. нада же для каждого файла, для каждого значения своё писать.. или написать?

Добавлено спустя 15 минут 26 секунд:

kM, скажи пожалуста в процедуре cleanup, по уму я должен обнулить все переменные (хэши, массивы) которые у меня вообще есть в плагине??

Код: Выделить всё

sub cleanup {
	message "cleaning up\n";
	undef $args;
	undef $key;
	undef $value;
	undef @lines;
	undef $what;
	undef $is;
	undef @new;
}
Добавлено спустя 48 секунд:

или только те, который задаются в самом начале (не в процедурах)??

Добавлено спустя 1 час 5 минут 43 секунды:

хм, походу тока те которые в начале..

Добавлено спустя 21 минуту 32 секунды:

..тихо сам с собою я веду беседу..

хм, ладно продолжу..

у меня была такая фишка, что когда вводишь mconf all, то плагинчек ищет в файле такой ключ и выводит значение:

Код: Выделить всё

my ($key, $value) = split(' ', $args, 2);
(Тут строчка разбивается по пробелам, не очень удобный вариант, т.к. имя моба может состоять из нескольких слов)

заменил на:

Код: Выделить всё

my ($key, $value) = lc($args) =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
теперь, когда вводишь mconf all, плагин не видит all, т.к. видино нету цифр, есть идеи как подправить?
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

4epT писал(а):заменил на:

Код: Выделить всё

my ($key, $value) = lc($args) =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
теперь, когда вводишь mconf all, плагин не видит all, т.к. видино нету цифр, есть идеи как подправить?
Попробуй вывести в консоль значения $key и $value, увидиш где собака зарылась.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

ну, если по чесноку, то у меня так и стоит:

Код: Выделить всё

	my ($key, $value) = $args =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
message "key: $key, value: $value \n";
key и value пустые (если вводить mconf all)

проблема-то собственно ясна где, а именно в хитром шаблоне.

он же ищет нам сначало слова (грубо говоря) потом цифры

а т.к. когда вводим "all" тут нету цифр, то строчка не проходит.

пытался добавить, чтобы цифры "повторялись 0 или 1 раз":
([\s\S]+?) ([\-\d\.]+[\s\S]*)?
тогда key читается, а записывать цифры в value отказывается (если они есть)

кароче нада погрыться регэксп :( так чтобы он понил что я хочу от него %)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Код: Выделить всё

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-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

DInvalid, ну и где ты был, когда я себе мозг ипал?

:Yahoo!: всё гениальное просто :Yahoo!:

добавил 18.01.08

бляха, вот не люблю когда люде изменюят текст своего сообщения :( так получается что я тебя за какую-то фигню поблагодарил, а за что иммменно не понятно, а ведь у тебя было написана вещь:

Код: Выделить всё

my ($key, $value) = $args =~ /([\s\S]+?) ([\-\d\.]+[\s\S]*)/;
[b]$key = $args if !$key;[/b]
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

Люди, помогите. Есть у нас такая вот процедурка:

Код: Выделить всё

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 раза одно и тоже имя моба.
первый раз моба нахим, а при втором запуске не находим.. и т.д.

Получается что мы ищем по хэшу наше значение, если находим, то выходим из него, а второй раз мы продолжаем с того места на котором закончили..

как сделать так, чтобы хэш каждый раз читался с "начала"?

:o
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Ответить