คู่มือ Riftfield
ทุกอย่างที่ต้องรู้ตั้งแต่ตื่นมาในป่าอีกโลก ไปจนถึงเปิดเซิร์ฟเวอร์ให้เพื่อนเข้ามาเล่นตลอด 24 ชั่วโมง
เริ่มต้น
เปิดเกม → สร้างตัวละคร → เล่นคนเดียว เพื่อสร้างโลกใหม่ หรือ เข้าร่วม เพื่อเข้าโลกของเพื่อน/เซิร์ฟเวอร์ แต่ละโลกสร้างจาก seed ต่างกันทั้งแผนที่ แร่ ถ้ำ และตำแหน่งวิหาร
กด G ดูเป้าหมายแนะนำทีละขั้น และ H เปิดหน้าวิธีเล่นที่อธิบายทุกระบบในเกม · เปลี่ยนภาษา (ไทย / English) ได้ใน ตั้งค่า
การควบคุม
เปลี่ยนปุ่มได้ทุกปุ่มใน Esc → ตั้งค่า · จอย Xbox ใช้ได้ · มือถือมีจอยสติ๊กและปุ่มบนจอ
| คีย์บอร์ด / เมาส์ | จอย | |
|---|---|---|
| เดิน / วิ่ง | WASD / ลูกศร · Shift ค้าง | สติ๊กซ้าย · LT/X |
| ใช้ของในมือ | Space / คลิก | A / RT |
| เลือกช่อง | 1–9, 0 / ล้อเมาส์ | RB, ◀ ▶, ▲ |
| หลบ / ฟันหมุน | Q / R | LB / กดสติ๊กซ้าย |
| สลับอาวุธ | V | ▲ (ที่ช่องดาบ) |
| ฟันพุ่ง | วิ่ง + ฟัน | LT/X + RT |
| เล็งทิศโจมตี | เมาส์ | สติ๊กขวา |
| สร้าง ซ่อม ทำอาหาร | C | Y |
| ตู้เสื้อผ้า / กิน / แผนที่ | E / F / M | สติ๊กขวา / B / Back |
| ค่าหัว / เก็บเข้าหีบ / ปักหมุด | B / X / P | — / ▼ / — |
| เป้าหมาย / วิธีเล่น / แชท | G / H / Enter | |
| ซูม / ซ่อน HUD | = - / F10 |
วันแรก ๆ ทำอะไรดี
- ตัดไม้ ทุบหิน แล้วสร้าง โต๊ะช่าง (C) ข้างประตูมิติ
- ทำดาบ ทำจอบ ปลูกผักใกล้ ๆ บ้าน — อาหารให้บัฟที่ช่วยตอนสู้
- ลงถ้ำหาแร่ทองแดงกับดีบุก สร้าง เตาหลอม แล้วอัปเกรดดาบและเกราะ
- เตรียมตัวให้ดีก่อนคืน จันทร์มิติ และวันที่มอนบุกประตูทุก 7 วัน
- ตามหาวิหารโบราณ ซ่อมเครื่องเปิดมิติ แล้วกลับไปฟื้นฟูเมืองแอชฟอร์ด
ทำไร่
พรวนดินด้วยจอบ (ช่อง 2) หว่านเมล็ดด้วยช่อง 3 (กดซ้ำเพื่อเปลี่ยนชนิดเมล็ด) — พืชโต 3 ขั้น หลังต้นอ่อนโผล่ทุกขั้นต้องได้น้ำก่อนถึงจะโตต่อ (หยดน้ำสีฟ้าลอยบอก) พืชที่สุกมีประกายวิบวับ
- รดน้ำ — บัวรดน้ำ (ไม้ / ทองแดง / เหล็ก) ใช้จากช่องจอบ เติมที่น้ำ · ฝนรดให้ทุกต้น · สปริงเกอร์ ทองแดงรด 3×3 เหล็กรด 5×5 ให้เองตลอด
- ข้าว ปลูกติดน้ำแล้วไม่ต้องรดเลย · ทิวลิปเรืองแสง (ฟ้า ชมพู ทอง) บานแล้วส่องสว่างและกันมอนเกิด · พริกมิติ ทำต้มยำ กินแล้วตีมอนติดไฟ
- ฤดู — ฤดูฝนพืชโตเร็ว ฤดูหนาวโตช้า · ข้าวชอบฤดูฝน พริกชอบฤดูร้อน ทิวลิปชอบฤดูหนาว
- ต้นไม้ผล — กล้ามะม่วงและกล้าต้นผลดาวปลูกด้วยช่อง 9 โตเองทุกเช้าแล้วออกผลซ้ำ มีต้นป่าออกผลอยู่แล้วในป่าและถ้ำ
- เคียว พกไว้แล้วเก็บพืชสุกทีละ 3×3
- ด้วงกินผัก โผล่ในแปลงที่มืดตอนกลางคืน (ตั้งแต่วันที่ 3) — ไล่ตีมันหรือกันด้วยไฟ ทิวลิปเรืองแสง หรือหุ่นไล่กา · ปราบครบ 12 ตัวแล้ว ราชินีด้วง จะบุกไร่
โฮสต์ / เข้าร่วม
มีสองแบบ:
- โฮสต์จากในเกม — คนเปิดโลกเป็นเซิร์ฟเวอร์ เพื่อนเข้าได้เฉพาะตอนเขาเล่นอยู่ เหมาะกับเล่นกันในบ้าน/LAN
- เซิร์ฟเวอร์เฉพาะ (dedicated) — รันบนเครื่องอื่นตลอดเวลา ไม่มีตัวละครของโฮสต์ ใครจะเข้าออกเมื่อไรก็ได้ ดูหัวข้อถัดไป
เข้าร่วม: เมนูหลัก → เข้าร่วม → ใส่ IP หรือโดเมน พอร์ต (ค่าเริ่มต้น 24567) และรหัสผ่านถ้ามี ทุกคนต้องใช้ เกมเวอร์ชันเดียวกับเซิร์ฟเวอร์
เปิดเซิร์ฟเวอร์ด้วย Docker
ต้องมี: เครื่อง Linux (VPS ขั้นต่ำ 1 vCPU / 1 GB RAM สำหรับ 4–8 คน), Docker พร้อม Compose และพอร์ต UDP ที่เปิดได้
mkdir riftfield && cd riftfield
curl -O https://rift-field.com/server/docker-compose.yml
curl -o .env https://rift-field.com/server/env.example
nano .env # ตั้งชื่อโลก รหัสผ่าน ฯลฯ
docker compose up -d
docker compose logs -f serverDocker จะดึง image สำเร็จรูป ghcr.io/rennyyy/riftfield-server มาให้เอง ไม่ต้องโหลดซอร์สโค้ด รองรับทั้งเครื่อง x86 และ ARM (เช่น Oracle Ampere, Raspberry Pi 4/5)
เห็นบรรทัดนี้แปลว่าพร้อมแล้ว:
[server] Riftfield 1.9.0 — world "server" (seed 1819872895) on UDP 24567, up to 8 playersตั้งค่าเซิร์ฟเวอร์
ตั้งใน .env หรือส่งเป็นอาร์กิวเมนต์ --key=value ตอนรันเอง อาร์กิวเมนต์ชนะตัวแปรสภาพแวดล้อม
| ตัวแปร | อาร์กิวเมนต์ | ค่าเริ่มต้น | ความหมาย |
|---|---|---|---|
RIFTFIELD_VERSION | — | latest | เวอร์ชันของ image เช่น 1.9.0 — ล็อกไว้ให้ตรงกับเกมของผู้เล่น |
RIFTFIELD_WORLD | --world= | server | ชื่อโลก = ชื่อไฟล์เซฟ ถ้ามีเซฟชื่อนี้อยู่แล้วจะโหลดต่อ |
RIFTFIELD_PORT | --port= | 24567 | พอร์ต UDP |
RIFTFIELD_PASSWORD | --password= | (ว่าง) | รหัสผ่านเข้าโลก ว่าง = ไม่มีรหัส |
RIFTFIELD_MAX_PLAYERS | --max-players= | 8 | 1–16 คน |
RIFTFIELD_SEED | --seed= | (สุ่ม) | ใช้ตอนสร้างโลกใหม่เท่านั้น ใส่ตัวเลขหรือคำก็ได้ |
RIFTFIELD_DIFFICULTY | --difficulty= | normal | easy · normal · hard |
RIFTFIELD_PVP | --pvp= | false | ผู้เล่นตีกันได้ |
RIFTFIELD_GUESTS_CAN_BUILD | --guests-can-build= | true | ผู้เล่นสร้าง/ทุบของในโลกได้ |
RIFTFIELD_DAY_LENGTH | --day-length= | 600 | ความยาวหนึ่งวันในเกม (วินาที) |
RIFTFIELD_AUTO_UPDATE | — | false | true = อัปเดตเซิร์ฟเป็น image ใหม่ล่าสุดเอง เมื่อไม่มีใครอยู่ในเซิร์ฟครบตามเวลาด้านล่าง (ต้องใช้ RIFTFIELD_VERSION=latest) เซฟโลกก่อนเสมอ |
RIFTFIELD_UPDATE_IDLE_MINUTES | — | 30 | เซิร์ฟต้องว่างกี่นาทีก่อนจะอัปเดต |
RIFTFIELD_UPDATE_CHECK_MINUTES | — | 10 | เช็กทุกกี่นาที |
docker compose logs updaterแก้ .env แล้วสั่ง docker compose up -d อีกครั้งเพื่อให้ค่าใหม่มีผล
พอร์ตและโดเมน
- เปิด UDP
24567(หรือพอร์ตที่ตั้ง) ที่ไฟร์วอลล์ของ VPS เช่นsudo ufw allow 24567/udpและใน security group ของผู้ให้บริการ cloud - ถ้ารันที่บ้าน ต้อง forward พอร์ต UDP นี้ที่เราเตอร์ไปยังเครื่องเซิร์ฟเวอร์
- ใช้โดเมนได้: ตั้ง DNS แบบ A record เช่น
play.rift-field.com → IP ของเซิร์ฟเวอร์แล้วให้เพื่อนใส่play.rift-field.comในช่องที่อยู่ ห้ามเปิด proxy (เมฆสีส้ม) ของ Cloudflare สำหรับ record นี้ เพราะ proxy ไม่ส่ง UDP ของเกม
สำรอง อัปเดต ย้ายเซฟ
เซฟอยู่ใน Docker volume worlds (ในคอนเทนเนอร์คือ /home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds) เกมเก็บสำรองให้เองอีก 3 ชุด (.bak1–.bak3)
เซิร์ฟเซฟอัตโนมัติทุก 1 นาทีที่มีคนเล่น ทุกครั้งที่มีคนออก และตอน docker compose stop / down
สำรองออกมาไว้ที่เครื่อง
docker compose cp server:/home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds ./backup-worldsย้ายโลกที่เล่นในเกมขึ้นเซิร์ฟเวอร์
ไฟล์เซฟในเครื่อง: Windows %APPDATA%\Godot\app_userdata\Riftfield\worlds · macOS ~/Library/Application Support/Godot/app_userdata/Riftfield/worlds · Linux ~/.local/share/godot/app_userdata/Riftfield/worlds
docker compose cp ./โลกของฉัน.json server:/home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds/
# แล้วตั้ง RIFTFIELD_WORLD ให้ตรงชื่อไฟล์ (ไม่ต้องใส่ .json)
docker compose up -dอัปเดตเกม
docker compose pull
docker compose up -dถ้าตั้ง RIFTFIELD_VERSION เป็นเลขเวอร์ชัน ให้แก้เลขใน .env ก่อน แล้วค่อยสั่งสองบรรทัดนี้
build เองจากซอร์ส / ไม่ใช้ Docker
build image เองจากซอร์ส (สำหรับทีมพัฒนาที่เข้าถึง repo ได้):
git clone https://github.com/Rennyyy/Riftfield.git
cd Riftfield
cp .env.example .env
docker compose up -d --buildหรือรันด้วย Godot 4.7 ตรง ๆ จากโฟลเดอร์โปรเจกต์:
godot --headless --path . -- --server --world=myworld --port=24567 --password=secretปิดด้วยการสร้างไฟล์ที่ระบุใน RIFTFIELD_STOP_FILE (เซิร์ฟจะเซฟแล้วปิดเองภายใน 1 วินาที) — ถ้าฆ่าโพรเซสตรง ๆ จะเสียความคืบหน้าหลังเซฟล่าสุด
คำถามที่พบบ่อย
เพื่อนเชื่อมต่อไม่ได้
ตรวจว่าเปิดพอร์ตเป็น UDP (ไม่ใช่ TCP) ทั้งที่ไฟร์วอลล์ของเครื่องและของผู้ให้บริการ ดู log ด้วย docker compose logs server ถ้าไม่มีบรรทัด "joined" แปลว่าแพ็กเก็ตยังมาไม่ถึง
"ชื่อนี้มีคนใช้อยู่ในโลกนี้แล้ว"
ตัวละครผูกกับชื่อผู้เล่น ของในตัวและตำแหน่งจะกลับมาเมื่อเข้าด้วยชื่อเดิม เปลี่ยนชื่อได้ที่เมนูหลัก
เซิร์ฟเวอร์ใช้ทรัพยากรเท่าไร
ตอนไม่มีคนเล่นแทบไม่ใช้ CPU · มีผู้เล่น 1 คนใช้ RAM ราว 110 MB และ CPU ไม่ถึง 10% ของหนึ่งคอร์ เล่นกันหลายคนจะเพิ่มขึ้นตามจำนวนพื้นที่ที่โหลดอยู่
เปลี่ยน seed ของโลกที่มีอยู่ได้ไหม
ไม่ได้ — seed ติดกับโลกตั้งแต่สร้าง ถ้าอยากได้แผนที่ใหม่ให้ตั้ง RIFTFIELD_WORLD เป็นชื่อใหม่