NON-PRODUCTION

Tarzan — tài liệu ghép client

Payline 5×3. Diamond pot, jungle treasure, minigame lật bài. Trang này chỉ được serve khi ENVIRONMENT != production.

1. Tổng quan

MụcGiá trị
Grid5 cột × 3 hàng · reels[col][row]
PayPayline. Wild (12) thay thế paying symbol
DiamondSymbol 11. Cộng diamond_count / diamond_pot. Claim khi claim_diamond_pot
TreasureJungle map theo bet. Flag is_bonus_treasure + tọa độ ô
Mini gameLật bài. Loop POST /minigame {card_index} tới is_finished
Tarzan symbolis_tarzan, number_of_tarzan_symbols, tarzan_win_amount
FSScatter 13. Pot giữa chừng, credit khi is_finish_free_spin
Base path/api/v1
Bắt buộc GET /api/v1/gameplay trước spin. Restore treasure map từ treasures[], restore lật bài từ mini_game_info nếu đang dở.

2. Luồng ghép

  1. Vào game → GET /gameplay. Vẽ board, diamond meter, jungle map theo bet.
  2. POST /spins. Highlight win_lines.
  3. Nếu claim_diamond_pot → animation claim, cộng diamond_win.
  4. Nếu is_bonus_treasure → mở ô treasure_row/col trên map, cập nhật treasures.
  5. Nếu is_mini_game → khóa spin, loop POST /minigame tới is_finished.
  6. FS: không trừ bet; credit chip khi is_finish_free_spin.

3. Auth & envelope

Authorization: Bearer <access_token>
Content-Type: application/json
{
  "code": 0,
  "msg": { ... }
}
codeÝ nghĩa
0OK
-1Unknown / JWT invalid
-2Invalid input
69Wrong state — chưa /gameplay, đang minigame
1000Popup i18n

4. Grid & symbol

Board 5×3 (trái) và 5 lá bài úp của minigame (dưới).

8
12
8
4
13
11
5
9
1
3
0
2
6
7
10

Minigame — 5 lá úp, user gửi card_index 0–4

?
?
?
?
?

11 Diamond (xanh dương). 12 Wild. 13 Scatter. Lá xanh = đang chọn.

idSymbol
0–3Low
4–7Mid
8–10High
11Diamond
12Wild
13Scatter

5. GET /api/v1/gameplay

GET /api/v1/gameplay
FieldTypeClient dùng để
init_reelsint[5][3]Board preview
user_moneyint64Chip
bets / show_bets / betBet UI
pay_tablefloat[][]Paytable
game_typeintMode hiện tại
is_free_spin / free_spins / max_free_spinsFS
free_spin_potint64Pot FS
diamond_countintSố kim cương đã gom
diamond_potint64Giá trị nồi kim cương
treasures{bet, treasures[]}[]Map jungle theo từng mức bet — treasures[] bool ô đã mở
mini_game_infoobject?Restore: turns, cards, win_amount
{
  "code": 0,
  "msg": {
    "init_reels": [[8,11,0],[12,5,2],[8,9,6],[4,1,7],[13,3,10]],
    "user_money": 500000,
    "bets": [200, 1000, 2000, 10000], "show_bets": [200, 1000, 2000, 10000],
    "pay_table": [[1,2,5],[1.5,3,8],[2,4,10],[2.5,5,12],[3,8,15],[4,10,20],[5,12,25],[8,15,40],[10,25,80],[15,40,100],[20,50,150]],
    "bet": 1000, "game_type": 0,
    "is_free_spin": false, "free_spins": 0, "max_free_spins": 0, "free_spin_pot": 0,
    "diamond_count": 3, "diamond_pot": 15000,
    "treasures": [{ "bet": 1000, "treasures": [false, false, true, false, false] }]
  }
}

6. POST /api/v1/spins

POST /api/v1/spins
{ "bet": 1000 }
FieldTypeÝ nghĩa
user_money / win_amount / betChip / win / bet
is_tarzanboolHit feature Tarzan symbol
is_bonusboolTrigger bonus / FS
number_of_bonus_free_spinsint+N FS
is_free_spin / free_spins / max_free_spins / free_spin_potFS
is_finish_free_spinboolCredit pot
claim_diamond_potboolPhải play animation claim nồi
diamond_winint64Chip claim nồi
diamond_count / diamond_potState nồi sau spin
win_linesWinLine[]win_amount, line, line_number, symbol, number_of_symbols
reelsint[5][3]Board
is_bonus_treasureboolMở 1 ô jungle
treasure_id / treasure_row / treasure_colintÔ vừa mở
treasuresbool[]Map bet hiện tại sau spin
is_mini_gameboolPhải vào lật bài
number_of_tarzan_symbolsintĐếm symbol Tarzan
tarzan_win_amountint64Win feature Tarzan
{
  "code": 0,
  "msg": {
    "user_money": 499000, "win_amount": 4000, "bet": 1000,
    "is_tarzan": true, "is_bonus": true, "number_of_bonus_free_spins": 10,
    "is_free_spin": false, "free_spins": 10, "max_free_spins": 10, "free_spin_pot": 0,
    "is_finish_free_spin": false,
    "claim_diamond_pot": true, "diamond_win": 15000, "diamond_count": 0, "diamond_pot": 0,
    "win_lines": [{ "win_amount": 4000, "line": [8,12,8,4,13], "line_number": 0, "symbol": 8, "number_of_symbols": 3 }],
    "reels": [[8,11,0],[12,5,2],[8,9,6],[4,1,7],[13,3,10]],
    "is_bonus_treasure": true, "treasure_id": 2, "treasure_row": 0, "treasure_col": 2,
    "treasures": [false, false, true, false, false],
    "is_mini_game": true, "number_of_tarzan_symbols": 3, "tarzan_win_amount": 2000
  }
}

7. POST /api/v1/minigame

Chỉ gọi khi is_mini_game = true (hoặc restore mini_game_info). User chọn lá.

POST /api/v1/minigame
{ "card_index": 2 }
FieldTypeÝ nghĩa
user_moneyint64Chip (cập nhật khi finish)
betint64Bet
turnsintLượt lật còn lại
cardobjectLá vừa lật: card_type, multiplier, win_amount, card_index
win_amountint64Tổng win minigame đến hiện tại
is_finishedboolLoop tới khi true
{
  "code": 0,
  "msg": {
    "user_money": 499000, "bet": 1000, "turns": 2,
    "card": { "card_type": 1, "multiplier": 5, "win_amount": 5000, "card_index": 2 },
    "win_amount": 5000, "is_finished": false
  }
}
Không POST /spins khi đang minigame. Lặp /minigame đến is_finished.

8. Animation

  1. Spin: vẽ reels, highlight payline theo win_lines.
  2. Diamond: tăng meter; nếu claim_diamond_pot thì nổ nồi, cộng diamond_win.
  3. Treasure: flip ô treasure_row/col trên map bet hiện tại.
  4. Tarzan feature: hiện number_of_tarzan_symbols / tarzan_win_amount.
  5. Minigame: 5 lá úp. Mỗi response lật card.card_index, hiện multiplier / win. Hết turns hoặc is_finished → đóng.
  6. FS: khóa bet; credit khi is_finish_free_spin.

9. Cheat (chỉ non-prod)

{ "bet": 1000, "reels": [[8,11,0],[12,5,2],[8,9,6],[4,1,7],[13,3,10]] }

5 cột × 3 hàng. Production bỏ qua.

10. Error & tiền

Tình huốngHành vi client
HTTP 401Relogin
code 69GET /gameplay — có thể đang dở minigame
code 1000Popup i18n
HTTP 400 blockedUser đang room PvP
EventChip
Base spin−bet; +win_amount / diamond_win / tarzan_win
Minigame giữa chừngTheo user_money từng bước (thường credit lúc finish)
FS giữa chừngTăng pot, chưa cộng chip
FS kết thúc+pot

11. Checklist client