This commit is contained in:
2025-12-08 12:19:53 +00:00
parent 9eeb88e9ea
commit 81674f8094
5 changed files with 324 additions and 86 deletions
+23
View File
@@ -11,12 +11,27 @@ export interface Achievement {
secret?: boolean;
}
// Track AI message count in localStorage
const AI_MESSAGE_COUNT_KEY = 'ai-message-count';
export const incrementAiMessageCount = (): number => {
const current = parseInt(localStorage.getItem(AI_MESSAGE_COUNT_KEY) || '0', 10);
const newCount = current + 1;
localStorage.setItem(AI_MESSAGE_COUNT_KEY, newCount.toString());
return newCount;
};
export const getAiMessageCount = (): number => {
return parseInt(localStorage.getItem(AI_MESSAGE_COUNT_KEY) || '0', 10);
};
interface AchievementsContextType {
achievements: Achievement[];
unlockAchievement: (id: string) => void;
getUnlockedCount: () => number;
getTotalCount: () => number;
timeOnSite: number;
checkAiAchievements: () => void;
}
const defaultAchievements: Achievement[] = [
@@ -214,6 +229,13 @@ export const AchievementsProvider = ({ children }: { children: ReactNode }) => {
return achievements.length;
}, [achievements]);
// Check AI message achievements
const checkAiAchievements = useCallback(() => {
const count = getAiMessageCount();
if (count >= 5) unlockAchievement('ai_conversation');
if (count >= 20) unlockAchievement('ai_long_chat');
}, [unlockAchievement]);
// Save achievements
useEffect(() => {
localStorage.setItem('achievements', JSON.stringify(achievements));
@@ -227,6 +249,7 @@ export const AchievementsProvider = ({ children }: { children: ReactNode }) => {
getUnlockedCount,
getTotalCount,
timeOnSite,
checkAiAchievements,
}}
>
{children}