[help] Проверка экипировки в макросе (аналог equipped в АМ)

Всё, что касается макро-плагина.

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

Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
m9ss
Энтузиаст
Сообщения: 50
Зарегистрирован: Ср апр 30, 2008 4:10 pm

[help] Проверка экипировки в макросе (аналог equipped в АМ)

Сообщение m9ss »

Возникла необходимость проверки одета вещь или нет в макросе, пока нашел только 1 способ это сделать:

automacro checkeq0 {
equipped topHead Poo Poo Hat
call editconf0
run-once 1
}

macro editconf0 {
do conf eqitem 1
release checkeq1
}

automacro checkeq1 {
equipped topHead none
call editconf1
run-once 1
}

macro editconf1 {
do conf eqitem 0
release checkeq0
}

macro work {
if (@config(eqitem) = 1) goto work1
if (@config(eqitem) = 0) goto work2
:work1
log шапка одета
goto end
:work2
log нету шапки
:end
}

но думаю что этот способ слишком нерациональный, и к тому же возникают проблемы если я в процессе выполнения другого макроса одеваю/снимаю Poo Poo Hat
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Используй eval =)
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: [help] Проверка экипировки в макросе (аналог equipped в АМ)

Сообщение vasa666 »

eval - Это хорошо. Но когда не знаешь не синтаксиса перла... не глобальных переменных в боте.. копаться можно долго.
Вот тоже возникла потребность в проверке одета ли определённая шмотка (нож) или нет.

EternalHarvest выручай!))) взываю к твоим знаниям))
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: [help] Проверка экипировки в макросе (аналог equipped в АМ)

Сообщение EternalHarvest »

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

##
# Actor::Item::get(name, skipIndex, notEquipped)
# item: can be either an object itself, an ID or a name.
# skipIndex: tells this function to not select a certain item (used for getting another item with the same name).
# notEquipped: 1 = not equipped item; 0 = equipped item; undef = all item
# Returns: an Actor::Item object, or undef if not found or parameters not matched.
vasa666
Энтузиаст
Сообщения: 103
Зарегистрирован: Вт июн 19, 2007 8:58 pm
Откуда: Москва
Контактная информация:

Re: [help] Проверка экипировки в макросе (аналог equipped в АМ)

Сообщение vasa666 »

А вот так я уже непонимаю((
т.к. перл и его синтаксис ваще незнаю(((

Добавлено спустя 13 часов 23 минуты 10 секунд:
вроде вот так проверяется шмот в automacro

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

sub checkEquip {
	if ($_[0] =~ /,/) {
		my @equip = split(/\s*,\s*/, $_[0]);
		foreach my $e (@equip) {return 1 if checkEquip($e)}
		return 0
	}

	my $arg = $_[0];

	if ($arg =~ m/^((?:top|mid|low)Head|(?:left|right)Hand|robe|armor|shoes|(?:left|right)Accessory|arrow)\s+(.*)/i) {
		if (my $item = $char->{equipment}{$1}) {
			return lc($2) eq lc($item->name)?1:0
		}
		return lc($2) eq 'none'?1:0
	}

	$arg = lc($arg);
	foreach my $s (keys %{$char->{equipment}}) {
		next unless lc($char->{equipment}{$s}->name) eq $arg;
		return 1
	}
	return 0
}

как это преобразовать в eval?
Ответить