feat: add UE4SS DLL runtime extension

This commit is contained in:
npc0-hue
2026-07-23 09:49:14 +08:00
parent 8e34c8762a
commit 1caf40565c
30 changed files with 1179 additions and 70 deletions
@@ -0,0 +1,75 @@
import type { GamePluginRuntimeProfilesResponse, RuntimeDLLExtensionProfileResponse } from "../api/types";
interface RuntimeDLLExtensionsPanelProps {
runtimeProfiles?: GamePluginRuntimeProfilesResponse;
embedded?: boolean;
}
export function RuntimeDLLExtensionsPanel({ runtimeProfiles, embedded = false }: RuntimeDLLExtensionsPanelProps) {
const extensions = runtimeProfiles?.dllExtensions ?? [];
if (extensions.length === 0) {
return null;
}
const content = <RuntimeDLLExtensionsContent extensions={extensions} />;
return embedded ? <section className="console-module" aria-label="UE4SS DLL extensions">{content}</section> : <article className="console-panel" aria-label="UE4SS DLL extensions">{content}</article>;
}
function RuntimeDLLExtensionsContent({ extensions }: { extensions: RuntimeDLLExtensionProfileResponse[] }) {
return (
<>
<div className="panel-header">
<h2>UE4SS DLL </h2>
<span className="page-status"></span>
</div>
<p className="page-status">Run DLL UE4SS SCUM </p>
<div className="console-record-list">
{extensions.map((extension) => (
<article key={extension.key} className="console-record">
<div className="console-record-head">
<strong>{extension.displayName}</strong>
<span className={extension.releaseState === "ready" ? "status-pill status-active" : "status-pill status-disabled"}>{extension.releaseState === "ready" ? "已固定发布" : "待发布"}</span>
</div>
<div className="console-record-meta">
<span>{extension.key}</span>
<span> {extension.version}</span>
</div>
<dl className="detail-list">
<div>
<dt></dt>
<dd>{releaseLocation(extension)}</dd>
</div>
<div>
<dt>DLL </dt>
<dd>{extension.checksum || "待发布后固定"}</dd>
</div>
<div>
<dt>SCUM </dt>
<dd>{extension.scumExecutableChecksum || "待发布后固定"}</dd>
</div>
<div>
<dt>UE4SS ABI</dt>
<dd>{extension.ue4ssAbi || "待发布后固定"}</dd>
</div>
</dl>
<div className="tag-list" aria-label={`${extension.displayName} activation policy`}>
<span></span>
<span>SCUM </span>
<span> UE4SS </span>
<span>{supportedTargets(extension)}</span>
<span>Linux </span>
</div>
{extension.releaseState === "unpublished" && <p className="page-status"> Run</p>}
</article>
))}
</div>
</>
);
}
function releaseLocation(extension: RuntimeDLLExtensionProfileResponse): string {
return [extension.releaseHost, extension.releaseFilename].filter((value): value is string => Boolean(value)).join(" / ") || "待发布";
}
function supportedTargets(extension: RuntimeDLLExtensionProfileResponse): string {
return extension.supportedTargets.map((target) => `${target.os} ${target.arch}`).join(", ") || "Windows amd64";
}