コード例 #1
0
ファイル: VehicleManager.cs プロジェクト: nxxnly/MTGRP
        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!");
                }
            }
        }
コード例 #2
0
ファイル: VehicleOwnership.cs プロジェクト: MTG-RP/V-RP
        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));
        }
コード例 #3
0
ファイル: VehicleManager.cs プロジェクト: nxxnly/MTGRP
        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);
                }
            }
        }
コード例 #4
0
ファイル: VehicleOwnership.cs プロジェクト: MTG-RP/V-RP
        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;
            }
        }
コード例 #5
0
ファイル: VehicleOwnership.cs プロジェクト: MTG-RP/V-RP
        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.");
            }
        }