public void commandGroupVehicles(Player player) { Character character = player.GetCharacter(); var group = character.Group; if (group != Group.None) { List <GameVehicle> gCarsList = new List <GameVehicle>(); foreach (var v in Vehicles) { if (v.GroupId == group.Id) { gCarsList.Add(v); } } if (gCarsList.Count > 0) { string[][] cars = gCarsList .Select(x => new[] { VehicleOwnership.returnCorrDisplayName(x.VehModel), x.Id.ToString(), x.Entity.Value.ToString(), x.LicensePlate }) .ToArray(); NAPI.ClientEvent.TriggerClientEvent(player, "groupvehicles_showmenu", NAPI.Util.ToJson(cars.ToArray())); } else { NAPI.Chat.SendChatMessageToPlayer(player, "Your group has no vehicles!"); } } }
public void myvehicles_cmd(Client player) { //Get all owned vehicles and send them. Character character = player.GetCharacter(); if (!character.OwnedVehicles.Any()) { API.SendChatMessageToPlayer(player, "You don't have any vehicles to manage!"); return; } string[][] cars = character.OwnedVehicles .Select(x => new[] { VehicleOwnership.returnCorrDisplayName(x.VehModel), x.Id.ToString(), x.NetHandle.Value.ToString() }) .ToArray(); API.TriggerClientEvent(player, "myvehicles_showmenu", API.ToJson(cars)); }
public void OnPlayerEnterVehicle(Player player, Vehicle vehicleHandle, sbyte seat) { // Admin check in future var veh = GetVehFromNetHandle(vehicleHandle); if (veh == null) { return; } NAPI.Blip.SetBlipTransparency(veh.Blip, 0); Character character = player.GetCharacter(); Account account = player.GetAccount(); //IS A GROUP VEHICLE if (veh.Group != null && character.Group != veh.Group && veh.Group != Group.None && seat == 0 && account.AdminDuty == false) { { NAPI.Chat.SendChatMessageToPlayer(player, "You must be a member of " + veh.Group.Name + " to use this vehicle."); //API.Delay(1000, true, () => NAPI.Player.WarpPlayerOutOfVehicle(player)); Task.Delay(1000).ContinueWith(t => NAPI.Player.WarpPlayerOutOfVehicle(player)); // TODO: delay fixme return; } } //IS A VIP VEHICLE if (veh.IsVip == true && account.VipLevel <= 1 && seat == 0) { player.SendChatMessage("This is a ~y~VIP~y~ vehicle. You must be a VIP to drive it."); //API.Delay(1000, true, () => NAPI.Player.WarpPlayerOutOfVehicle(player)); Task.Delay(1000).ContinueWith(t => NAPI.Player.WarpPlayerOutOfVehicle(player)); // TODO: delay fixme return; } if (account.AdminLevel > 1) { NAPI.Chat.SendChatMessageToPlayer(player, "~w~[VehicleM] You have entered vehicle ~r~" + Vehicles.IndexOf(veh) + "(Owned by: " + PlayerManager.Players.SingleOrDefault(x => x.Id == veh.OwnerId)?.CharacterName + ")"); } if (NAPI.Vehicle.GetVehicleLocked(vehicleHandle)) { //API.Delay(1000, true, () => NAPI.Player.WarpPlayerOutOfVehicle(player)); Task.Delay(1000).ContinueWith(t => NAPI.Player.WarpPlayerOutOfVehicle(player)); // TODO: delay fixme NAPI.Chat.SendChatMessageToPlayer(player, "~r~The vehicle is locked."); return; } //Vehicle Interaction Menu Setup var vehInfo = VehicleOwnership.returnCorrDisplayName(veh.VehModel) + " - " + veh.LicensePlate; NAPI.Data.SetEntitySharedData(player, "CurrentVehicleInfo", vehInfo); NAPI.Data.SetEntitySharedData(player, "OwnsVehicle", DoesPlayerHaveVehicleAccess(player, veh)); NAPI.Data.SetEntitySharedData(player, "CanParkCar", DoesPlayerHaveVehicleParkLockAccess(player, veh)); NAPI.ClientEvent.TriggerClientEvent(player, "speedo_entervehicle", account.IsSpeedoOn); veh.Driver = player.GetCharacter(); veh.LastOccupied = DateTime.Now; API.SetPlayerSeatbelt(player, true); foreach (var p in NAPI.Pools.GetAllPlayers()) { if (p == null) { continue; } if (p.Position.DistanceTo(NAPI.Entity.GetEntityPosition(vehicleHandle)) <= 250.0f) { player.TriggerEvent("CallNative", Hash.SET_ENTITY_INVINCIBLE, vehicleHandle, false); player.TriggerEvent("CallNative", Hash.SET_ENTITY_PROOFS, vehicleHandle, 0, 0, 0, 0, 0, 0, 0, 0); player.TriggerEvent("CallNative", Hash.SET_VEHICLE_TYRES_CAN_BURST, vehicleHandle, 1); player.TriggerEvent("CallNative", Hash.SET_VEHICLE_WHEELS_CAN_BREAK, vehicleHandle, 1); player.TriggerEvent("CallNative", Hash.SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED, vehicleHandle, 1); } } }
private void API_onClientEventTrigger(Client sender, string eventName, params object[] arguments) { Character character = sender.GetCharacter(); switch (eventName) { case "myvehicles_locatecar": vehicle_manager.Vehicle lcVeh = VehicleManager.Vehicles.Single( x => x.NetHandle.Value == Convert.ToInt32(arguments[0]) && x.OwnerId == character.Id); Vector3 loc = API.GetEntityPosition(lcVeh.NetHandle); API.TriggerClientEvent(sender, "myvehicles_setCheckpointToCar", loc.X, loc.Y, loc.Z); API.SendChatMessageToPlayer(sender, "A checkpoint has been set to the vehicle."); break; case "myvehicles_abandoncar": vehicle_manager.Vehicle acVeh = VehicleManager.Vehicles.Single( x => x.Id == Convert.ToInt32(arguments[0]) && x.OwnerId == character.Id); VehicleManager.despawn_vehicle(acVeh); VehicleManager.delete_vehicle(acVeh); acVeh.Delete(); API.SendChatMessageToPlayer(sender, $"You have sucessfully abandoned your ~r~{VehicleOwnership.returnCorrDisplayName(acVeh.VehModel)}~w~"); break; case "myvehicles_sellcar": vehicle_manager.Vehicle scVeh = VehicleManager.Vehicles.Single( x => x.Id == Convert.ToInt32(arguments[0]) && x.OwnerId == character.Id); var tid = (string)arguments[1]; var target = PlayerManager.ParseClient(tid); if (target == null) { API.SendChatMessageToPlayer(sender, "That player isn't online or doesn't exist."); return; } var targetChar = target.GetCharacter(); var targetAccount = target.GetAccount(); var price = 0; if (!int.TryParse((string)arguments[2], out price)) { API.SendChatMessageToPlayer(sender, "Invalid price entered."); return; } if (price < 0) { API.SendChatMessageToPlayer(sender, "Price cannot be negative."); return; } if (targetChar.OwnedVehicles.Count >= VehicleManager.GetMaxOwnedVehicles(targetChar.Client)) { API.SendChatMessageToPlayer(sender, "This player cannot own any more vehicles."); return; } API.SendChatMessageToPlayer(sender, $"Are you sure you would like to sell the ~r~{VehicleOwnership.returnCorrDisplayName(scVeh.VehModel)}~w~ for ~r~${price}~w~ to the player ~r~{targetChar.rp_name()}~w~?"); API.SendChatMessageToPlayer(sender, "Use /confirmsellvehicle to sell."); API.SetEntityData(sender, "sellcar_selling", new dynamic[] { scVeh, targetChar, price }); break; case "groupvehicles_locatecar": vehicle_manager.Vehicle gVeh = VehicleManager.Vehicles.Single( x => x.NetHandle.Value == Convert.ToInt32(arguments[0]) && x.GroupId == character.GroupId); Vector3 location = API.GetEntityPosition(gVeh.NetHandle); API.TriggerClientEvent(sender, "myvehicles_setCheckpointToCar", location.X, location.Y, location.Z); API.SendChatMessageToPlayer(sender, "A checkpoint has been set to the vehicle."); break; } }
public void confirmsellvehicle_cmd(Client player) { Character character = player.GetCharacter(); var data = API.GetEntityData(player, "sellcar_selling"); if (data != null) { Vehicle veh = data[0]; Character target = data[1]; int price = data[2]; API.SetEntityData(target.Client, "sellcar_buying", new dynamic[] { character, veh, price }); API.SetEntityData(player, "sellcar_selling", null); API.SendChatMessageToPlayer(target.Client, $"~r~{character.rp_name()}~w~ has offered to sell you a ~r~{VehicleOwnership.returnCorrDisplayName(veh.VehModel)}~w~ for ~r~${price}~w~."); API.SendChatMessageToPlayer(target.Client, "Use /confirmbuyvehicle to buy it."); API.SendChatMessageToPlayer(player, "Request sent."); } else { API.SendChatMessageToPlayer(player, "You aren't selling any car."); } }