Руководство по редактированию кода игры: различия между версиями
Faduty (обсуждение | вклад) мНет описания правки |
Faduty (обсуждение | вклад) (ВСЁ БЛЕАТЬ, ГОТОВО) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
''' | '''ПРИМЕЧАНИЕ!!''' В этом руководстве термины используются очень своебразно. Опытные программисты, пожалуйста, не придирайтесь по поводу того, что такое объект, что такое метод и так далее. Это руководство предназначено '''исключительно для начинающих программистов.''' Остальные... не читайте. | ||
==DreamMaker== | ==DreamMaker== | ||
Программа, которая вам понадобится как для кодирования, так и для картографии, состоит из шести основных компонентов. Дерево файлов, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибках. | |||
=== | === Древо файлов === | ||
Доступ к дереву файлов можно получить, выбрав вкладку «Файл» на левой вертикальной панели. Он показывает файлы, составляющие код, отсортированные по папкам. Двойной щелчок по любому файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в проводнике Windows), нажмите кнопку «Обновить», чтобы обновить список. Галочки рядом с файлами указывают, используются ли они при компиляции кода. Распространенная ошибка — забыть включить новый файл. | |||
=== | === Древо объектов === | ||
Что такое объект, объясняется [[Руководство по редактированию кода игры#What is an object?|далее]] в этом руководстве ниже, но сейчас мы можем сказать, что он содержит список объектов, которые вы можете разместить на карте. Они расположены в иерархии. Это также объясняется и описывается далее в руководстве. Кнопка обновления внизу обновит дерево новыми спрайтами и объектами, если они были добавлены в любой из отмеченных галочкой файлов .dm. | |||
=== | === Редактор текста === | ||
Доступ к этому редактору осуществляется всякий раз, когда вы открываете файл с расширением «.dm». Предназначен для написания и редактирования кода игры. | |||
=== | === Редактор иконок === | ||
Предназначен для редактирования состояний и значков значков, доступ к нему осуществляется при открытии файла «.dmi». Он отображает список всех спрайтов (часто называемых состояниями значков), которые находятся в файле. Щелчок правой кнопкой мыши в любом месте даст возможность создать новый кадр или растровое изображение. Пиксельное изображение — это статическое изображение, а кадр — это либо состояние значка, которое может указывать в нескольких разных направлениях (часто называемых каталогами), либо анимация. кадр может иметь 1 (юг), 4 (северо-запад) или 8 направлений (полный компас). Также обратите внимание, что файл .dmi может содержать значки только определенного размера. В случае сингулярности, которая растет по мере набора мощности, необходимо несколько файлов .dmi. | |||
=== | === Редактор карты === | ||
Обычно открывается при запуске или при открытии файла карты «.dmm». Редактор карт отображает карту. По умолчанию отображаются все 4 основные группы: территория, моб, объект и территория. Чтобы выбрать особенности отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите «Показывать только выбираемые слои», а затем выберите, какие слои вы хотите отображать на той же вкладке (слои). (Чаще всего используется для скрытия наложения областей). Обратите внимание: карта не будет отображаться, если в коде .dm есть ошибки. Исправьте все ошибки и затем перекомпилируйте его. | |||
=== | === Панель отчётов об ошибках === | ||
Текстовая панель в нижней части DreamMaker. Панель отчетов об ошибках предназначена для составления отчетов об ошибках. | |||
=== | === Скомпилировать и запустить === | ||
Чтобы скомпилировать обновленный код, не запуская его, выберите вкладку «Сборка» на самой верхней панели инструментов и выберите «Компилировать». Чтобы скомпилировать и запустить, нажмите кнопку «Выполнить» на той же вкладке. | |||
== | ==Компоненты кода== | ||
=== | ===Переменные=== | ||
[http://www.byond.com/members/?command=reference&path=var reference] | [http://www.byond.com/members/?command=reference&path=var reference] | ||
Переменные предназначены для хранения данных. Переменные создаются следующим образом: (создает переменную без определенного значения) var/i | |||
var/i | |||
Чтобы определить значение в объявлении, сделайте следующее: | |||
var/i = 5 | var/i = 5 | ||
или | |||
var/i = "Hello World" | var/i = "Hello World" | ||
После того как переменная определена, вы не можете определить другую с тем же именем: | |||
var/i | var/i | ||
i = 2 | i = 2 | ||
Строка 52: | Строка 51: | ||
i = 12 | i = 12 | ||
==== | ==== Лист или список ==== | ||
[http://www.byond.com/members/?command=reference&path=list reference] | [http://www.byond.com/members/?command=reference&path=list reference] | ||
Список может быть определен как любой из трех, но специальные переменные, связанные со списками (например, len для длины), будут доступны только в том случае, если вы используете первое объявление. | |||
var/list/a | var/list/a | ||
var/a[9] | var/a[9] | ||
var/a = list() | var/a = list() | ||
==== | ==== Другие типы ==== | ||
Если вы хотите сохранить монету где-то в переменных объекта и использовать определенные для нее процедуры или переменные, вам придется определить переменную, в которой вы храните монету, как монету. Во втором примере также создается переменная с именем D и присваивается ей новая монета. | |||
var/obj/item/weapon/coin/C | var/obj/item/weapon/coin/C | ||
var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src) | var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src) | ||
==== | ==== Встроенные переменные ==== | ||
Переменные, которые встроены в себя и не определены нигде в коде:<br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar Atom vars] | |||
<br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar Atom vars] | |||
<br>[http://www.byond.com/members/?command=reference&path=client%2Fvar Client vars] | <br>[http://www.byond.com/members/?command=reference&path=client%2Fvar Client vars] | ||
<br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum vars] | <br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum vars] | ||
<br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar Mob vars] | <br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar Mob vars] | ||
===== | ===== Переменные направления (dir) ===== | ||
[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir reference] | [http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir reference] | ||
''' | '''Север:''' 1 | ||
'''Юг:''' 2 | |||
''' | '''Восток:''' 4 | ||
'''Запад:''' 8 | |||
'''Северо-восток:''' 5 (1 + 4) | |||
'''Юго-восток:''' 6 (2 + 4) | |||
'''Северо-запад:''' 9 (1 + 8) | |||
'''Юго-запад:''' 10 (2 + 8) | |||
<br>Они пронумерованы так, потому что dir использует методологию «битового флага». Подробнее о битовых флагах можно прочитать [[Binary flags|здесь.]] Он определен в двоичном формате, поэтому... | |||
'''0001''' — север | |||
'''0010''' — юг | |||
'''0100''' — восток | |||
'''1000''' — запад | |||
Объединение этих чисел дает северо-восток (0101), северо-запад (1001), юго-восток (0110) и юго-запад (1010). Для особых целей возможны и другие комбинации (восток-запад (1100), север-юг (0011), северо-восток-запад (1101) и т. д.). Код Smoothwall является примером. | |||
===== Atom vars ===== | ===== Atom vars ===== | ||
Они применяются ко всем объектам типа /obj, /turf, /area, /mob. | |||
'''Содержание :''' Список объектов, вставленных в другой объект. (плазменные резервуары в радиационных массивах, руда в плавильном заводе и т. д.) | |||
'''Плотность :''' 0/1 — 0 означает, что ваш моб может пройти сквозь (или пройти), 1 означает, что вы не можете | |||
'''Desc :''' string — Описание, отображаемое при осмотре | |||
'''Dir :''' 1- 10 — направление, в котором смотрит объект | |||
'''. Icon :''' файл .dmi, содержащий спрайт для значка. | |||
'''Icon_state :''' имя спрайта в файле из Icon | |||
'''Overlays :''' список изображений, наложенных на элемент. | |||
'''Слой :''' если два объекта находятся на одной плитке и один из них имеет более высокий номер слоя, чем другой, тот, у которого более высокий номер, будет отображаться так же, как и объект с меньшим. Loc: | |||
'''Позиционирование элемента''' по X,Y,Z. | |||
'''Яркость :''' Насколько он светится? | |||
'''Имя :''' имя, отображаемое при наведении указателя мыши на элемент. | |||
'''Непрозрачность :''' можно ли видеть сквозь него? | |||
'''Pixel_x , Pixel_y :''' устанавливается, если элемент на карте сдвинут на несколько пикселей в обе стороны. Используется с APC, консолями запросов, пожарной сигнализацией и т. д. | |||
'''Тип :''' Тип — путь к объекту. Для монеты переменная типа будет иметь значение: /obj/item/weapon/coin. | |||
=== Встроенные инструкции === | |||
Справочные руководства для включенных инструкций (proc-s) можно найти по следующим ссылкам: | |||
Процедуры областей | |||
Процедуры мобов | |||
Объекты | |||
Процедуры турфов | |||
=== | === Операторы === | ||
Условные операторы — это операторы, которые определяют, как будет выполняться код в зависимости от условия. Наиболее распространенным условием является оператор IF. | |||
==== = vs. == ==== | ==== = vs. == ==== | ||
Строка 131: | Строка 156: | ||
a = 14 | a = 14 | ||
if (a == 14) | if (a == 14) | ||
world << "A | world << "A имеет значение [a]" | ||
else | else | ||
world << "A | world << "A не равняется 14" | ||
Как и в примере выше, одиночный = означает, что вы присваиваете значение справа переменной слева. В приведенном выше примере переменной a было присвоено значение 14 (a = 14). | |||
Двойной == используется для сравнения двух значений. Чаще всего он используется в операторе if. В приведенном выше примере вы можете видеть, что мы сравнили переменную a с 14 (a == 14). Это определяет, как будет реагировать if. | |||
[https://www.byond.com/members/?command=reference&path=proc%2Fif Справочник по операторам сравнения] | |||
В примере показан простой оператор if. Операторы if работают, сначала проверяя, является ли утверждение в скобках (в приведенном выше случае == 14) истинным или нет. Если это правда, он приступит к выполнению кода, который имеет дополнительный отступ от if (в приведенном выше случае: world << «A имеет значение [a]»). В другом случае, если утверждение неверно, он перейдет к оператору else и выполнит код, отступ от которого находится. Он перейдет к оператору else только в том случае, если он присутствует. В этом примере, если a не равно 14, будет выполнено world << "A is not 14" | |||
К операторам сравнения относятся: | |||
'''==''' Равно | |||
= | '''!=''' Не равно | ||
=== | '''<''' Меньше | ||
'''>''' Больше чем | |||
'''<=''' Меньше или равно | |||
'''>=''' Больше или равно | |||
==== Оператор switch ==== | |||
[http://www.byond.com/members/?command=reference&path=proc%2Fswitch ссылка] | |||
=== Петли === | |||
==== While ==== | ==== While ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Fwhile | [http://www.byond.com/members/?command=reference&path=proc%2Fwhile ссылка] | ||
==== For ==== | ==== For ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop | [http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop ссылка] | ||
==== For (foreach) ==== | ==== For (foreach) ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist | [http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist ссылка] | ||
=== | === Процедуры === | ||
[http://www.byond.com/members/?command=reference&path=proc | [http://www.byond.com/members/?command=reference&path=proc ссылка] | ||
== | ==Что такое объект?== | ||
SS13 | SS13 написан на Byond, объектно-ориентированном языке программирования. Обратите внимание, что под объектом я не имею в виду внутриигровой предмет или машину. Только в этом вступлении я буду говорить об объектах так, как я их здесь определяю. | ||
Объектом может быть любой определенный путь в игре. Примеры включают в себя: | |||
/obj/item/weapon/sword | /obj/item/weapon/sword | ||
/turf/simulated/floor | /turf/simulated/floor | ||
Строка 179: | Строка 209: | ||
/atom/ | /atom/ | ||
Объект состоит из [[Руководство по редактированию кода игры#Variables|переменных]] и [[Руководство по редактированию кода игры#Procs|процедур.]] | |||
Вот пример объекта: | |||
/turf/simulated/gold_spot | /turf/simulated/gold_spot | ||
var/spawned_gold = 0 | var/spawned_gold = 0 | ||
name = " | name = "Зона золота" | ||
desc = " | desc = "Этот узел может спавнить золото!" | ||
/turf/simulated/gold_spot/proc/spawn_gold() | /turf/simulated/gold_spot/proc/spawn_gold() | ||
Строка 197: | Строка 226: | ||
spawn_gold() | spawn_gold() | ||
=== | === Иерархия и наследование === | ||
Объекты наследуют все переменные и процедуры своего родителя. Это означает, что объект, определенный как /obj/item/weapon/storage/box, имеет все переменные /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj, а также /atom, но мы вернемся к этому позже. Некоторые процедуры уже определены для всех объектов, их можно увидеть [https://www.byond.com/members/?command=reference&path=atom%2Fproc здесь] . В приведенном выше примере New() был экземпляром процедуры, унаследованной от родительского объекта. Вот почему New() не имеет префикса proc/, поскольку он уже определен в родительском объекте. Однако вы должны знать, что New() здесь был переопределен, поэтому он больше не действует так же, как в родительских объектах. | |||
Примером наследуемой переменной являются переменные name и desc (описание). Оба были переопределены. Однако spawned_gold — это новая переменная. Тот, которого нет у родительской процедуры. | |||
Если мы определим следующие два объекта... | |||
/turf/simulated/gold_spot/plot1 | /turf/simulated/gold_spot/plot1 | ||
/turf/simulated/gold_spot/plot2 | /turf/simulated/gold_spot/plot2 | ||
... | ..., то два дочерних объекта /turf/simulated/gold_spot, только что унаследовали все процессы и переменные, которые /turf/simulated/gold_spot имеет, включая все те, которые /turf/simulated/gold_spot унаследовали от своего родителя (/turf/). | ||
=== ..() === | === ..() === | ||
..() | ..() | ||
это то, что вы часто будете видеть в коде. На других языках это обычно называется super(), он вызывает процедуру родительского объекта с тем же именем. В отличие от некоторых языков, он не запускается автоматически, даже если не добавлен, и не требуется, чтобы он находился в начале процесса. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обычно обеспечивают правильное обращение с ситуацией. | |||
==Организация Зон, Мобов, Объектов и турфов== | |||
/datum | |||
/atom | |||
/area -- Все объекты здесь представляют собой области, которые используются при картографировании для определения степени энергетического покрытия ЛКП, освещения, атмосферы и т. д. | |||
/mob | |||
/dead -- призраки/госты | |||
/living | |||
/carbon -- люди и обезьяны | |||
/silicon -- ИИ и киборги | |||
/obj | |||
/effect -- Ориентиры, триггерные объекты, эффекты и наклейки | |||
/item | |||
/clothing -- бОльшая часть одежды, которую вы можете носить, ремни и рюкзаки находятся в obj/item/weapon/storage | |||
/devices -- электронные устройства | |||
/stack -- вещи, которые можно складывать друг в друга, например стержни, напольная плитка и материалы | |||
/weapons -- большинство предметов, которые можно подобрать | |||
/machines -- машины, которые используют энергию, обрабатывают каждый такт и, как правило, не сдвигаемые | |||
/structure -- объекты, которые не требуют обработки каждого такта или мощности, примеры включают окна, решетки, книжные шкафы и т. д. | |||
/turf | |||
/simulated | |||
/floor -- полы с воздухом | |||
/airless --полы без воздуха (ВСЕГДА используйте их для помещений подвергающиеся воздействию космоса) | |||
/plating -- обшивка | |||
/airless --безвоздушное покрытие | |||
/wall --walls | |||
/r-wall -- укреплённые стены | |||
/space -- это космос | |||
/unimulated --все, что используется в Центкоме и в местах, где движение воздуха не моделируется. |
Текущая версия от 02:42, 13 октября 2023
ПРИМЕЧАНИЕ!! В этом руководстве термины используются очень своебразно. Опытные программисты, пожалуйста, не придирайтесь по поводу того, что такое объект, что такое метод и так далее. Это руководство предназначено исключительно для начинающих программистов. Остальные... не читайте.
DreamMaker
Программа, которая вам понадобится как для кодирования, так и для картографии, состоит из шести основных компонентов. Дерево файлов, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибках.
Древо файлов
Доступ к дереву файлов можно получить, выбрав вкладку «Файл» на левой вертикальной панели. Он показывает файлы, составляющие код, отсортированные по папкам. Двойной щелчок по любому файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в проводнике Windows), нажмите кнопку «Обновить», чтобы обновить список. Галочки рядом с файлами указывают, используются ли они при компиляции кода. Распространенная ошибка — забыть включить новый файл.
Древо объектов
Что такое объект, объясняется далее в этом руководстве ниже, но сейчас мы можем сказать, что он содержит список объектов, которые вы можете разместить на карте. Они расположены в иерархии. Это также объясняется и описывается далее в руководстве. Кнопка обновления внизу обновит дерево новыми спрайтами и объектами, если они были добавлены в любой из отмеченных галочкой файлов .dm.
Редактор текста
Доступ к этому редактору осуществляется всякий раз, когда вы открываете файл с расширением «.dm». Предназначен для написания и редактирования кода игры.
Редактор иконок
Предназначен для редактирования состояний и значков значков, доступ к нему осуществляется при открытии файла «.dmi». Он отображает список всех спрайтов (часто называемых состояниями значков), которые находятся в файле. Щелчок правой кнопкой мыши в любом месте даст возможность создать новый кадр или растровое изображение. Пиксельное изображение — это статическое изображение, а кадр — это либо состояние значка, которое может указывать в нескольких разных направлениях (часто называемых каталогами), либо анимация. кадр может иметь 1 (юг), 4 (северо-запад) или 8 направлений (полный компас). Также обратите внимание, что файл .dmi может содержать значки только определенного размера. В случае сингулярности, которая растет по мере набора мощности, необходимо несколько файлов .dmi.
Редактор карты
Обычно открывается при запуске или при открытии файла карты «.dmm». Редактор карт отображает карту. По умолчанию отображаются все 4 основные группы: территория, моб, объект и территория. Чтобы выбрать особенности отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите «Показывать только выбираемые слои», а затем выберите, какие слои вы хотите отображать на той же вкладке (слои). (Чаще всего используется для скрытия наложения областей). Обратите внимание: карта не будет отображаться, если в коде .dm есть ошибки. Исправьте все ошибки и затем перекомпилируйте его.
Панель отчётов об ошибках
Текстовая панель в нижней части DreamMaker. Панель отчетов об ошибках предназначена для составления отчетов об ошибках.
Скомпилировать и запустить
Чтобы скомпилировать обновленный код, не запуская его, выберите вкладку «Сборка» на самой верхней панели инструментов и выберите «Компилировать». Чтобы скомпилировать и запустить, нажмите кнопку «Выполнить» на той же вкладке.
Компоненты кода
Переменные
Переменные предназначены для хранения данных. Переменные создаются следующим образом: (создает переменную без определенного значения) var/i
Чтобы определить значение в объявлении, сделайте следующее:
var/i = 5
или
var/i = "Hello World"
После того как переменная определена, вы не можете определить другую с тем же именем:
var/i i = 2 i = 6 i = 12
Лист или список
Список может быть определен как любой из трех, но специальные переменные, связанные со списками (например, len для длины), будут доступны только в том случае, если вы используете первое объявление.
var/list/a var/a[9] var/a = list()
Другие типы
Если вы хотите сохранить монету где-то в переменных объекта и использовать определенные для нее процедуры или переменные, вам придется определить переменную, в которой вы храните монету, как монету. Во втором примере также создается переменная с именем D и присваивается ей новая монета.
var/obj/item/weapon/coin/C var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src)
Встроенные переменные
Переменные, которые встроены в себя и не определены нигде в коде:
Atom vars
Client vars
Datum vars
Mob vars
Переменные направления (dir)
Север: 1
Юг: 2
Восток: 4
Запад: 8
Северо-восток: 5 (1 + 4)
Юго-восток: 6 (2 + 4)
Северо-запад: 9 (1 + 8)
Юго-запад: 10 (2 + 8)
Они пронумерованы так, потому что dir использует методологию «битового флага». Подробнее о битовых флагах можно прочитать здесь. Он определен в двоичном формате, поэтому...
0001 — север
0010 — юг
0100 — восток
1000 — запад
Объединение этих чисел дает северо-восток (0101), северо-запад (1001), юго-восток (0110) и юго-запад (1010). Для особых целей возможны и другие комбинации (восток-запад (1100), север-юг (0011), северо-восток-запад (1101) и т. д.). Код Smoothwall является примером.
Atom vars
Они применяются ко всем объектам типа /obj, /turf, /area, /mob.
Содержание : Список объектов, вставленных в другой объект. (плазменные резервуары в радиационных массивах, руда в плавильном заводе и т. д.)
Плотность : 0/1 — 0 означает, что ваш моб может пройти сквозь (или пройти), 1 означает, что вы не можете
Desc : string — Описание, отображаемое при осмотре
Dir : 1- 10 — направление, в котором смотрит объект
. Icon : файл .dmi, содержащий спрайт для значка.
Icon_state : имя спрайта в файле из Icon
Overlays : список изображений, наложенных на элемент.
Слой : если два объекта находятся на одной плитке и один из них имеет более высокий номер слоя, чем другой, тот, у которого более высокий номер, будет отображаться так же, как и объект с меньшим. Loc:
Позиционирование элемента по X,Y,Z.
Яркость : Насколько он светится?
Имя : имя, отображаемое при наведении указателя мыши на элемент.
Непрозрачность : можно ли видеть сквозь него?
Pixel_x , Pixel_y : устанавливается, если элемент на карте сдвинут на несколько пикселей в обе стороны. Используется с APC, консолями запросов, пожарной сигнализацией и т. д.
Тип : Тип — путь к объекту. Для монеты переменная типа будет иметь значение: /obj/item/weapon/coin.
Встроенные инструкции
Справочные руководства для включенных инструкций (proc-s) можно найти по следующим ссылкам:
Процедуры областей
Процедуры мобов
Объекты
Процедуры турфов
Операторы
Условные операторы — это операторы, которые определяют, как будет выполняться код в зависимости от условия. Наиболее распространенным условием является оператор IF.
= vs. ==
var/a a = 14 if (a == 14) world << "A имеет значение [a]" else world << "A не равняется 14"
Как и в примере выше, одиночный = означает, что вы присваиваете значение справа переменной слева. В приведенном выше примере переменной a было присвоено значение 14 (a = 14).
Двойной == используется для сравнения двух значений. Чаще всего он используется в операторе if. В приведенном выше примере вы можете видеть, что мы сравнили переменную a с 14 (a == 14). Это определяет, как будет реагировать if.
Справочник по операторам сравнения
В примере показан простой оператор if. Операторы if работают, сначала проверяя, является ли утверждение в скобках (в приведенном выше случае == 14) истинным или нет. Если это правда, он приступит к выполнению кода, который имеет дополнительный отступ от if (в приведенном выше случае: world << «A имеет значение [a]»). В другом случае, если утверждение неверно, он перейдет к оператору else и выполнит код, отступ от которого находится. Он перейдет к оператору else только в том случае, если он присутствует. В этом примере, если a не равно 14, будет выполнено world << "A is not 14"
К операторам сравнения относятся:
== Равно
!= Не равно
< Меньше
> Больше чем
<= Меньше или равно
>= Больше или равно
Оператор switch
Петли
While
For
For (foreach)
Процедуры
Что такое объект?
SS13 написан на Byond, объектно-ориентированном языке программирования. Обратите внимание, что под объектом я не имею в виду внутриигровой предмет или машину. Только в этом вступлении я буду говорить об объектах так, как я их здесь определяю.
Объектом может быть любой определенный путь в игре. Примеры включают в себя:
/obj/item/weapon/sword /turf/simulated/floor /area/ /atom/
Объект состоит из переменных и процедур.
Вот пример объекта:
/turf/simulated/gold_spot var/spawned_gold = 0 name = "Зона золота" desc = "Этот узел может спавнить золото!" /turf/simulated/gold_spot/proc/spawn_gold() if(prob(50)) new/obj/item/stack/sheet/gold(src) spawned_gold = 1 /turf/simulated/gold_spot/New() ..() spawn_gold()
Иерархия и наследование
Объекты наследуют все переменные и процедуры своего родителя. Это означает, что объект, определенный как /obj/item/weapon/storage/box, имеет все переменные /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj, а также /atom, но мы вернемся к этому позже. Некоторые процедуры уже определены для всех объектов, их можно увидеть здесь . В приведенном выше примере New() был экземпляром процедуры, унаследованной от родительского объекта. Вот почему New() не имеет префикса proc/, поскольку он уже определен в родительском объекте. Однако вы должны знать, что New() здесь был переопределен, поэтому он больше не действует так же, как в родительских объектах.
Примером наследуемой переменной являются переменные name и desc (описание). Оба были переопределены. Однако spawned_gold — это новая переменная. Тот, которого нет у родительской процедуры.
Если мы определим следующие два объекта...
/turf/simulated/gold_spot/plot1 /turf/simulated/gold_spot/plot2
..., то два дочерних объекта /turf/simulated/gold_spot, только что унаследовали все процессы и переменные, которые /turf/simulated/gold_spot имеет, включая все те, которые /turf/simulated/gold_spot унаследовали от своего родителя (/turf/).
..()
..()
это то, что вы часто будете видеть в коде. На других языках это обычно называется super(), он вызывает процедуру родительского объекта с тем же именем. В отличие от некоторых языков, он не запускается автоматически, даже если не добавлен, и не требуется, чтобы он находился в начале процесса. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обычно обеспечивают правильное обращение с ситуацией.
Организация Зон, Мобов, Объектов и турфов
/datum /atom /area -- Все объекты здесь представляют собой области, которые используются при картографировании для определения степени энергетического покрытия ЛКП, освещения, атмосферы и т. д. /mob /dead -- призраки/госты /living /carbon -- люди и обезьяны /silicon -- ИИ и киборги /obj /effect -- Ориентиры, триггерные объекты, эффекты и наклейки /item /clothing -- бОльшая часть одежды, которую вы можете носить, ремни и рюкзаки находятся в obj/item/weapon/storage /devices -- электронные устройства /stack -- вещи, которые можно складывать друг в друга, например стержни, напольная плитка и материалы /weapons -- большинство предметов, которые можно подобрать /machines -- машины, которые используют энергию, обрабатывают каждый такт и, как правило, не сдвигаемые /structure -- объекты, которые не требуют обработки каждого такта или мощности, примеры включают окна, решетки, книжные шкафы и т. д. /turf /simulated /floor -- полы с воздухом /airless --полы без воздуха (ВСЕГДА используйте их для помещений подвергающиеся воздействию космоса) /plating -- обшивка /airless --безвоздушное покрытие /wall --walls /r-wall -- укреплённые стены /space -- это космос /unimulated --все, что используется в Центкоме и в местах, где движение воздуха не моделируется.