Skip to content

Commit

Permalink
[FIX] Gun rack parts fix (#1400)
Browse files Browse the repository at this point in the history
<!-- Пишите **НИЖЕ** заголовков и **ВЫШЕ** комментариев, иначе что то
может пойти не так. -->
<!-- Вы можете прочитать Contributing.MD, если хотите узнать больше. -->

## Что этот PR делает

Добавляет иконку деталям оружейной стойки и возможность ее строительства
<!-- Вкратце опишите изменения, которые вносите. -->
<!-- Опишите **все** изменения, так как противное может сказаться на
рассмотрении этого PR'а! -->
<!-- Если вы исправляете Issue, добавьте "Fixes #xxxx" (где xxxx - номер
Issue) где-нибудь в описании PR'а. Это автоматически закроет Issue после
принятия PR'а. -->

## Почему это хорошо для игры

Оружейная стойка больше не оставляет после себя невидимые детали
<!-- Опишите, почему, по вашему, следует добавить эти изменения в игру.
-->

## Изображения изменений

![Снимок экрана 2024-08-01
152831](https://github.com/user-attachments/assets/8ac30c6b-be45-4a3e-a83c-33d8a1add20f)
<!-- Если вы не меняли карту или спрайты, можете опустить эту секцию.
Если хотите, можете вставить видео. -->

## Тестирование

Потыкал разным оружием и айтемами в разных интентах, собрал и разобрал,
повторил то же самое на борге.
<!-- Как вы тестировали свой PR, если делали это вовсе? -->

## Changelog

:cl:
fix: Оружейную стойку теперь возможно построить
/:cl:

<!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого :cl:, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->
  • Loading branch information
skifsky authored Aug 1, 2024
1 parent 79c5f46 commit deb642c
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 24 deletions.
77 changes: 53 additions & 24 deletions modular_ss220/aesthetics/racks/code/racks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

/obj/structure/rack/gunrack
name = "gun rack"
desc = "A gun rack for storing guns."
desc = "Стойка для хранения оружия."
icon_state = "gunrack"

/obj/item/gun
Expand All @@ -27,7 +27,7 @@

/obj/structure/rack/gunrack/MouseDrop_T(obj/O, mob/user)
if(!(istype(O, /obj/item/gun)))
to_chat(user, span_warning("This item doesn't fit!"))
to_chat(user, span_warning("Этот предмет не помещается!"))
return
. = ..()
if(.)
Expand All @@ -37,20 +37,33 @@

/obj/structure/rack/gunrack/attackby(obj/item/W, mob/user, params) //TODO: fix logic
if(!(istype(W, /obj/item/gun)))
to_chat(user, span_warning("This item doesn't fit!"))
to_chat(user, span_warning("Этот предмет не помещается!"))
return
. = ..()
if(W.loc == get_turf(src))
add_fingerprint(user)
var/obj/item/gun/our_gun = W
our_gun.place_on_rack()
var/list/click_params = params2list(params)
//Center the icon where the user clicked.
if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
return
//Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
W.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2)
W.pixel_y = 0
if(W.loc != get_turf(src))
return

var/obj/item/gun/our_gun = W
our_gun.place_on_rack()

add_fingerprint(user)
var/list/click_params = params2list(params)
if(!length(click_params))
return

var/click_icon_x = click_params["icon-x"]
var/click_icon_y = click_params["icon-y"]

//Center the icon where the user clicked.
if(!click_icon_x || !click_icon_y)
return

var/max_pixelshift = world.icon_size / 2
var/min_pixelshift = -max_pixelshift

//Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
W.pixel_x = clamp(text2num(click_icon_x) - 16, min_pixelshift, max_pixelshift)
W.pixel_y = 0

/obj/structure/rack/gunrack/Initialize(mapload)
. = ..()
Expand All @@ -60,21 +73,37 @@
gun_inside.place_on_rack()

/obj/structure/rack/gunrack/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
density = FALSE
var/obj/item/gunrack_parts/newparts = new(loc)
transfer_fingerprints_to(newparts)
if(flags & NODECONSTRUCT)
return

density = FALSE
var/obj/item/rack_parts/gunrack/newparts = new(loc)
transfer_fingerprints_to(newparts)

for(var/obj/item/I in loc.contents)
if(istype(I, /obj/item/gun))
var/obj/item/gun/to_remove = I
to_remove.remove_from_rack()
qdel(src)

/obj/item/gunrack_parts
/obj/item/rack_parts/gunrack
name = "gun rack parts"
desc = "Parts of a gun rack."
icon = 'icons/obj/items.dmi'
desc = "Детали для сборки оружейной стойки."
icon = 'modular_ss220/aesthetics/racks/icons/racks.dmi'
icon_state = "gunrack_parts"
flags = CONDUCT
materials = list(MAT_METAL=2000)
var/building = FALSE

/obj/item/rack_parts/gunrack/attack_self(mob/user)
if(building)
return

building = TRUE
to_chat(user, span_notice("Вы начинаете собирать оружейную стойку..."))

if(!do_after(user, 50, target = user, progress=TRUE) || !user.drop_item(src))
building = FALSE
return

var/obj/structure/rack/gunrack/rack = new(user.loc)
user.visible_message(span_notice("[user] собирает оружейную стойку."), span_notice("Вы закончили собирать оружейную стойку."))
rack.add_fingerprint(user)
qdel(src)
Binary file modified modular_ss220/aesthetics/racks/icons/racks.dmi
Binary file not shown.

0 comments on commit deb642c

Please sign in to comment.