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

FREE RankMe : 0.0.1 0.0.1

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

namespace Oxide.Plugins
{
    [Info("RankMe", "NameTAG", "0.0.1")]
	//
    class RankMe : RustPlugin
    {	
        [PluginReference]
        private Plugin Friends,	TimedItemBlocker;
		
		//	Создаем чат команды
		[ChatCommand("stats")]
        void TurboRankCommand(BasePlayer player, string command)
        {
			var TopPlayer = (from x in Tops where x.UID == player.UserIDString select x);
			PrintToChat(player, "<size=14><color=#00FF00>Статистика игрока</color></size>");
			foreach (var top in TopPlayer)
            { 
				PrintToChat(player, $"<size=14> <color=#FFFFFF>Убито Людей</color> <color=#FF0000>{top.УбийствPVP}</color></size>",null,"0");
				PrintToChat(player, $"<size=14> <color=#FFFFFF>Убито в голову</color> <color=#FF0000>{top.Хедшоты}</color></size>", null, "0");
                PrintToChat(player, $"<size=14> <color=#FFFFFF>Смертей</color> <color=#FF0000>{top.Смертей}</color></size>", null, "0");
                PrintToChat(player, $"<size=14> <color=#FFFFFF>Убито Животных</color> <color=#FF0000>{top.УбийствЖивотных}</color></size>", null, "0");
                PrintToChat(player, $"<size=14> <color=#FFFFFF>Добыто дерево</color> <color=#FF0000>{top.Дерево}</color></size>",null,"0");
                PrintToChat(player, $"<size=14> <color=#FFFFFF>Добыто камня</color> <color=#FF0000>{top.Камень}</color></size>", null, "0");
            }
			return;
		}
		
		void OnEntityDeath(BaseCombatEntity victim, HitInfo info)
		{

			if (victim == null || info == null) return;
			
            // Смерть Животных
            if (victim is BaseNpc)
            {
                if (!(bool)victim?.name?.Contains("agents/")) return;
                
                var hunter = info.InitiatorPlayer;
            
                if (hunter == null) return;
            
                TopData con1 = (from x in Tops where x.UID == hunter.UserIDString select x).FirstOrDefault();

                if (con1 == null) return;

                con1.УбийствЖивотных +=1;
            }
            //  Смерть Игрока
            else if (victim is BasePlayer)
            {
                var playerV = victim as BasePlayer;
                
                if (playerV == null || playerV.IsSleeping()) return;
                
                TopData con2 = (from x in Tops where x.UID == playerV.UserIDString select x).FirstOrDefault();
            
                if (con2 == null) return;
                
                con2.Смертей += 1;
                
                var initiator = info.InitiatorPlayer;
                
                if (initiator == null || initiator == playerV /*|| AreFriendsAPIFriend(initiator.UserIDString, playerV.UserIDString)*/) return;
                
                TopData con3 = (from x in Tops where x.UID == initiator.UserIDString select x).FirstOrDefault();
                
                if (con3 == null) return;
                
                //	Считаем убийства игроков / хедшоты / дистанцию
                        
                con3.УбийствPVP += 1;
					
                var distance = Vector3.Distance(initiator.transform.position, playerV.transform.position);
                        
                if ((int)distance > con3.Дистанция)
                {
                    con3.Дистанция = (int)distance;
                }
            
                if (info.isHeadshot)
                    con3.Хедшоты += 1;
            }
		}
        
        private bool AreFriendsAPIFriend(string playerId, string friendId)
        {
            try
            {
                bool result = (bool)Friends?.CallHook("AreFriends", playerId, friendId);
                return result;
            }
            catch
            {
                return false;
            }
        }
		
		//	Считаем взрывчатку
		void OnExplosiveThrown(BasePlayer player, BaseEntity entity)
		{
			if (TimedItemBlocker) return;
            
            if (entity.ShortPrefabName == "survey_charge.deployed" || entity.ShortPrefabName == "grenade.smoke.deployed") return;

			TopData con = (from x in Tops where x.UID == player.UserIDString select x).FirstOrDefault();
			con.ВзрывчатокИспользовано += 1;
			//Saved();
		}
		
		//	Считаем ракеты
		void OnRocketLaunched(BasePlayer player, BaseEntity entity)
		{
            if (TimedItemBlocker) return;
			
			TopData con = (from x in Tops where x.UID == player.UserIDString select x).FirstOrDefault();
			con.РакетВыпущено += 1;
			//Saved();
		}

		//	Считаем строительство
        void OnEntityBuilt(Planner plan, GameObject go)
        {
            var player = plan.GetOwnerPlayer();
            
			if (player == null) return;
            
			TopData con = (from x in Tops where x.UID == player.UserIDString select x).FirstOrDefault();
			con.Построек += 1;
			//Saved();
        }
		
		//	Дерево / Камень
		void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
		{
            var player = entity.ToPlayer();
            if (player == null || dispenser == null || item == null) return;
			
			TopData con = (from x in Tops where x.UID == player.UserIDString select x).FirstOrDefault();

            if (dispenser.gatherType == ResourceDispenser.GatherType.Tree)
			{
                con.Дерево += item.amount;
				//Saved();
				return;
			}
            else if (dispenser.gatherType == ResourceDispenser.GatherType.Ore)
			{
                con.Камень += item.amount;
				//Saved();
				return;
			}
		}
		
		void CreateInfo(BasePlayer player)
        {
			//if (player == null) return;
			Tops.Add(new TopData((string)player.displayName, player.UserIDString, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
			//Saved();
		}
		
		//	Добавляем игрока в Базу Данных
		void OnPlayerInit(BasePlayer player)
		{
			//if (player == null) return;
			
			var check = (from x in Tops where x.UID == player.UserIDString select x).Count(); 
			if (check == 0)
				CreateInfo(player);
		}
		
		//	Загружаем TopData.json и проверяем есть ли все игроки в Базе Данных
		void Loaded()
        { 
			int place;
			int rr = 0;
			int r;
			
			Tops = Interface.Oxide.DataFileSystem.ReadObject<HashSet<TopData>>("TopData"); 
			foreach (var player in BasePlayer.activePlayerList)
			{	
				var check = (from x in Tops where x.UID == player.UserIDString select x).Count(); 
				if(check==0)CreateInfo(player);
			}
			//	Показываем в чат каждые 10мин трех лучших из одной случайной категории
			timer.Repeat (300, 0, ()=>
			{	
				place = 0;
				//	Выбираем случайную категорию
				r = Core.Random.Range(1,10);
				//	антиповтор	//////////////////////
				if (r == rr)
				{
					if (r >= 9)
					{
						r--;
					}
					else
					{
						r++;
					}
				}
				//////////////////////////////////////
				if(r==1)
				{
					rr = 1;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.УбийствPVP).Take(5);
					PrintToChat($"<size=14>     <color=#00FF00>УБИЙЦЫ</color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.УбийствPVP}</color></size>");
						Puts($"[ТОП Убийца] {top.Ник}  [{top.УбийствPVP}]");
					}
				}
				else if(r==2)
				{
					rr = 2;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.УбийствЖивотных).Take(5);
					PrintToChat($"<size=14>     <color=#00FF00>ОХОТНИКИ</color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.УбийствЖивотных}</color></size>");
						Puts($"[ТОП Охотник] {top.Ник}  [{top.УбийствЖивотных}]");
					}
				}
				else if(r==3)
				{
					rr = 3;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.Дерево).Take(5);	
					PrintToChat($"<size=14>     <color=#00FF00>ДРОВОСЕКИ </color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.Дерево}</color></size>");
						Puts($"[ТОП Дровосек] {top.Ник}  [{top.Дерево}]");
					}
				}
				else if(r==4)
				{
					rr = 4;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.Смертей).Take(5);
					PrintToChat($"<size=14>     <color=#00FF00>СМЕРТНИКИ</color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.Смертей}</color></size>");
						Puts($"[ТОП Смертник] {top.Ник}  [{top.Смертей}]");
					}
				}
				else if(r==5)
				{
					rr = 5;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.Хедшоты).Take(5);
					PrintToChat($"<size=14>     <color=#00FF00>ГОЛОВОСТРЕЛЫ</color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.Хедшоты}</color></size>");
						Puts($"[ТОП Головострел] {top.Ник}  [{top.Хедшоты}]");
					}
				}
				else if(r==6)
				{
					rr = 6;
					var TopPlayer = (from x in Tops select x).OrderByDescending(x => x.Камень).Take(5);
					PrintToChat($"<size=14>     <color=#00FF00>ШАХТЕРЫ</color></size>");
					foreach (var top in TopPlayer)
					{
						place += 1;
						PrintToChat($"<size=14><color=#FFFFFF>{place}.</color>  <color=#FFFFFF>{top.Ник}</color> <color=#00FF00>{top.Камень}</color></size>");
						Puts($"[ТОП Шахтер] {top.Ник}  [{top.Камень}]");
					}
				}
			}); 
		}
		
		//	Сохраняем инфу в TopData
		
        Timer saveDataBatchedTimer = null;

        // Collects all save calls within delay and saves once there are no more updates.void Saved(float delay = 3f)
        {
            if (saveDataBatchedTimer == null)
                saveDataBatchedTimer = timer.Once(delay, saveDataImmediate);
            else
                saveDataBatchedTimer.Reset(delay);
        }
		
        void Unload()
        {
			saveDataImmediate();
        }
		
        void OnServerShutdown()
        {
			saveDataImmediate();
        }

        void saveDataImmediate()
        {
            if (saveDataBatchedTimer != null)
            {
                saveDataBatchedTimer.DestroyToPool();
                saveDataBatchedTimer = null;
            }
            Interface.Oxide.DataFileSystem.WriteObject("TopData", Tops);
        }
		
		//	Вместо list используем hashset -> работа с большим количеством данных будет быстрее
		public HashSet<TopData> Tops = new HashSet<TopData>();
        public class TopData
        {
            public TopData(string Ник, string UID, int РакетВыпущено, int УбийствPVP, int Хедшоты, int Дистанция, int ВзрывчатокИспользовано, int УбийствЖивотных, int Смертей, int Дерево, int Камень, int Построек )
            {
                this.Ник = Ник;
                this.UID = UID;
				this.РакетВыпущено = РакетВыпущено;
				this.УбийствPVP = УбийствPVP;
				this.Хедшоты = Хедшоты;
				this.Дистанция = Дистанция;
                this.ВзрывчатокИспользовано = ВзрывчатокИспользовано;
				this.УбийствЖивотных = УбийствЖивотных; 
				this.Смертей = Смертей;
				this.Камень = Камень;
				this.Дерево = Дерево;
				this.Построек = Построек;
            }
			
			public string Ник { get; set; }
			public string UID { get; set; }
            public int РакетВыпущено { get; set; }
            public int УбийствPVP { get; set; }
			public int Хедшоты { get; set; }
			public int Дистанция { get; set; }
			public int ВзрывчатокИспользовано { get; set; }
			public int УбийствЖивотных { get; set; }
			public int Смертей { get; set; }
			public int Камень { get; set; }
			public int Дерево { get; set; }
			public int Построек { get; set; }
        }
    }
}

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