From ead931211c6783975d01928fa4636e42208689a1 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sun, 22 Jan 2023 04:24:38 +0900
Subject: [PATCH] =?UTF-8?q?fix(client):=20=E5=AE=9F=E7=B8=BE=E8=A7=A3?=
 =?UTF-8?q?=E9=99=A4=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=81=AE?=
 =?UTF-8?q?=E9=96=93=E9=9A=94=E3=82=92=E3=81=82=E3=81=91=E3=82=8B=E3=82=88?=
 =?UTF-8?q?=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Fix #9674
---
 packages/frontend/src/scripts/achievements.ts | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts
index 8f484f8925..c97358e880 100644
--- a/packages/frontend/src/scripts/achievements.ts
+++ b/packages/frontend/src/scripts/achievements.ts
@@ -433,16 +433,22 @@ export const ACHIEVEMENT_BADGES = {
 
 export const claimedAchievements = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : [];
 
-export function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
+const claimingQueue = new Set<string>();
+
+export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) {
 	if (claimedAchievements.includes(type)) return;
-	os.api('i/claim-achievement', { name: type });
+	claimingQueue.add(type);
 	claimedAchievements.push(type);
+	await new Promise(resolve => setTimeout(resolve, (claimingQueue.size - 1) * 500));
+	window.setTimeout(() => {
+		claimingQueue.delete(type);
+	}, 500);
+	os.api('i/claim-achievement', { name: type });
 }
 
 if (_DEV_) {
-	(window as any).unlockAllAchievements = async () => {
+	(window as any).unlockAllAchievements = () => {
 		for (const t of ACHIEVEMENT_TYPES) {
-			await new Promise(resolve => setTimeout(resolve, 100));
 			claimAchievement(t);
 		}
 	};
-- 
GitLab