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