- | {placementString(result.placement)} |
+
+
+ |
{result.teamName} |
diff --git a/app/routes/maps.tsx b/app/routes/maps.tsx
index bb9b8c929..6d4589039 100644
--- a/app/routes/maps.tsx
+++ b/app/routes/maps.tsx
@@ -1,4 +1,9 @@
-import type { LinksFunction, LoaderArgs } from "@remix-run/node";
+import type {
+ LinksFunction,
+ LoaderArgs,
+ MetaFunction,
+ SerializeFrom,
+} from "@remix-run/node";
import type { ShouldReloadFunction } from "@remix-run/react";
import { Link } from "@remix-run/react";
import { useLoaderData, useSearchParams } from "@remix-run/react";
@@ -13,6 +18,7 @@ import { Label } from "~/components/Label";
import { Main } from "~/components/Main";
import { Toggle } from "~/components/Toggle";
import { db } from "~/db";
+import { i18next } from "~/modules/i18n";
import {
modes,
stageIds,
@@ -31,6 +37,7 @@ import {
} from "~/modules/map-pool-serializer";
import type { MapPool } from "~/modules/map-pool-serializer/types";
import styles from "~/styles/maps.css";
+import { makeTitle } from "~/utils/strings";
import {
calendarEventPage,
ipLabsMaps,
@@ -46,13 +53,24 @@ export const links: LinksFunction = () => {
return [{ rel: "stylesheet", href: styles }];
};
+export const meta: MetaFunction = (args) => {
+ const data = args.data as SerializeFrom | null;
+
+ if (!data) return {};
+
+ return {
+ title: data.title,
+ };
+};
+
export const handle = {
i18n: "game-misc",
};
-export const loader = ({ request }: LoaderArgs) => {
+export const loader = async ({ request }: LoaderArgs) => {
const url = new URL(request.url);
const calendarEventId = url.searchParams.get("eventId");
+ const t = await i18next.getFixedT(request);
const event = calendarEventId
? db.calendarEvents.findById(Number(calendarEventId))
@@ -68,6 +86,7 @@ export const loader = ({ request }: LoaderArgs) => {
mapPool: event
? db.calendarEvents.findMapPoolByEventId(event.eventId)
: null,
+ title: makeTitle([t("pages.maps")]),
};
};
@@ -216,7 +235,6 @@ function MapPoolSelector({
);
}
-// xxx: crashes if only one map in mode
function MapListCreator({ mapPool }: { mapPool: MapPool }) {
const { t } = useTranslation(["game-misc", "common"]);
const [mapList, setMapList] = React.useState();
diff --git a/app/routes/object-damage.tsx b/app/routes/object-damage.tsx
new file mode 100644
index 000000000..4cdfe3aea
--- /dev/null
+++ b/app/routes/object-damage.tsx
@@ -0,0 +1,34 @@
+import { WeaponCombobox } from "~/components/Combobox";
+import { Main } from "~/components/Main";
+import { useObjectDamage } from "~/modules/analyzer";
+import type { MainWeaponId } from "~/modules/in-game-lists";
+
+export const handle = {
+ i18n: ["weapons"],
+};
+
+export default function ObjectDamagePage() {
+ const { mainWeaponId, handleChange, multipliers } = useObjectDamage();
+
+ if (process.env.NODE_ENV !== "development") {
+ return WIP :);
+ }
+
+ return (
+
+
+ opt &&
+ handleChange({
+ newMainWeaponId: Number(opt.value) as MainWeaponId,
+ })
+ }
+ className="w-full-important"
+ clearsInputOnFocus
+ />
+ {JSON.stringify(multipliers, null, 2)}
+
+ );
+}
diff --git a/app/routes/u.$identifier/results.tsx b/app/routes/u.$identifier/results.tsx
index a38db68dc..2a6a431e2 100644
--- a/app/routes/u.$identifier/results.tsx
+++ b/app/routes/u.$identifier/results.tsx
@@ -2,9 +2,10 @@ import { Link, useMatches } from "@remix-run/react";
import { useTranslation } from "react-i18next";
import invariant from "tiny-invariant";
import { Avatar } from "~/components/Avatar";
+import { Placement } from "~/components/Placement";
import { Section } from "~/components/Section";
import { databaseTimestampToDate } from "~/utils/dates";
-import { discordFullName, placementString } from "~/utils/strings";
+import { discordFullName } from "~/utils/strings";
import { calendarEventPage, userPage } from "~/utils/urls";
import type { UserPageLoaderData } from "../u.$identifier";
@@ -15,7 +16,7 @@ export default function UserResultsPage() {
const data = parentRoute.data as UserPageLoaderData;
return (
-
+
@@ -23,6 +24,7 @@ export default function UserResultsPage() {
| {t("results.placing")} |
{t("results.team")} |
{t("results.tournament")} |
+ {t("results.participants")} |
{t("results.date")} |
{t("results.mates")} |
@@ -30,13 +32,16 @@ export default function UserResultsPage() {
{data.results.map((result) => (
- | {placementString(result.placement)} |
+
+
+ |
{result.teamName} |
{result.eventName}
|
+ {result.participantCount} |
{databaseTimestampToDate(result.startTime).toLocaleDateString(
i18n.language,
diff --git a/app/styles/plus.css b/app/styles/plus.css
index efcbef581..29e6e402c 100644
--- a/app/styles/plus.css
+++ b/app/styles/plus.css
@@ -61,6 +61,8 @@
.plus__comment {
white-space: pre-wrap;
+ min-width: auto;
+ overflow-wrap: break-word;
}
.plus__comment-time {
diff --git a/app/styles/u.css b/app/styles/u.css
index 9e4c9fffe..673c38771 100644
--- a/app/styles/u.css
+++ b/app/styles/u.css
@@ -147,11 +147,6 @@
font-weight: var(--bold);
}
-.u__results-main {
- max-width: 52rem;
- margin: 0 auto;
-}
-
.u__results-section {
overflow-x: auto;
}
diff --git a/app/utils/strings.ts b/app/utils/strings.ts
index b120b99f7..7b3202a81 100644
--- a/app/utils/strings.ts
+++ b/app/utils/strings.ts
@@ -10,12 +10,18 @@ export function makeTitle(title: string | string[]) {
return `${Array.isArray(title) ? title.join(" | ") : title} | sendou.ink`;
}
-export function placementString(placement: number) {
- if (placement === 1) return "🥇";
- if (placement === 2) return "🥈";
- if (placement === 3) return "🥉";
+export function getEnglishOrdinalSuffix(num: number) {
+ const lastDigit = num % 10;
+ const last2Digits = num % 100;
- return `${placement}th`;
+ if (lastDigit === 1 && last2Digits !== 11) {
+ return "st";
+ } else if (lastDigit === 2 && last2Digits !== 12) {
+ return "nd";
+ } else if (lastDigit === 3 && last2Digits !== 13) {
+ return "rd";
+ }
+ return "th";
}
export function semiRandomId() {
diff --git a/package.json b/package.json
index ae82fc4b1..0f27bcfd0 100644
--- a/package.json
+++ b/package.json
@@ -15,10 +15,12 @@
"rename-badge": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/rename-badge.ts",
"create-weapon-json": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/create-weapon-json.ts",
"create-gear-json": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/create-gear-json.ts",
+ "create-object-dmg-json": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/create-object-dmg-json.ts",
"create-misc-json": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/create-misc-json.ts",
"create-analyzer-json": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/create-analyzer-json.ts",
"check-translation-jsons": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/check-translation-jsons.ts && npm run prettier:write",
"replace-img-names": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/replace-img-names.ts",
+ "remove-bad-custom-urls": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/remove-bad-custom-urls.ts",
"lint:ts": "eslint . --ext .ts,.tsx",
"lint:styles": "stylelint \"app/styles/**/*.css\"",
"prettier:check": "prettier --check . --loglevel warn",
diff --git a/public/badges/20xx.avif b/public/badges/20xx.avif
index 88ebf7c83..97f4c4459 100644
Binary files a/public/badges/20xx.avif and b/public/badges/20xx.avif differ
diff --git a/public/badges/beta_top1.avif b/public/badges/beta_top1.avif
index 4933e424a..781c7044e 100644
Binary files a/public/badges/beta_top1.avif and b/public/badges/beta_top1.avif differ
diff --git a/public/badges/beta_top2.avif b/public/badges/beta_top2.avif
index 6b4c39eee..2bc12971c 100644
Binary files a/public/badges/beta_top2.avif and b/public/badges/beta_top2.avif differ
diff --git a/public/badges/beta_top3.avif b/public/badges/beta_top3.avif
index 04ef26b22..5834dc1dc 100644
Binary files a/public/badges/beta_top3.avif and b/public/badges/beta_top3.avif differ
diff --git a/public/badges/cake.avif b/public/badges/cake.avif
index 599f805eb..6dc05e1ce 100644
Binary files a/public/badges/cake.avif and b/public/badges/cake.avif differ
diff --git a/public/badges/ebtv.avif b/public/badges/ebtv.avif
index dbfad189e..ad3685e4c 100644
Binary files a/public/badges/ebtv.avif and b/public/badges/ebtv.avif differ
diff --git a/public/badges/girls.avif b/public/badges/girls.avif
index 3031c68e7..61a44de80 100644
Binary files a/public/badges/girls.avif and b/public/badges/girls.avif differ
diff --git a/public/badges/idtga.avif b/public/badges/idtga.avif
index 8480cca38..ab5aa04df 100644
Binary files a/public/badges/idtga.avif and b/public/badges/idtga.avif differ
diff --git a/public/badges/itz_blue.avif b/public/badges/itz_blue.avif
index 3805f52e3..85a46e66d 100644
Binary files a/public/badges/itz_blue.avif and b/public/badges/itz_blue.avif differ
diff --git a/public/badges/itz_orange.avif b/public/badges/itz_orange.avif
index 2a4c675ec..3f8c7371e 100644
Binary files a/public/badges/itz_orange.avif and b/public/badges/itz_orange.avif differ
diff --git a/public/badges/itz_pink.avif b/public/badges/itz_pink.avif
index 719157055..2735a1698 100644
Binary files a/public/badges/itz_pink.avif and b/public/badges/itz_pink.avif differ
diff --git a/public/badges/itz_red.avif b/public/badges/itz_red.avif
index eb4fbde44..e2eb9a00f 100644
Binary files a/public/badges/itz_red.avif and b/public/badges/itz_red.avif differ
diff --git a/public/badges/lobster.avif b/public/badges/lobster.avif
index 1be48548e..39780de73 100644
Binary files a/public/badges/lobster.avif and b/public/badges/lobster.avif differ
diff --git a/public/badges/lutiblue.avif b/public/badges/lutiblue.avif
index 86022adef..ea26f02c6 100644
Binary files a/public/badges/lutiblue.avif and b/public/badges/lutiblue.avif differ
diff --git a/public/badges/lutigreen.avif b/public/badges/lutigreen.avif
index 3285415ca..a265e35a2 100644
Binary files a/public/badges/lutigreen.avif and b/public/badges/lutigreen.avif differ
diff --git a/public/badges/lutilimegreen.avif b/public/badges/lutilimegreen.avif
index 74b51ab38..93af0297c 100644
Binary files a/public/badges/lutilimegreen.avif and b/public/badges/lutilimegreen.avif differ
diff --git a/public/badges/lutiorange.avif b/public/badges/lutiorange.avif
index 1a90fb6a6..ce09a295c 100644
Binary files a/public/badges/lutiorange.avif and b/public/badges/lutiorange.avif differ
diff --git a/public/badges/lutipink.avif b/public/badges/lutipink.avif
index 3ea7537d5..7b057d82f 100644
Binary files a/public/badges/lutipink.avif and b/public/badges/lutipink.avif differ
diff --git a/public/badges/lutipurple.avif b/public/badges/lutipurple.avif
index 29db82b8b..62c817cda 100644
Binary files a/public/badges/lutipurple.avif and b/public/badges/lutipurple.avif differ
diff --git a/public/badges/lutired.avif b/public/badges/lutired.avif
index 5fe0d1fd0..dd7a60fc3 100644
Binary files a/public/badges/lutired.avif and b/public/badges/lutired.avif differ
diff --git a/public/badges/lutitan.avif b/public/badges/lutitan.avif
index 8242917b3..481da669e 100644
Binary files a/public/badges/lutitan.avif and b/public/badges/lutitan.avif differ
diff --git a/public/badges/lutiyellow.avif b/public/badges/lutiyellow.avif
index 21cff19ce..40d48f753 100644
Binary files a/public/badges/lutiyellow.avif and b/public/badges/lutiyellow.avif differ
diff --git a/public/badges/monday.avif b/public/badges/monday.avif
index 2c64b1b0d..dbab0c266 100644
Binary files a/public/badges/monday.avif and b/public/badges/monday.avif differ
diff --git a/public/badges/pair.avif b/public/badges/pair.avif
index a81ad62e3..bf65a3bbd 100644
Binary files a/public/badges/pair.avif and b/public/badges/pair.avif differ
diff --git a/public/badges/patreon.avif b/public/badges/patreon.avif
index 7430014ff..569b7202c 100644
Binary files a/public/badges/patreon.avif and b/public/badges/patreon.avif differ
diff --git a/public/badges/patreon_plus.avif b/public/badges/patreon_plus.avif
index f56eadbb8..7712b3f41 100644
Binary files a/public/badges/patreon_plus.avif and b/public/badges/patreon_plus.avif differ
diff --git a/public/badges/pool1.avif b/public/badges/pool1.avif
index 79cc489fa..40a1baa92 100644
Binary files a/public/badges/pool1.avif and b/public/badges/pool1.avif differ
diff --git a/public/badges/pool2.avif b/public/badges/pool2.avif
index b36a2c1de..75ca237a4 100644
Binary files a/public/badges/pool2.avif and b/public/badges/pool2.avif differ
diff --git a/public/badges/quad.avif b/public/badges/quad.avif
index 1eefef6ef..ffecd84fe 100644
Binary files a/public/badges/quad.avif and b/public/badges/quad.avif differ
diff --git a/public/badges/snapshot_bronze.avif b/public/badges/snapshot_bronze.avif
index 719a48c1e..5ec522c6b 100644
Binary files a/public/badges/snapshot_bronze.avif and b/public/badges/snapshot_bronze.avif differ
diff --git a/public/badges/snapshot_gold.avif b/public/badges/snapshot_gold.avif
index c3d661ebf..89bafdafd 100644
Binary files a/public/badges/snapshot_gold.avif and b/public/badges/snapshot_gold.avif differ
diff --git a/public/badges/snapshot_silver.avif b/public/badges/snapshot_silver.avif
index 4deeb6dba..cce46b832 100644
Binary files a/public/badges/snapshot_silver.avif and b/public/badges/snapshot_silver.avif differ
diff --git a/public/badges/squid_junction.avif b/public/badges/squid_junction.avif
index ecf76e887..e0b55a8e8 100644
Binary files a/public/badges/squid_junction.avif and b/public/badges/squid_junction.avif differ
diff --git a/public/badges/sundae.avif b/public/badges/sundae.avif
index 49b55e37c..cf7fa67b4 100644
Binary files a/public/badges/sundae.avif and b/public/badges/sundae.avif differ
diff --git a/public/badges/superjump_alpha.avif b/public/badges/superjump_alpha.avif
index 02f301a8e..9d914524c 100644
Binary files a/public/badges/superjump_alpha.avif and b/public/badges/superjump_alpha.avif differ
diff --git a/public/badges/superjump_beta.avif b/public/badges/superjump_beta.avif
index 515c867c8..d9905e917 100644
Binary files a/public/badges/superjump_beta.avif and b/public/badges/superjump_beta.avif differ
diff --git a/public/badges/superjump_gamma.avif b/public/badges/superjump_gamma.avif
index 58791698e..48f010a07 100644
Binary files a/public/badges/superjump_gamma.avif and b/public/badges/superjump_gamma.avif differ
diff --git a/public/badges/tidal_tuesdays.avif b/public/badges/tidal_tuesdays.avif
index 375a7c6b9..58c3b2905 100644
Binary files a/public/badges/tidal_tuesdays.avif and b/public/badges/tidal_tuesdays.avif differ
diff --git a/public/badges/toni_kensa.avif b/public/badges/toni_kensa.avif
index 42781e9a4..98305806f 100644
Binary files a/public/badges/toni_kensa.avif and b/public/badges/toni_kensa.avif differ
diff --git a/public/badges/triton.avif b/public/badges/triton.avif
index c66ccfb8c..b10011dcd 100644
Binary files a/public/badges/triton.avif and b/public/badges/triton.avif differ
diff --git a/public/badges/xp26.avif b/public/badges/xp26.avif
index e52106a11..41caa575a 100644
Binary files a/public/badges/xp26.avif and b/public/badges/xp26.avif differ
diff --git a/public/badges/xp27.avif b/public/badges/xp27.avif
index 87f0bc348..0d464662e 100644
Binary files a/public/badges/xp27.avif and b/public/badges/xp27.avif differ
diff --git a/public/badges/xp28.avif b/public/badges/xp28.avif
index 10f835586..b6aa324f5 100644
Binary files a/public/badges/xp28.avif and b/public/badges/xp28.avif differ
diff --git a/public/badges/xp29.avif b/public/badges/xp29.avif
index 5195c9ac9..df3426c14 100644
Binary files a/public/badges/xp29.avif and b/public/badges/xp29.avif differ
diff --git a/public/badges/xp30.avif b/public/badges/xp30.avif
index acaaa4e82..9b7fffe8a 100644
Binary files a/public/badges/xp30.avif and b/public/badges/xp30.avif differ
diff --git a/public/badges/zones.avif b/public/badges/zones.avif
index a351b8fd5..25491ea56 100644
Binary files a/public/badges/zones.avif and b/public/badges/zones.avif differ
diff --git a/public/img/abilities/UNKNOWN.avif b/public/img/abilities/UNKNOWN.avif
index 22a859c4c..c8f20faf6 100644
Binary files a/public/img/abilities/UNKNOWN.avif and b/public/img/abilities/UNKNOWN.avif differ
diff --git a/public/img/gear/head/21011.avif b/public/img/gear/head/21011.avif
index feff79df9..8def24c80 100644
Binary files a/public/img/gear/head/21011.avif and b/public/img/gear/head/21011.avif differ
diff --git a/public/img/layout/admin.avif b/public/img/layout/admin.avif
index f5c7cbe3f..51ff4447f 100644
Binary files a/public/img/layout/admin.avif and b/public/img/layout/admin.avif differ
diff --git a/public/img/layout/analyzer.avif b/public/img/layout/analyzer.avif
index 8b9f89954..b7788adde 100644
Binary files a/public/img/layout/analyzer.avif and b/public/img/layout/analyzer.avif differ
diff --git a/public/img/layout/badges.avif b/public/img/layout/badges.avif
index ccabd4494..1f65e0239 100644
Binary files a/public/img/layout/badges.avif and b/public/img/layout/badges.avif differ
diff --git a/public/img/layout/builds.avif b/public/img/layout/builds.avif
index f6c29166d..98052299c 100644
Binary files a/public/img/layout/builds.avif and b/public/img/layout/builds.avif differ
diff --git a/public/img/layout/calendar.avif b/public/img/layout/calendar.avif
index 995929ce7..d38724ea6 100644
Binary files a/public/img/layout/calendar.avif and b/public/img/layout/calendar.avif differ
diff --git a/public/img/layout/error-girl.avif b/public/img/layout/error-girl.avif
index 57930a123..66f7e9b78 100644
Binary files a/public/img/layout/error-girl.avif and b/public/img/layout/error-girl.avif differ
diff --git a/public/img/layout/logo.avif b/public/img/layout/logo.avif
index 761be81d3..2ed489f19 100644
Binary files a/public/img/layout/logo.avif and b/public/img/layout/logo.avif differ
diff --git a/public/img/layout/maps.avif b/public/img/layout/maps.avif
index 28e0f6fb2..8b4e96720 100644
Binary files a/public/img/layout/maps.avif and b/public/img/layout/maps.avif differ
diff --git a/public/img/layout/plus.avif b/public/img/layout/plus.avif
index 2b763af5d..b49c19b29 100644
Binary files a/public/img/layout/plus.avif and b/public/img/layout/plus.avif differ
diff --git a/public/img/layout/sendou_love.avif b/public/img/layout/sendou_love.avif
index 71036767f..7fe1edfd0 100644
Binary files a/public/img/layout/sendou_love.avif and b/public/img/layout/sendou_love.avif differ
diff --git a/public/locales/de/user.json b/public/locales/de/user.json
index b38e807fe..e34fa88cf 100644
--- a/public/locales/de/user.json
+++ b/public/locales/de/user.json
@@ -13,6 +13,7 @@
"results.placing": "Platzierung",
"results.team": "Team",
"results.tournament": "Turnier",
+ "results.participants": "Teilnehmer",
"results.date": "Datum",
"results.mates": "Mitspieler",
diff --git a/public/locales/en/user.json b/public/locales/en/user.json
index 51c5a48c6..760f2a9b5 100644
--- a/public/locales/en/user.json
+++ b/public/locales/en/user.json
@@ -13,6 +13,7 @@
"results.placing": "Placing",
"results.team": "Team",
"results.tournament": "Tournament",
+ "results.participants": "Participants",
"results.date": "Date",
"results.mates": "Mates",
diff --git a/public/svg/placements/first.svg b/public/svg/placements/first.svg
new file mode 100644
index 000000000..8411a9e3c
--- /dev/null
+++ b/public/svg/placements/first.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svg/placements/second.svg b/public/svg/placements/second.svg
new file mode 100644
index 000000000..99b3b81cd
--- /dev/null
+++ b/public/svg/placements/second.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svg/placements/third.svg b/public/svg/placements/third.svg
new file mode 100644
index 000000000..ee264e1fb
--- /dev/null
+++ b/public/svg/placements/third.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/scripts/create-object-dmg-json.ts b/scripts/create-object-dmg-json.ts
new file mode 100644
index 000000000..3cf41f486
--- /dev/null
+++ b/scripts/create-object-dmg-json.ts
@@ -0,0 +1,55 @@
+/* eslint-disable */
+// @ts-nocheck
+
+// 1) WeaponInfoMain.json inside dicts
+// 2) WeaponInfoSub.json inside dicts
+// 3) WeaponInfoSpecial.json inside dicts
+// 4) misc/spl__DamageRateInfoConfig.pp__CombinationDataTableData.json
+import params from "./dicts/spl__DamageRateInfoConfig.pp__CombinationDataTableData.json";
+import weapons from "./dicts/WeaponInfoMain.json";
+import subWeapons from "./dicts/WeaponInfoSub.json";
+import specialWeapons from "./dicts/WeaponInfoSpecial.json";
+import fs from "node:fs";
+import path from "node:path";
+
+const OUTPUT_DIR_PATH = path.join(__dirname, "output");
+
+const weaponParamsToWeaponIds = (
+ params: typeof weapons | typeof subWeapons | typeof specialWeapons,
+ key: string
+) => {
+ return params
+ .filter((param) => {
+ return (
+ param.DefaultDamageRateInfoRow === key ||
+ param.ExtraDamageRateInfoRowSet?.some(
+ (row) => row.DamageRateInfoRow === key
+ )
+ );
+ })
+ .map((weapon) => weapon.Id);
+};
+
+const result = {};
+for (const cell of Object.values(params.CellList)) {
+ if (!cell.DamageRate) continue;
+
+ if (!result[cell.RowKey]) {
+ result[cell.RowKey] = {
+ mainWeaponIds: weaponParamsToWeaponIds(weapons, cell.RowKey),
+ subWeaponIds: weaponParamsToWeaponIds(subWeapons, cell.RowKey),
+ specialWeaponIds: weaponParamsToWeaponIds(specialWeapons, cell.RowKey),
+ rates: [],
+ };
+ }
+
+ result[cell.RowKey].rates.push({
+ target: cell.ColumnKey,
+ rate: cell.DamageRate,
+ });
+}
+
+fs.writeFileSync(
+ path.join(OUTPUT_DIR_PATH, "object-dmg.json"),
+ JSON.stringify(result, null, 2)
+);
diff --git a/scripts/remove-bad-custom-urls.ts b/scripts/remove-bad-custom-urls.ts
new file mode 100644
index 000000000..921572c71
--- /dev/null
+++ b/scripts/remove-bad-custom-urls.ts
@@ -0,0 +1,9 @@
+/* eslint-disable no-console */
+import "dotenv/config";
+import { sql } from "~/db/sql";
+
+sql
+ .prepare(`update "User" set "customUrl" = NULL where "customUrl" like '%/%'`)
+ .run();
+
+console.log("Done");
diff --git a/translation-progress.md b/translation-progress.md
index eb4ddde43..f51cb0f58 100644
--- a/translation-progress.md
+++ b/translation-progress.md
@@ -78,7 +78,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -91,6 +91,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -178,7 +179,7 @@
### 🟢 user.json
-**19/19**
+**20/20**
---
@@ -270,7 +271,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -283,6 +284,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -392,7 +394,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -405,6 +407,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -465,7 +468,7 @@
### 🔴 user.json
-**0/19**
+**0/20**
---
@@ -647,7 +650,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -660,6 +663,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -770,7 +774,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -783,6 +787,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -869,9 +874,16 @@
-### 🟢 user.json
+### 🟡 user.json
-**19/19**
+**19/20**
+
+
+Missing
+
+- results.participants
+
+
---
@@ -976,7 +988,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -989,6 +1001,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
@@ -1099,7 +1112,7 @@
### 🟡 user.json
-**7/19**
+**7/20**
Missing
@@ -1112,6 +1125,7 @@
- motion
- stick
- sens
+- results.participants
- forms.errors.invalidCustomUrl.numbers
- forms.errors.invalidCustomUrl.strangeCharacter
- forms.errors.invalidCustomUrl.duplicate
| |