Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗เว็บแอป Next.js ที่ตอบคำถามเดียว: ซื้อวัตถุดิบจากตลาด → ผลิต → ขายผลผลิต คุ้มไหม และเลเวลไหนดีที่สุด ครอบคลุมโรงงานทั้ง 43 ตัวใน Craft World ตั้งแต่ Lv.1 ถึงเลเวลสูงสุดของแต่ละโรงงาน
กำไร/รอบ = (ผลผลิต × ราคาขาย) − (วัตถุดิบ × ราคาซื้อ)กำไร/วัน = กำไร/รอบ × (86400 ÷ วินาทีต่อรอบ)% = กำไร/รอบ ÷ ต้นทุนราคาซื้อ/ขายเป็นเรท swap ต่อ 1 หน่วย (marginal — ยิงที่ 1 หน่วย)
SCREWS) จะมีราคาซื้อสูงผิดปกติ
ทำให้โรงงานที่ใช้มันเป็นวัตถุดิบ (Acid, Bolts) แสดงกำไรติดลบมหาศาลnpm install
npm run dev # http://localhost:3000
คำสั่งอื่น: npm run lint · npm run typecheck · npm run build
app/ App Router — layout, หน้าเดียว, global CSS
components/ SummaryTiles (server) + ProfitMatrix (client, ลิสต์/ตาราง/ฟิลเตอร์)
lib/ types, ตัวช่วยฟอร์แมตตัวเลข, ตัวโหลดข้อมูล
data/prices.json ราคา snapshot + ตารางโรงงานทุกเลเวล
อัปเดตราคา = แทนที่ data/prices.json ด้วย snapshot ใหม่ (โครงสร้างตาม lib/types.ts)
หน้าเว็บดึงราคาใหม่ทุก 60 วินาที พร้อมนับถอยหลังและปุ่มรีเฟรชทันที แถบสถานะบอกเสมอว่า
ตัวเลขที่เห็นมาจากไหน — สด คือดึงจากต้นทางสำเร็จ snapshot คือใช้ไฟล์ที่ติดมากับ build
ต้นทางคือ GraphQL ของ craft-world.gg (exactInputQuote) เปลี่ยนปลายทางได้ด้วย PRICE_API_URL
API มีแต่ exactInput (ระบุจำนวนขาเข้า) จึงต้องยิงสองทิศต่อหนึ่ง symbol
| ต้องการ | ยิง | ได้ |
|---|---|---|
ราคาขาย S | S → COIN จำนวน 1 ชิ้น | COIN ที่ได้ = ราคาขายต่อชิ้น |
ราคาซื้อ S | COIN → S ด้วย COIN เท่ากับราคาขาย | ได้ของ ~1 ชิ้น · ราคาซื้อ = COIN ที่จ่าย ÷ จำนวนที่ได้ |
ขาซื้อยิงด้วยมูลค่าราวหนึ่งชิ้นเพื่อให้ price impact เทียบเท่าขาขาย ถ้ายิงด้วย 1 COIN เฉย ๆ ของแพงจะกลายเป็นรายการจิ๋วและได้ราคาดีเกินจริง สองทิศเป็นคนละ pool กันจริง — ใน snapshot อัตราส่วน buy/sell กระจายตั้งแต่ 0.93 (DYNOKEY) ถึง 1.12 (PLASTICS) คำนวณย้อนจากค่าธรรมเนียมคงที่ไม่ได้
46 symbol × 2 ทิศ = 92 quote ต่อการรีเฟรชหนึ่งครั้ง รวมเป็น query ด้วย GraphQL alias แบ่งเป็นก้อนละ 8 ยิงขนานกันในแต่ละรอบ และ route แคชผลไว้ 30 วินาที หลายแท็บจึงไม่ถล่มต้นทาง
ต้นทางปกติตอบก้อนหนึ่งใน 1–3 วินาที แต่บางคำขอค้างแบบสุ่มนานเป็นสิบวินาที และค้างซ้ำได้ ก้อนไหนยังไม่ตอบใน 3 วินาทีจะยิงสำเนาขนานไปอีกชุดโดยไม่ยกเลิกตัวเดิม เอาตัวที่ตอบก่อน (สูงสุด 3 ชุดต่อก้อน) งบเวลารวม 30 วินาที
ราคาที่ได้ต้องครบทุกไอเทมที่สูตรใช้ ไม่งั้นถูกปฏิเสธแล้วตกกลับไปใช้ snapshot — payload ที่ขาดบางตัวจะทำให้ต้นทุนกลายเป็น Infinity ทั้งกระดาน ซึ่งแย่กว่าราคาเก่า
ปุ่มด้านบนหน้าเว็บสลับได้ 3 แบบ ตัวเลขทั้งหน้าเปลี่ยนตาม
| โหมด | วัตถุดิบมาจากไหน |
|---|---|
market ซื้อวัตถุดิบ | ซื้อวัตถุดิบชั้นถัดไปจากตลาด คราฟต์ 1 รอบ ขายผลผลิตกลับ |
chain คราฟต์สุดสาย | ซื้อเฉพาะ Dust · Fire · Water กับ Earth นอกนั้นคราฟต์เองทุกชั้น |
mixed เลือกที่ถูกกว่า | แต่ละชั้นเลือกทางที่ถูกกว่าระหว่างซื้อกับทำเอง (make-or-buy) |
Earth เป็นเหมืองที่ขุดเองได้ แต่คิดราคาซื้อจากตลาดทุกโหมด เพื่อให้เห็นต้นทุนแบบซื้อจริง — ถ้าคิดเป็น 0 ทั้งสาย Mud→Clay→Sand→Copper จะกลายเป็นฟรีและทำให้กำไรดูเกินจริงไปมาก
ด้วยเหตุผลเดียวกัน เหมืองไม่ถูกนับเป็นโรงงานในตาราง (isPurchasedOnly ใน lib/cost.ts
คัดออก) เพราะไม่มีวัตถุดิบให้ซื้อ ต้นทุนเลยเป็น 0 กำไร % ไม่มีความหมาย และจะขึ้นอันดับหนึ่ง
กำไร/วันเสมอทั้งที่เทียบกับโรงงานอื่นไม่ได้ ตารางจึงเหลือ 42 โรงงานที่เอามาเทียบกันได้จริง
แต่ละเลเวลกางเป็น รายการที่ต้องซื้อ ได้ (shoppingList ใน lib/cost.ts) บอกว่าต้องซื้ออะไร
จำนวนเท่าไหร่ ราคาต่อหน่วยเท่าไหร่ ผลรวมเท่ากับต้นทุนของแถวนั้นพอดี กดที่เลเวลในตารางเพื่อเปลี่ยนแถวที่กางดู
โหมดที่คราฟต์เองสมมติว่าโรงงานที่ป้อนให้อยู่ที่เลเวลซึ่งกินวัตถุดิบต่อชิ้นน้อยที่สุด
กำไร/วันนับเวลาของโรงงานป้อนแบบคอขวด — มีโรงงานแต่ละชนิดอย่างละโรงเดินพร้อมกัน
แต่ละโรงต้องผลิตวัตถุดิบให้พอหนึ่งรอบของโรงงานเป้าหมาย เวลาจริงต่อรอบคือค่าที่มากที่สุด
ระหว่างรอบของโรงงานเป้าหมายกับเวลาของโรงงานป้อนแต่ละตัว (cycle และ bottleneck ใน CostedRow)
โรงงานป้อนที่ใช้วัตถุดิบเท่ากันทุกเลเวลคิดที่เลเวลที่ผลิตได้เร็วที่สุด และ ads2x เร่งทุกโรงงานในสาย
เลย์เอาต์ปรับตามความกว้างจอด้วย CSS ล้วน ไม่มีการเช็ค user-agent (SSR จึงตรงกับ client เสมอ)
| ความกว้าง | เลย์เอาต์ |
|---|---|
< 760px | ลิสต์บน/ตารางล่าง · ตารางเหลือ 4 คอลัมน์หลัก รายละเอียดที่เหลือย้ายลงแถว .subrow เต็มความกว้าง · แตะโรงงานแล้วเลื่อนไปตารางให้ พร้อมแถบ "← รายการโรงงาน" แบบ sticky |
760–899px | คอลัมน์เดียว แต่ตารางแสดงครบ 9 คอลัมน์ |
≥ 900px | สองพาเนล ลิสต์ sticky ค้างไว้ซ้าย · หัวตาราง sticky ขณะเลื่อนดูเลเวลยาว ๆ |
รายละเอียดอื่น: ปุ่มบนจอแคบสูงอย่างน้อย 40px, ช่องค้นหาใช้ font-size 16px กัน iOS ซูมเอง,
:focus-visible มองเห็นชัดสำหรับคีย์บอร์ด, hover เปิดเฉพาะอุปกรณ์ที่มีเมาส์จริง
และเคารพ prefers-reduced-motion ตอนเลื่อนหน้า
.github/workflows/ci.yml รันบน push เข้า main, ทุก pull request และตามกำหนดทุกสัปดาห์
npm run lint, npm run typecheck, npm run buildnpm audit --omit=dev --audit-level=high) ส่วนทุก dependency รวม dev tooling ล้มงานที่ระดับ critical
(npm audit --audit-level=critical) เพราะ dev tooling ไม่ถูก deploy และบางตัวต้นทางยังไม่มีเวอร์ชันแก้
ผลเต็มทุกระดับแนบไว้ใน job summary เสมอDeploy บน Vercel — ค่า default ของ Next.js ใช้ได้เลย ไม่ต้องตั้ง env var ใดๆ
ข้อมูลโรงงานจาก rawrtools.com · ราคาจาก craft-world.gg