слетает TwoHand-Quicken найта при смене оружия [решено]

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Слово? Легко. Я когда то начал было использовать эквипАвто, но... (черт, это давно было, я не знаю, как оно работает щас!) ... там получалась такая картина...

собираюсь атаковать монстра Х
атака по мобу Х, дамаг 20
автосвитч переключает оружие
атака по мобу Х, дамаг 600
атака по мобу Х, дамаг 600
...

Грубо говоря, эквипАуто срабатывает поздно, когда уже началась атака. Вероятно, этот блок изначально был расчитан именно на смену _брони_, после получения дамаги от какого-то моба.

Ну так вот, я описал это на форуме ОК, и мне сразу заявили, что мол "да, так оно и есть, используй автоСвитч, с ним всё окей".

Как минимум, нужно проверить этот момент - "запоздалое переключение".

ЗЫ: Причем иногда случались даже переключения после 2 ударов по мобу. А когда чар атакует скиллами - это критично: у него просто в пустоту уходит СП.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Вот как то так должно быть...
Находим в AI.pm sub attack {

В нем находим:

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

$Ldef = findLastIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped",34) if ($Ldef eq "");
найти экипированное оружие 2 ручное
отключаем это - так как не будем снимать 2 ручное оружие без проверки

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

###$Ldef = findLastIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped",34) if ($Ldef eq "");
Далее ищем опять

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

$Ldef = findLastIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped",34) if ($Ldef eq "");
убираем его

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

###$Ldef = findLastIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped",34) if ($Ldef eq "");
Далее добавлем проверку
ищем

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

				$Rdef = findIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped", 34);
				$Rdef = findIndex(\@{$chars[$config{'char'}]{'inventory'}}, "equipped", 2) if ($Rdef eq "");
				$net->sendUnequip($chars[$config{'char'}]{'inventory'}[$Rdef]{'index'}) if($Rdef ne "" && $chars[$config{'char'}]{'inventory'}[$Rdef]{'equipped'} && $Rdef ne $Ldef);
комментируем последнюю из найденных строчек а перед ней вставляем

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

					#Debug for 2hand Quicken and Bare Hand attack with 2hand weapon
					if((!Misc::whenStatusActive("Twohand Quicken, Adrenaline, Spear Quicken") || $config{"autoSwitch_$i"."_rightHand"} eq "[NONE]") && $Rdef ne "" && $Rdef ne $Ldef) {
						$net->sendUnequip($chars[$config{'char'}]{'inventory'}[$Rdef]{'index'});
					}

[Feb 1 23:41:31 2007.33] [console] Attacking: Monster Goblin Hammer (1)
[Feb 1 23:41:31 2007.33] [console] Encounter Monster : Goblin Hammer
[Feb 1 23:41:31 2007.34] [equip] Auto Equiping [R]: Claymore
[Feb 1 23:41:31 2007.40] [inventory] You unequip Two-handed Sword [1] (25) - Two-Handed Weapon
[Feb 1 23:41:31 2007.42] [inventory] You equip Claymore (33) - Two-Handed Weapon (type 34)
...

[Feb 1 23:41:41 2007.81] [console] Attacking: Monster Santa Poring (0)
[Feb 1 23:41:41 2007.97] [equip] Auto equiping default [R]: Two-handed Sword [1] (unequip 33)
[Feb 1 23:41:41 2007.14] [inventory] You unequip Claymore (33) - Two-Handed Weapon
[Feb 1 23:41:41 2007.15] [inventory] You equip Two-handed Sword [1] (25) - Two-Handed Weapon (type 34)
Вложения
AI_equip.txt
вся процедура
(8.63 КБ) 162 скачивания
Последний раз редактировалось DInvalid Чт фев 01, 2007 11:52 pm, всего редактировалось 1 раз.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

DInvalid
И зачем так сложно???
AutoEquip + условия на Twohand Quicken решают.
ТЕ:
Первое Условие: Использовать таймеро-независимый блок для каста Twohand Quicken в случае если одето оружие 1.
Второе Условие ==//== если одето оружие 2.
ИТД.
Автоматически одевать если оружие Упало, или выбито с рук.

Ыроде проще чем ковырять исходники Коры. Верно???
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

kLabMouse писал(а):DInvalid
AutoEquip + условия на Twohand Quicken решают.
ТЕ:
Первое Условие: Использовать таймеро-независимый блок для каста Twohand Quicken в случае если одето оружие 1.
Второе Условие ==//== если одето оружие 2.
ИТД.
Автоматически одевать если оружие Упало, или выбито с рук.

Ыроде проще чем ковырять исходники Коры. Верно???
Я не понимаю о чем ты.
У людей есть проблема - багнутый autoswitch.
Я ковыряю исходники Коры что бы посмотреть где он бажит.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

DInvalid
autoswitch пашет безукоризненно!
А вот 99.9% багов, из-за тараканов в мозгу.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

kLabMouse писал(а):DInvalid
autoswitch пашет безукоризненно!
А вот 99.9% багов, из-за тараканов в мозгу.
autoswitch - багнутый.
Я это просто так говорить бы не стал.
Я сел и проверил его - да, баг есть.
Потом поискал на форуме OK (ссылки есть в моих постах выше) - баг есть.
Потом посмотрел исходники и нашел место где этот баг (можно спорить баг это или фича) - есть.

Что бы его воспризвести тебе нужен
Найт с Twohand Quicken, соотв в конфиге
useSelf_skill Twohand Quicken {
lvl 5
sp > 20
whenStatusInactive Twohand Quicken

...

}
Несколько разных двуручников

Устанавливаешь на разных мобов разные двуручники,
по умолчанию тоже другой
например

autoSwitch_default_rightHand Two-handed Sword [1]
autoSwitch_default_leftHand
autoSwitch_default_arrow


autoSwitch Goblin Hammer {
rightHand Claymore
leftHand
arrow
distance
useWeapon
}

и смотришь что он будет делать

у меня он делает вот что:
[console] Encounter Monster : Goblin Hammer
[equip] Auto Equiping [R]: Claymore
[inventory] You unequip Two-handed Sword [1] (22) - Two-Handed Weapon
[parseMsg_statuslook] You are no longer: Twohand Quicken
[inventory] You equip Claymore (30) - Two-Handed Weapon (type 34)
[selfSkill] You use Twohand Quicken on yourself : Lv 5
[parseMsg_statuslook] You are now: Twohand Quicken

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

Сообщение kLabMouse »

DInvalid
Ето не БАГ,Ето Фича. У тебя в useSelf_skill Twohand Quicken не указано условие когда не использовать скил по причине того что одет одноручный мечь. Что есть багом пользователя.
Если-бы ты воспользовался тем что дают, а не только тем что привык. То бы знал что и такое возможно.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

kLabMouse писал(а):DInvalid
Ето не БАГ,Ето Фича. У тебя в useSelf_skill Twohand Quicken не указано условие когда не использовать скил по причине того что одет одноручный мечь. Что есть багом пользователя.
Если-бы ты воспользовался тем что дают, а не только тем что привык. То бы знал что и такое возможно.
Ты о чем вообше?
У меня оба меча двуручные. Это кстати написано в логе.
Мне не важно условие в useSelf_skill Twohand Quicken, тем более оно там не полностью описано, только основаная часть.

Баг не в useSelf_skill, а в autoSwitch, и он выражается в том что при переключении двуручных мечей спадает Twohand Quicken, что быть не должно.

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

Сообщение piroJOKE »

kLabMouse
км ты чо-то пил не то, это я тебе точно говорю. )))
причем тут вообще скилл?.... скилл может быть накастован любой.

главное то, что автосвитч работает так "сначала снять старое оружие, и лишь потом одеть новое". а нам надо просто "одеть новое".

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

Сообщение kLabMouse »

piroJOKE
Сорь, Сорь. Видимо лекарств много сварил. :)
Короче как-я понял. Нужно чтоб при смене на еквивалентный тип оружия, он его не снимал сначала. А в случае если на нееквивалентный, то снимал.
ТЕ:
Двуручник на двуручник -- не снимать
Двуручник на одноручник -- Не снимать, можно одеть щит
Одноручник на двуручник -- снять одноручник и щит, одеть двуручник.

:) Надя подумать в правильном пути, более универсальном нежели DInvalid предложил вышше. Ибо оно касалось скила только, и никак не емулирует поведение клиента/пользователя.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

kLabMouse писал(а):piroJOKE
Сорь, Сорь. Видимо лекарств много сварил. :)
Короче как-я понял. Нужно чтоб при смене на еквивалентный тип оружия, он его не снимал сначала. А в случае если на нееквивалентный, то снимал.
ТЕ:
Двуручник на двуручник -- не снимать
Двуручник на одноручник -- Не снимать, можно одеть щит
Одноручник на двуручник -- снять одноручник и щит, одеть двуручник.

:) Надя подумать в правильном пути, более универсальном нежели DInvalid предложил вышше. Ибо оно касалось скила только, и никак не емулирует поведение клиента/пользователя.
Упрямый как сто китайцев =)
По теме - я исправил то что есть уже в коде что бы оно не глючило, а то что оно не эмулирует поведение клиента... хз, что есть то есть.

То что ты предложил - это тоже не катит, потому что во первых тип оружия заранее не известен, и у синов вообще $item->{equip_type} для ножиков в левой руке даст щит, а во вторых, если мы одеваем двуручник то вообше ничего не снимать можно, ну в общем то вообще всегда можно ничего не снимать, кроме случая когда сину надо взять 2 ножа.

П.С. с тем исправлением все вроде работает (нужны еще проверки), но можно переписать код заново конечно.

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

Сообщение piroJOKE »

DInvalid
Я соррри не читал, чего ты понаписывал, (еще раз сорри!), однако даже начало мне уже не нравится:

"...... - так как не будем снимать 2 ручное оружие"

Наша проблема не имеет никакого отношения к двуручности, одноручности, или трехручности оружия. ;) Это уже неправильный подход.

Пример - мерч с одноручным мейсом в руке, с накастованным адреналином.

kLabMouse
Тоже не совсем правильно; точнее правильно, но не до конца. Давайте еще раз подумаем - проблема ТОЛЬКО у сина с его вторым ножом, или еще могут быть исключения?...

Вопрос №2 - а у сина есть какие-то скиллы, на которых может "плохо" подействовать unequip? Хотя это тоже неправильный подход.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

piroJOKE писал(а):DInvalid
Я соррри не читал, чего ты понаписывал, (еще раз сорри!), однако даже начало мне уже не нравится:

"...... - так как не будем снимать 2 ручное оружие"

Наша проблема не имеет никакого отношения к двуручности, одноручности, или трехручности оружия. ;) Это уже неправильный подход.
Бу на тебя!! =)
Я еще раз говорю что это ИСПРАВЛЕНИЕ того, что когда то кто то написал, этот код там есть, и не я все это придумал. Но даже этот неправильный код был написан криво, поэтому приходится извращаться что бы обойти баг.
Да, это не правильный подход, но он уже есть в Коре, он реализован (но криво).
Я исправляю лишь то что там не дает работать, и с подобным исправлением найты будут весело махать меЧом :wink:

---------------------------------------
Но мы же не ищем легких путей?
Я переписал этот код, что бы он использовал bulkEquip, аналогично как сделано в АвтоЭквипе, и это правильный способ (mua ha ha ... really ? ggg).
Теперь принудительно снимаем вещи только тогда когда это явно задано указанием [NONE] в блоках.
Вложения
AIpatch.rar
(1.68 КБ) 170 скачиваний
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

DInvalid
Вот так уже правильнее!
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

Вроде бы VCL закоомитил изменения в SVN.

Если кому надо - может внести эти изменения в нашу сборку?
Ответить