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

FREE DropBackpackInDynamicPVPZone : 1.1.0 1.1.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core.Plugins;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("Drop Backpack In Dynamic PVP Zone", "WhiteThunder", "1.1.0")]
    [Description("Forces player backpacks to drop when they are killed in a DynamicPVP zone.")]
    internal class DropBackpackInDynamicPVPZone : CovalencePlugin
    {
        #region Fields

        private const string PermissionKeepOnDeath = "dropbackpackindynamicpvpzone.keepondeath";

        [PluginReference]
        private readonly Plugin Backpacks, DynamicPVP, ZoneManager;

        #endregion

        #region Hooks

        private void Init()
        {
            permission.RegisterPermission(PermissionKeepOnDeath, this);
        }

        // Handle player death by normal means.private void OnEntityDeath(BasePlayer player, HitInfo info)
        {
            OnEntityKill(player);
        }

        // Handle player death while sleeping in a safe zone.private void OnEntityKill(BasePlayer player)
        {
            if (player.IsNpc
                || !IsPlayerInPvpZone(player)
                || permission.UserHasPermission(player.UserIDString, PermissionKeepOnDeath))
                return;

            var droppedItemContainer = Backpacks?.Call("API_DropBackpack", player);
            if (droppedItemContainer != null)
            {
                ChatMessage(player, LangEntry.BackpackDropped);
            }
        }

        #endregion

        #region Helpers

        private bool IsPlayerInPvpZone(BasePlayer player)
        {
            var inPvpDelay = DynamicPVP?.Call("IsPlayerInPVPDelay", player.userID);
            if (inPvpDelay is bool && (bool)inPvpDelay)
            {
                // Player recently exited a PVP zone and can still be killed.return true;
            }

            var zoneIdList = ZoneManager?.Call("GetPlayerZoneIDs", player) as string[];
            if (zoneIdList == null)
            {
                // Player is not in a zone, or Zone Manager is not loaded.return false;
            }

            foreach (var zoneId in zoneIdList)
            {
                var isPvpZone = DynamicPVP?.Call("IsDynamicPVPZone", zoneId);
                if (isPvpZone is bool && (bool)isPvpZone)
                {
                    // Player is in a dynamic PVP zone.return true;
                }
            }

            return false;
        }

        #endregion

        #region Localization

        private class LangEntry
        {
            public static readonly List<LangEntry> AllLangEntries = new List<LangEntry>();

            public static readonly LangEntry BackpackDropped = new LangEntry("BackpackDropped", "Your backpack contents were dropped because you were killed during PvP.");

            public string Name;
            public string English;

            public LangEntry(string name, string english)
            {
                Name = name;
                English = english;

                AllLangEntries.Add(this);
            }
        }

        private string GetMessage(string playerId, LangEntry langEntry) =>
            lang.GetMessage(langEntry.Name, this, playerId);

        private void ChatMessage(BasePlayer player, LangEntry langEntry) =>
            player.ChatMessage(GetMessage(player.UserIDString, langEntry));

        protected override void LoadDefaultMessages()
        {
            var englishLangKeys = new Dictionary<string, string>();

            foreach (var langEntry in LangEntry.AllLangEntries)
            {
                englishLangKeys[langEntry.Name] = langEntry.English;
            }

            lang.RegisterMessages(englishLangKeys, this, "en");
        }

        #endregion
    }
}

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