Example #1
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            ushort amount = 10;

            if (Context.Parameters.Length == 1)
            {
                amount = await Context.Parameters.GetAsync <ushort>(0);
            }

            UnturnedUser    uPlayer   = (UnturnedUser)Context.Actor;
            PlayerEquipment equipment = uPlayer.Player.Player.equipment;

            if (equipment.itemID == 0)
            {
                throw new UserFriendlyException(m_StringLocalizer["more:none"]);
            }

            Item item = new Item(equipment.itemID, EItemOrigin.ADMIN);

            await UniTask.SwitchToMainThread();

            for (int i = 0; i < amount; i++)
            {
                uPlayer.Player.Player.inventory.forceAddItem(item, true);
            }

            await PrintAsync(m_StringLocalizer["more:success",
                                               new { Amount = amount, Item = equipment.asset.itemName }]);
        }
Example #2
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 0)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser uPlayer  = (UnturnedUser)Context.Actor;
            var          userData = await m_UserDataStore.GetUserDataAsync(uPlayer.Id, uPlayer.Type);

            if (!userData.Data.ContainsKey("deathLocation"))
            {
                throw new UserFriendlyException(m_StringLocalizer["back:none"]);
            }
            var backLocation = SerializableVector3.Deserialize(userData.Data["deathLocation"]);

            if (backLocation == null)
            {
                throw new UserFriendlyException(m_StringLocalizer["back:none"]);
            }

            await uPlayer.Player.Player.TeleportToLocationAsync(backLocation.ToUnityVector3());

            await PrintAsync(m_StringLocalizer["back:success"]);
        }
Example #3
0
        protected override async UniTask OnExecuteAsync()
        {
            // User either didn't provide an item or provided too much information
            if (Context.Parameters.Length < 1 || Context.Parameters.Length > 2)
            {
                throw new CommandWrongUsageException(Context);
            }

            string rawInput = Context.Parameters[0];
            var    item     = await m_ItemDirectory.FindByNameOrIdAsync(rawInput);

            if (item == null)
            {
                throw new CommandWrongUsageException(m_StringLocalizer["item:invalid", new { Item = rawInput }]);
            }

            var amount = Context.Parameters.Length == 2 ? await Context.Parameters.GetAsync <ushort>(1) : (ushort)1;

            if (!m_Configuration.GetItemAmount(amount, out amount))
            {
                throw new UserFriendlyException(m_StringLocalizer["items:too_much", new { UpperLimit = amount }]);
            }

            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;

            await UniTask.SwitchToMainThread();

            for (ushort u = 0; u < amount; u++)
            {
                Item uItem = new(item.ItemAsset.id, EItemOrigin.ADMIN);
                uPlayer.Player.Player.inventory.forceAddItem(uItem, true);
            }

            await PrintAsync(m_StringLocalizer["item:success", new { Amount = amount, Item = item.ItemName, ID = item.ItemAssetId }]);
        }
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser        user    = (UnturnedUser)Context.Actor;
            InteractableVehicle?vehicle = RaycastHelper.Raycast(user.Player.Player, 6f);

            if (vehicle != null)
            {
                string ownerId = await m_KeysManager.CheckVehicleOwner(vehicle.instanceID);

                if (ownerId != "")
                {
                    await m_KeysManager.TryRemoveKeyFromBunch(ownerId, vehicle.instanceID);

                    await user.PrintMessageAsync(m_StringLocalizer["translations:vehicle_removedkey", new { vehicleID = vehicle.instanceID }]);

                    var player = PlayerTool.getPlayer(new Steamworks.CSteamID(ulong.Parse(ownerId)));
                    if (player != null)
                    {
                        ChatManager.say(player.channel.owner.playerID.steamID, m_StringLocalizer["translations:vehicle_lockpicked", new { vehicle = vehicle.asset.name, vehicleID = vehicle.instanceID }], UnityEngine.Color.red, EChatMode.SAY, true);
                    }
                }
            }
            else
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:vehicle_notfound"], System.Drawing.Color.Red, false, "");
            }
        }
Example #5
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 0)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser uPlayer        = (UnturnedUser)Context.Actor;
            var          currentVehicle = uPlayer.Player.Player.movement.getVehicle();

            if (currentVehicle != null)
            {
                await UniTask.SwitchToMainThread();

                RepairVehicle(currentVehicle);
                await uPlayer.PrintMessageAsync(m_StringLocalizer["repair:vehicle:current"]);
            }
            else
            {
                PlayerLook  look    = uPlayer.Player.Player.look;
                RaycastInfo raycast = DamageTool.raycast(new Ray(look.aim.position, look.aim.forward),
                                                         100f, RayMasks.VEHICLE);

                if (raycast.vehicle == null)
                {
                    throw new UserFriendlyException(m_StringLocalizer["repair:vehicle:none"]);
                }

                await UniTask.SwitchToMainThread();

                RepairVehicle(raycast.vehicle);
                await uPlayer.PrintMessageAsync(m_StringLocalizer["repair:vehicle:looking"]);
            }
        }
Example #6
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length < 1 || Context.Parameters.Length > 2)
            {
                throw new CommandWrongUsageException(Context);
            }

            int cooldown = Context.Parameters.Length == 2 ? await Context.Parameters.GetAsync <int>(1) : 0;

            var warpData = await m_DataStore.LoadAsync <WarpsData>(WarpsKey);

            string newWarpName = Context.Parameters[0];

            if (warpData.Warps.ContainsKey(newWarpName))
            {
                throw new UserFriendlyException(m_StringLocalizer["warps:set:exists", new { Warp = newWarpName }]);
            }

            UnturnedUser uPlayer         = (UnturnedUser)Context.Actor;
            var          newWarpLocation = uPlayer.Player.Player.transform.position.ToSerializableVector3();

            warpData.Warps.Add(newWarpName, new SerializableWarp(cooldown, newWarpLocation));
            await m_DataStore.SaveAsync(WarpsKey, warpData);

            m_PluginAccessor.Instance.RegisterNewWarpPermission(newWarpName);

            await uPlayer.PrintMessageAsync(m_StringLocalizer["warps:set:success", new { Warp = newWarpName }]);
        }
Example #7
0
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser user = (UnturnedUser)Context.Actor;

            if (Context.Parameters.Count != 1)
            {
                throw new CommandWrongUsageException("Error! Correct usage: /tpa <player>");
            }

            string tname = await Context.Parameters.GetAsync <string>(0);

            Player target = PlayerTool.getPlayer(tname);

            if (target == null)
            {
                throw new UserFriendlyException(m_StringLocalizer["plugin_translation:tpa_error_player_not_found"]);
            }
            else if (target == user.Player.Player)
            {
                throw new UserFriendlyException(m_StringLocalizer["plugin_translation:tpa_error_yourself"]);
            }
            else
            {
                UnturnedUser targetUser = (UnturnedUser)await m_UserManager.FindUserAsync(KnownActorTypes.Player, target.channel.owner.playerID.steamID.ToString(), UserSearchMode.FindById);

                await targetUser.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_received", new { USER = user.DisplayName }]);

                SimpleTpa.PendingTeleports.Add(user, targetUser);
            }
        }
Example #8
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser uPlayer          = (UnturnedUser)Context.Actor;
            ulong        recipientSteamID = uPlayer.SteamId.m_SteamID;

            SteamPlayer requester;

            switch (Context.Parameters.Length)
            {
            case 0:
                if (!m_TpaRequestManager.IsRequestOpen(recipientSteamID))
                {
                    throw new UserFriendlyException(m_StringLocalizer["tpa:no_requests"]);
                }

                ulong firstRequester = m_TpaRequestManager.AcceptRequest(recipientSteamID);
                requester = PlayerTool.getSteamPlayer(firstRequester);

                if (requester == null)
                {
                    throw new UserFriendlyException(m_StringLocalizer["tpa:disconnected",
                                                                      new { Requester = firstRequester.ToString() }]);
                }
                break;

            case 1:
                string requesterName = Context.Parameters[0];
                if (!PlayerTool.tryGetSteamPlayer(requesterName, out requester))
                {
                    throw new UserFriendlyException(m_StringLocalizer["tpa:invalid_recipient",
                                                                      new { Recipient = requesterName }]);
                }

                if (!m_TpaRequestManager.IsRequestOpen(recipientSteamID, requester.playerID.steamID.m_SteamID))
                {
                    throw new UserFriendlyException(m_StringLocalizer["tpa:no_requests_from",
                                                                      new { Requester = requester.playerID.characterName }]);
                }
                break;

            default:
                throw new UserFriendlyException("This is a placeholder so that we can reassure the compiler that requester will never be null.");
            }

            //TODO: Change name to be less misleading.
            m_TpaRequestManager.AcceptRequest(recipientSteamID, requester.playerID.steamID.m_SteamID);

            await uPlayer.PrintMessageAsync(m_StringLocalizer["tpa:denied_self",
                                                              new { Requester = requester.playerID.characterName }]);

            await UniTask.SwitchToMainThread();

            ChatManager.serverSendMessage(m_StringLocalizer["tpa:denied_other",
                                                            new { Recipient = uPlayer.DisplayName }], Color.red, toPlayer: requester, useRichTextFormatting: true);
        }
Example #9
0
        public async UniTask TelportPlayer(UnturnedUser target, UnturnedUser player) // player TO target
        {
            int interval = m_Configuration.GetSection("plugin_configuration:tpainterval").Get <int>() - 3;
            await Task.Delay(TimeSpan.FromSeconds(interval));

            await player.PrintMessageAsync("3...");

            await Task.Delay(TimeSpan.FromSeconds(1));

            await player.PrintMessageAsync("2...");

            await Task.Delay(TimeSpan.FromSeconds(1));

            await player.PrintMessageAsync("1...");

            await player.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_now"]);

            await UniTask.SwitchToMainThread();

            if (!target.Player.IsAlive)
            {
                await player.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_error_target_dead"]);
            }
            else if (!player.Player.IsAlive)
            {
                await player.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_error_user_dead"]);
            }
            else
            {
                player.Player.Player.teleportToLocationUnsafe(target.Player.Player.transform.position, target.Player.Player.look.yaw);
            }
        }
Example #10
0
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser user = (UnturnedUser)Context.Actor;
            uint         id   = await Context.Parameters.GetAsync <uint>(0);

            PlayerBunch?pBunch = await m_KeysManager.TryGetPlayerBunch(user.SteamId.ToString());

            if (pBunch == null || pBunch.VehiclesKey.Count == 0)
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:no_key"], System.Drawing.Color.Red, false, "");
            }
            else if (!pBunch.VehiclesKey.Any(v => v.InstanceId == id))
            {
                InteractableVehicle vehicle = VehicleManager.findVehicleByNetInstanceID(id);
                if (vehicle != null && !vehicle.isExploded && !vehicle.isDead)
                {
                    await UniTask.SwitchToMainThread();

                    await user.PrintMessageAsync(m_StringLocalizer["translations:vehicle_position", new { vehicle = pBunch.VehiclesKey.Where(z => z.InstanceId == id).First().VehicleName }], System.Drawing.Color.Green);

                    user.Player.Player.quests.replicateSetMarker(true, vehicle.transform.position, "Your vehicle!");
                }
                else
                {
                    await user.PrintMessageAsync(m_StringLocalizer["translations:vehicle_explode"]);

                    await m_KeysManager.TryRemoveKeyFromBunch(user.SteamId.ToString(), id);
                }
            }
            else
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:no_vehicle", new { vehicleID = id }]);
            }
        }
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser user = (UnturnedUser)Context.Actor;
            uint         id   = await Context.Parameters.GetAsync <uint>(1);

            string vic = await Context.Parameters.GetAsync <string>(0);

            Player player = PlayerTool.getPlayer(vic);

            if (player == null)
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:player_notfound"], System.Drawing.Color.Red, false, "");
            }
#pragma warning disable CS8602
            UnturnedUser?victim = (UnturnedUser?)await m_UserManager.FindUserAsync(KnownActorTypes.Player, player.channel.owner.playerID.steamID.ToString(), UserSearchMode.FindById);

#pragma warning restore CS8602
            if (victim == null)
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:player_notfound"], System.Drawing.Color.Red, false, "");
            }
            else if (victim == user)
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:yourself_error"], System.Drawing.Color.Red, false, "");
            }
            else if (victim != null && user != null)
            {
                PlayerBunch?userBunch = await m_KeysManager.TryGetPlayerBunch(user.Id);

                PlayerBunch?victimBunch = await m_KeysManager.TryGetPlayerBunch(victim.Id);

                if (userBunch != null && victimBunch != null)
                {
                    if (!userBunch.VehiclesKey.Any(v => v.InstanceId == id))
                    {
                        if (victimBunch.VehiclesKey.Count >= (victimBunch.MaxKeys - 1))
                        {
                            await user.PrintMessageAsync(m_StringLocalizer["translations:victim_maxkeys"]);
                        }
                        else
                        {
                            var vehicleKey = await m_KeysManager.TransferVehicle(user.Id, victim.Id, id);

                            await user.PrintMessageAsync(m_StringLocalizer["translations:user_vehicle_transfer", new { vehicle = vehicleKey.VehicleName, victim = victim.DisplayName }], System.Drawing.Color.Green);

                            await victim.PrintMessageAsync(m_StringLocalizer["translations:victim_vehicle_transfer", new { vehicle = vehicleKey.VehicleName, user = user.DisplayName }], System.Drawing.Color.Green);
                        }
                    }
                    else
                    {
                        await user.PrintMessageAsync(m_StringLocalizer["translations:no_vehicle", new { vehicleID = id }]);
                    }
                }
            }
            else
            {
                throw new UserFriendlyException("Internal error!");
            }
        }
Example #12
0
        protected override async UniTask OnExecuteAsync()
        {
            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;

            await UniTask.SwitchToMainThread();

            uPlayer.Player.Player.skills.ServerUnlockAllSkills();

            await uPlayer.PrintMessageAsync(m_StringLocalizer["maxskills:granted"]);
        }
Example #13
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 2)
            {
                throw new CommandWrongUsageException(Context);
            }

            await UniTask.SwitchToMainThread();

            float radius = 10f;

            if (Context.Parameters.Length > 0)
            {
                string radiusTerm = Context.Parameters[0];
                if (!float.TryParse(radiusTerm, out radius))
                {
                    throw new UserFriendlyException(m_StringLocalizer["explode:bad_radius", new { Radius = radiusTerm }]);
                }
            }

            float damage = 200f;

            if (Context.Parameters.Length > 1)
            {
                string damageTerm = Context.Parameters[1];
                if (!float.TryParse(damageTerm, out damage))
                {
                    throw new UserFriendlyException(m_StringLocalizer["explode:bad_damage", new { Damage = damageTerm }]);
                }
            }

            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;
            Transform    aim     = uPlayer.Player.Player.look.aim;

            if (!PhysicsUtility.raycast(new Ray(aim.position, aim.forward), out RaycastHit hit, 512f,
                                        RayMasks.DAMAGE_SERVER))
            {
                throw new UserFriendlyException(m_StringLocalizer["explode:failure"]);
            }

            if (hit.transform == null)
            {
                throw new UserFriendlyException(m_StringLocalizer["explode:failure"]);
            }

            await UniTask.SwitchToMainThread();

            EffectManager.sendEffect(20, EffectManager.MEDIUM, hit.point);
            DamageTool.explode(hit.point, radius, EDeathCause.KILL, uPlayer.SteamId, damage, damage, damage, damage,
                               damage, damage, damage, damage, out List <EPlayerKill> kills);

            await Context.Actor.PrintMessageAsync(m_StringLocalizer["explode:success"]);
        }
Example #14
0
        public void Execute(ICommandContext context)
        {
            UnturnedUser player = (UnturnedUser)context.User;

            if (context.Parameters.Length != 1)
            {
                throw new CommandWrongUsageException();
            }

            ushort id = context.Parameters.Get <ushort>(0);

            player.Player.TriggerEffect(id);
        }
Example #15
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            var warpsData = await m_DataStore.LoadAsync <WarpsData>(WarpsKey);

            string searchTerm = Context.Parameters[0];

            if (!warpsData.Warps.ContainsKey(searchTerm))
            {
                throw new UserFriendlyException(m_StringLocalizer["warps:none", new { Warp = searchTerm }]);
            }

            if (await m_PermissionChecker.CheckPermissionAsync(Context.Actor, $"warps.{searchTerm}") == PermissionGrantResult.Deny)
            {
                throw new UserFriendlyException(m_StringLocalizer["warps:no_permission", new { Warp = searchTerm }]);
            }

            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;
            var          warp    = warpsData.Warps[searchTerm];

            double?cooldown = await m_CooldownManager.OnCooldownAsync(uPlayer, "warps", searchTerm, warp.Cooldown);

            if (cooldown.HasValue)
            {
                throw new UserFriendlyException(m_StringLocalizer["warps:cooldown", new { Time = cooldown, Warp = searchTerm }]);
            }

            // Delay warping so that they cannot escape combat
            int  delay          = m_Configuration.GetValue <int>("teleportation:delay");
            bool cancelOnMove   = m_Configuration.GetValue <bool>("teleportation:cancelOnMove");
            bool cancelOnDamage = m_Configuration.GetValue <bool>("teleportation:cancelOnDamage");

            // Tell the player of the delay and not to move
            await uPlayer.PrintMessageAsync(m_StringLocalizer["warps:success", new { Warp = searchTerm, Time = delay }]);

            bool success = await m_TeleportService.TeleportAsync(uPlayer, new TeleportOptions(m_PluginAccessor.Instance, delay, cancelOnMove, cancelOnDamage));

            if (!success)
            {
                throw new UserFriendlyException(m_StringLocalizer["teleport:canceled"]);
            }

            await UniTask.SwitchToMainThread();

            uPlayer.Player.Player.teleportToLocation(warp.Location.ToUnityVector3(),
                                                     uPlayer.Player.Player.transform.eulerAngles.y);
        }
Example #16
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            if (Context.Parameters.Length == 0 && Context.Actor.Type != KnownActorTypes.Player)
            {
                throw new CommandWrongUsageException(Context);
            }

            if (Context.Parameters.Length == 1 && await CheckPermissionAsync("others") == PermissionGrantResult.Deny)
            {
                throw new NotEnoughPermissionException(Context, "others");
            }

            UnturnedUser uPlayer = Context.Parameters.Length == 0
                ? (UnturnedUser)Context.Actor
                : await Context.Parameters.GetAsync <UnturnedUser>(0);

            if (uPlayer == null)
            {
                throw new UserFriendlyException(m_StringLocalizer["commands:failed_player", new { Player = Context.Parameters[0] }]);
            }

            UserData userData = await m_UserDataStore.GetUserDataAsync(uPlayer.Id, uPlayer.Type);

            if (!userData.Data.ContainsKey("homes"))
            {
                throw new UserFriendlyException(m_StringLocalizer["home:no_home"]);
            }

            var homes = (Dictionary <object, object>)userData.Data["homes"];

            if (homes.Count == 0)
            {
                throw new UserFriendlyException(m_StringLocalizer["home:no_home"]);
            }

            var stringBuilder = new StringBuilder();

            foreach (var pair in homes)
            {
                stringBuilder.Append($"{pair.Key}, ");
            }

            stringBuilder.Remove(stringBuilder.Length - 2, 2);

            await uPlayer.PrintMessageAsync(m_StringLocalizer["home:list", new { User = uPlayer.DisplayName, Homes = stringBuilder.ToString() }]);
        }
Example #17
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 0)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser    uPlayer   = (UnturnedUser)Context.Actor;
            PlayerInventory inventory = uPlayer.Player.Player.inventory;

            await UniTask.SwitchToMainThread();

            foreach (SDG.Unturned.Items itemContainer in inventory.items)
            {
                if (itemContainer == null)
                {
                    continue;
                }

                foreach (ItemJar itemJar in itemContainer.items)
                {
                    Item item = itemJar.item;

                    if (item.quality != 100)
                    {
                        inventory.sendUpdateQuality(itemContainer.page, itemJar.x, itemJar.y, 100);
                    }

                    if (!HasDurableBarrel(item, out ushort barrelID))
                    {
                        continue;
                    }

                    if (barrelID == 0)
                    {
                        continue;
                    }

                    if (item.state[16] == 100)
                    {
                        continue;
                    }

                    item.state[16] = 100;
                    inventory.sendUpdateInvState(itemContainer.page, itemJar.x, itemJar.y, item.state);
                }
            }

            await uPlayer.PrintMessageAsync(m_StringLocalizer["repair:inventory"]);
        }
Example #18
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 2 || Context.Parameters.Length < 1)
            {
                throw new CommandWrongUsageException(Context);
            }


            //TODO: throw UserFriendlyException on bad input
            int additionReputation = await Context.Parameters.GetAsync <int>(0);

            if (Context.Parameters.Length == 1)
            {
                if (Context.Actor.Type == KnownActorTypes.Console)
                {
                    throw new CommandWrongUsageException(Context);
                }

                UnturnedUser uPlayer = (UnturnedUser)Context.Actor;

                await UniTask.SwitchToMainThread();

                uPlayer.Player.Player.skills.askRep(additionReputation);
                await uPlayer.PrintMessageAsync(m_StringLocalizer["reputation:success", new { Reputation = additionReputation.ToString() }]);
            }
            else
            {
                string nestedPermission = "give";
                if (await CheckPermissionAsync(nestedPermission) == PermissionGrantResult.Deny)
                {
                    throw new NotEnoughPermissionException(Context, nestedPermission);
                }

                string searchTerm = Context.Parameters[1];
                if (!PlayerTool.tryGetSteamPlayer(searchTerm, out SteamPlayer player))
                {
                    throw new UserFriendlyException(m_StringLocalizer["general:invalid_player",
                                                                      new { Player = searchTerm }]);
                }

                await UniTask.SwitchToMainThread();

                player.player.skills.askRep(additionReputation);
                await Context.Actor.PrintMessageAsync(m_StringLocalizer["reputation:gave",
                                                                        new
                                                                        {
                                                                            Player = player.playerID.characterName, Reputation = additionReputation.ToString()
                                                                        }]);
            }
        }
Example #19
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 0)
            {
                throw new CommandWrongUsageException(Context);
            }

            await UniTask.SwitchToMainThread();

            UnturnedUser user     = (UnturnedUser)Context.Actor;
            Vector3      position = user.Player.Player.transform.position;

            await user.PrintMessageAsync(m_StringLocalizer["position",
                                                           new { X = position.x, Y = position.y, Z = position.z }]);
        }
Example #20
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser uPlayer   = (UnturnedUser)Context.Actor;
            float        direction = uPlayer.Player.Player.transform.eulerAngles.y;
            string       directionName;

            //TODO: Teleporting breaks direction name for some reason
            if (Context.Parameters.Length == 1)
            {
                direction = Context.Parameters[0].ToUpperInvariant() switch
                {
                    "N" => 0,
                    "NORTH" => 0,
                    "S" => 180,
                    "SOUTH" => 180,
                    "E" => 90,
                    "EAST" => 90,
                    "W" => 270,
                    "WEST" => 270,
                    _ => throw new CommandWrongUsageException(Context)
                };

                await uPlayer.Player.Player.TeleportToLocationAsync(uPlayer.Player.Player.transform.position, direction);
            }

            directionName = direction switch
            {
                _ when direction <North || direction> NorthWest => m_StringLocalizer["compass:north"],
                                                      _ when direction > North && direction <NorthEast => m_StringLocalizer["compass:northeast"],
                                                                                             _ when direction> NorthEast && direction <East => m_StringLocalizer["compass:east"],
                                                                                                                                       _ when direction> East && direction <SouthEast => m_StringLocalizer["compass:southeast"],
                                                                                                                                                                            _ when direction> SouthEast && direction <South => m_StringLocalizer["compass:south"],
                                                                                                                                                                                                                      _ when direction> South && direction <SouthWest => m_StringLocalizer["compass:southwest"],
                                                                                                                                                                                                                                                            _ when direction> SouthWest && direction <West => m_StringLocalizer["compass:west"],
                                                                                                                                                                                                                                                                                                      _ when direction> West && direction < NorthWest => m_StringLocalizer["compass:northwest"],
                _ => m_StringLocalizer["compass:unknown"]
            };

            await uPlayer.PrintMessageAsync(directionName);
        }
    }
Example #21
0
            public async Task HandleEventAsync(object sender, IUserDisconnectedEvent @event)
            {
                UnturnedUser user = (UnturnedUser)@event.User;

                Jobs.Civil--;
                var medic = await ro_PermissionChecker.CheckPermissionAsync(user, ro_Configuration.GetSection("plugin_configuration:medic_permission").Get <string>());

                var police = await ro_PermissionChecker.CheckPermissionAsync(user, ro_Configuration.GetSection("plugin_configuration:police_permission").Get <string>());

                if (medic == PermissionGrantResult.Grant && !user.Player.Player.channel.owner.isAdmin && Jobs.Medic > 0)
                {
                    Jobs.Medic--;
                }
                if (police == PermissionGrantResult.Grant && !user.Player.Player.channel.owner.isAdmin && Jobs.Police > 0)
                {
                    Jobs.Police--;
                }
            }
Example #22
0
        protected override async UniTask OnExecuteAsync()
        {
            //TODO: Add support for configurable allowed effects?

            UnturnedUser usr = (UnturnedUser)Context.Actor;
            Player       target;


            if (Context.Parameters.Length > 1 && Context.Parameters.Length < 2)
            {
                target = Provider.clients.FirstOrDefault(p =>
                                                         p.player.name.Contains(Context.Parameters.GetAsync <string>(1).Result))?.player;

                if (target == null)
                {
                    throw new CommandWrongUsageException("Could not find player");
                }
            }
            else if (Context.Parameters.Length == 1)
            {
                target = ((UnturnedUser)Context.Actor).Player.Player;
            }
            else
            {
                throw new CommandWrongUsageException("Unexpected amount of parameters");
            }


            if (target == null)
            {
                return;
            }

            ushort effectId = await Context.Parameters.GetAsync <ushort>(0);

            await UniTask.SwitchToMainThread();

            EffectManager.sendEffect(effectId, target.channel.GetOwnerTransportConnection(), target.transform.position);

            await usr.PrintMessageAsync(
                $"Successfully gave effect {effectId} to {target.channel.owner.playerID.characterName}");
        }
Example #23
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;

            //TODO: throw UserFriendlyException on bad input
            Vector3 newPosition  = uPlayer.Player.Player.transform.position;
            float   downDistance = Context.Parameters.Length == 0 ? 10f : await Context.Parameters.GetAsync <float>(0);

            newPosition.y -= downDistance;

            await uPlayer.Player.Player.TeleportToLocationUnsafeAsync(newPosition);

            await uPlayer.PrintMessageAsync(m_StringLocalizer["descend:success",
                                                              new { Distance = downDistance.ToString() }]);
        }
Example #24
0
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser user = (UnturnedUser)Context.Actor;

            PlayerBunch?pBunch = await m_KeysManager.TryGetPlayerBunch(user.SteamId.ToString());

            if (pBunch == null || pBunch.VehiclesKey.Count == 0)
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:no_key"], System.Drawing.Color.Red, false, "");
            }
            else
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:your_keys"]);

                for (int i = 0; i < pBunch.VehiclesKey.Count; i++)
                {
                    await user.PrintMessageAsync($"{pBunch.VehiclesKey[i].VehicleName} - {pBunch.VehiclesKey[i].InstanceId}", System.Drawing.Color.FromName(m_Configuration.GetSection("configuration:keys_message_color").Get <string>()), false, "");
                }
            }
        }
Example #25
0
        // TODO: Handle teleporting with SetPositionAsync and error reporting with PrintMessageAsync
        public async Task <bool> TeleportAsync(UnturnedUser user, TeleportOptions options)
        {
            var cancelled = false;

            IDisposable sub = NullDisposable.Instance;

            if (options.CancelOnDamage)
            {
                sub = m_EventBus.Subscribe <IPlayerDamagedEvent>(options.Instance, (sp, sender, e) =>
                {
                    if (Equals(e.Player, user.Player))
                    {
                        cancelled = true;
                    }

                    return(Task.CompletedTask);
                });
            }

            var lastPosition = user.Player.Transform.Position;

            await Task.Delay(new TimeSpan(0, 0, options.Delay));

            sub.Dispose();

            if (options.CancelOnMove)
            {
                if (user.Player == null || user.Player.Transform == null)
                {
                    return(false);
                }

                var latestPosition = user.Player.Transform.Position;
                if (lastPosition != latestPosition)
                {
                    cancelled = true;
                }
            }

            return(!cancelled);
        }
Example #26
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length != 0)
            {
                throw new CommandWrongUsageException(Context);
            }

            await UniTask.SwitchToMainThread();

            UnturnedUser uPlayer = (UnturnedUser)Context.Actor;
            Transform    aim     = uPlayer.Player.Player.look.aim;

            if (!PhysicsUtility.raycast(new Ray(aim.position, aim.forward), out RaycastHit hit, 1024f,
                                        COLLISION_NO_SKY))
            {
                throw new UserFriendlyException(m_StringLocalizer["jump:none"]);
            }

            await uPlayer.Player.Player.TeleportToLocationUnsafeAsync(hit.point + new Vector3(0f, 2f, 0f));

            await uPlayer.PrintMessageAsync(m_StringLocalizer["jump:success"]);
        }
Example #27
0
        protected override async UniTask OnExecuteAsync()
        {
            if (Context.Parameters.Length > 1)
            {
                throw new CommandWrongUsageException(Context);
            }

            if (Context.Parameters.Length == 0)
            {
                //TODO: Use a more descriptive error message
                if (Context.Actor.Type == KnownActorTypes.Console)
                {
                    throw new CommandWrongUsageException(Context);
                }

                UnturnedUser uPlayer = (UnturnedUser)Context.Actor;

                await UniTask.SwitchToMainThread();

                uPlayer.Player.Player.ClearInventory();
                await uPlayer.PrintMessageAsync(m_StringLocalizer["clear:inventory"]);
            }
            else
            {
                string searchTerm = Context.Parameters[0];
                if (!PlayerTool.tryGetSteamPlayer(searchTerm, out SteamPlayer recipient))
                {
                    throw new UserFriendlyException(m_StringLocalizer["general:invalid_player", new { Player = searchTerm }]);
                }

                await UniTask.SwitchToMainThread();

                recipient.player.ClearInventory();
                await Context.Actor.PrintMessageAsync(m_StringLocalizer["clear:inventory_other",
                                                                        new { Player = recipient.playerID.characterName }]);
            }
        }
Example #28
0
        protected override async Task OnExecuteAsync()
        {
            UnturnedUser user = (UnturnedUser)Context.Actor;
            uint         id   = await Context.Parameters.GetAsync <uint>(0);

            if (!await m_KeysManager.TryRemoveKeyFromBunch(user.Id, id))
            {
                await user.PrintMessageAsync(m_StringLocalizer["translations:no_vehicle", new { vehicleID = id }], System.Drawing.Color.Red, false, "");
            }
            else
            {
                InteractableVehicle vehicle = VehicleManager.findVehicleByNetInstanceID(id);
                await UniTask.SwitchToMainThread();

                VehicleManager.instance.channel.send("tellVehicleLock", ESteamCall.ALL, ESteamPacket.UPDATE_RELIABLE_BUFFER, new object[]
                {
                    vehicle.instanceID,
                    user.SteamId,
                    user.Player.Player.quests.groupID,
                    false
                });
                await user.PrintMessageAsync(m_StringLocalizer["translations:vehicle_delete", new { vehicleID = id }], System.Drawing.Color.Red, false, "");
            }
        }
Example #29
0
 private void PlayerAnimator_OnLeanChanged_Global(PlayerAnimator obj)
 {
     AsyncHelper.RunSync(async() => {
         UnturnedUser user = (UnturnedUser)await m_UserManager.FindUserAsync(KnownActorTypes.Player, obj.player.channel.owner.playerID.steamID.ToString(), UserSearchMode.FindById);
         if (PendingTeleports.Any(k => k.Value == user))
         {
             if (obj.leanLeft)
             {
                 var toRemove = PendingTeleports.Where(k => k.Value == user).First();
                 var sender   = toRemove.Key;
                 PendingTeleports.Remove(toRemove.Key);
                 await sender.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_cancelled"]);
             }
             else if (obj.leanRight)
             {
                 var toRemove = PendingTeleports.Where(k => k.Value == user).First();
                 var sender   = toRemove.Key;
                 PendingTeleports.Remove(toRemove.Key);
                 await sender.PrintMessageAsync(m_StringLocalizer["plugin_translation:tpa_accepted", new { USER = user.DisplayName, INTERVAL = m_Configuration.GetSection("plugin_configuration:tpainterval").Get <int>() }]);
                 AsyncHelper.Schedule("Start Teleport", () => TelportPlayer(user, sender).AsTask());
             }
         }
     });
 }
Example #30
0
 protected UnturnedUserEvent(UnturnedUser user)
 {
     User = user;
 }