Задачка №11? Метки в блоках условий / label [решено]

Разработка новых функций.

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

Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Задачка №11? Метки в блоках условий / label [решено]

Сообщение 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
Мда, было бы здорово.
Последний раз редактировалось piroJOKE Сб янв 12, 2008 3:06 pm, всего редактировалось 2 раза.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

Такс)
в общем изменилось только написание в файле конфига
а суть осталась старая
тоесть есть у тебя этот useSelf стоит выше остальных useSelf'ов то он является нулевым, следующий useSelf первый и тд.
тоесть чтобы отключить нулевой селф нуно написать в консоли

conf useSelf_item_0_disabled 1

тестил, всё работает
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

ГГ. нуно будет забацать ети метки. Оно оч удобно будет.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Click
Забыл сказать спасибо. Говорю: Спасибо! :D

PS: Мы применили это на практике, вот здесь: forum/viewtopic.php?t=254
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 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();
	}
}
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

И шо, оно еще и работает? О_о Если да... мож его того... в SVN?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
Пащет. Ещё как пашет!. На УРА.
В СВН не знаю. Оформлю Как идею лучше.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Ем. Забыл Такое-же зделать для удалённой команды :(
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

ЗЫ: Если не ошибаюсь, твоё изменение - SVN5182. Поздравляю! ;)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
Дафно Уже. И использунтся всеми.
СПС Большое. Идея стоила её реализации.
Биг Респект Тому кто её предложил.
Теперь НИКАКОГО Гемора С теми ёпаными старыми функциями.
Ещё БЫ Внесли Изменения в Мануал. Вообще было-бы супер.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

КМ, я заглянул в readme, и мне не понравилось, что я там увидел.
Там написано что "появились labels, и вы можете пользоваться ими, чтобы изменять что-то через команду conf".
Т.е., опция практически не документирована. :oops:

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

ЗЫ: У них была хорошая традиция вносить все изменения в один файл. Жаль что они от этого отказались в пользу тормозного мануала.
Последний раз редактировалось piroJOKE Чт дек 21, 2006 2:03 pm, всего редактировалось 1 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
А где ридмиха? :shock:
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение 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 (...............)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
Нее.. Там такое не пишут вообще.
Ето в Мануал нуно. Хотя вроде Бибиан взялся дописать в мануал, но не смотрел сам зделали или нет.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Что-то короткое, типо: (я с синтаксисом не напутал?)

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

useSelf_item Carrot,Meat {
	label carrotFood
	hp < 50%
	timeout 3
}

conf carrotFood.hp < 80%
Последний раз редактировалось piroJOKE Чт дек 21, 2006 2:09 pm, всего редактировалось 1 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Ответить