From d50eca7e63f9fd3fa0b854bbf7c5f4405520ce5e Mon Sep 17 00:00:00 2001 From: "natakilar@gmail.com" Date: Mon, 16 Oct 2023 16:13:12 -0400 Subject: [PATCH 1/2] Network telecomms now saves --- mods/persistence/_persistence.dme | 2 + .../networking/machines/telecomms.dm | 38 +++++++++++++++++++ .../world_save/saved_vars/saved_misc.dm | 29 -------------- .../world_save/wrappers/_late_wrapper.dm | 2 +- .../modules/world_save/wrappers/_wrapper.dm | 2 +- .../world_save/wrappers/channel_wrapper.dm | 31 +++++++++++++++ 6 files changed, 73 insertions(+), 31 deletions(-) create mode 100644 mods/persistence/modules/modular_computers/networking/machines/telecomms.dm create mode 100644 mods/persistence/modules/world_save/wrappers/channel_wrapper.dm diff --git a/mods/persistence/_persistence.dme b/mods/persistence/_persistence.dme index 8193a6cebf7..34e903f79f0 100644 --- a/mods/persistence/_persistence.dme +++ b/mods/persistence/_persistence.dme @@ -196,6 +196,7 @@ #include "modules\modular_computers\networking\finance\money_cube.dm" #include "modules\modular_computers\networking\machines\_network_machine.dm" #include "modules\modular_computers\networking\machines\area_controller.dm" +#include "modules\modular_computers\networking\machines\telecomms.dm" #include "modules\multiz\level_data.dm" #include "modules\organs\organs.dm" #include "modules\organs\external\_external_saving.dm" @@ -293,6 +294,7 @@ #include "modules\world_save\wrappers\_wrapper.dm" #include "modules\world_save\wrappers\_wrapper_holder.dm" #include "modules\world_save\wrappers\area_wrapper.dm" +#include "modules\world_save\wrappers\channel_wrapper.dm" #include "modules\world_save\wrappers\decl_wrapper.dm" #include "modules\world_save\wrappers\escrow_holder.dm" #include "modules\world_save\wrappers\image_wrapper.dm" diff --git a/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm b/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm new file mode 100644 index 00000000000..e90fd4053b6 --- /dev/null +++ b/mods/persistence/modules/modular_computers/networking/machines/telecomms.dm @@ -0,0 +1,38 @@ +/obj/machinery/network/telecomms_hub + req_access = null + +// Channels are serialized as lists, see channel_wrapper.dm +SAVED_VAR(/obj/machinery/network/telecomms_hub, channels) +SAVED_VAR(/obj/machinery/network/telecomms_hub, overloaded_for) + +// Radio and encryption key saving. Channels are intentionally not saved - they are recovered at runtime by transmit/receive functions. +/obj/item/radio/Initialize() + // Hackiness to prevent trying to create new keys. Could be replaced with checks upstream + if(persistent_id && length(encryption_keys)) + var/list/old_encryption_keys = encryption_keys.Copy() + encryption_keys.Cut() + . = ..() + encryption_keys = old_encryption_keys + else + return ..() + +/obj/item/radio/after_deserialize() + encryption_key_capacity = max(encryption_key_capacity, length(encryption_keys)) + . = ..() + +SAVED_VAR(/obj/item/radio, cell) +SAVED_VAR(/obj/item/radio, wires) +SAVED_VAR(/obj/item/radio, panel_open) +SAVED_VAR(/obj/item/radio, encryption_keys) +SAVED_VAR(/obj/item/radio, on) +SAVED_VAR(/obj/item/radio, frequency) +SAVED_VAR(/obj/item/radio, traitor_frequency) +SAVED_VAR(/obj/item/radio, broadcasting) +SAVED_VAR(/obj/item/radio, listening) +SAVED_VAR(/obj/item/radio, analog) +SAVED_VAR(/obj/item/radio, analog_secured) + +SAVED_VAR(/obj/item/radio/beacon, code) +SAVED_VAR(/obj/item/radio/beacon, functioning) +SAVED_VAR(/obj/item/radio/intercom/locked, locked_frequency) +SAVED_VAR(/obj/item/encryptionkey, can_decrypt) //Can vary at runtime \ No newline at end of file diff --git a/mods/persistence/modules/world_save/saved_vars/saved_misc.dm b/mods/persistence/modules/world_save/saved_vars/saved_misc.dm index fe656ac8d61..21502f1c99f 100644 --- a/mods/persistence/modules/world_save/saved_vars/saved_misc.dm +++ b/mods/persistence/modules/world_save/saved_vars/saved_misc.dm @@ -711,35 +711,6 @@ SAVED_VAR(/obj/item/assembly_holder, a_right) SAVED_VAR(/obj/item/assembly_holder, special_assembly) SAVED_VAR(/obj/item/assembly_holder, master) -/////////////////////////////////////////////////////////////////////////////// -// item/radio -/////////////////////////////////////////////////////////////////////////////// - -SAVED_VAR(/obj/item/radio, cell) -SAVED_VAR(/obj/item/radio, wires) -SAVED_VAR(/obj/item/radio, panel_open) -SAVED_VAR(/obj/item/radio, encryption_keys) -SAVED_VAR(/obj/item/radio, on) -SAVED_VAR(/obj/item/radio, frequency) -SAVED_VAR(/obj/item/radio, traitor_frequency) -SAVED_VAR(/obj/item/radio, broadcasting) -SAVED_VAR(/obj/item/radio, listening) -SAVED_VAR(/obj/item/radio, analog) -SAVED_VAR(/obj/item/radio, analog_secured) - -/obj/item/radio/after_deserialize() - encryption_key_capacity = max(encryption_key_capacity, length(encryption_keys)) - . = ..() - -SAVED_VAR(/obj/item/radio/beacon, code) -SAVED_VAR(/obj/item/radio/beacon, functioning) - -SAVED_VAR(/obj/item/radio/intercom/locked, locked_frequency) - - -SAVED_VAR(/obj/item/encryptionkey, can_decrypt) //Can vary at runtime - - /////////////////////////////////////////////////////////////////////////////// // item/card /////////////////////////////////////////////////////////////////////////////// diff --git a/mods/persistence/modules/world_save/wrappers/_late_wrapper.dm b/mods/persistence/modules/world_save/wrappers/_late_wrapper.dm index 1200ca77bd8..5ea4b3994a3 100644 --- a/mods/persistence/modules/world_save/wrappers/_late_wrapper.dm +++ b/mods/persistence/modules/world_save/wrappers/_late_wrapper.dm @@ -4,7 +4,7 @@ /datum/wrapper/late -/datum/wrapper/late/on_deserialize(var/datum/object, var/serializer/curr_serializer) +/datum/wrapper/late/on_deserialize(var/serializer/curr_serializer) SSpersistence.late_wrappers |= src return null diff --git a/mods/persistence/modules/world_save/wrappers/_wrapper.dm b/mods/persistence/modules/world_save/wrappers/_wrapper.dm index 5f87669f648..8c3679a1ecc 100644 --- a/mods/persistence/modules/world_save/wrappers/_wrapper.dm +++ b/mods/persistence/modules/world_save/wrappers/_wrapper.dm @@ -3,7 +3,7 @@ var/wrapper_for // called after object is deserialized while in the serializer. Return a reference to the game data key is pointing to. -/datum/wrapper/proc/on_deserialize(var/datum/object, var/serializer/curr_serializer) +/datum/wrapper/proc/on_deserialize(var/serializer/curr_serializer) // called during serialization for custom behaviour. Assign var/key with something that can be used to restore the game data on_deserialize(). Return nothing. /datum/wrapper/proc/on_serialize(var/datum/object, var/serializer/curr_serializer) \ No newline at end of file diff --git a/mods/persistence/modules/world_save/wrappers/channel_wrapper.dm b/mods/persistence/modules/world_save/wrappers/channel_wrapper.dm new file mode 100644 index 00000000000..4e5137b9394 --- /dev/null +++ b/mods/persistence/modules/world_save/wrappers/channel_wrapper.dm @@ -0,0 +1,31 @@ +// Serializes radio channels into a list per channel, both for efficiency (flattening) and to make telecomms initialization cleaner +/datum/wrapper/radio_channel + wrapper_for = /datum/radio_channel + + var/list/channel_data + +/datum/wrapper/radio_channel/on_serialize(datum/radio_channel/channel, serializer/curr_serializer) + . = ..() + key = "[channel.name]" + + channel_data = list() + + if(!isnull(channel.name)) + channel_data["name"] = channel.name + if(!isnull(channel.key)) + channel_data["key"] = channel.key + if(!isnull(channel.frequency)) + channel_data["frequency"] = channel.frequency + if(!isnull(channel.color)) + channel_data["color"] = channel.color + if(!isnull(channel.color)) + channel_data["secured"] = channel.secured + if(!isnull(channel.span_class)) + channel_data["span_class"] = channel.span_class + if(!isnull(channel.receive_only)) + channel_data["receive_only"] = channel.receive_only + +/datum/wrapper/radio_channel/on_deserialize(datum/object, serializer/curr_serializer) + return channel_data + +SAVED_VAR(/datum/wrapper/radio_channel, channel_data) \ No newline at end of file From d143441558369976e7c987d4be4297d8f1983ec0 Mon Sep 17 00:00:00 2001 From: "natakilar@gmail.com" Date: Mon, 16 Oct 2023 16:13:28 -0400 Subject: [PATCH 2/2] Network ID interaction adjustments --- .../modular_computers/networking/accounts/id_card.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/modular_computers/networking/accounts/id_card.dm b/code/modules/modular_computers/networking/accounts/id_card.dm index ea5f9eb8ab5..87591829b5b 100644 --- a/code/modules/modular_computers/networking/accounts/id_card.dm +++ b/code/modules/modular_computers/networking/accounts/id_card.dm @@ -48,6 +48,9 @@ else return check_account +/obj/item/card/id/network/attack_self(mob/user) + ui_interact(user) + /obj/item/card/id/network/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null) var/data[0] var/login = associated_network_account["login"] @@ -116,9 +119,12 @@ var/datum/computer_network/network = D?.get_network() return network?.network_id -/obj/item/card/id/network/verb/adjust_settings() - set name = "Adjust Settings" +/obj/item/card/id/network/verb/flash_id() + set name = "Flash ID" set category = "Object" set src in usr - ui_interact(usr) \ No newline at end of file + usr.visible_message("\The [usr] shows you: [html_icon(src)] [src.name]. The assignment on the card: '[src.assignment]'.",\ + "You flash your ID card: [html_icon(src)] [src.name]. The assignment on the card: '[src.assignment]'.") + + src.add_fingerprint(usr)