| 前端 | https://farm.ahpal.com |
|---|---|
| Worker | https://ahpal-farm-api.praystone.workers.dev |
| D1 | ahpal-farm-db(7 表) |
| GitHub | praystone/ahpal-farm |
| 前端部署 | GitHub Actions(git push 自動) |
| Worker 部署 | npx wrangler deploy(手動) |
| D1 部署 | npx wrangler d1 execute --remote(手動) |
| 版本 | v2.8(2026-10-30) |
| # | 表名 | 用途 |
|---|---|---|
| 1 | _cf_KV | Cloudflare 內部表 |
| 2 | crops | 12 種作物 + 空地(empty),含 level_required、season_count、regrow_seconds |
| 3 | farms | 每塊田(含 stolen_by、stolen_at、fertilized_at、weed、bug、is_locked) |
| 4 | farm_logs | 播種/收成/偷菜紀錄 |
| 5 | farm_players | 玩家金幣、level、exp、daily_steal_count、last_steal_date |
| 6 | farm_weather | 當前天氣(Cron 每 2 小時換) |
| 7 | farm_comments | 留言板(Turnstile 四層保護) |
| # | 方法 | 端點 | 用途 |
|---|---|---|---|
| 1 | GET | /api/crops | 農作物清單 |
| 2 | POST | /api/plant | 種植(v2.8 支援 farmId 指定空地) |
| 3 | GET | /api/farm | 查看自己的田(含空地) |
| 4 | POST | /api/harvest | 收成(含天氣加成、多季作物) |
| 5 | GET | /api/player | 讀玩家金幣 |
| 6 | POST | /api/steal | 偷菜(每日 10 次上限) |
| 7 | GET | /api/random-farm | 隨機找成熟田 |
| 8 | GET | /api/recent-steals | 公告牆(含苦主) |
| 9 | GET | /api/steal-history | 偷菜總表(分頁 + 近 1/3/7 天) |
| 10 | GET | /api/weather | 當前天氣 |
| 11 | GET | /api/weather/forecast | 天氣預報 |
| 12 | GET/POST | /api/comments | 留言板(POST 需 Turnstile) |
| 13 | GET | /api/level | 查等級、經驗、下一級門檻 |
| 14 | POST | /api/fertilize | 化肥(20 金,縮短 1 小時) |
| 15 | POST | /api/clear | 除草/殺蟲(各 5 exp) |
| 16 | POST | /api/buy-land | 買地(500 金,Lv.2,格子上限) |
| 等級 | 格子上限 |
|---|---|
| Lv.1 | 6 格(初始) |
| Lv.2 | 9 格(+3) |
| Lv.3 | 12 格(+3) |
| Lv.4 | 15 格(+3) |
| Lv.5 | 18 格(+3) |
| Lv.6+ | 每級 +3,上限 30 格 |
crops 表多一筆:id=empty、name=空地、icon=🟫is_locked=0,crop_id 保持 empty/api/farm:顯示空地,前端渲染「🟫 空地 [🌱 種植]」plantToFarm(farmId, cropId) → /api/plant 帶 farmId/api/plant 收到 farmId → UPDATE 那塊空地,回 reused: trueAND harvested = 1。空地就是 crop_id=empty,harvested 是 0 還是 1 都可能。| 版本 | 主要變更 |
|---|---|
v2.4 | 六表、12 API、12 種作物、天氣、留言板 + Turnstile |
v2.5 | +11 欄位、等級門檻、偷竊上限、多季作物、exp 修正、使用說明 modal |
v2.6 | 化肥、雜草蟲害、土地擴張(/api/buy-land) |
v2.7 | 化肥冷卻、買地 Lv.2、雜草 Cron、空地顯示 |
v2.8 | 格子化、空地種植(/api/plant 支援 farmId)、格子上限 |
「田 = 格子。買地 = 多一格。空地要能種。」
「先後端,再前端。前端按鈕是殼,Worker API 是核。」
「先診斷,再動手。永遠先備份。不要讓董事長當搬運工。」
2009 年,Facebook 開心農場。你半夜設鬧鐘起來,就為了偷同學那顆快熟的番茄。那時候,我們都還年輕。放學衝回家,打開電腦,偷菜、種菜、被偷,一個都不能少。
17 年後,開心農場回來了。不是 Facebook,是 AHPAL。
你的菜,還在長。你的青春,還在等你。