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

FREE ChainSaw : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using System.Collections.Generic;
using Oxide.Core.Configuration;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using UnityEngine;
using System.Linq;
using Oxide.Core;
using System;
using Oxide.Game.Rust.Cui;
using System.Text.RegularExpressions;
using Color = UnityEngine.Color;
using VLB;
using Rust;
// https://modhub.to
// This is a user submitted Rust Plugin checked and verified by ModHub
// ModHub is the largest Server Owner Trading Platform Online
namespace Oxide.Plugins
{
    [Info("ChainSaw", "https://discord.gg/9vyTXsJyKR", "1.0.0", ResourceId = 58)]
    [Description("ChainSaw")]
    public class ChainSaw : RustPlugin
    {				
        #region Classes
        public class entityConfig
        {
			[JsonProperty("Damage amount tiers")]
            public Dictionary<string, int> damage;
			[JsonProperty("Tool damage health add")]
            public Dictionary<string, float> toolDamage;
			[JsonProperty("Required skinID")]
            public ulong skinID;		
        }
	
		public Dictionary<int, string> GetGrades = new Dictionary<int, string>()
		{
				 { -1, "None" },
				 { 0 , "Twigs" },
				 { 1 , "Wood" },
				 { 2 , "Stone" },
				 { 3 , "Metal" },
				 { 4 , "TopTier" },
				 { 5 , "Count" }
		};
		
        #endregion

        #region Config 	
        private ConfigData configData;
        class ConfigData
        {

            [JsonProperty(PropertyName = "Entity short perfab name")]
            public Settings settings { get; set; }
			
            public class Settings
            {
				public Dictionary<string, entityConfig> DamageApply { get; set; }
			}					
           
            public Oxide.Core.VersionNumber Version { get; set; }
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            configData = Config.ReadObject<ConfigData>();

            if (configData.Version < Version)
                UpdateConfigValues();

            Config.WriteObject(configData, true);
        }

        protected override void LoadDefaultConfig() => configData = GetBaseConfig();

        private ConfigData GetBaseConfig()
        {
            return new ConfigData
            {
                settings = new ConfigData.Settings
                {
					DamageApply = new Dictionary<string, entityConfig>()
				},	 			 
							
					Version = Version
            };
        }

        protected override void SaveConfig() => Config.WriteObject(configData, true);

        private void UpdateConfigValues()
        {
            PrintWarning("Config update detected! Updating config values...");

            ConfigData baseConfig = GetBaseConfig();

            if (configData.Version < new VersionNumber(1, 0, 4))
                configData = baseConfig;

            configData.Version = Version;
            PrintWarning("Config update completed!");
        }
        #endregion

		private void OnServerInitialized()
        {
			permission.RegisterPermission("chainsaw.use", this);
			if (configData.settings.DamageApply.Count <= 0)
			{
				configData.settings.DamageApply.Add("door.hinged.wood" , new entityConfig() { damage = new Dictionary<string, int>(), toolDamage = new Dictionary<string, float>(), skinID = 0} );
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("None", 10);
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("Twigs", 0);
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("Wood", 10);
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("Stone", 20);
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("Metal", 30);
				configData.settings.DamageApply["door.hinged.wood"].damage.Add("TopTier", 40);				
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("None", 3);
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("Twigs", 3);
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("Wood", 2);
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("Stone", 1);
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("Metal", 0.5f);
				configData.settings.DamageApply["door.hinged.wood"].toolDamage.Add("TopTier", 0.1f);
				
				
				configData.settings.DamageApply.Add("wall" , new entityConfig() { damage = new Dictionary<string, int>(), toolDamage = new Dictionary<string, float>(), skinID = 0} );
				configData.settings.DamageApply["wall"].damage.Add("None", 10);
				configData.settings.DamageApply["wall"].damage.Add("Twigs", 0);
				configData.settings.DamageApply["wall"].damage.Add("Wood", 10);
				configData.settings.DamageApply["wall"].damage.Add("Stone", 20);
				configData.settings.DamageApply["wall"].damage.Add("Metal", 30);
				configData.settings.DamageApply["wall"].damage.Add("TopTier", 40);
				configData.settings.DamageApply["wall"].toolDamage.Add("None", 3f);
				configData.settings.DamageApply["wall"].toolDamage.Add("Twigs", 3f);
				configData.settings.DamageApply["wall"].toolDamage.Add("Wood", 2f);
				configData.settings.DamageApply["wall"].toolDamage.Add("Stone", 1f);
				configData.settings.DamageApply["wall"].toolDamage.Add("Metal", 0.5f);
				configData.settings.DamageApply["wall"].toolDamage.Add("TopTier", 0.1f);				
				SaveConfig();
			}
		}
		
		private void OnPlayerAttack(BasePlayer player, HitInfo info)
        {
			if (!permission.UserHasPermission(player.UserIDString, "chainsaw.use")) return;
			if (player == null || info == null || info.Weapon == null || info.HitEntity == null) return;
			string infoName = info.HitEntity.ShortPrefabName;
			if (info.Weapon.name.ToLower().Contains("chain"))
			{
				//Puts(infoName);
				if (configData.settings.DamageApply.ContainsKey(infoName))
				{
					if (configData.settings.DamageApply[infoName].skinID != 0 && info.Weapon.skinID != configData.settings.DamageApply[infoName].skinID) return;
					doDamage(info.HitEntity, info.Weapon, infoName);					
				}
			}
		}
		
		private void doDamage(BaseEntity entity, AttackEntity saw, string config)
		{
			if (entity == null || !configData.settings.DamageApply.ContainsKey(config)) return;

			HitInfo nullHit = new HitInfo();
			if (entity is BuildingBlock)
			{
				string grade = getGrade(entity as BuildingBlock);
				int totalToDo = configData.settings.DamageApply[config].damage[grade];
				if (totalToDo == 0) return;
				nullHit.damageTypes.Add(Rust.DamageType.Blunt, totalToDo);
				float damage = configData.settings.DamageApply[config].toolDamage[grade];
				if (damage > 0)
				{
					Item theSaw = saw.GetItem();
						if (theSaw != null && theSaw.hasCondition)
						   theSaw.RepairCondition(damage);
				}
			}
			else 
			{	
				int totalToDo = configData.settings.DamageApply[config].damage["None"];
				if (totalToDo == 0) return;
				nullHit.damageTypes.Add(Rust.DamageType.Blunt, totalToDo);
				float damage = configData.settings.DamageApply[config].toolDamage["None"];
				if (damage > 0)
				{
					Item theSaw = saw.GetItem();
						if (theSaw != null && theSaw.hasCondition)
						   theSaw.RepairCondition(damage);
				}
			}
			nullHit.Weapon = saw;
			entity.OnAttacked(nullHit);
		}
		
		private string getGrade(BuildingBlock block)
		{
			int grade = (int)block.grade;
			if (grade != null)
			{
				if (grade == 5)
					return GetGrades[-1];
				else return GetGrades[grade];
			}
			
			return "None";
		}
		
	}
}

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