From 9e65bfd39b470fe5123d09530d4985a8f36e48f3 Mon Sep 17 00:00:00 2001 From: Lucy Date: Sat, 30 Sep 2023 07:20:16 -0400 Subject: [PATCH 01/25] [s] Fixes a bug where holoparas get sent back to the lobby after being reset (#9934) --- code/modules/holoparasite/holoparasite_reset.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/holoparasite/holoparasite_reset.dm b/code/modules/holoparasite/holoparasite_reset.dm index 08f9c371fc67e..c618452fa8282 100644 --- a/code/modules/holoparasite/holoparasite_reset.dm +++ b/code/modules/holoparasite/holoparasite_reset.dm @@ -66,6 +66,7 @@ to_chat(summoner.current, "Personality reset failed: unknown error!") return to_chat(src, "[self ? "A ghost took control of you, at your request." : "Your summoner reset you! Better luck next time!"]") + ghostize(can_reenter_corpse = FALSE) key = new_player.key to_chat(summoner.current, "Personality reset for [color_name] succeeded!") SSblackbox.record_feedback("tally", "holoparasite_reset", 1, automatic ? "automatic" : (self ? "self" : (cooldown ? "summoner" : "summoner (free)"))) From 779a1cd5cad16f90d1ef41020e38f509a10dd624 Mon Sep 17 00:00:00 2001 From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Sat, 30 Sep 2023 06:30:37 -0500 Subject: [PATCH 02/25] Automatic changelog generation for PR #9934 [ci skip] --- html/changelogs/AutoChangeLog-pr-9934.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9934.yml diff --git a/html/changelogs/AutoChangeLog-pr-9934.yml b/html/changelogs/AutoChangeLog-pr-9934.yml new file mode 100644 index 0000000000000..10ec47ca7d283 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9934.yml @@ -0,0 +1,6 @@ +author: Absolucy, Bieyes +delete-after: true +changes: + - bugfix: Fixed an exploit where a holoparasite player could be sent back to the + lobby after being reset. Thank you Bieyes (Theodore Cooper) for alerting me + of this exploit after coming across it! From c506d5c79555ac1e086001d337101211d7d88446 Mon Sep 17 00:00:00 2001 From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Sat, 30 Sep 2023 12:02:35 +0000 Subject: [PATCH 03/25] Automatic changelog compile [ci skip] --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-9934.yml | 6 ------ 3 files changed, 8 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-9934.yml diff --git a/html/changelog.html b/html/changelog.html index 8c15b6f518718..afbd5492f5340 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,10 @@

30 September 2023

+

Absolucy, Bieyes updated:

+

MMMiracles, goober3 updated:

GoonStation 13 Development Team From caba607dc496c92320e16881e3a0636007756abd Mon Sep 17 00:00:00 2001 From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Mon, 2 Oct 2023 00:04:40 +0000 Subject: [PATCH 05/25] Automatic changelog compile [ci skip] --- html/changelog.html | 71 --------------------------------------------- 1 file changed, 71 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 84ecc058c75f2..0a144f372a5a1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -929,77 +929,6 @@

XeonMations, Dakae updated:

  • Sentient monkey helmets, orderable from cargo
  • TRAIT_MONKEYLIKE is now TRAIT_DISCOORDINATED
  • - -

    31 July 2023

    -

    updated:

    - -

    Absolucy updated:

    - -

    BriggsIDP updated:

    - -

    CydiaLamiales updated:

    - -

    HowToLoLu updated:

    - -

    JixS4v updated:

    - -

    LemonInTheDark, itsmeow, Ghommie, Dennok updated:

    - -

    RKz updated:

    - -

    RKz, Haukeschuemann updated:

    - -

    RKz, Rohesie, Cobby updated:

    - -

    itsmeow updated:

    - -

    mystery3525 updated:

    - -

    wixoa, ike709 updated:

    - GoonStation 13 Development Team From d7759cdebf0a8fc969adb77e877e2ec9c41b88b0 Mon Sep 17 00:00:00 2001 From: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Date: Mon, 2 Oct 2023 03:27:29 -0400 Subject: [PATCH 06/25] Adds linting for and attach() element, and equipped() proc (#9863) * https://github.com/tgstation/tgstation/pull/46614 * https://github.com/tgstation/tgstation/pull/61453 --- code/_onclick/telekinesis.dm | 5 +- code/controllers/globals.dm | 2 +- code/datums/components/twohanded.dm | 1 + code/datums/elements/_element.dm | 1 + code/datums/martial/boxing.dm | 3 +- code/datums/martial/krav_maga.dm | 3 +- code/datums/martial/wrestling.dm | 3 +- code/game/objects/items.dm | 1 + code/game/objects/items/cigs_lighters.dm | 3 +- code/game/objects/items/pitchfork.dm | 2 +- code/game/objects/items/robot/robot_items.dm | 3 +- code/game/objects/items/weaponry.dm | 8 ++- .../awaymissions/mission_code/Academy.dm | 1 + code/modules/clothing/head/misc.dm | 3 +- code/modules/clothing/head/soft_caps.dm | 1 + code/modules/clothing/masks/cluwne.dm | 52 ++++++++++--------- code/modules/clothing/shoes/cluwne.dm | 1 + .../living/carbon/alien/special/facehugger.dm | 1 + .../projectiles/guns/ballistic/pistol.dm | 4 +- 19 files changed, 56 insertions(+), 42 deletions(-) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 74c4615131858..21b0530a24d2d 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -79,8 +79,9 @@ START_PROCESSING(SSfastprocess, src) /obj/item/tk_grab/Destroy() - focus = null STOP_PROCESSING(SSfastprocess, src) + focus = null + tk_user = null return ..() /obj/item/tk_grab/process() @@ -95,10 +96,10 @@ //stops TK grabs being equipped anywhere but into hands /obj/item/tk_grab/equipped(mob/user, slot) + . = ..() if(slot == ITEM_SLOT_HANDS) return qdel(src) - return /obj/item/tk_grab/examine(user) if (focus) diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 7902588aa640d..d36861f6bdcf2 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -22,7 +22,7 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) /datum/controller/global_vars/Destroy(force) // This is done to prevent an exploit where admins can get around protected vars - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) return QDEL_HINT_IWILLGC /datum/controller/global_vars/stat_entry() diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 4cde9a2c7fa94..04ee7e3682a62 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -396,5 +396,6 @@ var/wielded = FALSE /obj/item/offhand/equipped(mob/user, slot) + . = ..() if(wielded && !user.is_holding(src)) qdel(src) diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index fd0169712a3b6..5edbc2772e4a6 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -8,6 +8,7 @@ var/id_arg_index = INFINITY /datum/element/proc/Attach(datum/target) + SHOULD_CALL_PARENT(TRUE) if(type == /datum/element) return ELEMENT_INCOMPATIBLE SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index f64c3388de463..59d5cfdb2e0d6 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -46,12 +46,13 @@ log_combat(A, D, "knocked out (boxing) ") else if(!(D.mobility_flags & MOBILITY_STAND)) D.force_say(A) - return 1 + return TRUE /obj/item/clothing/gloves/boxing var/datum/martial_art/boxing/style = new /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) + ..() if(!ishuman(user)) return if(slot == ITEM_SLOT_GLOVES) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index e8139f43eb2d1..6236dd249ff1a 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -191,6 +191,7 @@ var/datum/martial_art/krav_maga/style = new /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) + . = ..() if(!ishuman(user)) return if(slot == ITEM_SLOT_GLOVES) @@ -198,7 +199,7 @@ style.teach(H,1) /obj/item/clothing/gloves/krav_maga/dropped(mob/user) - ..() + . = ..() if(!ishuman(user)) return var/mob/living/carbon/human/H = user diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index cb55f73b19eba..7af26a5b144e3 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -455,6 +455,7 @@ var/datum/martial_art/wrestling/style = new /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) + . = ..() if(!ishuman(user)) return if(slot == ITEM_SLOT_BELT) @@ -463,7 +464,7 @@ return /obj/item/storage/belt/champion/wrestling/dropped(mob/user) - ..() + . = ..() if(!ishuman(user)) return var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 47d9a430e8dc5..ebcba7ee02f77 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -713,6 +713,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(mob/user, slot, initial = FALSE) + SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) SEND_SIGNAL(user, COMSIG_MOB_EQUIPPED_ITEM, src, slot) for(var/X in actions) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index d4c3944d1c2b5..2e116884d0da8 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -915,6 +915,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.clear_reagents() /obj/item/clothing/mask/vape/equipped(mob/user, slot) + . = ..() if(slot == ITEM_SLOT_MASK) if(!screw) to_chat(user, "You start puffing on the vape.") @@ -924,7 +925,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, "You need to close the cap first!") /obj/item/clothing/mask/vape/dropped(mob/user) - ..() + . = ..() if(user.get_item_by_slot(ITEM_SLOT_MASK) == src) ENABLE_BITFIELD(reagents.flags, NO_REACT) STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm index 4217d42c7e5e5..462111bd1a808 100644 --- a/code/game/objects/items/pitchfork.dm +++ b/code/game/objects/items/pitchfork.dm @@ -60,7 +60,7 @@ return (BRUTELOSS) /obj/item/pitchfork/demonic/pickup(mob/living/user) - ..() + . = ..() if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) var/mob/living/U = user U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index bf46dd8fd3f4f..1b959715ec7d7 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -450,10 +450,11 @@ emaggedhitdamage = 0 /obj/item/borg/lollipop/equipped() + . = ..() check_amount() /obj/item/borg/lollipop/dropped() - ..() + . = ..() check_amount() /obj/item/borg/lollipop/proc/check_amount() //Doesn't even use processing ticks. diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index b12e533737ac3..1468ad3d55343 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -97,7 +97,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." flags_1 = CONDUCT_1 - item_flags = DROPDEL | ISWEAPON + item_flags = DROPDEL | ISWEAPON //dropdel occurs because you lost an arm slot_flags = null light_range = 3 attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS @@ -128,16 +128,14 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/claymore/highlander/pickup(mob/living/user) - ..() + . = ..() to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") user.ignore_slowdown(HIGHLANDER) /obj/item/claymore/highlander/dropped(mob/living/user) - ..() + . = ..() user.unignore_slowdown(HIGHLANDER) - if(!QDELETED(src)) - qdel(src) //If this ever happens, it's because you lost an arm /obj/item/claymore/highlander/examine(mob/user) . = ..() diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index e77708ae14ef1..c4d77ff12ec7e 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -211,6 +211,7 @@ addtimer(CALLBACK(src, PROC_REF(effect), user, .), 1 SECONDS) /obj/item/dice/d20/fate/equipped(mob/user, slot) + . = ..() if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") user.dropItemToGround(src) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index d8c2e36b788ce..bcc6790770d8e 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -122,6 +122,7 @@ var/datum/language/piratespeak/L = new /obj/item/clothing/head/pirate/equipped(mob/user, slot) + . = ..() if(!ishuman(user)) return if(slot == ITEM_SLOT_HEAD) @@ -129,7 +130,7 @@ to_chat(user, "You suddenly know how to speak like a pirate!") /obj/item/clothing/head/pirate/dropped(mob/user) - ..() + . = ..() if(!ishuman(user)) return var/mob/living/carbon/human/H = user diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 5fa8d5c576bfa..7e501c6553465 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -26,6 +26,7 @@ user.update_inv_head() //so our mob-overlays update /obj/item/clothing/head/soft/equipped(mob/user, slot) + . = ..() if(slot == ITEM_SLOT_HEAD) if(HAS_TRAIT(user, TRAIT_PROSKATER)) if(!flipped) diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm index 4b8a59734fe2a..d687f70452ba4 100644 --- a/code/modules/clothing/masks/cluwne.dm +++ b/code/modules/clothing/masks/cluwne.dm @@ -51,12 +51,13 @@ return SPEECH_MESSAGE /obj/item/clothing/mask/cluwne/equipped(mob/user, slot) - if(!user.has_dna()) - return - if(slot == ITEM_SLOT_MASK) - var/mob/living/carbon/C = user - C.dna.add_mutation(CLUWNEMUT) - return + . = ..() + if(!user.has_dna()) + return + if(slot == ITEM_SLOT_MASK) + var/mob/living/carbon/C = user + C.dna.add_mutation(CLUWNEMUT) + return /obj/item/clothing/mask/cluwne/happy_cluwne name = "Happy Cluwne Mask" @@ -83,22 +84,23 @@ play_laugh1() /obj/item/clothing/mask/cluwne/happy_cluwne/equipped(mob/user, slot) - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(slot == ITEM_SLOT_MASK) - if(is_cursed && can_cluwne) //logic predetermined - log_admin("[key_name(H)] was made into a cluwne by [src]") - message_admins("[key_name(H)] got cluwned by [src]") - to_chat(H, "The masks straps suddenly tighten to your face and your thoughts are erased by a horrible green light!") - H.dropItemToGround(src) - H.cluwneify() - qdel(src) - else if(is_very_cursed && can_cluwne) - var/turf/T = get_turf(src) - var/mob/living/simple_animal/hostile/floor_cluwne/S = new(T) - S.Acquire_Victim(user) - log_admin("[key_name(user)] summoned a floor cluwne using the [src]") - message_admins("[key_name(user)] summoned a floor cluwne using the [src]") - to_chat(H, "The mask suddenly slips off your face and... slides under the floor?") - to_chat(H, "...dneirf uoy ot gnoleb ton seod tahT") + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(slot == ITEM_SLOT_MASK) + if(is_cursed && can_cluwne) //logic predetermined + log_admin("[key_name(H)] was made into a cluwne by [src]") + message_admins("[key_name(H)] got cluwned by [src]") + to_chat(H, "The masks straps suddenly tighten to your face and your thoughts are erased by a horrible green light!") + H.dropItemToGround(src) + H.cluwneify() + qdel(src) + else if(is_very_cursed && can_cluwne) + var/turf/T = get_turf(src) + var/mob/living/simple_animal/hostile/floor_cluwne/S = new(T) + S.Acquire_Victim(user) + log_admin("[key_name(user)] summoned a floor cluwne using the [src]") + message_admins("[key_name(user)] summoned a floor cluwne using the [src]") + to_chat(H, "The mask suddenly slips off your face and... slides under the floor?") + to_chat(H, "...dneirf uoy ot gnoleb ton seod tahT") diff --git a/code/modules/clothing/shoes/cluwne.dm b/code/modules/clothing/shoes/cluwne.dm index 6e76754b73e0b..d45d3753fb3af 100644 --- a/code/modules/clothing/shoes/cluwne.dm +++ b/code/modules/clothing/shoes/cluwne.dm @@ -21,6 +21,7 @@ footstep++ /obj/item/clothing/shoes/cluwne/equipped(mob/user, slot) + . = ..() if(!user.has_dna()) return if(slot == ITEM_SLOT_FEET) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index fba3b5b2d374a..658098e439271 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -98,6 +98,7 @@ Die() /obj/item/clothing/mask/facehugger/equipped(mob/M) + . = ..() Attach(M) compile_monkey_icon() diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index ca89a46295943..4869eeaff4872 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -100,9 +100,9 @@ desc = "A 2 dimensional gun.. what?" icon_state = "flatgun" -/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) +/obj/item/gun/ballistic/automatic/pistol/stickman/equipped(mob/user, slot) ..() - to_chat(user, "As you try to pick up [src], it slips out of your grip..") + to_chat(user, "As you try to manipulate [src], it slips out of your possession..") if(prob(50)) to_chat(user, "..and vanishes from your vision! Where the hell did it go?") qdel(src) From 8b64ef6d5b79c21678e3e2e7554abbeca2f3d51b Mon Sep 17 00:00:00 2001 From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Mon, 2 Oct 2023 02:38:57 -0500 Subject: [PATCH 07/25] Automatic changelog generation for PR #9863 [ci skip] --- html/changelogs/AutoChangeLog-pr-9863.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9863.yml diff --git a/html/changelogs/AutoChangeLog-pr-9863.yml b/html/changelogs/AutoChangeLog-pr-9863.yml new file mode 100644 index 0000000000000..5a6fee76ceb14 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9863.yml @@ -0,0 +1,4 @@ +author: RKz, necromanceranne, Spookydonut +delete-after: true +changes: + - code_imp: adds linting for equipped() From 8eb3e8c6ae39d3bc48ffd788b6112c9260c2e46d Mon Sep 17 00:00:00 2001 From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Mon, 2 Oct 2023 08:02:04 +0000 Subject: [PATCH 08/25] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-9863.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-9863.yml diff --git a/html/changelog.html b/html/changelog.html index 0a144f372a5a1..2e54db7ced566 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->
    +

    02 October 2023

    +

    RKz, necromanceranne, Spookydonut updated:

    + +

    30 September 2023

    Absolucy, Bieyes updated: