Open new instance in-game

This commit is contained in:
Natsumi
2025-08-27 20:09:32 +12:00
parent 60fd88a731
commit bb6faac54c
4 changed files with 32 additions and 7 deletions

View File

@@ -232,7 +232,11 @@
{{ t('dialog.world.actions.new_instance') }}
</el-dropdown-item>
<el-dropdown-item icon="el-icon-message" command="New Instance and Self Invite">
{{ t('dialog.world.actions.new_instance_and_self_invite') }}
{{
isGameRunning
? t('dialog.world.actions.new_instance_and_open_in_vrchat')
: t('dialog.world.actions.new_instance_and_self_invite')
}}
</el-dropdown-item>
<el-dropdown-item
v-if="

View File

@@ -135,7 +135,6 @@
"import": "Import",
"move_tooltip": "Move",
"copy_tooltip": "Copy",
"self_invite_tooltip": "Self Invite",
"unfavorite_tooltip": "Unfavorite",
"visibility_tooltip": "Change Visibility",
"rename_tooltip": "Rename",
@@ -908,6 +907,7 @@
"share": "Share",
"new_instance": "New Instance",
"new_instance_and_self_invite": "New Instance and Self Invite",
"new_instance_and_open_in_vrchat": "New Instance and Open in VRChat",
"make_home": "Make Home",
"reset_home": "Reset Home",
"show_previous_instances": "Show Previous Instances",

View File

@@ -5,9 +5,13 @@ import { $app } from '../app';
import { watchState } from '../service/watchState';
import { parseLocation } from '../shared/utils';
import { useInstanceStore } from './instance';
import { useGameStore } from './game';
import { useLaunchStore } from './launch';
export const useInviteStore = defineStore('Invite', () => {
const instanceStore = useInstanceStore();
const gameStore = useGameStore();
const launchStore = useLaunchStore();
const state = reactive({
editInviteMessageDialog: {
visible: false,
@@ -160,6 +164,12 @@ export const useInviteStore = defineStore('Invite', () => {
if (!L.isRealInstance) {
return;
}
if (gameStore.isGameRunning && !LINUX) {
const secureOrShortName =
args.json.shortName || args.json.secureName;
launchStore.tryOpenInstanceInVrc(location, secureOrShortName);
return;
}
instanceRequest
.selfInvite({
instanceId: L.instanceId,

View File

@@ -51,10 +51,14 @@
:content="$t('view.favorite.private')">
<i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
</el-tooltip>
<el-tooltip
placement="left"
:content="$t('view.favorite.self_invite_tooltip')"
:disabled="hideTooltips">
<el-tooltip placement="left" :disabled="hideTooltips">
<template #content>
{{
isGameRunning
? $t('dialog.world.actions.new_instance_and_open_in_vrchat')
: $t('dialog.world.actions.new_instance_and_self_invite')
}}
</template>
<el-button
size="mini"
icon="el-icon-message"
@@ -132,7 +136,13 @@
import { storeToRefs } from 'pinia';
import { computed, getCurrentInstance } from 'vue';
import { favoriteRequest } from '../../../api';
import { useAppearanceSettingsStore, useFavoriteStore, useInviteStore, useUiStore } from '../../../stores';
import {
useAppearanceSettingsStore,
useFavoriteStore,
useInviteStore,
useUiStore,
useGameStore
} from '../../../stores';
const props = defineProps({
group: [Object, String],
@@ -149,6 +159,7 @@
const { showFavoriteDialog } = useFavoriteStore();
const { newInstanceSelfInvite } = useInviteStore();
const { shiftHeld } = storeToRefs(useUiStore());
const { isGameRunning } = storeToRefs(useGameStore());
const isSelected = computed({
get: () => props.favorite.$selected,