This commit is contained in:
Steve Wang 2025-01-16 22:01:38 +08:00
commit 9666075c7e
58 changed files with 30811 additions and 0 deletions

269
.vitepress/cache/deps/@theme_index.js vendored Normal file
View File

@ -0,0 +1,269 @@
import {
useMediaQuery
} from "./chunk-A7UTJUSY.js";
import {
computed,
ref,
shallowRef,
watch
} from "./chunk-VJWGEPT5.js";
// node_modules/vitepress/dist/client/theme-default/index.js
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/fonts.css";
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/vars.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/base.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/icons.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/utils.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css";
import "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css";
import VPBadge from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import Layout from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/Layout.vue";
import { default as default2 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue";
import { default as default3 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue";
import { default as default4 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue";
import { default as default5 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue";
import { default as default6 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue";
import { default as default7 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue";
import { default as default8 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue";
import { default as default9 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue";
import { default as default10 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue";
import { default as default11 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue";
import { default as default12 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue";
import { default as default13 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue";
import { default as default14 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue";
import { default as default15 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue";
import { default as default16 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue";
import { default as default17 } from "D:/Project/sif2doc/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue";
// node_modules/vitepress/dist/client/theme-default/support/utils.js
import { withBase } from "vitepress";
// node_modules/vitepress/dist/client/theme-default/composables/data.js
import { useData as useData$ } from "vitepress";
var useData = useData$;
// node_modules/vitepress/dist/client/theme-default/support/utils.js
function ensureStartingSlash(path) {
return /^\//.test(path) ? path : `/${path}`;
}
// node_modules/vitepress/dist/client/theme-default/support/sidebar.js
function getSidebar(_sidebar, path) {
if (Array.isArray(_sidebar))
return addBase(_sidebar);
if (_sidebar == null)
return [];
path = ensureStartingSlash(path);
const dir = Object.keys(_sidebar).sort((a, b) => {
return b.split("/").length - a.split("/").length;
}).find((dir2) => {
return path.startsWith(ensureStartingSlash(dir2));
});
const sidebar = dir ? _sidebar[dir] : [];
return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
}
function getSidebarGroups(sidebar) {
const groups = [];
let lastGroupIndex = 0;
for (const index in sidebar) {
const item = sidebar[index];
if (item.items) {
lastGroupIndex = groups.push(item);
continue;
}
if (!groups[lastGroupIndex]) {
groups.push({ items: [] });
}
groups[lastGroupIndex].items.push(item);
}
return groups;
}
function addBase(items, _base) {
return [...items].map((_item) => {
const item = { ..._item };
const base = item.base || _base;
if (base && item.link)
item.link = base + item.link;
if (item.items)
item.items = addBase(item.items, base);
return item;
});
}
// node_modules/vitepress/dist/client/theme-default/composables/sidebar.js
function useSidebar() {
const { frontmatter, page, theme: theme2 } = useData();
const is960 = useMediaQuery("(min-width: 960px)");
const isOpen = ref(false);
const _sidebar = computed(() => {
const sidebarConfig = theme2.value.sidebar;
const relativePath = page.value.relativePath;
return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];
});
const sidebar = ref(_sidebar.value);
watch(_sidebar, (next, prev) => {
if (JSON.stringify(next) !== JSON.stringify(prev))
sidebar.value = _sidebar.value;
});
const hasSidebar = computed(() => {
return frontmatter.value.sidebar !== false && sidebar.value.length > 0 && frontmatter.value.layout !== "home";
});
const leftAside = computed(() => {
if (hasAside)
return frontmatter.value.aside == null ? theme2.value.aside === "left" : frontmatter.value.aside === "left";
return false;
});
const hasAside = computed(() => {
if (frontmatter.value.layout === "home")
return false;
if (frontmatter.value.aside != null)
return !!frontmatter.value.aside;
return theme2.value.aside !== false;
});
const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);
const sidebarGroups = computed(() => {
return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];
});
function open() {
isOpen.value = true;
}
function close() {
isOpen.value = false;
}
function toggle() {
isOpen.value ? close() : open();
}
return {
isOpen,
sidebar,
sidebarGroups,
hasSidebar,
hasAside,
leftAside,
isSidebarEnabled,
open,
close,
toggle
};
}
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
import { onContentUpdated } from "vitepress";
// node_modules/vitepress/dist/client/theme-default/composables/outline.js
import { getScrollOffset } from "vitepress";
var resolvedHeaders = [];
function getHeaders(range) {
const headers = [
...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")
].filter((el) => el.id && el.hasChildNodes()).map((el) => {
const level = Number(el.tagName[1]);
return {
element: el,
title: serializeHeader(el),
link: "#" + el.id,
level
};
});
return resolveHeaders(headers, range);
}
function serializeHeader(h) {
let ret = "";
for (const node of h.childNodes) {
if (node.nodeType === 1) {
if (node.classList.contains("VPBadge") || node.classList.contains("header-anchor") || node.classList.contains("ignore-header")) {
continue;
}
ret += node.textContent;
} else if (node.nodeType === 3) {
ret += node.textContent;
}
}
return ret.trim();
}
function resolveHeaders(headers, range) {
if (range === false) {
return [];
}
const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
return buildTree(headers, high, low);
}
function buildTree(data, min, max) {
resolvedHeaders.length = 0;
const result = [];
const stack = [];
data.forEach((item) => {
const node = { ...item, children: [] };
let parent = stack[stack.length - 1];
while (parent && parent.level >= node.level) {
stack.pop();
parent = stack[stack.length - 1];
}
if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) {
stack.push({ level: node.level, shouldIgnore: true });
return;
}
if (node.level > max || node.level < min)
return;
resolvedHeaders.push({ element: node.element, link: node.link });
if (parent)
parent.children.push(node);
else
result.push(node);
stack.push(node);
});
return result;
}
// node_modules/vitepress/dist/client/theme-default/composables/local-nav.js
function useLocalNav() {
const { theme: theme2, frontmatter } = useData();
const headers = shallowRef([]);
const hasLocalNav = computed(() => {
return headers.value.length > 0;
});
onContentUpdated(() => {
headers.value = getHeaders(frontmatter.value.outline ?? theme2.value.outline);
});
return {
headers,
hasLocalNav
};
}
// node_modules/vitepress/dist/client/theme-default/without-fonts.js
var theme = {
Layout,
enhanceApp: ({ app }) => {
app.component("Badge", VPBadge);
}
};
var without_fonts_default = theme;
export {
default2 as VPBadge,
default4 as VPButton,
default10 as VPDocAsideSponsors,
default5 as VPHomeContent,
default7 as VPHomeFeatures,
default6 as VPHomeHero,
default8 as VPHomeSponsors,
default3 as VPImage,
default9 as VPLink,
default11 as VPSocialLink,
default12 as VPSocialLinks,
default13 as VPSponsors,
default17 as VPTeamMembers,
default14 as VPTeamPage,
default16 as VPTeamPageSection,
default15 as VPTeamPageTitle,
without_fonts_default as default,
useLocalNav,
useSidebar
};
//# sourceMappingURL=@theme_index.js.map

File diff suppressed because one or more lines are too long

40
.vitepress/cache/deps/_metadata.json vendored Normal file
View File

@ -0,0 +1,40 @@
{
"hash": "87f45689",
"configHash": "d481fe34",
"lockfileHash": "0b128aab",
"browserHash": "950dacc1",
"optimized": {
"vue": {
"src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "4c0be7ad",
"needsInterop": false
},
"vitepress > @vue/devtools-api": {
"src": "../../../node_modules/@vue/devtools-api/dist/index.js",
"file": "vitepress___@vue_devtools-api.js",
"fileHash": "ec428db7",
"needsInterop": false
},
"vitepress > @vueuse/core": {
"src": "../../../node_modules/@vueuse/core/index.mjs",
"file": "vitepress___@vueuse_core.js",
"fileHash": "7c1b63fa",
"needsInterop": false
},
"@theme/index": {
"src": "../../../node_modules/vitepress/dist/client/theme-default/index.js",
"file": "@theme_index.js",
"fileHash": "663020ff",
"needsInterop": false
}
},
"chunks": {
"chunk-A7UTJUSY": {
"file": "chunk-A7UTJUSY.js"
},
"chunk-VJWGEPT5": {
"file": "chunk-VJWGEPT5.js"
}
}
}

9358
.vitepress/cache/deps/chunk-A7UTJUSY.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

12542
.vitepress/cache/deps/chunk-VJWGEPT5.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

3
.vitepress/cache/deps/package.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"type": "module"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,569 @@
import {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsElement,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
breakpointsVuetifyV2,
breakpointsVuetifyV3,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
directiveHooks,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
promiseTimeout,
provideLocal,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
timestamp,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
} from "./chunk-A7UTJUSY.js";
import "./chunk-VJWGEPT5.js";
export {
DefaultMagicKeysAliasMap,
StorageSerializers,
TransitionPresets,
assert,
computedAsync as asyncComputed,
refAutoReset as autoResetRef,
breakpointsAntDesign,
breakpointsBootstrapV5,
breakpointsElement,
breakpointsMasterCss,
breakpointsPrimeFlex,
breakpointsQuasar,
breakpointsSematic,
breakpointsTailwind,
breakpointsVuetify,
breakpointsVuetifyV2,
breakpointsVuetifyV3,
bypassFilter,
camelize,
clamp,
cloneFnJSON,
computedAsync,
computedEager,
computedInject,
computedWithControl,
containsProp,
computedWithControl as controlledComputed,
controlledRef,
createEventHook,
createFetch,
createFilterWrapper,
createGlobalState,
createInjectionState,
reactify as createReactiveFn,
createReusableTemplate,
createSharedComposable,
createSingletonPromise,
createTemplatePromise,
createUnrefFn,
customStorageEventName,
debounceFilter,
refDebounced as debouncedRef,
watchDebounced as debouncedWatch,
defaultDocument,
defaultLocation,
defaultNavigator,
defaultWindow,
directiveHooks,
computedEager as eagerComputed,
executeTransition,
extendRef,
formatDate,
formatTimeAgo,
get,
getLifeCycleTarget,
getSSRHandler,
hasOwn,
hyphenate,
identity,
watchIgnorable as ignorableWatch,
increaseWithUnit,
injectLocal,
invoke,
isClient,
isDef,
isDefined,
isIOS,
isObject,
isWorker,
makeDestructurable,
mapGamepadToXbox360Controller,
noop,
normalizeDate,
notNullish,
now,
objectEntries,
objectOmit,
objectPick,
onClickOutside,
onKeyDown,
onKeyPressed,
onKeyStroke,
onKeyUp,
onLongPress,
onStartTyping,
pausableFilter,
watchPausable as pausableWatch,
promiseTimeout,
provideLocal,
rand,
reactify,
reactifyObject,
reactiveComputed,
reactiveOmit,
reactivePick,
refAutoReset,
refDebounced,
refDefault,
refThrottled,
refWithControl,
resolveRef,
resolveUnref,
set,
setSSRHandler,
syncRef,
syncRefs,
templateRef,
throttleFilter,
refThrottled as throttledRef,
watchThrottled as throttledWatch,
timestamp,
toReactive,
toRef,
toRefs,
toValue,
tryOnBeforeMount,
tryOnBeforeUnmount,
tryOnMounted,
tryOnScopeDispose,
tryOnUnmounted,
unrefElement,
until,
useActiveElement,
useAnimate,
useArrayDifference,
useArrayEvery,
useArrayFilter,
useArrayFind,
useArrayFindIndex,
useArrayFindLast,
useArrayIncludes,
useArrayJoin,
useArrayMap,
useArrayReduce,
useArraySome,
useArrayUnique,
useAsyncQueue,
useAsyncState,
useBase64,
useBattery,
useBluetooth,
useBreakpoints,
useBroadcastChannel,
useBrowserLocation,
useCached,
useClipboard,
useClipboardItems,
useCloned,
useColorMode,
useConfirmDialog,
useCounter,
useCssVar,
useCurrentElement,
useCycleList,
useDark,
useDateFormat,
refDebounced as useDebounce,
useDebounceFn,
useDebouncedRefHistory,
useDeviceMotion,
useDeviceOrientation,
useDevicePixelRatio,
useDevicesList,
useDisplayMedia,
useDocumentVisibility,
useDraggable,
useDropZone,
useElementBounding,
useElementByPoint,
useElementHover,
useElementSize,
useElementVisibility,
useEventBus,
useEventListener,
useEventSource,
useEyeDropper,
useFavicon,
useFetch,
useFileDialog,
useFileSystemAccess,
useFocus,
useFocusWithin,
useFps,
useFullscreen,
useGamepad,
useGeolocation,
useIdle,
useImage,
useInfiniteScroll,
useIntersectionObserver,
useInterval,
useIntervalFn,
useKeyModifier,
useLastChanged,
useLocalStorage,
useMagicKeys,
useManualRefHistory,
useMediaControls,
useMediaQuery,
useMemoize,
useMemory,
useMounted,
useMouse,
useMouseInElement,
useMousePressed,
useMutationObserver,
useNavigatorLanguage,
useNetwork,
useNow,
useObjectUrl,
useOffsetPagination,
useOnline,
usePageLeave,
useParallax,
useParentElement,
usePerformanceObserver,
usePermission,
usePointer,
usePointerLock,
usePointerSwipe,
usePreferredColorScheme,
usePreferredContrast,
usePreferredDark,
usePreferredLanguages,
usePreferredReducedMotion,
usePrevious,
useRafFn,
useRefHistory,
useResizeObserver,
useScreenOrientation,
useScreenSafeArea,
useScriptTag,
useScroll,
useScrollLock,
useSessionStorage,
useShare,
useSorted,
useSpeechRecognition,
useSpeechSynthesis,
useStepper,
useStorage,
useStorageAsync,
useStyleTag,
useSupported,
useSwipe,
useTemplateRefsList,
useTextDirection,
useTextSelection,
useTextareaAutosize,
refThrottled as useThrottle,
useThrottleFn,
useThrottledRefHistory,
useTimeAgo,
useTimeout,
useTimeoutFn,
useTimeoutPoll,
useTimestamp,
useTitle,
useToNumber,
useToString,
useToggle,
useTransition,
useUrlSearchParams,
useUserMedia,
useVModel,
useVModels,
useVibrate,
useVirtualList,
useWakeLock,
useWebNotification,
useWebSocket,
useWebWorker,
useWebWorkerFn,
useWindowFocus,
useWindowScroll,
useWindowSize,
watchArray,
watchAtMost,
watchDebounced,
watchDeep,
watchIgnorable,
watchImmediate,
watchOnce,
watchPausable,
watchThrottled,
watchTriggerable,
watchWithFilter,
whenever
};
//# sourceMappingURL=vitepress___@vueuse_core.js.map

View File

@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

343
.vitepress/cache/deps/vue.js vendored Normal file
View File

@ -0,0 +1,343 @@
import {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBaseVNode,
createBlock,
createCommentVNode,
createElementBlock,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
} from "./chunk-VJWGEPT5.js";
export {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBlock,
createCommentVNode,
createElementBlock,
createBaseVNode as createElementVNode,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
};
//# sourceMappingURL=vue.js.map

7
.vitepress/cache/deps/vue.js.map vendored Normal file
View File

@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

45
.vitepress/config.mts Normal file
View File

@ -0,0 +1,45 @@
import { defineConfig } from 'vitepress'
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "Sif 2",
description: "A Sif2 Server and Client Documents",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: '用户指南', link: '/docs/user_guide/client_docs' },
{ text: '服务器指南', link: '/docs/dev_guide/introduction' }
],
sidebar: {
'/docs/user_guide/': [
{
text: '游戏用户指南',
items: [
{ text: '游戏内使用说明', link: '/docs/user_guide/client_docs' },
{ text: 'WebUI使用说明', link: '/docs/user_guide/user_webui' },
{ text: '游戏相关信息', link: '/docs/user_guide/game_info' },
]
}
],
'/docs/dev_guide/': [
{
text: '服务器指南',
items: [
{ text: '介绍', link: '/docs/dev_guide/introduction' },
{
text: '安装',
items: [
{ text: 'Windows', link: '/docs/dev_guide/installation/windows' },
{ text: 'Linux', link: '/docs/dev_guide/installation/linux' },
{ text: 'docker', link: '/docs/dev_guide/installation/docker' },
],
},
{ text: 'WebUI', link: '/docs/dev_guide/WebUI' },
{ text: '环境变量和命令行参数', link: '/docs/dev_guide/variable-argument' },
]
}
]
},
}
})

118
docs/dev_guide/WebUI.md Normal file
View File

@ -0,0 +1,118 @@
# WebUI
本节对服务器的WebUI进行介绍。
## 启用和禁用WebUI
如需禁用WebUI请在服务器启动时添加如下参数:
- Windows在命令行启动时使用`--hidden`,如下所示:
```
ew.exe --port 8080 --path ./data/ --hidden
```
- Linux在命令行启动时使用`--hidden`,如下所示:
```
ew --port 8080 --path ./data/ --hidden
```
- Docker在启动时将`HIDDEN`环境变量设置为`true`,如下所示:
```
docker run -d \
--name sif2 \
-p 8080:8080 \
-p 8000:8000 \
-e HIDDEN=true \
-v ./data:/data \
-v ./asset:/asset \
zhushenwudi/lovelive-sif2:1.0.1
```
## WebUI的使用
### 端口号
WebUI的默认端口号为`8080`
如需更改其端口号,请在服务器启动时使用如下参数。
- Windows在命令行启动时使用`--port <PORT>`,如将端口号改为`12345`,如下所示:
```
ew.exe --port 12345 --path ./data/
```
- Linux在命令行启动时使用`--port <PORT>`,如将端口号改为`12345`,如下所示:
```
ew --port 12345 --path ./data/
```
- Docker在启动时将端口映射修改为所需端口号如将端口号改为`12345`,如下所示:
```
docker run \
--name sif2 \
-p 12345:8080 \
-p 8000:8000 \
-v ./data:/data \
-v ./asset:/asset \
zhushenwudi/lovelive-sif2:1.0.1
```
### 主界面
WebUI的界面如下图所示
![WebUI主界面](../image/webui_mainwindows.png)
其中包括个人账户登录和导入用户数据和查看帮助等相关信息。
### 个人账户登录及其设置
在主页面输入SIF2 ID和数据迁移密钥即可登录到个人账户设置页面。界面如下图所示
![用户账户设置](../image/webui_login_setting.png)
其中包括导出用户数据,登出,设置登录奖励列表和设置服务器时间。
#### 导出用户数据
点击导出用户数据,会下载四个文件,这四个文件保存着用户数据,可以在导入用户数据时使用。
#### 登出
点击登出按钮,即可返回登录界面
#### 设置登录奖励列表
你可以增加登录奖励或删除登录奖励。
登录奖励的id的列表请自行查阅。
#### 设置服务器时间
该服务器时间只适用于当前登录账户,你可以更改服务器时间以更改当前卡池和当前活动。
服务器时间的输入可以使用`YYYY/MM/DD`形式假如你想将时间修改为2023年11月1日则输入`2023/11/01`即可。
:::tip 参考
1. 可以使用命令行参数`--disable-exports`或环境变量`DISABLE_EXPORTS`禁止服务器导出数据。
2. SIF2 ID和数据迁移密钥的获取请参考[XX](https://example.com)。
:::
### 导入用户数据
导入用户数据为在新的服务器上导入其他服务器的数据。界面如下图所示:
![导入用户数据](../image/webui_import_user_data.png)
选择服务器到处的四个文件和输入对应的数据迁移密钥,点击提交后即可将其他服务器的数据导入到新的服务器。
::: tip 参考
1. 可以使用命令行参数`--disable-imports`或环境变量`DISABLE_IMPORTS`禁止服务器导入数据。
2. 数据迁移密钥的获取可以参考[XX](https://example.com)。
:::
### 帮助页面
帮助页面如下图所示:
![帮助页面](../image/webui_help.jpeg)
帮助页面包括服务器的相关介绍和应用的下载和相关配置。
::: tip 参考
1. 使用命令行参数`--global-android <GLOBAL_ANDROID>``--japan-android <JAPAN_ANDROID>``--global-ios <GLOBAL_IOS>``--japan-ios <JAPAN_IOS>`或环境变量`ANDROID_GLOABL``ANDROID_JAPAN``IOS_GLOBAL``IOS_JAPAN`设置帮助界面中的应用下载地址。
2. 使用命令行参数`--assets-url <ASSETS_URL>`或环境变量`ASSET_URL`设置帮助页面中显示的“Assets URL”。
![帮助页面注意事项](../image/webui_help_info.png)
3. 如何获取预打补丁的apk安装包和ios安装包请参考[XX](https://example.com)
:::

View File

@ -0,0 +1 @@
# 游戏资源服务器配置

View File

@ -0,0 +1,40 @@
# Docker
Docker镜像中继承了ew服务器因此无需额外安装ew服务器。
::: tip 注意
Docker 是一个开源的平台用于开发、交付和运行应用程序。在使用Docker部署时以假定使用者已经掌握如何运维一台服务器同时对容器化的概念和Docker的基础操作有一定了解。否则请使用其他更加简单的部署方式。
:::
:::tip 注意
本节并未提及如何配置游戏资源服务器,如需配置资源服务器请参考[XX](https://example.com)。
:::
## 获取镜像
```
docker pull zhushenwudi/lovelive-sif2:1.0.1
```
## 运行ew服务器
::: tip 注意
1. ew服务器的游戏端口默认为`8080`,资源服务器端口默认为`8000`
2. ew服务器的数据存储位置默认为`/data`,本地路径默认为`./data`
3. ew服务器的游戏资源存储位置默认为`/asset`,本地路径默认为`./asset`
:::
使用docker运行ew服务器以下是一个典型的示例
```
docker run -d \
--name sif2 \
-p 8080:8080 \
-p 8000:8000 \
-v ./data:/data \
-v ./asset:/asset \
zhushenwudi/lovelive-sif2:1.0.1
```
查看状态:
```
docker container stats sif2
```
::: tip 参考
docker的环境变量请参考[环境变量和命令行参数](../variable-argument.md)
:::

View File

@ -0,0 +1,74 @@
# Linux
本节介绍如何在Linux上安装ew。
:::tip 注意
本节并未提及如何配置游戏资源服务器,如需配置资源服务器请参考[XX](https://example.com)。
:::
## 方式一:使用二进制程序
### 下载二进制程序
从[XX](https://example.com)下载适用于Linux的二进制文件。
### 运行ew
在当前目录下使用命令行,以下是一个典型的运行示例:
```
./ew --port 8080 --path ./data/ --max_time 1736076211
```
::: tip 注意
具体的命令行参数可以在[环境变量和命令行参数](../variable-argument.md)或者使用
```
./ew --help
```
查看。
:::
## 方式二:从源代码编译
### 下载源代码
从[XX](https://example.com)下载或git克隆源代码。
### 编译源代码
#### 构建说明
1. 安装以下依赖
- [Perl](https://www.perl.org/)
- [Rust](https://www.rust-lang.org/)
- [Node.js](https://nodejs.org/)
- libssl-dev
:::tip 注意
在Ubuntu发行版中安装 **Perl****libssl-dev** 可以使用以下命令安装:
```
apt install -y perl libssl-dev
```
其他的Linux发行版请参照其包管理说明或者自行编译安装。
:::
1. 构建WebUI
```
cd webui
npm install
npm run build
```
1. 构建ew服务器
- Debug模式
```
cargo build
```
- Release模式
```
cargo build --release
```
构建完成的二进制文件`ew`在源代码根目录下的`target/debug``target/release`中。可以将其移动到你想存储的位置。
### 运行ew
在当前目录下使用命令行,以下是一个典型的运行示例:
```
./ew --port 8080 --path ./data/ --max_time 1736076211
```
::: tip 注意
具体的命令行参数可以在[环境变量和命令行参数](../variable-argument.md)或者使用
```
./ew --help
```
查看。
:::

View File

@ -0,0 +1,66 @@
# Windows
本节介绍如何在Windows上安装ew。
:::tip 注意
本节并未提及如何配置游戏资源服务器,如需配置资源服务器请参考[XX](https://example.com)。
:::
## 方式一:使用二进制程序
### 下载二进制程序
从[XX](https://example.com)下载适用于Windows的二进制文件。
### 运行ew
在当前目录下打开CMD或者PowerShell以下是一个典型的运行示例
```
ew.exe --port 8080 --path ./data/ --max_time 1736076211
```
::: tip 注意
具体的命令行参数可以在[环境变量和命令行参数](https://example.com)或者使用
```
ew.exe --help
```
查看。
:::
## 方式二:从源代码编译
### 下载源代码
从[XX](https://example.com)下载或git克隆源代码。
### 编译源代码
#### 构建说明
1. 安装以下依赖
- [Perl (StrawberryPerl)](https://strawberryperl.com/)
- [Rust](https://www.rust-lang.org/)
- [Node.js](https://nodejs.org/)
1. 构建WebUI
```
cd webui
npm install
npm run build
```
1. 构建ew服务器
- Debug模式
```
cargo build
```
- Release模式
```
cargo build --release
```
构建完成的二进制文件`ew.exe`在源代码根目录下的`target/debug``target/release`中。可以将其移动到你想存储的位置。
### 运行ew
在当前目录下打开CMD或者PowerShell以下是一个典型的运行示例
```
ew.exe --port 8080 --path ./data/ --max_time 1736076211
```
::: tip 注意
具体的命令行参数可以在[环境变量和命令行参数](../variable-argument.md)或者使用
```
ew.exe --help
```
查看。
:::

View File

@ -0,0 +1,16 @@
# 介绍
本用户文档对如何搭建和使用 **Love Live! 学园偶像祭2 MIRACLE LIVE!** 的服务器,以及对如何使用其客户端进行说明。
你可以通过本节对该用户文档的内容进行快速浏览。
## 起步
本章对服务器的下载和安装进行介绍。
### 下载和安装
该节介绍了如何在Windows、Linux以及Docker中安装和运行ew服务器。
## 使用说明
这一章对服务器和客户端的详细使用进行了介绍,大部分遇到的问题都可以在本章中获得解答。

View File

@ -0,0 +1,18 @@
# 获取和安装预打补丁的游戏安装包
## iOS
得益于Discord的Triangle你只需下载对应的ipa文件即可。然后将该ipa文件侧载安装手机上即可。
- [国际服](https://arasfon.ru/direct/lovelive/sif2/patched-clients/ios/sif2_gl.ipa)
- [日服](https://arasfon.ru/direct/lovelive/sif2/patched-clients/ios/sif2_jp.ipa)
## Android
获取Android的预打补丁的游戏安装包较为麻烦下面将详细介绍如何获取游戏安装包。
### 获取原版游戏安装包
你需要先获取原版的游戏安装包,你可以从下面的链接中获取原版的游戏安装包。
- [国际服](https://example.com)
- [日服](https://example.com)
### 给原版安装包打补丁

View File

@ -0,0 +1,92 @@
# 环境变量和命令行参数
## 介绍
### Docker环境变量
`HTTPS`是否开启https默认: false
`ENABLE_ASSET_SERVER`:是否开启资源服务器。
`NPPS4_ADDRESS`Sif NPPS4服务器地址默认: “127.0.0.1:51376”
`MAXTIME`:服务器默认时间(默认: 1736076211该时间最大不可超过官方停服时间
`HIDDEN`隐藏WeiUI默认: false
`DISABLE_IMPORTS`禁止导入账户默认false
`DISABLE_EXPORTS`禁止导出账户默认false
`ANDROID_JAPAN`帮助页面显示链接到该服务器的日服android应用下载地址。
`ANDROID_GLOABL`帮助页面显示链接到该服务器的国际服android应用下载地址。
`IOS_JAPAN`帮助页面显示链接到该服务器的的日服ios应用下载地址。
`IOS_GLOBAL`帮助页面显示链接到该服务器的国际服ios应用下载地址。
`ASSET_URL`:帮助页面显示的游戏资源下载地址。
### 命令行参数
::: tip 注意
本节所列的变量有可能已经过时,可以通过`ew --help`查看所支持的参数,环境变量与之对应。
:::
`--port <PORT>`: 服务器监听端口(默认: 8080)
`--asset-port <ASSET_PORT>`: 资源服务器监听端口(默认: 8000)
`--path <PATH>`: 数据库存放位置(默认: "./data/")
`--asset-path <ASSET_PATH>`: 游戏资源存放位置(默认: "./asset/")
`--enable-asset-server`: 开启资源服务器。
`--https`: 开启https。
`--npps4 <NPPS4>`: Sif NPPS4服务器地址用于sif的账户连接(默认:"127.0.0.1:51376")
`--global-android <GLOBAL_ANDROID>`: 帮助页面显示链接到该服务器的国际服android应用下载地址。
`--japan-android <JAPAN_ANDROID>`: 帮助页面显示链接到该服务器的日服android应用下载地址。
`--global-ios <GLOBAL_IOS>`: 帮助页面显示链接到该服务器的国际服ios应用下载地址。
`--japan-ios <JAPAN_IOS>`: 帮助页面显示链接到该服务器的的日服ios应用下载地址。
`--assets-url <ASSETS_URL>`: 帮助页面显示的游戏资源下载地址。
`--max-time <MAX_TIME>`: 服务器默认的初始时间,以时间戳形式返回。(该时间最大不可超过官方停服时间)
`--hidden`: 隐藏Web界面。
`--purge`: 在启动服务器时,清理死亡账户。(死亡账户为账户中无任何卡片)
`--disable-imports`: 禁止账户导入功能。
`--disable-exports`: 禁止账户导出功能。
`--en-ios-asset-hash <EN_IOS_ASSET_HASH>`: 国际服ios客户端资源的hash。
`--jp-ios-asset-hash <JP_IOS_ASSET_HASH>`: 日服ios客户端资源的hash。
`--en-android-asset-hash <EN_ANDROID_ASSET_HASH>`: 国际服android客户端资源的hash。
`--jp-android-asset-hash <JP_ANDROID_ASSET_HASH>`: 日服android客户端资源的hash。
## 如何设置
### Docker
使用`-e`指定环境变量下例为设置服务器默认时间为1736076200:
```
docker run -d \
--name sif2 \
-p 8080:8080 \
-p 8000:8000 \
-e MAXTIME=1736076200 \
-v ./data:/data \
-v ./asset:/asset \
zhushenwudi/lovelive-sif2:1.0.1
```

BIN
docs/image/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

BIN
docs/image/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
docs/image/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

BIN
docs/image/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

BIN
docs/image/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
docs/image/14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

BIN
docs/image/15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

BIN
docs/image/16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

BIN
docs/image/17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
docs/image/18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
docs/image/19.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
docs/image/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
docs/image/20.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
docs/image/21.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
docs/image/22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
docs/image/23.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/image/24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
docs/image/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
docs/image/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
docs/image/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
docs/image/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
docs/image/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
docs/image/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
docs/image/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 KiB

BIN
docs/image/webui_help.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,84 @@
---
outline: deep
---
# 游戏内使用说明
## iOS准备工作
安装应用后需要进行一定的设置才可以进入游戏。
1. 打开手机设置下滑找到APP。
![设置](../image/10.png)
2. 进入APP下滑找到スクフェス
![APP](../image/11.png)
3. 进入スクフェス下滑找到Server URL和Assets URL。
![スクフェス2](../image/12.png)
4. 填入服务器网址和资源服务器网址。
## 通用操作
### 查看Sif2 ID
1. 在游戏主界面,点击右上角的菜单。
![主界面](../image/1.png)
2. 点击 **プロフィール**
![菜单界面](../image/2.png)
3. 页面下方的即为Sif2 ID。
![profile](../image/3.png)
### 设置数据迁移密钥
1. 在游戏主界面,点击右上角的菜单。
![主界面](../image/1.png)
2. 点击 **データ引き継ぎ**
![菜单](../image/4.png)
3. 点击 **データ引き継ぎ**
![データ引き継ぎ](../image/5.png)
4. 上面的 **引き継ぎID** 为数据迁移ID下面的 **パスワード** 即为需要设置的数据迁移密钥。
![引き継ぎID](../image/6.png)
5. 点击 **次へ** 确定。
### 迁移数据
#### 同一服务器不同设备迁移数据
1. 确保不同设备使用的服务器为同一服务器。
2. 打开游戏,点击右上角的菜单。
![待机界面](../image/13.png)
3. 点击 **データ引き継ぎ**
![菜单](../image/14.png)
4. 点击 **データ引き継ぎ**
![データ引き継ぎ](../image/15.png)
5. 在上面的 **引き継ぎID** 输入数据迁移ID在下面的 **パスワード** 输入数据迁移密钥。
![引き継ぎID](../image/16.png)
6. 点击 **次へ** 确定。
#### 跨服迁移数据
跨服迁移数据需要原服务器开启导出用户数据,目标服务器开启导入用户数据。具体操作如下:
[跨服迁移数据](./user_webui#跨服迁移数据)
### 获得Loveca、金币等道具的方式
1. 在游戏主界面,点击右上角的菜单。
![主界面](../image/1.png)
2. 点击 **シリアルコード**
![菜单](../image/7.png)
3. 点击 **シリアルコード入力**
![シリアルコード](../image/8.png)
4. 输入兑换码点击OK即可兑换。
![シリアルコード入力](../image/9.png)
::: tip 注意
兑换码格式为兑换码种类+数量,例如:
coins5000表示兑换5000金币。
:::
::: danger 注意
输入任何兑换码后,兑换完成显示的图标均为金币图标。
:::
#### 兑换码详情
- coins金币。
- gemsLoveca。
- training课程笔记和技能书
- UR活动UR。
- PT招募pt。

View File

@ -0,0 +1,24 @@
---
outline: deep
---
# 游戏相关信息
本页面提供了游戏的相关信息,以供参考。
## 游戏开服时间和停服时间
- 日服:
**开服时间** 2023年4月15日
**停服时间** 2024年3月31日
- 国际服:
**开服时间** 2024年2月1日
**停服时间** 2024年5月31日
## 游戏活动列表
游戏活动的开始和结束时间可以参考[LLwiki](https://llwiki.org/zh/LoveLive!%E5%AD%A6%E5%9B%AD%E5%81%B6%E5%83%8F%E7%A5%AD2_MIRACLE_LIVE!%E6%B4%BB%E5%8A%A8%E5%88%97%E8%A1%A8)。

View File

@ -0,0 +1,51 @@
---
outline: deep
---
# WebUI使用说明
## 进入WebUI
1. 确保服务器已开启WebUI是否开启可询问服主
2. 使用服主提供的服务器网址即可进入WebUI。
## WebUI使用
### 主界面
WebUI的界面如下图所示
![WebUI](../image/17.png)
其中包括个人账户登录和导入用户数据和查看帮助等相关信息。
### 个人账户登录
在主页面输入SIF2 ID和数据迁移密钥即可登录到个人账户设置页面。界面如下图所示
![WebUI_user](../image/18.png)
### 更改登录奖励
在WebUI个人设置界面的 **当前登录奖励列表** 中添加登录奖励的id即可登录奖励id的信息请自行查阅。
![登录奖励](../image/19.png)
### 更改游戏服务器时间
在WebUI个人设置界面的 **服务器时间** 中输入时间,即可更改服务器时间,跳转到指定活动或卡池。
![服务器时间](../image/20.png)
服务器时间的格式为yyyy/MM/dd HH:mm:ss。
例如输入2023/12/01 22:30:30表示服务器时间更改为2023年12月1日23时30分30秒。
::: tip 注意
服务器时间可以只输入到日期这时默认为该日期0时0分0秒。
时间的输入请使用24小时制。
活动及卡池信息请自行在wiki查找。
:::
### 跨服迁移数据
1. 确保服务器开启了 **WebUI**、**导出用户数据** 和 **导入用户数据**
2. 在导出服务器上进入个人账户设置界面。
3. 在导出服务器上的个人账户设置界面点击右上角的 **导出用户数据**
![导出用户数据](../image/21.png)
4. 你会获得四个文件,这四个文件即为用户数据文件。
![用户数据文件](../image/22.png)
5. 在导入服务器的WebUI主页面点击 **导入用户数据**
![导入用户数据](../image/23.png)
6. 选择导出的四个文件,输入数据迁移密钥,点击提交,即可导入用户数据。
![导入数据](../image/24.png)
1. 在游戏中进行数据迁移,方法为[同一服务器不同设备迁移数据](./client_docs#同一服务器不同设备迁移数据)。

18
index.md Normal file
View File

@ -0,0 +1,18 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "Love Live! 学园偶像祭2 MIRACLE LIVE!"
text: "用户指南和服务器指南"
tagline:
actions:
- theme: brand
text: 用户指南
link: /docs/user_guide/client_docs
- theme: alt
text: 服务器指南
link: /docs/dev_guide/introduction

2484
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

10
package.json Normal file
View File

@ -0,0 +1,10 @@
{
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",
"docs:preview": "vitepress preview"
},
"devDependencies": {
"vitepress": "^1.5.0"
}
}