दैनिक और साप्ताहिक मिशन — लौटने की एक वजह
अब हर खत्म हुई गेम दैनिक और साप्ताहिक मिशनों के एक सेट को आगे बढ़ाती है, कोई मिशन पूरा होते ही XP देती है, और एक नए साप्ताहिक लीडरबोर्ड को अंक देती है।

आसान शब्दों में
अब तक opolyx में इकलौती प्रगति गेम जीतने पर मिलने वाला एक-बार का इनाम थी। रोज़-रोज़ पीछा करने के लिए कुछ नहीं था। मिशन इसे बदल देते हैं: दैनिक और साप्ताहिक लक्ष्यों का एक छोटा सेट, जो हर बार गेम खत्म करने पर आगे बढ़ता है, चाहे आप जीतें या हारें।
आपको कुछ भी क्लेम नहीं करना पड़ता और दबाने के लिए कोई बटन नहीं है — जिस पल गेम खत्म होती है, सर्वर आपके मिशन जांचता है, आपके पूरे किए मिशनों को गिनता है, और XP सीधे आपके लेवल में जोड़ देता है। एक साथ छह मिशन चलते हैं:
- दैनिक — 1 गेम खेलें, 3 गेम खेलें, 1 गेम जीतें।
- साप्ताहिक — 10 गेम खेलें, 3 गेम जीतें, स्पीड मोड में 3 गेम जीतें।
- दैनिक मिशन हर दिन रीसेट होते हैं; साप्ताहिक मिशन हर सोमवार रीसेट होते हैं।
| मिशन | आवृत्ति | लक्ष्य | इनाम |
|---|---|---|---|
| एक गेम खेलें | दैनिक | 1 | +50 XP |
| खेलते रहें | दैनिक | 3 | +150 XP |
| एक गेम जीतें | दैनिक | 1 | +250 XP |
| नियमित | साप्ताहिक | 10 गेम | +400 XP |
| जीत की लय में | साप्ताहिक | 3 जीत | +600 XP |
| स्पीड का उस्ताद | साप्ताहिक | 3 स्पीड जीत | +500 XP |
गेम खत्म करने से साप्ताहिक लीडरबोर्ड अंक भी मिलते हैं, इसलिए आप जितना ज़्यादा खेलेंगे उतना ऊपर चढ़ेंगे। लीडरबोर्ड हर हफ़्ते रीसेट होता है, जिससे सोमवार की सुबह हर किसी को शिखर तक पहुंचने का साफ़ मौका मिलता है।
तकनीकी जानकारी
एक पूरे रिटेंशन लूप के लिए स्कीमा पहले से मौजूद था पर निष्क्रिय और अनपढ़ा पड़ा था — missions / user_missions (आवृत्ति, लक्ष्य, प्रगति, xp_reward) और weekly_top (week_start, अंक)। माइग्रेशन 0031 ने कुछ नया गढ़ने के बजाय इसे मौजूदा फ़िनिश-रिवॉर्ड पथ से जोड़ दिया।
असली फ़िनिश पर daemon हर मानव खिलाड़ी पर लूप करता है और एक ही service-role RPC को कॉल करता है। यह मौजूदा चक्र में उस फ़िनिश से पूरी होने वाली हर मिशन को आगे बढ़ाता है, लक्ष्य पहली बार पार होने पर XP देता है, और साप्ताहिक अंकों के जोड़ में जोड़ता है:
-- grant_play_rewards(p_game, p_user, p_won): security definer, service-role only
-- daily cadence = current_date; weekly = date_trunc('week', now())
-- weekly_top.points += 20 (play) + (won ? 200 : 0) + mission_xp_earned
-- idempotent per (game_id, user_id) via the game_play_grants guard; bots skipped| इवेंट मिलान | आगे बढ़ाता है | अंक |
|---|---|---|
| {"event":"play"} | हर फ़िनिश | +20 |
| {"event":"win"} | केवल जीत | +200 |
| {"event":"play","mode":"speed"} | केवल स्पीड गेम | +20 |
इडेम्पोटेंसी प्रति (गेम, यूज़र) एक गार्ड पंक्ति है, इसलिए दोबारा किया गया commit कभी दो बार भुगतान नहीं करता। लागू करते समय एक प्रिविलेज-एस्केलेशन जाल सामने आया: Postgres की डिफ़ॉल्ट प्रिविलेजेस नई फ़ंक्शनों पर EXECUTE को anon/authenticated को देती हैं, और revoke … from public इसे नहीं हटाता। कोई भी लॉग-इन यूज़र जिसे कॉल कर सके, ऐसी SECURITY DEFINER रिवॉर्ड फ़ंक्शन एक XP फ़ार्म है — इसे revoke … from public, anon, authenticated से ठीक किया गया ताकि केवल {postgres, service_role} ही इसे कॉल कर सके, award_game_winner की तरह।
फ़िलहाल इनाम केवल XP हैं — सिक्के मॉनिटाइज़ेशन ट्रैक के हैं, जिसके लिए पहले एक खर्च-सिंक चाहिए। Play पेज का पैनल और लीडरबोर्ड दोनों मौजूदा चक्र की प्रगति क्लाइंट-साइड पढ़ते हैं, और हफ़्ता उसी सोमवार सीमा पर टिका है जो Postgres इस्तेमाल करता है, इसलिए दोनों कभी असहमत नहीं होते।
