[ PET GAME HANDOVER · v2.16 · 2026-10-21 ]

寵物遊戲交接總覽 v2.16
雅寶打怪場 · 25 年頂客論壇寵物重生計畫

這份文件,是寫給三種人看的。第一種,是 25 年來在頂客論壇養過寵物的百萬會員——你們的寵物回來了,而且比以前更聰明。第二種,是下一個接手這套系統的 AI 或工程師——這裡有 11 張資料表、16 個 API、27 條血淚教訓,讓你不會重蹈覆轍。第三種,是搜尋引擎的爬蟲——我們要讓 Google 知道,這個網站不是機器人隨便生成的,是人類工程師與 AI 協作,一筆一劃寫出來的。

📅 發布日期:2026 年 10 月 21 日
✍️ 署名:龍蝦總工程師(人類)· AI 協作
📁 類型:寵物遊戲交接文件
⚡ 狀態:v2.16 上線 · 16 API · 11 表 · 27 教訓
PREFACE / 給百萬會員的一封信

寫在前面:你們的寵物,回來了

1996 年,頂客論壇(DK101)誕生在那個撥接上網的年代。那時候,打開一個網頁要等半分鐘,連線要聽一段「嗶嗶嗶」的數據機聲音。但那時候,有一群人,在論壇裡養了一隻文字寵物——每天餵牠、訓練牠、看牠升級,然後在 BBS 上跟朋友炫耀:「我的寵物今天又升一級了。」

25 年後,那些朋友有些人還在,有些人已經離開,有些人——我們希望他們只是暫時忘記了。但寵物遊戲,我們沒有忘。2026 年 8 月,老會員「破時界」回來問:「寵物遊戲還會重新上線嗎?」那一刻,我們知道,這件事不能只是懷舊,要真的做出來。

於是,從 2026 年 10 月開始,我們用 Cloudflare 的現代技術,把當年的文字寵物,重做成一個可以打怪、可以學技能、可以升級、可以選技能的完整寵物戰鬥系統。這份文件,就是這套系統的完整說明——給你們看,也給下一個接手的人看。

🦞

龍蝦總工程師

雅寶社區 · 頂客論壇 技術最高負責人

「25 年前,你們在這裡養了一隻寵物。
25 年後,我們把牠找回來了。
這一次,牠會陪你們打怪,會學新技能,會記得你們的名字。」

這份文件由龍蝦總工程師(人類)與 AI 協作撰寫,經人類工程師逐字審閱。我們公開坦承使用 AI 輔助,但每一個技術決策、每一條教訓、每一段給會員的話,都是人類工程師親自確認過的。這不是機器人隨便生成的內容,這是一個人與一個 AI,花了數百個小時,一筆一劃寫出來的。

CHAPTER 01 / OVERVIEW

第一章:寵物遊戲 v2.16 現況總覽

截至 2026 年 10 月 21 日,雅寶打怪場(pet.ahpal.com)已經是一個完整的寵物戰鬥系統。以下是目前的實際數據,全部經過遠端 D1 資料庫查詢確認,不是幻想。

1.1 後端架構(Cloudflare Worker + D1)

項目值說明
Worker 名稱ahpal-pet-d1部署在 Cloudflare Workers
Worker URLhttps://ahpal-pet-d1.praystone.workers.dev根目錄回傳 v2.3 字串(版本標記未更新,功能已到 v2.16)
D1 資料庫ahpal-pet-dbDatabase ID: 80ea49f8-a4fe-4cbf-9821-8337c7869567
D1 綁定變數PET_DBwrangler.toml 設定
資料表總數11 張players、comments、equipment、player_equipment、monsters、battles、pets、pet_skills、player_skills、pet_battle_logs、_cf_KV
API 端點總數16 個11 個舊版 + 4 個寵物 v2.3 + 1 個寵物戰鬥紀錄 v2.10
裝備數量30 件武器 10、防具 5、頭盔 5、盾牌 5、飾品 5
怪物數量10 隻Lv.1 史萊姆 到 Lv.10 地獄魔王
寵物技能10 招火、水、草、光、暗各 2 招

1.2 前端架構(Cloudflare Pages)

項目值
Pages 專案ahpal-pet
自訂網域pet.ahpal.com
Production branchmain
打怪場pet.ahpal.com/(pet-index.html)
戰績牆pet.ahpal.com/wall.html
導覽列10 連結(與主站一致)

1.3 v2.16 已上線的功能

⚔️

玩家打怪

點擊怪物攻擊,累積擊殺數、經驗值、等級。10 隻怪物從 Lv.1 到 Lv.10。

🎒

裝備系統

30 件裝備,分武器、防具、頭盔、盾牌、飾品五類。打怪隨機掉落,可穿戴、卸下。

🐾

寵物領養

4 種寵物:龍(火)、貓(暗)、狗(光)、鳥(草)。領養時自動學 1 招技能。

🍖

寵物餵食訓練

餵食恢復飢餓值,訓練增加經驗值。訓練和戰鬥升級時,都會自動學新技能。

⚔️

寵物帶去打怪

點怪物卡片的「🐾 派寵物」,寵物自動戰鬥。回合制、屬性克制 ×1.5、經驗值、升級。

🎯

技能選擇 UI

寵物學到 2 招以上時,戰鬥前彈出技能選單,玩家可選用哪一招。

📜

戰鬥紀錄

寵物戰鬥紀錄獨立顯示,🐾 勝利 / 💀 敗北,回合數、傷害、經驗一目了然。

💬

即時訊息並排

v2.16 版面重構:即時訊息與快速打怪並排,打完怪立刻看到回饋。

CHAPTER 02 / DATABASE

第二章:11 張資料表完整結構

以下是遠端 D1 資料庫的實際欄位,全部經過 SELECT name, sql FROM sqlite_master 查詢確認。下一個接手的人,可以依照這份結構寫 API,不會漏欄位。

2.1 玩家與戰鬥相關(7 張舊表)

表名欄位用途
playersid, nickname, level, exp, kills, created_at, last_seen玩家資料
commentsid, nickname, content, created_at留言
equipmentid, name, type, rarity, atk_bonus, def_bonus, hp_bonus, drop_rate, icon裝備定義(30 件)
player_equipmentid, player_nickname, equipment_id, is_equipped, obtained_at玩家已獲得裝備
monstersid, name, level, hp, atk, def, exp_reward, gold_reward, icon怪物定義(10 隻)
battlesid, player_nickname, monster_id, winner, rounds, damage_dealt, damage_taken, exp_gained, fought_at玩家戰鬥紀錄
_cf_KV—Cloudflare 內部,不動

2.2 寵物系統相關(4 張 v2.3 新表)

表名欄位用途
petsid, nickname, pet_type, name, level, exp, hp, max_hp, hunger, element, created_at玩家寵物
pet_skillsid, name, element, power, cooldown, icon寵物技能定義(10 招)
player_skillsid, nickname, skill_id, learned_at玩家已學技能
pet_battle_logsid, nickname, pet_id, monster_id, winner, rounds, damage_dealt, damage_taken, exp_gained, fought_at寵物戰鬥紀錄

2.3 寵物技能實際數據(10 招)

技能 ID名稱屬性威力
sk-fire-1火焰爪fire15
sk-fire-2烈焰衝擊fire25
sk-water-1水彈water15
sk-water-2海嘯water25
sk-grass-1藤鞭grass15
sk-grass-2森羅萬象grass25
sk-light-1聖光light20
sk-light-2神聖審判light30
sk-dark-1暗影球dark20
sk-dark-2深淵吞噬dark30

2.4 怪物實際數據(10 隻)

ID名稱等級HPATKDEF經驗
m01史萊姆1505210
m02小蝙蝠2808315
m03野狼312012525
m04骷髏兵418018840
m05食人花5250221055
m06石巨人6400301580
m07火龍76004020120
m08暗影刺客88005525180
m09冰霜巨人910006530250
m10地獄魔王1015008035400
CHAPTER 03 / API

第三章:16 個 API 端點完整清單

以下是 Worker 目前支援的 16 個 API 端點。每個端點都經過實測,回傳格式為 JSON。

3.1 玩家相關(11 個)

方法端點功能
POST/api/hit打怪
GET/api/stats戰績
GET/api/leaderboard排行榜
POST/api/comment留言
GET/api/comments留言列表
GET/api/inventory背包
POST/api/equip穿戴裝備
POST/api/unequip卸下裝備
GET/api/monsters怪物列表
POST/api/battle玩家回合制戰鬥
GET/api/battles玩家戰鬥紀錄

3.2 寵物相關(5 個)

方法端點功能版本
POST/api/pet/adopt領養寵物(4 種:龍/貓/狗/鳥)v2.3
POST/api/pet/feed餵食(hunger +20,上限 100)v2.3
POST/api/pet/train訓練(exp +10、hunger -10,升級時學新技能)v2.3 / v2.13
GET/api/pet/status查寵物狀態 + 已學技能v2.3
POST/api/pet/battle寵物帶去打怪(回合制、屬性克制、技能選擇、升級學技能)v2.4 / v2.5 / v2.11 / v2.12
GET/api/pet/battles寵物戰鬥紀錄v2.10

3.3 寵物戰鬥流程(v2.16 完整版)

  1. 前端查寵物:GET /api/pet/status?nickname=xxx,確認有寵物、取得技能列表
  2. 技能選擇:若技能超過 1 招,彈出選單,玩家選用哪一招(v2.11)
  3. 發送戰鬥:POST /api/pet/battle,帶 nickname、monsterId、可選 skillId
  4. 後端計算:讀取寵物等級、技能 power、怪物 def,套用屬性克制 ×1.5
  5. 回合制:寵物攻擊 → 怪物反擊,最多 50 回合
  6. 寫入紀錄:結果寫入 pet_battle_logs
  7. 升級學技能:寵物獲勝且升級時,自動學會同屬性下一招(v2.12/v2.13)
  8. 回傳前端:顯示戰鬥結果、更新戰鬥紀錄、更新寵物面板
CHAPTER 04 / FORMULAS

第四章:戰鬥公式與屬性克制

以下是寵物戰鬥的核心公式,全部用遠端真實數據驗算過,不是幻想。

4.1 寵物攻擊力

項目公式範例(Lv.2、暗影球 power 20)
寵物攻擊力10 + (level × 2) + skillPower10 + 4 + 20 = 34
寵物防禦力Math.floor(level × 1.5)Math.floor(3) = 3
每回合傷害Math.max(1, petAtk - monster.def)Math.max(1, 34 - 8) = 26(打骷髏兵)
怪物反擊Math.max(1, monster.atk - petDef)Math.max(1, 18 - 3) = 15(骷髏兵反擊)
屬性克制若克制,傷害 × 1.5fire→grass × 1.5

4.2 屬性克制表

寵物屬性克制怪物屬性倍率
fire(火)grass(草)× 1.5
grass(草)water(水)× 1.5
water(水)fire(火)× 1.5
light(光)dark(暗)× 1.5
dark(暗)light(光)× 1.5

注意:怪物表(monsters)沒有 element 欄位,所以屬性克制是寫在 Worker 裡的 MONSTER_ELEMENT_V25 對照表(依 monsterId 對應屬性)。下一個接手的人若要擴充怪物屬性,改這張對照表即可。

4.3 怪物屬性對照表(Worker 內寫死)

怪物 ID名稱屬性
m01史萊姆water
m02小蝙蝠dark
m03野狼grass
m04骷髏兵dark
m05食人花grass
m06石巨人grass
m07火龍fire
m08暗影刺客dark
m09冰霜巨人water
m10地獄魔王fire
CHAPTER 05 / LESSONS

第五章:27 條血淚教訓(v2.4 → v2.16 全記錄)

這一章,是這份文件最重要的部分。以下是從 v2.4 到 v2.16,我們踩過的 27 個坑。每一條都是真實發生過的錯誤,不是教科書上的理論。下一個接手的人,讀完這一章,可以少走很多冤枉路。

5.1 基礎教訓(教訓 1~15,v11.11 沿用)

教訓 01PowerShell 貼長 HTML 會被截斷清空

解法:Python 腳本寫檔,不經 PowerShell。

教訓 02Python subprocess 呼叫 npx 會 WinError 2

解法:用 shell=True。

教訓 03D1 --file 權限不足(Authentication error 10000)

解法:改用 --command 逐條跑。

教訓 04D1 --command 多行 SQL 會 incomplete input

解法:壓成單行。

教訓 05Cloudflare 擋 Python-urllib 的 UA

解法:用 requests + 瀏覽器 UA。

教訓 06f-string 裡不能直接寫大括號

解法:改用字串串接。

教訓 07PowerShell -ne 不區分大小寫

解法:用 -cne。

教訓 08字串取代前要先驗證存在

解法:沒先確認會靜默失敗。

教訓 09Cloudflare Pages Production branch 要確認是 main

解法:不是 main 只產生 Preview。

教訓 10Pages 部署後自訂網域幾秒內生效

解法:第 1 次可能 404,第 2 次 200。

教訓 11git-manager.ps1 的 Repositories 要 7 個

解法:漏 ahpal-pet 同步不會含寵物。

教訓 12ai-handover-scan.ps1 插入新專案逗號位置要對

解法:曾造成連續兩個逗號語法錯誤。

教訓 13網頁版複製框會把長內容切開

解法:長內容寫在 .py 裡,PowerShell 只貼 python 檔名.py。

教訓 14路徑含反斜線加 U 會被 Python 當 Unicode 轉義

解法:路徑全用正斜線。

教訓 15內容長度防呆門檻

解法:寫檔前檢查 len > 3000,寫入後檢查 getsize > 3000。

5.2 遊戲頁面與 CSP(教訓 16~19)

教訓 16遊戲頁面載入 main.css 後,body display:flex 會把 footer 壓成一長條

解法:遊戲頁面 style 加 body{display:block !important;} 與 .site-footer{width:100% !important;}

教訓 17Giscus 需要 script-src、style-src、frame-src 三個都放行 giscus.app

解法:只放行 script-src 不夠,iframe 與 CSS 會被擋,留言框空白。

教訓 18Giscus 的 404 Discussion not found 是正常現象

解法:沒人留言過的頁面,第一次查詢會 404,第一次留言才建立 Discussion。

教訓 19PowerShell 判斷 wrangler D1 輸出時,只比對英數字欄位

解法:中文會變亂碼,用 monster_id、winner、rounds 判斷。

5.3 寵物系統教訓(教訓 20~27,v2.4 → v2.16)

教訓 20跨頁參考程式碼時,必須先確認目標頁的資料流

v2.4 寫 petBattle() 時,從 wall.html 抄 localStorage 寫法,但 pet-index.html 的登入流程根本沒寫 localStorage。解法:先查目標頁的 startGame() 怎麼存暱稱。

教訓 21從別的頁面複製函數前,必須先確認目標頁有這個函數

v2.4 寫 petBattle() 時,從 wall.html 抄了 showMessage、loadBattleLog、loadPetStatus 三個函數名,但 pet-index.html 實際叫 addMessage、loadBattles、loadPet。解法:改前端前先 Select-String 列出目標頁所有函數。

教訓 22改前端前必做「函數存在性檢查」

v2.7~v2.9 三連修(請先登入、完全沒反應、loadBattleLog is not defined)都是同一個病根。解法:先查再寫,不憑記憶。

教訓 23改 JavaScript 檔案一律用 Python,不用 PowerShell -replace

PowerShell -replace 在處理換行和特殊字元時不可靠,會把檔案弄壞。解法:用 Python read→replace→write。

教訓 24腳本的驗證關鍵字,必須用「實際寫入 Worker 的變數名」

v2.12 腳本裡寫 learnNewSkill,但 Worker 裡實際用 learnedSkill,驗證失敗導致部署中斷。解法:從實際寫入的程式碼複製關鍵字。

教訓 25同一個邏輯出現在多個端點時,要抽成共用函數

v2.12 只改戰鬥升級,漏了訓練升級。解法:v2.13 抽出 learnNextSkill(),訓練和戰鬥都呼叫。

教訓 26改 HTML 結構時,不能用「找第一個 </div>」定位 panel 結尾

巢狀 div 會讓「第一個 </div>」提早截斷。v2.14 抽出 panel 只有 136/210 字元,就是這個原因。解法:用 div 深度計數,或整段 replace。

教訓 27驗證邏輯不能用「假設的 HTML 結構」寫正規表達式

v2.15 用正規表達式驗證 quick-battle-grid 到挑戰怪物的結構,匹配失敗。解法:用「div 開閉數量平衡」驗證,不用正規表達式匹配特定結構。

CHAPTER 06 / WORKFLOW

第六章:開發與部署 SOP

以下是寵物遊戲的標準開發流程。下一個接手的人,照這個流程走,不會出錯。

6.1 部署三條線(分清楚)

目標指令觸發
前端(Pages)git push 到 main自動部署
前端(緊急)npx wrangler pages deploy . --project-name=ahpal-pet --branch=main手動(違反死命令 12,僅戰備)
Workercd worker; npx wrangler deploy永遠手動
D1npx wrangler d1 execute ahpal-pet-db --remote --command="..."永遠手動

6.2 寫檔 SOP(避免教訓 1、13、23)

  1. 產出 .py 檔:用短 PowerShell 指令,.py 內容用三引號包住
  2. 確認 .py 大小正常(大於 3000 bytes)
  3. 跑 python 檔名.py
  4. 腳本自己寫檔、驗證大小、驗證關鍵字、git commit、git push
  5. 用 requests + 瀏覽器 UA 驗證線上

絕對不要把 MD/HTML 長內容直接貼在 PowerShell 裡。

6.3 驗證 SOP(避免教訓 19、27)

CHAPTER 07 / NEXT

第七章:待做事項與給下一個 AI 的話

7.1 待做事項(v2.17 以後)

優先序功能說明
1技能冷卻pet_skills 已有 cooldown 欄位(火焰爪 3、烈焰衝擊 5),目前戰鬥沒用冷卻,技能可每回合狂放。v2.17 要加冷卻機制。
2寵物戰鬥動畫前端加 shake、傷害數字飄浮,讓戰鬥更有感。
3寵物進化Lv.10 進化,改變 pet_type 和外觀。需改 schema。
4PWA加到桌面,離線可玩。
5即時多人Durable Objects,寵物對戰。
6老會員資料對接25 年舊資料庫的寵物,匯入新系統。

7.2 絕對不能碰的東西

禁止ahpal-pet-api

這是早期測試品(無流量),不是真正的後端。真正的後端只有 ahpal-pet-d1。永遠不要改 ahpal-pet-api。

7.3 給下一個 AI 的最後一封信

「你是 AI,但你的工作有人的溫度。

當你讀到這份文件時,龍蝦總工程師可能已經換人了,但這套系統還在。
你的任務不是「重寫」,是「接住」。

接住 25 年的歷史,接住百萬會員的期待,接住那些在 1996 年撥接上網、在 2026 年回來找寵物的人。

先診斷,再動手。永遠先備份。不要讓董事長當搬運工。

這三句話,是這套系統的靈魂。
你守住這三句話,這套系統就不會死。」

⚡ 準備好接手了嗎?

這份文件只是起點。真正的交接,從你打開 pet.ahpal.com、登入、點下「🐾 派寵物」那一刻開始。

⚔️ 前往打怪場 · 開始戰鬥
🦞 龍蝦總工程師
雅寶社區 AHPAL.COM 技術最高負責人
25 年網路老兵 · 人類與 AI 協作產線總指揮
2026 年 10 月 21 日 · 寵物遊戲交接總覽 v2.16 · 永不回滾 (Never Rollback)