Перейти к содержимому


Гайд по кодингу, расширенное издание.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 Hank667

Hank667

    Заслуженный космонавт

  • Employee
  • 744 сообщений

Отправлено 11 March 2013 - 14:27

*
Популярное сообщение!

Всем привет еще раз. Прошлую тему прошу отправить куда подальше, ибо там много мусора. Вообщем, я решил делать гайд пока не коду сс, а по коду бьонда в частности. Пока те, кто не читал прошлый тред: Почитайте этот.
Основа
DreamMaker

Программа, нужная тебе для создания и редактирования кода, для маппинга. Данная программа состоит из шести главных компонентов – древо файлов, объектное дерево, редактор текста, редактор спрайтов, редактор карт и панель ошибок.

Древо файлов

Древо файлов может быть вызвано с помощью вкладки "File" в левой вертикальной панели. Оно отображает фаилы, составляющие код, в порядке сортировки по папкам. Двойной щелчок по любому фаилу откроет его в нужном редакторе. Если ты добавляешь новый фаил в реестр (в Шindows Explorer), нажми кнопку "Refresh" для обновления данного списка. Отметки рядом с фаилами показывают то, будут ли использованы фаилы в компиляции кода. Распространенная ошибка – забыть поставить отметку.

Древо объектов

Что же это такое, блджад? Так я тебе и сказал. Сейчас тебе достаточно знать, что это список объектов, возможных к размещению на карте. Они упорядочены в иерархию. Это я тоже объясню позже, дорогой новокодер. Кнопка "Update" внизу экрана обновит древо новыми объектами, если они были добавлены в отмеченный фаил .dm, так то.

Редактор текста

Это, кодеры мои, ваша альфа и омега, ваш хлеб и вода. Редактор активируется, когда ты открываешь фаил с расширением ".dm". Суть – написание и редактирование игрового кода. Ничего сложного, да?

Редактор спрайтов  

Предназначен для изменения и создания игровых иконок. Активируется при открытии фаила формата "dmi". Он показывает список всех спрайтов (часто называемых icon states), находящихся в фаиле. Правый клик где - либо вызовет опцию создание нового спрайта или анимации. Иконка - статичная картинка. В анимации же спрайт может иметь восемь различных направлений (называемых на пиндосском dirs) или быть анимированным. Анимация может иметь одно 1 (Юг), 4 (С/Ю/В/З) или восемь направлений. Также запомните, что фаил формата .dmi может содержать в себе спрайты только одного и того же размера. Из-за, к примеру, сингулярности, которая ЖРЕТ ВСЕХ И ВСЯ И РАСТЕТ ОМНОМНОМ часто требуются отдельные ".dmi".

Редактор карт

Обычно открывается при старте, или при открытии ".dmm" фаила -- фаила карты. А теперь шокирующая правда – редактор карты используется для создания и редактирования карты. По умолчанию, данный редактор показывает 4 основные группы: разметка территории (area), существа (mob), объекты (object) и турфы (turf). Для выбора критериев отображаемого нажми вкладку "Layers" в самом верху панели инструментов и выбери 'Only show selectable layers', затем выбери нужные тебе слои. Замечу, что карта не будет показана с ошибками в коде. Исправь их. Или ты совсем... Впрочем, чего это я.

Панель вывода ошибок

Текстовая панель внизу экрана DreamMaker'a, панель ошибок существует, чтобы услужить вам в сообщении ошибок в компиляции.

Тут, собственно, заканчивается раздел о составляющих, и мы приступаем к самому коду.

Компиляция и запуск

Что бы скомпилировать обновленный код без запуска, выберите вкладку 'build' в самом верху экрана и нажмите 'compile'. Для компиляции и запуска нажмите 'compile and run'.

Составляющие кода

Переменные

Ссылка: http://www.byond.com...erence&path=var

Переменные предназначены для хранения данных. Создаются таким образом: (создание переменной без определенной информации) var/i

Чтобы задать переменной значение, следует сделать вот так:

var/i = 5

Или

var/i = "Hello World"

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

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

Список, он же list.

Ссылкота: http://www.byond.com...rence&path=list

Список может определяться, как любое из древ, но специальные переменные ассоциируются именно со списком. Доступен лишь при первом назначении переменной.

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)

Встроенные переменные

Переменные, встроенные в BYOND и неизменяемые в процессе создания кода:
Atom vars http://www.byond.com...e&path=atom/var
Client vars http://www.byond.com...path=client/var
Datum vars http://www.byond.com...&path=datum/var
Mob vars http://www.byond.com...ce&path=mob/var

Переменные направления (dir vars)

Ссылка: http://www.byond.com...th=atom/var/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), тысячи их!). Впрочем, в коде можно найти достойные образчики.

Переменные типа atom.

Применимы ко всем объектам типа /obj, /turf, /area, /mob.

Contents: Список объектов, введенных в другой объект. (Баллоны с плазмой в коллекторах, руда в печи, etc.)

Density: 0/1 - 0 означает, что существо может пройти сквозь (или над), 1 -- что не может.

Desc: string - Описание, которое показывается при "examine".

Dir: 1-10 - направление объекта.

Icon: .dmi фаил, содержащий иконку.

Icon_state: Название спрайта из прошлого пункта.

Overlays: Список спрайтов, которые находятся поверх исходного.

Layer: Если два объекта находятся на одном тайле и у одного номер слоя выше, чем у другого, объект с наибольшим номером будет показываться поверх другого.

Loc: Координаты X, Y, Z расположения предмета.

Luminosity: Как долго будет светиться?

Name: Название. Высвечивается при наведении курсора на объект. Нуфф сэид.

Opacity: Можно ли видеть сквозь это?

Pixel_x, pixel_y: Настраиваемо, если предмет на карте нужно передвинуть на пару пикселей по тайлу. Используется с APC, Консолями, Пожарными тревогами, etc.

Type: Type -- путь к объекту. Монета будет иметь такую переменную:
/obj/item/weapon/coin

Включенные инструкции

Гайды по включенным инструкциям (proc-s) доступны для ознакомления по следующим ссылкам:
Area procs http://www.byond.com...&path=area/proc
Mob procs http://www.byond.com...e&path=mob/proc
Obj procs http://www.byond.com...e&path=obj/proc
Turf procs http://www.byond.com...e&path=obj/proc

Операторы условий.

Условные операторы формулируют, как исполняется код, зависящий от условий. Самый обычный оператор условий – условие оператора IF.

= против ==

var/a
a = 14
if (a == 14)
   world << "A has the value [a]"
else
   world << "A is not 14"

Как в примере выше, одиночный = означает то, что вы назначаете переменной справа значение переменной слева. В примере выше, переменной присвоено значение 14 (a = 14)

Двойной == используется для сравнения двух значений. Обычно он используется для условий. В примере выше видно, что мы сравнили переменную a с 14 (a == 14). Это определяет, как сработает оператор if.

If statement

Ссылкота: http://www.byond.com...ce&path=proc/if

Пример оператора If. Оператор If проверяет верность утверждения в скобках (в примере выше A == 14). Если оно верно, исполнение кода продолжится (в случае выше: world << "A has the value [a]"). В другом случае, если утверждение не верно, программа будет использовать код после оператора else.  Например, если a не является 14, то будет использовано world << "A is not 14"

Операции сопоставления включают в себя:
== Равно
!= Не равно
< Меньше, чем
> Больше, чем
<= Меньше или равно
>= Больше или равно

Switch-case statement

Ссылкота: http://www.byond.com...ath=proc/switch

Loops (Циклы)

While

Ссылка: http://www.byond.com...path=proc/while

For

Ccылку в студию: http://www.byond.com...h=proc/for/loop

For (foreach)

Ссылка:  http://www.byond.com...h=proc/for/list

Procs (Процессы)

Ссылочка :3  http://www.byond.com...rence&path=proc

Что такое "Объект"?

SS13 написан в среде Byond, являющейся объектно-ориентированной. Заметь, что под объектом я не имею в виду предмет или механизм в игре. Сейчас я расскажу немного об объектах..

Объектом будет любой определенный путь в игре, например:

/obj/item/weapon/sword
/turf/simulated/floor
/area/
/atom/

Объект состоит из переменных и операций.

Пример:

/turf/simulated/gold_spot
   var/spawned_gold = 0
   name = "Gold Area"
   desc = "This plot may have spawned gold!"

/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()

Иерархия и другая khooeta

Объекты наследуют все переменные и операции своих "родителей". Это значит, что объект, обозначенный как /obj/item/weapon/storage/box, имеет все переменные /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj и так же /atom, но об этом мы потолкуем попозже. Некоторые операции обозначены для всех объектов, что вы можете увидеть здесь. В примере выше, New() является этапом операции, которая наследуется от "материнского" объекта. Вот почему у New() нет префикса операции! – потому что он уже задан материнским объектом.



Когда мы определяем два объекта...

/turf/simulated/gold_spot/plot1
/turf/simulated/gold_spot/plot2

...мы просто определяем два "дочерних" объекта /turf/simulated/gold_spot, и они наследуют все переменные и операции, которые включает в себя /turf/simulated/gold_spot, которые он наследует от (/turf/simulated).

..()

Это то, что ты, скорее всего, часто встретишь в коде. На других языках программирования обычно это называется super() – хрень, вызывающая операцию материнского объекта с тем же именем. В отличие от других языков, данный оператор не используется автоматически, если не добавлен. Эти общие определения обычно обеспечивают правильное управление вещами.
Area, Mob, Obj and Turf organization
/datum
   /atom
/area – Все данные объекты нужны для разметки карты

APC's power coverage, lighting, atmos, etc.
/mob
   /dead – призраки
   /living
/carbon – люди и обезьяны
/silicon – ИИ и киборги
/obj
   /effect – Триггеры, декали и ландмарки
   /item
/clothing – Вещи

obj/item/weapon/storage
/devices – Устройства
/stack – Складываемые предметы
/weapons – -Большинство подбираемых предметов
   /machinery – механизмы, использующие энергию, работающие каждый тик.
   /structure – объекты, которые не работают каждый тик

windows, grilles, bookcases etc.
/turf
   /simulated
/floor – пол с воздухом
   /airless – пол без газов
   /plating – покрытие
/airless – безвоздушное покрытие
/wall – стены
   /r-wall – укрепленные стены
   /space – космос
   /unsimulated – места без симуляции расчета газов.
П.С. Гайд сделан моим другом, он не мой. Далее я сделаю более подробный гайд, дающий практику и раскрывающий большую часть кода.
Автор:[font='Lucida Grande', ', Arial, tahoma, verdana, sans-serif} ']Mr.Smoke Отредактировано:Hank667[/font]

Гайдота.
1. Начало настройки (Открываем программу)
В нашем меню открываем Dream Maker. В меню файл файл находим "New Environment...". Щелкаем, в правой части поля ввода вводим "Testworld". Нажимаем "ОК". Открывается новое окно. Видим, что создается файл с таким же именем. Снова "ОК".
Каждый "мир" должен иметь среду (Не, не день недели, успокойтесь). Вы можете создавать множество файлов кода, звуковых файлов или спрайтов, но они должны быть в той же среде. В нашем случае, в среде "TestWorld". Код файла (по другому .dm файл), где вы можете писать свой код. На панели слева вы можете увидеть маленькие значки, представляющие среду и код файла Testworld.
Папка для этой среды создана по пути byond/bin/ сам файл, так как мы ничего не устанавливали. Идите посмотрите, если хотите, конечно.
2. Комментарии.
Умоляю, пишите комментарии. Умоляю.
В верхней части Testworld.dm, в коде файла, добавьте это строку:
// Это тестовый мир, созданный ололошей.
Это комментарий, мать его. Он начинается с двойной косой черты, что делает его серым. Вы можете сказать что угодно и это не повливает на ваш код. Комментарии очень важны хороший программист добавляет комментарии к коду, чтобы обьяснить, как это работает. Комментарий должен быть сделать мир проще. Это может быть глупо, но забывая, как ваш собственный код работает намного проще, чем кажеться. Гораздо лучше иметь хорошие комментарии.
3. Это был код, который делает обьекты (verb)
Возвращаемся вверх кода и пишем примерно следующее:
mob
   verb
   say (Сообщение)
   world << "[USR]: [MSG]
Да, детка! Это первый глагол. Мы начали с "mob", которая означает, что для глагол работал, mob должен существовать в мире. Это мог быть и ты, анонимус. Если бы мы начали с "turf", то "глагол" потребует существование Торфа. И mob тоже, на самом деле, потому что без хотя бы одного моба в мире не было бы никого, чтобы использовать глагол.
В mobs мы ставим "Verb". Мы использовали вкладки перед глаголов который означает, что он принадлежит mob.
Далее следует сказать и некоторые вещи.
mob
   verb
   say (msg) // Что говорит юзер передается в сообщение как текст.
world << "[USR]: [MSG]" // Мир видит в чатах подобное
Комментарии помогают лучше запомнить то, что мы только что узнали.
3. Глаголы-аргументы. Здоровье.
Как говорят программисты, глаголы принимают аргументы. Но это не очень полезно, если вы не знаете, какой аргумент или как оно может быть принято. Мы все видим, слово не имеет смысла.
Подумайте над аргументомм в качестве входных данных. С глаголом, этот вход происходит от игрока. Вы сам решаете, каким именем назвать поступающую инфу. В данном случае, это "msg", сокращение от "message".
Игрок, типа "say" в игре будет в состоянии ввести любой текст в игре. Текст передается в систему, что-то вроде глагола.
4. Оператор "<<"
world << "[USR]: [MSG]" // Мир видит в чатах подобное
Мы савим эту под чертой, оступы, так как это дейсвтие заставляет работать глагол. эти два знака меньше называются операторами. Не спрашивайте меня, как произаносится это. Операторы-символы обычно помещаются между обьекатми, которые вызывают что-то конкретное, чтобы это произошло. В этом случае, то, что происходит в том, что в правой части выводится на лево стороне.
Уже гораздо более понятно, да?
5. Что это за хуйня? (Вложенные выражения)
Что именно "[USR]: [MSG]" означает? он имеет ковыски, что означает, что все дело в текстовой строке. Какой-нибудь игрок в наш MSG, представляет собой текстовую строку. Я назвал его "text".
Когда что-то в текстовой строке имеет скобки [] вокруг него, это то, что они называют вложенными (или встроенные) выражении. Я не знаю, где программисты придумали этот материал. Я считаю, что они сидят бухие и стреляют дротиками в Оксфорский словарь английского языка, блеать. Тем не менее, вложенная часть имеет некоторый смысл.

Да, гайд переведен мною. Мне еще много переводить, если честно. Буду заливать частями.
Nothing

#2 Reruckan

Reruckan

  • Employee
  • 3472 сообщений
  • Byond:Reruckan
  • Городв руинах.

Отправлено 11 March 2013 - 14:28

Лучше б привел в годный вид для белых людей.

#3 Hank667

Hank667

    Заслуженный космонавт

  • Employee
  • 744 сообщений

Отправлено 11 March 2013 - 14:29

Просмотр сообщенияReruckan (11 March 2013 - 14:28) писал:

Лучше б привел в годный вид для белых людей.
А что приводить то? Я немного упоротый, подробнее.
Nothing

#4 Reruckan

Reruckan

  • Employee
  • 3472 сообщений
  • Byond:Reruckan
  • Городв руинах.

Отправлено 11 March 2013 - 14:31

Ну, на белой теме у тебя хуйня отображается. Впрочем, сейчас уже ты пофиксил, осталось лишь форматирование расставить.

#5 Neray

Neray

    Няша

  • Employee
  • 5034 сообщений

Отправлено 11 March 2013 - 14:33

Цитата

"глагол" потребует существование Торфа
Ленин бы одобрил.
Make a wish

#6 Xaker2009

Xaker2009

    Самый большой пидор космической станции

  • Employee
  • 1816 сообщений
  • ГородХз какой, спутник Сатурна, Титан

Отправлено 11 March 2013 - 15:58

А где предупреждение типо этого
ВНИМАНИЕ!!! Нету в этом, блять, логики, не пытайтесь ее найти.
DEAD: David Snake says, "Ну и хуесос"
DEAD: David Snake says, "Ты всем игру испортил ,и даже сейчас портишь"
DEAD: David Snake says, "Самый большой пидор космической станции"
DEAD: John Nerer stammers, "Ой"
DEAD: John Nerer stammers, "Ну спасибо за звание"

#7 MrRomanze

MrRomanze

    Ассистент

  • Employee
  • 30 сообщений

Отправлено 11 March 2013 - 16:35

Автор:[font='Lucida Grande', ', Arial, tahoma, verdana, sans-serif} ']Mr.Smoke Отредактировано:Hank667[/font]

Што

#8 Hank667

Hank667

    Заслуженный космонавт

  • Employee
  • 744 сообщений

Отправлено 11 March 2013 - 16:37

Просмотр сообщенияXaker2009 (11 March 2013 - 15:58) писал:

А где предупреждение типо этого
ВНИМАНИЕ!!! Нету в этом, блять, логики, не пытайтесь ее найти.
Тут другое предупреждение надо ставить, ага.

>font=calibri, Arial, Helvetica, sans-serif]вут[/font]
Лол. У самого то.
Nothing

#9 12xilluks или Albert Xill

12xilluks или Albert Xill

    Ветеран космонавтики

  • Employee
  • 4647 сообщений
  • Byond:12xilluks
  • Discord:12xilluks#1912
  • Городпобратим

Отправлено 11 March 2013 - 17:58

Проще англогайдоту почитать, там хоть не одной простыней.

#10 Neray

Neray

    Няша

  • Employee
  • 5034 сообщений

Отправлено 11 March 2013 - 18:02

Код станции вообще забавен. Т.к. на протяжении всех этих лет его писали независимые друг от друга уристы, то и выглядит он соответствующе. Разбитие описания одного объекта на 4 разных куска кода, просчёт чего-либо по формуле в духе (4000n+2000)/2000 и т.д. и т.п.
Make a wish

#11 ACCount

ACCount

    Ветеран космонавтики

  • Employee
  • 2684 сообщений
  

Отправлено 12 March 2013 - 00:58

А то! Одни только вендоматы в Луне реализованы тремя способами.

#12 Leonido33

Leonido33

    Вышел из игры

  • Employee
  • 927 сообщений
  • ГородХохляндия

Отправлено 12 March 2013 - 15:30

Хороший гайд, где тут поставить "лойс"?
Здесь может быть ваша "мамка".
Удачного дня.

#13 Hank667

Hank667

    Заслуженный космонавт

  • Employee
  • 744 сообщений

Отправлено 12 March 2013 - 17:57

Просмотр сообщенияLeonido33 (12 March 2013 - 15:30) писал:

Хороший гайд, где тут поставить "лойс"?
Вверху. Сегодня не успею перевести, завтра ждите перевод+ подарок от Смоука.
Nothing

#14 intercross

intercross

    Бедный, тщеславный человек

  • Employee
  • 4326 сообщений
  • Городгде-то на орбите чайника между Землёй и Марсом
  

Отправлено 14 March 2013 - 16:12

Просмотр сообщенияNeray (11 March 2013 - 18:02) писал:

Код станции вообще забавен. Т.к. на протяжении всех этих лет его писали независимые друг от друга уристы, то и выглядит он соответствующе. Разбитие описания одного объекта на 4 разных куска кода, просчёт чего-либо по формуле в духе (4000n+2000)/2000 и т.д. и т.п.
После рефакторинга кода, который они(беевцы) проводили почти 4 месяца, такое наблюдается достаточно редко.

Просмотр сообщенияACCount (12 March 2013 - 00:58) писал:

А то! Одни только вендоматы в Луне реализованы тремя способами.
Именно из-за этого "ёбаного бреда" они и забросили Луну, да.
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)

#15 Gurklum

Gurklum

    2D-космонавтик

  • Employee
  • 47 сообщений

Отправлено 01 April 2013 - 16:59

Рыдал кровавыми слезами с гуглоперевода.


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных