Руководство по редактированию кода игры: различия между версиями

Материал из Celadon | Wiki Shiptest
Перейти к навигации Перейти к поиску
м (Пару первых пунктов до ЧТО ТАКОЕ ОБЪЕКТ)
(ВСЁ БЛЕАТЬ, ГОТОВО)
 
Строка 201: Строка 201:
==Что такое объект?==
==Что такое объект?==


SS13 is coded in Byond, which is an object oriented programming language. Please note that by object here i do not mean an item or machine in-game. For this intro alone i will speak of objects as I'll define them here.
SS13 написан на Byond, объектно-ориентированном языке программирования. Обратите внимание, что под объектом я не имею в виду внутриигровой предмет или машину. Только в этом вступлении я буду говорить об объектах так, как я их здесь определяю.


An object can be any defined path in the game. Examples include:
Объектом может быть любой определенный путь в игре. Примеры включают в себя:
   /obj/item/weapon/sword
   /obj/item/weapon/sword
   /turf/simulated/floor
   /turf/simulated/floor
Строка 209: Строка 209:
   /atom/
   /atom/


An object is made out of both [[#Variables|variables]] and [[#Procs|procs]]
Объект состоит из [[Руководство по редактированию кода игры#Variables|переменных]] и [[Руководство по редактированию кода игры#Procs|процедур.]]
 
Here's an example of an object:


Вот пример объекта:
   /turf/simulated/gold_spot
   /turf/simulated/gold_spot
     var/spawned_gold = 0
     var/spawned_gold = 0
     name = "Gold Area"
     name = "Зона золота"
     desc = "This plot may have spawned gold!"
     desc = "Этот узел может спавнить золото!"
    
    
   /turf/simulated/gold_spot/proc/spawn_gold()
   /turf/simulated/gold_spot/proc/spawn_gold()
Строка 227: Строка 226:
     spawn_gold()
     spawn_gold()


=== Hierarchy and Inheritance ===
=== Иерархия и наследование ===


Objects inherit all it's parent's variables and procs. This means that an object defined as /obj/item/weapon/storage/box has all the variables of /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj and also /atom, but we'll get to that one later. Some procs are already defined for all objects, you can see these [http://www.byond.com/members/?command=reference&path=atom%2Fproc here]. In the above example, New() was an instance of a proc which was inherited from the parent object. This is why New() does not have the proc/ prefix, because it is already defined in the parent object. You should however know that New() was redefined here, so it no longer acts the same way as in the parent objects.  
Объекты наследуют все переменные и процедуры своего родителя. Это означает, что объект, определенный как /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() здесь был переопределен, поэтому он больше не действует так же, как в родительских объектах.  


An example of an inherited variable are the name and desc (description) variables. Both were redefined tho. spawned_gold, however, is a new variable. One which the parent proc does not have.
Примером наследуемой переменной являются переменные name и desc (описание). Оба были переопределены. Однако spawned_gold — это новая переменная. Тот, которого нет у родительской процедуры.


If we define the following two objects...
Если мы определим следующие два объекта...
   /turf/simulated/gold_spot/plot1
   /turf/simulated/gold_spot/plot1
   /turf/simulated/gold_spot/plot2
   /turf/simulated/gold_spot/plot2
...we just defined two child objects of /turf/simulated/gold_spot and they inherited all the procs and vars that /turf/simulated/gold_spot has including all those which /turf/simulated/gold_spot inherited from their parent (/turf/simulated).
..., то два дочерних объекта /turf/simulated/gold_spot, только что унаследовали все процессы и переменные, которые /turf/simulated/gold_spot имеет, включая все те, которые /turf/simulated/gold_spot унаследовали от своего родителя (/turf/).


=== ..() ===
=== ..() ===


   ..()
   ..()
is something you will often see in the code. In other languages this is usually called super(), it calls the parent object's proc with the same name. Unlike some languages it is not automatically executed even if not added, nor is it required to be at the proc's start. These are usually added in New(), Del() and Attackby() procs to get to the original definition in the common parent. These common definitions usually ensure things are properly handled.
это то, что вы часто будете видеть в коде. На других языках это обычно называется super(), он вызывает процедуру родительского объекта с тем же именем. В отличие от некоторых языков, он не запускается автоматически, даже если не добавлен, и не требуется, чтобы он находился в начале процесса. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обычно обеспечивают правильное обращение с ситуацией.
 
==Area, Mob, Obj and Turf organization==
 
  /datum
    /atom
      /area --All objects in here are areas, which are used in mapping to define the extent of an APC's power coverage, lighting, atmos, etc.
      /mob
        /dead --ghosts
        /living
          /carbon --humans and monkeys
          /silicon --AI and cyborgs
      /obj
        /effect --Landmarks, trigger objects, effects and decals
        /item
          /clothing --most of the clothing you can wear, belts and backpacks are in obj/item/weapon/storage
          /devices --electronic devices
          /stack --the things which you can stack, such as rods, floor tiles and materials
          /weapons --most items which you can pick up
        /machinery --machines which use power, process every tick and are generally unmovable
        /structure --objects which don't require processing every tick or power, examples include windows, grilles, bookcases etc.
      /turf
        /simulated
          /floor --floors with air
            /airless --floors without air (ALWAYS use these for areas exposed to space)
            /plating --plating
              /airless --airless plating
          /wall --walls
            /r-wall --reinforced walls
        /space --it's space
        /unsimulated --everything used on centcom and places where air movement is not simulated.


==Организация Зон, Мобов, Объектов и турфов==


{{Contribution guides}}
/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. Панель отчетов об ошибках предназначена для составления отчетов об ошибках.

Скомпилировать и запустить

Чтобы скомпилировать обновленный код, не запуская его, выберите вкладку «Сборка» на самой верхней панели инструментов и выберите «Компилировать». Чтобы скомпилировать и запустить, нажмите кнопку «Выполнить» на той же вкладке.

Компоненты кода

Переменные

reference

Переменные предназначены для хранения данных. Переменные создаются следующим образом: (создает переменную без определенного значения) var/i

Чтобы определить значение в объявлении, сделайте следующее:

 var/i = 5

или

 var/i = "Hello World"

После того как переменная определена, вы не можете определить другую с тем же именем:

 var/i
 i = 2
 i = 6
 i = 12

Лист или список

reference

Список может быть определен как любой из трех, но специальные переменные, связанные со списками (например, 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)

reference

Север: 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 --все, что используется в Центкоме и в местах, где движение воздуха не моделируется.