Files
Bubberstation/code/modules/recycling/disposal/pipe_sorting.dm
SkyratBot a607a52dd6 [MIRROR] Package delivery sorter fix, autodocs [MDB IGNORE] (#18895)
Package delivery sorter fix, autodocs (#72865)

## About The Pull Request

On some maps, there is a special disposal sorting pipe, which checks if
the `tomail` var of a disposal holder. However, this has been only be
set on the parent disposal object. The delivery chute and the disposal
bin overrode this behaviour without a parent call. I have elected to
remove the two identical overrides, and move their contents to the
parent, while also swapping out the `1` to the correct sorting define of
the same value. I have also updated the disposal holder object merging
proc.

I have also autodocced proc and var definiton in the files I have
touched.

## Why It's Good For The Game

Now once again, the wrapper sorter objects will detect wrapped packages,
and on maps that support them, will be redirected to the mail outlet
chute (along with any other item in the same holder object as usual),
instead of the trash outlet chute.


![image](https://user-images.githubusercontent.com/2676196/213875548-bf1e784f-be45-4cdf-af89-9a3fbc9bd6bd.png)

## Changelog

🆑
fix: Bundles of disposal packages that contain a wrapped parcel will be
now successfully redirected by the wrapping sorters
/🆑

Co-authored-by: Profakos <profakos@gmail.com>
2023-01-23 12:18:38 -08:00

92 lines
3.2 KiB
Plaintext

// A three-way junction that sorts objects based on check_sorting(H) proc
// This is a base type, use subtypes on the map.
/obj/structure/disposalpipe/sorting
name = "sorting disposal pipe"
desc = "An underfloor disposal pipe with a sorting mechanism."
icon_state = "pipe-j1s"
initialize_dirs = DISP_DIR_RIGHT | DISP_DIR_FLIP
/obj/structure/disposalpipe/sorting/nextdir(obj/structure/disposalholder/H)
var/sortdir = dpdir & ~(dir | turn(dir, 180))
if(H.dir != sortdir) // probably came from the negdir
if(check_sorting(H)) // if destination matches filtered type...
return sortdir // exit through sortdirection
// go with the flow to positive direction
return dir
/// Sorting check, to be overridden in subtypes
/obj/structure/disposalpipe/sorting/proc/check_sorting(obj/structure/disposalholder/H)
return FALSE
// Mail sorting junction, uses package tags to sort objects.
/obj/structure/disposalpipe/sorting/mail
flip_type = /obj/structure/disposalpipe/sorting/mail/flip
var/sortType = 0
// sortType is to be set in map editor.
// Supports both singular numbers and strings of numbers similar to access level strings.
// Look at the list called TAGGERLOCATIONS in /_globalvars/lists/flavor_misc.dm
var/list/sortTypes = list()
/obj/structure/disposalpipe/sorting/mail/flip
flip_type = /obj/structure/disposalpipe/sorting/mail
icon_state = "pipe-j2s"
initialize_dirs = DISP_DIR_LEFT | DISP_DIR_FLIP
/obj/structure/disposalpipe/sorting/mail/Initialize(mapload)
. = ..()
// Generate a list of soring tags.
if(sortType)
if(isnum(sortType))
sortTypes |= sortType
else if(istext(sortType))
var/list/sorts = splittext(sortType,";")
for(var/x in sorts)
var/n = text2num(x)
if(n)
sortTypes |= n
/obj/structure/disposalpipe/sorting/mail/examine(mob/user)
. = ..()
if(sortTypes.len)
. += "It is tagged with the following tags:"
for(var/t in sortTypes)
. += "\t[GLOB.TAGGERLOCATIONS[t]]."
else
. += "It has no sorting tags set."
/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/dest_tagger))
var/obj/item/dest_tagger/O = I
if(O.currTag)// Tagger has a tag set
if(O.currTag in sortTypes)
sortTypes -= O.currTag
to_chat(user, span_notice("Removed \"[GLOB.TAGGERLOCATIONS[O.currTag]]\" filter."))
else
sortTypes |= O.currTag
to_chat(user, span_notice("Added \"[GLOB.TAGGERLOCATIONS[O.currTag]]\" filter."))
playsound(src, 'sound/machines/twobeep_high.ogg', 100, TRUE)
else
return ..()
/obj/structure/disposalpipe/sorting/mail/check_sorting(obj/structure/disposalholder/H)
return (H.destinationTag in sortTypes)
// Wrap sorting junction, sorts objects destined for the mail office mail table (tomail = TRUE)
/obj/structure/disposalpipe/sorting/wrap
desc = "An underfloor disposal pipe which sorts wrapped and unwrapped objects."
flip_type = /obj/structure/disposalpipe/sorting/wrap/flip
initialize_dirs = DISP_DIR_RIGHT | DISP_DIR_FLIP
/obj/structure/disposalpipe/sorting/wrap/check_sorting(obj/structure/disposalholder/H)
return H.tomail
/obj/structure/disposalpipe/sorting/wrap/flip
icon_state = "pipe-j2s"
flip_type = /obj/structure/disposalpipe/sorting/wrap
initialize_dirs = DISP_DIR_LEFT | DISP_DIR_FLIP