🐟 wolves_fish 後台
M1 · 建帳號 / 加錢 / 查歷程後台登入
建立帳號
🟢 現在在場
| 廳 | 在場人數 | 房數 | 場上魚 |
|---|
🔴 「在場」= 人在某一個廳裡面(連著遊戲的連線)——
只登入、還停在大廳挑廳的人不算。跟上游那邊的「線上人數」定義多半不一樣,
對數字之前先確認雙方算的是同一件事。
玩家列表
| ID | 帳號 | 暱稱 | 狀態 | 餘額 | 商戶 | 加錢 / 扣錢 | 👢 踢下線 |
|---|
🔴 玩家在遊戲中時只能加錢,不能扣錢 —— 在場時記憶體裡那份餘額才是真相
(開砲每秒扣好幾次、每 2 秒才落地),直接改 DB 會被下一次落地覆蓋掉。
加錢會即時進到他的遊戲畫面;要扣錢請等他離場。
🔶 每次送出都會附一組訂單號 —— 同一張單重送不會重複入帳。
🔶 每次送出都會附一組訂單號 —— 同一張單重送不會重複入帳。
最近注單 點一列看該場細單
| 注單 | 遊戲 | 玩家 | 發數 | 投注 | 派彩 | 淨額 | 進場 |
|---|
細單
| 類型 | 發數 | 投注 | 派彩 | 魚種 | 賠率 | 骰值 | 門檻 |
|---|
🔴 骰值 < 門檻 = 捕獲。兩者都是「當下」的值 —— 之後改設定,歷史紀錄仍對得起來。
💧 水池現況
| 遊戲 | 廳 | 桌 | 水位檔 | 座位 | 水量 | 進帳 | 出帳 | 抽水 | 池內 RTP | 狀態 |
|---|
🔴 長期 RTP = 1 − 抽水率,不是由賠付表決定 —— 水池滿了放水、見底收緊,
被負反饋鎖在水位帶內。
🔴 看「狀態」那一欄:長時間卡在「大贏」或「大輸」= 水池的修正範圍已經蓋不住, RTP 正在偏(server log 也會吼
⚠️ 池內 RTP 是這一桌從開桌到現在的實測(出帳 ÷ 進帳),樣本小的時候本來就會跳。
🔴 看「狀態」那一欄:長時間卡在「大贏」或「大輸」= 水池的修正範圍已經蓋不住, RTP 正在偏(server log 也會吼
warnIfSaturated)—— 這時要去查碰到率或 poolRatio。⚠️ 池內 RTP 是這一桌從開桌到現在的實測(出帳 ÷ 進帳),樣本小的時候本來就會跳。
📆 日報 / 對帳
| 日期 | 人數 | 場次 | 發數 | 投注 | 派彩 | 淨收 | RTP | 轉入 | 轉出 | 淨轉入 |
|---|
💳 錢包流水
| 時間 | 帳號 | 類型 | 金額 | 餘額 | 訂單號 | 備註 |
|---|
🐟 逐魚 RTP 稽核
| 魚種 | 倍率 | 生成 | 碰到 | 擊殺 | 擋下 | 擊殺率 | 投注 | 派彩 | 每碰到回報 | 理論 | 差 (σ) | 判定 |
|---|
🔴 每一種魚「碰到一次」的期望回報都該是同一個數字(= poolRatio,本專案設計成
decision-neutral)—— 打哪一隻不影響 RTP,所以某一種魚偏掉就是設定或程式有問題,
不是運氣。
🔴 先看「判定」那一欄,不要直接看百分比 —— 高倍魚的單次回報變異極大 (×250 的 BOSS 要幾萬次碰到才收斂),樣本不夠時百分比本來就會亂跳。
⚠️ 理論值是「水池倍率 = 1.0」時的值。水池在放水(小贏 / 大贏)時實測會系統性偏高、 收緊時偏低 —— 所以整批一起偏是水池在工作,只有單獨一種偏掉才是 bug。
⚠️ 擋下 = 高倍魚碰到了但水池不夠(
💡 「還要 N 次」是把誤差壓到 ±5% 需要的碰到次數 —— 高倍魚要幾萬次是正常的 (單次回報的變異跟倍率成正比),那也是為什麼短期看某一隻魚「特別黑」沒有意義。
⚠️ 數字每分鐘落庫一次,最後一分鐘的還沒進來;跨日的那一分鐘會算到寫入當天。
🔴 先看「判定」那一欄,不要直接看百分比 —— 高倍魚的單次回報變異極大 (×250 的 BOSS 要幾萬次碰到才收斂),樣本不夠時百分比本來就會亂跳。
σ 是這個樣本數下的一個標準差,判定是 (實測−理論)/σ。⚠️ 理論值是「水池倍率 = 1.0」時的值。水池在放水(小贏 / 大贏)時實測會系統性偏高、 收緊時偏低 —— 所以整批一起偏是水池在工作,只有單獨一種偏掉才是 bug。
⚠️ 擋下 = 高倍魚碰到了但水池不夠(
bossBlocked),那幾發的回報必然是 0,
會把該魚種的實測往下拉;這是設計行為不是異常。💡 「還要 N 次」是把誤差壓到 ±5% 需要的碰到次數 —— 高倍魚要幾萬次是正常的 (單次回報的變異跟倍率成正比),那也是為什麼短期看某一隻魚「特別黑」沒有意義。
⚠️ 數字每分鐘落庫一次,最後一分鐘的還沒進來;跨日的那一分鐘會算到寫入當天。
🎁 活動設定
🔴 流水 = 只算消費(開砲 / 切魚扣掉的錢),不含贏分。經驗值也是同一個數字。
🔴 捕魚返利每週一 00:00(台北時間)重置;等級與捕魚任務是一次性的。 重置是靠「週期鍵」換掉,不需要任何排程 —— 所以 server 那時沒開也不會漏。
⚠️ 要改門檻 / 獎勵請改
🔴 捕魚返利每週一 00:00(台北時間)重置;等級與捕魚任務是一次性的。 重置是靠「週期鍵」換掉,不需要任何排程 —— 所以 server 那時沒開也不會漏。
⚠️ 要改門檻 / 獎勵請改
config/<game>/activity.json 再按
⚙️ 設定 → ♻️ 重新載入設定檔(這一頁是唯讀的)。
🔎 查某個玩家的進度
🧾 最近的領獎紀錄
| 時間 | 玩家 | 檔位 | 週期 | 獎勵 |
|---|
🔑 接入金鑰 上游平台打 /api/op/* 用的 x-api-key
| 狀態 | 遊戲 | 開哪些款 | 商戶 | 給誰用 | 金鑰 | 來源 | 最後使用 | 備註 |
|---|
🎮 「開哪些款」:逗號分隔的遊戲 id(例
🔴 一個串接方一把——這樣才能單獨停用某一方,而不影響其他人; 稽核也看得出是誰在打。
🔴 金鑰決定款別:上游不用在每個請求裡指定遊戲,也就不可能填錯。
🔴 停用會立刻生效(不用重啟);但最後一把不給停—— 停了上游就完全連不進來。要換金鑰:先新增一把 → 確認對方換過去 → 再停用舊的。
⚠️ 標
pharaoh,general),
或 * = 這台全部的款。留空 = 沿用「遊戲」那一欄那一款(升級前的行為)。
🔴 清單裡一定要含「遊戲」那一欄的款 —— 那是上游不帶 game 時的預設。🔴 一個串接方一把——這樣才能單獨停用某一方,而不影響其他人; 稽核也看得出是誰在打。
🔴 金鑰決定款別:上游不用在每個請求裡指定遊戲,也就不可能填錯。
🔴 停用會立刻生效(不用重啟);但最後一把不給停—— 停了上游就完全連不進來。要換金鑰:先新增一把 → 確認對方換過去 → 再停用舊的。
⚠️ 標
env 的那把是開機時從 .env 帶進來的。
刪掉它之後下次重啟又會被帶回來——真的要移除請連 .env 一起改。
+ 新增一把
📢 公告
| 狀態 | 出現在 | 遊戲 | 排序 | 內容 | 期間 | 最後修改 |
|---|
🔴 沒填的語言會退回基準語(不會變成空白條)——所以只填中文也能上,
其他語系的玩家看到的是中文。
🔶 排序小的排前面;有兩則以上時大廳每 9 秒換一則、戰鬥內跑完一輪換下一則。
⏱️ 期間留空 = 不限;結束時間到了就自動下架,不用回來關它。
⚠️ 玩家端每 2 分鐘重抓一次 —— 改完不必叫玩家重整,但也不是「立刻」。
🔶 排序小的排前面;有兩則以上時大廳每 9 秒換一則、戰鬥內跑完一輪換下一則。
⏱️ 期間留空 = 不限;結束時間到了就自動下架,不用回來關它。
⚠️ 玩家端每 2 分鐘重抓一次 —— 改完不必叫玩家重整,但也不是「立刻」。
新增公告
⚙️ 現在跑的設定 唯讀 —— 設定的真相是 git 裡的 JSON 檔
♻️ 重新載入設定檔:server 重讀
🔴 全部驗過才換 —— 任何一份格式錯 / 賠付表 EV 不是 1.0,就整批放棄、 舊設定繼續跑(訊息會告訴你是哪一份壞了)。
⚠️ 已經在場上的東西不動:已生出來的魚保留出生時的賠率、 正在跑的那張地圖跑完才套用新腳本。client 的手感參數是下一個進大廳的玩家才拿到新值。
fish.json / paths.json /
maps.json / client.json 並換到正在跑的房間上,
不用重啟、不會踢掉在場玩家。🔴 全部驗過才換 —— 任何一份格式錯 / 賠付表 EV 不是 1.0,就整批放棄、 舊設定繼續跑(訊息會告訴你是哪一份壞了)。
⚠️ 已經在場上的東西不動:已生出來的魚保留出生時的賠率、 正在跑的那張地圖跑完才套用新腳本。client 的手感參數是下一個進大廳的玩家才拿到新值。
廳
| 廳 | 名稱 | 砲值 | 在場 | 魚 | 子彈 |
|---|
魚種 EV 必須恆等 1.0 —— 那是賠付表有沒有歪掉的唯一指標
| 代碼 | 名稱 | 賠率 | 機率門檻 | EV | 層 | 碰撞框 | 類型 |
|---|
🔴 EV = 機率門檻 ÷ proMax × 賠率(特殊魚用期望倍率算,因為它的賠付是隨機的)。
只要有一種不是 1.0,就代表「打那種魚比較賺」 —— server 啟動時就會擋下來,
這頁是給你確認「線上這台載到的到底是哪一份」。
🎨 client 手感參數(A 類) 改完不用重啟 —— 下一個進大廳的玩家就拿到新值
| 參數 | 基準值(檔案) | 覆寫值(DB) | 有效值 | 改 |
|---|
🔴 只有 A 類:調了也不影響判定的表現參數(水波 / 水泡 / 影子 / 飄字 / 特效上限…)。
子彈速度、砲台座標、魚的縮放、開砲冷卻不在這裡 ——
那些跟 server 的判定綁在一起,只能有一個來源。
🔴 server 完全不解讀這些值,只負責合併與送出 → 加一個新參數只要改 JSON 檔與 client, server 一行都不用動。代價是 server 驗不了值域,所以打錯字靠「這個鍵要在基準檔裡存在」擋。
🔶 清空會刪掉覆寫、回到檔案的基準值。填的是 JSON 字面值 (數字
🔴 server 完全不解讀這些值,只負責合併與送出 → 加一個新參數只要改 JSON 檔與 client, server 一行都不用動。代價是 server 驗不了值域,所以打錯字靠「這個鍵要在基準檔裡存在」擋。
🔶 清空會刪掉覆寫、回到檔案的基準值。填的是 JSON 字面值 (數字
0.8、布林 true、字串要加引號)。
🚧 維護模式
讀取中…
維護中只擋進來:進場 / 建帳號 / 轉入回
1006;
🔴 轉出、查餘額、查注單照常(不可以把商戶的錢鎖在我們這裡)。
已經在玩的人不會被踢。「預計到」只是給商戶看的預告,時間到了不會自動關。
🏢 商戶
| 代碼 | 名稱 | 上層 | 狀態 | 來源 IP 白名單 |
|---|
🔴 停權只擋進不擋出 —— 停權之後那一家建帳號 / 進場 / 轉入會被擋,
但轉出、查餘額、查注單照常。
白名單留白 = 不額外限制(平台層的仍然有效);多個 IP 用逗號隔開。 🔴 不做樹狀繼承 —— 在上層加一個 IP 不會放寬底下的商戶。
白名單留白 = 不額外限制(平台層的仍然有效);多個 IP 用逗號隔開。 🔴 不做樹狀繼承 —— 在上層加一個 IP 不會放寬底下的商戶。
🎮 試玩帳號
讀取中…
🔴 在線的一定不清;清掉的是帳號本身與它的注單 / 細單 / 錢包流水 / 活動進度。 試玩號碼會在下次有人用到時重新建立。
| 號碼 | 帳號 | 餘額 | 場次 | 發數 | 補額次數 | 最後動作 | 會清掉嗎 |
|---|
🗄️ 細單保留
讀取中…
🗑️ 兩段式,不會一按就沒 —— 超過保留天數的表先改名進垃圾桶
(bd_trash_<丟進去那天>_<原表名>,資料原封不動、按「還原」就回來);
在垃圾桶裡待滿天數之後,下一次維運才真的 DROP TABLE。
今天與昨天的表不給動。
細單一天一款一張表(bet_detail_<款別>_YYYYMMDD);
bet_detail_YYYYMMDD 是還沒分款的舊表,兩款混在一起,只有平台層級的帳號能動。
| 日期 | 款別 | 表名 | 列數 | 幾天前 | 狀態 | 接下來 |
|---|
後台操作紀錄 動錢一定有原因
| 時間 | 操作者 | 動作 | 對象 | 金額 | 原因 |
|---|