अब कोई अकेला इंतज़ार नहीं करता: मिलिए नियमित खिलाड़ियों से
पहले कमरा खोलने का मतलब था अकेले इंतज़ार करना और फिर हार मान लेना। अब असली नामों, तय मिज़ाज और इंसानी रफ़्तार वाले बारह नियमित खिलाड़ी खाली सीटें भर देते हैं।

आसान शब्दों में
इस अपडेट से पहले, आपके बनाए कमरे में कभी कोई शामिल नहीं होता था। आप मोड चुनते, मेज़ खोलते और इंतज़ार करते — और अकसर अकेले ही। इससे पहले के छह हफ़्तों के आँकड़े साफ़ हैं:
| हमने क्या मापा | परिणाम |
|---|---|
| खिलाड़ी द्वारा खोले गए कमरे जो कभी शुरू ही नहीं हुए | 38 |
| हार मानने से पहले औसत इंतज़ार | लगभग 3.2 घंटे |
| एक कमरा जो 4/4 भर गया, फिर भी शुरू नहीं हुआ | 2 दिन इंतज़ार किया |
| एक से अधिक इंसानों वाले समाप्त गेम | 231 में से 46 |
अब मेज़ अपने आप भर जाती है। कमरा खोलने के बीस सेकंड से चार मिनट के भीतर कोई न कोई बैठ जाता है। लॉबी में एक दर्जन नियमित खिलाड़ी आते-जाते रहते हैं — सामान्य निकनेम, कोई "रोबोबैरन" नहीं — और हर बार मिलने पर वही खिलाड़ी होते हैं:
- तय मिज़ाज: वही प्रतिद्वंद्वी हमेशा सावधानी से खेलता है, या हमेशा ज़्यादा बोली लगाता है;
- जुड़ने की तारीख़ और अनुभव स्तर, जो आज सुबह नहीं गढ़े गए;
- अपनी रफ़्तार — वे एक से छह सेकंड सोचते हैं, मेट्रोनोम की तरह ठीक दो सेकंड नहीं;
- स्टिकर के बजाय कभी-कभी चैट में एक छोटी-सी पंक्ति;
- प्रतीक्षा कक्ष में कोई "bot" बैज नहीं, क्योंकि मेज़ पर वे खिलाड़ियों जैसा ही व्यवहार करते हैं।
वे लीडरबोर्ड पर भी दिखते हैं — अगर वे असली गेम खेल रहे हैं तो यही ईमानदारी है — लेकिन उनकी दैनिक कमाई पर सख़्त सीमा है, इसलिए वे एक सामान्य खिलाड़ी की तरह ऊपर आते हैं, बोर्ड को फ़ार्म करके नहीं।
तकनीकी जानकारी
ये बारह पात्र गेम डेमन के बूट होने पर इडेम्पोटेंट ढंग से बनाए जाते हैं और प्रोफ़ाइल टेबल में पहले से समर्थित एक मान से चिह्नित होते हैं — इसलिए पूरी सुविधा बिना किसी डेटाबेस माइग्रेशन और बिना किसी गेम-नियम बदलाव के आई।
भराई शेड्यूलर का एक टिक है, हर कमरे का अलग टाइमर नहीं। हर देरी कमरे और सीट पर आधारित सीड वाले रैंडम से निकलती है और डेटाबेस में रखे टाइमस्टैम्प पर टिकी होती है, इसलिए डेमन के पुनः आरंभ पर वही शेड्यूल जारी रहता है, नई देरी नहीं निकाली जाती:
// scheduler.ts — seeded per (room, seat), anchored on a DB timestamp
const rng = createRng(`${game.id}:fill:${seat}`);
const isLastSeat = freeSeats === 1;
const delayMs = isLastSeat
? rng.int(LAST_SEAT_MIN_MS, LAST_SEAT_MAX_MS) // 3-8 min: leave room for a human
: rng.int(SEAT_MIN_MS, SEAT_MAX_MS); // 20 s - 4 min
if (Date.now() - Date.parse(game.created_at) < delayMs) continue;| सेटिंग | मान |
|---|---|
| सीट भरने की देरी | 20 से – 4 मिनट, प्रति सीट सीड सहित |
| आख़िरी सीट | 3 – 8 मिनट |
| भरी और शांत मेज़ पर स्वतः शुरुआत | 3 मिनट |
| बॉट का सोचने का समय | 1 – 6 सेकंड, पात्र के अनुसार |
| पात्रों का XP | प्रति UTC दिन अधिकतम एक पुरस्कार |
तीन ख़ामियाँ तभी सामने आईं जब यह वास्तव में चला, और कोई भी यूनिट टेस्ट इनमें से एक को भी नहीं पकड़ता: भरे हुए कमरे भराई की उम्मीदवार क्वेरी से बाहर थे, इसलिए स्वतः शुरुआत को ठीक वही स्थिति कभी दिखी ही नहीं जिसके लिए वह बनी है; सोचने की देरी का की गेम पर था, बॉट पर नहीं, इसलिए किसी टर्न का ठहराव उसी बॉट की नीलामी बोली को भी रोक देता था और वह अपनी ही विंडो से अपने आप पास हो जाता था; और डेमन द्वारा शुरू किए गए गेम शेड्यूलरों को निष्क्रियता से नहीं जगाते थे, जिससे शुरुआत और पहले बॉट रोल के बीच 49 मिलीसेकंड के बजाय 11.6 सेकंड लगते थे।
