Files
tekton/server/nakama
adtpdn 15043b5655 feat: take_powerup VFX, rank fix, admin chat management
- Wire take_powerup AnimatedSprite3D on powerup pickup via add_powerup_from_item()
- Make take_powerup animation one-shot (loop: false)
- Fix rank Position label hidden at game start (visible = false, only shows when score > 0)
- Competition ranking for tied scores in main.gd
- Lobby Chat admin tab: system prefix, max messages, wipe, purge old, save config
- Chat Storage admin tab: list/browse/delete individual channel messages
- Backend RPCs: admin_get_chat_config, admin_set_chat_config, admin_purge_old_messages,
  admin_list_channel_messages, admin_delete_channel_message
- Chat config applied on lobby join (max_messages, prefix injection)
2026-06-19 17:13:24 +08:00
..
2026-05-19 17:30:29 +08:00
2026-05-19 17:30:29 +08:00

Nakama Server Setup for Tekton

This guide explains how to deploy the admin module to your Nakama server.

Files

  • core.js — Admin, user management, leaderboard, daily rewards, inbox, auth, shop catalog, purchases, and economy RPCs

Prerequisites

  1. Nakama server installed and running
  2. Node.js and TypeScript for compilation (if using TypeScript)

Deployment Steps

  1. Install dependencies:

    npm install -g typescript
    
  2. Compile TypeScript to JavaScript:

    cd server/nakama
    cp core.js /path/to/nakama/data/modules/
    
  3. Restart Nakama server

Option 2: Convert to Lua

If you prefer Lua, the TypeScript can be converted. See Nakama docs.

Configuration

In your nakama.yml or nakama-docker.yml:

runtime:
  path: /nakama/data/modules

core.js has an InitModule function. Nakama auto-discovers and calls it — no js_entrypoint needed.

Role System

User roles are stored in account metadata:

{
  "role": "player" | "moderator" | "admin" | "owner"
}

Setting Initial Admin

Run this in Nakama console or via API:

UPDATE users 
SET metadata = '{"role": "owner"}'
WHERE username = 'your_admin_username';

Or via Nakama HTTP API:

curl -X PUT "http://localhost:7350/v2/console/account/{user_id}" \
  -H "Authorization: Bearer {admin_token}" \
  -d '{"metadata": "{\"role\": \"owner\"}"}'

RPC Endpoints

Endpoint Required Role Description
admin_kick_player Host or Admin Kick from match
admin_ban_player Admin only Ban user
admin_unban_player Admin only Unban user
admin_get_ban_list Admin only Get all bans
admin_get_server_stats Host or Admin Server statistics
admin_end_match Host or Admin End current match
admin_set_user_role Owner only Change user roles

Security Notes

  1. Never trust the client - All admin operations are validated server-side
  2. Rate limiting - Consider adding rate limits for RPC calls
  3. Logging - All admin actions are logged with user ID
  4. Ban storage - Bans are stored in Nakama storage, not local files

Testing

  1. Create a test user with admin role
  2. Login with the admin user
  3. Press F10 in-game to open admin panel
  4. Verify kick/ban operations work

Troubleshooting

RPC Not Found

  • Check modules are loaded: look for "Tekton core module loaded" in logs

Permission Denied

  • Check user has correct role in metadata
  • Verify session is valid

Ban Not Working

  • Check Nakama storage permissions
  • Verify user_id is correct format (UUID)