[MIRROR] vorepanel hotfix (#10970)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-05-29 02:02:37 -07:00
committed by GitHub
parent c805da1d1e
commit 17a58042c3
15 changed files with 101 additions and 20 deletions

View File

@@ -57,4 +57,5 @@
target.vore_sprite_color = source.vore_sprite_color; \
target.belly_rub_target = source.belly_rub_target; \
\
target.soulcatcher_pref_flags = source.soulcatcher_pref_flags;
target.soulcatcher_pref_flags = source.soulcatcher_pref_flags; \
target.persistend_edit_mode = source.persistend_edit_mode;

View File

@@ -74,6 +74,7 @@
no_latejoin_prey_warning_persists = client.prefs_vr.no_latejoin_prey_warning_persists
belly_rub_target = client.prefs_vr.belly_rub_target
soulcatcher_pref_flags = client.prefs_vr.soulcatcher_pref_flags
persistend_edit_mode = client.prefs_vr.persistend_edit_mode
/mob/living/simple_mob/proc/set_name()
set name = "Set Name"

View File

@@ -86,6 +86,7 @@
var/no_latejoin_prey_warning_persists = FALSE //Do we save it?
var/belly_rub_target = null
var/soulcatcher_pref_flags = 0 //Default disabled
var/persistend_edit_mode = FALSE
var/voice_freq = 42500 // Preference for character voice frequency
var/emote_sound_mode = EMOTE_SOUND_VOICE_FREQ

View File

@@ -93,11 +93,14 @@
. = TRUE
if("b_egg_name")
var/new_egg_name = sanitize(params["val"], BELLIES_NAME_MAX, FALSE, TRUE, FALSE)
host.vore_selected.egg_name = new_egg_name
if(!new_egg_name)
host.vore_selected.egg_name = null
else
host.vore_selected.egg_name = new_egg_name
. = TRUE
if("b_egg_size")
var/new_egg_size = text2num(params["val"])
if(isnum(new_egg_size))
if(!isnum(new_egg_size))
return FALSE
if(new_egg_size == 0) //Disable.
host.vore_selected.egg_size = 0

View File

@@ -178,6 +178,7 @@
"egg_type" = selected.egg_type,
"egg_types" = GLOB.global_vore_egg_types,
"egg_name" = selected.egg_name,
"egg_name_length" = BELLIES_NAME_MAX,
"egg_size" = selected.egg_size,
"recycling" = selected.recycling,
"storing_nutrition" = selected.storing_nutrition,

View File

@@ -92,6 +92,7 @@
var/belly_rub_target = null
var/soulcatcher_pref_flags = 0
var/list/soulcatcher_prefs = list()
var/persistend_edit_mode = FALSE
var/list/belly_prefs = list()
var/vore_taste = "nothing in particular"
@@ -248,6 +249,7 @@
belly_rub_target = json_from_file["belly_rub_target"]
soulcatcher_pref_flags = json_from_file["soulcatcher_pref_flags"]
soulcatcher_prefs = json_from_file["soulcatcher_prefs"]
persistend_edit_mode = json_from_file["persistend_edit_mode"]
//Quick sanitize
if(isnull(digestable))
@@ -377,6 +379,8 @@
soulcatcher_pref_flags = 0
if(isnull(soulcatcher_prefs))
soulcatcher_prefs = list()
if(isnull(persistend_edit_mode))
persistend_edit_mode = FALSE
return TRUE
@@ -438,7 +442,8 @@
"no_latejoin_prey_warning_persists" = no_latejoin_prey_warning_persists,
"belly_rub_target" = belly_rub_target,
"soulcatcher_pref_flags" = soulcatcher_pref_flags,
"soulcatcher_prefs" = soulcatcher_prefs
"soulcatcher_prefs" = soulcatcher_prefs,
"persistend_edit_mode" = persistend_edit_mode
)
//List to JSON

View File

@@ -127,6 +127,7 @@
// General Data
data["unsaved_changes"] = unsaved_changes
data["active_tab"] = active_tab
data["persist_edit_mode"] = host.persistend_edit_mode
// Inisde Data
data["inside"] = get_inside_data(host)
@@ -228,6 +229,10 @@
show_pictures = !show_pictures
return TRUE
if("toggle_editmode_persistence")
host.persistend_edit_mode = !host.persistend_edit_mode
return TRUE
// Host is inside someone else, and is trying to interact with something else inside that person.
if("pick_from_inside")
return pick_from_inside(ui.user, params)

View File

@@ -1,4 +1,6 @@
import { Box, Button } from 'tgui-core/components';
import { useBackend } from 'tgui/backend';
import { Box, Button, Stack } from 'tgui-core/components';
import { type BooleanLike } from 'tgui-core/react';
export const VorePanelColorBox = (props: {
back_color: string;
@@ -34,16 +36,33 @@ export const VorePanelColorBox = (props: {
export const VorePanelEditToggle = (props: {
editMode: boolean;
persistEditMode: BooleanLike;
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
}) => {
const { editMode, toggleEditMode } = props;
const { act } = useBackend();
const { editMode, persistEditMode, toggleEditMode } = props;
return (
<Button
icon="pencil"
color={editMode ? 'green' : undefined}
tooltip={(editMode ? 'Dis' : 'En') + 'able edit mode'}
onClick={() => toggleEditMode(!editMode)}
/>
<Stack>
<Stack.Item>
<Button
icon="pencil"
selected={editMode}
tooltip={(editMode ? 'Dis' : 'En') + 'able edit mode.'}
onClick={() => toggleEditMode(!editMode)}
/>
</Stack.Item>
<Stack.Item>
<Button
icon={persistEditMode ? 'lock' : 'lock-open'}
selected={persistEditMode}
tooltip={
(persistEditMode ? 'Dis' : 'En') +
'able edit mode active on window opening.'
}
onClick={() => act('toggle_editmode_persistence')}
/>
</Stack.Item>
</Stack>
);
};

View File

@@ -28,6 +28,7 @@ export const VoreBellySelectionAndCustomization = (props: {
vore_words: Record<string, string[]>;
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
editMode: boolean;
persist_edit_mode: BooleanLike;
}) => {
const { act } = useBackend();
@@ -41,6 +42,7 @@ export const VoreBellySelectionAndCustomization = (props: {
vore_words,
toggleEditMode,
editMode,
persist_edit_mode,
} = props;
const [showSearch, setShowSearch] = useState(false);
@@ -138,6 +140,7 @@ export const VoreBellySelectionAndCustomization = (props: {
buttons={
<VorePanelEditToggle
editMode={editMode}
persistEditMode={persist_edit_mode}
toggleEditMode={toggleEditMode}
/>
}

View File

@@ -6,6 +6,7 @@ import {
Section,
Stack,
} from 'tgui-core/components';
import { type BooleanLike } from 'tgui-core/react';
import { noSelectionName } from '../constants';
import type { abilities, DropdownEntry, soulcatcherData } from '../types';
@@ -30,9 +31,16 @@ export const VoreSoulcatcher = (props: {
abilities: abilities;
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
editMode: boolean;
persist_edit_mode: BooleanLike;
}) => {
const { soulcatcher, our_bellies, abilities, toggleEditMode, editMode } =
props;
const {
soulcatcher,
our_bellies,
abilities,
toggleEditMode,
editMode,
persist_edit_mode,
} = props;
const getBellies = our_bellies.map((belly) => {
return { displayText: belly.name, value: belly.ref };
@@ -50,6 +58,7 @@ export const VoreSoulcatcher = (props: {
overlayBellies={locationNames}
toggleEditMode={toggleEditMode}
editMode={editMode}
persist_edit_mode={persist_edit_mode}
/>
</Stack.Item>
)}
@@ -66,10 +75,17 @@ const VoreSoulcatcherSection = (props: {
overlayBellies: DropdownEntry[];
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
editMode: boolean;
persist_edit_mode: BooleanLike;
}) => {
const { act } = useBackend();
const { soulcatcher, overlayBellies, toggleEditMode, editMode } = props;
const {
soulcatcher,
overlayBellies,
toggleEditMode,
editMode,
persist_edit_mode,
} = props;
const {
active,
@@ -112,6 +128,7 @@ const VoreSoulcatcherSection = (props: {
<Stack.Item>
<VorePanelEditToggle
editMode={editMode}
persistEditMode={persist_edit_mode}
toggleEditMode={toggleEditMode}
/>
</Stack.Item>

View File

@@ -1,5 +1,6 @@
import { useBackend } from 'tgui/backend';
import { Button, Section, Stack } from 'tgui-core/components';
import { type BooleanLike } from 'tgui-core/react';
import type { bellyData, generalPrefData } from '../types';
import { VoreUserPreferencesAesthetic } from '../VoreUserPreferencesTabs/VoreUserPreferencesAesthetic';
@@ -9,11 +10,18 @@ import { VoreUserPreferencesAesthetic } from '../VoreUserPreferencesTabs/VoreUse
export const VoreUserGeneral = (props: {
general_pref_data?: generalPrefData;
editMode: boolean;
persist_edit_mode: BooleanLike;
our_bellies: bellyData[];
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
}) => {
const { act } = useBackend();
const { general_pref_data, editMode, our_bellies, toggleEditMode } = props;
const {
general_pref_data,
editMode,
persist_edit_mode,
our_bellies,
toggleEditMode,
} = props;
return (
<Section fill>
@@ -22,6 +30,7 @@ export const VoreUserGeneral = (props: {
<Stack.Item grow>
<VoreUserPreferencesAesthetic
editMode={editMode}
persist_edit_mode={persist_edit_mode}
toggleEditMode={toggleEditMode}
active_belly={general_pref_data.active_belly}
belly_rub_target={general_pref_data.belly_rub_target}

View File

@@ -24,6 +24,7 @@ export const BellyOptionsRight = (props: {
egg_type,
egg_types,
egg_name,
egg_name_length,
egg_size,
recycling,
storing_nutrition,
@@ -32,6 +33,12 @@ export const BellyOptionsRight = (props: {
drainmode,
} = bellyOptionData;
const displayedEggName = editMode
? egg_name || ''
: egg_name
? egg_name
: 'Default';
return (
<LabeledList>
<LabeledList.Item label="Digest Brute Damage">
@@ -176,8 +183,8 @@ export const BellyOptionsRight = (props: {
action="set_attribute"
subAction="b_egg_name"
editMode={editMode}
limit={0}
entry={editMode ? egg_name : egg_name ? egg_name : 'Default'}
limit={egg_name_length}
entry={displayedEggName}
/>
</LabeledList.Item>
<LabeledList.Item label="Custom Egg Size">

View File

@@ -13,6 +13,7 @@ import { VorePanelEditSwitch } from '../VorePanelElements/VorePanelEditSwitch';
export const VoreUserPreferencesAesthetic = (props: {
editMode: boolean;
persist_edit_mode: BooleanLike;
toggleEditMode: React.Dispatch<React.SetStateAction<boolean>>;
active_belly: string | null;
our_bellies: bellyData[];
@@ -24,6 +25,7 @@ export const VoreUserPreferencesAesthetic = (props: {
}) => {
const {
editMode,
persist_edit_mode,
toggleEditMode,
active_belly,
belly_rub_target,
@@ -52,6 +54,7 @@ export const VoreUserPreferencesAesthetic = (props: {
buttons={
<VorePanelEditToggle
editMode={editMode}
persistEditMode={persist_edit_mode}
toggleEditMode={toggleEditMode}
/>
}

View File

@@ -156,6 +156,7 @@ export const VorePanel = () => {
const {
active_tab,
active_vore_tab,
persist_edit_mode,
inside,
our_bellies,
selected,
@@ -170,7 +171,7 @@ export const VorePanel = () => {
general_pref_data,
} = data;
const [editMode, setEditMode] = useState(false);
const [editMode, setEditMode] = useState(!!persist_edit_mode);
const tabs: (React.JSX.Element | null | undefined)[] = [];
@@ -185,6 +186,7 @@ export const VorePanel = () => {
vore_words={vore_words}
toggleEditMode={setEditMode}
editMode={editMode}
persist_edit_mode={persist_edit_mode}
/>
);
tabs[1] = our_bellies && soulcatcher && abilities && (
@@ -194,6 +196,7 @@ export const VorePanel = () => {
abilities={abilities}
toggleEditMode={setEditMode}
editMode={editMode}
persist_edit_mode={persist_edit_mode}
/>
);
tabs[2] = general_pref_data && our_bellies && (
@@ -202,6 +205,7 @@ export const VorePanel = () => {
our_bellies={our_bellies}
editMode={editMode}
toggleEditMode={setEditMode}
persist_edit_mode={persist_edit_mode}
/>
);
tabs[3] = prefs && (

View File

@@ -7,6 +7,7 @@ export type Data = {
show_pictures: BooleanLike;
icon_overflow: BooleanLike;
active_tab: number;
persist_edit_mode: BooleanLike;
host_mobtype: hostMob | null;
our_bellies?: bellyData[] | null;
selected?: selectedData | null;
@@ -115,7 +116,8 @@ export type bellyOptionData = {
contaminate_colors: string[] | null;
egg_type: string;
egg_types: string[];
egg_name: string;
egg_name: string | null;
egg_name_length: number;
egg_size: number;
recycling: BooleanLike;
storing_nutrition: BooleanLike;