Страница 2 из 10

Добавлено: Ср мар 19, 2008 7:36 pm
Click
CoreLogic.pm
строка примерно 1342 в свн 6263 по крайней мере.

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

$item{storage}{index} = findKeyString(\%storage, "name", $item{name});
$item{name} это то что мы берём из конфига, оно всегда маленькими буквами.
а вот этот пляпа массив %storage (так и не нашёл как он заполняется, наверное в ресив), этот массив уже и большими и маленькими.

дак вот мы ищем в массиве с регистрами имя с только маленькими буквами.

надо сделать чтоб искалось не в %storage, а в новом уже переделанном в маленькие буквы массиве.

Добавлено: Чт мар 20, 2008 8:22 am
Aib0
Я так понимаю, что массив пишется тут:
Network\Receive.pm

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

sub storage_opened {
	my ($self, $args) = @_;
	$storage{items} = $args->{items};
	$storage{items_max} = $args->{items_max};

	$ai_v{temp}{storage_opened} = 1;
	if (!$storage{opened}) {
		$storage{opened} = 1;
		message T("Storage opened.\n"), "storage";
		Plugins::callHook('packet_storage_open');
	}
}
правда как убить регистр - хз

Хотя это не решит проблемы.. нужно переписать не при вводе, а при поиске... тут вроде б:

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

sub findKeyString {
	my $r_hash = shift;
	my $match = shift;
	my $ID = shift;
	foreach (keys %{$r_hash}) {
		if (ref($r_hash->{$_}) && $r_hash->{$_}{$match} eq $ID) {
			return $_;
		}
}
}

Добавлено: Чт мар 20, 2008 8:47 am
Click
:friends: сегодня пороюся

Добавлено: Чт мар 20, 2008 12:19 pm
Click
не то (

Добавлено спустя 17 минут 36 секунд:

lc убирает регистр
вот так байауто реализовано и работает с разными регистрами

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

					# scan the entire items.txt file (this is slow)
					foreach (keys %items_lut) {
						if (lc($items_lut{$_}) eq lc($config{"buyAuto_$args->{index}"})) {
							$args->{itemID} = $_;
						}
					}
а вот так гетауто и не работает))

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

					my %item;
					my $itemName = $config{"getAuto_$args->{index}"};
					if (!$itemName) {
						$args->{index}++;
						next;
					}
					my $invItem = $char->inventory->getByName($itemName);
					$item{name} = $itemName;
					$item{inventory}{index} = $invItem ? $invItem->{invIndex} : undef;
					$item{inventory}{amount} = $invItem ? $invItem->{amount} : 0;
					$item{storage}{index} = findKeyString(\%storage, "name", $item{name});
					$item{storage}{amount} = ($item{storage}{index} ne "")? $storage{$item{storage}{index}}{amount} : 0;
					$item{max_amount} = $config{"getAuto_$args->{index}"."_maxAmount"};
					$item{amount_needed} = $item{max_amount} - $item{inventory}{amount};

					# Calculate the amount to get
					if ($item{amount_needed} > 0) {
						$item{amount_get} = ($item{storage}{amount} >= $item{amount_needed})? $item{amount_needed} : $item{storage}{amount};
					}
Добавлено спустя 36 минут 35 секунд:

вот так вот всё пашет :Yahoo!:

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

					my $invItem = $char->inventory->getByName($itemName);
					$item{name} = $itemName;
+						foreach (keys %items_lut) { 
+							if (lc($items_lut{$_}) eq lc($config{"getAuto_$args->{index}"})) {
+								$item{name} = $items_lut{$_};
+								} 
+							}
					$item{inventory}{index} = $invItem ? $invItem->{invIndex} : undef;
					$item{inventory}{amount} = $invItem ? $invItem->{amount} : 0;
Добавлено спустя 56 секунд:

это починили гетауто

Добавлено спустя 19 минут 18 секунд:

эх скока зенег ушло на тест

Добавлено: Чт мар 20, 2008 7:08 pm
Click
6268 integrated doCommand plugin into openkore source
6270 пофиксил гетауто


[mod="piroJOKE"]дуКомманд "в ядре" - ура![/mod]

Добавлено: Вс апр 13, 2008 7:16 pm
piroJOKE
Нужно проверить работу блоков с настройками по умолчанию. Основание:
andrey1234 писал(а):
Stack писал(а):что заработало то?

вот так написал? :

useSelf_item Red Potion {
hp < 30%
inLockOnly 0
notWhileSitting 1
notInTown 1
timeout
disabled 0
inInventory
manualAI 0
}
Оооо спасибо....Теперь кушает поушены нормально)
Теперь объясните чем этот конфиг отличается вот от этого:
useSelf_item Red Potion {
hp < 30%
}
??????


Да, там нет таймаута, но всё равно через секунду-другую Кора должна была успокоиццо, однако этого по словам афтара не просходило, жрало поушены без остановки.

Добавлено: Вс апр 20, 2008 3:54 pm
DInvalid
Баг с использованием в блоке опций whenPermitSkill и whenNotPermitSkill
в Misc.pm

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

	if ($config{$prefix."_whenPermitSkill"}) {
		return 0 unless $char->{permitSkill} &&
			$char->{permitSkill}->name eq $config{$prefix."_whenPermitSkill"};
	}

	if ($config{$prefix."_whenNotPermitSkill"}) {
		return 0 if $char->{permitSkill} &&
			$char->{permitSkill}->name eq $config{$prefix."_whenNotPermitSkill"};
	}

а должно быть

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

	if ($config{$prefix."_whenPermitSkill"}) {
		return 0 unless $char->{permitSkill} &&
			$char->{permitSkill}->getName() eq $config{$prefix."_whenPermitSkill"};
	}

	if ($config{$prefix."_whenNotPermitSkill"}) {
		return 0 if $char->{permitSkill} &&
			$char->{permitSkill}->getName() eq $config{$prefix."_whenNotPermitSkill"};
	}


Добавлено: Вс апр 20, 2008 5:51 pm
piroJOKE
DInvalid, флуд: я когда такое вижу, впадаю в отчаяние. Ведь это ярко показывает, что ОК уже никто серьёзно не занимается. :cry:

Добавлено: Ср апр 23, 2008 1:13 pm
Click
DInvalid писал(а):Баг с использованием в блоке опций whenPermitSkill и whenNotPermitSkill
в Misc.pm
svn 6332

Добавлено: Вт май 27, 2008 10:57 pm
DInvalid
Если в командной строке написать i desc то кора умирает в ужасных муках.

Добавлено: Вт май 27, 2008 11:35 pm
Click
исправляется так
commands.pm
- } elsif ($arg1 eq "desc") {
+ } elsif ($arg1 eq "desc" && $arg2 ne "") {

Добавлено: Ср июн 04, 2008 10:25 pm
DInvalid
баг это или фича я хз.
Ситуация: бот решил атаковать моба но еще не атаковал (ждет условия блока скиллов, идет к нему, и т.п.),
если в этот момент на моба кто-либо скастует заклинание не наносящее урон (!), то он откажется от атаки, вякнув про киллстил.
При этом не важно, находится ли кастующий с нами в пати или в списке танков; распространенный случай - каст пристом Lex Aeterna.

Это происходит из за логики проверки на КС - если по мобу не нанесено дамага/он сам не нанес дамага, проверяется количество игроков, скастовавших что либо на моба:

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

	 && scalar(keys %{$monster->{castOnByPlayer}})   == 0
естественно, если наш собственный сопартиец-прист кастанул на него
Lex Aeterna или еще что то, то условие не срабатывает и моб считается "нечистым", и атака отменяется.

Я вижу 2 способа это исправить:
1) вообще выкинуть эту проверку, так как то что на моба кто то кинул аги даун, атерну, молчанку не означает что мы его не можем бить, вед так? А для особых случаев есть режим agressiveAntiKS

2) вместо этой элементарной проверки перебирать хэш %{$monster->{castOnByPlayer}} и сравнивать ID кастовавших со списком пати/танкерслист и в случае если найден хотя бы 1 не входящий в эти списки игрок, считать что моб "нечистый", иначе - что "чистый".

Misc.pm

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

	###	
	my $allowed = 1;

	if (scalar(keys %{$monster->{castOnByPlayer}}) > 0) {
	   	
	   foreach (keys %{$monster->{castOnByPlayer}}) {
		my $ID1=$_;
		my $source = Actor::get($_);
		warning TF("Player %s is casting on mob %d times\n",$source->name,$monster->{castOnByPlayer}{$_});
		if ( existsInList($config{tankersList}, $source->{name}) || 
			    ($char->{party} && %{$char->{party}} && $char->{party}{users}{$ID1} && %{$char->{party}{users}{$ID1}})
		)	{

	                warning TF("And it is a party member\n");
			} 
		else
		{
		warning TF("And it is not a party member");
		$allowed = 0;
		}
							}
	}
	###	
	# If monster hasn't been attacked by other players
	if (scalar(keys %{$monster->{missedFromPlayer}}) == 0
	 && scalar(keys %{$monster->{dmgFromPlayer}})    == 0
###	 && scalar(keys %{$monster->{castOnByPlayer}})   == 0
	&& $allowed == 1


Добавлено: Чт июн 05, 2008 10:50 am
Click
проверку я думаю стоит оставить, так как не охото атаковать моба на которого кинули аги блес и тп, а так же не правильно атаковать моба на которого кинули провок.
проверку на пати нужно добавить, но эти сообщения думаю стоит убрать, так как про касты на мобов сообщения и так выводятся, и если килстил, то сообщение тоже выводиться, просто много спама будет.
ок?

Добавлено: Чт июн 05, 2008 11:10 am
DInvalid
Click писал(а):проверку я думаю стоит оставить, так как не охото атаковать моба на которого кинули аги блес и тп, а так же не правильно атаковать моба на которого кинули провок.
проверку на пати нужно добавить, но эти сообщения думаю стоит убрать, так как про касты на мобов сообщения и так выводятся, и если килстил, то сообщение тоже выводиться, просто много спама будет.
ок?
Ммм, это мой сырой код с отладкой, сообщения естесвенно выкинуть надо, и может проверку оптимизировать как нить? Делано на скорую руку.

Насчет провока - после провока моб начинает идти к провокнувшему и атачить, это там проверяется, блесс и аги ну хмм... просто получается что бы отнять моба у нас достаточно на него кинуть терну или еще что то )

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

--- Misc.pm	Mon Mar 17 12:59:30 2008
+++ misc.my	Thu Jun 05 12:40:50 2008
@@ -1329,8 +1329,29 @@
 	}
 
+
+	###	
+	my $allowed = 1;
+	if (scalar(keys %{$monster->{castOnByPlayer}}) > 0) 
+	{
+		foreach (keys %{$monster->{castOnByPlayer}}) 
+		{
+			my $ID1=$_;
+			my $source = Actor::get($_);
+			unless ( existsInList($config{tankersList}, $source->{name}) || 
+			       ($char->{party} && %{$char->{party}} && $char->{party}{users}{$ID1} && %{$char->{party}{users}{$ID1}}))
+			{
+                        		$allowed = 0;
+                                        last;
+			} 
+		}
+	}
+	###
+	
 	# If monster hasn't been attacked by other players
 	if (scalar(keys %{$monster->{missedFromPlayer}}) == 0
 	 && scalar(keys %{$monster->{dmgFromPlayer}})    == 0
-	 && scalar(keys %{$monster->{castOnByPlayer}})   == 0
+###	 && scalar(keys %{$monster->{castOnByPlayer}})   == 0
+	 && $allowed 
+
 
 	 # and it hasn't attacked any other player

Добавлено: Чт июн 05, 2008 1:00 pm
Click
комминтим?