示例#1
0
 private void VehicleInstall(PlayerSession session, ItemObject playerItemObject, VehicleInventory vehicleInventory, int slotNumber)
 {
     //Add attachment to vehicle.
     vehicleInventory.GiveItemServer(playerItemObject, slotNumber, slotNumber);
     vehicleInventory.Invalidate(false);
     //Remove attachment from player inventory
     playerItemObject.InvalidateStorage();
 }
示例#2
0
        private string VehicleSwitch(PlayerSession session, ItemObject playerItemObject, VehicleInventory vehicleInventory, int slotNumber)
        {
            //Give vehicle attachment to player
            PlayerInventory playerInventory = session.WorldPlayerEntity.GetComponent <PlayerInventory>();
            ItemObject      vehicleAttach   = vehicleInventory.GetSlot(slotNumber);

            playerInventory.GiveItemServer(vehicleAttach);
            playerItemObject.InvalidateStorage();

            //Add attachment to vehicle
            vehicleInventory.GiveItemServer(playerItemObject, slotNumber, slotNumber);
            vehicleInventory.Invalidate(false);

            return(vehicleAttach.Generator.name);
        }
示例#3
0
        private void DoInstall(PlayerSession session, string[] args, string vehicleType, VehicleInventory vehicleInventory)
        {
            string steamId = session.SteamId.ToString();

            if (!permission.UserHasPermission(steamId, InstallPermission))
            {
                Player.Message(session, GetMsg("NoPermission", steamId).Replace("{permission}", InstallPermission));
                return;
            }

            //Check if player is installing a correct vehicle attachment
            int slot;

            if (!int.TryParse(args[1], out slot) || slot < 1 || slot > 8)
            {
                Player.Message(session, GetMsg("HelpCommand", steamId));
                return;
            }

            PlayerInventory playerInventory  = session.WorldPlayerEntity.GetComponent <PlayerInventory>();
            ItemObject      playerItemObject = playerInventory.GetSlot(slot - 1);

            if (playerItemObject != null)
            {
                ESlotType itemSlotType = GetSlotType(playerItemObject);

                string slotTypeString = itemSlotType.ToString().ToLower();
                Puts(slotTypeString);
                if (!slotTypeString.Contains(vehicleType))
                {
                    Player.Message(session, GetMsg("NotVehicleAttachment", steamId));
                    return;
                }

                //Correct item. Can install/switch.
                //Check if vehicle has the same attachment type installed. If not, install player's item. If yes, switch with player's item.
                bool updated     = false;
                bool notSwitched = false;
                for (int slotNumber = 0; slotNumber < vehicleInventory.StorageConfig.Slots.Length; ++slotNumber)
                {
                    StorageSlotConfig storageSlotConfig = vehicleInventory.StorageConfig.Slots[slotNumber];
                    if (storageSlotConfig.SlotRestrictions.Contains(itemSlotType))
                    {
                        ItemObject switchslot = vehicleInventory.GetSlot(storageSlotConfig.SlotNumber);
                        if (switchslot == null)
                        {
                            //Vehicle doesn't have attachment on that slot. Can install.
                            VehicleInstall(session, playerItemObject, vehicleInventory, storageSlotConfig.SlotNumber);
                            Player.Message(session, GetMsg("VehicleInstall", steamId).Replace("{attachInstalled}", playerItemObject.Generator.name).Replace("{vehicleType}", GetMsg("vehicles/" + vehicleType)));
                            updated = true;
                        }
                        else
                        {
                            ItemObject vehicleAttach = vehicleInventory.GetSlot(storageSlotConfig.SlotNumber);
                            if (RuntimeHurtDB.Instance.GetGuid(vehicleAttach.Generator) == RuntimeHurtDB.Instance.GetGuid(playerItemObject.Generator))
                            {
                                notSwitched = true;
                                continue;
                            }
                            else
                            {
                                //Vehicle have attachment on that slot. Can switch.
                                string attachSwitched = VehicleSwitch(session, playerItemObject, vehicleInventory, storageSlotConfig.SlotNumber);
                                Player.Message(session, GetMsg("VehicleSwitch", steamId).Replace("{attachSwitched}", attachSwitched).Replace("{vehicleType}", GetMsg("vehicles/" + vehicleType)).Replace("{attachInstalled}", playerItemObject.Generator.name));
                                updated = true;
                            }
                        }
                        vehicleInventory.Invalidate(false);
                    }
                    if (updated)
                    {
                        break;
                    }
                }
                if (notSwitched && !updated)
                {
                    Player.Message(session, GetMsg("VehicleAttachmentAlreadyInstalled", steamId).Replace("{attachment}", playerItemObject.Generator.name));
                }
            }
            else
            {
                Player.Message(session, GetMsg("NoAttachmentFound", steamId).Replace("{slot}", slot.ToString()));
            }
        }
示例#4
0
        private void DoRemove(PlayerSession session, string[] args, string vehicleType, VehicleInventory vehicleInventory, VehiclePassenger[] vehiclePassengers)
        {
            string steamId = session.SteamId.ToString();

            // /car remove bumper|front|left|right|roof|rear|tire|engine|gearbox
            string tmp = args[1].ToLower();

            //Check for permission to remove.extra
            if (tmp == "gear" || tmp == "gearbox" || tmp == "engine" || tmp == "tire" || tmp == "wheel" || tmp == "rotor" || tmp == "rotors")
            {
                if (!permission.UserHasPermission(steamId, RemoveExtraPermission))
                {
                    Player.Message(session, GetMsg("NoPermission", steamId).Replace("{permission}", RemoveExtraPermission));
                    return;
                }
            }
            //Check for permission to remove
            if (tmp == "bumper" || tmp == "front" || tmp == "left" || tmp == "right" || tmp == "roof" || tmp == "rear" || tmp == "all")
            {
                if (!permission.UserHasPermission(steamId, RemovePermission))
                {
                    Player.Message(session, GetMsg("NoPermission", steamId).Replace("{permission}", RemovePermission));
                    return;
                }
            }

            List <string> parts;

            if (tmp == "all")
            {
                parts = new List <string> {
                    "bumper", "front", "left", "right", "roof", "rear"
                }
            }
            ;
            else
            {
                parts = new List <string> {
                    tmp
                }
            };

            bool ignorePart = false;

            foreach (string attach in parts)
            {
                ignorePart = false;
                // Cannot remove rear if a player is on the vehicle rear
                if (attach == "rear" || attach == "front")
                {
                    foreach (VehiclePassenger vehiclePassenger in vehiclePassengers)
                    {
                        if (vehiclePassenger.HasPassenger())
                        {
                            string seat = GetSeatName(vehiclePassenger.SeatOffset);
                            if (attach == seat)
                            {
                                Player.Message(session, GetMsg("RemoveSeatError", steamId).Replace("{seat}", seat));
                                ignorePart = true;
                                break;
                            }
                        }
                    }
                }

                if (ignorePart)
                {
                    continue;
                }

                //Get the restrictedSlots relative to vehicle attachment player wants to remove
                List <int>        restrictedSlots   = GetRestrictedSlots(attach, vehicleType, vehicleInventory);
                GlobalItemManager globalItemManager = GlobalItemManager.Instance;
                foreach (int slot in restrictedSlots)
                {
                    //Give vehicle attach to player inventory
                    ItemObject vehicleAttach = vehicleInventory.GetSlot(slot);
                    globalItemManager.GiveItem(session.Player, vehicleAttach);
                    //Remove attachment from vehicle.
                    vehicleInventory.SetSlot(slot, null);
                    vehicleInventory.Invalidate(false);
                    if (tmp != "all")
                    {
                        Player.Message(session, GetMsg("VehicleRemove", steamId).Replace("{attachRemoved}", vehicleAttach.Generator.name).Replace("{vehicleType}", GetMsg("vehicles/" + vehicleType)));
                    }
                }
                if (restrictedSlots.Count == 0)
                {
                    if (tmp != "all")
                    {
                        Player.Message(session, GetMsg("RemoveAttachmentError").Replace("{attachment}", attach));
                    }
                }
            }
            if (tmp == "all")
            {
                Player.Message(session, GetMsg("VehicleRemoveAll").Replace("{vehicleType}", GetMsg("vehicles/" + vehicleType)));
            }
        }