add VV for ID cards and card access (#29897)

* add VV for ID card access

* Update code/game/objects/obj_vv.dm

Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Signed-off-by: warriorstar-orion <orion@snowfrost.garden>

* hell

* ID card VV

* dumb

* fix build

* log and message admins

---------

Signed-off-by: warriorstar-orion <orion@snowfrost.garden>
Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
This commit is contained in:
warriorstar-orion
2025-09-19 15:54:31 +00:00
committed by GitHub
co-authored by Contrabang
parent 860d091ee1
commit 94e7b1d007
19 changed files with 504 additions and 232 deletions
+1
View File
@@ -253,6 +253,7 @@
#define REGION_SUPPLY 6
#define REGION_COMMAND 7
#define REGION_CENTCOMM 8
#define REGION_MISC 9
//Just space
#define SPACE_ICON_STATE "[((x + y) ^ ~(x * y) + z) % 25]"
+4
View File
@@ -52,6 +52,10 @@
#define VV_HK_MAKESPEEDY "makespeedy"
#define VV_HK_MAKENORMALSPEED "makenormalspeed"
#define VV_HK_MODIFYARMOR "modifyarmor"
#define VV_HK_MODIFY_ACCESS "modify_access"
// /obj/item/card/id
#define VV_HK_MODIFY_ID_CARD "modify_id_card"
// /mob
#define VV_HK_MOB_PLAYER_PANEL "mob_player_panel"
+17 -7
View File
@@ -141,6 +141,8 @@
return list(ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_TCOMSAT, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_HEADS_VAULT, ACCESS_BLUESHIELD, ACCESS_NTREP, ACCESS_HOP, ACCESS_CAPTAIN)
if(REGION_CENTCOMM) //because why the heck not
return get_all_centcom_access() + get_all_accesses()
if(REGION_MISC)
return list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_VOX, ACCESS_SYNDICATE_COMMAND, ACCESS_TRADE_SOL, ACCESS_AWAY01, ACCESS_FREE_GOLEMS, ACCESS_THETA_STATION, ACCESS_DEEPSTORAGE)
/proc/get_region_accesses_name(code)
switch(code)
@@ -162,6 +164,8 @@
return "Command"
if(REGION_CENTCOMM) //CC
return "CentComm"
if(REGION_MISC)
return "Misc"
/proc/get_access_desc(A)
@@ -308,9 +312,6 @@
return "Nanotrasen Career Trainer"
if(ACCESS_EVIDENCE)
return "Evidence Lockers"
/proc/get_centcom_access_desc(A)
switch(A)
if(ACCESS_CENT_GENERAL)
return "General Access"
if(ACCESS_CENT_LIVING)
@@ -325,15 +326,24 @@
return "Special Ops Commander"
if(ACCESS_CENT_COMMANDER)
return "Commander"
/proc/get_syndicate_access_desc(A)
switch(A)
if(ACCESS_SYNDICATE)
return "Syndicate Operative"
if(ACCESS_SYNDICATE_LEADER)
return "Syndicate Operative Leader"
if(ACCESS_SYNDICATE_COMMAND)
return "Syndicate Command"
if(ACCESS_VOX)
return "Vox Skipjack"
if(ACCESS_TRADE_SOL)
return "Trade Station"
if(ACCESS_AWAY01)
return "Moon Outpost 19"
if(ACCESS_FREE_GOLEMS)
return "Free Golems"
if(ACCESS_THETA_STATION)
return "Theta Station"
if(ACCESS_DEEPSTORAGE)
return "Deepstorage"
/proc/get_all_jobs()
var/list/all_jobs = list()
@@ -409,7 +419,7 @@
else
available_accesses = get_region_accesses(i)
for(var/access in available_accesses)
var/access_desc = (i == REGION_CENTCOMM) ? get_centcom_access_desc(access) : get_access_desc(access)
var/access_desc = get_access_desc(access)
if(access_desc)
accesses += list(list(
"desc" = replacetext(access_desc, "&nbsp", " "),
@@ -118,7 +118,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return formatted
/obj/machinery/computer/card/proc/format_card_skins(list/card_skins)
/proc/format_card_skins(list/card_skins)
var/list/formatted = list()
for(var/skin in card_skins)
formatted.Add(list(list(
@@ -394,7 +394,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/proc/regenerate_id_name()
if(modify)
modify.name = "[modify.registered_name]'s ID Card ([modify.assignment])"
modify.regenerate_name()
/obj/machinery/computer/card/proc/eject_card(mob/user, obj/card)
if(ishuman(user))
+26
View File
@@ -159,6 +159,9 @@
popup.set_content(dat)
popup.open()
/obj/item/card/id/proc/regenerate_name()
name = "[registered_name]'s ID Card ([assignment])"
/obj/item/card/id/activate_self(mob/user)
if(..())
return
@@ -368,7 +371,10 @@
.["registered_name"] = registered_name
.["assignment"] = assignment
.["current_skin"] = icon_state
.["current_skin_name"] = get_skin_desc(icon_state)
.["lastlog"] = lastlog
.["access"] = access
.["associated_account_number"] = associated_account_number
/obj/item/card/id/proc/flash_card(mob/user)
user.visible_message("[user] shows you: [bicon(src)] [name]. The assignment on the card: [assignment]",\
@@ -878,6 +884,26 @@
desc = "An evil-looking ID issued to members of the Syndicate."
icon_state = "syndie"
/obj/item/card/id/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION(VV_HK_MODIFY_ID_CARD, "Modify ID Card")
/obj/item/card/id/vv_do_topic(list/href_list)
. = ..()
if(!.)
return
if(href_list[VV_HK_MODIFY_ID_CARD])
if(!check_rights(R_ADMIN))
return
var/turf/T = get_turf(src)
message_admins("[key_name_admin(usr)] is modifying the ID card [src] [ADMIN_COORDJMP(T)]")
var/datum/ui_module/id_card_modifier/ui = new(target = src)
ui.ui_interact(usr)
// Decals
/obj/item/id_decal
name = "identification card decal"
+8
View File
@@ -7,6 +7,7 @@
else
VV_DROPDOWN_OPTION(VV_HK_MAKENORMALSPEED, "Make normal process")
VV_DROPDOWN_OPTION(VV_HK_MODIFYARMOR, "Modify armor values")
VV_DROPDOWN_OPTION(VV_HK_MODIFY_ACCESS, "Modify access")
/obj/vv_do_topic(list/href_list)
. = ..()
@@ -118,3 +119,10 @@
log_admin("[key_name(usr)] modified the armor on [src] to: melee = [armorlist[MELEE]], bullet = [armorlist[BULLET]], laser = [armorlist[LASER]], energy = [armorlist[ENERGY]], bomb = [armorlist[BOMB]], rad = [armorlist[RAD]], fire = [armorlist[FIRE]], acid = [armorlist[ACID]], magic = [armorlist[MAGIC]]")
message_admins("<span class='notice'>[key_name(usr)] modified the armor on [src] to: melee = [armorlist[MELEE]], bullet = [armorlist[BULLET]], laser = [armorlist[LASER]], energy = [armorlist[ENERGY]], bomb = [armorlist[BOMB]], rad = [armorlist[RAD]], fire = [armorlist[FIRE]], acid = [armorlist[ACID]], magic = [armorlist[MAGIC]]</span>")
if(href_list[VV_HK_MODIFY_ACCESS])
if(!check_rights(R_ADMIN))
return
log_and_message_admins("[key_name_admin(usr)] is modifying the access of [src]")
var/datum/ui_module/obj_access_modifier/ui = new(target = src)
ui.ui_interact(usr)
@@ -0,0 +1,92 @@
RESTRICT_TYPE(/datum/ui_module/obj_access_modifier)
/datum/ui_module/obj_access_modifier
name = "Access Modifier"
var/obj/target_obj
/datum/ui_module/obj_access_modifier/New(datum/_host, obj/target)
..()
if(!(isobj(target)))
stack_trace("Attempted to create an access modifier on a non-/obj")
qdel(src)
return
target_obj = target
/datum/ui_module/obj_access_modifier/ui_state(mob/user)
return GLOB.admin_state
/datum/ui_module/obj_access_modifier/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "ObjAccessModifier", name)
ui.autoupdate = FALSE
ui.open()
/datum/ui_module/obj_access_modifier/ui_data(mob/user)
var/list/data = list(
"one_access" = length(target_obj.req_one_access),
"selected_accesses" = length(target_obj.req_one_access) ? target_obj.req_one_access : target_obj.req_access
)
return data
/datum/ui_module/obj_access_modifier/ui_static_data(mob/user)
var/list/data = list()
data["regions"] = get_accesslist_static_data(REGION_GENERAL, REGION_MISC)
return data
/datum/ui_module/obj_access_modifier/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if(..())
return
var/one_access = length(target_obj.req_one_access)
switch(action)
if("set_one_access")
if((params["access"] == "one") && (length(target_obj.req_access)))
target_obj.req_one_access = target_obj.req_access.Copy()
target_obj.req_access.Cut()
else
target_obj.req_access = target_obj.req_one_access.Copy()
target_obj.req_one_access.Cut()
if("set")
var/access = text2num(params["access"])
if(isnull(access))
return FALSE
if(one_access)
if(access in target_obj.req_one_access)
target_obj.req_one_access -= access
else
target_obj.req_one_access |= access
else
if(access in target_obj.req_access)
target_obj.req_access -= access
else
target_obj.req_access |= access
if("grant_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL || region > REGION_MISC)
return FALSE
if(one_access)
target_obj.req_one_access |= get_region_accesses(region)
else
target_obj.req_access |= get_region_accesses(region)
if("deny_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL || region > REGION_MISC)
return FALSE
if(one_access)
target_obj.req_one_access -= get_region_accesses(region)
else
target_obj.req_access -= get_region_accesses(region)
if("grant_all")
if(one_access)
target_obj.req_one_access = get_absolutely_all_accesses()
else
target_obj.req_access = get_absolutely_all_accesses()
if("clear_all")
target_obj.req_one_access.Cut()
target_obj.req_access.Cut()
return TRUE
@@ -0,0 +1,93 @@
RESTRICT_TYPE(/datum/ui_module/id_card_modifier)
/datum/ui_module/id_card_modifier
name = "ID Card Modifier"
var/obj/item/card/id/card
/datum/ui_module/id_card_modifier/New(datum/_host, obj/item/card/id/target)
..()
if(!istype(target))
stack_trace("Attempted to create an access modifier on a non-/obj")
qdel(src)
return
card = target
/datum/ui_module/id_card_modifier/ui_state(mob/user)
return GLOB.admin_state
/datum/ui_module/id_card_modifier/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "IdCardModifier", name)
ui.autoupdate = FALSE
ui.open()
/datum/ui_module/id_card_modifier/ui_data(mob/user)
. = list()
.["card"] = card.to_tgui()
.["card_skins"] = format_card_skins(get_station_card_skins())
.["all_centcom_skins"] = format_card_skins(get_centcom_card_skins())
/datum/ui_module/id_card_modifier/ui_static_data(mob/user)
. = list()
.["regions"] = get_accesslist_static_data(REGION_GENERAL, REGION_MISC)
/datum/ui_module/id_card_modifier/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
if(..())
return
switch(action)
if("reg")
var/temp_name = reject_bad_name(input(usr, "Who is this ID for?", "ID Card Renaming", card.registered_name), TRUE)
if(!temp_name)
to_chat(usr, "<span class='warning'>Rejecting invalid name `[temp_name]`.</span>")
return
card.registered_name = temp_name
card.regenerate_name()
if("set_card_skin")
card.icon_state = params["skin_target"]
card.update_appearance(UPDATE_ICON_STATE)
if("set_card_account_number") // card account number
var/account_num = tgui_input_number(usr, "Account Number", "Input Number", card.associated_account_number, 9999999, 1000000)
if(isnull(account_num))
return
card.associated_account_number = account_num
if("set_job_name")
var/job_name = tgui_input_text(
usr,
"Please input a job name. Note that this does not perform any security record or data core updates.",
"Job Name",
card.rank)
if(isnull(job_name))
return
card.rank = job_name
card.assignment = job_name
card.regenerate_name()
// shamelessly copy-pasted from id_card_console.dm
// Changing card access
if("set") // add/remove a single access number
var/access = text2num(params["access"])
if(access in card.access)
card.access -= access
else
card.access += access
if("grant_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL)
to_chat(usr, "<span class='warning'>Rejecting invalid region `[region]`.</span>")
return
card.access |= get_region_accesses(region)
if("deny_region")
var/region = text2num(params["region"])
if(isnull(region) || region < REGION_GENERAL)
to_chat(usr, "<span class='warning'>Rejecting invalid region `[region]`.</span>")
return
card.access -= get_region_accesses(region)
if("clear_all")
card.access = list()
if("grant_all")
card.access |= get_all_accesses()
return TRUE
+2
View File
@@ -3239,6 +3239,7 @@
#include "code\modules\tgui\states.dm"
#include "code\modules\tgui\tgui_datum.dm"
#include "code\modules\tgui\tgui_window.dm"
#include "code\modules\tgui\modules\access_modifier.dm"
#include "code\modules\tgui\modules\ai_controller_debugger.dm"
#include "code\modules\tgui\modules\appearance_changer.dm"
#include "code\modules\tgui\modules\atmos_control.dm"
@@ -3248,6 +3249,7 @@
#include "code\modules\tgui\modules\ert_manager.dm"
#include "code\modules\tgui\modules\generic_crew_manifest.dm"
#include "code\modules\tgui\modules\ghost_hud_panel.dm"
#include "code\modules\tgui\modules\id_card_modifier.dm"
#include "code\modules\tgui\modules\law_manager.dm"
#include "code\modules\tgui\modules\module_base.dm"
#include "code\modules\tgui\modules\power_monitor.dm"
@@ -106,7 +106,7 @@ type AirlockElectronicsData = {
regions: AccessRegion[];
};
const ChooseAccess = (props) => {
export const ChooseAccess = (props) => {
const { act, data } = useBackend<AirlockElectronicsData>();
const { selected_accesses, one_access, regions } = data;
return (
@@ -1,4 +1,4 @@
import { Box, Button, LabeledList, Section } from 'tgui-core/components';
import { Box, Button, Dropdown, LabeledList, Section } from 'tgui-core/components';
import { CardSkin, IdCard } from './types';
import { useBackend } from '../../backend';
import { BooleanLike } from 'tgui-core/react';
@@ -23,11 +23,11 @@ export const CardInformation = (props: CardInformationProps) => {
</LabeledList.Item>
<LabeledList.Item label="Account Number">
<Button
icon={card?.account_number ? 'pencil-alt' : 'exclamation-triangle'}
selected={!!card?.account_number}
icon={card?.associated_account_number ? 'pencil-alt' : 'exclamation-triangle'}
selected={!!card?.associated_account_number}
onClick={() => act('set_card_account_number')}
>
{card?.account_number ? card?.account_number : 'None'}
{card?.associated_account_number ? card?.associated_account_number : 'None'}
</Button>
</LabeledList.Item>
</>
@@ -73,3 +73,39 @@ export const CardSkins = (props: CardSkinsProps) => {
</Section>
);
};
export const DropdownCardSkins = (props: CardSkinsProps) => {
const { act } = useBackend();
const { card_skins, card, is_centcom, all_centcom_skins } = props;
const card_skin_options = card_skins
.map((v) => ({ displayText: v.display_name, value: v.skin }))
.sort((a, b) => a.displayText.localeCompare(b.displayText));
const centcom_skin_options = Array.isArray(all_centcom_skins)
? all_centcom_skins
.map((v) => ({ displayText: v.display_name, value: v.skin }))
.sort((a, b) => a.displayText.localeCompare(b.displayText))
: [];
const is_dept_skin = card_skin_options.filter((v) => v.value === card?.current_skin).length > 0;
return (
<Section title="Card Skins">
<LabeledList.Item label="Department Skins">
<Dropdown
options={card_skin_options}
selected={is_dept_skin ? card?.current_skin_name : null}
onSelected={(value) => act('set_card_skin', { skin_target: value })}
/>
</LabeledList.Item>
{!!is_centcom && (
<LabeledList.Item label="Centcom Skins">
<Dropdown
options={centcom_skin_options}
selected={!is_dept_skin ? card?.current_skin_name : null}
onSelected={(value) => act('set_card_skin', { skin_target: value })}
/>
</LabeledList.Item>
)}
</Section>
);
};
@@ -11,8 +11,10 @@ export type IdCard = {
registered_name: string;
assignment: string;
current_skin: string;
current_skin_name: string;
lastlog: string;
account_number?: number;
associated_account_number: number;
access: number[];
};
export type JobNames = {
@@ -0,0 +1,76 @@
import { Button, LabeledList, Section, Stack } from 'tgui-core/components';
import { Window } from '../layouts';
import { CardSkin, IdCard } from './CardComputer/types';
import { useBackend } from '../backend';
import { CardInformation, DropdownCardSkins } from './CardComputer/card_details';
import { AccessList, AccessRegion } from './common/AccessList';
type Data = {
card: IdCard;
card_skins: CardSkin[];
all_centcom_skins: CardSkin[];
regions: AccessRegion[];
};
export const IdCardModifier = () => {
const { act, data } = useBackend<Data>();
const { card, card_skins, all_centcom_skins, regions } = data;
return (
<Window width={600} height={565}>
<Window.Content>
<Stack vertical fill>
<Stack.Item>
<Stack fill>
<Stack.Item grow>
<Section title="Basic Information">
<CardInformation card={card} />
<LabeledList.Item label="Job Name">
<Button
icon={!card || card.rank === 'Unknown' ? 'exclamation-triangle' : 'pencil-alt'}
selected={!!card}
onClick={() => act('set_job_name')}
>
{card?.rank}
</Button>
</LabeledList.Item>
</Section>
</Stack.Item>
<Stack.Item>
<DropdownCardSkins
is_centcom={true}
card={card}
card_skins={card_skins}
all_centcom_skins={all_centcom_skins}
/>
</Stack.Item>
</Stack>
</Stack.Item>
<Stack.Item grow>
<AccessList
accesses={regions}
selectedList={card.access}
accessMod={(ref) =>
act('set', {
access: ref,
})
}
grantAll={() => act('grant_all')}
denyAll={() => act('clear_all')}
grantDep={(ref) =>
act('grant_region', {
region: ref,
})
}
denyDep={(ref) =>
act('deny_region', {
region: ref,
})
}
/>
</Stack.Item>
</Stack>
</Window.Content>
</Window>
);
};
@@ -0,0 +1,16 @@
import { Stack } from 'tgui-core/components';
import { Window } from '../layouts';
import { ChooseAccess } from './AirlockElectronics';
export const ObjAccessModifier = () => {
return (
<Window width={500} height={565}>
<Window.Content>
<Stack fill vertical>
<ChooseAccess />
</Stack>
</Window.Content>
</Window>
);
};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+119 -213
View File
@@ -2049,7 +2049,7 @@ __metadata:
languageName: node
linkType: hard
"@floating-ui/react@npm:^0.27.16":
"@floating-ui/react@npm:^0.27.15":
version: 0.27.16
resolution: "@floating-ui/react@npm:0.27.16"
dependencies:
@@ -3093,149 +3093,142 @@ __metadata:
languageName: node
linkType: hard
"@rollup/rollup-android-arm-eabi@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-android-arm-eabi@npm:4.50.1"
"@rollup/rollup-android-arm-eabi@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-android-arm-eabi@npm:4.39.0"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@rollup/rollup-android-arm64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-android-arm64@npm:4.50.1"
"@rollup/rollup-android-arm64@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-android-arm64@npm:4.39.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-darwin-arm64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-darwin-arm64@npm:4.50.1"
"@rollup/rollup-darwin-arm64@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-darwin-arm64@npm:4.39.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-darwin-x64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-darwin-x64@npm:4.50.1"
"@rollup/rollup-darwin-x64@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-darwin-x64@npm:4.39.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@rollup/rollup-freebsd-arm64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-freebsd-arm64@npm:4.50.1"
"@rollup/rollup-freebsd-arm64@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-freebsd-arm64@npm:4.39.0"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-freebsd-x64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-freebsd-x64@npm:4.50.1"
"@rollup/rollup-freebsd-x64@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-freebsd-x64@npm:4.39.0"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@rollup/rollup-linux-arm-gnueabihf@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.50.1"
"@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0"
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-arm-musleabihf@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.50.1"
"@rollup/rollup-linux-arm-musleabihf@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.39.0"
conditions: os=linux & cpu=arm & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-arm64-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.50.1"
"@rollup/rollup-linux-arm64-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.39.0"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-arm64-musl@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.50.1"
"@rollup/rollup-linux-arm64-musl@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.39.0"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-loongarch64-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.50.1"
"@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0"
conditions: os=linux & cpu=loong64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-ppc64-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.50.1"
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0"
conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-riscv64-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.50.1"
"@rollup/rollup-linux-riscv64-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.39.0"
conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-riscv64-musl@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.50.1"
"@rollup/rollup-linux-riscv64-musl@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.39.0"
conditions: os=linux & cpu=riscv64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-s390x-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.50.1"
"@rollup/rollup-linux-s390x-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.39.0"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-x64-gnu@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.50.1"
"@rollup/rollup-linux-x64-gnu@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.39.0"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-x64-musl@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-linux-x64-musl@npm:4.50.1"
"@rollup/rollup-linux-x64-musl@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-linux-x64-musl@npm:4.39.0"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-openharmony-arm64@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-openharmony-arm64@npm:4.50.1"
conditions: os=openharmony & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-win32-arm64-msvc@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.50.1"
"@rollup/rollup-win32-arm64-msvc@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.39.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-win32-ia32-msvc@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.50.1"
"@rollup/rollup-win32-ia32-msvc@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.39.0"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@rollup/rollup-win32-x64-msvc@npm:4.50.1":
version: 4.50.1
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.50.1"
"@rollup/rollup-win32-x64-msvc@npm:4.39.0":
version: 4.39.0
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.39.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -3759,7 +3752,7 @@ __metadata:
languageName: node
linkType: hard
"@types/estree@npm:*, @types/estree@npm:^1.0.0":
"@types/estree@npm:*, @types/estree@npm:1.0.7, @types/estree@npm:^1.0.0":
version: 1.0.7
resolution: "@types/estree@npm:1.0.7"
checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c
@@ -3773,13 +3766,6 @@ __metadata:
languageName: node
linkType: hard
"@types/estree@npm:1.0.8":
version: 1.0.8
resolution: "@types/estree@npm:1.0.8"
checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5
languageName: node
linkType: hard
"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^5.0.0":
version: 5.0.6
resolution: "@types/express-serve-static-core@npm:5.0.6"
@@ -5931,12 +5917,12 @@ __metadata:
linkType: hard
"brace-expansion@npm:^1.1.7":
version: 1.1.12
resolution: "brace-expansion@npm:1.1.12"
version: 1.1.11
resolution: "brace-expansion@npm:1.1.11"
dependencies:
balanced-match: "npm:^1.0.0"
concat-map: "npm:0.0.1"
checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73
checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668
languageName: node
linkType: hard
@@ -7060,7 +7046,7 @@ __metadata:
languageName: node
linkType: hard
"create-hash@npm:^1.1.0, create-hash@npm:^1.2.0":
"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0":
version: 1.2.0
resolution: "create-hash@npm:1.2.0"
dependencies:
@@ -7073,19 +7059,7 @@ __metadata:
languageName: node
linkType: hard
"create-hash@npm:~1.1.3":
version: 1.1.3
resolution: "create-hash@npm:1.1.3"
dependencies:
cipher-base: "npm:^1.0.1"
inherits: "npm:^2.0.1"
ripemd160: "npm:^2.0.0"
sha.js: "npm:^2.4.0"
checksum: 10c0/dbcf4a1b13c8dd5f2a69f5f30bd2701f919ed7d3fbf5aa530cf00b17a950c2b77f63bfe6a2981735a646ae2620d96c8f4584bf70aeeabf050a31de4e46219d08
languageName: node
linkType: hard
"create-hmac@npm:^1.1.7":
"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7":
version: 1.1.7
resolution: "create-hmac@npm:1.1.7"
dependencies:
@@ -9631,18 +9605,6 @@ __metadata:
languageName: node
linkType: hard
"fdir@npm:^6.4.4, fdir@npm:^6.5.0":
version: 6.5.0
resolution: "fdir@npm:6.5.0"
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f
languageName: node
linkType: hard
"figgy-pudding@npm:^3.5.1":
version: 3.5.2
resolution: "figgy-pudding@npm:3.5.2"
@@ -9885,15 +9847,14 @@ __metadata:
linkType: hard
"form-data@npm:^3.0.0":
version: 3.0.4
resolution: "form-data@npm:3.0.4"
version: 3.0.3
resolution: "form-data@npm:3.0.3"
dependencies:
asynckit: "npm:^0.4.0"
combined-stream: "npm:^1.0.8"
es-set-tostringtag: "npm:^2.1.0"
hasown: "npm:^2.0.2"
mime-types: "npm:^2.1.35"
checksum: 10c0/2451043b3e931653ce9690ba051b0bf1b5855a63029279bd7bdf8d02e4b5b42f4582b23ed3637df27a0d21bac2013c37d165ec9486e1af2470c13114aee83acc
checksum: 10c0/a62b275f9736ff94f327c66d5f6c581391eafe07c912b12c3738e822aa3b1f27fb23d7138af5b48163497a278e2f84ec9f4a27e60dd511b7683fb76a835bb395
languageName: node
linkType: hard
@@ -10511,15 +10472,6 @@ __metadata:
languageName: node
linkType: hard
"hash-base@npm:^2.0.0":
version: 2.0.2
resolution: "hash-base@npm:2.0.2"
dependencies:
inherits: "npm:^2.0.1"
checksum: 10c0/283f6060277b52e627a734c4d19d4315ba82326cab5a2f4f2f00b924d747dc7cc902a8cedb1904c7a3501075fcbb24c08de1152bae296698fdc5ad75b33986af
languageName: node
linkType: hard
"hash-base@npm:^3.0.0":
version: 3.1.0
resolution: "hash-base@npm:3.1.0"
@@ -15010,16 +14962,15 @@ __metadata:
linkType: hard
"pbkdf2@npm:^3.1.2":
version: 3.1.3
resolution: "pbkdf2@npm:3.1.3"
version: 3.1.2
resolution: "pbkdf2@npm:3.1.2"
dependencies:
create-hash: "npm:~1.1.3"
create-hmac: "npm:^1.1.7"
ripemd160: "npm:=2.0.1"
safe-buffer: "npm:^5.2.1"
sha.js: "npm:^2.4.11"
to-buffer: "npm:^1.2.0"
checksum: 10c0/12779463dfb847701f186e0b7e5fd538a1420409a485dcf5100689c2b3ec3cb113204e82a68668faf3b6dd76ec19260b865313c9d3a9c252807163bdc24652ae
create-hash: "npm:^1.1.2"
create-hmac: "npm:^1.1.4"
ripemd160: "npm:^2.0.1"
safe-buffer: "npm:^5.0.1"
sha.js: "npm:^2.4.8"
checksum: 10c0/5a30374e87d33fa080a92734d778cf172542cc7e41b96198c4c88763997b62d7850de3fbda5c3111ddf79805ee7c1da7046881c90ac4920b5e324204518b05fd
languageName: node
linkType: hard
@@ -15058,13 +15009,6 @@ __metadata:
languageName: node
linkType: hard
"picomatch@npm:^4.0.3":
version: 4.0.3
resolution: "picomatch@npm:4.0.3"
checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2
languageName: node
linkType: hard
"pify@npm:^2.0.0":
version: 2.3.0
resolution: "pify@npm:2.3.0"
@@ -17215,16 +17159,6 @@ __metadata:
languageName: node
linkType: hard
"ripemd160@npm:=2.0.1":
version: 2.0.1
resolution: "ripemd160@npm:2.0.1"
dependencies:
hash-base: "npm:^2.0.0"
inherits: "npm:^2.0.1"
checksum: 10c0/d4cbb4713c1268bb35e44815b12e3744a952a72b72e6a72110c8f3932227ddf68841110285fe2ed1c04805e2621d85f905deb5f55f9d91fa1bfc0f8081a244e6
languageName: node
linkType: hard
"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1":
version: 2.0.2
resolution: "ripemd160@npm:2.0.2"
@@ -17285,32 +17219,31 @@ __metadata:
languageName: node
linkType: hard
"rollup@npm:^4.34.9":
version: 4.50.1
resolution: "rollup@npm:4.50.1"
"rollup@npm:^4.30.1":
version: 4.39.0
resolution: "rollup@npm:4.39.0"
dependencies:
"@rollup/rollup-android-arm-eabi": "npm:4.50.1"
"@rollup/rollup-android-arm64": "npm:4.50.1"
"@rollup/rollup-darwin-arm64": "npm:4.50.1"
"@rollup/rollup-darwin-x64": "npm:4.50.1"
"@rollup/rollup-freebsd-arm64": "npm:4.50.1"
"@rollup/rollup-freebsd-x64": "npm:4.50.1"
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.50.1"
"@rollup/rollup-linux-arm-musleabihf": "npm:4.50.1"
"@rollup/rollup-linux-arm64-gnu": "npm:4.50.1"
"@rollup/rollup-linux-arm64-musl": "npm:4.50.1"
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.50.1"
"@rollup/rollup-linux-ppc64-gnu": "npm:4.50.1"
"@rollup/rollup-linux-riscv64-gnu": "npm:4.50.1"
"@rollup/rollup-linux-riscv64-musl": "npm:4.50.1"
"@rollup/rollup-linux-s390x-gnu": "npm:4.50.1"
"@rollup/rollup-linux-x64-gnu": "npm:4.50.1"
"@rollup/rollup-linux-x64-musl": "npm:4.50.1"
"@rollup/rollup-openharmony-arm64": "npm:4.50.1"
"@rollup/rollup-win32-arm64-msvc": "npm:4.50.1"
"@rollup/rollup-win32-ia32-msvc": "npm:4.50.1"
"@rollup/rollup-win32-x64-msvc": "npm:4.50.1"
"@types/estree": "npm:1.0.8"
"@rollup/rollup-android-arm-eabi": "npm:4.39.0"
"@rollup/rollup-android-arm64": "npm:4.39.0"
"@rollup/rollup-darwin-arm64": "npm:4.39.0"
"@rollup/rollup-darwin-x64": "npm:4.39.0"
"@rollup/rollup-freebsd-arm64": "npm:4.39.0"
"@rollup/rollup-freebsd-x64": "npm:4.39.0"
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.39.0"
"@rollup/rollup-linux-arm-musleabihf": "npm:4.39.0"
"@rollup/rollup-linux-arm64-gnu": "npm:4.39.0"
"@rollup/rollup-linux-arm64-musl": "npm:4.39.0"
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.39.0"
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.39.0"
"@rollup/rollup-linux-riscv64-gnu": "npm:4.39.0"
"@rollup/rollup-linux-riscv64-musl": "npm:4.39.0"
"@rollup/rollup-linux-s390x-gnu": "npm:4.39.0"
"@rollup/rollup-linux-x64-gnu": "npm:4.39.0"
"@rollup/rollup-linux-x64-musl": "npm:4.39.0"
"@rollup/rollup-win32-arm64-msvc": "npm:4.39.0"
"@rollup/rollup-win32-ia32-msvc": "npm:4.39.0"
"@rollup/rollup-win32-x64-msvc": "npm:4.39.0"
"@types/estree": "npm:1.0.7"
fsevents: "npm:~2.3.2"
dependenciesMeta:
"@rollup/rollup-android-arm-eabi":
@@ -17335,7 +17268,7 @@ __metadata:
optional: true
"@rollup/rollup-linux-loongarch64-gnu":
optional: true
"@rollup/rollup-linux-ppc64-gnu":
"@rollup/rollup-linux-powerpc64le-gnu":
optional: true
"@rollup/rollup-linux-riscv64-gnu":
optional: true
@@ -17347,8 +17280,6 @@ __metadata:
optional: true
"@rollup/rollup-linux-x64-musl":
optional: true
"@rollup/rollup-openharmony-arm64":
optional: true
"@rollup/rollup-win32-arm64-msvc":
optional: true
"@rollup/rollup-win32-ia32-msvc":
@@ -17359,7 +17290,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
checksum: 10c0/2029282826d5fb4e308be261b2c28329a4d2bd34304cc3960da69fd21d5acccd0267d6770b1656ffc8f166203ef7e865b4583d5f842a519c8ef059ac71854205
checksum: 10c0/2dc0c23ca04bd00295035b405c977261559aed8acc9902ee9ff44e4a6b54734fcb64999c32143c43804dcb543da7983032831b893a902633b006c21848a093ce
languageName: node
linkType: hard
@@ -18110,16 +18041,15 @@ __metadata:
languageName: node
linkType: hard
"sha.js@npm:^2.4.0, sha.js@npm:^2.4.11, sha.js@npm:^2.4.8":
version: 2.4.12
resolution: "sha.js@npm:2.4.12"
"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8":
version: 2.4.11
resolution: "sha.js@npm:2.4.11"
dependencies:
inherits: "npm:^2.0.4"
safe-buffer: "npm:^5.2.1"
to-buffer: "npm:^1.2.0"
inherits: "npm:^2.0.1"
safe-buffer: "npm:^5.0.1"
bin:
sha.js: bin.js
checksum: 10c0/9d36bdd76202c8116abbe152a00055ccd8a0099cb28fc17c01fa7bb2c8cffb9ca60e2ab0fe5f274ed6c45dc2633d8c39cf7ab050306c231904512ba9da4d8ab1
sha.js: ./bin.js
checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5
languageName: node
linkType: hard
@@ -19294,15 +19224,15 @@ __metadata:
linkType: soft
"tgui-core@npm:^5.1.0":
version: 5.3.1
resolution: "tgui-core@npm:5.3.1"
version: 5.2.0
resolution: "tgui-core@npm:5.2.0"
dependencies:
"@floating-ui/react": "npm:^0.27.16"
"@floating-ui/react": "npm:^0.27.15"
"@nozbe/microfuzz": "npm:^1.0.0"
peerDependencies:
react: ^19.1.0
react-dom: ^19.1.0
checksum: 10c0/0305d561f8cd629d506e93bfe4dfe00df3427e1a4471d6124d372431d6eb759264443384697722eec4b60eabbfcf0d04e7094634fa88f968995056621f191cc1
checksum: 10c0/a38341def22cf8525142215e25406b4b81874a06fb9fa9f2163b7f97c7f9e27cc1c3fef4a42c5014d620716f331cd6c7f98e9dbcfbea5574e2688d15317992ff
languageName: node
linkType: hard
@@ -19495,16 +19425,6 @@ __metadata:
languageName: node
linkType: hard
"tinyglobby@npm:^0.2.13":
version: 0.2.15
resolution: "tinyglobby@npm:0.2.15"
dependencies:
fdir: "npm:^6.5.0"
picomatch: "npm:^4.0.3"
checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844
languageName: node
linkType: hard
"tinypool@npm:^1.0.2":
version: 1.0.2
resolution: "tinypool@npm:1.0.2"
@@ -19558,17 +19478,6 @@ __metadata:
languageName: node
linkType: hard
"to-buffer@npm:^1.2.0":
version: 1.2.1
resolution: "to-buffer@npm:1.2.1"
dependencies:
isarray: "npm:^2.0.5"
safe-buffer: "npm:^5.2.1"
typed-array-buffer: "npm:^1.0.3"
checksum: 10c0/bbf07a2a7d6ff9e3ffe503c689176c7149cf3ec25887ce7c4aa5c4841a8845cc71121cd7b4a4769957f823b3f31dbf6b1be6e0a5955798ad864bf2245ee8b5e4
languageName: node
linkType: hard
"to-object-path@npm:^0.3.0":
version: 0.3.0
resolution: "to-object-path@npm:0.3.0"
@@ -20330,16 +20239,13 @@ __metadata:
linkType: hard
"vite@npm:^5.0.0 || ^6.0.0":
version: 6.3.6
resolution: "vite@npm:6.3.6"
version: 6.2.5
resolution: "vite@npm:6.2.5"
dependencies:
esbuild: "npm:^0.25.0"
fdir: "npm:^6.4.4"
fsevents: "npm:~2.3.3"
picomatch: "npm:^4.0.2"
postcss: "npm:^8.5.3"
rollup: "npm:^4.34.9"
tinyglobby: "npm:^0.2.13"
rollup: "npm:^4.30.1"
peerDependencies:
"@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: ">=1.21.0"
@@ -20380,7 +20286,7 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
checksum: 10c0/add701f1e72596c002275782e38d0389ab400c1be330c93a3009804d62db68097a936ca1c53c3301df3aaacfe5e328eab547060f31ef9c49a277ae50df6ad4fb
checksum: 10c0/226bb3c1875e1982559007007580e8d083b81f5289f18e28841d622ba030599e1bd9926adccc8264879e319e9f9e4f48a38a0dc52a5dfcdf2a9cb7313bfc1816
languageName: node
linkType: hard