Страница 1 из 1

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

Добавлено: Чт июн 05, 2008 4:35 pm
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

Добавлено: Пт июн 06, 2008 8:46 am
DInvalid
Используй eval =)

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

Добавлено: Чт июн 02, 2011 11:42 am
vasa666
eval - Это хорошо. Но когда не знаешь не синтаксиса перла... не глобальных переменных в боте.. копаться можно долго.
Вот тоже возникла потребность в проверке одета ли определённая шмотка (нож) или нет.

EternalHarvest выручай!))) взываю к твоим знаниям))

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

Добавлено: Чт июн 02, 2011 9:13 pm
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.

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

Добавлено: Пт июн 03, 2011 12:04 pm
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?