Jump to content
Valtos

[FDev HackMD] Как кодить

Recommended Posts

Для удобной работы с нашим кодом вам понадобятся следующие инструменты:

  • BYOND. Серьёзно.
  • VSCode. Легковесный и работает достаточно быстро.
  • GitHub Desktop. Говно, но с пивком пойдёт.
  • StrongDMM. Для работы с картами незаменим.
  • TweakPNG. Особый инструмент, который может помочь с форматом иконок .dmi.

Получаем билд правильным путём

Предположим, что вы уже установили Git. Тут всё очень просто:

  1. Ищём любое удобное место у себя на диске.
  2. Жмём ПКМ по свободному месту в желаемом месте…
  3. Выбираем Git Bash Here. Откроется терминал в этой папке.
  4. Пишем довольном простую команду:
    git clone --depth=1 https://github.com/tgstation/tgstation
    Это создаст папку с названием репозитория. Можете дописать в конце команды через пробел любое другое название, если желаете. Также позволит загрузить билд не качая всю историю коммитов, а только последнюю версию, что значительно уменьшает время загрузки билда.
  5. Открываем GitHub Desktop, в меню File жмём Шиза и выбираем папку куда загрузили билд.

Это не всё. Если вы хотите внести изменения, то придётся перейти к следующему пункту.

Создание Pull Requests

Для этого нам потребуются следующие вещи:

  • Аккаунт на GitHub. Куда ж без него.
  • Сам GitHub Desktop или его аналоги.
  • Собственно, сами изменения в коде/картах/картинках/звуках/чём угодно.

Всё имеется? Продолжим. Допустим, у нас есть изменение в файле code/shitcode/anus/bepis.dm и мы хотим видеть его в основном репозитории. Создаём коммит с изменениями тогда:

  1. Открываем GitHub Desktop. Видим изменения в левой части экрана, галочкой выбираем то, что будем коммитить (по дефолту всё выделено).
  2. Жмём прекрасную кнопочку Commit to master. Коммит готов.

Теперь нам нужно выгрузить куда-то это всё. Если вы делали всё по нашей инструкции, то понадобится ещё сделать собственный форк репозитория:

  1. Переходим в нужный, например, наш.
  2. Жмём кнопочку Fork в правом верхнем углу. Выбираем свой никнейм и через мгновение вы окажетесь в своём форке.
  3. Копируем ссылку из адресной строки, она должна быть в виде https://github.com/YOURNICKNAME/tgstation.
  4. Открываем папку с билдом, жмём ПКМ внутри и выбираем Git Bash Here.
  5. В терминале вводим следующие команды:
    git remote add myfork https://github.com/YOURNICKNAME/tgstation
    git push myfork master
    (там где YOURNICKNAME ставим свой вариант).

Изменения будут в вашем форке. Теперь нужно открыть Pull Request для запроса внесения ваших правок в основной репозиторий:

  1. Открываем ваш форк и жмём сюда: Я съел бомжа
  2. Жмём сюда: Прикол
  3. В поле Title пишем понятное и короткое описание того, что вы хотели бы впилить.
  4. На вкладке Write тоже заполняем всё. Комментарии можете не убирать, их всё равно не будет видно. На вкладке Preview можете посмотреть как будет выглядеть готовая версия.
  5. Жмём pEpjvVI.png, если всё готово.

Важная заметка! Все коммиты, которые вы делаете в ваш форк, также будут автоматически добавлены в ваш Pull Request. Не нужно создавать новый после каждого коммита, если существует текущий.

Интерфейс программы

Самый мощный инструмент экономящий тонну времени из всей пачки. Выделим несколько особенностей при работе с ним:

  • Открыть директорию с билдом. Это делается простым сочетанием клавиш CTRL+O.
  • На вкладке Extensions появятся рекомендованные расшения, которые нужно обязательно поставить без исключений. Обязательно перезапустить VSCode после установки.
  • В правом нижнем углу есть кнопочка отвечающая за “галочку” на файле: Ticked - файл с галочкой; Unticked - без галочки. Переключается нажатием на эту кнопку, не забываем сохранять .dme файл (вкладка всплывёт для этого).
  • Кнопка в левой нижней части под названием tgstation (или какой у вас там билд), перезапустит анализатор кода и покажет ошибки и предупреждения, если они есть.
  • Комбинация CTRL+SHIFT+B и затем Enter запустят компиляцию кода. Удобно?
  • CTRL+Клик по какой-то переменной или чему угодно, что подсвечивается при удерживании CTRL приведут вас к родительскому элементу. Экономит время неплохо.
  • CTRL+SHIFT+F поможет быстро найти что-то в коде и при желании – заменить. Работает в разы быстрее тормознутого бьёндовского поиска.
  • Неведомая шиза из разума дизайнеров майкрософта в левой нижней части автоматически обновит текущий репозиторий в котором вы работаете, если вы используете Git.
  • И это только часть особенностей, про остальное ищите информацию на страницах расширений.

Примерная структура

Объект, который можно использовать в игре:

/* 
    Объект дилдо
    Все переменные от этого объекта наследуют его дети
    Например: /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)

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

  • +Rep 5
Link to comment
Share on other sites

Гайд классный но стронгдмм говняк. Имхо, ДМ пускай и отнимает больше времени при работе над картами - но хотя бы файлы не корраптит, и запускает любое допотопное говно. :classic_cool:

Edited by Void
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...