From 48e33be67cd284961ea82a759da2a4425dd57097 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:53:59 +0200 Subject: [PATCH] Initial --- code/modules/admin/modify_robot.dm | 69 ++++++++ .../tgui/interfaces/ModifyRobot/index.tsx | 152 ++++++++++++++++++ .../tgui/interfaces/ModifyRobot/types.ts | 21 +++ vorestation.dme | 2 +- 4 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 code/modules/admin/modify_robot.dm create mode 100644 tgui/packages/tgui/interfaces/ModifyRobot/index.tsx create mode 100644 tgui/packages/tgui/interfaces/ModifyRobot/types.ts diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm new file mode 100644 index 0000000000..e2f0e7f8c1 --- /dev/null +++ b/code/modules/admin/modify_robot.dm @@ -0,0 +1,69 @@ +/client/proc/modify_robot(var/mob/living/silicon/robot/target in silicon_mob_list) + set name = "Modify Robot" + set desc = "Allows to add or remove modules to/from robots." + set category = "Admin" + if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT|R_EVENT)) + return + + var/datum/eventkit/modify_robot/modify_robot = new() + modify_robot.target = target + modify_robot.tgui_interact(src.mob) + +/datum/eventkit/modify_robot + var/mob/living/silicon/robot/target + +/datum/eventkit/modify_robot/New() + . = ..() + +/datum/eventkit/modify_robot/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ModifyRobot", "Modify Robot") + ui.open() + +/datum/eventkit/modify_robot/Destroy() + . = ..() + +/datum/eventkit/modify_robot/tgui_data() + . = list() + if(target) + .["target"] = list() + .["target"]["name"] = target.name + .["target"]["ckey"] = target.ckey + .["target"]["module"] = target.module + .["target"]["crisis_override"] = target.crisis_override + .["target"]["active_restrictions"] = target.restrict_modules_to + var/list/possible_restrictions = list() + for(var/entry in robot_modules) + if(!target.restrict_modules_to.Find(entry)) + possible_restrictions += entry + .["target"]["possible_restrictions"] = possible_restrictions + if(target.module) + .["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"]["back"] = icon2base64(get_flat_icon(target,dir=NORTH,no_anim=TRUE)) + var/list/all_players = list() + for(var/mob/living/silicon/robot/R in silicon_mob_list) + var/list/info = list("displayText" = "[R]", "value" = "\ref[R]") + all_players.Add(list(info)) + .["all_players"] = all_players + + +/datum/eventkit/modify_robot/tgui_state(mob/user) + return GLOB.tgui_admin_state + +/datum/eventkit/modify_robot/tgui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("select_target") + target = locate(params["new_target"]) + return TRUE + if("toggle_crisis") + target.crisis_override = !target.crisis_override + return TRUE + if("add_restriction") + target.restrict_modules_to += robot_modules[params["new_restriction"]] + if("remove_restriction") + target.restrict_modules_to -= robot_modules[params["rem_restriction"]] diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/index.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/index.tsx new file mode 100644 index 0000000000..9afd827853 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ModifyRobot/index.tsx @@ -0,0 +1,152 @@ +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Divider, + Dropdown, + Flex, + NoticeBox, + Section, + Stack, + Tabs, +} from '../../components'; +import { Window } from '../../layouts'; +import { Data } from './types'; + +export const ModifyRobot = (props) => { + const { act, data } = useBackend(); + + const { target, all_players } = data; + + const [tab, setTab] = useState(0); + + const tabs: React.JSX.Element[] = []; + + tabs[0] = ; + tabs[1] = ; + tabs[2] = ; + tabs[3] = ; + tabs[4] = ; + tabs[5] = ; + + return ( + + + {target ? ( + + {target.name} played by {target.ckey}. + + ) : ( + No target selected. Please pick one. + )} + + act('select_target', { + new_target: value, + }) + } + /> + {target && !target.module ? ( + <> + + Target has no active module. Limited options available. + + + + + + +
+ + + {target.active_restrictions.map( + (active_restriction, i) => { + return ( + + ); + }, + )} + + +
+
+ +
+ + + {target.possible_restrictions.map( + (possible_restriction, i) => { + return ( + + ); + }, + )} + + +
+
+ +
+ + ) : ( + <> + + setTab(0)}> + Smites + + setTab(1)}> + Medical + + setTab(2)}> + Abilities + + setTab(3)}> + Inventory + + setTab(4)}> + Admin + + setTab(5)}> + Fixes + + + {tabs[tab]} + + )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/types.ts b/tgui/packages/tgui/interfaces/ModifyRobot/types.ts new file mode 100644 index 0000000000..e2e4097f10 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ModifyRobot/types.ts @@ -0,0 +1,21 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + target: { + name: string; + ckey: string; + module: string; + crisis_override: BooleanLike; + active_restrictions: string[]; + possible_restrictions: string[]; + front: string | null; + side: string | null; + back: string | null; + } | null; + all_players: DropdownEntry[]; +}; + +export type DropdownEntry = { + displayText: string; + value: string; +}; diff --git a/vorestation.dme b/vorestation.dme index 11313c0b1d..9f8a730d4f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1738,6 +1738,7 @@ #include "code\modules\admin\holder2.dm" #include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\map_capture.dm" +#include "code\modules\admin\modify_robot.dm" #include "code\modules\admin\NewBan.dm" #include "code\modules\admin\news.dm" #include "code\modules\admin\persistence.dm" @@ -1814,7 +1815,6 @@ #include "code\modules\admin\verbs\lightning_strike.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" -#include "code\modules\admin\verbs\modify_robot.dm" #include "code\modules\admin\verbs\panicbunker.dm" #include "code\modules\admin\verbs\playsound.dm" #include "code\modules\admin\verbs\possess.dm"