《異世界救援》的 MVP 上線之後,接下來有三件事要做:
這三件事都有不少設計細節,AI 都曾經提出看起來很完整的方案,不過經過追問下去發現:
所以今天來看這3個案例:
AI 提了什麼?我問了什麼?最後為什麼沒有照著做?
翡翠森林是《異世界救援》的第二個王國。
一開始先把範圍縮小。
這次不是從零開始做一個全新的王國,而是先做一個 MVP 換皮版。
也就是:
先把第二個王國做出來,再慢慢增加內容,比一次把所有東西做完實際得多。
草稿計畫裡,AI 起草的做法是:
兩個王國共用同一份
CardDatabase.CARD_POOL。
乍看之下很合理。
現在兩個王國的卡牌一樣,既然一樣,直接共用就好了。
但我馬上改了一句:
不是共用,是複製一份過來,之後可以再討論修改。
這兩種做法現在看起來差不多,之後就會差很多。
如果是「共用」,代表兩個王國一直指向同一份資料。
今天修改第一王國的卡牌,第二王國也會跟著變。
但如果是「複製」,代表:
現在先一樣,以後各自修改。
這個想法後來也套用到魔王數值。
不是兩個王國共用同一套 Boss 設定,而是先複製第一王國的資料,再慢慢調整。
最後卡池拆成:
CARD_POOL_OBSIDIAN
CARD_POOL_EMERALD
目前兩份內容可以完全一樣,但已經是兩份獨立資料。
王國資料庫也各自保存自己的設定,例如:
而不是全部寫死在戰鬥場景裡。
這樣做之後,翡翠森林可以很快沿用第一王國的內容。
等之後真的要做差異化時,也不用先回頭拆資料結構。
所以這次其實沒有什麼複雜的技術問題。
關鍵只是先把未來擴充想清楚:
現在一樣,不代表以後也要一樣。
先複製,再分開發展,對第二個王國比較有彈性。
翡翠森林原本規劃了一個「免費時段」:
每天固定四個時段可以免費進入,其他時間則需要花一把「秘銀時空鑰匙」。
這個設計很快就遇到一個問題。
如果遊戲完全相信手機上的時間,玩家只要把手機時間調到免費時段,就可以直接進入。
例如:
不用鑰匙,也不用看廣告。
所以第一個想法很自然:
不要相信手機時間,改用網路上的時間。
接著就開始想怎麼做。
比較完整的方案是找一個校時 API。
平常還是使用本機時間判斷,只有真的要免費進入時,再向 API 確認一次。
確認過的結果可以暫時快取,而快取時間不能使用玩家可以修改的系統時間,而是使用不受系統時間影響的單調時鐘。
簡單說:
平常看手機時間,真的要放行時,再拿網路時間確認。
看起來已經滿完整了。
但查了一下準備使用的校時 API,問題反而跑到另一個地方。
原本以為這類服務的免費額度主要看匿名 IP。
結果查完之後,準備使用的服務,其免費額度是綁在 API key/帳號 上。
這對有後端的服務來說,問題不一定大。
但《異世界救援》目前是 client-only 架構,沒有自己的後端。
那 API key 要放在哪裡?
放在 App 裡。問題也就來了。
只要 API key 跟著 App 一起發出去,玩家就有機會從程式裡把它找出來。
所以:
只要 API key 必須保密,就不能直接把它當成 client-only App 裡的秘密。
做到這裡才發現,真正的問題是《異世界救援》沒有後端,API key 根本沒有安全的地方可以放。
就算把前面的校時流程做得再漂亮,這個問題還是在。所以最後沒有繼續補防禦,而是把免費時段這個設計拿掉:
翡翠森林一律需要花一把「秘銀時空鑰匙」才能進入。
既然沒有免費時段,玩家也就沒有「修改手機時間來騙免費時段」這條路可以走。
原本的校時方案沒有直接刪掉,而是在規劃文件裡標記「作廢」。
這次查到的 API 規則、client-only 的限制,以及為什麼最後放棄,都留在文件裡。
因為之後如果再次遇到類似需求,至少知道這條路走過,而且為什麼沒有走下去。
同一輪規劃裡,還發現另一個問題。
原本的每日登入禮是:
每天免費送玩家一把鑰匙。
但「今天有沒有領過」也是根據手機上的日期判斷。
所以玩家可以:
只要一直往後調日期,理論上就可以一直領。
這個漏洞很明顯,但最後沒有特別去堵。
因為後來把每日登入禮改成:
每日任務:看滿三支廣告,才能領一把鑰匙。
這個改動讓漏洞的價值降低很多。
修改日期雖然還是可能影響「今天能不能領」,但玩家就算利用這個漏洞,還是得完成三次看廣告。
也就是原本:
改日期 → 免費拿到鑰匙。
改完之後:
改日期 → 還是要看三支廣告,才能拿到鑰匙。
這時候就要重新算一筆帳。
如果要完全防止修改日期,可能需要加入伺服器驗證、帳號同步,甚至再做一套時間防護。
系統會變得更複雜。
但玩家就算利用這個漏洞,最後還是得看廣告。
而看廣告本來就是這個機制希望玩家完成的行為。
所以最後的決定是:
這個漏洞目前造成的損失,還不值得增加一套更複雜的防禦。
這和案例二的處理方式就不一樣。
玩家修改時間:
免費進入 → 繞過鑰匙與廣告 → 變現機制失去作用。
所以直接拿掉免費時段。
玩家修改時間:
可能提早領取 → 但還是必須看三支廣告。
所以暫時不增加額外防禦。
做到這裡,我反而覺得「修漏洞」不一定是第一個該想到的答案。
有時候改一下原本的規則,就能讓漏洞的影響小很多。
而且開發成本也低得多。
今天其實就是三個決定:
這三個決定背後的原因完全不同。
也讓我更習慣在 AI 給出方案之後,多問幾個問題:
需求真的是這樣嗎?
這個架構真的做得到嗎?
如果真的有人利用漏洞,損失到底有多大?
AI 可以很快把方案整理出來,也可以一次列出很多可能的做法。
但最後要不要做,還是得回到遊戲本身。
這大概也是我現在做 Vibe Coding 之後,越來越習慣的事:
不是叫 AI 幫我把所有問題都解掉,而是知道哪些問題值得解。
明天 Day 26,繼續講另一種上線前的把關:哪些事情可以放心交給 AI 代勞,哪些資安判斷,還是得自己盯著。
💬 你在規劃功能時,有沒有遇過一個方案看起來很完整,實際查下去才發現根本走不通的經驗?歡迎留言聊聊。