Protected Scripts 管理
完整教學:如何上傳、編輯和管理受保護的腳本
Protected Scripts 管理教學
Protected Scripts(受保護腳本)是 ScriptVerify 系統的核心。本教學將教您如何完整管理這些腳本,從上傳到版本控制。
什麼是 Protected Scripts?
定義
Protected Scripts 是您要保護的 實際 Lua 代碼(server.lua)。這些代碼:
- 存儲在 Firebase Storage 或 版本管理系統
- 只有通過授權驗證的 FiveM 伺服器才能獲取
- 永遠不會直接發送給客戶端
- 支持多版本管理
運作原理
┌──────────────────┐
│ 管理員上傳 │
│ server.lua │
│ (Protected) │
└────────┬─────────┘
│
┌──────────────────┐
│ Firebase │
│ Storage / │◄─── 安全存儲
│ 版本管理系統 │
└────────┬─────────┘
│
│ API 驗證通過後
┌──────────────────┐
│ FiveM Server │
│ load() 執行 │
└──────────────────┘關鍵優勢:
- 代碼不會洩漏給未授權用戶
- 可以隨時更新代碼(客戶端自動獲取最新版)
- 追蹤哪些伺服器使用了您的腳本
上傳 Protected Script
方式一:上傳 .lua 檔案
這是最簡單的方式,適合已經準備好的腳本檔案。
步驟說明
1. 進入 Protected Scripts 頁面
左側導航欄 → Protected Scripts2. 點擊「上傳新腳本」按鈕
在頁面右上角找到藍色按鈕:
+ 上傳新腳本3. 填寫上傳表單
彈出視窗會要求您填寫:
| 欄位 | 說明 | 範例 |
|---|---|---|
| 腳本名稱 | 唯一識別名稱 | sun_carry |
| 顯示標籤 | 友善的顯示名稱(選填) | 陽光搬運系統 |
| 選擇檔案 | 選擇 .lua 檔案 | server.lua |
4. 上傳
點擊「上傳」按鈕,系統會:
- 驗證檔案格式(必須是 .lua)
- 上傳到 Firebase Storage
- 顯示成功訊息
- 自動刷新腳本列表
實際操作示範
假設我們要上傳一個搬運腳本:
1️⃣ 準備檔案:server.lua(包含搬運系統的完整代碼)
2️⃣ 填寫表單:
腳本名稱:sun_carry
顯示標籤:陽光搬運系統 v2.0
選擇檔案:[選擇 server.lua]
3️⃣ 點擊上傳
4️⃣ 成功!在列表中看到新腳本方式二:直接輸入代碼
適合快速創建或複製貼上代碼。
步驟:
- 點擊「上傳新腳本」
- 切換到「直接輸入代碼」標籤
- 填寫腳本名稱和標籤
- 在代碼編輯器中貼上您的 Lua 代碼
- 點擊「保存」
優勢:
- 快速創建測試腳本
- 可以直接編輯代碼
- 不需要準備檔案
查看腳本內容
上傳後,您可以隨時查看腳本的完整內容。
查看步驟
1. 找到您的腳本
在 Protected Scripts 列表中找到目標腳本。
2. 點擊「查看」圖標
每個腳本卡片右下角有三個按鈕:
查看內容
編輯內容
版本管理
刪除點擊 ** 眼睛圖標**。
3. 查看內容
彈出視窗會顯示:
- 完整的 Lua 代碼
- 🎨 語法高亮顯示
- 檔案大小
- 上傳時間
功能:
- 複製代碼到剪貼板
- 滾動查看長代碼
- 關閉視窗
編輯腳本內容
線上編輯器功能
ScriptVerify 提供強大的 Monaco Editor(VS Code 同款編輯器):
功能特色:
- ✨ Lua 語法高亮
- 搜索和替換
- 自動補全
- 錯誤提示
- 🌙 深色模式支持
編輯步驟
1. 點擊編輯圖標
綠色的筆形圖標2. 在編輯器中修改代碼
Monaco Editor 會打開,您可以:
- 直接編輯代碼
- 使用
Ctrl+F搜索 - 使用
Ctrl+H替換 - 使用
Ctrl+Z撤銷
3. 保存變更
點擊「保存變更」按鈕:
Save Changes系統會:
- 驗證 Lua 語法
- 上傳到 Firebase Storage
- 清除快取(確保 FiveM 獲取最新版本)
- 顯示成功訊息
實戰範例
-- 原始代碼
print("Loading carry system v1.0")
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
print("Carry system initialized")
end)修改為:
-- 升級後的代碼
print("^2Loading carry system v2.0^7")
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() ~= resourceName then return end
print("^2Carry system v2.0 initialized^7")
print("^3New features: Multi-player carry support^7")
end)保存後:
- 所有使用此腳本的 FiveM 伺服器重啟後會自動獲取新版本
- 無需手動分發檔案
設置腳本標籤
標籤(Label)是用戶友善的顯示名稱,方便識別腳本。
為什麼需要標籤?
腳本名稱 vs 標籤:
| 類型 | 範例 | 用途 |
|---|---|---|
| 腳本名稱 | sun_carry | 系統識別、API 使用 |
| 標籤 | 陽光搬運系統 v2.0 | 用戶界面顯示 |
設置/編輯標籤
方法1:上傳時設置
- 在上傳表單的「顯示標籤」欄位填寫
方法2:後期編輯
- 找到腳本卡片
- 在標籤旁邊有一個 ** 編輯圖標**
- 點擊後輸入新標籤
- 點擊 ** 確認**
- 完成!
最佳實踐:
好的標籤:
- "陽光搬運系統 v2.0"
- "ESX 社會系統 (穩定版)"
- "進階載具商店 [Updated]"
不好的標籤:
- "script1"
- "test"
- "新的東西"版本管理(進階功能)
版本管理讓您可以保存腳本的多個版本,客戶可以選擇使用哪個版本。
為什麼需要版本管理?
情境範例:
問題:您更新了 sun_carry 腳本到 v2.0,
但某些客戶的配置與新版本不兼容。
傳統做法:
客戶必須立即更新配置
或者您保留兩份不同的腳本
ScriptVerify 解決方案:
上傳 v2.0 到版本管理系統
舊客戶繼續使用 v1.0
新客戶使用 v2.0
客戶可以自己選擇何時升級版本管理操作
1. 打開版本管理器
點擊腳本卡片的 ** 時鐘圖標**。
2. 查看現有版本
版本管理視窗顯示:
- 📋 所有版本列表
- 最新版本標記
- 推薦版本標記
- 版本說明
- 破壞性變更警告
3. 上傳新版本
點擊「上傳新版本」:
表單欄位:
┌────────────────────────────┐
│ 版本號:v2.0.0 │ ← 語義化版本號
├────────────────────────────┤
│ 版本內容: │
│ [Lua 代碼編輯器] │ ← 貼上新版本代碼
├────────────────────────────┤
│ 版本說明: │
│ - 新增多人搬運功能 │ ← 更新日誌
│ - 修復 ESX 兼容性問題 │
│ - 優化性能 │
├────────────────────────────┤
│ 此版本包含破壞性變更 │ ← 警告標記
└────────────────────────────┘4. 設置推薦版本
- 在版本列表中找到穩定版本
- 點擊 ** 標籤圖標**
- 該版本會被標記為「推薦」
5. 客戶端選擇版本
客戶在 sv_config.lua 中設置:
sv_config = {
licenseKey = "ABC123...",
SCRIPT_NAME = "sun_carry",
serverLuaVersion = "v1.0.0", -- 或 "v2.0.0" 或 "latest"
}版本命名規範
語義化版本號(Semantic Versioning):
v主版本.次版本.修訂號
範例:
v1.0.0 → 初始版本
v1.1.0 → 新增功能(向後兼容)
v1.1.1 → 錯誤修復
v2.0.0 → 重大更新(可能有破壞性變更)什麼時候增加版本號:
| 變更類型 | 版本號範例 | 說明 |
|---|---|---|
| 錯誤修復 | v1.0.0 → v1.0.1 | 小修正 |
| 新功能(向後兼容) | v1.0.1 → v1.1.0 | 新增功能但不破壞舊配置 |
| 破壞性變更 | v1.1.0 → v2.0.0 | 需要客戶更新配置 |
刪除腳本
刪除單個版本
在版本管理器中:
- 找到要刪除的版本
- 點擊 ** 垃圾桶圖標**
- 確認刪除
注意:
- 正在被使用的版本刪除後,客戶端會自動回退到 Firebase Storage 版本
- 無法恢復已刪除的版本
刪除整個腳本
在 Protected Scripts 列表中:
- 點擊腳本卡片的 ** 紅色垃圾桶圖標**
- 確認刪除
會發生什麼:
- Firebase Storage 中的檔案被刪除
- 所有版本被刪除
- 使用該腳本的客戶端驗證會失敗
最佳實踐:
刪除前檢查:
1. 是否有客戶正在使用?
2. 是否有備份?
3. 是否真的需要刪除?
建議:
保留舊版本,只刪除過時的版本
通知客戶後再刪除
避免刪除正在生產環境使用的腳本實戰案例:完整工作流程
案例:發布 sun_carry v2.0
背景:
- 現有 sun_carry v1.0 正在被 20 個客戶使用
- 開發了 v2.0 版本,新增了多人搬運功能
- 但 v2.0 需要新的配置檔
步驟:
第1步:上傳 v2.0 到版本管理
1. 進入 Protected Scripts
2. 找到 sun_carry
3. 點擊 時鐘圖標
4. 上傳新版本:
- 版本號:v2.0.0
- 內容:[貼上 v2.0 代碼]
- 說明:新增多人搬運功能,需要更新 config.lua
- 勾選「破壞性變更」
5. 保存第2步:內部測試
1. 使用測試伺服器
2. sv_config.lua 設置:serverLuaVersion = "v2.0.0"
3. 啟動測試
4. 確認功能正常第3步:通知客戶
Email 給客戶:
主題:sun_carry v2.0 現已推出!
親愛的客戶,
我們發布了 sun_carry v2.0,新增了以下功能:
✨ 多人搬運支持
✨ 性能優化
✨ Bug 修復
注意:此版本需要更新配置檔
升級步驟:
1. 備份現有配置
2. 下載新的 config.lua
3. 修改 sv_config.lua:
serverLuaVersion = "v2.0.0"
4. 重啟伺服器
如需繼續使用 v1.0,無需任何操作。第4步:逐步遷移
Week 1: 5 個客戶升級到 v2.0
Week 2: 10 個客戶升級到 v2.0
Week 3: 所有客戶都升級完成
Week 4: 將 v2.0 設為推薦版本第5步:設置推薦版本
1. 進入版本管理器
2. 找到 v2.0.0
3. 點擊 設為推薦
4. v2.0.0 現在顯示 [推薦] 標記第6步:保留 v1.0
不要刪除 v1.0!
原因:
- 某些客戶可能需要回退
- 新客戶可能需要穩定版本測試
- 作為緊急備份
建議保留時間:3-6 個月最佳實踐總結
應該做的
-
版本命名規範
v1.0.0, v1.1.0, v2.0.0 不要用:version1, new, latest -
詳細的版本說明
好的說明: - 新增功能 X - 修復 Bug Y - 破壞性變更:需要更新配置檔 Z 不好的說明: - 更新 - 修改 -
測試後再發布
- 先上傳到版本管理
- 內部測試確認無誤
- 再通知客戶升級
-
保留舊版本
- 至少保留最近 2-3 個版本
- 重大版本保留更長時間
-
清晰的標籤
- 使用有意義的名稱
- 包含版本號和功能描述
不應該做的
-
直接編輯生產版本
- 不要在沒有測試的情況下直接保存
- 使用版本管理系統
-
刪除正在使用的腳本
- 檢查是否有客戶正在使用
- 通知後再刪除
-
使用無意義的命名
script1, test, temp sun_carry, esx_society, vehicle_shop -
忽略破壞性變更警告
- 務必標記破壞性變更
- 提供遷移指南
故障排除
問題1:上傳失敗
症狀:點擊上傳後顯示錯誤
可能原因:
- 檔案不是 .lua 格式
- 檔案太大(超過 10MB)
- 檔案名稱包含特殊字符
- Firebase Storage 權限問題
解決方法:
1. 檢查檔案格式
2. 確認檔案大小 < 10MB
3. 重新命名檔案(只用英文和數字)
4. 重新整理頁面後再試
5. 檢查瀏覽器控制台錯誤(F12)問題2:編輯後客戶端沒有更新
症狀:修改了腳本但 FiveM 仍使用舊版本
原因:快取問題
解決方法:
1. 管理員端:
- 保存後等待 30 秒
- 系統會自動清除快取
2. 客戶端:
- 重啟 FiveM resource:restart resource_name
- 完全重啟 FiveM 伺服器問題3:版本管理器打開失敗
症狀:點擊時鐘圖標沒有反應或顯示錯誤
可能原因:
- 認證 Token 過期
- 網絡連接問題
解決方法:
1. 重新登入
2. 檢查網絡連接
3. 清除瀏覽器快取
4. 使用無痕模式測試延伸學習
完成本教學後,您可以繼續學習:
恭喜!您已經掌握了 Protected Scripts 的完整管理!
有任何問題嗎?歡迎查看其他文檔或聯繫技術支援。