Страница 1 из 2
Задачка №11? Метки в блоках условий / label [решено]
Добавлено: Ср ноя 15, 2006 5:48 pm
piroJOKE
Возьмем любой "блок" с условиями из современной OpenKore, например:
Код: Выделить всё
useSelf_item Apple,Carrot {
hp <= 50%
whenStatusActive
whenStatusInactive
disabled 0
inLockOnly 1
}
Если кто застал оригинальный Kore или modKore, то же блок выглядел бы там так:
Код: Выделить всё
useSelf_item_0 Apple, Carrot
useSelf_item_0_hp_lower 0
useSelf_item_0_hp_upper 50
useSelf_item_0_useWhenStatus
useSelf_item_0_useWhenNoEffects
useSelf_item_0_OnLockMap 0
Второй блок, если бы он был, начинался бы с префикса useSelf_item_1_, и так далее.
Казалось бы, прогресс на лицо! Меньше писанины! Наглядней!
Черта с два. Как этим управлять?!
Предположим, в старой Kore мне взбрело в голову отключить поедание яблочек и морквы - прямо при работающем Kore! Ну так я бы написал...
conf useSelf_item_0_hp_upper 0. Всё. Блок отключен. А теперь вопрос в студию, как то же самое сделать в OpenKore?! Да, там есть опция disabled, но как до нее добраться с консоли или из макроса?! Может есть какой-то способ, но я его не знаю.
Поэтому, было бы неплохо приделать к блокам... метку! Вот пример, как бы это могло выглядеть:
Код: Выделить всё
useSelf_item Apple,Carrot {
label applesEtc
hp <= 50%
whenStatusActive
whenStatusInactive
disabled 0
inLockOnly 1
}
Теперь можно было бы выдумать вот такое обращение:
conf applesEtc.disabled 1
Мда, было бы здорово.
Добавлено: Ср ноя 15, 2006 9:23 pm
Click
Такс)
в общем изменилось только написание в файле конфига
а суть осталась старая
тоесть есть у тебя этот useSelf стоит выше остальных useSelf'ов то он является нулевым, следующий useSelf первый и тд.
тоесть чтобы отключить нулевой селф нуно написать в консоли
conf useSelf_item_0_disabled 1
тестил, всё работает
Добавлено: Чт ноя 16, 2006 2:16 am
kLabMouse
ГГ. нуно будет забацать ети метки. Оно оч удобно будет.
Добавлено: Чт ноя 23, 2006 9:43 pm
piroJOKE
Click
Забыл сказать спасибо. Говорю: Спасибо!
PS: Мы применили это на практике, вот здесь:
forum/viewtopic.php?t=254
Добавлено: Чт дек 07, 2006 4:17 pm
kLabMouse
Всё. Зделал!
Радуйтесь Господа
Теперь можно в любом блоке поставить строчку:
label название_указателя
И вызвать изминение в етом блоке таким образом:
conf название_указателя.параметер_блока [новое_значение_параметра]
И так. Нам нужен файлик Commands.pm
Модифицируем процедуру cmdConf нижеприведённым образом
Код: Выделить всё
sub cmdConf {
my (undef, $args) = @_;
my ($arg1) = $args =~ /^(\w*\.*\w+)/;
my ($arg2) = $args =~ /^\w*\.*\w+\s+([\s\S]+)\s*$/;
if ($arg1 =~ /\./) {
$arg1 =~ s/\.+/\./; # Filter Out Unnececary dot's
my ($label, $param) = split /\./, $arg1, 2; # Split the label form parameter
# This line is used for debug
# message TF("Params label '%s' param '%s' arg1 '%s' arg2 '%s'\n", $label, $param, $arg1, $arg2), "info";
foreach (%config) {
if ($_ =~ /_\d+_label/){ # we only need those blocks witch have labels
if ($config{$_} eq $label) {
my ($real_key, undef) = split /_label/, $_, 2;
$real_key .= "_";
$real_key .= $param;
$arg1 = $real_key;
last;
};
};
};
};
if ($arg1 eq "") {
error T("Syntax Error in function 'conf' (Change a Configuration Key)\n" .
"Usage: conf <variable> [<value>|none]\n");
} elsif (!exists $config{$arg1}) {
error TF("Config variable %s doesn't exist\n", $arg1);
} elsif ($arg2 eq "") {
my $value = $config{$arg1};
if ($arg1 =~ /password/i) {
message TF("Config '%s' is not displayed\n", $arg1), "info";
} else {
message TF("Config '%s' is %s\n", $arg1, $value), "info";
}
} else {
undef $arg2 if ($arg2 eq "none");
Plugins::callHook('Commands::cmdConf', {
key => $arg1,
val => \$arg2
});
configModify($arg1, $arg2);
Log::initLogFiles();
}
}
Добавлено: Чт дек 07, 2006 4:23 pm
piroJOKE
И шо, оно еще и работает? О_о Если да... мож его того... в SVN?
Добавлено: Чт дек 07, 2006 4:24 pm
kLabMouse
piroJOKE
Пащет. Ещё как пашет!. На УРА.
В СВН не знаю. Оформлю Как идею лучше.
Добавлено: Чт дек 07, 2006 4:38 pm
kLabMouse
Ем. Забыл Такое-же зделать для удалённой команды
Добавлено: Ср дек 13, 2006 2:54 am
piroJOKE
ЗЫ: Если не ошибаюсь, твоё изменение - SVN5182. Поздравляю!
Добавлено: Ср дек 13, 2006 3:01 am
kLabMouse
piroJOKE
Дафно Уже. И использунтся всеми.
СПС Большое. Идея стоила её реализации.
Биг Респект Тому кто её предложил.
Теперь НИКАКОГО Гемора С теми ёпаными старыми функциями.
Ещё БЫ Внесли Изменения в Мануал. Вообще было-бы супер.
Добавлено: Чт дек 21, 2006 2:00 pm
piroJOKE
КМ, я заглянул в readme, и мне не понравилось, что я там увидел.
Там написано что "появились labels, и вы можете пользоваться ими, чтобы изменять что-то через команду conf".
Т.е., опция практически не документирована.
В readme следует влепить хотя бы 1 пример. Плз, сделай это...
ЗЫ: У них была хорошая традиция вносить все изменения в один файл. Жаль что они от этого отказались в пользу тормозного мануала.
Добавлено: Чт дек 21, 2006 2:02 pm
kLabMouse
piroJOKE
А где ридмиха?
Добавлено: Чт дек 21, 2006 2:03 pm
piroJOKE
Ну вот это (\README.txt) :
=========================
### OpenKore 1.9.3 (beta)
=========================
To Fix:
- XKore2 is not acting like a real server, it doesn't send complete
information to the client. Connecting to XKore2 from another kore would
fail.
Bug fixes:
- Fixed Party bug where the bot would follow any random player
instead of the master
- i (...............)
Добавлено: Чт дек 21, 2006 2:05 pm
kLabMouse
piroJOKE
Нее.. Там такое не пишут вообще.
Ето в Мануал нуно. Хотя вроде Бибиан взялся дописать в мануал, но не смотрел сам зделали или нет.
Добавлено: Чт дек 21, 2006 2:07 pm
piroJOKE
Что-то короткое, типо: (я с синтаксисом не напутал?)
Код: Выделить всё
useSelf_item Carrot,Meat {
label carrotFood
hp < 50%
timeout 3
}
conf carrotFood.hp < 80%