using PluginAPI.Core.Attributes;
using System.Collections.Generic;
public class SCP457Plugin
[PluginEntryPoint("SCP-457 Plugin", "1.0.0", "Aggiunge SCP-457 (l'Uomo di Fuoco) al gioco", "TuoNome")]
EventManager.RegisterEvents(this);
Log.Info("SCP-457 Plugin è stato caricato con successo!");
EventManager.UnregisterEvents(this);
Log.Info("SCP-457 Plugin è stato disattivato!");
public Config Config { get; private set; }
private Player scp457Player = null;
[PluginEvent(ServerEventType.RoundStart)]
public void OnRoundStart()
Timing.CallDelayed(3f, () => {
private void TrySpawnSCP457()
if (UnityEngine.Random.Range(0, 100) < Config.Scp457SpawnChance)
List<Player> possiblePlayers = new List<Player>();
foreach (Player player in Player.GetPlayers())
if (player.Role.Team == Team.SCPs && player.Role != RoleTypeId.Scp106)
possiblePlayers.Add(player);
if (possiblePlayers.Count == 0)
foreach (Player player in Player.GetPlayers())
if (player.Role == RoleTypeId.ClassD)
possiblePlayers.Add(player);
if (possiblePlayers.Count > 0)
Player player = possiblePlayers[UnityEngine.Random.Range(0, possiblePlayers.Count)];
TransformIntoSCP457(player);
Server.SendBroadcast("<color=red>SCP-457 è stato rilasciato nella struttura!</color>", 10);
private void TransformIntoSCP457(Player player)
player.SetRole(RoleTypeId.Scp106);
player.DisplayNickname = "SCP-457";
player.Scale = new Vector3(1.1f, 1.1f, 1.1f);
player.ReferenceHub.nicknameSync.Network_myColor = new Color32(255, 80, 0, 255);
Timing.RunCoroutine(FireEffectCoroutine(player));
player.SendHint("Sei diventato <color=red>SCP-457</color>, l'Uomo di Fuoco! Brucia tutti quelli che incontri!", 10f);
private IEnumerator<float> FireEffectCoroutine(Player player)
while (player != null && player.IsAlive && player == scp457Player)
player.EffectsManager.EnableEffect<CustomPlayerEffects.Burned>(5f);
foreach (Player target in Player.GetPlayers())
if (target != player && target.IsAlive &&
Vector3.Distance(player.Position, target.Position) < Config.FireDamageRadius)
target.Damage(Config.FireDamagePerSecond * 0.5f, "SCP-457");
target.EffectsManager.EnableEffect<CustomPlayerEffects.Burned>(1f);
target.SendHint("<color=red>Ti stai bruciando! Allontanati da SCP-457!</color>", 1f);
yield return Timing.WaitForSeconds(0.5f);
[PluginEvent(PlayerEventType.PlayerDeath)]
public void OnPlayerDied(Player player, Player attacker, DamageHandlerBase damageHandler)
if (player == scp457Player)
if (attacker == scp457Player)
foreach (Player nearbyPlayer in Player.GetPlayers())
if (nearbyPlayer != attacker && nearbyPlayer.IsAlive &&
Vector3.Distance(attacker.Position, nearbyPlayer.Position) < Config.FireDamageRadius * 1.5f)
Timing.RunCoroutine(BurnEffectCoroutine(nearbyPlayer));
[PluginEvent(PlayerEventType.PlayerDamage)]
public void OnPlayerDamage(Player player, Player attacker, DamageHandlerBase damageHandler)
if (attacker == scp457Player)
Timing.CallDelayed(0.1f, () => {
player.Damage(damageHandler.Damage * (Config.Scp457DamageMultiplier - 1f), "SCP-457");
Timing.RunCoroutine(BurnEffectCoroutine(player));
private IEnumerator<float> BurnEffectCoroutine(Player player)
for (int i = 0; i < 5; i++)
player.Damage(Config.BurnDamagePerSecond, "SCP-457 (Bruciatura)");
player.SendHint("<color=orange>Stai bruciando!</color>", 1f);
player.EffectsManager.EnableEffect<CustomPlayerEffects.Burned>(1.2f);
yield return Timing.WaitForSeconds(1f);
public float Scp457SpawnChance = 30f;
public float FireDamageRadius = 3f;
public float FireDamagePerSecond = 5f;
public float BurnDamagePerSecond = 3f;
public float Scp457DamageMultiplier = 1.5f;