🛡️ Provably Fair RNG
ความโปร่งใสที่ตรวจสอบได้ (Provably Fair)
เพื่อป้องกันการล็อกผล ระบบ DomHuang ใช้หลักการ Factory Pre-generation การ์ดและสเตตัสทั้งหมดใน 1 กล่อง/เคส ถูกสร้างและเข้ารหัสไว้ล่วงหน้าก่อนวางจำหน่าย เมื่อคุณกดเปิดซอง ระบบเป็นเพียงแค่ผู้หยิบการ์ดที่ถูกสร้างไว้แล้วมาใส่กระเป๋าคุณ ไม่มีการเสกใหม่หรือปรับสเตตัสหน้างาน 100%
📦 Live Supply Pool Status
อัปเดตแบบเรียลไทม์ผ่าน D1 Database
จำนวนเคสทั้งหมดที่ผลิต
2,000 Cases
(10,000 Packs in Pool)
จำนวนซองที่ถูกเปิดไปแล้ว
6,540 / 10,000
(65.4% Opened)
การ์ดระดับตำนาน (UR/SEC) ที่เหลือในระบบ
8 / 10 ใบ
The Jackpot Ledger (บันทึกรางวัลแจ็คพอตล่าสุด)
ตารางแสดงรายชื่อผู้เล่นที่สุ่มได้การ์ดแรร์ล่าสุด เพื่อยืนยันว่าแจกจริง ไม่ล็อกผล
| เวลา | ผู้ใช้ (ปิดชื่อ) | ชื่อการ์ด & ความแรร์ | Card UUID | สถานะพลัง |
|---|---|---|---|---|
| 2 mins ago | DomLover*** | URน้อง A ชุดว่ายน้ำ | 769dcbc9-...-7fa2bd47e44 | 🔥 God Roll (100% Max Stats) |
| 15 mins ago | User_888*** | SECRealix Dragon (Alt Art) | c72e95a0-...-a31b52fb34d | พลังปกติ |
| 1 hour ago | ArtToyCollector*** | URVoid Mage Seraph | a62726cc-...-824b4d2f6d3 | พลังปกติ |
circulation & Deflation Tracker
ระบบควบคุมเงินเฟ้อและรักษามูลค่าการ์ดสะสมของนักลงทุน
📈
จำนวนการ์ดที่หมุนเวียนในระบบ
42,504 Cards
🔥
การ์ดระดับล่างที่เผาทิ้ง (The Furnace)
18,340 Cards
💰
เหรียญ RXC ที่จ่ายคืนแก่ระบบ
1,834,000 RXC
Developer & Algorithm Proof
ตัวอย่างลอจิกคณิตศาสตร์ในการคำนวณการสุ่มและจำลองการต่อสู้เพื่อความโปร่งใส 100%
// DomHuang Provably Fair Pack Opening Algorithm (TypeScript)
export async function openPack(packId: string, salt: string) {
// 1. Fetch pre-generated blind index mapped to the pack
const blindIndex = crypto.subtle.digest("SHA-256", new TextEncoder().encode(packId + salt));
// 2. Fetch the pre-assigned card list mapped from factory production
const preGeneratedCards = await db.select()
.from(schema.cards)
.where(eq(schema.cards.blindIndex, hex(blindIndex)))
.all();
return preGeneratedCards; // 100% Immutable and Auditable
}
// DomHuang Arena Clash Battle Simulation (Pure Math)
export function simulateClash(deckA: Card[], deckB: Card[]) {
let log = [];
for (let turn = 1; turn <= 20; turn++) {
// Battle outcomes are computed deterministically using standard formula
const powerA = deckA.reduce((sum, c) => sum + (c.atk || 0), 0);
const defenseB = deckB.reduce((sum, c) => sum + (c.def || 0), 0);
const damage = Math.max(1, powerA - Math.floor(defenseB * 0.4));
deckB[0].hp = Math.max(0, deckB[0].hp - damage);
if (deckB[0].hp === 0) deckB.shift(); // Card defeated
if (deckB.length === 0) break; // Team defeated
}
return log;
}