Иконка ресурса

FREE ReflectPvP : 1.3.2 1.3.2

Нет прав для скачивания
C#:
using System.Collections.Generic;

namespace Oxide.Plugins;

[Info("Reflect PvP", "&anhe", "1.3.2")]
[Description("Reflects PvP damage unless teammates.")]
public class ReflectPvP : RustPlugin
{
    private void Loaded() =>
        RegisterProtectedSleepers();

    private object OnEntityTakeDamage(BaseCombatEntity target, HitInfo info) =>
        // Reflect if
        (
            // Attacker is Player
            (
                info.InitiatorPlayer ??
                // Charged drones
                BasePlayer.FindByID(info.Initiator?.OwnerID ?? 0)
            ) is BasePlayer attacker &&
            // Not an NPC
            !attacker.IsNpc &&
            (
                // PvP
                (
                    // Target is Player
                    target is BasePlayer victim &&
                    // Not an NPC
                    !victim.IsNpc &&
                    // Not a team
                    (
                        attacker.currentTeam == 0 ||
                        attacker.currentTeam != victim.currentTeam
                    ) &&
                    // Not self
                    attacker.userID != victim.userID &&
                    // Awake or a protected sleeper
                    (
                        !victim.IsSleeping() ||
                        protectedSleepers.Contains(victim.userID)
                    )
                ) ||
                // Body gathering
                (
                    // Target is a Corpse
                    target is LootableCorpse corpse &&
                    // Not an NPC
                    corpse.playerSteamID > 76561197960265728 &&
                    // Not self
                    attacker.userID != corpse.playerSteamID &&
                    // Not a team
                    attacker.Team?.members.Contains(corpse.playerSteamID) != true
                )
            ) &&
            // Not admin
            !attacker.IsAdmin &&
            // Reflect damage
            ReflectDamage(attacker, info)
        )
            ? false : null;

    #region Reflect damage
    
    bool ReflectDamage(BasePlayer attacker, HitInfo info) {
        attacker.Hurt(
            info.damageTypes.Total(),
            info.damageTypes.GetMajorityDamageType(),
            attacker,
            false
        );

        return true;
    }

    #endregion

    #region Protected Sleepers

    private void RegisterProtectedSleepers() {
        foreach (var player in BasePlayer.sleepingPlayerList)
            OnPlayerDisconnected(player, "protectedSleepers registry");
    }

    private readonly HashSet<ulong> protectedSleepers = new();
    
    private void OnPlayerDisconnected(BasePlayer player, string reason)
    {
        if (
            player.GetBuildingPrivilege()
                ?.IsAuthed(player) != false
        )
            protectedSleepers.Add(player.userID);
    }

    private void OnPlayerConnected(BasePlayer player) =>
        protectedSleepers.Remove(player.userID);

    #endregion
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху