From 843559859b7423046bf6a36801c6bd5e9962507a Mon Sep 17 00:00:00 2001 From: Nadyr Date: Mon, 21 Oct 2024 22:18:56 -0400 Subject: [PATCH 001/193] Ports in-round record updates --- code/game/machinery/computer/medical.dm | 10 ++ code/game/machinery/computer/security.dm | 10 ++ code/game/machinery/computer/skills.dm | 10 ++ code/modules/client/record_updator.dm | 129 ++++++++++++++++++ .../GeneralRecords/GeneralRecordsOptions.tsx | 8 ++ .../GeneralRecordsViewGeneral.tsx | 1 + .../MedicalRecords/MedicalRecordsOptions.tsx | 8 ++ .../MedicalRecordsViewMedical.tsx | 15 +- .../SecurityRecordsOptions.tsx | 8 ++ .../SecurityRecordsViewSecurity.tsx | 21 ++- vorestation.dme | 1 + 11 files changed, 214 insertions(+), 7 deletions(-) create mode 100644 code/modules/client/record_updator.dm diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 1fb04554760..22e3fb90c9a 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -296,6 +296,16 @@ active1 = general_record active2 = medical_record screen = MED_DATA_RECORD + if("sync_r") + if(active2) + set_temp(client_update_record(src,usr)) + if("edit_notes") + // The modal input in tgui is busted for this sadly... + var/new_notes = strip_html_simple(tgui_input_text(usr,"Enter new information here.","Character Preference", html_decode(active2.fields["notes"]), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(usr.Adjacent(src)) + if(new_notes != "" || tgui_alert(usr, "Are you sure you want to delete the current record's notes?", "Confirm Delete", list("Delete", "No")) == "Delete") + if(usr.Adjacent(src)) + active2.fields["notes"] = new_notes if("new") if(istype(active1, /datum/data/record) && !istype(active2, /datum/data/record)) var/datum/data/record/R = new /datum/data/record() diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 1be57d146ef..9ed92427674 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -270,6 +270,16 @@ qdel(active1) if(active2) qdel(active2) + if("sync_r") + if(active2) + set_temp(client_update_record(src,usr)) + if("edit_notes") + // The modal input in tgui is busted for this sadly... + var/new_notes = strip_html_simple(tgui_input_text(usr,"Enter new information here.","Character Preference", html_decode(active2.fields["notes"]), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(usr.Adjacent(src)) + if(new_notes != "" || tgui_alert(usr, "Are you sure you want to delete the current record's notes?", "Confirm Delete", list("Delete", "No")) == "Delete") + if(usr.Adjacent(src)) + active2.fields["notes"] = new_notes if("d_rec") var/datum/data/record/general_record = locate(params["d_rec"] || "") if(!data_core.general.Find(general_record)) diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 57524d95fd2..9be405d36dc 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -214,6 +214,16 @@ for(var/datum/data/record/R in data_core.general) qdel(R) set_temp("All employment records deleted.") + if("sync_r") + if(active1) + set_temp(client_update_record(src,active1,usr)) + if("edit_notes") + // The modal input in tgui is busted for this sadly... + var/new_notes = strip_html_simple(tgui_input_text(usr,"Enter new information here.","Character Preference", html_decode(active1.fields["notes"]), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(usr.Adjacent(src)) + if(new_notes != "" || tgui_alert(usr, "Are you sure you want to delete the current record's notes?", "Confirm Delete", list("Delete", "No")) == "Delete") + if(usr.Adjacent(src)) + active1.fields["notes"] = new_notes if("del_r") if(PDA_Manifest) PDA_Manifest.Cut() diff --git a/code/modules/client/record_updator.dm b/code/modules/client/record_updator.dm new file mode 100644 index 00000000000..de802eedcf2 --- /dev/null +++ b/code/modules/client/record_updator.dm @@ -0,0 +1,129 @@ +var/global/client_record_update_lock = FALSE + +// Manually updating records from medical console to a player's save. +/proc/get_current_mob_from_record(var/datum/data/record/active) + var/datum/transcore_db/db = SStranscore.db_by_mind_name(active.fields["name"]) + if(db) + var/datum/transhuman/mind_record/record = db.backed_up[active.fields["name"]] + if(record.mind_ref) + var/datum/mind/D = record.mind_ref + if(D.current) + var/client/C = D.current.client + if(C && C.ckey != record.ckey) + return null + return D.current + return null + + +/proc/client_update_record(var/obj/machinery/computer/COM, var/user) + if(!COM || QDELETED(COM)) + return "Invalid console" + + if(jobban_isbanned(user, "Records") ) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization denied (OOC: You are banned from editing records)" + + var/record_string = "" + var/datum/data/record/active + var/console_path = null + if(istype(COM,/obj/machinery/computer/med_data)) + var/obj/machinery/computer/med_data/MCOM = COM + active = MCOM.active2 + record_string = "medical" + console_path = /obj/machinery/computer/med_data + if(istype(COM,/obj/machinery/computer/skills)) + var/obj/machinery/computer/skills/ECOM = COM + active = ECOM.active1 + record_string = "employment" + console_path = /obj/machinery/computer/skills + if(istype(COM,/obj/machinery/computer/secure_data)) + var/obj/machinery/computer/secure_data/SCOM = COM + active = SCOM.active2 + record_string = "security" + console_path = /obj/machinery/computer/secure_data + + if(client_record_update_lock) + to_chat(user,"Update already in progress! Please wait a moment...") + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update already in progress! Please wait a moment..." + client_record_update_lock = TRUE + spawn(60 SECONDS) + client_record_update_lock = FALSE + + if(!active || !console_path) + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Record or console destroyed)" + + to_chat(user,"Update sent! Please wait for a response...") + message_admins("[user] pushed [record_string] record update to [active.fields["name"]].") + + var/mob/M = get_current_mob_from_record(active) + if(!M) + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Client mob does not exist, has no mind record, or is possesssed)" + + var/client/C = M.client + if(!C) + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Record's owner is offline)" + + var/choice = tgui_alert(M, "Your [record_string] record has been updated from the a records console by [user]. Please review the changes made to your [record_string] record. Accepting these changes will SAVE your CURRENT character slot! If your new [record_string] record has errors, it is recomended to have it corrected IC instead of editing it yourself.", "Record Updated", list("Review Changes","Refuse Update")) + if(choice == "Refuse Update") + message_admins("[active.fields["name"]] refused [record_string] record update from [user] without review.") + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Client refused without review)" + + var/datum/preferences/P = C.prefs + var/new_data = strip_html_simple(tgui_input_text(M,"Please review [user]'s changes to your [record_string] record before confirming. Confirming will SAVE your CURRENT character slot! If your new [record_string] record major errors, it is recomended to have it corrected IC instead of editing it yourself.","Character Preference", html_decode(active.fields["notes"]), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH) + if(!new_data) + message_admins("[active.fields["name"]] refused [record_string] record update from [user] with review.") + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Client refused with review)" + if(!M || !M.client || !P) + message_admins("[active.fields["name"]]'s [record_string] record could not be updated, client disconnected.") + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] buzzes!")) + playsound(COM, 'sound/machines/deniedbeep.ogg', 50, 0) + return "Update syncronization failed (OOC: Client does not exist)" + + // Update records in the consoles, remember this can happen a while after a record is closed on the console... Use cached data. + switch(console_path) + if(/obj/machinery/computer/med_data) + P.med_record = new_data + if(active) + active.fields["notes"] = new_data + if(/obj/machinery/computer/skills) + P.gen_record = new_data + if(active) + active.fields["notes"] = new_data + if(/obj/machinery/computer/secure_data) + P.sec_record = new_data + if(active) + active.fields["notes"] = new_data + + // Update player record + P.save_preferences() + P.save_character() + if(M) + to_chat(M,span_notice("Your [record_string] record for [active.fields["name"]] has been updated.")) + message_admins("[active.fields["name"]] accepted the [record_string] record update from [user].") + + // ding! + if(COM && !QDELETED(COM)) + COM.visible_message(span_notice("\The [COM] dings!")) + playsound(COM, 'sound/machines/ding.ogg', 50, 1) + + return "Record syncronized." diff --git a/tgui/packages/tgui/interfaces/GeneralRecords/GeneralRecordsOptions.tsx b/tgui/packages/tgui/interfaces/GeneralRecords/GeneralRecordsOptions.tsx index 5db9a5c321d..457294e6a03 100644 --- a/tgui/packages/tgui/interfaces/GeneralRecords/GeneralRecordsOptions.tsx +++ b/tgui/packages/tgui/interfaces/GeneralRecords/GeneralRecordsOptions.tsx @@ -21,6 +21,14 @@ export const GeneralRecordsView = (props) => {
+ {
{general.skills || 'No data found.'} + {
{general.comments && general.comments.length === 0 ? ( diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/MedicalRecordsOptions.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/MedicalRecordsOptions.tsx index 757e79b7cda..a711cdf931d 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/MedicalRecordsOptions.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/MedicalRecordsOptions.tsx @@ -36,6 +36,14 @@ export const MedicalRecordsView = (props) => {
+ { {field.value} -
+ { {field.value} - + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Robotact/index.tsx b/tgui/packages/tgui/interfaces/Robotact/index.tsx index 94b97253342..1ab5ea486aa 100644 --- a/tgui/packages/tgui/interfaces/Robotact/index.tsx +++ b/tgui/packages/tgui/interfaces/Robotact/index.tsx @@ -18,7 +18,7 @@ export const Robotact = (props) => { } return ( - + {content} ); diff --git a/tgui/packages/tgui/interfaces/Robotact/types.ts b/tgui/packages/tgui/interfaces/Robotact/types.ts index bd33676d99d..b4232ff6e43 100644 --- a/tgui/packages/tgui/interfaces/Robotact/types.ts +++ b/tgui/packages/tgui/interfaces/Robotact/types.ts @@ -31,6 +31,7 @@ export type Data = { max_health: number; light_color: string; + theme?: string; // Modules modules_static: Module[]; From 890548b14ffc69cbc3c4133aa0ec5f2671a11a12 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:07:17 +0100 Subject: [PATCH 060/193] =?UTF-8?q?=C2=B4some=20ui=20basics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../living/silicon/robot/robot_ui_module.dm | 12 +++-- tgui/packages/tgui/interfaces/RobotChoose.tsx | 52 ------------------- .../interfaces/RobotChoose/ModuleSection.tsx | 47 +++++++++++++++++ .../RobotChoose/SelectorElement.tsx | 36 +++++++++++++ .../interfaces/RobotChoose/SpriteSection.tsx | 48 +++++++++++++++++ .../tgui/interfaces/RobotChoose/index.tsx | 46 ++++++++++++++++ .../tgui/interfaces/RobotChoose/types.ts | 9 ++++ 7 files changed, 195 insertions(+), 55 deletions(-) delete mode 100644 tgui/packages/tgui/interfaces/RobotChoose.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/index.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/types.ts diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index e861cbabb84..8e8fbcb6aaf 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -15,8 +15,8 @@ var/list/modules = list() if(R.module) - modules = list(R.module) - selected_module = R.module + modules = list(R.modtype) + selected_module = R.modtype else if(LAZYLEN(R.restrict_modules_to) > 0) modules.Add(R.restrict_modules_to) @@ -55,8 +55,11 @@ to_chat(R, span_warning("Your module appears to have no sprite options. Harass a coder.")) selected_module = null return + var/list/available_sprites = list() + for(var/datum/robot_sprite/S in module_sprites) + available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites)) - data["possible_sprites"] = module_sprites + data["possible_sprites"] = available_sprites if(sprite_datum) data["sprite_datum"] = sprite_datum @@ -79,6 +82,9 @@ if(!is_borg_whitelisted(R, new_module)) return selected_module = new_module + var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) + if(!R.sprite_datum in module_sprites) + sprite_datum = null . = TRUE if("pick_icon") var/sprite = params["value"] diff --git a/tgui/packages/tgui/interfaces/RobotChoose.tsx b/tgui/packages/tgui/interfaces/RobotChoose.tsx deleted file mode 100644 index 670fba547cd..00000000000 --- a/tgui/packages/tgui/interfaces/RobotChoose.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useBackend } from 'tgui/backend'; -import { Window } from 'tgui/layouts'; -import { Button, Dropdown, Stack } from 'tgui-core/components'; - -type Data = { - possible_modules: string[]; - possible_sprites: string[]; - theme?: string; - selected_module?: string; - sprite_datum?: string; -}; - -export const RobotChoose = (props) => { - const { act, data } = useBackend(); - - const { - possible_modules, - possible_sprites, - selected_module, - sprite_datum, - theme, - } = data; - - return ( - - - - - act('pick_module', { value })} - selected={selected_module} - /> - - - act('pick_icon', { value })} - selected={sprite_datum} - /> - - - - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx new file mode 100644 index 00000000000..2a7fafc3718 --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx @@ -0,0 +1,47 @@ +import { createSearch } from 'common/string'; +import { useState } from 'react'; +import { Input, Section, Stack } from 'tgui-core/components'; + +import { SelectorElement } from './SelectorElement'; + +export const ModuleSection = (props: { + title: string; + sortable?: string[]; + selected?: string; +}) => { + const { title, sortable, selected } = props; + + const [searchText, setSearchText] = useState(''); + + const searcher = createSearch(searchText, (element: string) => { + return element; + }); + + const filtered = sortable?.filter(searcher); + + return ( +
+ + setSearchText(value)} + /> + + + + {filtered && + filtered.map((filter) => ( + + ))} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx new file mode 100644 index 00000000000..3335fa8192d --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -0,0 +1,36 @@ +import { useBackend } from 'tgui/backend'; +import { Button, Flex, Icon, Stack } from 'tgui-core/components'; + +export const SelectorElement = (props: { + option: string; + action: string; + selected?: string; + belly?: boolean; +}) => { + const { act } = useBackend(); + const { option, action, selected, belly } = props; + + return ( + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx new file mode 100644 index 00000000000..7c8782aa231 --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -0,0 +1,48 @@ +import { createSearch } from 'common/string'; +import { useState } from 'react'; +import { Input, Section, Stack } from 'tgui-core/components'; + +import { SelectorElement } from './SelectorElement'; +import { spriteOption } from './types'; + +export const SpriteSection = (props: { + title: string; + sortable?: { sprite: string; belly: boolean }[]; + selected?: string; +}) => { + const { title, sortable, selected } = props; + + const [searchText, setSearchText] = useState(''); + + const searcher = createSearch(searchText, (element: spriteOption) => { + return element.sprite; + }); + + const filtered = sortable?.filter(searcher); + return ( +
+ + setSearchText(value)} + /> + + + + {filtered && + filtered.map((filter) => ( + + ))} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx new file mode 100644 index 00000000000..fcb6e5c408d --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -0,0 +1,46 @@ +import { useBackend } from 'tgui/backend'; +import { Window } from 'tgui/layouts'; +import { Button, Stack } from 'tgui-core/components'; + +import { ModuleSection } from './ModuleSection'; +import { SpriteSection } from './SpriteSection'; +import { Data } from './types'; + +export const RobotChoose = (props) => { + const { act, data } = useBackend(); + + const { + possible_modules, + possible_sprites, + selected_module, + sprite_datum, + theme, + } = data; + + return ( + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts new file mode 100644 index 00000000000..ac06afe56de --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -0,0 +1,9 @@ +export type Data = { + possible_modules: string[]; + possible_sprites?: spriteOption[]; + theme?: string; + selected_module?: string; + sprite_datum?: string; +}; + +export type spriteOption = { sprite: string; belly: boolean }; From 9b24439eac848a586e327d6e84873db1838202b7 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:18:05 +0100 Subject: [PATCH 061/193] . --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 8e8fbcb6aaf..8f2e4bbe93c 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -83,7 +83,7 @@ return selected_module = new_module var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!R.sprite_datum in module_sprites) + if(!sprite_datum in module_sprites) sprite_datum = null . = TRUE if("pick_icon") From 6b88488c55d165facbc567474b37702d234df9ad Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:10:29 +0100 Subject: [PATCH 062/193] divide by sprite type --- .../living/silicon/robot/robot_ui_module.dm | 7 ++- .../RobotChoose/SelectorElement.tsx | 1 - .../interfaces/RobotChoose/SpriteSection.tsx | 50 +++++++++++++++---- .../tgui/interfaces/RobotChoose/functions.ts | 47 +++++++++++++++++ .../tgui/interfaces/RobotChoose/types.ts | 2 +- 5 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/functions.ts diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 8f2e4bbe93c..7ea6049d0ee 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -57,7 +57,12 @@ return var/list/available_sprites = list() for(var/datum/robot_sprite/S in module_sprites) - available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites)) + var/model_type = "def" + if(istype(S, /datum/robot_sprite/dogborg)) + model_type = "wide" + if(istype(S, /datum/robot_sprite/dogborg/tall)) + model_type = "tall" + available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites, "type" = model_type)) data["possible_sprites"] = available_sprites if(sprite_datum) diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx index 3335fa8192d..d1beda36d0f 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -15,7 +15,6 @@ export const SelectorElement = (props: { + } + > + {!!sprite && !!module && ( + <> + + + + + + + + + + + + + + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx index 2a7fafc3718..c90dbbe7be5 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx @@ -31,7 +31,7 @@ export const ModuleSection = (props: { - {filtered && + {!!filtered && filtered.map((filter) => ( - {' '} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index 31fb410700d..13cba8fc052 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -63,7 +63,7 @@ export const SpriteSection = (props: { - {filtered && + {!!filtered && filtered.map((filter) => ( { - const { act, data } = useBackend(); + const { data } = useBackend(); const { possible_modules, @@ -31,14 +32,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - - - + From b09bdf0397c9ce8c3420dd97262342a61c28a5a9 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:21:24 +0100 Subject: [PATCH 066/193] . --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 5dc30cfdbcf..6037834bf14 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -92,7 +92,7 @@ return selected_module = new_module var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!sprite_datum in module_sprites) + if(!(sprite_datum in module_sprites)) sprite_datum = null . = TRUE if("pick_icon") From b563c08d04b2efe32cf86561c91125384701b5d9 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:31:32 +0100 Subject: [PATCH 067/193] . --- code/modules/asset_cache/asset_list_items.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index c2296302211..699e48e99cf 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -445,7 +445,6 @@ for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) if(!S.name) continue - to_world("[S.name]]") var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) From e6e6449c79b8ea6580b26a207d3eea2ea3ae1814 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:25:24 +0100 Subject: [PATCH 068/193] we only need out own asset --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 6037834bf14..435c5241460 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -10,7 +10,9 @@ /datum/tgui_module/robot_ui_module/ui_assets(mob/user) - . += get_asset_datum(/datum/asset/spritesheet/robot_icons) + return list( + get_asset_datum(/datum/asset/spritesheet/robot_icons) + ) /datum/tgui_module/robot_ui_module/tgui_static_data() var/list/data = ..() From bbff768a4650bc2309775a1df0102fd2aafee215 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:27:51 +0100 Subject: [PATCH 069/193] we need sprite and module for it anyway --- code/modules/asset_cache/asset_list_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 699e48e99cf..911dd62fb06 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name) + if(!S.name || !S.module_type) continue var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) From 1ca37e1ad73ee9c317dbf8f4be1fa38c105600b4 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 02:05:08 +0100 Subject: [PATCH 070/193] some Ui things --- code/_helpers/text.dm | 5 +++++ code/modules/asset_cache/asset_list_items.dm | 11 ++++++----- .../mob/living/silicon/robot/robot_ui_module.dm | 4 +++- .../tgui/interfaces/RobotChoose/IconSection.tsx | 14 +++++++------- .../interfaces/RobotChoose/SelectorElement.tsx | 2 +- .../tgui/interfaces/RobotChoose/SpriteSection.tsx | 2 +- .../packages/tgui/interfaces/RobotChoose/index.tsx | 3 ++- tgui/packages/tgui/interfaces/RobotChoose/types.ts | 3 ++- 8 files changed, 27 insertions(+), 17 deletions(-) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 520b98d39ad..3357116d308 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -620,3 +620,8 @@ return json_decode(data) catch return null + +/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts +/proc/sanitize_css_class_name(name) + var/static/regex/regex = new(@"[^a-zA-Z0-9]","g") + return replacetext(name, regex, "") diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 911dd62fb06..b0dc6223e6b 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name || !S.module_type) + if(!S.name) continue var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) @@ -461,10 +461,11 @@ var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) - Insert(S.module_type + S.name + "_S", I_S) - Insert(S.module_type + S.name + "_N", I_N) - Insert(S.module_type + S.name + "_W", I_W) - Insert(S.module_type + S.name + "_E", I_E) + var/imgid = sanitize_css_class_name("[S.type]") + Insert(imgid + "_S", I_S) + Insert(imgid + "_N", I_N) + Insert(imgid + "_W", I_W) + Insert(imgid + "_E", I_E) //Cloning pod sprites for UIs diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 435c5241460..1c3973d5dc6 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -71,8 +71,10 @@ available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites, "type" = model_type)) data["possible_sprites"] = available_sprites + data["sprite_datum"] = sprite_datum + data["asset"] = null if(sprite_datum) - data["sprite_datum"] = sprite_datum + data["asset"] = sanitize_css_class_name("[sprite_datum.type]") return data diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index f066f1b5071..8f18137ea19 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -2,9 +2,9 @@ import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; import { Button, Image, Section, Stack } from 'tgui-core/components'; -export const IconSection = (props: { module?: string; sprite?: string }) => { +export const IconSection = (props: { sprite?: string | null }) => { const { act } = useBackend(); - const { module, sprite } = props; + const { sprite } = props; return (
{ } > - {!!sprite && !!module && ( + {!!sprite && ( <> { { { { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index 13cba8fc052..b9906e252e7 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -7,8 +7,8 @@ import { spriteOption } from './types'; export const SpriteSection = (props: { title: string; + selected?: string | null; sortable?: spriteOption[]; - selected?: string; }) => { const { title, sortable, selected } = props; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 999b0c687fb..3f04b68e772 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,6 +16,7 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, + asset, } = data; return ( @@ -32,7 +33,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 1fa9774eb9a..60bab5ac9de 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -3,7 +3,8 @@ export type Data = { possible_sprites?: spriteOption[]; theme?: string; selected_module?: string; - sprite_datum?: string; + sprite_datum?: string | null; + asset?: string | null; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From f80786eb9d9b72ef4fb19e5ea1872a73ed97d6a6 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 02:38:48 +0100 Subject: [PATCH 071/193] getting there, thanks Shadow --- code/modules/asset_cache/asset_list_items.dm | 16 ++++---- .../living/silicon/robot/robot_ui_module.dm | 6 ++- .../interfaces/RobotChoose/IconSection.tsx | 41 ++++++------------- .../tgui/interfaces/RobotChoose/index.tsx | 5 ++- .../tgui/interfaces/RobotChoose/types.ts | 3 +- 5 files changed, 29 insertions(+), 42 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index b0dc6223e6b..09cb6d2af95 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -445,16 +445,16 @@ for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) if(!S.name) continue - var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) + var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) - if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) if(I_NE) I_N.Blend(I_NE, ICON_OVERLAY) + var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + if(I_SE) + I_S.Blend(I_SE, ICON_OVERLAY) var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) if(I_WE) I_W.Blend(I_WE, ICON_OVERLAY) @@ -462,10 +462,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") - Insert(imgid + "_S", I_S) - Insert(imgid + "_N", I_N) - Insert(imgid + "_W", I_W) - Insert(imgid + "_E", I_E) + Insert(imgid + "N", I_N) + Insert(imgid + "S", I_S) + Insert(imgid + "W", I_W) + Insert(imgid + "E", I_E) //Cloning pod sprites for UIs diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 1c3973d5dc6..1090c527140 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -48,6 +48,7 @@ var/list/data = ..() var/mob/living/silicon/robot/R = host + var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) if(selected_module) data["selected_module"] = selected_module @@ -72,9 +73,10 @@ data["possible_sprites"] = available_sprites data["sprite_datum"] = sprite_datum - data["asset"] = null + data["sprite_datum_class"] = null if(sprite_datum) - data["asset"] = sanitize_css_class_name("[sprite_datum.type]") + data["sprite_datum_class"] = sanitize_css_class_name("[sprite_datum.type]") + data["sprite_datum_size"] = spritesheet.icon_size_id(data["sprite_datum_class"] + "S") // just get the south icon's size, the rest will be the same return data diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 8f18137ea19..ac61e464a13 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,10 +1,13 @@ -import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; -import { Button, Image, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Section, Stack } from 'tgui-core/components'; +import { classes } from 'tgui-core/react'; -export const IconSection = (props: { sprite?: string | null }) => { +export const IconSection = (props: { + sprite?: string | null; + size?: string; +}) => { const { act } = useBackend(); - const { sprite } = props; + const { sprite, size } = props; return (
{ } > - {!!sprite && ( + {!!sprite && !!size && ( <> - + - + - + - + )} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 3f04b68e772..e3fe8f5a0f9 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,7 +16,8 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, - asset, + sprite_datum_class, + sprite_datum_size, } = data; return ( @@ -33,7 +34,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 60bab5ac9de..9f5f425e9d6 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -4,7 +4,8 @@ export type Data = { theme?: string; selected_module?: string; sprite_datum?: string | null; - asset?: string | null; + sprite_datum_class?: string | null; + sprite_datum_size?: string; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From 9157d163bc1b25c8fa5fa194f632d9fec114d816 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 03:23:43 +0100 Subject: [PATCH 072/193] some styling --- code/modules/asset_cache/asset_list_items.dm | 4 +++ .../living/silicon/robot/robot_ui_module.dm | 1 + .../interfaces/RobotChoose/IconSection.tsx | 36 +++++++++++++++---- .../tgui/interfaces/RobotChoose/types.ts | 2 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 09cb6d2af95..88211f7a4dc 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -462,6 +462,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") + I_N.Scale(120,120) + I_S.Scale(120,120) + I_W.Scale(120,120) + I_E.Scale(120,120) Insert(imgid + "N", I_N) Insert(imgid + "S", I_S) Insert(imgid + "W", I_W) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 1090c527140..78b9c592e40 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -74,6 +74,7 @@ data["possible_sprites"] = available_sprites data["sprite_datum"] = sprite_datum data["sprite_datum_class"] = null + data["sprite_datum_size"] = null if(sprite_datum) data["sprite_datum_class"] = sanitize_css_class_name("[sprite_datum.type]") data["sprite_datum_size"] = spritesheet.icon_size_id(data["sprite_datum_class"] + "S") // just get the south icon's size, the rest will be the same diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index ac61e464a13..20a03b5cd09 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,10 +1,10 @@ import { useBackend } from 'tgui/backend'; -import { Box, Button, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Flex, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; export const IconSection = (props: { sprite?: string | null; - size?: string; + size?: string | null; }) => { const { act } = useBackend(); const { sprite, size } = props; @@ -24,16 +24,40 @@ export const IconSection = (props: { {!!sprite && !!size && ( <> - + + + + + + + - + + + + + + + - + + + + + + + - + + + + + + + )} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 9f5f425e9d6..18b57f6ce0d 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -5,7 +5,7 @@ export type Data = { selected_module?: string; sprite_datum?: string | null; sprite_datum_class?: string | null; - sprite_datum_size?: string; + sprite_datum_size?: string | null; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From d2bb281b45a1d0e3b243a5345f8eb17b2cfff317 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 03:58:53 +0100 Subject: [PATCH 073/193] fix --- code/modules/asset_cache/asset_list_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 88211f7a4dc..7e268c77736 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name) + if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck continue var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) From acb6f568d5ce8c1343573391dfa15e39ffe3da99 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 04:03:41 +0100 Subject: [PATCH 074/193] ensure eyes --- code/modules/asset_cache/asset_list_items.dm | 28 +++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 7e268c77736..54be950ed54 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -449,18 +449,22 @@ var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) - var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) - if(I_NE) - I_N.Blend(I_NE, ICON_OVERLAY) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) - if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) - var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) - if(I_WE) - I_W.Blend(I_WE, ICON_OVERLAY) - var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) - if(I_EE) - I_E.Blend(I_EE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) + if(I_NE) + I_N.Blend(I_NE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + if(I_SE) + I_S.Blend(I_SE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) + if(I_WE) + I_W.Blend(I_WE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) + if(I_EE) + I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") I_N.Scale(120,120) I_S.Scale(120,120) From ba9b3e3676abaf83021962a42f133d40bcd0818f Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 08:53:52 +0100 Subject: [PATCH 075/193] include renaming --- code/game/objects/items/antag_spawners.dm | 1 - code/game/objects/items/robot/robot_parts.dm | 1 - code/game/objects/structures/ghost_pods/silicon.dm | 2 -- .../objects/structures/ghost_pods/silicon_vr.dm | 1 - code/modules/mob/living/silicon/robot/robot.dm | 13 +++++-------- .../mob/living/silicon/robot/robot_ui_module.dm | 11 +++++++++++ code/modules/mob/transform_procs.dm | 1 - .../tgui/interfaces/RobotChoose/IconSection.tsx | 13 +++++++++++-- tgui/packages/tgui/interfaces/RobotChoose/index.tsx | 7 ++++++- tgui/packages/tgui/interfaces/RobotChoose/types.ts | 1 + 10 files changed, 34 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/antag_spawners.dm b/code/game/objects/items/antag_spawners.dm index 8371f5b0175..28817531895 100644 --- a/code/game/objects/items/antag_spawners.dm +++ b/code/game/objects/items/antag_spawners.dm @@ -118,7 +118,6 @@ to speak with your team, and learn what their plan is for today.")) R.key = C.key -// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed. spawn(1) mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 32af47b31af..2667b9d3f66 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -225,7 +225,6 @@ feedback_inc("cyborg_birth",1) callHook("borgify", list(O)) - O.namepick() qdel(src) else diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm index 64ac8f5674b..4f50784aed2 100644 --- a/code/game/objects/structures/ghost_pods/silicon.dm +++ b/code/game/objects/structures/ghost_pods/silicon.dm @@ -31,7 +31,6 @@ from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") ..() @@ -57,7 +56,6 @@ definiton of 'your gravesite' is where your pod is.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() ..() /obj/structure/ghost_pod/ghost_activated/swarm_drone diff --git a/code/game/objects/structures/ghost_pods/silicon_vr.dm b/code/game/objects/structures/ghost_pods/silicon_vr.dm index cfc3b781d2f..1039349f2e1 100644 --- a/code/game/objects/structures/ghost_pods/silicon_vr.dm +++ b/code/game/objects/structures/ghost_pods/silicon_vr.dm @@ -21,7 +21,6 @@ from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") used = TRUE return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index cf978597b2f..28e680a0b76 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -407,15 +407,12 @@ to_chat(usr, "You can't pick another custom name. [isshell(src) ? "" : "Go ask for a name change."]") return 0 - spawn(0) - var/newname - newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) - if (newname) - custom_name = newname - sprite_name = newname + var/newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) + if (newname) + custom_name = newname + sprite_name = newname - updatename() - update_icon() + updatename() /mob/living/silicon/robot/verb/extra_customization() set name = "Customize Appearance" diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 78b9c592e40..883ad8c22c9 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -3,6 +3,7 @@ name = "Robot Module Configurator" tgui_id = "RobotChoose" var/selected_module + var/newName var/datum/robot_sprite/sprite_datum /datum/tgui_module/robot_ui_module/tgui_state(mob/user) @@ -50,6 +51,8 @@ var/mob/living/silicon/robot/R = host var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + data["currentName"] = newName ? newName : R.name + if(selected_module) data["selected_module"] = selected_module if(!SSrobot_sprites) @@ -112,7 +115,15 @@ sprite_datum = S break . = TRUE + if("rename") + var/name = params["value"] + if(name) + newName = sanitizeSafe(name, MAX_NAME_LEN) if("confirm") + if(!R.custom_name) + if (newName) + R.custom_name = newName + R.sprite_name = newName R.icon_selected = 1 var/module_type = robot_modules[selected_module] R.modtype = selected_module diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a686e35de7b..5d018586f1d 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -190,7 +190,6 @@ O.custom_speech_bubble = B.custom_speech_bubble callHook("borgify", list(O)) - O.namepick() spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned qdel(src) diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 20a03b5cd09..5426dac0c15 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,13 +1,14 @@ import { useBackend } from 'tgui/backend'; -import { Box, Button, Flex, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Flex, Input, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; export const IconSection = (props: { + currentName: string; sprite?: string | null; size?: string | null; }) => { const { act } = useBackend(); - const { sprite, size } = props; + const { currentName, sprite, size } = props; return (
} > + + act('rename', { value })} + maxLength={52} + /> + {!!sprite && !!size && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index e3fe8f5a0f9..50288a56a69 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,6 +16,7 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, + currentName, sprite_datum_class, sprite_datum_size, } = data; @@ -34,7 +35,11 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 18b57f6ce0d..4febf2232a6 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -1,6 +1,7 @@ export type Data = { possible_modules: string[]; possible_sprites?: spriteOption[]; + currentName: string; theme?: string; selected_module?: string; sprite_datum?: string | null; From dde2880e50f8fb26f73839eab29f979aa7e87755 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:52:39 +0100 Subject: [PATCH 076/193] lock state --- code/modules/asset_cache/asset_list_items.dm | 8 ++++---- code/modules/mob/living/silicon/robot/robot.dm | 6 ++++-- .../mob/living/silicon/robot/robot_ui_module.dm | 11 +++++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 54be950ed54..564b0879488 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -466,10 +466,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") - I_N.Scale(120,120) - I_S.Scale(120,120) - I_W.Scale(120,120) - I_E.Scale(120,120) + I_N.Scale(120, 120) + I_S.Scale(120, 120) + I_W.Scale(120, 120) + I_E.Scale(120, 120) Insert(imgid + "N", I_N) Insert(imgid + "S", I_S) Insert(imgid + "W", I_W) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 28e680a0b76..7b095cdc495 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -47,6 +47,7 @@ var/obj/screen/robot_modules_background var/ui_theme + var/selecting_module = FALSE //3 Modules can be activated at any one time. var/obj/item/robot_module/module = null @@ -345,8 +346,9 @@ sprite_datum = module_sprites[1] sprite_datum.do_equipment_glamour(module) return - var/datum/tgui_module/robot_ui_module/ui = new(src) - ui.tgui_interact(src) + if(!selecting_module) + var/datum/tgui_module/robot_ui_module/ui = new(src) + ui.tgui_interact(src) /mob/living/silicon/robot/proc/update_braintype() if(istype(mmi, /obj/item/mmi/digital/posibrain)) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 883ad8c22c9..6b1ea6b2a6e 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -9,6 +9,17 @@ /datum/tgui_module/robot_ui_module/tgui_state(mob/user) return GLOB.tgui_self_state +/datum/tgui_module/robot_ui_module/tgui_close(mob/user) + . = ..() + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.selecting_module = FALSE + +/datum/tgui_module/robot_ui_module/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + . = ..() + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.selecting_module = TRUE /datum/tgui_module/robot_ui_module/ui_assets(mob/user) return list( From fbb720a66d4ffbce2470f723cb426d41052f89b6 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:14:05 +0100 Subject: [PATCH 077/193] modify robot to spritesheet --- code/modules/admin/modify_robot.dm | 20 +++++++++------ .../ModifyRobotTabs/ModifyRobotComponent.tsx | 24 ++++++++++-------- .../ModifyRobotTabs/ModifyRobotModules.tsx | 25 +++++++++++-------- .../ModifyRobotTabs/ModifyRobotRadio.tsx | 21 ++++++++-------- .../ModifyRobotTabs/ModifyRobotUpgrades.tsx | 21 ++++++++-------- .../tgui/interfaces/ModifyRobot/types.ts | 9 +++---- 6 files changed, 67 insertions(+), 53 deletions(-) diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm index f2847943f35..64f486824d7 100644 --- a/code/modules/admin/modify_robot.dm +++ b/code/modules/admin/modify_robot.dm @@ -43,9 +43,16 @@ qdel(source) . = ..() +/datum/eventkit/modify_robot/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/robot_icons) + ) + /datum/eventkit/modify_robot/tgui_data(mob/user) . = list() // Target section for general data + var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + if(target) .["target"] = list() .["target"]["name"] = target.name @@ -62,10 +69,8 @@ // Target section for options once a module has been selected if(target.module) .["target"]["active"] = target.icon_selected - .["target"]["front"] = icon2base64(get_flat_icon(target,dir=SOUTH,no_anim=TRUE)) - .["target"]["side"] = icon2base64(get_flat_icon(target,dir=WEST,no_anim=TRUE)) - .["target"]["side_alt"] = icon2base64(get_flat_icon(target,dir=EAST,no_anim=TRUE)) - .["target"]["back"] = icon2base64(get_flat_icon(target,dir=NORTH,no_anim=TRUE)) + .["target"]["sprite"] = sanitize_css_class_name("[target.sprite_datum.type]") + .["target"]["sprite_size"] = spritesheet.icon_size_id(.["target"]["sprite"] + "S") .["target"]["modules"] = get_target_items(user) var/list/module_options = list() for(var/module in robot_modules) @@ -110,7 +115,7 @@ .["access_options"] = access_options // Section for source data for the module we might want to salvage if(source) - .["source"] += get_module_source(user) + .["source"] += get_module_source(user, spritesheet) var/list/all_robots = list() for(var/mob/living/silicon/robot/R in silicon_mob_list) if(!R.loc) @@ -573,10 +578,11 @@ target_items += list(list("name" = item.name, "ref" = "\ref[item]", "icon" = icon2html(item, user, sourceonly=TRUE), "desc" = item.desc)) return target_items -/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user) +/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user, var/datum/asset/spritesheet/robot_icons/spritesheet) var/list/source_list = list() source_list["model"] = source.module - source_list["front"] = icon2base64(get_flat_icon(source,dir=SOUTH,no_anim=TRUE)) + source_list["sprite"] = sanitize_css_class_name("[source.sprite_datum.type]") + source_list["sprite_size"] = spritesheet.icon_size_id(source_list["sprite"] + "S") var/list/source_items = list() for(var/obj/item in (source.module.modules | source.module.emag)) var/exists diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx index 293db7da7de..165b95af2e7 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx @@ -2,16 +2,17 @@ import { capitalize } from 'common/string'; import { useState } from 'react'; import { useBackend } from 'tgui/backend'; import { + Box, Button, Divider, Flex, Icon, - Image, Input, Section, Stack, Tabs, } from 'tgui/components'; +import { classes } from 'tgui-core/react'; import { NoSpriteWarning } from '../components'; import { @@ -163,15 +164,18 @@ export const ModifyRobotComponent = (props: { - + + + + + + + diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx index 045025ccd56..85ad5a6da4c 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx @@ -13,6 +13,7 @@ import { Section, Stack, } from 'tgui/components'; +import { classes } from 'tgui-core/react'; import { NoSpriteWarning } from '../components'; import { prepareSearch } from '../functions'; @@ -47,7 +48,8 @@ export const ModifyRobotModules = (props: { /> {!!source && ( - + + + + + + + { /> - + + + + + + + { /> - + + + + + + + Date: Mon, 11 Nov 2024 10:26:17 +0100 Subject: [PATCH 078/193] returns and ui state --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 6b1ea6b2a6e..91cd796c5a0 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -17,7 +17,7 @@ /datum/tgui_module/robot_ui_module/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) . = ..() - if(isrobot(user)) + if(isrobot(user) && ui) var/mob/living/silicon/robot/R = user R.selecting_module = TRUE @@ -130,6 +130,7 @@ var/name = params["value"] if(name) newName = sanitizeSafe(name, MAX_NAME_LEN) + . = TRUE if("confirm") if(!R.custom_name) if (newName) @@ -160,3 +161,4 @@ R.sprite_datum.do_equipment_glamour(R.module) to_chat(R, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) close_ui() + . = TRUE From ea8ca79712550af533f7a8989d69b42208d19d88 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:47:29 +0100 Subject: [PATCH 079/193] update --- .../living/silicon/robot/robot_ui_module.dm | 1 + .../interfaces/RobotChoose/IconSection.tsx | 27 ++++++++++++++----- .../RobotChoose/SelectorElement.tsx | 2 +- .../interfaces/RobotChoose/SpriteSection.tsx | 8 +++--- .../tgui/interfaces/RobotChoose/functions.ts | 4 +-- .../tgui/interfaces/RobotChoose/index.tsx | 2 ++ .../tgui/interfaces/RobotChoose/types.ts | 1 + 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 91cd796c5a0..7d37eca48f6 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -63,6 +63,7 @@ var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) data["currentName"] = newName ? newName : R.name + data["isDefaultName"] = !newName if(selected_module) data["selected_module"] = selected_module diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 5426dac0c15..3fd39c36e1a 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -2,13 +2,16 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, Flex, Input, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; +import { Tooltip } from '../../components'; + export const IconSection = (props: { currentName: string; + isDefaultName: boolean; sprite?: string | null; size?: string | null; }) => { const { act } = useBackend(); - const { currentName, sprite, size } = props; + const { currentName, isDefaultName, sprite, size } = props; return (
- act('rename', { value })} - maxLength={52} - /> + + + Name: + + + + act('rename', { value })} + maxLength={52} + textColor={isDefaultName ? 'red' : undefined} + /> + + + {!!sprite && !!size && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx index 7da0a1ad325..3279ce78829 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -19,7 +19,7 @@ export const SelectorElement = (props: { > {option} - {belly && ( + {!!belly && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index b9906e252e7..d287792d025 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -14,13 +14,13 @@ export const SpriteSection = (props: { const [searchText, setSearchText] = useState(''); const [includeDefault, setIncludeDefault] = useState(false); - const [includeDog, setInclideDog] = useState(false); + const [includeWide, setInclideDog] = useState(false); const [includeTall, setIncludeTall] = useState(false); const filtered = robotSpriteSearcher( searchText, includeDefault, - includeDog, + includeWide, includeTall, sortable, ); @@ -39,8 +39,8 @@ export const SpriteSection = (props: { Def setInclideDog(!includeDog)} + checked={includeWide} + onClick={() => setInclideDog(!includeWide)} > Wide diff --git a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts index 81b0688ad8e..f42d00d83c2 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts @@ -7,7 +7,7 @@ import { spriteOption } from './types'; export function robotSpriteSearcher( searchText: string, includeDefault: boolean, - includeDog: boolean, + includeWide: boolean, includeTall: boolean, sprites?: spriteOption[], ): spriteOption[] { @@ -19,7 +19,7 @@ export function robotSpriteSearcher( if (includeDefault) { subtypes.push('def'); } - if (includeDog) { + if (includeWide) { subtypes.push('wide'); } if (includeTall) { diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 50288a56a69..91d8dcb7d57 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -17,6 +17,7 @@ export const RobotChoose = (props) => { sprite_datum, theme, currentName, + isDefaultName, sprite_datum_class, sprite_datum_size, } = data; @@ -37,6 +38,7 @@ export const RobotChoose = (props) => { /> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 4febf2232a6..06d691c5893 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -2,6 +2,7 @@ export type Data = { possible_modules: string[]; possible_sprites?: spriteOption[]; currentName: string; + isDefaultName: boolean; theme?: string; selected_module?: string; sprite_datum?: string | null; From 455da0a4315e8d21481b3de806ab65422cd9ffec Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:08:31 +0100 Subject: [PATCH 080/193] fix ag janitor --- .../living/silicon/robot/robot_ui_module.dm | 8 ++++++-- icons/mob/robot/janitor.dmi | Bin 83218 -> 73403 bytes 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 7d37eca48f6..74c6ad4cda7 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -113,9 +113,13 @@ if(!is_borg_whitelisted(R, new_module)) return selected_module = new_module + var/new_datum var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!(sprite_datum in module_sprites)) - sprite_datum = null + for(var/datum/robot_sprite/S in module_sprites) + if(S.name == sprite_datum.name) + new_datum = S + break + sprite_datum = new_datum . = TRUE if("pick_icon") var/sprite = params["value"] diff --git a/icons/mob/robot/janitor.dmi b/icons/mob/robot/janitor.dmi index 7410b353a75514c1409b0b6109aee0dc6264d34a..3dbaa27a420e85e275ecd9be76fc98b9d7ef21c7 100644 GIT binary patch literal 73403 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 UlAf?)wgiElPMpk=Q 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 From a411368c80c34b4ed3288ccc988bf82420dc3683 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:50:04 +0100 Subject: [PATCH 081/193] theme should always be returned --- code/modules/mob/living/silicon/robot/robot_ui.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui.dm b/code/modules/mob/living/silicon/robot/robot_ui.dm index 7499fb198ea..11027cc20da 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui.dm @@ -52,6 +52,10 @@ var/mob/living/silicon/robot/R = host data["module_name"] = R.module ? "[R.module]" : null + if(R.emagged) + data["theme"] = "syndicate" + else if (R.ui_theme) + data["theme"] = R.ui_theme if(!R.module) return data @@ -63,10 +67,6 @@ data["health"] = R.health data["max_health"] = R.getMaxHealth() data["light_color"] = R.robot_light_col - if(R.emagged) - data["theme"] = "syndicate" - else if (R.ui_theme) - data["theme"] = R.ui_theme data["weapon_lock"] = R.weapon_lock From e5b47c5e49433f29a950f1f41da7b1b51acecdc2 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:51:44 +0100 Subject: [PATCH 082/193] less numbers --- code/modules/mob/living/silicon/robot/robot.dm | 4 ++-- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7b095cdc495..f3161e0e090 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -31,7 +31,7 @@ //Icon stuff var/datum/robot_sprite/sprite_datum // Sprite datum, holding all our sprite data - var/icon_selected = 0 // If icon selection has been completed yet + var/icon_selected = FALSE // If icon selection has been completed yet var/list/sprite_extra_customization = list() var/rest_style = "Default" var/notransform @@ -766,7 +766,7 @@ notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name) module.Reset(src) qdel(module) - icon_selected = 0 + icon_selected = FALSE module = null updatename("Default") has_recoloured = FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 74c6ad4cda7..25b199b47c0 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -141,7 +141,7 @@ if (newName) R.custom_name = newName R.sprite_name = newName - R.icon_selected = 1 + R.icon_selected = TRUE var/module_type = robot_modules[selected_module] R.modtype = selected_module R.module = new module_type(R) From d2b4730c314d46b93b4650b1d2338386d7856c9d Mon Sep 17 00:00:00 2001 From: Guti <32563288+TheCaramelion@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:59:22 +0100 Subject: [PATCH 083/193] Virology Patch 2 (#16592) * Fixes * Fix * Macrophage * oops --- code/datums/diseases/_MobProcs.dm | 26 ++++++++++-------- code/datums/diseases/advance/advance.dm | 18 ++++++------ .../diseases/advance/symptoms/macrophage.dm | 2 +- .../simple_mob/subtypes/vore/macrophage.dm | 8 +++++- icons/mob/macrophage.dmi | Bin 4509 -> 4613 bytes 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index a24fa9264f8..b664a349a61 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -177,19 +177,21 @@ if(!is_admin()) return FALSE - var/datum/disease/D = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease)) - var/mob/living/carbon/human/H = null + var/disease = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease)) + var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", human_mob_list) - if(isnull(D)) + var/datum/disease/D = new disease + + if(isnull(D) || isnull(H)) return FALSE - for(var/thing in shuffle(human_mob_list)) - H = thing - if(H.stat == DEAD) - continue - if(!H.HasDisease(D)) - H.ForceContractDisease(D) - break + if(H.stat == DEAD) + return FALSE - message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [D.name]! Affected mob: [key_name_admin(H)]") - log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]") + if(!H.HasDisease(D)) + H.ForceContractDisease(D) + + message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [D.name]! Affected mob: [key_name_admin(H)]") + log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]") + + return TRUE diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 73ef6649988..4e593ea7f13 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -354,20 +354,20 @@ GLOBAL_LIST_INIT(advance_cures, list( var/new_name = tgui_input_text(usr, "Name your new disease.", "New Name") if(!new_name) - return + return FALSE D.AssignName(new_name) D.Refresh() for(var/datum/disease/advance/AD in active_diseases) AD.Refresh() - for(var/thing in shuffle(human_mob_list)) - H = thing - if(H.stat == DEAD) - continue - if(!H.HasDisease(D)) - H.ForceContractDisease(D) - break + H = tgui_input_list(usr, "Choose infectee", human_mob_list) + + if(isnull(H)) + return FALSE + + if(!H.HasDisease(D)) + H.ForceContractDisease(D) var/list/name_symptoms = list() for(var/datum/symptom/S in D.symptoms) @@ -375,6 +375,8 @@ GLOBAL_LIST_INIT(advance_cures, list( message_admins("[key_name_admin(usr)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]") log_admin("[key_name_admin(usr)] infected [key_name_admin(H)] with [D.name]. It has these symptoms: [english_list(name_symptoms)]") + return TRUE + /datum/disease/advance/proc/totalStageSpeed() var/total_stage_speed = 0 for(var/i in symptoms) diff --git a/code/datums/diseases/advance/symptoms/macrophage.dm b/code/datums/diseases/advance/symptoms/macrophage.dm index 5769fadaa6c..a04a3fc50fe 100644 --- a/code/datums/diseases/advance/symptoms/macrophage.dm +++ b/code/datums/diseases/advance/symptoms/macrophage.dm @@ -70,4 +70,4 @@ BONUS phage.viruses += D M.visible_message(span_danger("A strange crearure bursts out of [M]!"), span_userdanger("A slimy creature bursts forth from your flesh!")) - addtimer(CALLBACK(phage, TYPE_PROC_REF(/mob/living/simple_mob/vore/aggressive/macrophage, dust)), 3000) + addtimer(CALLBACK(phage, TYPE_PROC_REF(/mob/living/simple_mob/vore/aggressive/macrophage, deathcheck)), 3000) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm b/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm index dacbebb57da..3e340e0abca 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/macrophage.dm @@ -32,6 +32,12 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee +/mob/living/simple_mob/vore/aggressive/macrophage/proc/deathcheck() + if(locate(/mob/living/carbon/human) in vore_selected) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_mob/vore/aggressive/macrophage, deathcheck)), 3000) + else + dust() + /mob/living/simple_mob/vore/aggressive/macrophage/green icon_state = "macrophage-2" @@ -47,7 +53,7 @@ contamination_color = "green" vore_verb = "absorb" escapable = TRUE - escapable = 5 + escapable = 20 desc = "In an attempt to get away from the giant virus, it's oversized envelope proteins dragged you right past it's matrix, encapsulating you deep inside it's capsid... The strange walls kneading and keeping you tight along within it's nucleoprotein." belly_fullscreen = "VBO_gematically_angular" belly_fullscreen_color = "#87d8d8" diff --git a/icons/mob/macrophage.dmi b/icons/mob/macrophage.dmi index 4b7518bfc64a15e2ec408cafeadcd22b8f2a1006..3d8d5fdeabc467db78653297f726fbb82e305896 100644 GIT binary patch delta 4572 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 Date: Mon, 11 Nov 2024 13:12:19 +0100 Subject: [PATCH 084/193] adds Search to smart vendors (#16587) --- tgui/packages/tgui/interfaces/SmartVend.tsx | 309 ++++++++++++++------ 1 file changed, 215 insertions(+), 94 deletions(-) diff --git a/tgui/packages/tgui/interfaces/SmartVend.tsx b/tgui/packages/tgui/interfaces/SmartVend.tsx index 7c8eeba29d3..29a2cf76713 100644 --- a/tgui/packages/tgui/interfaces/SmartVend.tsx +++ b/tgui/packages/tgui/interfaces/SmartVend.tsx @@ -1,8 +1,18 @@ -import { map } from 'common/collections'; import { BooleanLike } from 'common/react'; +import { createSearch } from 'common/string'; +import { useState } from 'react'; import { useBackend } from '../backend'; -import { Box, Button, NoticeBox, Section, Table } from '../components'; +import { + Box, + Button, + Dropdown, + Flex, + Input, + NoticeBox, + Section, + Table, +} from '../components'; import { Window } from '../layouts'; type Data = { @@ -14,8 +24,28 @@ type Data = { type content = { name: string; index: number; amount: number }; +const sortTypes = { + Alphabetical: (a: content, b: content) => a.name > b.name, + 'By amount': (a: content, b: content) => -(a.amount - b.amount), +}; + export const SmartVend = (props) => { - const { act, config, data } = useBackend(); + const { config, data } = useBackend(); + const [searchText, setSearchText] = useState(''); + const [sortOrder, setSortOrder] = useState('Alphabetical'); + const [descending, setDescending] = useState(false); + + function handleSearchText(value: string) { + setSearchText(value); + } + + function handleSortOrder(value: string) { + setSortOrder(value); + } + + function handleDescending(value: boolean) { + setDescending(value); + } const { secure, locked, contents } = data; @@ -39,100 +69,191 @@ export const SmartVend = (props) => { {(contents.length === 0 && ( Unfortunately, this {config.title} is empty. )) || ( - - - Item - - Amount - - - Dispense - - - {map(contents, (value: content, key) => ( - - - {value.name} - - - {value.amount} in stock - - - - - - - - - - - ))} -
+ <> + + + )}
); }; + +const SheetSearch = (props: { + searchText: string; + sortOrder: string; + descending: boolean; + onSearchText: Function; + onSortOrder: Function; + onDescending: Function; +}) => { + const { + searchText, + sortOrder, + descending, + onSearchText, + onSortOrder, + onDescending, + } = props; + return ( + + + + onSearchText(value)} + /> + + + onSortOrder(v)} + /> + + +