From cf30d74867285b07137c58fd191e991177ba0470 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 16 Dec 2023 17:20:55 -0300 Subject: [PATCH 1/9] push --- code/modules/unit_tests/interactions.dm | 9 + .../controllers/subsystem/interactions.dm | 9 +- .../components/interaction_menu_granter.dm | 3 + .../interaction_datums/lewd/slap.dm | 9 + .../datums/interactions/lewd_interactions.dm | 199 +++++++++--------- tgstation.dme | 1 + .../tgui/interfaces/MobInteraction.tsx | 60 ++++-- 7 files changed, 173 insertions(+), 117 deletions(-) create mode 100644 modular_sand/code/datums/interactions/interaction_datums/lewd/slap.dm diff --git a/code/modules/unit_tests/interactions.dm b/code/modules/unit_tests/interactions.dm index 7e27b2b99d..c06cae4257 100644 --- a/code/modules/unit_tests/interactions.dm +++ b/code/modules/unit_tests/interactions.dm @@ -3,4 +3,13 @@ SSinteractions.prepare_interactions() if(!SSinteractions.interactions || !length(SSinteractions.interactions)) Fail("make_interactions() was called but SSinteractions.interactions is empty.") + for(var/datum/interaction/interaction as anything in SSinteractions.interactions) + if(!interaction.description) + Fail("Basetype [interaction.type] located within SSinteractions.interactions") + if(interaction.required_from_user_exposed && interaction.required_from_user_unexposed) + if(interaction.required_from_user_exposed != interaction.required_from_user_unexposed) + Fail("Interaction [interaction.description]([interaction.type]) has non-matching requirements for user exposed and unexposed, this is unsupported!") + if(interaction.required_from_target_exposed && interaction.required_from_target_unexposed) + if(interaction.required_from_target_exposed != interaction.required_from_target_unexposed) + Fail("Interaction [interaction.description]([interaction.type]) has non-matching requirements for target exposed and unexposed, this is unsupported!") return diff --git a/modular_sand/code/controllers/subsystem/interactions.dm b/modular_sand/code/controllers/subsystem/interactions.dm index 9c4aa05006..272a9542fa 100644 --- a/modular_sand/code/controllers/subsystem/interactions.dm +++ b/modular_sand/code/controllers/subsystem/interactions.dm @@ -40,9 +40,12 @@ SUBSYSTEM_DEF(interactions) /datum/controller/subsystem/interactions/proc/prepare_interactions() QDEL_NULL_LIST(interactions) interactions = list() - for(var/itype in subtypesof(/datum/interaction)) - var/datum/interaction/I = new itype() - interactions["[itype]"] = I + for(var/datum/interaction/interaction as anything in subtypesof(/datum/interaction)) + // Basetype, do not create + if(!initial(interaction.description)) + continue + interaction = new() + interactions["[interaction.type]"] = interaction /// Blacklisting! /datum/controller/subsystem/interactions/proc/prepare_blacklisted_mobs() diff --git a/modular_sand/code/datums/components/interaction_menu_granter.dm b/modular_sand/code/datums/components/interaction_menu_granter.dm index 2feb63757c..828115cb8e 100644 --- a/modular_sand/code/datums/components/interaction_menu_granter.dm +++ b/modular_sand/code/datums/components/interaction_menu_granter.dm @@ -424,6 +424,9 @@ var/list/sent_interactions = list() for(var/interaction_key in SSinteractions.interactions) var/datum/interaction/I = SSinteractions.interactions[interaction_key] + // THIS IS A BASETYPE, DO NOT SEND + if(!I.description) + continue var/list/interaction = list() interaction["key"] = I.type interaction["desc"] = I.description diff --git a/modular_sand/code/datums/interactions/interaction_datums/lewd/slap.dm b/modular_sand/code/datums/interactions/interaction_datums/lewd/slap.dm new file mode 100644 index 0000000000..a233587dee --- /dev/null +++ b/modular_sand/code/datums/interactions/interaction_datums/lewd/slap.dm @@ -0,0 +1,9 @@ +/datum/interaction/lewd/slap + description = "Slap their ass." + simple_message = "USER slaps TARGET right on the ass!" + simple_style = "danger" + interaction_sound = 'sound/weapons/slap.ogg' + required_from_user = INTERACTION_REQUIRE_HANDS + + write_log_user = "ass-slapped" + write_log_target = "was ass-slapped by" diff --git a/modular_sand/code/datums/interactions/lewd_interactions.dm b/modular_sand/code/datums/interactions/lewd_interactions.dm index c934fac43a..69a555cb0f 100644 --- a/modular_sand/code/datums/interactions/lewd_interactions.dm +++ b/modular_sand/code/datums/interactions/lewd_interactions.dm @@ -1,14 +1,9 @@ // If I could have gotten away with using a tilde in the type path, I would have. /datum/interaction/lewd - description = "Slap their ass." - simple_message = "USER slaps TARGET right on the ass!" - simple_style = "danger" - interaction_sound = 'sound/weapons/slap.ogg' + description = null + simple_style = "lewd" interaction_flags = INTERACTION_FLAG_ADJACENT | INTERACTION_FLAG_OOC_CONSENT - write_log_user = "ass-slapped" - write_log_target = "was ass-slapped by" - /// Use the number of required feet. var/require_user_num_feet var/require_target_num_feet @@ -46,15 +41,16 @@ return FALSE // Special behavior for things like non-humans and if both sides are allowed - if(!(has_penis == TRUE) || !(user_require_penis_exposed && user_require_penis_unexposed)) - if((user_require_penis_exposed) && has_penis == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your penis need to be exposed.")) - return FALSE - if((user_require_penis_unexposed) && has_penis == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your penis need to be unexposed.")) - return FALSE + if(!(user_require_penis_exposed && user_require_penis_unexposed)) + if(!(has_penis == TRUE)) + if((user_require_penis_exposed) && has_penis == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your penis need to be exposed.")) + return FALSE + if((user_require_penis_unexposed) && has_penis == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your penis need to be unexposed.")) + return FALSE var/user_require_balls_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_BALLS) var/user_require_balls_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_BALLS) @@ -65,15 +61,16 @@ to_chat(user, span_warning("You don't have balls.")) return FALSE - if(!(has_balls == TRUE) || !(user_require_balls_exposed && user_require_balls_unexposed)) - if((user_require_balls_exposed) && has_balls == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your balls need to be exposed.")) - return FALSE - if((user_require_balls_unexposed) && has_balls == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your balls need to be unexposed.")) - return FALSE + if(!(user_require_balls_exposed && user_require_balls_unexposed)) + if(!(has_balls == TRUE)) + if((user_require_balls_exposed) && has_balls == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your balls need to be exposed.")) + return FALSE + if((user_require_balls_unexposed) && has_balls == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your balls need to be unexposed.")) + return FALSE var/user_require_anus_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_ANUS) var/user_require_anus_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_ANUS) @@ -84,15 +81,16 @@ to_chat(user, span_warning("You don't have an anus.")) return FALSE - if(!(has_anus == TRUE) || !(user_require_anus_exposed && user_require_anus_unexposed)) - if(user_require_anus_exposed && has_anus == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your anus needs to be exposed.")) - return FALSE - if(user_require_anus_unexposed && has_anus == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your anus needs to be unexposed.")) - return FALSE + if(!(user_require_anus_exposed && user_require_anus_unexposed)) + if(!(has_anus == TRUE)) + if(user_require_anus_exposed && has_anus == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your anus needs to be exposed.")) + return FALSE + if(user_require_anus_unexposed && has_anus == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your anus needs to be unexposed.")) + return FALSE var/user_require_vagina_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_VAGINA) var/user_require_vagina_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_VAGINA) @@ -103,15 +101,16 @@ to_chat(user, span_warning("You don't have a vagina.")) return FALSE - if(!(has_vagina == TRUE) || !(user_require_vagina_exposed && user_require_vagina_unexposed)) - if(user_require_vagina_exposed && has_vagina == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your vagina needs to be exposed.")) - return FALSE - if(user_require_vagina_unexposed && has_vagina == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your vagina needs to be unexposed.")) - return FALSE + if(!(user_require_vagina_exposed && user_require_vagina_unexposed)) + if(!(has_vagina == TRUE)) + if(user_require_vagina_exposed && has_vagina == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your vagina needs to be exposed.")) + return FALSE + if(user_require_vagina_unexposed && has_vagina == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your vagina needs to be unexposed.")) + return FALSE var/user_require_breasts_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_BREASTS) var/user_require_breasts_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_BREASTS) @@ -122,15 +121,16 @@ to_chat(user, span_warning("You don't have breasts.")) return FALSE - if(!(has_breasts == TRUE) || !(user_require_breasts_exposed && user_require_breasts_unexposed)) - if(user_require_breasts_exposed && has_breasts == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your breasts need to be exposed.")) - return FALSE - if(user_require_breasts_unexposed && has_breasts == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(user, span_warning("Your breasts need to be unexposed.")) - return FALSE + if(!(user_require_breasts_exposed && user_require_breasts_unexposed)) + if(!(has_breasts == TRUE)) + if(user_require_breasts_exposed && has_breasts == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your breasts need to be exposed.")) + return FALSE + if(user_require_breasts_unexposed && has_breasts == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(user, span_warning("Your breasts need to be unexposed.")) + return FALSE var/user_require_feet_exposed = !!(required_from_user_exposed & INTERACTION_REQUIRE_FEET) var/user_require_feet_unexposed = !!(required_from_user_unexposed & INTERACTION_REQUIRE_FEET) @@ -275,15 +275,16 @@ to_chat(target, span_warning("They don't have a penis.")) return FALSE - if(!(has_penis == TRUE) || !(target_require_penis_exposed && target_require_penis_unexposed)) - if(target_require_penis_exposed && has_penis == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their penis needs to be exposed.")) - return FALSE - if(target_require_penis_unexposed && has_penis == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their penis needs to be unexposed.")) - return FALSE + if(!(target_require_penis_exposed && target_require_penis_unexposed)) + if(!(has_penis == TRUE)) + if(target_require_penis_exposed && has_penis == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their penis needs to be exposed.")) + return FALSE + if(target_require_penis_unexposed && has_penis == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their penis needs to be unexposed.")) + return FALSE var/target_require_balls_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_BALLS) var/target_require_balls_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_BALLS) @@ -294,15 +295,16 @@ to_chat(target, span_warning("They don't have balls.")) return FALSE - if(!(has_balls == TRUE) || !(target_require_balls_exposed && target_require_balls_unexposed)) - if(target_require_balls_exposed && has_balls == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their balls need to be exposed.")) - return FALSE - if(target_require_balls_unexposed && has_balls == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their balls need to be unexposed.")) - return FALSE + if(!(target_require_balls_exposed && target_require_balls_unexposed)) + if(!(has_balls == TRUE)) + if(target_require_balls_exposed && has_balls == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their balls need to be exposed.")) + return FALSE + if(target_require_balls_unexposed && has_balls == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their balls need to be unexposed.")) + return FALSE var/target_require_anus_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_ANUS) var/target_require_anus_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_ANUS) @@ -313,15 +315,16 @@ to_chat(target, span_warning("They don't have an anus.")) return FALSE - if(!(has_anus == TRUE) || !(target_require_anus_exposed && target_require_anus_unexposed)) - if(target_require_anus_exposed && has_anus == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their anus needs to be exposed.")) - return FALSE - if(target_require_anus_unexposed && has_anus == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their anus needs to be unexposed.")) - return FALSE + if(!(target_require_anus_exposed && target_require_anus_unexposed)) + if(!(has_anus == TRUE)) + if(target_require_anus_exposed && has_anus == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their anus needs to be exposed.")) + return FALSE + if(target_require_anus_unexposed && has_anus == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their anus needs to be unexposed.")) + return FALSE var/target_require_vagina_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_VAGINA) var/target_require_vagina_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_VAGINA) @@ -332,15 +335,16 @@ to_chat(target, span_warning("They don't have a vagina.")) return FALSE - if(!(has_vagina == TRUE) || !(target_require_vagina_exposed && target_require_vagina_unexposed)) - if(target_require_vagina_exposed && has_vagina == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their vagina needs to be exposed.")) - return FALSE - if(target_require_vagina_unexposed && has_vagina == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their vagina needs to be unexposed.")) - return FALSE + if(!(target_require_vagina_exposed && target_require_vagina_unexposed)) + if(!(has_vagina == TRUE)) + if(target_require_vagina_exposed && has_vagina == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their vagina needs to be exposed.")) + return FALSE + if(target_require_vagina_unexposed && has_vagina == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their vagina needs to be unexposed.")) + return FALSE var/target_require_breasts_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_BREASTS) var/target_require_breasts_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_BREASTS) @@ -351,15 +355,16 @@ to_chat(target, span_warning("They don't have breasts.")) return FALSE - if(!(has_breasts == TRUE) || !(target_require_breasts_exposed && target_require_breasts_unexposed)) - if(target_require_breasts_exposed && has_breasts == HAS_UNEXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their breasts need to be exposed.")) - return FALSE - if(target_require_breasts_unexposed && has_breasts == HAS_EXPOSED_GENITAL) - if(!silent) - to_chat(target, span_warning("Their breasts need to be unexposed.")) - return FALSE + if(!(target_require_breasts_exposed && target_require_breasts_unexposed)) + if(!(has_breasts == TRUE)) + if(target_require_breasts_exposed && has_breasts == HAS_UNEXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their breasts need to be exposed.")) + return FALSE + if(target_require_breasts_unexposed && has_breasts == HAS_EXPOSED_GENITAL) + if(!silent) + to_chat(target, span_warning("Their breasts need to be unexposed.")) + return FALSE var/target_require_feet_exposed = !!(required_from_target_exposed & INTERACTION_REQUIRE_FEET) var/target_require_feet_unexposed = !!(required_from_target_unexposed & INTERACTION_REQUIRE_FEET) diff --git a/tgstation.dme b/tgstation.dme index 4f02b955ee..5286a64522 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4051,6 +4051,7 @@ #include "modular_sand\code\datums\interactions\interaction_datums\lewd\nipsuck.dm" #include "modular_sand\code\datums\interactions\interaction_datums\lewd\nuts.dm" #include "modular_sand\code\datums\interactions\interaction_datums\lewd\oral.dm" +#include "modular_sand\code\datums\interactions\interaction_datums\lewd\slap.dm" #include "modular_sand\code\datums\interactions\interaction_datums\lewd\cursed\earfuck.dm" #include "modular_sand\code\datums\interactions\interaction_datums\lewd\cursed\eyefuck.dm" #include "modular_sand\code\datums\interactions\interaction_datums\lewd\self\breasts.dm" diff --git a/tgui/packages/tgui/interfaces/MobInteraction.tsx b/tgui/packages/tgui/interfaces/MobInteraction.tsx index bb0faf5a2b..caa643ae0a 100644 --- a/tgui/packages/tgui/interfaces/MobInteraction.tsx +++ b/tgui/packages/tgui/interfaces/MobInteraction.tsx @@ -328,19 +328,33 @@ export const sortInteractions = (interactions, searchText = '', data) => { & interaction.interactionFlags) : true)), // Distance filter(interaction => - interaction.maxDistance >= max_distance), + max_distance <= interaction.maxDistance), // User requirements filter(interaction => interaction.required_from_user ? !!(required_from_user & interaction.required_from_user) : true), - // User requires exposed - filter(interaction => interaction.required_from_user_exposed - ? !!(required_from_user_exposed - & interaction.required_from_user_exposed) : true), - // User requires unexposed - filter(interaction => interaction.required_from_user_unexposed - ? !!(required_from_user_unexposed - & interaction.required_from_user_unexposed) : true), + + filter(interaction => { + // User requires exposed + const exposed = !interaction.required_from_user_exposed + || ((interaction.required_from_user_exposed + & required_from_user_exposed) + === interaction.required_from_user_exposed); + // User requires unexposed + const unexposed = !interaction.required_from_user_unexposed + || ((interaction.required_from_user_unexposed + & required_from_user_unexposed) + === interaction.required_from_user_unexposed); + + if (interaction.required_from_user_exposed + && interaction.required_from_user_unexposed) { + return exposed || unexposed; + } + else { + return exposed && unexposed; + } + }), + // User required feet amount filter(interaction => interaction.user_num_feet ? (interaction.user_num_feet <= user_num_feet) : true), @@ -348,14 +362,26 @@ export const sortInteractions = (interactions, searchText = '', data) => { filter(interaction => interaction.required_from_target ? !!(required_from_target & interaction.required_from_target) : true), - // Target requires exposed - filter(interaction => interaction.required_from_target_exposed - ? !!(required_from_target_exposed - & interaction.required_from_target_exposed) : true), - // Target requires unexposed - filter(interaction => interaction.required_from_target_unexposed - ? !!(required_from_target_unexposed - & interaction.required_from_target_unexposed) : true), + filter(interaction => { + // Target requires exposed + const exposed = !interaction.required_from_target_exposed + || ((interaction.required_from_target_exposed + & required_from_target_exposed) + === interaction.required_from_target_exposed); + // Target requires unexposed + const unexposed = !interaction.required_from_target_unexposed + || ((interaction.required_from_target_unexposed + & required_from_target_unexposed) + === interaction.required_from_target_unexposed); + + if (interaction.required_from_target_exposed + && interaction.required_from_target_unexposed) { + return exposed || unexposed; + } + else { + return exposed && unexposed; + } + }), // Target required feet amount filter(interaction => interaction.target_num_feet ? (interaction.target_num_feet <= target_num_feet) : true), From 01dbd7deab5ac9a6624b1779b1931d4f1fdac039 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 16 Dec 2023 17:28:13 -0300 Subject: [PATCH 2/9] no --- modular_sand/code/datums/interactions/_interaction.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_sand/code/datums/interactions/_interaction.dm b/modular_sand/code/datums/interactions/_interaction.dm index fa91da6aeb..523df46fb2 100644 --- a/modular_sand/code/datums/interactions/_interaction.dm +++ b/modular_sand/code/datums/interactions/_interaction.dm @@ -22,7 +22,7 @@ /// The base of all interactions /datum/interaction - var/description = "Interact with them." + var/description var/simple_message var/simple_style = "notice" var/write_log_user From e8f20d073aef5075ce8fc855bb876cec5d370004 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 16 Dec 2023 17:34:34 -0300 Subject: [PATCH 3/9] fix unit tests --- code/modules/unit_tests/interactions.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/unit_tests/interactions.dm b/code/modules/unit_tests/interactions.dm index c06cae4257..fd75825bf4 100644 --- a/code/modules/unit_tests/interactions.dm +++ b/code/modules/unit_tests/interactions.dm @@ -3,7 +3,8 @@ SSinteractions.prepare_interactions() if(!SSinteractions.interactions || !length(SSinteractions.interactions)) Fail("make_interactions() was called but SSinteractions.interactions is empty.") - for(var/datum/interaction/interaction as anything in SSinteractions.interactions) + for(var/interaction_type in SSinteractions.interactions) + var/datum/interaction/interaction = SSinteractions.interactions[interaction_type] if(!interaction.description) Fail("Basetype [interaction.type] located within SSinteractions.interactions") if(interaction.required_from_user_exposed && interaction.required_from_user_unexposed) From ddd7e0a613fc00121bc8fd859360dee9316dce71 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 16 Dec 2023 18:12:56 -0300 Subject: [PATCH 4/9] ??? --- modular_sand/code/controllers/subsystem/interactions.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_sand/code/controllers/subsystem/interactions.dm b/modular_sand/code/controllers/subsystem/interactions.dm index 272a9542fa..57047c0347 100644 --- a/modular_sand/code/controllers/subsystem/interactions.dm +++ b/modular_sand/code/controllers/subsystem/interactions.dm @@ -44,7 +44,7 @@ SUBSYSTEM_DEF(interactions) // Basetype, do not create if(!initial(interaction.description)) continue - interaction = new() + interaction = new interaction() interactions["[interaction.type]"] = interaction /// Blacklisting! From 5d6bb452e8322f72ac22f887e35b35676633c9af Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sat, 16 Dec 2023 21:20:48 +0000 Subject: [PATCH 5/9] Automatic changelog generation for PR #360 [ci skip] --- html/changelogs/AutoChangeLog-pr-360.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-360.yml diff --git a/html/changelogs/AutoChangeLog-pr-360.yml b/html/changelogs/AutoChangeLog-pr-360.yml new file mode 100644 index 0000000000..d0ee9ffa37 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-360.yml @@ -0,0 +1,5 @@ +author: SandPoot +delete-after: true +changes: + - bugfix: Interactions that allow both exposed and unexposed can be done once again. + - code_imp: There are now unit tests for creating interactions incorrectly. From 673cd80cc9ec56ae0c5fe29eabee62413a44fd83 Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sat, 16 Dec 2023 21:21:48 +0000 Subject: [PATCH 6/9] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-360.yml | 5 ----- html/changelogs/archive/2023-12.yml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-360.yml diff --git a/html/changelogs/AutoChangeLog-pr-360.yml b/html/changelogs/AutoChangeLog-pr-360.yml deleted file mode 100644 index d0ee9ffa37..0000000000 --- a/html/changelogs/AutoChangeLog-pr-360.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: SandPoot -delete-after: true -changes: - - bugfix: Interactions that allow both exposed and unexposed can be done once again. - - code_imp: There are now unit tests for creating interactions incorrectly. diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index dfa79810da..0afba621c7 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -14,3 +14,7 @@ 2023-12-13: SandPoot: - tweak: Changed some interaction requirements to make more sense. +2023-12-16: + SandPoot: + - bugfix: Interactions that allow both exposed and unexposed can be done once again. + - code_imp: There are now unit tests for creating interactions incorrectly. From 90ff010193ef666e2103415b5d85afd5020be7d7 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 17 Dec 2023 00:58:39 -0300 Subject: [PATCH 7/9] quickly expands precision to make sure all is fine --- tgui/packages/tgui/interfaces/MobInteraction.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/interfaces/MobInteraction.tsx b/tgui/packages/tgui/interfaces/MobInteraction.tsx index caa643ae0a..3b3826972d 100644 --- a/tgui/packages/tgui/interfaces/MobInteraction.tsx +++ b/tgui/packages/tgui/interfaces/MobInteraction.tsx @@ -332,7 +332,8 @@ export const sortInteractions = (interactions, searchText = '', data) => { // User requirements filter(interaction => interaction.required_from_user - ? !!(required_from_user & interaction.required_from_user) : true), + ? !!((required_from_user & interaction.required_from_user) + === interaction.required_from_user) : true), filter(interaction => { // User requires exposed @@ -360,8 +361,9 @@ export const sortInteractions = (interactions, searchText = '', data) => { ? (interaction.user_num_feet <= user_num_feet) : true), // Target requirements filter(interaction => interaction.required_from_target - ? !!(required_from_target - & interaction.required_from_target) : true), + ? !!((required_from_target + & interaction.required_from_target) + === interaction.required_from_target) : true), filter(interaction => { // Target requires exposed const exposed = !interaction.required_from_target_exposed From 63ee03bfda2d3419dc018819bd16cd523be3eadd Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sun, 17 Dec 2023 04:12:25 +0000 Subject: [PATCH 8/9] Automatic changelog generation for PR #361 [ci skip] --- html/changelogs/AutoChangeLog-pr-361.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-361.yml diff --git a/html/changelogs/AutoChangeLog-pr-361.yml b/html/changelogs/AutoChangeLog-pr-361.yml new file mode 100644 index 0000000000..84621bf9dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-361.yml @@ -0,0 +1,5 @@ +author: SandPoot +delete-after: true +changes: + - bugfix: required_from_user & target variables should check your requirements and + the interaction's reqs more precisely. From 1f9c50b2452ab241f3aa4ad92100ca0f20fafb6d Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Sun, 17 Dec 2023 04:13:16 +0000 Subject: [PATCH 9/9] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-361.yml | 5 ----- html/changelogs/archive/2023-12.yml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-361.yml diff --git a/html/changelogs/AutoChangeLog-pr-361.yml b/html/changelogs/AutoChangeLog-pr-361.yml deleted file mode 100644 index 84621bf9dc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-361.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: SandPoot -delete-after: true -changes: - - bugfix: required_from_user & target variables should check your requirements and - the interaction's reqs more precisely. diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index 0afba621c7..0e2d536afc 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -18,3 +18,7 @@ SandPoot: - bugfix: Interactions that allow both exposed and unexposed can be done once again. - code_imp: There are now unit tests for creating interactions incorrectly. +2023-12-17: + SandPoot: + - bugfix: required_from_user & target variables should check your requirements and + the interaction's reqs more precisely.