circle-info
alpha version all features and options may change dramatically or disappear

Late_join_system

📄 LateJoinSystem.cs – dynamiczne przypisywanie ról dla spóźnionych graczy

Klasa LateJoinSystem odpowiada za dynamiczne przypisywanie ról dla graczy dołączających po rozpoczęciu rundy – tzw. „late join”. Pozwala na automatyczne włączenie takich graczy do rozgrywki, jeśli dołączyli w dozwolonym oknie czasowym określonym w konfiguracji.


📦 Konstrukcja klasy

public class LateJoinSystem
{
    private readonly CustomPlugin plugin;
    private readonly PluginConfig config;

    public LateJoinSystem(CustomPlugin plugin, PluginConfig config) { ... }
}
  • Klasa jest niezależnym komponentem, rejestrowanym w CustomPlugin.cs poprzez:

    EventManager.RegisterEvents(this, new LateJoinSystem(this, config));
  • Otrzymuje referencję do instancji pluginu i jego konfiguracji, co pozwala jej uzyskać roundStartTime i inne ustawienia.


🔔 Główna logika – zdarzenie PlayerJoined

[PluginEvent(ServerEventType.PlayerJoined)]
private void OnPlayerJoined(PlayerJoinedEvent ev)
  • Handler przypisany do eventu PlayerJoined z NWAPI (PluginAPI.Enums.ServerEventType.PlayerJoined)

  • Wywoływany za każdym razem, gdy gracz dołącza do serwera – także w trakcie trwania rundy.


✅ Logika działania – krok po kroku

  1. Sprawdzenie włączenia funkcji w konfiguracji

    Jeśli LateJoinEnabled = false, gracz nie otrzyma żadnej roli (pozostanie z domyślną logiką serwera lub będzie Spectatorem).


  1. Sprawdzenie czy runda już trwa

    Jeśli runda nie trwa, system nie robi nic – nie przypisuje ról wcześniej.


  1. Obliczenie czasu od rozpoczęcia rundy

    Użycie plugin.roundStartTime, który ustawiany jest w CustomPlugin.cs w evencie RoundStart. To pozwala obliczyć, ile sekund minęło od startu rundy.


  1. Warunek: czy gracz mieści się w oknie czasowym Late Join

    • Jeśli tak – zostaje włączony do rozgrywki.

    • Jeśli nie – przypisywana jest rola Spectator.


  1. Przypisanie roli

    • Gracz zmieścił się w czasie – losowo ClassD lub Scientist:

    • Gracz się spóźnił – Spectator:


  1. Feedback do gracza + logowanie

    • player.SendBroadcast(...) – komunikat do gracza

    • Log.Info(...) – zapis informacji do konsoli serwera


🛠 Konfiguracja (PluginConfig)

Aby system działał poprawnie, wymagane są dwa pola w pliku config.yml:

  • LateJoinEnabled – aktywuje system

  • LateJoinTimeSeconds – czas w sekundach, przez jaki można dołączyć do rundy jako aktywny gracz

Last updated