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

FREE Teams : 1.0.3 1.0.3

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

namespace Oxide.Plugins
{
    [Info("Teams", "https://topplugin.ru / https://discord.com/invite/5DPTsRmd3G", "1.0.3")]
    public class Teams : RustPlugin
    {
        #region Вар
        List<ulong> enableDamage = new List<ulong>();
        List<ulong> disableMessage = new List<ulong>();
        #endregion

        #region Команды
        [ChatCommand("ff")]
        void cmdChatDamage(BasePlayer player, string command, string[] args)
        {
			if (args.Length == 0)
            {
                SendReply(player, "Используйте:\n <color=#ee3e61>/ff on</color> - включить урон по союзникам\n <color=#ee3e61>/ff off</color> - выключить урон по союзникам");
                return;
            }
            if (args[0].ToLower() == "on")
            {
                if (enableDamage.Contains(player.userID))
                {
                    SendReply(player, "У вас уже <color=#ee3e61>включен</color> урон по союзникам!");
                    return;
                }
                enableDamage.Add(player.userID);
                SendReply(player, "Вы <color=#ee3e61>включили</color> урон по союзникам!");
                return;
            }
            if (args[0].ToLower() == "off")
            {
                if (!enableDamage.Contains(player.userID))
                {
                    SendReply(player, "У вас уже <color=#ee3e61>выключен</color> урон по союзникам!");
                    return;
                }
                enableDamage.Remove(player.userID);
                SendReply(player, "Вы <color=#ee3e61>выключили</color> урон по союзникам!");
                return;
            }

            SendReply(player, "Используйте:\n<color=#ee3e61>/ff on</color> - включить урон по союзникам\n<color=#ee3e61>/ff off</color> - выключить урон по союзникам");
        }

        [ChatCommand("team")]
        void cmdChatFriends(BasePlayer player, string command, string[] args)
        {
			if (args == null || args.Length <= 0 || args.Length == 1 && args[0].ToLower() != "accept" && args[0].ToLower() != "cancel")
			{
                SendReply(player, "Используйте:\n<color=#ee3e61>/team add ник игрока</color> - отправить запрос игроку\n<color=#ee3e61>/team remove ник игрока</color> - выгнать игрока из команды");
                return;
            }

			var playerTeam = API_GetPlayerTeam(player);
			switch (args[0].ToLower())
            {
                case "add":
				    if (playerTeam == null)
                    {
                        SendReply(player, "У вас нету команды, сначала создайте её!\n<size=12>Создать её можно в левом нижнем углу инвентаря</size>");
                        return;
                    }

                    if (playerTeam.GetLeader() != player)
                    {
                        SendReply(player, "Вы не лидер этой команды, вы не можете приглашать игроков!");
                        return;
                    }

                    var target = FindBasePlayer(args[1]);
                    if (target == null)
                    {
                        SendReply(player, $"Игрок не найден!");
                        return;
                    }

                    if (target == player)
                    {
                        SendReply(player, "Вы не можете добавить себя в команду!");
                        return;
                    }

                    var targetTeam = API_GetPlayerTeam(target);
                    if (targetTeam != null)
                    {
                        SendReply(player, $"Игрок <color=#ee3e61>{target.displayName}</color> уже состоит в команде!");
                        return;
                    }
                    playerTeam.SendInvite(target);

                    SendReply(player, $"Вы успешно пригласили игрока <color=#ee3e61>{target.displayName}</color> в свою команду!");
					SendReply(target, $"Игрок <color=#ee3e61>{player.displayName}</color> пригласил вас в команду\nПримите приглашение в инвентаре!");
                    break;
				case "remove":
				    var playerArg2 = args[1];
                    BasePlayer target2 = BasePlayer.Find(playerArg2);
				    if (target2 == null)
					{
						SendReply(player, $"Игрока с именем <color=#ee3e61>{playerArg2}</color> нет в вашей команде!");
						return;
					}
					if (target2 == player)
                    {
						SendReply(player, "Вы не можете выгнать себя из команды!");
						return;
					}
					if (playerTeam == null)
				    {
				        SendReply(player, "У вас нету команды, сначала создайте её!\n<size=12>Создать её можно в левом нижнем углу инвентаря</size>");
				        return;
				    }
					if (playerTeam.GetLeader() != player)
				    {
				        SendReply(player, "Вы не лидер этой команды, вы не можете выгонять игроков!");
				        return;
				    }
                    playerTeam.RemovePlayer(target2.userID);
                    SendReply(player, $"Вы успешно выгнали игрока <color=#ee3e61>{target2.displayName}</color> из вашей команды!");
					SendReply(target2, $"Игрок <color=#ee3e61>{player.displayName}</color> выгнал вас из команды!");
				    break;
            }
        }
		#endregion

		#region Хуки

		void OnServerInitialized() 
		{
            PrintWarning("\n-----------------------------\n" +
            "     Author - https://topplugin.ru/\n" +
            "     VK - https://vk.com/rustnastroika\n" +
            "     Discord - https://discord.com/invite/5DPTsRmd3G\n" +
            "-----------------------------");
            rust.RunServerCommand("maxteamsize 228");
		}

        object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            if (!(entity is BasePlayer) || info?.InitiatorPlayer == null || info?.InitiatorPlayer.GetComponent<NPCPlayer>() != null || info.damageTypes.GetMajorityDamageType() == DamageType.Suicide)
                return null;

            if (info.InitiatorPlayer == entity as BasePlayer)
                return null;
            if (API_AreTeamMates(entity.GetComponent<BasePlayer>(), info.InitiatorPlayer) && !enableDamage.Contains(info.InitiatorPlayer.userID))
            {
                if (!disableMessage.Contains(info.InitiatorPlayer.userID))
                {
                    disableMessage.Add(info.InitiatorPlayer.userID);
                    SendReply(info.InitiatorPlayer, "Вы не можете нанести урон своему другу!");
                    timer.Once(1, () =>
                    {
                        if (disableMessage.Contains(info.InitiatorPlayer.userID))
                            disableMessage.Remove(info.InitiatorPlayer.userID);
                    });
                }
                info.damageTypes.ScaleAll(0);
                return false;
            }

            return null;
        }
        #endregion
        
        #region Авторизация
        object CanUseLockedEntity(BasePlayer player, BaseLock @lock)
        {
            if (player.currentTeam == 0) return null;
            if (!(@lock is CodeLock) || @lock.GetParentEntity().OwnerID <= 0) return null;
            if (@lock.GetParentEntity().OwnerID == player.userID) return null;
            if (ApiIsFriend(@lock.GetParentEntity().OwnerID, player.userID)) return true;
            return null;
        }

        /*object OnTurretTarget(AutoTurret turret, BaseCombatEntity target)
        {
            var player = (BasePlayer)target;
            if (player.currentTeam == 0) return null;
            if (!(target is BasePlayer) || turret.OwnerID <= 0) return null;
            if (turret.IsAuthed(player)) return null;
            if (API_AreTeamMates(turret.OwnerID, player.userID)) return true;
            turret.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
            return null;
        }*/
        #endregion

        #region Апи
        RelationshipManager.PlayerTeam API_GetPlayerTeam(BasePlayer player)
        {
            RelationshipManager.PlayerTeam playerTeam = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);

            return playerTeam ?? null;
        }

        bool API_AreTeamMates(BasePlayer player, BasePlayer target)
        {
            if (player.currentTeam == 0 || target.currentTeam == 0)
                return false;

            return player.currentTeam == target.currentTeam;
        }

        bool API_AreTeamMates(ulong playerId, ulong targetId)
        {
            if (!RelationshipManager.ServerInstance.cachedPlayers.ContainsKey(playerId))
                return false;

            ulong teamId1 = RelationshipManager.ServerInstance.playerToTeam[playerId].teamID;
            if (!RelationshipManager.ServerInstance.cachedPlayers.ContainsKey(targetId))
                return false;
            
            ulong teamId2 = RelationshipManager.ServerInstance.playerToTeam[targetId].teamID;
            
            return teamId2 == teamId1;
        }
        
        bool ApiIsFriend(ulong playerId, ulong targetId)
        {
            if (!RelationshipManager.ServerInstance.cachedPlayers.ContainsKey(playerId))
                return false;
            
            ulong teamId1;
            ulong teamId2;
            
            teamId1 = RelationshipManager.ServerInstance.cachedPlayers[playerId].currentTeam;
            
            if (!RelationshipManager.ServerInstance.cachedPlayers.ContainsKey(targetId))
                return false;
            teamId2 = RelationshipManager.ServerInstance.cachedPlayers[targetId].currentTeam;

            if ((teamId1 == 0) && teamId2 == 0) return false;
            
            bool success = false;

            if (teamId1 == teamId2) success = true;
            else success = false;

            return success;
        }
        #endregion

        #region Хелпер
        BasePlayer FindBasePlayer(string nameOrUserId)
        {
            nameOrUserId = nameOrUserId.ToLower();
            foreach (var player in BasePlayer.activePlayerList)
            {
                if (player.displayName.ToLower().Contains(nameOrUserId) || player.UserIDString == nameOrUserId) return player;
            }
            foreach (var player in BasePlayer.sleepingPlayerList)
            {
                if (player.displayName.ToLower().Contains(nameOrUserId) || player.UserIDString == nameOrUserId) return player;
            }
            return default(BasePlayer);
        }
        #endregion
    }
}

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