feat(admin): items_base browser and AdminPageShell on core pages
CI / check (push) Successful in 21s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 59s
CI / deploy (push) Failing after 9s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-30 20:41:31 +02:00
1 parent 7138ae4445
commit 98613af875
42 files changed
+1578 -80

No files matched your search

File diff suppressed because it is too large. Load diff
+12 -9
View File
@@ -1,6 +1,8 @@
import { Newspaper } from "lucide-react";
import Link from "next/link";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { ArticleCard } from "@/components/admin/article-card";
import { StatusCard } from "@/components/admin/dashboard";
import { Button } from "@/components/ui/button";
@@ -56,17 +58,18 @@ export default async function AdminArticles({
: "—";
return (
<main>
<div className="flex justify-end mb-6">
<AdminPageShell
icon={Newspaper}
title={t("title")}
subtitle={t("subtitle")}
actions={
<Button variant="default" asChild>
<Link href="/admin/articles/new">{t("newArticle")}</Link>
</Button>
</div>
}
>
{error ? (
<p className="text-xs text-[var(--admin-error)] dark:text-[var(--admin-error)] mb-4">
Error: {error}
</p>
<p className="text-xs text-[var(--admin-error)] mb-4">Error: {error}</p>
) : null}
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5 mb-6">
@@ -83,7 +86,7 @@ export default async function AdminArticles({
/>
</div>
<section className="mt-6">
<section className="mt-2">
<h2 className="admin-section-title">{t("recentArticles")}</h2>
{articles.length === 0 ? (
<div className="admin-empty">{t("noArticles")}</div>
@@ -102,6 +105,6 @@ export default async function AdminArticles({
</div>
)}
</section>
</main>
</AdminPageShell>
);
}
+8
View File
@@ -1,4 +1,7 @@
import { Store } from "lucide-react";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { CatalogTree } from "@/components/admin/catalog-tree";
import { Prisma } from "@/generated/prisma/client";
import { calcPagination, parseListParams } from "@/lib/admin-helpers";
@@ -23,6 +26,7 @@ export default async function CatalogPagesPage({
}
const canEdit = canAccess(permissions, PERMS.CATALOG_EDIT, session.user.rank);
const t = await getTranslations("pages.admin.catalog");
const params = await searchParams;
const sp = new URLSearchParams(params);
@@ -200,6 +204,7 @@ export default async function CatalogPagesPage({
}
return (
<AdminPageShell icon={Store} title={t("title")} subtitle={t("subtitle")}>
<div className="space-y-6">
<div className="flex items-center justify-between">
<p className="text-muted-foreground">
@@ -244,6 +249,7 @@ export default async function CatalogPagesPage({
/>
)}
</div>
</AdminPageShell>
);
}
@@ -396,6 +402,7 @@ export default async function CatalogPagesPage({
}
return (
<AdminPageShell icon={Store} title={t("title")} subtitle={t("subtitle")}>
<div className="space-y-6">
<div className="flex items-center justify-between">
<p className="text-muted-foreground">
@@ -434,5 +441,6 @@ export default async function CatalogPagesPage({
<CatalogTable data={{ rows, ...pagination }} canEdit={canEdit} />
)}
</div>
</AdminPageShell>
);
}
+21 -5
View File
@@ -1,6 +1,8 @@
import os from "node:os";
import { Terminal } from "lucide-react";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import {
DiagnosticRow,
InfoItem,
@@ -87,6 +89,7 @@ export default async function CommandoCentrum() {
const rconSet = !!process.env.RCON_HOST;
return (
<AdminPageShell icon={Terminal} title={t("title")} subtitle={t("subtitle")}>
<main>
{/* ── Live status ────────────────────────────────────────── */}
<div
@@ -143,12 +146,18 @@ export default async function CommandoCentrum() {
label={t("platform")}
value={`${process.platform} ${process.arch}`}
/>
<InfoItem label={t("appUptime")} value={uptime(process.uptime())} />
<InfoItem
label={t("appUptime")}
value={uptime(process.uptime())}
/>
<InfoItem
label={t("heapUsed")}
value={mb(process.memoryUsage().heapUsed)}
/>
<InfoItem label={t("rss")} value={mb(process.memoryUsage().rss)} />
<InfoItem
label={t("rss")}
value={mb(process.memoryUsage().rss)}
/>
<InfoItem label={t("hostUptime")} value={uptime(os.uptime())} />
<InfoItem
label={t("load1m")}
@@ -168,7 +177,9 @@ export default async function CommandoCentrum() {
/>
<DiagnosticRow
label={t("emulatorRcon")}
detail={emulatorOnline ? t("respondingToPing") : t("noResponse")}
detail={
emulatorOnline ? t("respondingToPing") : t("noResponse")
}
state={emulatorOnline ? "ok" : "warn"}
/>
<DiagnosticRow
@@ -188,7 +199,9 @@ export default async function CommandoCentrum() {
/>
<DiagnosticRow
label={t("maintenanceMode")}
detail={maintenance ? t("siteIsInMaintenance") : t("siteIsLive")}
detail={
maintenance ? t("siteIsInMaintenance") : t("siteIsLive")
}
state={maintenance ? "warn" : "ok"}
/>
</div>
@@ -219,7 +232,9 @@ export default async function CommandoCentrum() {
<td className="text-sm theme-text-muted dark:theme-text-muted whitespace-nowrap">
{formatDate(a.createdAt, "datetime-seconds")}
</td>
<td>{nameById.get(Number(a.userId)) ?? `#${a.userId}`}</td>
<td>
{nameById.get(Number(a.userId)) ?? `#${a.userId}`}
</td>
<td>
<span className="inline-block text-[0.6rem] font-bold px-2 py-0.5 rounded-full bg-[var(--admin-accent)]/18 text-[var(--admin-text)]">
{a.action}
@@ -287,5 +302,6 @@ export default async function CommandoCentrum() {
)}
</section>
</main>
</AdminPageShell>
);
}
+5 -1
View File
@@ -1,6 +1,8 @@
import { Shield } from "lucide-react";
import Link from "next/link";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { AdminSimplePager } from "@/components/admin/admin-simple-pager";
import { StatusCard } from "@/components/admin/dashboard";
import { Button } from "@/components/ui/button";
@@ -104,6 +106,7 @@ export default async function AdminGuildsPage({
);
return (
<AdminPageShell icon={Shield} title={t("title")} subtitle={t("subtitle")}>
<main>
{loadError ? (
<div className="mb-4 rounded-lg bg-[var(--admin-error-subtle)] p-3 text-xs text-[var(--admin-error)]">
@@ -130,7 +133,7 @@ export default async function AdminGuildsPage({
<section>
<h2 className="admin-section-title">
{t("title")} ({total})
{t("listHeading", { count: total })}
</h2>
{rows.length === 0 ? (
<div className="admin-empty">{t("empty")}</div>
@@ -202,5 +205,6 @@ export default async function AdminGuildsPage({
/>
</section>
</main>
</AdminPageShell>
);
}
File diff suppressed because it is too large. Load diff
+66
View File
@@ -0,0 +1,66 @@
import { Package } from "lucide-react";
import { notFound, redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { ItemsBaseEditForm } from "./items-base-edit-form";
export const dynamic = "force-dynamic";
export default async function ItemsBaseDetailPage({
params,
}: {
params: Promise<{ id: string }>;
}) {
const { session, permissions } = await getAdminContext();
if (!canAccess(permissions, PERMS.CATALOG_VIEW, session.user.rank)) {
redirect("/admin");
}
const t = await getTranslations("pages.admin.items");
const { id: rawId } = await params;
const id = Number(rawId);
if (!Number.isFinite(id) || id <= 0) notFound();
const item = await prisma.itemsBase.findUnique({ where: { id } });
if (!item) notFound();
const canEdit = canAccess(permissions, PERMS.CATALOG_EDIT, session.user.rank);
return (
<AdminPageShell
icon={Package}
title={t("editTitle", { name: item.publicName || item.itemName })}
subtitle={t("editSubtitle", { id: item.id })}
>
<ItemsBaseEditForm
canEdit={canEdit}
initial={{
id: item.id,
spriteId: item.spriteId,
publicName: item.publicName,
itemName: item.itemName,
type: item.type,
width: item.width,
length: item.length,
stackHeight: String(item.stackHeight),
allowStack: item.allowStack,
allowSit: item.allowSit,
allowLay: item.allowLay,
allowWalk: item.allowWalk,
allowGift: item.allowGift,
allowTrade: item.allowTrade,
allowRecycle: item.allowRecycle,
allowMarketplaceSell: item.allowMarketplaceSell,
allowInventoryStack: item.allowInventoryStack,
interactionType: item.interactionType,
interactionModesCount: item.interactionModesCount,
vendingIds: item.vendingIds,
multiheight: item.multiheight,
customparams: item.customparams,
}}
/>
</AdminPageShell>
);
}
File diff suppressed because it is too large. Load diff
+73
View File
@@ -0,0 +1,73 @@
import { Package } from "lucide-react";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { fetchAdminList } from "@/lib/admin-list";
import { canAccess, PERMS } from "@/lib/permissions";
import { type ItemsBaseRow, ItemsTable } from "./items-table";
export default async function ItemsBasePage({
params: paramsPromise,
searchParams,
}: {
params: Promise<{ locale: string }>;
searchParams: Promise<Record<string, string>>;
}) {
const result = await fetchAdminList<ItemsBaseRow>(
{
permission: PERMS.CATALOG_VIEW,
model: "itemsBase",
searchFields: ["itemName", "publicName"],
defaultSort: { id: "desc" },
select: {
id: true,
spriteId: true,
publicName: true,
itemName: true,
type: true,
interactionType: true,
width: true,
length: true,
},
filterMap: {
filter_type: (v) => ({ type: v }),
},
mapRow: (r) => ({
id: r.id as number,
spriteId: r.spriteId as number,
publicName: (r.publicName as string) || "",
itemName: (r.itemName as string) || "",
type: (r.type as string) || "s",
interactionType: (r.interactionType as string) || "default",
width: r.width as number,
length: r.length as number,
}),
},
paramsPromise,
searchParams,
);
const t = await getTranslations("pages.admin.items");
const canEdit = canAccess(
result.permissions,
PERMS.CATALOG_EDIT,
result.rank,
);
return (
<AdminPageShell icon={Package} title={t("title")} subtitle={t("subtitle")}>
<p className="text-muted-foreground m-0">
{t("total", { count: result.total })}
</p>
<ItemsTable
data={{
rows: result.rows,
total: result.total,
page: result.page,
perPage: result.perPage,
lastPage: result.lastPage,
}}
canEdit={canEdit}
/>
</AdminPageShell>
);
}
+8
View File
@@ -1,5 +1,7 @@
import { ClipboardList } from "lucide-react";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { StatusCard } from "@/components/admin/dashboard";
import { buildStaffActivityWhere } from "@/lib/admin/log-filters";
import { calcPagination, parseListParams } from "@/lib/admin-helpers";
@@ -97,6 +99,11 @@ export default async function AdminStaffActivities({
}));
return (
<AdminPageShell
icon={ClipboardList}
title={t("title")}
subtitle={t("subtitle")}
>
<div className="space-y-6">
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5">
<StatusCard label={t("totalActivities")} value={total} icon="📋" />
@@ -123,5 +130,6 @@ export default async function AdminStaffActivities({
}}
/>
</div>
</AdminPageShell>
);
}
+11 -3
View File
@@ -1,7 +1,9 @@
import { Store } from "lucide-react";
import Link from "next/link";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { cancelMarketplaceListing } from "@/actions/admin-marketplace";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { AdminSimplePager } from "@/components/admin/admin-simple-pager";
import { StatusCard } from "@/components/admin/dashboard";
import { Button } from "@/components/ui/button";
@@ -69,6 +71,7 @@ export default async function AdminMarketplacePage({
const usernameById = new Map(users.map((u) => [u.id, u.username]));
return (
<AdminPageShell icon={Store} title={t("title")} subtitle={t("subtitle")}>
<main>
{loadError ? (
<div className="mb-4 rounded-lg bg-[var(--admin-error-subtle)] p-3 text-xs text-[var(--admin-error)]">
@@ -96,14 +99,18 @@ export default async function AdminMarketplacePage({
</div>
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5 mb-6">
<StatusCard label={t("activeListings")} value={activeCount} icon="🏪" />
<StatusCard
label={t("activeListings")}
value={activeCount}
icon="🏪"
/>
<StatusCard label={t("soldListings")} value={soldCount} icon="✅" />
</div>
<section>
<h2 className="admin-section-title">
{filter === "sold" ? t("soldListings") : t("activeListings")} ({total}
)
{filter === "sold" ? t("soldListings") : t("activeListings")} (
{total})
</h2>
{rows.length === 0 ? (
<div className="admin-empty">{t("empty")}</div>
@@ -173,5 +180,6 @@ export default async function AdminMarketplacePage({
/>
</section>
</main>
</AdminPageShell>
);
}
+9 -4
View File
@@ -1,3 +1,6 @@
import { Wifi } from "lucide-react";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { fetchAdminList } from "@/lib/admin-list";
import { PERMS } from "@/lib/permissions";
import { OnlineTable } from "./online-table";
@@ -27,10 +30,12 @@ export default async function OnlineUsersPage({
searchParams,
);
const t = await getTranslations("pages.admin.online");
return (
<div className="space-y-6">
<p className="text-muted-foreground">
Currently online users ({result.total} connected)
<AdminPageShell icon={Wifi} title={t("title")} subtitle={t("subtitle")}>
<p className="text-muted-foreground m-0">
{t("connected", { count: result.total })}
</p>
<OnlineTable
@@ -42,6 +47,6 @@ export default async function OnlineUsersPage({
lastPage: result.lastPage,
}}
/>
</div>
</AdminPageShell>
);
}
+7 -3
View File
@@ -1,3 +1,6 @@
import { DoorOpen } from "lucide-react";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { fetchAdminList } from "@/lib/admin-list";
import { canAccess, PERMS } from "@/lib/permissions";
import { RoomsTable } from "./rooms-table";
@@ -44,11 +47,12 @@ export default async function RoomsPage({
searchParams,
);
const t = await getTranslations("pages.admin.rooms");
const canEdit = canAccess(result.permissions, PERMS.ROOMS_EDIT, result.rank);
return (
<div className="space-y-6">
<p className="text-muted-foreground">
<AdminPageShell icon={DoorOpen} title={t("title")} subtitle={t("subtitle")}>
<p className="text-muted-foreground m-0">
{result.total.toLocaleString()} rooms total
</p>
@@ -62,6 +66,6 @@ export default async function RoomsPage({
}}
canEdit={canEdit}
/>
</div>
</AdminPageShell>
);
}
+4
View File
@@ -1,5 +1,7 @@
import { Settings } from "lucide-react";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { AdvancedSettingsPanel } from "./advanced-settings-panel";
@@ -41,6 +43,7 @@ export default async function AdminSettings() {
const documented = settings.filter((s) => !!s.comment).length;
return (
<AdminPageShell icon={Settings} title={t("title")} subtitle={t("subtitle")}>
<div className="space-y-8">
<div className="admin-stat-row">
<span className="admin-stat-chip">
@@ -65,5 +68,6 @@ export default async function AdminSettings() {
canEdit={canEdit}
/>
</div>
</AdminPageShell>
);
}
+18 -6
View File
@@ -1,6 +1,8 @@
import { ShoppingCart } from "lucide-react";
import Link from "next/link";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { AdminSimplePager } from "@/components/admin/admin-simple-pager";
import { StatusCard } from "@/components/admin/dashboard";
import { CurrencyIcon } from "@/components/shared/currency-icon";
@@ -111,21 +113,30 @@ export default async function AdminShop({
).length;
return (
<AdminPageShell
icon={ShoppingCart}
title={t("title")}
subtitle={t("subtitle")}
actions={
<Button variant="default" asChild>
<Link href="/admin/shop/new">{t("newPackage")}</Link>
</Button>
}
>
<main>
{loadError ? (
<div className="mb-4 rounded-lg bg-[var(--admin-error-subtle)] p-3 text-xs text-[var(--admin-error)]">
Could not load some shop data (database unavailable).
</div>
) : null}
<div className="flex items-center justify-end gap-4">
<Button variant="default" asChild>
<Link href="/admin/shop/new">{t("newPackage")}</Link>
</Button>
</div>
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5 mb-6">
<StatusCard label={t("packages")} value={packageTotal} icon="🛍️" />
<StatusCard label={t("recentOrders")} value={orders.length} icon="🧾" />
<StatusCard
label={t("recentOrders")}
value={orders.length}
icon="🧾"
/>
<StatusCard
label={t("paidOrders")}
value={paidOrders}
@@ -248,5 +259,6 @@ export default async function AdminShop({
)}
</section>
</main>
</AdminPageShell>
);
}
+9 -1
View File
@@ -1,4 +1,7 @@
import { Filter } from "lucide-react";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { AdminPageShell } from "@/components/admin/admin-page-shell";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { WordFilterClient } from "./wordfilter-client";
@@ -9,6 +12,7 @@ export default async function AdminWordFilter() {
redirect("/admin");
}
const t = await getTranslations("pages.admin.wordfilter");
const canEdit = canAccess(
permissions,
PERMS.WORDFILTER_EDIT,
@@ -27,5 +31,9 @@ export default async function AdminWordFilter() {
words = [];
}
return <WordFilterClient words={words} canEdit={canEdit} />;
return (
<AdminPageShell icon={Filter} title={t("title")} subtitle={t("subtitle")}>
<WordFilterClient words={words} canEdit={canEdit} />
</AdminPageShell>
);
}
+10 -6
View File
@@ -102,14 +102,18 @@ export async function fetchAdminList<TRow = PrismaModel>(
const { search, page, sort, order } = parsed;
// Build WHERE clause
const searchWhere =
const searchOr =
search && config.searchFields.length > 0
? {
OR: config.searchFields.map((field) =>
buildFieldCondition(field, search),
),
? config.searchFields.map((field) => buildFieldCondition(field, search))
: [];
// Exact numeric id match (furni / rooms / items lookup by id).
if (search && /^\d+$/.test(search)) {
const asId = Number(search);
if (Number.isFinite(asId) && asId > 0) {
searchOr.push({ id: asId });
}
: {};
}
const searchWhere = searchOr.length > 0 ? { OR: searchOr } : {};
// Apply URL filter_* params via filterMap
const filterWhere: Record<string, unknown> = {};
+7
View File
@@ -435,6 +435,13 @@ export const ADMIN_NAV_GROUPS: AdminNavGroup[] = [
permission: PERMS.CATALOG_VIEW,
matchPrefixes: ["/admin/catalog"],
},
{
href: "/admin/items",
labelKey: "itemsBase",
icon: Package,
permission: PERMS.CATALOG_VIEW,
matchPrefixes: ["/admin/items"],
},
{
href: "/admin/rare-values",
labelKey: "rareValues",
@@ -40,6 +40,8 @@ const ROUTES: Array<[string, string]> = [
["housekeeping", "PERMS.SETTINGS_VIEW"],
["logs", "PERMS.LOGS_VIEW"],
["catalog", "PERMS.CATALOG_VIEW"],
["items", "PERMS.CATALOG_VIEW"],
["items/[id]", "PERMS.CATALOG_VIEW"],
["rooms/edit/[id]", "PERMS.ROOMS_EDIT"],
];
@@ -64,6 +66,7 @@ const ACTION_GATES: Array<[string, string]> = [
["admin-shop.ts", "PERMS.SHOP_EDIT"],
["admin-radio-autodj.ts", "PERMS.RADIO_EDIT"],
["catalog.ts", "PERMS.CATALOG_EDIT"],
["items-base.ts", "PERMS.CATALOG_EDIT"],
["rooms.ts", "PERMS.ROOMS_EDIT"],
["admin-vpn.ts", "PERMS.SETTINGS_EDIT"],
["admin-ads.ts", "PERMS.PAGES_EDIT"],
+11
View File
@@ -82,4 +82,15 @@ describe("staff smoke contract", () => {
expect(readFileSync(path, "utf8"), path).toContain("TicketQueueBanner");
}
});
it("ships items_base browser", () => {
expect(existsSync("src/app/admin/items/page.tsx")).toBe(true);
expect(existsSync("src/app/admin/items/[id]/page.tsx")).toBe(true);
expect(readFileSync("src/actions/items-base.ts", "utf8")).toContain(
"updateItemsBase",
);
expect(readFileSync("src/lib/admin-nav.ts", "utf8")).toContain(
"/admin/items",
);
});
});
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Табло за управление",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -879,7 +879,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -2835,7 +2836,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"radioRequests": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Ταμπλό",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+34
View File
@@ -1004,6 +1004,7 @@
"hubCatalog": "Catalog & rares",
"hubShop": "Shop & payments",
"catalog": "Catalog",
"itemsBase": "Items base",
"shop": "Shop",
"marketplace": "Marketplace",
"transactions": "Transactions",
@@ -1662,6 +1663,38 @@
"cancel": "Cancel"
}
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"catalog": {
"title": "Catalog",
"subtitle": "Browse and manage catalog pages and items",
@@ -1805,6 +1838,7 @@
"title": "Guilds",
"subtitle": "Hotel groups and membership",
"totalGuilds": "Guilds",
"listHeading": "Guilds ({count})",
"searchPlaceholder": "Search by name, description or ID…",
"search": "Search",
"empty": "No guilds found.",
+36 -2
View File
@@ -879,7 +879,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Panel",
@@ -2835,7 +2836,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"radioRequests": {
+36 -2
View File
@@ -879,7 +879,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Tableau de bord",
@@ -2835,7 +2836,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"radioRequests": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Nadzorna ploča",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Irányítópult",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -1032,7 +1032,8 @@
"commandLog": "Log comandi",
"tradeLog": "Log trade",
"tools": "Strumenti",
"guilds": "Gruppi"
"guilds": "Gruppi",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -1799,7 +1800,8 @@
"noMembers": "Nessun membro.",
"back": "Torna ai gruppi",
"viewPublic": "Apri pagina pubblica",
"disband": "Sciogli gruppo"
"disband": "Sciogli gruppo",
"listHeading": "Guilds ({count})"
},
"transactions": {
"title": "Transazioni",
@@ -2989,6 +2991,38 @@
"less": "Meno",
"more": "Più"
}
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"radioRequests": {
+36 -2
View File
@@ -1062,7 +1062,8 @@
"chatLog": "Chatlog",
"commandLog": "Commandolog",
"tradeLog": "Tradelog",
"tools": "Tools"
"tools": "Tools",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -1751,7 +1752,8 @@
"noMembers": "Geen leden.",
"back": "Terug naar gildes",
"viewPublic": "Openbare pagina",
"disband": "Gilde ontbinden"
"disband": "Gilde ontbinden",
"listHeading": "Guilds ({count})"
},
"transactions": {
"title": "Transacties",
@@ -3017,6 +3019,38 @@
"less": "Minder",
"more": "Meer"
}
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"mod": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashbord",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Pulpit nawigacyjny",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Painel",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Tabloul de bord",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -907,7 +907,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Панель управления",
@@ -2863,7 +2864,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Dashboard",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Дасхбоард",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Instrumentbräda",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Kontrol Paneli",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {
+36 -2
View File
@@ -909,7 +909,8 @@
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds"
"guilds": "Guilds",
"itemsBase": "Items base"
},
"dashboard": {
"title": "Приладова панель",
@@ -2865,7 +2866,40 @@
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild"
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
}
},
"error": {