My App

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 Scripts

2. 點擊「上傳新腳本」按鈕

在頁面右上角找到藍色按鈕:

 + 上傳新腳本

3. 填寫上傳表單

彈出視窗會要求您填寫:

欄位說明範例
腳本名稱唯一識別名稱sun_carry
顯示標籤友善的顯示名稱(選填)陽光搬運系統
選擇檔案選擇 .lua 檔案server.lua

4. 上傳

點擊「上傳」按鈕,系統會:

  • 驗證檔案格式(必須是 .lua)
  • 上傳到 Firebase Storage
  • 顯示成功訊息
  • 自動刷新腳本列表

實際操作示範

 假設我們要上傳一個搬運腳本:

1️⃣ 準備檔案:server.lua(包含搬運系統的完整代碼)

2️⃣ 填寫表單:
   腳本名稱:sun_carry
   顯示標籤:陽光搬運系統 v2.0
   選擇檔案:[選擇 server.lua]

3️⃣ 點擊上傳

4️⃣ 成功!在列表中看到新腳本

方式二:直接輸入代碼

適合快速創建或複製貼上代碼。

步驟

  1. 點擊「上傳新腳本」
  2. 切換到「直接輸入代碼」標籤
  3. 填寫腳本名稱和標籤
  4. 在代碼編輯器中貼上您的 Lua 代碼
  5. 點擊「保存」

優勢

  • 快速創建測試腳本
  • 可以直接編輯代碼
  • 不需要準備檔案

查看腳本內容

上傳後,您可以隨時查看腳本的完整內容。

查看步驟

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:後期編輯

  1. 找到腳本卡片
  2. 在標籤旁邊有一個 ** 編輯圖標**
  3. 點擊後輸入新標籤
  4. 點擊 ** 確認**
  5. 完成!

最佳實踐

 好的標籤:
   - "陽光搬運系統 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需要客戶更新配置

刪除腳本

刪除單個版本

在版本管理器中:

  1. 找到要刪除的版本
  2. 點擊 ** 垃圾桶圖標**
  3. 確認刪除

注意

  • 正在被使用的版本刪除後,客戶端會自動回退到 Firebase Storage 版本
  • 無法恢復已刪除的版本

刪除整個腳本

在 Protected Scripts 列表中:

  1. 點擊腳本卡片的 ** 紅色垃圾桶圖標**
  2. 確認刪除

會發生什麼

  • 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 個月

最佳實踐總結

應該做的

  1. 版本命名規範

    v1.0.0, v1.1.0, v2.0.0
    不要用:version1, new, latest
  2. 詳細的版本說明

    好的說明:
    - 新增功能 X
    - 修復 Bug Y
    - 破壞性變更:需要更新配置檔 Z
    
    不好的說明:
    - 更新
    - 修改
  3. 測試後再發布

    • 先上傳到版本管理
    • 內部測試確認無誤
    • 再通知客戶升級
  4. 保留舊版本

    • 至少保留最近 2-3 個版本
    • 重大版本保留更長時間
  5. 清晰的標籤

    • 使用有意義的名稱
    • 包含版本號和功能描述

不應該做的

  1. 直接編輯生產版本

    • 不要在沒有測試的情況下直接保存
    • 使用版本管理系統
  2. 刪除正在使用的腳本

    • 檢查是否有客戶正在使用
    • 通知後再刪除
  3. 使用無意義的命名

     script1, test, temp
     sun_carry, esx_society, vehicle_shop
  4. 忽略破壞性變更警告

    • 務必標記破壞性變更
    • 提供遷移指南

故障排除

問題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 的完整管理!

有任何問題嗎?歡迎查看其他文檔或聯繫技術支援。