อยู่ระหว่างพัฒนา — เกมยังไม่เปิดให้ดาวน์โหลด ทุกอย่างอาจเปลี่ยนได้ ติดตามความคืบหน้าใน devlog

คู่มือ Riftfield

ทุกอย่างที่ต้องรู้ตั้งแต่ตื่นมาในป่าอีกโลก ไปจนถึงเปิดเซิร์ฟเวอร์ให้เพื่อนเข้ามาเล่นตลอด 24 ชั่วโมง

เริ่มต้น

เปิดเกม → สร้างตัวละคร → เล่นคนเดียว เพื่อสร้างโลกใหม่ หรือ เข้าร่วม เพื่อเข้าโลกของเพื่อน/เซิร์ฟเวอร์ แต่ละโลกสร้างจาก seed ต่างกันทั้งแผนที่ แร่ ถ้ำ และตำแหน่งวิหาร

กด G ดูเป้าหมายแนะนำทีละขั้น และ H เปิดหน้าวิธีเล่นที่อธิบายทุกระบบในเกม · เปลี่ยนภาษา (ไทย / English) ได้ใน ตั้งค่า

การควบคุม

เปลี่ยนปุ่มได้ทุกปุ่มใน Esc → ตั้งค่า · จอย Xbox ใช้ได้ · มือถือมีจอยสติ๊กและปุ่มบนจอ

คีย์บอร์ด / เมาส์จอย
เดิน / วิ่งWASD / ลูกศร · Shift ค้างสติ๊กซ้าย · LT/X
ใช้ของในมือSpace / คลิกA / RT
เลือกช่อง1–9, 0 / ล้อเมาส์RB, ◀ ▶, ▲
หลบ / ฟันหมุนQ / RLB / กดสติ๊กซ้าย
สลับอาวุธV▲ (ที่ช่องดาบ)
ฟันพุ่งวิ่ง + ฟันLT/X + RT
เล็งทิศโจมตีเมาส์สติ๊กขวา
สร้าง ซ่อม ทำอาหารCY
ตู้เสื้อผ้า / กิน / แผนที่E / F / Mสติ๊กขวา / B / Back
ค่าหัว / เก็บเข้าหีบ / ปักหมุดB / X / P— / ▼ / —
เป้าหมาย / วิธีเล่น / แชทG / H / Enter
ซูม / ซ่อน HUD= - / F10

วันแรก ๆ ทำอะไรดี

  1. ตัดไม้ ทุบหิน แล้วสร้าง โต๊ะช่าง (C) ข้างประตูมิติ
  2. ทำดาบ ทำจอบ ปลูกผักใกล้ ๆ บ้าน — อาหารให้บัฟที่ช่วยตอนสู้
  3. ลงถ้ำหาแร่ทองแดงกับดีบุก สร้าง เตาหลอม แล้วอัปเกรดดาบและเกราะ
  4. เตรียมตัวให้ดีก่อนคืน จันทร์มิติ และวันที่มอนบุกประตูทุก 7 วัน
  5. ตามหาวิหารโบราณ ซ่อมเครื่องเปิดมิติ แล้วกลับไปฟื้นฟูเมืองแอชฟอร์ด

ทำไร่

พรวนดินด้วยจอบ (ช่อง 2) หว่านเมล็ดด้วยช่อง 3 (กดซ้ำเพื่อเปลี่ยนชนิดเมล็ด) — พืชโต 3 ขั้น หลังต้นอ่อนโผล่ทุกขั้นต้องได้น้ำก่อนถึงจะโตต่อ (หยดน้ำสีฟ้าลอยบอก) พืชที่สุกมีประกายวิบวับ

โฮสต์ / เข้าร่วม

มีสองแบบ:

เข้าร่วม: เมนูหลัก → เข้าร่วม → ใส่ 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 server

Docker จะดึง 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=81–16 คน
RIFTFIELD_SEED--seed=(สุ่ม)ใช้ตอนสร้างโลกใหม่เท่านั้น ใส่ตัวเลขหรือคำก็ได้
RIFTFIELD_DIFFICULTY--difficulty=normaleasy · normal · hard
RIFTFIELD_PVP--pvp=falseผู้เล่นตีกันได้
RIFTFIELD_GUESTS_CAN_BUILD--guests-can-build=trueผู้เล่นสร้าง/ทุบของในโลกได้
RIFTFIELD_DAY_LENGTH--day-length=600ความยาวหนึ่งวันในเกม (วินาที)
RIFTFIELD_AUTO_UPDATE—falsetrue = อัปเดตเซิร์ฟเป็น image ใหม่ล่าสุดเอง เมื่อไม่มีใครอยู่ในเซิร์ฟครบตามเวลาด้านล่าง (ต้องใช้ RIFTFIELD_VERSION=latest) เซฟโลกก่อนเสมอ
RIFTFIELD_UPDATE_IDLE_MINUTES—30เซิร์ฟต้องว่างกี่นาทีก่อนจะอัปเดต
RIFTFIELD_UPDATE_CHECK_MINUTES—10เช็กทุกกี่นาที
เปิดอัปเดตอัตโนมัติแล้ว ผู้เล่นต้องอัปเดตตัวเกมให้เป็นเวอร์ชันเดียวกับเซิร์ฟด้วย ไม่อย่างนั้นจะเข้าไม่ได้ ดูว่าเซิร์ฟอัปเดตเมื่อไรด้วย docker compose logs updater

แก้ .env แล้วสั่ง docker compose up -d อีกครั้งเพื่อให้ค่าใหม่มีผล

พอร์ตและโดเมน

สำรอง อัปเดต ย้ายเซฟ

เซฟอยู่ใน 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 เป็นชื่อใหม่