Как мы знаем, в Midnight в актуальном World of Warcraft
появится долгожданная некоторыми игроками система жилищ, которая позволит каждому обзавестись своим собственным уголком на Азероте. И хотя не то что до выхода дополнения, даже до начала его тестирования остается еще немало времени, сегодня мы получили первые неофициальные подробности о том, как эта система может быть воплощена в игре.
ПредисловиеСегодня ночью на PTR
началось тестирование обновления 4.4.2 для Cataclysm Classic, в файлах которого бдительные датамайнеры из сообщества отыскали новый файл с различными переменными и показателями для системы жилищ игроков. Этот файл был автоматически сгенерирован инструментами разработчиков на основе используемых ими материалов.
Разные версии игры по сути используют один и тот же единый клиент, и иногда материалы из одной по случайности или из-за ошибки разработчиков попадают в другую. Так случилось и с данными файлом: авторы игры пока держат реализацию жилищ для игроков в секрете и не допускают появления материалов для нее в актуальном клиенте, но все же недосмотрели и упустили их в классический клиент.
Появление этого файла в клиенте Cataclysm Classic вовсе не означает, что жилища игроков появятся и в других версиях игры, а не только в актуальной. На данный момент разработчики заявили эту систему только для современного WoW, начиная с дополнения Midnight. В классических версиях их ожидать не стоит.
Таже стоит учесть, что порядковый номер файла, пусть он и появился в свежей сборке игры, заметно отличается от текущих и указывает на то, что он был создан еще в конце Dragonflight или самом начале The War Within, а потому мог сильно устареть к этому моменту, особенно на фоне того, что новинка находится в активной разработке. Поэтому некоторые моменты могли измениться, могут быть неполными или и вовсе удалены.
5221196;Interface/AddOns/Blizzard_APIDocumentationGenerated/PlayerHousingConstantsDocumentation.lua
Возможности жилищ для игроковЗовется этот файл PlayerHousingConstantsDocumentation.lua, и содержит он довольно много разных вещей, но если провести некоторый анализ и упростить, то получается вот что:
- Жилища игроков будут иметь несколько режимов редактирования как в некоторых других играх с подобной системой: настройка планировки и настройка украшений. После внесения изменений в режиме редактирования их можно сохранить или отменить.
- В режиме настройки планировки игроки смогут редактировать строение комнат и добавлять, изменять, перемещать или удалять различные их детали, включая стены, пол, потолок, лестницы, колонны, проходы и двери (узкие или широкие).
- Детали планировки имеют тематику (на данный момент это только "Люди") и размеры (любой, малый, средний, большой), по которым их можно сортировать/фильтровать.
- В режиме настройки украшений игроки могут добавлять, изменять, перемещать или удалять различные украшения внутри или снаружи дома на его деталях, включая полы, стены, потолки и столы.
- Украшения имеют тематику (на данный момент их четыре: "Деревенский", "Грубый", "Роскошный" и "Общий") и размеры (малые и большие).
- Максимальное число украшений будет ограничено.
- Возможно, одно жилище сможет принадлежать сразу нескольким игрокам или, по крайней мере, можно будет позволить другому игроку вносить изменения в свое жилище.
Таким образом, игроки будут обладать довольно обширными возможностями по настройке своих жилищ, причем не только в плане тематики и украшений, но еще и их строение.
PlayerHousingConstantsDocumentation.luaВот полное содержание этого файла, если вам будет любопытно взглянуть:
local PlayerHousingConstants =
{
Tables =
{
{
Name = "HousingDecorFlags",
Type = "Enumeration",
NumValues = 2,
MinValue = 1,
MaxValue = 2,
Fields =
{
{ Name = "Exterior", Type = "HousingDecorFlags", EnumValue = 1 },
{ Name = "Interior", Type = "HousingDecorFlags", EnumValue = 2 },
},
},
{
Name = "HousingDecorModelType",
Type = "Enumeration",
NumValues = 3,
MinValue = 0,
MaxValue = 2,
Fields =
{
{ Name = "None", Type = "HousingDecorModelType", EnumValue = 0 },
{ Name = "M2", Type = "HousingDecorModelType", EnumValue = 1 },
{ Name = "Wmo", Type = "HousingDecorModelType", EnumValue = 2 },
},
},
{
Name = "HousingDecorTheme",
Type = "Enumeration",
NumValues = 5,
MinValue = 0,
MaxValue = 4,
Fields =
{
{ Name = "None", Type = "HousingDecorTheme", EnumValue = 0 },
{ Name = "Folk", Type = "HousingDecorTheme", EnumValue = 1 },
{ Name = "Rugged", Type = "HousingDecorTheme", EnumValue = 2 },
{ Name = "Generic", Type = "HousingDecorTheme", EnumValue = 3 },
{ Name = "Opulent", Type = "HousingDecorTheme", EnumValue = 4 },
},
},
{
Name = "HousingDecorType",
Type = "Enumeration",
NumValues = 5,
MinValue = 0,
MaxValue = 4,
Fields =
{
{ Name = "None", Type = "HousingDecorType", EnumValue = 0 },
{ Name = "Floor", Type = "HousingDecorType", EnumValue = 1 },
{ Name = "Wall", Type = "HousingDecorType", EnumValue = 2 },
{ Name = "Ceiling", Type = "HousingDecorType", EnumValue = 3 },
{ Name = "Tabletop", Type = "HousingDecorType", EnumValue = 4 },
},
},
{
Name = "HousingExteriorComponentSize",
Type = "Enumeration",
NumValues = 4,
MinValue = 1,
MaxValue = 4,
Fields =
{
{ Name = "Any", Type = "HousingExteriorComponentSize", EnumValue = 1 },
{ Name = "Small", Type = "HousingExteriorComponentSize", EnumValue = 2 },
{ Name = "Medium", Type = "HousingExteriorComponentSize", EnumValue = 3 },
{ Name = "Large", Type = "HousingExteriorComponentSize", EnumValue = 4 },
},
},
{
Name = "HousingExteriorComponentTheme",
Type = "Enumeration",
NumValues = 1,
MinValue = 1,
MaxValue = 1,
Fields =
{
{ Name = "Human", Type = "HousingExteriorComponentTheme", EnumValue = 1 },
},
},
{
Name = "HousingPermission",
Type = "Enumeration",
NumValues = 8,
MinValue = 1,
MaxValue = 128,
Fields =
{
{ Name = "AddDecor", Type = "HousingPermission", EnumValue = 1 },
{ Name = "ChangeDecorParam", Type = "HousingPermission", EnumValue = 2 },
{ Name = "EnterDecorEditMode", Type = "HousingPermission", EnumValue = 4 },
{ Name = "MoveDecor", Type = "HousingPermission", EnumValue = 8 },
{ Name = "RemoveDecor", Type = "HousingPermission", EnumValue = 16 },
{ Name = "SaveHouse", Type = "HousingPermission", EnumValue = 32 },
{ Name = "SelectDecor", Type = "HousingPermission", EnumValue = 64 },
{ Name = "EditLayout", Type = "HousingPermission", EnumValue = 128 },
},
},
{
Name = "HousingResult",
Type = "Enumeration",
NumValues = 18,
MinValue = 0,
MaxValue = 17,
Fields =
{
{ Name = "Success", Type = "HousingResult", EnumValue = 0 },
{ Name = "DbError", Type = "HousingResult", EnumValue = 1 },
{ Name = "RpcFailure", Type = "HousingResult", EnumValue = 2 },
{ Name = "GenericFailure", Type = "HousingResult", EnumValue = 3 },
{ Name = "LockOperationFailed", Type = "HousingResult", EnumValue = 4 },
{ Name = "UnlockOperationFailed", Type = "HousingResult", EnumValue = 5 },
{ Name = "LockedByOtherPlayer", Type = "HousingResult", EnumValue = 6 },
{ Name = "DecorNotFound", Type = "HousingResult", EnumValue = 7 },
{ Name = "HouseNotFound", Type = "HousingResult", EnumValue = 8 },
{ Name = "PermissionDenied", Type = "HousingResult", EnumValue = 9 },
{ Name = "NotInDecorEditMode", Type = "HousingResult", EnumValue = 10 },
{ Name = "NotInsideHouse", Type = "HousingResult", EnumValue = 11 },
{ Name = "ServiceNotAvailable", Type = "HousingResult", EnumValue = 12 },
{ Name = "RoomNotFound", Type = "HousingResult", EnumValue = 13 },
{ Name = "RoomUpdateFailed", Type = "HousingResult", EnumValue = 14 },
{ Name = "NotInLayoutEditMode", Type = "HousingResult", EnumValue = 15 },
{ Name = "PlotNotFound", Type = "HousingResult", EnumValue = 16 },
{ Name = "MaxDecorReached", Type = "HousingResult", EnumValue = 17 },
},
},
{
Name = "HousingRoomComponentDoorType",
Type = "Enumeration",
NumValues = 3,
MinValue = 0,
MaxValue = 2,
Fields =
{
{ Name = "None", Type = "HousingRoomComponentDoorType", EnumValue = 0 },
{ Name = "NarrowDoor", Type = "HousingRoomComponentDoorType", EnumValue = 1 },
{ Name = "LargeDoor", Type = "HousingRoomComponentDoorType", EnumValue = 2 },
},
},
{
Name = "HousingRoomComponentOptionType",
Type = "Enumeration",
NumValues = 3,
MinValue = 0,
MaxValue = 2,
Fields =
{
{ Name = "Cosmetic", Type = "HousingRoomComponentOptionType", EnumValue = 0 },
{ Name = "DoorwayWall", Type = "HousingRoomComponentOptionType", EnumValue = 1 },
{ Name = "Doorway", Type = "HousingRoomComponentOptionType", EnumValue = 2 },
},
},
{
Name = "HousingRoomComponentType",
Type = "Enumeration",
NumValues = 6,
MinValue = 0,
MaxValue = 5,
Fields =
{
{ Name = "None", Type = "HousingRoomComponentType", EnumValue = 0 },
{ Name = "Wall", Type = "HousingRoomComponentType", EnumValue = 1 },
{ Name = "Floor", Type = "HousingRoomComponentType", EnumValue = 2 },
{ Name = "Ceiling", Type = "HousingRoomComponentType", EnumValue = 3 },
{ Name = "Stairs", Type = "HousingRoomComponentType", EnumValue = 4 },
{ Name = "Pillar", Type = "HousingRoomComponentType", EnumValue = 5 },
},
},
{
Name = "HousingRoomFlags",
Type = "Enumeration",
NumValues = 2,
MinValue = 0,
MaxValue = 1,
Fields =
{
{ Name = "None", Type = "HousingRoomFlags", EnumValue = 0 },
{ Name = "BaseRoom", Type = "HousingRoomFlags", EnumValue = 1 },
},
},
},
};
APIDocumentation:AddDocumentationTable(PlayerHousingConstants);