Получить информацию о достижениях участников текущего или только что закончившегося инстанс-ивента. Информация доступна автоматически сразу после завершения инстанс-ивента либо может быть получена запросом matchMaking.ListenEventProgress(). В обоих случаях приходит сообщение EVENT_MATCH_MAKING_EVENT_PROGRESS_ADDED.
-- библиотека:
matchMaking
-- объявление:
function GetEventProgressInfo()
-- параметры:
нет
-- возвращаемое значение:
table or nil - таблица с описанием, если информация получена, содержит поля:
completed: boolean - завершился ли ивент
durationMs: number (integer) - фактическая длительность завершившегося инстанс-ивента (в миллисекундах), если ивент ещё не завершён, то 0
elapsedMs: number (integer) - время с начала инстанс-ивента в миллисекундах
round: number (integer) - номер текущего раунда (начинается с нуля)
durationsByRound: table - ключи - номера раундов, значения - длительность раундов
startTimesByRound: table - ключи - номера раундов, значения - время старта раундов
winnerBattlegroundMarkId: BattlegroundMarkId or nil - BattlegrounMarkId победившей команды в случае группового инстанс-ивента, nil в случае одиночного или ещё не завершённого
winnerFactionId: FactionId - FactionId победившей фракции в случае группового инстанс-ивента, nil в случае одиночного или ещё не завершённого
achievements: table of tables или nil - nil если нет информации; иначе список (индексированная начиная с нуля таблица) с достижениями команд-участников; при изменении должно приходить событие EVENT_MATCH_MAKING_PROGRESS_ACHIEVEMENTS_CHANGED; каждый элемент списка - таблица с полями:
teamMarkId: BattlegroundMarkId или nil - nil если нет информации, иначе id команды, достижения которой содержаться в этой таблице (см. также описание winnerBattlegroundMarkId)
teamAchievements: table of tables - список (индексированная с нуля таблица) достижений данной команды, формат полей элементов списка:
sysName: string или nil - если есть, то нелокализуемое системное имя достижения
isScore: boolean - true, если достижение нужно отображать в качестве счёта матча
name: WString - имя
description: WString - описание
amount: number (integer) - количество
opponentMaxValue: number (integer) или nil - если не nil, то количество очков достижения надо отображать в интерфейсе как opponentMaxValue минус количество очков этого же достижения у команды-противника
members: table of tables - индексированная с нуля таблица с описаниями достижений отдельных участников инстанс-ивента; в каждом поле содержится таблица с описанием достижений участника инстанс-ивента, формат поля:
name: WString - ник аватра
factionId: FactionId - фракция игрока
present: boolean - флаг наличия игрока на инстанс-ивенте (игрок может покинуть ивент до его окончания, в этом случае значение флага будет false)
achievements: table of tables - индексированная с нуля таблица с достижениями данного участника; в каждом поле содержится таблица с описанием достижения, формат поля:
sysName: string или nil - если есть, то нелокализуемое системное имя достижения
name: WString - имя
description: WString - описание
value: number (integer) - количество
raceClass: table LuaRaceClassInfoPart - таблица с описанием расы/класса персонажа, см. описание по ссылке ниже
battlegroundMarkId: BattlegroundMarkId или nil - идентификатор команды, к которой принадлежит участник (используется для баттлграунда)
Пример:
local info = matchMaking.GetEventProgressInfo()
if info.winnerBattlegroundMarkId then
LogInfo( "Winner team: ", info.winnerBattlegroundMarkId:GetInfo() )
end
for i, memberInfo in info.members do
LogInfo( "-- member: ", memberInfo.name )
for j, achievInfo in info.memberInfo.achievements do
LogInfo( "-- achievement: ", achievInfo.name, achievInfo.value )
end
end
См. также