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

FREE GunStats : 2.2.0 2.2.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using System.Collections.Generic;
/*
 * Originally created by Orange, up to version 1.0.5
 * Rewritten from scratch and maintained to present by VisEntities
 */
namespace Oxide.Plugins {
    [Info("Gun Stats", "VisEntities", "2.2.0")]
    [Description("Tracks your weapon use history, including kills and hits, and displays it on the weapon name.")]
    public class GunStats : RustPlugin {
#region Fields
        private static GunStats _plugin;
        private static Configuration _config;
        private Dictionary<ulong, WeaponStats> _weaponStats = new Dictionary<ulong, WeaponStats>();
#endregion Fields
#region Configuration
        private class Configuration {
            [JsonProperty("Version")]
            public string Version {
                get;
                set;
            }
            [JsonProperty("Weapon Name Format")]
            public string WeaponNameFormat {
                get;
                set;
            }
            [JsonProperty("Include NPC In Stats")]
            public bool IncludeNPCInStats {
                get;
                set;
            }
            [JsonProperty("Excluded Item Short Names")]
            public List<string> ExcludedItemShortNames {
                get;
                set;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            _config = Config.ReadObject<Configuration>();
            if (string.Compare(_config.Version, Version.ToString()) < 0) UpdateConfig();
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            _config = GetDefaultConfig();
        }
        protected override void SaveConfig() {
            Config.WriteObject(_config, true);
        }
        private void UpdateConfig() {
            PrintWarning("Config changes detected! Updating...");
            Configuration defaultConfig = GetDefaultConfig();
            if (string.Compare(_config.Version, "1.0.0") < 0) _config = defaultConfig;
            if (string.Compare(_config.Version, "2.1.0") < 0) {
                _config.IncludeNPCInStats = defaultConfig.IncludeNPCInStats;
            }
            if (string.Compare(_config.Version, "2.2.0") < 0) {
                _config.ExcludedItemShortNames = defaultConfig.ExcludedItemShortNames;
            }
            PrintWarning("Config update complete! Updated from version " + _config.Version + " to " + Version.ToString());
            _config.Version = Version.ToString();
        }
        private Configuration GetDefaultConfig() {
            return new Configuration {
                Version = Version.ToString(), WeaponNameFormat = "{weaponName}\nKills: {kills}, Hits: {shotsHit}, Shots: {shotsFired}", IncludeNPCInStats = false, ExcludedItemShortNames = new List<string>() {
                    "explosive.timed", "explosive.satchel", "grenade.f1", "grenade.beancan"
                }
            }
            ;
        }
#endregion Configuration
#region Data
        private class WeaponStats {
            public int Kills {
                get;
                set;
            }
            public int ShotsFired {
                get;
                set;
            }
            public int ShotsHit {
                get;
                set;
            }
        }
#endregion Data
#region Oxide Hooks
        private void Init() {
            _plugin = this;
            PermissionUtil.RegisterPermissions();
        }
        private void Unload() {
            _config = null;
            _plugin = null;
        }
        private void OnPlayerDeath(BasePlayer victim, HitInfo hitInfo) {
            if (hitInfo == null || victim == null) return;
            BasePlayer killer = hitInfo.InitiatorPlayer;
            if (killer == null || killer.IsNpc) return;
            if (!PermissionUtil.VerifyHasPermission(killer)) return;
            if (killer == victim) return;
            Item item = killer.GetActiveItem();
            if (item == null || _config.ExcludedItemShortNames.Contains(item.info.shortname)) return;
            if (!_config.IncludeNPCInStats && victim.IsNpc) return;
            UpdateWeaponStats(item, addKills : 1);
        }
        private void OnWeaponFired(BaseProjectile projectile, BasePlayer player) {
            if (projectile == null || player == null) return;
            if (!PermissionUtil.VerifyHasPermission(player)) return;
            Item item = projectile.GetItem();
            if (item == null || _config.ExcludedItemShortNames.Contains(item.info.shortname)) return;
            UpdateWeaponStats(item, addShotsFired : 1);
        }
        private void OnEntityTakeDamage(BasePlayer player, HitInfo hitInfo) {
            if (hitInfo == null || player == null) return;
            BasePlayer killer = hitInfo.InitiatorPlayer;
            if (killer == null || killer.IsNpc) return;
            if (!PermissionUtil.VerifyHasPermission(killer)) return;
            if (killer == player) return;
            Item item = killer.GetActiveItem();
            if (item == null || _config.ExcludedItemShortNames.Contains(item.info.shortname)) return;
            if (!_config.IncludeNPCInStats && player.IsNpc) return;
            UpdateWeaponStats(item, addShotsHit : 1);
        }
#endregion Oxide Hooks
#region Functions
        private void UpdateWeaponStats(Item weapon, int addKills = 0, int addShotsHit = 0, int addShotsFired = 0) {
            WeaponStats stats;
            if (!_weaponStats.TryGetValue(weapon.uid.Value, out stats)) {
                stats = new WeaponStats();
                _weaponStats[weapon.uid.Value] = stats;
            }
            stats.Kills += addKills;
            stats.ShotsHit += addShotsHit;
            stats.ShotsFired += addShotsFired;
            UpdateWeaponName(weapon, stats);
        }
        private void UpdateWeaponName(Item weapon, WeaponStats stats) {
            string formattedName = _config.WeaponNameFormat.Replace("{weaponName}", weapon.info.displayName.english).Replace("{kills}", stats.Kills.ToString()).Replace("{shotsFired}", stats.ShotsFired.ToString()).Replace("{shotsHit}", stats.ShotsHit.ToString());
            weapon.name = formattedName;
            weapon.MarkDirty();
        }
#endregion Functions
#region Utility Classes
        private static class PermissionUtil {
            public const string USE = "gunstats.use";
            public static void RegisterPermissions() {
                _plugin.permission.RegisterPermission(USE, _plugin);
            }
            public static bool VerifyHasPermission(BasePlayer player, string permissionName = USE) {
                return _plugin.permission.UserHasPermission(player.UserIDString, permissionName);
            }
        }
#endregion Utility Classes
    }
}

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