Страница 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
Забыл сказать спасибо. Говорю: Спасибо! :D

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".
Т.е., опция практически не документирована. :oops:

В readme следует влепить хотя бы 1 пример. Плз, сделай это...

ЗЫ: У них была хорошая традиция вносить все изменения в один файл. Жаль что они от этого отказались в пользу тормозного мануала.

Добавлено: Чт дек 21, 2006 2:02 pm
kLabMouse
piroJOKE
А где ридмиха? :shock:

Добавлено: Чт дек 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%