more daily bonus for prestige

This commit is contained in:
Face 2025-06-25 17:03:52 +03:00
parent 96cb799cc7
commit ee29f97ca4
4 changed files with 47 additions and 11 deletions

View file

@ -82,6 +82,7 @@ export const POST: RequestHandler = async ({ request, locals }) => {
.set({
baseCurrencyBalance: '100.00000000',
prestigeLevel: nextPrestige,
lastRewardClaim: null,
updatedAt: new Date()
})
.where(eq(user.id, userId));
@ -92,7 +93,7 @@ export const POST: RequestHandler = async ({ request, locals }) => {
userId: userId,
type: 'SYSTEM',
title: `${prestigeName} Achieved!`,
message: `Congratulations! You have successfully reached ${prestigeName}. Your portfolio has been reset and you can now start fresh with your new prestige badge.`,
message: `Congratulations! You have successfully reached ${prestigeName}. Your portfolio has been reset, daily reward cooldown has been cleared, and you can now start fresh with your new prestige badge and enhanced daily rewards.`,
});
return json({

View file

@ -19,6 +19,19 @@ const REWARD_TIERS = [
4000, // Day 8+
];
const PRESTIGE_MULTIPLIERS = {
0: 1.0, // No prestige
1: 1.25, // 25% bonus
2: 1.5, // 50% bonus
3: 1.75, // 75% bonus
4: 2.0, // 100% bonus
5: 2.5, // 150% bonus
};
function getPrestigeMultiplier(prestigeLevel: number): number {
return PRESTIGE_MULTIPLIERS[prestigeLevel as keyof typeof PRESTIGE_MULTIPLIERS] || 1.0;
}
function calculateStreak(lastClaim: Date | null, currentStreak: number): number {
if (!lastClaim) return 1;
@ -33,11 +46,14 @@ function calculateStreak(lastClaim: Date | null, currentStreak: number): number
return currentStreak;
}
function calculateReward(streak: number): { total: number; base: number } {
function calculateReward(streak: number, prestigeLevel: number = 0): { total: number; base: number; prestigeBonus: number } {
const tierIndex = Math.min(streak - 1, REWARD_TIERS.length - 1);
const base = REWARD_TIERS[tierIndex];
const prestigeMultiplier = getPrestigeMultiplier(prestigeLevel);
const prestigeBonus = base * (prestigeMultiplier - 1);
const total = base + prestigeBonus;
return { total: base, base };
return { total, base, prestigeBonus };
}
export const POST: RequestHandler = async ({ request }) => {
@ -53,7 +69,8 @@ export const POST: RequestHandler = async ({ request }) => {
baseCurrencyBalance: user.baseCurrencyBalance,
lastRewardClaim: user.lastRewardClaim,
totalRewardsClaimed: user.totalRewardsClaimed,
loginStreak: user.loginStreak
loginStreak: user.loginStreak,
prestigeLevel: user.prestigeLevel
})
.from(user)
.where(eq(user.id, userId))
@ -78,7 +95,7 @@ export const POST: RequestHandler = async ({ request }) => {
}
const newStreak = calculateStreak(currentUser.lastRewardClaim, currentUser.loginStreak || 0);
const reward = calculateReward(newStreak);
const reward = calculateReward(newStreak, currentUser.prestigeLevel || 0);
const currentBalance = parseFloat(currentUser.baseCurrencyBalance || '0');
const currentTotalRewards = parseFloat(currentUser.totalRewardsClaimed || '0');
@ -98,6 +115,8 @@ export const POST: RequestHandler = async ({ request }) => {
success: true,
rewardAmount: reward.total,
baseReward: reward.base,
prestigeBonus: reward.prestigeBonus,
prestigeLevel: currentUser.prestigeLevel || 0,
newBalance,
totalRewardsClaimed: newTotalRewards,
loginStreak: newStreak,
@ -115,7 +134,8 @@ export const GET: RequestHandler = async ({ request }) => {
baseCurrencyBalance: user.baseCurrencyBalance,
lastRewardClaim: user.lastRewardClaim,
totalRewardsClaimed: user.totalRewardsClaimed,
loginStreak: user.loginStreak
loginStreak: user.loginStreak,
prestigeLevel: user.prestigeLevel
})
.from(user)
.where(eq(user.id, Number(session.user.id)))
@ -141,12 +161,14 @@ export const GET: RequestHandler = async ({ request }) => {
}
const potentialStreak = calculateStreak(currentUser.lastRewardClaim, currentUser.loginStreak || 0);
const reward = calculateReward(potentialStreak);
const reward = calculateReward(potentialStreak, currentUser.prestigeLevel || 0);
return json({
canClaim,
rewardAmount: reward.total,
baseReward: reward.base,
prestigeBonus: reward.prestigeBonus,
prestigeLevel: currentUser.prestigeLevel || 0,
timeRemaining,
nextClaimTime,
totalRewardsClaimed: Number(currentUser.totalRewardsClaimed || 0),

View file

@ -149,6 +149,12 @@
{/if}
<li>Total portfolio value: {formatValue(totalValue)}</li>
</ul>
<strong class="mt-2 block text-green-600">You will gain:</strong>
<ul class="mt-1 list-disc space-y-1 pl-4">
<li>More money in daily rewards</li>
<li>A daily reward reset</li>
<li>Prestige badge and status</li>
</ul>
We will automatically sell all your coin holdings.
</AlertDescription>
</Alert>
@ -245,7 +251,7 @@
<div>
<p class="font-medium">Gain Status</p>
<p class="text-muted-foreground text-sm">
Earn an exclusive prestige title and start fresh
Earn an exclusive prestige title, enhanced daily rewards, and reset your daily reward cooldown
</p>
</div>
</div>
@ -430,6 +436,7 @@
</div>
</div>
</div>
<p class="text-xs">You also get 25% more daily rewards.</p>
</Card.Content>
</Card.Root>
{/if}