Не много комментариев к версии 0082, для тех кто не очень искушён в конфигостроении.
class SafeZones {
/*
Это базовый класс, можно вполне обходиться без базовых классов,
но, тогда в классах, который описывают реальные локации придётся
определять абсолютно все требуемые для корректной работы параметры.
Применение базовых классов избавляет от такой необходимости.
Одно из ключевых свойств классов, это наследование свойств.
*/
class ZoneBase {
scope = 0;
name = "ZoneBase";
position[] = {0,0,0};
direction = 0;
sizeX = 150;
sizeY = 150;
shape = 1;
canLoot = 0;
};
/*
Этот класс описывает свойства реально создаваемой локации,
этот класс создаётся на базе класса ZoneBase, в этом классе
переопределяются свойства перечисленные в базовом классе ZoneBase,
если создаваемая локация требует модификации свойств определённых
в базовом классе.
Вы можете обратить внимание на то, что в данном классе отсутствует
определение параметров direction и shape, это связанно с тем,
что в данном классе описывающем свойства локации Kavala,
модификация перечисленных параметров не требуется,
то есть, будут использованы параметры указанные в базовом классе.
Так работает наследование классов, то есть,
если при создании класса вы не указываете какой либо параметр,
компилятор получает это свойство из базового класса.
Плюсом такого положения вещей является существенное сокращение
объёма писанины, и разные другие плюшки.
И, главное, имя класса должно быть уникальным в этом пространстве.
Если компилятор встретит второй класс с уже использованным ранее именем,
это вызовет ошибку компиляции.
*/
class Kavala : ZoneBase {
scope = 1;
/*
Имя локации, которое вы указываете в этом параметре, так же должно
быть уникальным.
И вот с чем это связанно. Указанное в этом параметре имя локации
используется для создания глобальной переменной в пространстве
имён missionNamespace, эта переменная будет хранить значение параметра
canLoot.
Для каждой локации создаётся своя глобальная переменная,
которая будет иметь имя указанное вами в этом параметре.
Изначально я реализовал по другому, присваивал переменную именно
локации, и это логично, и это правильно.
Но, это оказалось не по чешски, как всегда).
Я получал вызов ошибке при попытке получить значение
этой присвоенной локации переменной.
И бля, как всегда c БЕСами, на вике, в описании к команде
getVariable ни хера ни каких комментариев по этому поводу,
присвоение переменной проходит без вызова ошибки,
попытка получить значение переменной вызывает ошибку.
Не смотря на то, что в описании чёрным по белому
указанно, что эта команда применима и к объектам типа Location.
Как вариант, может это работает только в сингле,
но в мульте не работает однозначно.
*/
name = "Safe zone: Kavala";
position[] = {3630.8723,13118.061,0};
sizeX = 300;
sizeY = 300;
canLoot = 1;
};
};
Сообщение отредактировал SteelRat: 24 February 2017 - 16:28