Dashboard Login

Game Server Admin Panel

Server Dashboard

Total Rooms
0
Online Players
0
Waiting
0
Playing
0

Active Rooms

CodeTypeStatusPlayersTimeMapCreated

Players

NameUser IDItemStatus
Select a room

API Documentation

Base URL-
WebSocket-
Room Management 5 endpoints
POST /api/rooms/quickplay Find available room or create new one
Request Body
{
  "map": "track_1",
  "timeLimit": 90
}
Response 200
{
  "roomId": "ABC123",
  "type": "public"
}
POST /api/rooms/public Create a public room
Request Body
{
  "map": "track_1",
  "timeLimit": 90
}
Response 200
{
  "roomId": "XYZ789",
  "type": "public"
}
POST /api/rooms/private Create a private room
Request Body
{
  "map": "track_1",
  "timeLimit": 90
}
Response 200
{
  "roomId": "ABC123",
  "type": "private"
}
GET /api/rooms/list List all public rooms
Response 200
{
  "count": 2,
  "rooms": [
    {
      "roomId": "ABC123",
      "map": "track_1",
      "playerCount": 3,
      "maxPlayers": 5,
      "status": "waiting",
      "type": "public",
      "timeLimit": 90,
      "createdAt": 1706612345
    }
  ]
}
GET /api/rooms/{roomId} Get room details
Parameters
roomIdstringRoom code (e.g. ABC123)
Response 200
{
  "id": "ABC123",
  "type": "public",
  "status": "waiting",
  "map": "track_1",
  "maxPlayers": 5,
  "timeLimit": 90,
  "timeLeft": 90,
  "players": {},
  "boosters": {},
  "traps": {}
}
History & Stats 3 endpoints
GET /api/history/room/{roomId} Get game history for a room
Parameters
roomIdstringRoom code
Response 200
{
  "roomId": "ABC123",
  "map": "track_1",
  "type": "public",
  "duration": 85,
  "playerCount": 4,
  "winners": [
    {"userId": "u1", "name": "Player1", "position": 1, "time": 45}
  ]
}
GET /api/history/user/{userId} Get user's game history
Parameters
userIdstringUser ID
limitintMax results (default 10)
Response 200
{
  "history": [
    {"roomId": "ABC123", "map": "track_1", "duration": 85, "playerCount": 4}
  ]
}
GET /api/stats Get global game statistics
Response 200
{
  "total_games": 150,
  "avg_duration": 72.5,
  "by_time_limit": {"60": 30, "90": 80, "180": 40}
}
Response Examples Full Data Samples

Room Waiting (with Players)

Room yang sedang menunggu pemain ready

{
  "id": "ABC123",
  "type": "public",
  "status": "waiting",
  "map": "track_1",
  "maxPlayers": 5,
  "timeLimit": 90,
  "timeLeft": 90,
  "createdAt": "2026-01-30T15:30:00+07:00",
  "players": {
    "player-uuid-1": {
      "id": "player-uuid-1",
      "userId": "user-123",
      "name": "SpeedRacer",
      "skin": "ninja_red",
      "isReady": true,
      "isFinished": false,
      "finishTime": 0,
      "finishPosition": 0,
      "heldItem": null,
      "position": {"x": 0, "y": 0, "z": 0}
    },
    "player-uuid-2": {
      "id": "player-uuid-2",
      "userId": "user-456",
      "name": "TurboKing",
      "skin": "robot_blue",
      "isReady": false,
      "isFinished": false,
      "finishTime": 0,
      "finishPosition": 0,
      "heldItem": null,
      "position": {"x": 0, "y": 0, "z": 0}
    }
  },
  "boosters": {},
  "traps": {}
}

Room Playing (Active Game)

Room yang sedang bermain dengan item boxes, player holding items, dan traps

{
  "id": "XYZ789",
  "type": "public",
  "status": "playing",
  "map": "track_1",
  "maxPlayers": 5,
  "timeLimit": 90,
  "timeLeft": 45,
  "createdAt": "2026-01-30T15:30:00+07:00",
  "startedAt": "2026-01-30T15:31:00+07:00",
  "players": {
    "player-uuid-1": {
      "id": "player-uuid-1",
      "userId": "user-123",
      "name": "SpeedRacer",
      "skin": "ninja_red",
      "isReady": true,
      "isFinished": false,
      "finishTime": 0,
      "finishPosition": 0,
      "heldItem": {
        "type": "bomb",
        "obtainedAt": "2026-01-30T15:31:30+07:00"
      },
      "position": {"x": 125.5, "y": 2.0, "z": 340.8}
    },
    "player-uuid-2": {
      "id": "player-uuid-2",
      "userId": "user-456",
      "name": "TurboKing",
      "skin": "robot_blue",
      "isReady": true,
      "isFinished": true,
      "finishTime": 42,
      "finishPosition": 1,
      "heldItem": null,
      "position": {"x": 500.0, "y": 0, "z": 1000.0}
    },
    "player-uuid-3": {
      "id": "player-uuid-3",
      "userId": "user-789",
      "name": "NitroBlast",
      "skin": "alien_green",
      "isReady": true,
      "isFinished": false,
      "finishTime": 0,
      "finishPosition": 0,
      "heldItem": {
        "type": "shield",
        "obtainedAt": "2026-01-30T15:32:00+07:00"
      },
      "position": {"x": 89.2, "y": 1.5, "z": 280.3}
    }
  },
  "boosters": {
    "box-uuid-1": {
      "id": "box-uuid-1",
      "type": "speed_boost",
      "position": {"x": 50.0, "y": 0, "z": 100.0},
      "taken": true,
      "takenBy": "player-uuid-1"
    },
    "box-uuid-2": {
      "id": "box-uuid-2",
      "type": "lightning",
      "position": {"x": 150.0, "y": 0, "z": 300.0},
      "taken": false,
      "takenBy": ""
    },
    "box-uuid-3": {
      "id": "box-uuid-3",
      "type": "freeze",
      "position": {"x": 250.0, "y": 0, "z": 500.0},
      "taken": false,
      "takenBy": ""
    }
  },
  "traps": {
    "trap-uuid-1": {
      "id": "trap-uuid-1",
      "type": "bomb",
      "placedBy": "player-uuid-2",
      "position": {"x": 180.5, "y": 0, "z": 420.3},
      "radius": 8.0,
      "active": true,
      "createdAt": "2026-01-30T15:32:15+07:00"
    },
    "trap-uuid-2": {
      "id": "trap-uuid-2",
      "type": "freeze",
      "placedBy": "player-uuid-1",
      "position": {"x": 95.0, "y": 0, "z": 200.0},
      "radius": 5.0,
      "active": false,
      "triggeredBy": "player-uuid-3",
      "createdAt": "2026-01-30T15:31:45+07:00"
    }
  }
}

Room Ended (Game Finished)

Room yang sudah selesai dengan hasil akhir

{
  "id": "DEF456",
  "type": "public",
  "status": "ended",
  "map": "track_1",
  "maxPlayers": 5,
  "timeLimit": 90,
  "timeLeft": 0,
  "createdAt": "2026-01-30T15:00:00+07:00",
  "startedAt": "2026-01-30T15:01:00+07:00",
  "endedAt": "2026-01-30T15:02:30+07:00",
  "players": {
    "player-uuid-1": {
      "id": "player-uuid-1",
      "userId": "user-123",
      "name": "SpeedRacer",
      "isFinished": true,
      "finishTime": 45,
      "finishPosition": 1,
      "heldItem": null
    },
    "player-uuid-2": {
      "id": "player-uuid-2",
      "userId": "user-456",
      "name": "TurboKing",
      "isFinished": true,
      "finishTime": 52,
      "finishPosition": 2,
      "heldItem": null
    },
    "player-uuid-3": {
      "id": "player-uuid-3",
      "userId": "user-789",
      "name": "NitroBlast",
      "isFinished": true,
      "finishTime": 68,
      "finishPosition": 3,
      "heldItem": null
    }
  },
  "boosters": {},
  "traps": {}
}

Game Start Event

Event yang dikirim server saat game dimulai

{
  "type": "game_start",
  "payload": {
    "roomId": "ABC123",
    "timeLeft": 90,
    "players": [
      {"id": "p1", "userId": "user-123", "name": "SpeedRacer", "skin": "ninja_red"},
      {"id": "p2", "userId": "user-456", "name": "TurboKing", "skin": "robot_blue"}
    ],
    "boosters": [
      {"id": "box-1", "type": "bomb", "position": {"x": 50, "y": 0, "z": 100}, "taken": false},
      {"id": "box-2", "type": "shield", "position": {"x": 150, "y": 0, "z": 300}, "taken": false},
      {"id": "box-3", "type": "speed_boost", "position": {"x": 250, "y": 0, "z": 500}, "taken": false}
    ]
  }
}

Game End Event

Event yang dikirim server saat game selesai

{
  "type": "game_end",
  "payload": {
    "roomId": "ABC123",
    "finishedPlayers": ["player-uuid-1", "player-uuid-2", "player-uuid-3"],
    "winners": [
      {"userId": "user-123", "name": "SpeedRacer", "position": 1, "time": 45},
      {"userId": "user-456", "name": "TurboKing", "position": 2, "time": 52},
      {"userId": "user-789", "name": "NitroBlast", "position": 3, "time": 68}
    ]
  }
}
WebSocket Events Client & Server

Connect to: wss://gameapi.copod.my.id/ws/{roomId}

Client → Server

player_joined
{"type":"player_joined","payload":{"userId":"x","name":"Player","skin":"ninja"}}
player_ready
{"type":"player_ready","payload":{}}
player_unready
{"type":"player_unready","payload":{}}
position_update
{"type":"position_update","payload":{"playerId":"x","x":10.5,"y":0,"z":20.3}}
item_taken
{"type":"item_taken","payload":{"boosterId":"box-id","playerId":"player-id"}}
item_used
{"type":"item_used","payload":{"playerId":"x","itemType":"bomb","x":10,"y":0,"z":5}}
trap_triggered
{"type":"trap_triggered","payload":{"trapId":"trap-id","victimId":"player-id"}}
player_finish
{"type":"player_finish","payload":{}}

Server → Client

room_updateFull room state on join
game_startGame started with boosters & players
timer_update
{"type":"timer_update","payload":{"timeLeft":85}}
trap_placed
{"type":"trap_placed","payload":{"trapId":"x","type":"bomb","x":10,"y":0,"z":5,"radius":8}}
trap_hit
{"type":"trap_hit","payload":{"trapId":"x","victimIds":["p1","p2"],"attackerId":"p3"}}
player_finish
{"type":"player_finish","payload":{"playerId":"x","position":1,"time":45}}
game_endGame ended with winners list

Item Types

bomblightningshield speed_boostjump_boostfreezeteleport
Response

            

Game History

Search Games

RoomMapDurationPlayersWinnersDate
Enter User ID to search

Admin Management

UserUsernameCreatedLast LoginAction

Settings

Change Password