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

monetki

📄 Monetki.cs – system monet z losowymi efektami

🎯 Cel

System Monetki pozwala graczom korzystać z przedmiotu Coin (monetki) w celu uruchomienia jednego z wielu możliwych, losowych efektów. Mechanizm ten:

  • dostarcza losowości i zabawy,

  • wykorzystuje event PlayerCoinFlipEvent,

  • umożliwia pełną konfigurację w config.yml.


🧱 Struktura klasy

public class Monetki

Główne pola:

Pole
Typ
Opis

usedCoins

HashSet<ushort>

Przechowuje seriale monet już użytych w danej rundzie

config

PluginConfig

Dostęp do ustawień aktywnych efektów

rng

System.Random

Generator do losowania efektów


🔧 Inicjalizacja

public Monetki(CustomPlugin plugin, PluginConfig config)

Zapisuje konfigurację oraz plugin referencyjny. Nie uruchamia timerów ani coroutine – całość działa na eventach.


🔔 Obsługiwane zdarzenia

▶️ RoundStart

  • Czyści listę usedCoins, aby każda monetka mogła być użyta ponownie w nowej rundzie.

🎲 PlayerCoinFlipEvent

Główna logika systemu monetek:

  1. Sprawdzenie, czy funkcja jest włączona (config.CoinsEnabled)

  2. Czy gracz trzyma przedmiot typu ItemType.Coin

  3. Czy monetka (po jej serialu) była już użyta

  4. Tworzenie listy dostępnych efektów na podstawie konfiguracji

  5. Losowanie efektu z opóźnieniem i jego uruchomienie


🧪 Lista dostępnych efektów

Każdy efekt to Func<Player, string> – funkcja, która wykonuje akcję i zwraca nazwę efektu. Oto lista obsługiwanych efektów i ich ID:

ID
Nazwa efektu
Funkcja

0

Teleportacja

TeleportPlayer()

1

Leczenie

HealPlayer()

2

Zmiana klasy

ChangePlayerClass()

5

Losowy przedmiot

GiveRandomItem()

6

Odporność na obrażenia

GrantDamageImmunity()

7

Upuszczenie przedmiotu

DropCurrentItem()

8

Zamiana miejscami z graczem

SwapWithRandomPlayer()

9

Teleport do pomieszczenia

TeleportToRandomRoom()

10

Zwiększenie obrażeń

BoostDamageOutput()

11

Przyciągnięcie graczy

PullNearbyPlayers()

12

Przebranie

DisguisePlayer()

16

Wymiana ekwipunku z graczem

SwapInventoryWithRandom()

18

Klon

CreateDecoyClone()

19

Przetasowanie pozycji graczy

ShuffleAllPlayers()

20

Przełącz bronie

ToggleWeapons()

22

Pole siłowe

CreateForceField()

24

Przesunięcie czasowe

TimeShiftPlayers()

Efekty są warunkowo aktywowane zależnie od konfiguracji (config.CoinEffectXYZ == true).


🕒 Wykonanie efektu – z opóźnieniem

  • Efekt uruchamiany jest z opóźnieniem 1 sekundy, by synchronizować z animacją rzutu monetą.

  • Wykorzystuje async void ApplyEffectWithDelay(...)


🧠 Przykłady efektów

🔁 SwapWithRandomPlayer

Zamienia pozycję gracza z innym, losowym graczem:

🎭 DisguisePlayer

Zmienia nick gracza na innego gracza na 30 sekund:

🛡️ CreateForceField

Tworzy sferę ochronną na 15 sekund:

Dodaje komponent ForceFieldController.

TimeShiftPlayers

Przesuwa czas każdego gracza (np. lag/speed-up):


⚙️ Przykładowa konfiguracja config.yml

Last updated