<!--
Читать: https://github.com/TauCetiStation/TauCetiClassic/wiki/Styling-of-P…ull-Requests-for-Dummies
-->
## Описание изменений
### Модульное оружие состоит из:
1. Каркас (frame) - Дает оружию ограничение по количеству аксессуаров, а так же через него модули имеют связь с другими модулями
2. Патронник (chamber) - Запрашивает патрон из держателя магазина, и производит выстрел. Определяет тип оружия и калибр оружия
a) Если это энергетическое оружие, то имеет ограничение на количество линз. Линзы определяют снаряд выпускаемый оружием, а через активацию модуля, можно менять линзы
3. Держатель магазина (magazine) - Является ретранслятором с патронником и механом магазинов обычного оружия, создает так сказать, совместимость. Так же определяет тип перезарядки оружия
a) При сборке оружия, получает механо магазин, которые имеются в билде в качестве магазинов внутри каждого оружия.
4. Ствол (barrel) - Является критерием точности, урона, а так же некоторые аксессуары могут ссылаться на некоторые статы ствола при попытке присоединить. Так же например, может быть со встроенным глушителем или аксессуар может дать возможность глушить выстрел.
5. Рукоять (handle) - Проверяет возможность пользователя выстрелить из оружия, можно создать самые разнообразные проверки для стрельбы тем, кто не может стрелять.
6. Аксессуары (accessory) - Самые разнообразные аксессуары так или иначе могут влиять на возможности оружия. Аксессуары делятся на пассивные и активные. Активные могут так или иначе влиять на оружие при активации, в качестве примера DNA crypter который при соединении с пушкой, не позволяет стрелять из нее никому, кроме того, кто первый активировал этот аксессуар. Или же оптический прицел.
Из пассивных можно отметить аксессуар с дополнительной батареей для энерго оружия, который работая, заряжает собственной батареей основную
### Общие цели
- [ ] Сделать код проще и менее нагроможденней, так же избавится от недочетов
- [ ] Необходимо сделать спрайты каждого из модулей на персонаже со всех 4-х сторон, в руках, на поясе и спине. Сильно надеюсь на помощь от спрайтеров
- [ ] Необходимо сбалансировать разные аспекты оружия для комфортной игры без дисбаланса. Тут я тоже прошу помощи, только уже от баланс департамента
- [x] Необходимо внедрить оружие в игру и способы его получения. Тоже жду совета от баланс департамента
- [ ] Совет был получен, внедрю в РНД, и сделаю специальный станок в бриге и РНД, для модификации модулями (исключение аксессуары). Так же карго будет поставлять модули
### Информация для спрайтеров
Спрайты для отображения на пушке, рисуются в формате как на скриншоте
![image](https://user-images.githubusercontent.com/24685276/91435077-6cf0fa00-e86e-11ea-9be3-9a2e88d8e586.png)
Максимально слева снизу. Для того, чтобы внедрить спрайт в механ "point and point", нужно обозначить точку которой спрайт будет присоединятся к другой точке и по надобности, точки к которым будут присоединятся спрайты
**exit_point, для отражения единственной точки спрайта, которой он присоединяется к другому спрайту.
Формат: list(x, y)
Для редактирования информации в этом листе, используйте прок
change_list_exit(<это тег, как пример "ICON" - отвечает за иконку>,<направление>, list(x, y))**
**points_of_entry, отражает несколько точек на спрайте, к которым могут присоединится другие спрайты.
Точки заполняются в формате:
list(
<prefix модуля> = list(x, y),
<prefix модуля> = list(x, y)
...
)
Для редактирования информации в этом листе, используйте прок
change_list_entry(<Тег>, <Направление>, list(<Префикс модуля> = list(x, y),<Префикс модуля2>= list(x, y)))
Так же есть изменение информации только по тегу модуля
change_list_entry(<Тег>, <Направление>, list(x, y), <Префикс модуля>)**
### Статы для балансеров, а так же их объяснение
lessdamage - уменьшение урона пули (отрицательное значение увеличивает урон пули)
lessdispersion - уменьшение разброса (отрицательное значение увеличивает разброс оружия).
а) Минимальный разброс 0, максимальный 5
size_gun - размер оружия, ассоциации с размерами выложены в дефайнах
SMALL_GUN 5
MEDIUM_GUN 9
LARGE_GUN 12
1. ### Патронник
- Для энерго оружия, урон пули делится на каждый снаряд, на которые делит патронник.
<урон каждой пули>/<количество снарядов>
- Так же, для энерго оружия, некоторые снаряды могут накладывать эффекты, например тазеры. Была введена
переменная, для того чтобы сбалансировать тазерные дробовики которые мгновенно ложили кого угодно.
Теперь от количества снарядов зависит сила эффекта снаряда.
<степень на которую будет делится эффект для уменьшения> = <количество снарядов>*2
- Еще для энерго оружия, о количества снарядов, уменьшается точность каждого из них
<разброс> = 0.5 * <количество снарядов>
- Затраты энергии энерго оружия, расчитываются по формуле
<затраты энергии линзы> * <количество снарядов> * 10
- Задержка между выстрелами расчитывается по формуле:
<стандартная задержка для патронника> * (<урон пули>*<количество снарядов>/300 + 1)
- Теперь по статам патронников:
- Пулевое оружие. Калибр 9мм. lessdamage = -3, lessdispersion = 0, size_gun = 1, fire_delay_default = 9,
recoil_chamber = 0 - параметр отвечающий за отдачу патронника после выстрела, компенсируется рукоятью
- Пулевое оружие. Калибр 14.5mm. lessdamage = -6, lessdispersion = 0.8, size_gun = 3, fire_delay_default = 0,
recoil_chamber = 5
- Пулевое оружие. Калибр shotgun. lessdamage = 0, lessdispersion = -2, size_gun = 4, fire_delay_default = 15,
recoil_chamber = 3
- Энергетическое оружие. Энерго дробовик. lessdamage = 0, lessdispersion = -2, size_gun = 4, fire_delay_default = 15,
recoil_chamber = 0, max_lens = 2, pellets = 5 - отвечает за количество снарядов
- Энергетическое оружие. Энерго винтовка. lessdamage = -5, lessdispersion = 1, size_gun = 1, fire_delay_default = 9,
recoil_chamber = 0, max_lens = 1, pellets = 1
2. ### Магазин
- Не имеют особенных статов, лишь способы перезарядки патронника.
3. ### Ствол
- В большинстве своем, увеличивают урон и уменьшают разброс.
- Маленький ствол. lessdamage = 6, lessdispersion = 1, size_gun = 1
- Средний ствол. lessdamage = 0, lessdispersion = 2, size_gun = 2
- Большой ствол. lessdamage = -6, lessdispersion = 3, size_gun = 3
- Пулевой большой ствол. lessdamage = -8, lessdispersion = 4, size_gun = 4
- Пулевой лазерный ствол. lessdamage = -8, lessdispersion = 4, size_gun = 4
4. ### Рукояти
- В основном делятся на те, которые нужно держать в обеих руках, или в одной. Можно создавать рукояти с разными проверками. Так же снижают отдачу от патронника.
- Пистолетная рукоять. lessdamage = 0, lessdispersion = 1, size_gun = 1, lessrecoil = 0
- Утяжеленная рукоять. lessdamage = 0, lessdispersion = 1.5, size_gun = 1, lessrecoil = 1
- Упругая рукоять. Требует две руки. lessdamage = 0, lessdispersion = 1, size_gun = 2, lessrecoil = 3
- Рукоять дробовика. lessdamage = 0, lessdispersion = 0.5, size_gun = 3, lessrecoil = 2
- Винтовочная рукоять. Требует две руки. lessdamage = 0, lessdispersion = 2.5, size_gun = 3, lessrecoil = 3
5. ### Аксессуары
- Самый интересный пункт, так как модули могут менять очень сильно оружие.
- Маленький оптический прицел. Требует ствол размера 1. lessdamage = 0, lessdispersion = 1, size_gun = 1, радиус
видимости 9
- Средний оптический прицел. Требует ствол размера 2. lessdamage = 0, lessdispersion = 1, size_gun = 2, радиус
видимости 11
- Большой оптический прицел. Требует ствол размера 3. lessdamage = 0, lessdispersion = 1, size_gun = 3, радиус
видимости 14
- Зарядник от ядра аномалии. lessdamage = 0, lessdispersion = 0, size_gun = 1, каждые 8 тиков, заряжает батарею внутри
держателя магазина на 1000 единиц энергии.
- Глушитель. lessdamage = 6, lessdispersion = 0.3, size_gun = 2, глушит выстрел
- Штык нож. lessdamage = 0, lessdispersion = 0, size_gun = 2, Дает оружию урон с руки 12, так же оружие получает
возможность резать и застрять при атаках с руки. Так же штык нож можно снять и он будет как нож со статами
которые он дает пушке
- Дополнительная батарея. lessdamage = 0, lessdispersion = 0, size_gun = 2, Батареей внутри себя, постоянно заряжает
потраченную энергию основной батареей.
- Криптер ДНК. lessdamage = 0, lessdispersion = 0, size_gun = 2, При первой активации модуля, закрепляет владельца,
никто кроме владельца не сможет стрелять из оружия, а так же снять сам криптер не сможет никто кроме
владельца.....ну а остальные части кто угодно
### Немного скринов
Спрайты собранного оружия с модулями
![image](https://user-images.githubusercontent.com/24685276/90955755-b44f4300-e488-11ea-9838-578a291a36a8.png)
Экзамайн оружия с подробным описанием каждого модуля, а так же отображением конфигураций, настраиваемых у пользователя
![image](https://user-images.githubusercontent.com/24685276/90955763-d943b600-e488-11ea-8104-b06602c57498.png)
Описание патронника у оружия с характеристиками которые были получены в совокупности с другими модулями
![image](https://user-images.githubusercontent.com/24685276/90955771-f4162a80-e488-11ea-9b88-e89b37af7cb2.png)
Описание общих статов оружия которые были получены в совокупности с другими модулями
![image](https://user-images.githubusercontent.com/24685276/90955775-03957380-e489-11ea-9b7a-3d7e40dd77c1.png)
### Дополнительные изменения
1. Добавлен сигнал COSMIG_ATOM_SETDIR, который отслеживает любые повороты объектов через /atom/proc/set_dir(new_dir)
## Почему и что этот ПР улучшит
Этот ПР принесет больше гибкости оружию и позволит разнообразить игру на сервере (банально, но я надеюсь на это)
## Авторство
Код - я
Спрайты -
Баланс -
## Чеинжлог
:cl: 1DarkWater1
- experiment: Введение модульного оружия в игру