16.10.2015
С введением в патче 3.2.0 рейдового подземелья "Испытание крестоносца" появились два новых уровня сложности, ранее отсутствовавших в 3.x.x - "10 героич." и "25 героич." (до этого были только "10 игроков" и "25 игроков").
Далее, с введением в патче 3.3.0 рейдового подземелья "Цитадель Ледяной Короны" появился так называемый динамический уровень сложности, ранее отсутствовавший в 3.x.x. Теперь можно было на ходу менять уровень сложности, подстраиваясь под возможности рейда. При этом он, по сути, оставался всё тем же "10 игроков" и "25 игроков". "Рубиновое святилище", появившееся в патче 3.3.5, работало по такой же схеме.
Итого, в 3.3.5a было три категории рейдовых подземелий 3.x.x:
"Склеп Аркавона", "Обсидиановое святилище", "Наксрамас", "Око вечности", "Логово Ониксии", "Ульдуар" - два режима сложности с отдельными кд: "10 игроков" и "25 игроков". При этом некоторые боссы Ульдуара имели так называемые "хард-мод режимы", что никак не отражалось на уровень сложности самого подземелья.
"Испытание крестоносца" - четыре режима сложности с отдельными кд: "10 игроков", "25 игроков", "10 героич." и "25 героич."
"Цитадель Ледяной Короны" и "Рубиновое святилище" - два уровня подземелья "10 игроков" и "25 игроков" с отдельными кд и динамической сменой сложности в процессе их прохождения. Итого четыре уровня сложности.
На wowcircle сложности "Цитадель Ледяной Короны" и "Рубиновое святилище" специфичны, и аналогичны механике "Испытание крестоносца" (отдельные кд на норм и гер. версии, отсутствует динамическая смена сложности и т.д.).
Теперь, собственно, суть проблемы:
Для определения сложности подземелья используется функция GetInstanceInfo():
name, type, difficultyIndex, difficultyName, maxPlayers, dynamicDifficulty, isDynamic, mapID = GetInstanceInfo()
Скажем, для ИК она выдаёт:
"Испытание крестоносца" "raid" 1 "10 игроков" 10 0 false
"Испытание крестоносца" "raid" 2 "25 игроков" 25 0 false
"Испытание крестоносца" "raid" 3 "10 игроков (героич.)" 10 0 false
"Испытание крестоносца" "raid" 4 "25 игроков (героич.)" 25 0 false
что вполне корректно.
А вот что она выдаёт для РС:
"Рубиновое святилище" "raid" 1 "10 игроков" 10 0 true
"Рубиновое святилище" "raid" 2 "25 игроков" 25 0 true
"Рубиновое святилище" "raid" 3 "10 игроков" 10 1 true
"Рубиновое святилище" "raid" 4 "25 игроков" 25 1 true
Однако, если посмотреть описание функции, то можно увидеть:
In dynamic instances, difficultyIndex will only be 1 for 10man, or 2 25man.
Т.е. должно быть:
"Рубиновое святилище" "raid" 1 "10 игроков" 10 0 true
"Рубиновое святилище" "raid" 2 "25 игроков" 25 0 true
"Рубиновое святилище" "raid" 1 "10 игроков" 10 1 true
"Рубиновое святилище" "raid" 2 "25 игроков" 25 1 true
Собственно, из-за этой, казалось бы небольшой разницы, многие аддоны не понимают, что ЦЛК и РС имеет героич. режим 10 или 25 (нет обработки случаев difficultyIndex == 3 и difficultyIndex == 4)
Вот, скажем, функция определения сложности инста в DBM'е:
Код:
function bossModPrototype:GetDifficulty()
local _, instanceType, difficulty, _, _, playerDifficulty, isDynamicInstance = GetInstanceInfo()
if instanceType == "raid" and isDynamicInstance then -- "new" instance (ICC)
if difficulty == 1 then -- 10 men
return playerDifficulty == 0 and "normal10" or playerDifficulty == 1 and "heroic10" or "unknown"
elseif difficulty == 2 then -- 25 men
return playerDifficulty == 0 and "normal25" or playerDifficulty == 1 and "heroic25" or "unknown"
end
else -- support for "old" instances
if GetInstanceDifficulty() == 1 then
return (self.modId == "DBM-Party-WotLK" or self.modId == "DBM-Party-BC") and "normal5" or
self.hasHeroic and "normal10" or "heroic10"
elseif GetInstanceDifficulty() == 2 then
return (self.modId == "DBM-Party-WotLK" or self.modId == "DBM-Party-BC") and "heroic5" or
self.hasHeroic and "normal25" or "heroic25"
elseif GetInstanceDifficulty() == 3 then
return "heroic10"
elseif GetInstanceDifficulty() == 4 then
return "heroic25"
end
end
end
для ЦЛК/РС 10/25 гер возвратит nil, что совсем нехорошо.