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())); } }
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); }