XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
RemoveItem bug

Вступление


Речь пойдет в данной теме об очередном чудодейственном баге в игрушке Варкрафт.
Баг был обнаружен в прошлом году, когда Jon выложил пример по отлову стоимости предмета, но не был "рентабильным". Почему - объясню дальше

По сути бага


По своему действию баг напоминает свойства спеллбука Сергея, тоесть позваляет добавлять способности юнитам, не занимающие места на интерфэйсе.

Плюсы

  • Отсутствие лимита на добавление абил
  • Простой механизм добавления способностей (в том числе и из-за отсутствия лимитов)
  • Все остальные плюсы, которые касаются спеллбука Сергея
  • Абсолютно все пассивки суммируются (будь то критикал страйк или аура)
  • Добавленные способности легко убираются с помощью RemoveAbility, одна за другой. даже если они одного типа.
  • Так же сохраняется возможность триггерно манипулировать уровнями последней наложеной абилы.
    » И это здорово
    Фактически это в степень увеличивает полезность нашего бага - создаем предметную абилу с дохренашным кол-вом уровней и ставим нужные нам значения в соответствии с уровнем в РО, а затем раз добавив багом уже манипулируем через изменения уровней значениями этой абилы :)
  • Узнать текущий уровень абилы можно так же, триггером :) Level of Ability for unit(гуи) или GetAbilityLevel()

Минусы

  • Пока не известно относительно применения не-пассивных заклинаний
  • Абила должна относится к предмету(впрочем, для пассивок это не минус)
  • Механизм требует наличия способности Предметы (герой). Так что будте осторожны! Не-героям давать бонусы к хар-кам героев - перенести быстрый вылет игры
  • На присвоение абилы данным методом требуется небольшое время, что затрудняет работу с циклами

Аспекты

  • Если у юнита имеется добавленная данным методом абила, то поверх нее нельзя добавить эту же абилу триггерно, для этого прийдется убирать все добавленные через баг абилы этого же типа. Поверх добавленной триггерно абилы, ее копии ложаться багом без проблем

Механизм


Принцип работы простой - при покупке предмета в лавке, очевидно, существует отличный от Create & GiveItemToHero механизм создания предмета для героя - если мы уберем предмет из игры RemoveItem при событии продажи предмета из лавки EVENT_PLAYER_UNIT_SELL_ITEM предмет удаляется, НО абила предмета остается у героя . Очевидно при реакции сначала создается абила, а потом добавляется предмет, предмет мы убираем, не создав а абила успевает проскочить, не будучи привязаной к предмету.

Нерентабельным этот баг был до поры, пока Warden не выложил функцию по триггерной продаже предмета из лавки, так что мы теперь можем спрятав магазин и увеличив радиус определения героя для магазина мы можем сэмулировать добавление абилы нашим багом.

Более полно в карте Отписывайтесь по механизму, ведь механизм еще почти неисследован.
Прикрепленные файлы
Тип файла: w3x AddAbil.w3x (46.5 Кбайт, 237 просмотров )

Отредактировано FellGuard, 11.04.2007 в 09:16.
Старый 16.02.2007, 17:04
dk

offline
Опыт: 60,293
Активность:
С системкой знаком) Всем советую втыкать... Пока научились юзать только пасивки, но мб и до активок ухитримся... Красную стрелочку пофиксил?
Старый 16.02.2007, 17:31
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Нед, стрелочка нужна для определения героя - которому даем абилу. При селекте др. героя стрелочка переключается

FellGuard добавил:
Думаю стрелку убрать легко. Для справки - вся соль системы в Функции
Код:
IssueNeutralImmediateOrderDyId(Player, unit, integer)
И триггере Checker)
Старый 16.02.2007, 17:35
dk

offline
Опыт: 60,293
Активность:
Я подумал убрать то ее легко, но вот убрать так чтобы обычные стрелочки от магазина остались работать это уже проблема...
Старый 16.02.2007, 17:39
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
А, ты об способности для стандартных и нестандартных магазинов Ну этот трабл решается созданием нестандартной абилы Выбрать героя

FellGuard добавил:
Мой косяк, должен был пофиксить

FellGuard добавил:
Вапще уже из сэмпла видно, как можно добавлять всевозможные бонусы :) Имхо играбельный получился сэмпл

FellGuard добавил:
Простите за нескромность)
Старый 16.02.2007, 17:50
bladehamster

offline
Опыт: 3,660
Активность:
хмм лол... в этом случае активные абилы будут работать на кнопочки нампада (1-7)
Старый 16.02.2007, 17:55
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Не будут. Проверено. Аесли бы работали - вот вам идеи по управлению юнитами :)

FellGuard добавил:
О, нашел еще один плюс - ауры стакаются :) Это конечно useless, но теперь нет проблем со стаканьем сфер и эффектов - помните сколько было вопросов по поводу.

FellGuard добавил:
Хм выяснилось по сферам - атака и эффект суммируются, но вот сфера проклятия ведет себя неадекватно - после добавления второй раз сфера перестает проклинать врагов при атаке и начинает проклинать атакованых друзей :)

Отредактировано FellGuard, 09.05.2007 в 23:53.
Старый 16.02.2007, 18:31
DioD

offline
Опыт: 45,134
Активность:
дело в том что система работает с запозданием во первых на событие выбора юнита игроком, во вторых на определение шопом героя.
Собственно что и было ранее определено.
ну и само собой из за этих задержек одним шопом 2 игрока свободно пользоваться не смогут.
про не пассивки...
вроде как можно их юзать через ордер айди, для теста достаточно дать абилу основаную на той что у юнита уже есть, как вам известно абилы накладываются, и скорее всего юнит применит скрытую абилу, тут та и ордер айди можно будет поймать
Старый 16.02.2007, 18:31
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Если б ты помог - у меня толи руки кривые толи я просто не смог отследить ордер. Ни order ни orderById здесь не подходят.
Нетрат вродебы сейчас занимется тестом на каст ордеры, но в варе механизм юзания предмета идет через native UnitUseItem - она в отношении и ордера, и ид предмета, и абилы не имеет эффекта - как и IssueOrder:\.
По поводу героя - просто к каждому герою аттачить по магазину, это не трудно. Да и при смене владельца путем IssueNeutralTargetOrder(u, "smart", target) проходит меньше 0.1
Старый 16.02.2007, 18:36
NETRAT

offline
Опыт: 83,712
Активность:
Еще минус - на присвоение абилы требуется время, то есть по циклу это сделать не получится

NETRAT добавил:
Нет, ничем я щаз не занимаюсь - это я вам предложил проверить все абилы (нацеленные, ненацеленные, автокаст) на ордеры
Старый 16.02.2007, 18:42
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Если ты о тормозах при присвоении абилы с предметом первый раз герою - это решается добавлением предметов до начала игры какому-нибудь герою с последующим перемещением их из инвентаря и из игры - preload.
Если ты по stock regen. - то значение 0 в пополнении стока делает покупку не столь тормозной

FellGuard добавил:
Ну а лууп наверное правда будет подтормаживать.
Старый 16.02.2007, 18:45
DioD

offline
Опыт: 45,134
Активность:
дело в том что ВСЁ имеет приказ, даже когда крипы спать ложатсяониполучают приказ на сон, когда юнит оглушен онполучает приказ на стун
Старый 16.02.2007, 19:03
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Слышал :) Вот как их еще ловить.. Из триггеров за юз предмета отвечает
UnitUseItem. Очевидно, нативка берет либо предмет, либо его абиллист. Это плохо, итем то у нас отсутствует :\
Старый 16.02.2007, 19:19
AnD
Weighted Companion Cube
offline
Опыт: 7,351
Активность:
с фантазией у мну тяжко... но подскажите пару вещей в РПГ где мона сию фичу заюзать?
Старый 17.02.2007, 13:47
dk

offline
Опыт: 60,293
Активность:
Добавление спеллов которые невидимы для игрока в неограниченном количестве...
Старый 17.02.2007, 13:53
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Нашел еще особенности - поверх уже добавленной нашим методом копии абилы, триггерно (вместе с интерфэйсом) добавить такуюже не получится - надо ремувить все копии. Поверх триггерной "графической" абилы, нашим методом копии спокойно накладываются.
Цитата:
Еще новость - есть возможность триггерно манипулировать уровнями последней наложеной абилы. Фактически это в степень увеличивает полезность нашего бага - создаем предметную абилу с дохренашным кол-вом уровней и ставим нужные нам значения в соответствии с уровнем в РО, а затем раз добавив багом уже манипулируем через изменения уровней значениями этой абилы :)
FellGuard добавил:
Узнать текущий уровень абилы можно так же, тупо триггером :) Level of Ability for unit(гуи) или GetAbilityLevel()

FellGuard добавил:
Вместе с этим известием приходит и известие о возможности добавления кастуемых абил Тоесть, когда я проверял уовень не пассивок после добавления он был равен 1.
Осталось только вычислить ордер приказа..

Отредактировано FellGuard, 17.02.2007 в 15:15.
Старый 17.02.2007, 14:58
Warden
:::...
offline
Опыт: 26,106
Активность:
Старый 06.08.2007, 13:50
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:11.