# Как кодить Для удобной работы с нашим кодом вам понадобятся следующие инструменты: * [BYOND](http://www.byond.com/download/). Серьёзно. * [VSCode](https://code.visualstudio.com/download). Легковесный и работает достаточно быстро. * [GitHub Desktop](https://desktop.github.com). Говно, но с пивком пойдёт. * [StrongDMM](https://github.com/SpaiR/StrongDMM). Для работы с картами незаменим. * [TweakPNG](http://entropymine.com/jason/tweakpng). Особый инструмент, который может помочь с форматом иконок **.dmi**. ### Получаем билд правильным путём Предположим, что вы уже установили **Git**. Тут всё очень просто: 1. Ищём любое удобное место у себя на диске. 2. Жмём **ПКМ** по свободному месту в желаемом месте... 3. Выбираем **Git Bash Here**. Откроется терминал в этой папке. 4. Пишем довольном простую команду: `git clone --depth=1 https://github.com/frosty-dev/white-dream-main` Это создаст папку с названием репозитория. Можете дописать в конце команды через пробел любое другое название, если желаете. Также позволит загрузить билд не качая всю историю коммитов, а только последнюю версию, что **значительно уменьшает** время загрузки билда. 5. Открываем **GitHub Desktop**, в меню **File** жмём ![Шиза](https://i.imgur.com/vlzNiD5.png) и выбираем папку куда загрузили билд. Это не всё. Если вы хотите внести изменения, то придётся перейти к следующему пункту. ### Создание Pull Requests Для этого нам потребуются следующие вещи: * Аккаунт на [GitHub](http://github.com/join). Куда ж без него. * Сам **GitHub Desktop** или его аналоги. * Собственно, сами изменения в коде/картах/картинках/звуках/чём угодно. Всё имеется? Продолжим. Допустим, у нас есть изменение в файле `code/shitcode/anus/bepis.dm` и мы хотим видеть его в основном репозитории. Создаём коммит с изменениями тогда: 1. Открываем **GitHub Desktop**. Видим изменения в левой части экрана, галочкой выбираем то, что будем коммитить (по дефолту всё выделено). 2. Жмём прекрасную кнопочку **Commit to master**. Коммит готов. Теперь нам нужно выгрузить куда-то это всё. Если вы делали всё по нашей инструкции, то понадобится ещё сделать собственный форк репозитория: 1. Переходим в нужный, например, [наш](https://github.com/frosty-dev/white-dream-main). 2. Жмём кнопочку **Fork** в правом верхнем углу. Выбираем свой никнейм и через мгновение вы окажетесь в своём форке. 3. Копируем ссылку из адресной строки, она должна быть в виде `https://github.com/YOURNICKNAME/white-dream-main`. 4. Открываем папку с билдом, жмём **ПКМ** внутри и выбираем **Git Bash Here**. 5. В терминале вводим следующие команды: `git remote add myfork https://github.com/YOURNICKNAME/white-dream-main` `git push myfork master` (там где **YOURNICKNAME** ставим свой вариант). Изменения будут в вашем форке. Теперь нужно открыть **Pull Request** для запроса внесения ваших правок в основной репозиторий: 1. Открываем ваш форк и жмём сюда: ![Я съел бомжа](https://i.imgur.com/wQeWvqx.png) 2. Жмём сюда: ![Прикол](https://i.imgur.com/2tp4hFi.png) 3. В поле **Title** пишем понятное и короткое описание того, что вы хотели бы впилить. 4. На вкладке **Write** тоже заполняем всё. Комментарии можете не убирать, их всё равно не будет видно. На вкладке **Preview** можете посмотреть как будет выглядеть готовая версия. 5. Жмём ![](https://i.imgur.com/pEpjvVI.png), если всё готово. **Важная заметка!** Все коммиты, которые вы делаете в ваш форк, также будут **автоматически** добавлены в ваш **Pull Request**. Не нужно создавать новый после каждого коммита, если существует текущий. ![Интерфейс программы](https://i.imgur.com/bD3WsJj.png) Самый мощный инструмент экономящий тонну времени из всей пачки. Выделим несколько особенностей при работе с ним: * Открыть директорию с билдом. Это делается простым сочетанием клавиш **CTRL+O**. * На вкладке **Extensions** появятся рекомендованные расшения, которые нужно обязательно поставить без исключений. Обязательно перезапустить **VSCode** после установки. * В правом нижнем углу есть кнопочка отвечающая за "галочку" на файле: **Ticked** - файл с галочкой; **Unticked** - без галочки. Переключается нажатием на эту кнопку, не забываем сохранять **.dme** файл (вкладка всплывёт для этого). * Кнопка в левой нижней части под названием **tgstation** (или какой у вас там билд), перезапустит анализатор кода и покажет ошибки и предупреждения, если они есть. * Комбинация **CTRL+SHIFT+B** и затем **Enter** запустят компиляцию кода. Удобно? * **CTRL+Клик** по какой-то переменной или чему угодно, что подсвечивается при удерживании **CTRL** приведут вас к родительскому элементу. Экономит время неплохо. * **CTRL+SHIFT+F** поможет быстро найти что-то в коде и при желании -- заменить. Работает в разы быстрее тормознутого бьёндовского поиска. * ![Неведомая шиза из разума дизайнеров майкрософта](https://i.imgur.com/yGaHXos.png) в левой нижней части автоматически обновит текущий репозиторий в котором вы работаете, если вы используете **Git**. * *И это только часть особенностей, про остальное ищите информацию на страницах расширений.* ### Примерная структура Объект, который можно использовать в игре: ```dm /* Объект дилдо Все переменные от этого объекта наследуют его дети Например: /obj/item/dildo/small */ /obj/item/dildo // большая часть имён должна быть в нижнем регистре, // но возможны исключения, // если вы используете имена существительные name = "дилдо" desc = "Описание дилдо." // обязательно в одинарных кавычках icon = 'путь/к/иконке/дилдо.dmi' // название состояния в файле .dmi иконки icon_state = "дилдо_драконий" // любая переменная на ваш вкус var/gayish = TRUE // Прок инициализации. Он заменяет бьёндовский прок New() /obj/item/dildo/Initialize() // данная штука снизу нужна для вызова родительского прока Initialize(). // если забудете её, то ваш объект может работать неправильно, конечно, // если только вы не собираетесь полностью менять этот прок . = ..() // да, эта // сюда пишем любую ересь, которую вы хотите видеть при инициализации, например if(get_turf(src) == /turf/closed/wall) gayish = TRUE /* Определяем свой собственный прок для объекта дилдо. Для определения новых проков пишем перед названием /proc/ Все дети от этого объекта наследуют их. В него также передаётся переменная /mob/M Передаётся так "fuk(какой-то реф моба)" */ /obj/item/dildo/proc/fuk(mob/M) // тут не нужен вызов родительской функции . = ..() // однако, если будете менять этот прок у наследственного объекта // то можно и добавить, если не собираетесь перезаписывать этот полностью // моб принадлежит к классу living? if(isliving(M)) // если да, то обозначаем его как living и работаем дальше var/mob/living/L = M // вызываем муть в глазах у этого моба в зависимости от force объекта dildo M.apply_effects(eyeblur = force) // возвращаем успех return TRUE else // если моб не относится к классу living // возвращаем не успех return FALSE // вызываем родительский прок attack(КОГО, КТО). /obj/item/dildo/attack(mob/living/M, mob/living/user) // дальше идёт проверка родительской функции if(..()) // выполняем наш прок, который возвращает что-то в return if(fuk(M)) // если успех gayish = FALSE // для прикола красим в красный color = "#ff0000" else // если провал gayish = TRUE // цвет голубых? color = "#00ffff" // можем выполнить что-то ещё после проверки say("Санекмен доигрался...") // удаляем дилдо через 10 секунд QDEL_IN(src, 100) ``` Как вы заметили, тут обилие комментариев. Комментарии всегда обязательны в коде для более быстрого понимания как он работает. Даже для себя, не только для других. > [time=Thu, Jul 2, 2020 10:05 PM]