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

FREE NetGroupSwitch : 0.0.4 0.0.4

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

namespace Oxide.Plugins
{
    [Info("NetGroupSwitch", "Pho3niX90", "0.0.4")]
    [Description("")]
    public class NetGroupSwitch : RustPlugin
    {
        Dictionary<uint, string> netIds = new Dictionary<uint, string>();
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            if (HasDim(player)) netIds.Remove(player.net.ID);
        }
        void OnPlayerConnected(BasePlayer player) {
            SwitchDim(player, string.Empty);
        }

        [ChatCommand("d")]
        void Disappear(BasePlayer player, string command, string[] args) {
            string dimension = args.Length > 0 ? args[0].ToString() : string.Empty;
            SwitchDim(player, dimension);
        }

        void UpdatePlayers() {
            foreach (BasePlayer target in BasePlayer.activePlayerList) {
                UpdateConnections(target);
            }
        }

        void UpdateConnections(BasePlayer player) {
            if (Net.sv.write.Start()) {
                Net.sv.write.PacketID(Message.Type.EntityDestroy);
                Net.sv.write.EntityID(player.net.ID);
                Net.sv.write.UInt8((byte)BaseNetworkable.DestroyMode.None);
                Net.sv.write.Send(new SendInfo(player.net.group.subscribers.Where(x => x.userid != player.userID && !GetDim(x.player as BasePlayer).Equals(GetDim(player))).ToList()));
            }
            player.SendNetworkUpdateImmediate(true);
        }

        private object CanNetworkTo(BasePlayer player, BasePlayer target) {
            if (player == null || target == null) return null;
            if (GetDim(target).Equals(GetDim(player))) return null;
            return false;
        }

        #region Dimension Helpers
        private void SwitchDim(BasePlayer player, string dimension) {
            if (player == null) return;
            Puts($"Player `{player.displayName}` has moved to dimension `{dimension}`");
            if (netIds.ContainsKey(player.net.ID)) {
                netIds[player.net.ID] = dimension;
            } else if (!dimension.IsNullOrEmpty()) {
                netIds.Add(player.net.ID, dimension);
            }
            UpdatePlayers();
        }

        object CanNetworkTo(HeldEntity entity, BasePlayer target) {
            return entity == null ? null : CanNetworkTo(entity.GetOwnerPlayer(), target);
        }
        object CanNetworkTo(BaseProjectile entity, BasePlayer target) {
            return entity == null ? null : CanNetworkTo(entity.GetOwnerPlayer(), target);
        }
        object CanNetworkTo(Projectile entity, BasePlayer target) {
            return entity == null ? null : CanNetworkTo(entity.owner, target);
        }

        string GetDim(BaseEntity ent) => netIds.ContainsKey(ent.net.ID) ? netIds[ent.net.ID] : string.Empty;
        bool HasDim(BaseEntity ent) => netIds.ContainsKey(ent.net.ID) && !netIds[ent.net.ID].IsNullOrEmpty();
        #endregion
    }
}

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