예제 #1
0
        public void TestMethod_Statistics()
        {
            IVehicleInventory inventory = new VehicleInventory();
            var mfg = new Manufacturer("Toyota", "100 main", "800-999-9999");

            var vehicle = VehicleFactory.CreateVehicle("vinnumber3", VehicleMake.Ford, "model", 2017, "yellow", 1500, 10000, 10000);

            inventory.Add(vehicle);
            vehicle = VehicleFactory.CreateVehicle("vinnumber1", VehicleMake.BMW, "model", 2016, "red", 2500, 60000, 60000);
            inventory.Add(vehicle);
            vehicle = VehicleFactory.CreateVehicle("vinnumber1", VehicleMake.Toyota, "model", 2016, "red", 2500, 20000, 20000);
            inventory.Add(vehicle);

            var vehicleList = inventory.List();

            Assert.AreEqual(30000, vehicleList.AverageMSRP());
            Assert.AreEqual(10000, vehicleList.MinMSRP());
            Assert.AreEqual(60000, vehicleList.MaxMSRP());

            Assert.AreEqual(30000, vehicleList.AverageMileage());
            Assert.AreEqual(10000, vehicleList.MinMileage());
            Assert.AreEqual(60000, vehicleList.MaxMileage());

            Assert.AreEqual(3, vehicleList.CountDueForOilChange());

            //do an oil change, then re-check count
            vehicle.LastOilChangeDate  = DateTime.Now;
            vehicle.LastOilChangeMiles = 20000;
            Assert.AreEqual(2, vehicleList.CountDueForOilChange());
        }
예제 #2
0
        private static void DemoVehicleInventory()
        {
            IVehicleInventory inventory = new VehicleInventory();
            var vehicle = VehicleFactory.CreateVehicle("vinnumber3", VehicleMake.Tesla, "Model S", 2017, "yellow", 1500, 2500, 100);

            //var temp = vehicle.Mfg;
            inventory.Add(vehicle);
            vehicle = VehicleFactory.CreateVehicle("vinnumber1", VehicleMake.BMW, "325i", 2016, "red", 2500, 4000, 100);
            inventory.Add(vehicle);

            inventory.Remove(vehicle);

            inventory.Add(vehicle);
            var v1 = inventory.List(SortOrder.Vin);

            Console.WriteLine("List of Vehicles");
            v1.ForEach(v => Console.WriteLine($"{v.VinNumber}, {v.Make}, {v.Model}"));

            var v2 = inventory.FindByYear(2017);

            var v3 = inventory.List(SortOrder.Vin).FindByMake(VehicleMake.BMW);

            v3.AddToMileage(99);
            var v3_1 = inventory.List().FindByMake(VehicleMake.BMW);

            var v4 = inventory.List().FindByMake(VehicleMake.Ford);

            var stringList = inventory.ListAsString(SortOrder.Vin);

            Console.WriteLine("List of Vehicles - in Json(string) format");
            Console.WriteLine($"{stringList}");
        }
예제 #3
0
        public void TestMethod_BasicFeatures()
        {
            IVehicleInventory inventory = new VehicleInventory();
            var vehicle = VehicleFactory.CreateVehicle("vinnumber3", VehicleMake.Tesla, "model", 2017, "yellow", 1500, 2500, 100);

            //var temp = vehicle.Mfg;
            inventory.Add(vehicle);
            vehicle = VehicleFactory.CreateVehicle("vinnumber1", VehicleMake.BMW, "model", 2016, "red", 2500, 4000, 100);
            inventory.Add(vehicle);
            var v1 = inventory.List(SortOrder.Vin);

            Assert.AreEqual(2, v1.Count);
            Assert.AreEqual(v1[0].VinNumber, "vinnumber1");

            inventory.Remove(vehicle);
            v1 = inventory.List(SortOrder.Vin);
            Assert.AreEqual(1, v1.Count);

            inventory.Add(vehicle);

            var v2 = inventory.FindByYear(2017);

            Assert.AreEqual(1, v2.Count);

            var v3 = inventory.List(SortOrder.Vin).FindByMake(VehicleMake.BMW);

            Assert.AreEqual(1, v3.Count);
            Assert.IsTrue(v3[0].Disclaimer.Contains("Copyright BMW AG, Munich, Germany"));

            v3.AddToMileage(99);
            var v3_1 = inventory.List().FindByMake(VehicleMake.BMW);

            Assert.AreEqual(199, v3_1[0].Miles);

            var v4 = inventory.List().FindByMake(VehicleMake.Ford);

            Assert.AreEqual(0, v4.Count);

            var stringList = inventory.ListAsString(SortOrder.Vin);

            Assert.IsTrue(stringList.Contains("vinnumber3"));
            Assert.IsTrue(stringList.Contains("vinnumber1"));
            // verify that the BMW has the disclaimer
            Assert.IsTrue(stringList.Contains("Copyright BMW AG, Munich, Germany"));

            // test for tesla manufacturer info
            Assert.IsTrue(stringList.Contains("Teslaphone"));
        }
예제 #4
0
        public static void BuyDrugs(Client player, int amount)
        {
            if (!Main.Players.ContainsKey(player))
            {
                return;
            }
            if (!player.IsInVehicle || !player.Vehicle.HasData("CANDRUGS"))
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы должны находиться в машине, которая может перевозить наркотики", 3000);
                return;
            }
            if (Fractions.Manager.FractionTypes[Main.Players[player].FractionID] != 1)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете закупать наркотики", 3000);
                return;
            }
            if (!Fractions.Manager.canUseCommand(player, "buydrugs"))
            {
                return;
            }

            var tryAdd = VehicleInventory.TryAdd(player.Vehicle, new nItem(ItemType.Drugs, amount));

            if (tryAdd == -1 || tryAdd > 0)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Недостаточно места в машине", 3000);
                return;
            }
            if (Fractions.Stocks.fracStocks[Main.Players[player].FractionID].Money < amount * PricePerDrug)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Недостаточно средств на складе банды", 3000);
                return;
            }

            VehicleInventory.Add(player.Vehicle, new nItem(ItemType.Drugs, amount));
            Fractions.Stocks.fracStocks[Main.Players[player].FractionID].Money -= amount * PricePerDrug;

            Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы закупили {amount}г наркотиков", 3000);
        }
예제 #5
0
        public static void interactPressed(Client player, int interact)
        {
            switch (interact)
            {
            case 15:
                if (player.IsInVehicle)
                {
                    return;
                }
                if (player.HasData("FOLLOWING"))
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вас кто-то тащит за собой", 3000);
                    return;
                }
                player.SetData("IN_HOSPITAL", true);
                NAPI.Entity.SetEntityPosition(player, emsCheckpoints[1] + new Vector3(0, 0, 1.12));
                Main.PlayerEnterInterior(player, emsCheckpoints[1] + new Vector3(0, 0, 1.12));
                return;

            case 16:
                if (player.HasData("FOLLOWING"))
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вас кто-то тащит за собой", 3000);
                    return;
                }
                if (NAPI.Player.GetPlayerHealth(player) < 100)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы должны сначала закончить лечение", 3000);
                    break;
                }

                /*if (player.HasData("HEAL_TIMER"))
                 * {
                 *  Main.StopT(player.GetData("HEAL_TIMER"));
                 *  player.ResetData("HEAL_TIMER");
                 *  Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Ваше лечение закончено", 3000);
                 * }*/
                player.SetData("IN_HOSPITAL", false);
                NAPI.Entity.SetEntityPosition(player, emsCheckpoints[0] + new Vector3(0, 0, 1.12));
                Main.PlayerEnterInterior(player, emsCheckpoints[0] + new Vector3(0, 0, 1.12));
                return;

            case 17:
                if (Main.Players[player].FractionID != 8)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не сотрудник EMS", 3000);
                    return;
                }
                if (!player.GetData("ON_DUTY"))
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не начали рабочий день", 3000);
                    return;
                }
                if (!Stocks.fracStocks[8].IsOpen)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Склад закрыт", 3000);
                    return;
                }
                OpenHospitalStockMenu(player);
                return;

            case 18:
                if (Main.Players[player].FractionID == 8)
                {
                    if (!NAPI.Data.GetEntityData(player, "ON_DUTY"))
                    {
                        Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы начали рабочий день", 3000);
                        Manager.setSkin(player, 8, Main.Players[player].FractionLVL);
                        NAPI.Data.SetEntityData(player, "ON_DUTY", true);
                        break;
                    }
                    else
                    {
                        Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы закончили рабочий день", 3000);
                        Customization.ApplyCharacter(player);
                        if (player.HasData("HAND_MONEY"))
                        {
                            player.SetClothes(5, 45, 0);
                        }
                        else if (player.HasData("HEIST_DRILL"))
                        {
                            player.SetClothes(5, 41, 0);
                        }
                        NAPI.Data.SetEntityData(player, "ON_DUTY", false);
                        break;
                    }
                }
                else
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не сотрудник EMS", 3000);
                }
                return;

            case 19:
                if (NAPI.Player.GetPlayerHealth(player) > 99)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не нуждаетесь в лечении", 3000);
                    break;
                }
                if (player.HasData("HEAL_TIMER"))
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы уже лечитесь", 3000);
                    break;
                }
                Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы начали лечение", 3000);
                //player.SetData("HEAL_TIMER", Main.StartT(3750, 3750, (o) => healTimer(player), "HEAL_TIMER"));
                player.SetData("HEAL_TIMER", Timers.Start(3750, () => healTimer(player)));
                return;

            case 51:
                OpenTattooDeleteMenu(player);
                return;

            case 58:
                if (Main.Players[player].FractionID != 8)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не сотрудник EMS", 3000);
                    break;
                }
                if (!player.IsInVehicle || !player.Vehicle.HasData("CANMEDKITS"))
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не в машине или Ваша машина не может перевозить аптечки", 3000);
                    break;
                }

                var medCount = VehicleInventory.GetCountOfType(player.Vehicle, ItemType.HealthKit);
                if (medCount >= 50)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"В машине максимум аптечек", 3000);
                    break;
                }
                if (HumanMedkitsLefts <= 0)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Аптечки закончились. Приезжайте за новыми через час", 3000);
                    break;
                }
                var toAdd = (HumanMedkitsLefts > 50 - medCount) ? 50 - medCount : HumanMedkitsLefts;
                HumanMedkitsLefts = toAdd;

                VehicleInventory.Add(player.Vehicle, new nItem(ItemType.HealthKit, toAdd));
                Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы заполнили машину аптечками", 3000);
                return;

            case 63:
                if (Main.Players[player].FractionID != 8)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не сотрудник EMS", 3000);
                    break;
                }
                if (player.IsInVehicle)
                {
                    return;
                }
                if (player.Position.Z > 50)
                {
                    if (player.HasData("FOLLOWING"))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вас кто-то тащит за собой", 3000);
                        return;
                    }
                    player.SetData("IN_HOSPITAL", true);
                    NAPI.Entity.SetEntityPosition(player, emsCheckpoints[8] + new Vector3(0, 0, 1.12));
                    Main.PlayerEnterInterior(player, emsCheckpoints[8] + new Vector3(0, 0, 1.12));
                }
                else
                {
                    if (player.HasData("FOLLOWING"))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вас кто-то тащит за собой", 3000);
                        return;
                    }
                    player.SetData("IN_HOSPITAL", false);
                    NAPI.Entity.SetEntityPosition(player, emsCheckpoints[7] + new Vector3(0, 0, 1.12));
                    Main.PlayerEnterInterior(player, emsCheckpoints[7] + new Vector3(0, 0, 1.12));
                }
                return;
            }
        }
예제 #6
0
        public static void loadMaterialsTimer(Client player)
        {
            NAPI.Task.Run(() =>
            {
                try
                {
                    if (!player.HasData("vehicleMats"))
                    {
                        return;
                    }
                    if (!player.IsInVehicle)
                    {
                        return;
                    }
                    Vehicle vehicle = player.GetData("vehicleMats");

                    var itemCount = VehicleInventory.GetCountOfType(player.Vehicle, ItemType.Material);
                    if (player.GetData("whereLoad") == "WAR" && !Fractions.MatsWar.isWar)
                    {
                        player.SetData("INTERACTIONCHECK", 0);
                        //Main.StopT(player.GetData("loadMatsTimer"), "loadMaterialsTimer");
                        player.ResetData("loadMatsTimer");
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Корабль уже уехал", 3000);
                        return;
                    }
                    if (itemCount >= Fractions.Stocks.maxMats[vehicle.DisplayName])
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"В машине максимальное кол-во материала", 3000);
                        //Main.StopT(player.GetData("loadMatsTimer"), "loadMaterialsTimer_1");
                        player.ResetData("loadMatsTimer");
                        return;
                    }
                    var data = new nItem(ItemType.Material);
                    if (player.GetData("whereLoad") == "WAR")
                    {
                        var count = Fractions.Stocks.maxMats[vehicle.DisplayName] - itemCount;
                        if (count >= Fractions.MatsWar.matsLeft)
                        {
                            data.Count = itemCount + Fractions.MatsWar.matsLeft;
                            Fractions.MatsWar.matsLeft = 0;
                            Fractions.MatsWar.endWar();
                        }
                        else
                        {
                            data.Count = count;
                            Fractions.MatsWar.matsLeft -= count;
                        }
                    }
                    else
                    {
                        data.Count = Fractions.Stocks.maxMats[vehicle.DisplayName] - itemCount;
                    }
                    VehicleInventory.Add(vehicle, data);
                    NAPI.Data.ResetEntityData(vehicle, "loaderMats");
                    //Main.StopT(player.GetData("loadMatsTimer"), "loadMaterialsTimer_2");
                    player.ResetData("loadMatsTimer");
                    Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, $"Вы загрузили материалы в машину", 3000);
                }
                catch (Exception e) { Log.Write("LoadMatsTimer: " + e.Message, nLog.Type.Error); }
            });
        }