Про enScript. Опубликую тут, что бы было.
(С) Mizev
Что же представляет из себя Enfusion Scripts — новый язык программирования игровых механизмов игры DayZ Standalone?
С версии игры 0.59 Bohemia Interactive начала вводить новый внутренний язык программирования скриптов игры. Старый язык скриптов уже изжил себя и программировать на нем было весьма затруднительно.
Как и в большинстве подобных скриптовых языках других игр за основу был взят синтаксис С++ и объектно-ориентированное программирование. Раз уж игра создается с помощью Visual C++, то это зачем придумывать что-то иное!
Они создают игру на С++, затем компилируют DLL и EXE, но часть скриптов как бы «остается не скомпилированной» и представляется нам в текстовом виде, чистым листингом. Вот эту часть нам доступна для модификации и мы можем изменять эти скрипты сообразно нашей фантазии.
Почти все скрипты упакованы в файл scripts.pbo и если его "разбинарить», то мы получим папку scripts с содержимым.
Кто мало знаком с С++ я немного расскажу, что он из себя представляет. (В силу своих познаний.)
И так…
Фактически вся игра — это классы. Некоторые сущности со свойствами и функциями. Скажем класс PlayerBase — базовый класс игрока. Класс может наследовать другой класс. Т.е. есть родительский класс и есть наследуемый класс. Для того же PlayerBase родительским классом будет ManBase.
Дочерний класс наследуют все свойства и функции родительского класса. При том в дочернем классе можно добавить новые свойства и функции, а если нужно функции можно «переопределять» — функция с одинаковым именем в родительском классе и дочернем будут выполнять разные действия.
Свойства — это некоторый параметр класса. Может иметь значение разного типа: число, булево, строка, или ссылка на другой класс.
Например (простой пример): Класс Игрок у него есть свойство Жизненные силы.
Функция класса выполнит какое-то действие или произведет вычисление и может вернуть значение.
Например (простой пример): ПредметВРуке = Игрок.ЧтоВРуке(); — в переменную вернется ссылка на предмет в руках у персонажа или NULL (ничего).
Использование классов в скриптах.
Первейшее — это мне нужно определить класс, указать что он наследует, какие будут свойства и функции у класса.
class PlayerBase extends ManBase — имя класса PlayerBase и он дочерний класса ManBase. Так что все те свойства, которые были определены в классе ManBase, будут и у него. Добавляем новые свойства:
private int m_BloodType; — ManBase не содержит свойства тип крови, а вот у PlayerBase такое свойство будет. Свойство я определил как private пользоваться им я могу только внутри класса и получить его из другого класса не смогу. Поэтому я добавлю функцию:
int GetBloodType()
{
return m_BloodType;
}
При вызове этой функции из другого класса мне вернется тип крови.
Мой класс выглядит так:
Теперь, где мне нужно, я могу получить тип крови игрового персонажа.
PlayerBase player; ← Создаю переменную класса PlayerBase.
player = GetGame().GetPlayer(); ← присваиваю переменной значение нужного мне объекта.
int bloodT = player.GetBloodType(); ← получаю тип крови моего объекта.
К примеру класс ManBase имел свойство position. Тип vector. (Пример только для примера, в реальности это не так).
Поскольку PlayerBase наследует класс ManBase, то имеет тоже свойство и я могу получить его:
vector posPlayer = player.position;
vector — это тип данных, как int (целые числа) или float (вещественные). Это массив вида [float, float, float]. Применяется в игре для задания координат или направления — [x, z, y].