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