示例#1
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()));
            }
        }
示例#2
0
        private List <int> GetRestrictedSlots(string attach, string vehicleType, VehicleInventory vehicleInventory)
        {
            List <int>       slots   = new List <int>();
            List <ESlotType> results = new List <ESlotType>()
            {
                ESlotType.None
            };

            switch (attach)
            {
            case "rotors":
            case "rotor":
                results.Add(ESlotType.MozzyRearRotors);
                results.Add(ESlotType.MozzyMainRotors);
                break;

            case "bumper":
                results.Add(ESlotType.RoachBullBar);
                break;

            case "left":
                results.Add(vehicleType == "roach" ? ESlotType.RoachLeftPanel : ESlotType.MozzyLeftPanel);
                break;

            case "right":
                results.Add(vehicleType == "roach" ? ESlotType.RoachRightPanel : ESlotType.MozzyRightPanel);
                break;

            case "roof":
                results.Add(vehicleType == "roach" ? ESlotType.RoachRoofBay : ESlotType.MozzyRoofPanel);
                break;

            case "rear":
                switch (vehicleType)
                {
                case "roach": results.Add(ESlotType.RoachRearBay); break;

                case "mozzy": results.Add(ESlotType.MozzyTail); break;

                case "kanga": results.Add(ESlotType.KangaBackpanel); break;

                case "goat": results.Add(ESlotType.GoatBackpanel); break;
                }
                break;

            case "front":
                switch (vehicleType)
                {
                case "roach": results.Add(ESlotType.RoachFrontBay); break;

                case "mozzy": results.Add(ESlotType.MozzyFrontPanel); break;

                case "kanga": results.Add(ESlotType.KangaFrontpanel); break;

                case "goat": results.Add(ESlotType.GoatFrontpanel); break;
                }
                break;

            case "tire":
            case "wheel":
                switch (vehicleType)
                {
                case "roach": results.Add(ESlotType.RoachWheel); break;

                case "kanga":
                    results.Add(ESlotType.KangaRearWheel);
                    results.Add(ESlotType.KangaFrontWheel);
                    break;

                case "goat": results.Add(ESlotType.QuadWheel); break;

                case "slug": results.Add(ESlotType.SlugWheel); break;
                }
                break;

            case "gearbox":
            case "gear":
                switch (vehicleType)
                {
                case "roach": results.Add(ESlotType.RoachGearbox); break;

                case "kanga": results.Add(ESlotType.KangaGearbox); break;

                case "goat": results.Add(ESlotType.QuadGearbox); break;

                case "slug": results.Add(ESlotType.SlugGearbox); break;
                }
                break;

            case "engine":
                switch (vehicleType)
                {
                case "roach": results.Add(ESlotType.RoachEngine); break;

                case "mozzy": results.Add(ESlotType.MozzyEngine); break;

                case "kanga": results.Add(ESlotType.KangaEngine); break;

                case "goat": results.Add(ESlotType.QuadEngine); break;

                case "slug": results.Add(ESlotType.SlugEngine); break;
                }
                break;

            default: break;
            }

            for (int slotNumber = 0; slotNumber < vehicleInventory.StorageConfig.Slots.Length; ++slotNumber)
            {
                StorageSlotConfig storageSlotConfig = vehicleInventory.StorageConfig.Slots[slotNumber];
                if (vehicleInventory.GetSlot(storageSlotConfig.SlotNumber) == null)
                {
                    continue;
                }
                List <ESlotType> slotRestrictions = storageSlotConfig.SlotRestrictions;

                IEnumerable <ESlotType> slot = slotRestrictions.Where(x => results.Contains(x));

                if (slot != null && slot.Count() > 0)
                {
                    slots.Add(slotNumber);
                }
            }
            return(slots);
        }