""" + NAV + """

🌾 農場遊戲交接手冊 v2.4

D1 六表 · Worker 十二 API · 12 種作物 · 天氣 + 留言板
2026-10-29 · 開心農場 v2.4

一、系統總覽

項目值
前端網址https://farm.ahpal.com
Worker URLhttps://ahpal-farm-api.praystone.workers.dev
Pages 專案ahpal-farm(GitHub Actions 部署)
D1 資料庫ahpal-farm-db
GitHub repopraystone/ahpal-farm
Turnstile Site Key0x4AAAAAAFq7xrbRdmP4m73Y
Turnstile Secret已存 Worker Secret TURNSTILE_SECRET

二、D1 六張表

#表名用途
1crops12 種作物(8 菜 4 水果),含 category
2farms每塊田(含 stolen_at)
3farm_logs播種/收成/偷菜紀錄
4farm_players玩家金幣
5farm_weather當前天氣(Cron 每 6 小時換)
6farm_comments留言板(Turnstile 保護)

12 種作物:🥕蘿蔔 60s / 🥬菠菜 120s / 🍅番茄 300s / 🥬高麗菜 600s / 🌽玉米 1800s / 🎃南瓜 3600s / 🌶️辣椒 5400s / 🍓草莓 7200s / 🍆茄子 7200s / 🫐藍莓 14400s / 🍉西瓜 28800s / 🍇葡萄 43200s(8 菜 4 水果)

三、Worker 十二 API

#端點方法用途
1/api/cropsGET作物清單
2/api/plantPOST種植
3/api/farmGET查看自己的田
4/api/harvestPOST收成(含天氣加成)
5/api/playerGET讀金幣
6/api/stealPOST偷菜
7/api/random-farmGET隨機找成熟田
8/api/recent-stealsGET公告牆(含苦主)
9/api/steal-historyGET偷菜總表(分頁+近 N 天)
10/api/weatherGET當前天氣
11/api/weather/forecastGET天氣預報
12/api/commentsGET/POST留言板(POST 需 Turnstile)
重要:POST /api/comments 必須帶 turnstileToken,後端會打 Cloudflare siteverify 驗證,失敗回 403。GET 和 POST 已分開,GET 有 request.method === "GET" 限制。

四、v2.4 已上線功能

#功能狀態
1種菜、收成、金幣✅
2偷菜 + 隨機偷✅
3偷菜公告牆(含苦主 + 相對時間)✅
4偷菜總表(可展開、可翻頁、近 1/3/7 天)✅
5天氣系統(四種天氣 + Cron + 收成加成)✅
612 種作物(8 菜 4 水果)✅
7留言板(Turnstile 人機驗證)✅
8導航列(照寵物格式)✅
9田區 grid 兩排✅

五、v2.5 缺口(下一輪)

#功能狀態
1等級門檻(crops 沒 level_required)❌ v2.5
2多季作物(crops 沒 season_count)❌ v2.5
3化肥加速❌ v2.5
4偷竊次數上限❌ v2.5
5雜草蟲害❌ v2.5
6土地擴張❌ v2.5

六、這幾輪踩的坑(給下一個 AI)

  1. Turnstile CSP:_headers 的 script-src、frame-src、connect-src、style-src 都要放行 challenges.cloudflare.com
  2. Turnstile token:用 data-callback="onTurnstileSuccess" 取 token,不要用 querySelector("[name='cf-turnstile-response']")(Managed 模式可能抓不到)
  3. 路由方法:if (path === "/api/comments") 要加 request.method === "GET",不然 POST 會被攔截
  4. 函數初始化:refreshWeather()、loadHistory("all")、loadComments(1) 都要在「頁面初始化區」呼叫,不能在函數定義裡
  5. 相對時間:D1 存 UTC,顯示時用 toRelTime() 轉「剛剛/N 分鐘前」,避免時區錯亂
  6. 猜錨點必失敗:改 HTML/PS1 前,先印出真實碼再改
  7. 逐個 script node --check:HTML 的 JS 也要驗語法,不能只驗 Worker

七、給下一個 AI 的話

🌾 2009 年,你在偷誰的菜?

2009 年,Facebook 開心農場。你半夜設鬧鐘起來,就為了偷同學那顆快熟的番茄。那時候,我們都還年輕。放學衝回家,打開電腦,偷菜、種菜、被偷,一個都不能少。

17 年後,開心農場回來了。不是 Facebook,是 AHPAL。

你的菜,還在長。你的青春,還在等你。