예제 #1
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            switch (args.Length)
            {
            case 1:
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                DropKit(src, args[0], src.ToPlayer().Position);
                EssLang.Send(src, "DROPKIT_SENDER", args[0]);
                break;

            case 2:
                if (!src.HasPermission($"{Permission}.other"))
                {
                    return(CommandResult.LangError("COMMAND_NO_PERMISSION"));
                }

                if (!UPlayer.TryGet(args[1].ToString(), out var player))
                {
                    return(CommandResult.LangError("PLAYER_NOT_FOUND", args[1]));
                }

                DropKit(src, args[0], player.Position);
                EssLang.Send(src, "DROPKIT_PLAYER", args[0], player.DisplayName);
                break;

            case 4:
                var pos = args.GetVector3(1);

                if (pos.HasValue)
                {
                    DropKit(src, args[0], pos.Value);
                    EssLang.Send(src, "DROPKIT_LOCATION", args[1], args[2], args[3]);
                }
                else
                {
                    return(CommandResult.LangError("INVALID_COORDS", args[1], args[2], args[3]));
                }
                break;

            default:
                return(CommandResult.ShowUsage());
            }

            return(CommandResult.Success());
        }
예제 #2
0
        private void HandleCost(CommandPosExecuteEvent e, CommandOptions.CommandEntry commandOptions)
        {
            // Make sure it has an EconomyProvider and check if the player can bypass the cost
            if (!UEssentials.EconomyProvider.IsPresent || e.Source.HasPermission("essentials.bypass.commandcost"))
            {
                return;
            }
            var commandCost = GetCommandCost(commandOptions, e.Source.ToPlayer());

            if (commandCost > 0)
            {
                UEssentials.EconomyProvider.Value.Withdraw(e.Source.ToPlayer(), commandCost);
                EssLang.Send(e.Source, "COMMAND_PAID", commandCost, UEssentials.EconomyProvider.Value.CurrencySymbol);
            }
        }
예제 #3
0
        private void HomePlayerMove(UnturnedPlayer player, Vector3 newPosition)
        {
            if (!UEssentials.Config.Home.CancelTeleportWhenMove || !CommandHome.Delay.ContainsKey(player.CSteamID.m_SteamID))
            {
                return;
            }

            CommandHome.Delay[player.CSteamID.m_SteamID].Cancel();
            CommandHome.Delay.Remove(player.CSteamID.m_SteamID);

            UPlayer.TryGet(player, p =>
            {
                EssLang.Send(p, "TELEPORT_CANCELLED_MOVED");
            });
        }
예제 #4
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player   = src.ToPlayer();
            var playerId = player.CSteamId;

            if (player.Stance == EPlayerStance.DRIVING ||
                player.Stance == EPlayerStance.SITTING)
            {
                return(CommandResult.LangError("CANNOT_TELEPORT_DRIVING"));
            }

            if (!BarricadeManager.tryGetBed(player.CSteamId, out var bedPosition, out var bedAngle))
            {
                return(CommandResult.LangError("WITHOUT_BED"));
            }

            if (Delay.ContainsKey(player.CSteamId.m_SteamID))
            {
                return(CommandResult.LangError("ALREADY_WAITING"));
            }

            var homeCommand = UEssentials.Config.Home;
            var delay       = homeCommand.TeleportDelay;

            if (player.HasPermission("essentials.bypass.homecooldown"))
            {
                delay = 0;
            }

            if (delay > 0)
            {
                EssLang.Send(src, "TELEPORT_DELAY", TimeUtil.FormatSeconds((uint)delay));
            }

            var task = Task.Create()
                       .Delay(TimeSpan.FromSeconds(delay))
                       .Action(t => {
                Delay.Remove(playerId.m_SteamID);
                bedPosition.y += .5f;
                player.UnturnedPlayer.teleportToLocation(bedPosition, MeasurementTool.byteToAngle(bedAngle));
                EssLang.Send(src, "TELEPORTED_BED");
            })
                       .Submit();

            Delay.Add(playerId.m_SteamID, task);

            return(CommandResult.Success());
        }
예제 #5
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();

            if (!player.Metadata.Has("back_pos"))
            {
                return(CommandResult.Lang("NOT_DIED_YET"));
            }

            var backPosition = player.Metadata.Get <Vector3>("back_pos");

            src.ToPlayer().Teleport(backPosition);
            EssLang.Send(src, "RETURNED");

            return(CommandResult.Success());
        }
예제 #6
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();

            if (!player.HasMetadata(Consts.BACK_METADATA_KEY))
            {
                return(CommandResult.Lang("NOT_DIED_YET"));
            }

            var backPosition = player.GetMetadata <Vector3>(Consts.BACK_METADATA_KEY);

            src.ToPlayer().Teleport(backPosition);
            EssLang.Send(src, "RETURNED");

            return(CommandResult.Success());
        }
예제 #7
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();

            if (args.Length == 0 || args.Length > 1)
            {
                return(CommandResult.ShowUsage());
            }

            if (!WarpModule.Instance.WarpManager.Contains(args[0].ToString()))
            {
                return(CommandResult.Lang("WARP_NOT_EXIST", args[0]));
            }

            if (!player.HasPermission($"essentials.warp.{args[0]}"))
            {
                return(CommandResult.Lang("WARP_NO_PERMISSION", args[0]));
            }

            if (player.RocketPlayer.Stance == EPlayerStance.DRIVING ||
                player.RocketPlayer.Stance == EPlayerStance.SITTING)
            {
                return(CommandResult.Lang("CANNOT_TELEPORT_DRIVING"));
            }

            var dest     = WarpModule.Instance.WarpManager.GetByName(args[0].ToString());
            var cooldown = UEssentials.Config.Warp.TeleportDelay;

            if (cooldown > 0 && !player.HasPermission("essentials.bypass.warpcooldown"))
            {
                EssLang.Send(src, "WARP_COOLDOWN", cooldown);
            }

            var task = Task.Create()
                       .Id($"Warp teleport '{player.DisplayName}'")
                       .Delay(player.HasPermission("essentials.bypass.warpcooldown") ? 0 : cooldown * 1000)
                       .Action(t => {
                Delay.Remove(player.CSteamId.m_SteamID);
                player.Teleport(dest.Location, dest.Rotation);
                EssLang.Send(src, "WARP_TELEPORTED", args[0]);
            })
                       .Submit();

            Delay.Add(player.CSteamId.m_SteamID, task);

            return(CommandResult.Success());
        }
예제 #8
0
            /// <summary>
            /// Start the poll
            /// </summary>
            public void Start()
            {
                EssLang.Broadcast("POLL_STARTED", Name, Description);

                var thiz = this;

                lock (Polls) Polls.Add(Name, thiz);

                if (Duration > 0)
                {
                    Tasks.New(task => {
                        lock (Polls) {
                            if (!Polls.ContainsKey(thiz.Name))
                            {
                                return;
                            }

                            thiz.Stop();
                        }
                    }).Delay(Duration * 1000).Go();
                }

                if (!UEssentials.Config.EnablePollRunningMessage)
                {
                    return;
                }

                var interval = UEssentials.Config.PollRunningMessageCooldown * 1000;

                Tasks.New(task => {
                    lock (Polls) {
                        if (!Polls.ContainsKey(thiz.Name))
                        {
                            task.Cancel();
                            return;
                        }

                        EssLang.Broadcast(
                            "POLL_RUNNING",
                            thiz.Name,
                            thiz.Description,
                            thiz.YesVotes,
                            thiz.NoVotes
                            );
                    }
                }).Interval(interval).Delay(interval).Go();
            }
예제 #9
0
        private void OnCommandPreExecuted(CommandPreExecuteEvent e)
        {
            if (e.Source.IsConsole || e.Source.HasPermission("essentials.bypass.commandcost"))
            {
                return;
            }

            if (_cachedEconomyProvider == null)
            {
                _cachedEconomyProvider = UEssentials.EconomyProvider;
            }

            if (_cachedEconomyProvider.IsAbsent)
            {
                /*
                 *  If economy hook is not present, this "handler" will be unregistered.
                 */
                EssCore.Instance.EventManager.Unregister(GetType(), nameof(OnCommandPreExecuted));
                EssCore.Instance.EventManager.Unregister(GetType(), nameof(OnCommandPosExecuted));
            }

            var commands = EssCore.Instance.CommandsConfig.Commands;

            if (!commands.ContainsKey(e.Command.Name))
            {
                return;
            }

            var cost = commands[e.Command.Name].Cost;

            if (cost <= 0)
            {
                return;
            }

            /*
             *  Check if player has sufficient money to use this command.
             */
            if (_cachedEconomyProvider.Value.Has(e.Source.ToPlayer(), cost))
            {
                return;
            }

            EssLang.Send(e.Source, "COMMAND_NO_MONEY", cost, _cachedEconomyProvider.Value.Currency);
            e.Cancelled = true;
        }
예제 #10
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.IsEmpty)
            {
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                GiveMaxSkills(src.ToPlayer(), false);
            }
            else
            {
                if (args.Length < 2 && src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                if (!args[0].IsBool)
                {
                    return(CommandResult.Lang("INVALID_BOOLEAN", args[0]));
                }

                if (args.Length == 2 && !src.HasPermission(Permission + ".other"))
                {
                    return(CommandResult.Lang("COMMAND_NO_PERMISSION"));
                }

                var overpower    = args[0].ToBool;
                var targetPlayer = args.Length == 2 ? args[1].ToPlayer : src.ToPlayer();

                if (targetPlayer == null)
                {
                    return(CommandResult.Lang("PLAYER_NOT_FOUND", args[1]));
                }

                GiveMaxSkills(targetPlayer, overpower);

                if (src.IsConsole || src.ToPlayer() != targetPlayer)
                {
                    EssLang.Send(src, "MAX_SKILLS_TARGET", targetPlayer.DisplayName);
                }
            }

            return(CommandResult.Success());
        }
예제 #11
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player   = src.ToPlayer();
            var playerId = player.CSteamId;

            Vector3 position;
            byte    angle;

            if (player.RocketPlayer.Stance == EPlayerStance.DRIVING ||
                player.RocketPlayer.Stance == EPlayerStance.SITTING)
            {
                return(CommandResult.Lang("CANNOT_TELEPORT_DRIVING"));
            }

            if (!BarricadeManager.tryGetBed(player.CSteamId, out position, out angle))
            {
                return(CommandResult.Lang("WITHOUT_BED"));
            }

            var homeCommand = UEssentials.Config.Home;
            var delay       = homeCommand.TeleportDelay;

            if (player.HasPermission("essentials.bypass.homecooldown"))
            {
                delay = 0;
            }

            if (delay > 0)
            {
                EssLang.Send(src, "TELEPORT_DELAY", TimeUtil.FormatSeconds((uint)delay));
            }

            var task = Task.Create()
                       .Delay(TimeSpan.FromSeconds(delay))
                       .Action(t => {
                Delay.Remove(playerId.m_SteamID);
                player.Teleport(position, angle);
                EssLang.Send(src, "TELEPORTED_BED");
            })
                       .Submit();

            Delay.Add(playerId.m_SteamID, task);

            return(CommandResult.Success());
        }
예제 #12
0
        private CommandResult SpyCommand(ICommandSource src, ICommandArgs args)
        {
            var player   = src.ToPlayer();
            var playerId = player.CSteamId.m_SteamID;

            if (Spies.Contains(playerId))
            {
                Spies.Remove(playerId);
                EssLang.Send(src, "SPY_MODE_OFF");
            }
            else
            {
                Spies.Add(playerId);
                EssLang.Send(src, "SPY_MODE_ON");
            }

            return(CommandResult.Success());
        }
예제 #13
0
        public static void DropKit(ICommandSource src, ICommandArgument kitArg, Vector3 pos)
        {
            var kitManager = KitModule.Instance.KitManager;
            var kitName    = kitArg.ToString();

            if (!kitManager.Contains(kitName))
            {
                EssLang.Send(src, "KIT_NOT_EXIST", kitName);
            }
            else
            {
                var kitItems = kitManager.GetByName(kitName).Items;

                kitItems.Where(i => i is KitItem).Cast <KitItem>().ForEach(i =>
                                                                           ItemManager.dropItem(i.UnturnedItem, pos, true, true, true)
                                                                           );
            }
        }
예제 #14
0
        private CommandResult RefuelGeneratorCommand(ICommandSource src, ICommandArgs args)
        {
            float radius     = 20;
            float percentage = 100;

            if (args.Length > 0)
            {
                if (!args[0].IsFloat)
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[0]));
                }
                if ((radius = args[0].ToFloat) <= 0)
                {
                    return(CommandResult.Lang("MUST_POSITIVE"));
                }
            }
            if (args.Length > 1)
            {
                if (!args[1].IsFloat)
                {
                    return(CommandResult.Lang("INVALID_NUMBER", args[1]));
                }
                if (!args[1].IsInRange(0, 100))
                {
                    return(CommandResult.Lang("NUMBER_BETWEEN", 0, 100));
                }
                percentage = args[1].ToFloat / 100;
            }

            var count     = 0;
            var player    = src.ToPlayer();
            var rayResult = Physics.SphereCastAll(player.Position, radius, Vector3.forward, RayMasks.BARRICADE);

            rayResult
            .Select(r => r.transform.GetComponent <InteractableGenerator>())
            .Where(r => r != null)
            .ForEach(r => {
                BarricadeManager.sendFuel(r.transform, (ushort)Math.Floor(r.capacity * percentage));
                count++;
            });

            EssLang.Send(player, "REFUEL_GENERATOR_REFUELED", count);
            return(CommandResult.Success());
        }
예제 #15
0
        /// <summary>
        /// Give this kit to player
        /// </summary>
        public void GiveTo(UPlayer player)
        {
            var sentInventoryFullMessage = false;

            foreach (var kitItem in Items)
            {
                var added = kitItem.GiveTo(player);

                if (added || sentInventoryFullMessage)
                {
                    continue;
                }

                EssLang.Send(player, "INVENTORY_FULL");
                sentInventoryFullMessage = true;
            }

            EssLang.Send(player, "KIT_GIVEN_RECEIVER", Name);
        }
예제 #16
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.IsEmpty)
            {
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                var currentVeh = src.ToPlayer().CurrentVehicle;

                if (currentVeh != null)
                {
                    VehicleManager.sendVehicleHealth(currentVeh, currentVeh.asset.health);

                    EssLang.Send(src, "VEHICLE_REPAIRED");
                }
                else
                {
                    return(CommandResult.Lang("NOT_IN_VEHICLE"));
                }
            }
            else if (args[0].Equals("all"))
            {
                if (!src.HasPermission($"{Permission}.all"))
                {
                    return(CommandResult.NoPermission($"{Permission}.all"));
                }

                lock (UWorld.Vehicles) {
                    UWorld.Vehicles
                    .WhereNot(veh => veh.isExploded || veh.isUnderwater)
                    .ToList()
                    .ForEach(vehicle => {
                        VehicleManager.sendVehicleHealth(vehicle, vehicle.asset.health);
                    });

                    EssLang.Send(src, "VEHICLE_REPAIRED_ALL");
                }
            }

            return(CommandResult.Success());
        }
예제 #17
0
        /// <summary>
        /// Give this kit to player
        /// </summary>
        public void GiveTo(UPlayer player)
        {
            var onetime = false;

            foreach (var kitItem in Items)
            {
                var added = kitItem.GiveTo(player);

                if (added || onetime)
                {
                    continue;
                }

                EssLang.Send(player, "INVENTORY_FULL"); // TODO: Remove msgs
                onetime = true;
            }

            EssLang.Send(player, "KIT_GIVEN_RECEIVER", Name);
        }
예제 #18
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var warps = (
                from warp in WarpModule.Instance.WarpManager.Warps
                where warp.CanUse(src)
                select warp.Name
                ).ToArray();

            if (warps.Length == 0)
            {
                EssLang.Send(src, "WARP_NONE");
            }
            else
            {
                EssLang.Send(src, "WARP_LIST", string.Join(", ", warps));
            }

            return(CommandResult.Success());
        }
예제 #19
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.IsEmpty)
            {
                return(CommandResult.ShowUsage());
            }

            var km = KitModule.Instance.KitManager;

            if (!km.Contains(args[0].ToString()))
            {
                return(CommandResult.Lang("KIT_NOT_EXIST", args[0]));
            }

            km.Remove(km.GetByName(args[0].ToString()));
            EssLang.Send(src, "DELETED_KIT", args[0]);

            return(CommandResult.Success());
        }
예제 #20
0
        private void OnCommandPreExecuted(CommandPreExecuteEvent e)
        {
            var commandName = e.Command.Name.ToLowerInvariant();

            if (
                e.Source.IsConsole ||
                !EssCore.Instance.CommandOptions.Commands.TryGetValue(commandName, out var commandOptions)
                )
            {
                return;
            }

            // Check cooldown
            if (!e.Source.HasPermission("essentials.bypass.commandcooldown"))
            {
                var playerId = e.Source.ToPlayer().CSteamId.m_SteamID;

                if (
                    CommandCooldowns.ContainsKey(playerId) &&
                    CommandCooldowns[playerId].TryGetValue(commandName, out var nextUse) &&
                    nextUse > DateTime.Now
                    )
                {
                    var diffSec = (uint)(nextUse - DateTime.Now).TotalSeconds;
                    EssLang.Send(e.Source, "COMMAND_COOLDOWN", TimeUtil.FormatSeconds(diffSec));
                    e.Cancelled = true;
                    return;
                }
            }

            // Check if player has money enough to run this command
            if (UEssentials.EconomyProvider.IsPresent && !e.Source.HasPermission("essentials.bypass.commandcost"))
            {
                var cost        = GetCommandCost(commandOptions, e.Source.ToPlayer());
                var ecoProvider = UEssentials.EconomyProvider.Value;

                if (cost > 0 && !ecoProvider.Has(e.Source.ToPlayer(), cost))
                {
                    EssLang.Send(e.Source, "COMMAND_NO_MONEY", cost, ecoProvider.CurrencySymbol);
                    e.Cancelled = true;
                }
            }
        }
예제 #21
0
        private void DeathMessages(UnturnedPlayer player, EDeathCause cause, ELimb limb, CSteamID killer)
        {
            if (!(EssLang.GetEntry($"DEATH_{cause}") is string message))
            {
                return;
            }

            var hasKiller = killer != CSteamID.Nil;
            var arguments = new object[hasKiller ? 3 : 2];
            var color     = ColorUtil.GetColorFromString(ref message);

            arguments[0] = player.CharacterName;
            arguments[1] = EssLang.Translate($"LIMB_{limb}") ?? "?";
            if (hasKiller)
            {
                arguments[2] = UPlayer.From(killer)?.CharacterName ?? "?";
            }

            UServer.Broadcast(string.Format(message, arguments), color);
        }
예제 #22
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var players = new List <UPlayer>(UServer.Players);

            if (players.Count == 0)
            {
                return(CommandResult.Lang("NO_PLAYERS_FOR_KICK"));
            }

            var reason = args.IsEmpty
                ? EssLang.Translate("KICK_NO_SPECIFIED_REASON")
                : args.Join(0);

            players.ForEach(player => {
                player.Kick(reason);
            });

            EssLang.Send(src, "KICKED_ALL", players.Count);

            return(CommandResult.Success());
        }
예제 #23
0
        private CommandResult RespawnVehiclesCommand(ICommandSource src, ICommandArgs args)
        {
            var spawns = LevelVehicles.spawns;

            foreach (var vehicleSpawnpoint in spawns)
            {
                var vehicleId = LevelVehicles.getVehicle(vehicleSpawnpoint);

                if (vehicleId == 0)
                {
                    continue;
                }

                var point = vehicleSpawnpoint.point;
                point.y += 1f;
                VehicleManager.spawnVehicle(vehicleId, point, Quaternion.Euler(0f, vehicleSpawnpoint.angle, 0f));
            }

            EssLang.Send(src, "RESPAWNED_VEHICLES");

            return(CommandResult.Success());
        }
예제 #24
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args[0].Is("*"))
            {
                UServer.Players.ForEach(p => p.Kill());

                EssLang.Send(src, "KILL_ALL");
                return(CommandResult.Success());
            }

            if (!args[0].IsValidPlayerName)
            {
                return(CommandResult.Lang("PLAYER_NOT_FOUND", args[0]));
            }

            var target = args[0].ToPlayer;

            target.Kill();

            EssLang.Send(src, "KILL_PLAYER", target.DisplayName);
            return(CommandResult.Success());
        }
예제 #25
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.Length < 2)
            {
                return(CommandResult.ShowUsage());
            }

            string name;

            if (args[0].Equals(name = "*console*"))
            {
                CommandWindow.input.onInputText(args.Join(1));
            }
            else if (args[0].Equals("*"))
            {
                UServer.Players.ForEach(p => {
                    ChatManager.instance.askChat(p.CSteamId, (byte)EChatMode.GLOBAL, args.Join(1));
                });

                name = "Everyone";
            }
            else
            {
                if (!args[0].IsValidPlayerIdentifier)
                {
                    return(CommandResult.Lang("PLAYER_NOT_FOUND", args[0]));
                }

                var targetPlayer = args[0].ToPlayer;

                ChatManager.instance.askChat(targetPlayer.CSteamId, (byte)EChatMode.GLOBAL, args.Join(1));

                name = targetPlayer.CharacterName;
            }

            EssLang.Send(src, "SUDO_EXECUTED", name, args.Join(1));

            return(CommandResult.Success());
        }
예제 #26
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            if (args.IsEmpty)
            {
                if (src.IsConsole)
                {
                    return(CommandResult.ShowUsage());
                }

                var currentVeh = src.ToPlayer().CurrentVehicle;

                if (currentVeh != null)
                {
                    RefuelVehicle(currentVeh);
                    EssLang.Send(src, "VEHICLE_REFUELED");
                }
                else
                {
                    return(CommandResult.Lang("NOT_IN_VEHICLE"));
                }
            }
            else if (args[0].Is("all"))
            {
                if (!src.HasPermission($"{Permission}.all"))
                {
                    return(CommandResult.NoPermission($"{Permission}.all"));
                }

                lock (UWorld.Vehicles) {
                    UWorld.Vehicles
                    .WhereNot(veh => veh.isExploded || veh.isUnderwater)
                    .ForEach(RefuelVehicle);

                    EssLang.Send(src, "VEHICLE_REFUELED_ALL");
                }
            }

            return(CommandResult.Success());
        }
예제 #27
0
        private void GiveExp(UPlayer player, int amount)
        {
            var playerExp = player.UnturnedPlayer.skills.experience;

            if (amount < 0)
            {
                if ((playerExp - amount) < 0)
                {
                    playerExp = 0;
                }
                else
                {
                    playerExp += (uint)amount;
                }
            }
            else
            {
                if ((playerExp + amount) > int.MaxValue)
                {
                    playerExp = int.MaxValue;
                }
                else
                {
                    playerExp += (uint)amount;
                }
            }

            if (amount >= 0)
            {
                EssLang.Send(player, "EXPERIENCE_RECEIVED", amount);
            }
            else
            {
                EssLang.Send(player, "EXPERIENCE_LOST", -amount);
            }

            player.Experience = playerExp;
        }
예제 #28
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();
            var look   = player.Look;

            if (PhysicsUtility.raycast(new Ray(look.aim.position, look.aim.forward), out RaycastHit hit, Mathf.Infinity, RayMasks.BARRICADE))
            {
                InteractableDoorHinge hinge = hit.transform.GetComponent <InteractableDoorHinge>();

                if (hinge != null)
                {
                    InteractableDoor door = hinge.door;
                    bool             open = !door.isOpen;

                    BarricadeManager.tryGetInfo(door.transform, out byte x, out byte y, out ushort plant, out ushort index, out BarricadeRegion region);

                    BarricadeManager manager = (BarricadeManager)typeof(BarricadeManager).GetField("manager", BindingFlags.NonPublic |
                                                                                                   BindingFlags.Static).GetValue(null);

                    door.updateToggle(open);

                    manager.channel.send("tellToggleDoor", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
                    {
                        x,
                        y,
                        plant,
                        index,
                        open
                    });

                    EssLang.Send(src, "DOOR_TOGGLED", open ? "opened" : "closed");
                    return(CommandResult.Success());
                }
                else
                {
                    return(CommandResult.LangError("DOOR_INVALID"));
                }
            }
예제 #29
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var player = src.ToPlayer();

            if (args[0].ToString() == "third")
            {
                player.Look.setPerspective(SDG.Unturned.EPlayerPerspective.THIRD);

                EssLang.Send(src, "PERSPECTIVE_THIRD");
                return(CommandResult.Success());
            }
            else if (args[0].ToString() == "first")
            {
                player.Look.setPerspective(SDG.Unturned.EPlayerPerspective.FIRST);

                EssLang.Send(src, "PERSPECTIVE_FIRST");
                return(CommandResult.Success());
            }
            else
            {
                return(CommandResult.ShowUsage());
            }
        }
예제 #30
0
        public override CommandResult OnExecute(ICommandSource src, ICommandArgs args)
        {
            var count = 0;

            UWorld.Zombies.Where(z => z.isDead).ForEach(zombie => {
                ZombieManager.sendZombieAlive(
                    zombie,
                    zombie.type,
                    (byte)zombie.speciality,
                    zombie.shirt,
                    zombie.pants,
                    zombie.hat,
                    zombie.gear,
                    zombie.transform.position,
                    0
                    );
                count++;
            });

            EssLang.Send(src, "RESPAWNED_ZOMBIES", count);

            return(CommandResult.Success());
        }