Ненавижу писать вступления, поэтому давайте коротко и по факту. Не-коротко - под спойлерами.
Я сделал АоЕ лут, но пока я его делал - нашлось потрясающее множество мелких проблем, которые я исправлял, и теперь хотелось бы хорошо протестить изменения прежде чем выкатывать это на лайв. Особенно учитывая что дело касается лута - того, чего меньше всего хочется терять при краше сервера.
И вы все приглашены!
Где тестировать?
- На экране выбора персонажа нажать на кнопку "Выбор мира" и выбрать сервер "Тест".
- Войдя на сервер, открыть меню .i, перейти в пункт "Настройки" -> "Настройки добычи", и включить желаемые опции.
- АоЕ лут не требует наличия специальные аддонов.
- При желании можно поставить аддон XLoot - с ним окно лута не ограничивается в 3-4 предмета, и вы сможете видеть всю ту кучу мусора, что вы заслужили в честном
поединкегеноциде локального масштаба.- Последняя версия XLoot для 3.3.5 не имеет поддержки изменения содержания лута на лету, которая весьма необходима для работы АоЕ и частичного лута. Поэтому скачивайте, пожалуйста, эту пропатченную версию:
XLoot-0.91.1-ezwow.zip 145,69К 552 скачиваний - В следующей версии ezCollections будет добавлен авто-патчинг аддона XLoot, чтоб пользователи ezCollections и XLoot не должны были скачивать новую версию последнего. В меню .i также будет добавлено упоминание об этом патче.
- Последняя версия XLoot для 3.3.5 не имеет поддержки изменения содержания лута на лету, которая весьма необходима для работы АоЕ и частичного лута. Поэтому скачивайте, пожалуйста, эту пропатченную версию:
Что менялось?
- АоЕ лут: если убили много мобов - лутайте одного, и получайте окно с лутом, собранным из всех близлежащих трупов.
- Частичный лут: если в луте выпало много предметов одного типа, и они все не влезают вам в инвентарь - со включенным частичным лутом вы сможете подобрать столько предметов из стака, сколько влезает в сумку, а остальные - оставить в луте.
- АоЕ лут будет объединять одинаковые предметы с нескольких трупов в один стак для вашего удобства. Для мастерлутеров - предметы, которые они должны распределять между игроками, объединяться не будут.
Изменения по процессу лутания:
- Значительно увеличена частота отправки обновлении о лутабельности и тапнутости мобов. Например, статус лутабельности будет обновляться после каждого закрытия окна лута, после АоЕ лутания каждого предмета, и после разролла каждого предмета - благодаря этому значительно уменьшится количество случаев, когда вы обыскиваете труп, но получаете пустое окно лута. Также эти состояния будут обновляться при входе и выходе из группы, и при смене режима распределения добычи.
- Исправлена ошибки, из-за которых, после входа игрока в группу, у него пропадала возможность лутать мобов, которых он убил соло до входа в группу, но только после повторного появления этих мобов в поле видимости.
- Добавлено больше проверок на возможность лутать мобов трупы. Раньше эти проверки влияли только на клиентское отображение состояния лутабельности после повторного появления моба в поле видимости, и из-за этого создавали неявные баги как тот, что описан выше.
- Реализованы интерфейсные ошибки относящиеся к луту: должно уменьшить количество проблем с забагавшимся состоянием лутания (когда игрок продолжает везде ходить с анимацией нагибания).
- Реализованы интерфейсные ошибки относящиеся к мастерлуту: сервер будет сообщать мастерлутеру о том, что у целевого игрока полные сумки, или у него уже есть максимальное количество таких уникальных предметов.
- Реализована интерфейсная ошибка относящаяся к обшариванию карманов: теперь, если у моба уже были украдены все имеющиеся предметы, будет отображаться специальное сообщение вместо пустого окна лута.
- Увеличено максимальное количество отображаемого лута с 16 до 18 предметов (новый клиентский лимит).
- Исправлены ошибки при сохранении лута из лутабельных предметов-контейнеров, из-за которой не все предметы в контейнере становились видимыми после релога игрока, или же содержание контейнер генерировалось заново после каждого релога.
Изменения по групповому роллу:
- Исправлена ошибка, из-за которой, при деспавне трупа, групповой ролл на предметы, выпавшие из него, не завершался преждевременно (это уже один раз было исправлено мной в 2015 году, и вскоре мной же сломано).
- Исправлена ошибка, из-за которой окошка групового ролла не пропадали по истечении времени, если игрок не нажал ни на какую кнопку.
- Предметы, которые игрок выиграл на групповом ролле будучи оффлайн или на экране загрузки, теперь будут отправляться ему почтой (раньше они оставались навсегда висеть в трупе, и их не мог полутать никто, даже победитель ролла, зайдя снова в игру).
- Добавлено отсутствующее оповещение в чате о получении предмета, выигранного в групповом ролле (отсутствие этого, например, могло мешать аддонам вести учёт подобранного игроками лута).
- Игроки теперь будут автоматически отказываться от уникальных предметов, которые уже имеются у них в максимальном количестве.
- Автоматический отказ от предметов теперь оповещается в чате специальным сообщением (я не уверен на 100% что это правильная реализация, оно часто может сильно спамить, особенно в больших рейдах, что-то я сомневаюсь что на офе было так же).
- Реализован случайный выбор победителя, если больше одного игрока выбросили одинаковый победный ролл.
- Исправлено преждевременное завершение группового ролла, если игрок покидает группу во время него, и он был последним, кто ещё не нажал на кнопку.
- Исправлена блокировка кнопки "Мне это нужно" для определённых предметов (по факту - только для https://wotlk.ezhead.org?item=43102. Сломалось около года назад).
- Исправлена ошибка, из-за которой предмет, от которого все автоматически отказались, не становился лутабельным для всех игроков сразу же, а только по истечении таймера (невидимого) ролла в 1 минуту.
- Мастерлутер теперь сможет видеть предмет в луте, которые он сам не может подобрать: уже изученные им рецепты; уже пройденные им квесты, запускаемые предметами (голова Ониксии); и квестовые дропы для заданий, которые он уже завершил, но ещё не сдал.
- В связи с вышеописанным исправлением - https://wotlk.ezhead.org?item=49643 и https://wotlk.ezhead.org?item=49644 теперь вновь не могут быть полутаны игроками, которые уже прошли соответствующие квесты.
- Реализована возможность клиента автоматически разблокировывать предметы в луте, на которые шёл и закончился групповой ролл, а игрок в это время держал окно с лутом открытым (раньше в таких случаях клиент продолжал блокировать предмет, показывая ошибку "Этот предмет пока не разыграли.", пока игрок не закроет и заново не откроет окно лута) (ирония в том, что эта фича не будет работать для АоЕ лута ).
Другие изменения, не связанные с лутом:
- Исправлена ошибка, из-за которой игроки, которые выключили в меню .i отображение обликов/маунтов/трансмогрификации/изменений размеров, могли препятствовать отображение оных для других игроков.
- Изменение вышеописанных настроек будет сразу же начинать действовать на всех других игроков в поле видимости (раньше они начинали действовать только если менялись данные игрока, связанные с такой настройкой, или же при повторном его появлении в поле видимости).
- Исправлена ошибка, из-за которой на английских клиентах нельзя было зайти в ордынский канал LookingForGroup (передаю привет Jyn, возможно вскоре я тебе понадоблюсь).
Что тестировать?
Поэтому пожалуй единственное, что я могу просить от вас - позанимайтесь обычными делами на тестовом сервере. Поубивайте мобов и боссов; полутайте сундуки; посдирайте кожу, пособирайте руду, поразбирайте механические трупы на запчасти; попроходите квесты, так или иначе связанные с лутанием предметом; проделайте всё это в одиночку и в группах; с игроками, которым тоже нужны эти квесты, и с теми, которым не; с разными режимами распределения добычи; с одним трупом и с несколькими. Попробуйте всё это когда у одного игрока включен АоЕ лут, а у другого - выключен. Попробуйте делать какие-то неординарные вещи с лутом.
Обращайте особое внимание на то, чтоб ожидаемый результат от ваших действий совпадал с реальными последствиями. Чтоб из трупов пропадал именно тот предмет, который вы (или кто-то другой в вашей группе) полутали. Чтоб количество лута уменьшалось на правильное число, если вы или кто-то другой подобрали лут частично.
Код АоЕ лута был тщательно "заминирован" и при любом серьезном отклонении от ожидаемых результатов обычно должен крашнуться весь сервер. Это может создать неудобства при тестировании, но это поможет мне обнаружить причину происшествия. Да и лучше ведь, если будет крашиться тест сервер, чем Тирион, правда? Ребутается сервер примерно минуту.
Некоторые важные факты, которые вам желательно знать:
- АоЕ лут включается только тогда, когда можно отобразить лут из больше чем одного трупа. Иными словами, если вы включили опцию отображения визуального эффекта при АоЕ луте, и этот эффект не проигрывается ни на каком трупе при лутании - значит АоЕ лут не включился и лутание работает по старому принципу. Его тоже не помешает протестить, но всё же большинство казусов ожидается именно в АоЕ сценарии лутания.
- Некоторые предметы (отмеченные в бд как "Party loot"/"Добыча группы") - это т.н. "мультидроп", каждый игрок из убившей моба группы может подобрать собственную копию предмета. Разумеется в луте каждый игрок будет видеть свою личную копию, и, подобрав её, этот предмет не должен пропадать из окна лута или менять количество для других игроков.
- Большинство квестовых предметов (но не все!) дропаются только при наличии у игрока соответствующего квеста. Такие предметы надо особо тщательно проверять, потому что по некоторым (идиотским) причинам они обрабатываются сервером совершенно по другому, чем обычный лут. Это влияет и на видимость предметов в окне лута, и на групповое разролливание предметов, и на мастер лут. Увы, отличить такой "квестовый дроп" от обычного дропа в сайтовой БД никак нельзя, но они будут особо отмечены в выводе команды .loot (о ней ниже).
- На сервере существует всего 3 квестовых дропа, на которые действуют групповые правила распределения добычи (то бишь групповой ролл или мастерлут): https://wotlk.ezhead.org?item=50226 https://wotlk.ezhead.org?item=50231 https://wotlk.ezhead.org?item=50274
- Если труп деспавнится (по времени, или когда на него кто-то использует команду .npc despawn) - лут из него должен автоматически исчезать из всех открытых окон АоЕ лута (ну или вычитаться из общего количества предметов, если те состакались вместе с нескольких трупов). ДЕНЬГИ вычитаться не будут (нет технической возможности отправлять клиенту изменения количества денег в луте), но при лутании денег игрокам должно попадать правильное количество (то бишь без того количества денег, которое лежали в пропавших трупах).
Условия для тестирования
На тестовом сервере также были изменены некоторые настройки:
- ХП и урон мобов занижен до 1-2 ед
- Скорость движения игроков увеличена в 5 раз
- Включено (надеюсь) дружественное взаимодействие между фракциями - чат, чат каналы, приглашение в группу, обмен и т.д.
На тестовом сервере вам будут доступны следующие команды:
- .go creature гуид-спавна - телепортироваться к спавну моба с указанным гуидом (посмотреть можно в БД, наведя мышкой на отметки спавнов на карте)
- .go object гуид-спавна - то же самое, но для объектов
- .go creature id ид-моба - телепортироваться к первому попавшемуся моба с указанным ид (посмотреть можно в БД, в конце адресной строки)
- .go object id ид-объекта - то же самое, но для объектов
- .groupsummon - присуммонить всю свою группу к себе
- .appear имя-персонажа - телепортироваться к игроку с указанным именем
- .tele название - телепортироваться в предопределённую точку с указанным названием (на английском языке, работают большинство названий зон, местностей, данжей и т.д., в том числе общепринятые сокращения, например .tele sfk, .tele orgrimmar, .tele dalaran)
- .recall - вернуться обратно в то место, где вы были до телепортации
- .quest add ид-квеста - добавить выделенному игроку (или себе) квест с указанным ид
- .quest remove ид-квеста - удалить выделенному игроку (или себе) квест с указанным ид, в том числе удаляет запись о пройденном квесте
- .quest reward ид-квеста - добавить, завершить и получить награду за квест с указанным ид
- .revive - воскрешает выделенного игрока (или себя). можно писать в групповой или гильдийский чат, если в локальный не разрешает по причине вашей, ммм, мёртвости
- .respawn - воскрешает выделенного моба или всех мобов вокруг, если никто не выделен
- .npc despawn - деспавнит выделенного моба
- .loot - перечисляет лут в выделенном моба. Лут с отметкой [quest] (и значком !) виден только игрокам с соответствующим квестом, лут с отметкой [ffa] может подобрать каждый игрок себе (это "мультидроп" описанный выше по тексту), лут с отметкой [cond] имеет специальные условия необходимые для видимости (какие - вы узнать, увы, не сможете ). Лут генерируется в момент смерти моба.
- .loot go - то же самое, но для ближайшего к вам объекта с лутом. Лут генерируется в момент лутания объекта.
Команды можно обычно сокращать до первых нескольких букв, например я обычно пишу .go cr id 12345, .app Hagen, .q a 12345, .q rem 12345, .q rew 12345, .rev, .resp, .npc desp.
Сообщайте о всех найденных проблемах в эту тему. Скриншоты приветствуются, если есть видео - вообще супер.