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