Example #1
0
        public Task BuyCar(User player, int dealerId, string carId)
        {
            var nextCarId      = Main.database.CarCollection.AsQueryable().ToList().Count + 1;
            var dbDealer       = Main.database.VehShopCollection.AsQueryable().FirstOrDefault(v => v.Id == dealerId);
            var dbDealerCar    = dbDealer.Cars.ToList().ElementAt(Int32.Parse(carId));
            var numPlate       = "";
            var numPlateExists = false;

            var isPunktBlocked = Alt.GetAllVehicles().ToList().FirstOrDefault(v => v.Position.IsInRange(dbDealer.SpawnPosition.ToAltPos(), 1.5f));

            if (isPunktBlocked != null)
            {
                NotifyHandler.SendNotification(player, "Der Ausparkpunkt ist zurzeit blockiert!");
                return(Task.CompletedTask);
            }

            do
            {
                var random       = new Random();
                var randomNumber = random.Next(10000, 99999);

                numPlate = "CAR" + randomNumber;

                var dbNumPlate = Main.database.CarCollection.AsQueryable().FirstOrDefault(c => c.numPlate == numPlate);

                if (dbNumPlate != null)
                {
                    numPlateExists = true;
                }
            } while (numPlateExists);

            var newCar = new Carcollection()
            {
                allowedIds = new List <int>(), parkedIn = false, carId = nextCarId, carmodel = dbDealerCar.Model,
                fuel       = 100, fuelType = 1, garageId = 1, kilometer = 0, numPlate = numPlate, ownerId = player.playerId
            };

            Main.database.CarCollection.InsertOne(newCar);
            var spawnVeh = (Car)Alt.CreateVehicle(dbDealerCar.Model, dbDealer.SpawnPosition.ToAltPos(), dbDealer.SpawnRotation.ToAltPos());

            spawnVeh.numPlate            = newCar.numPlate;
            spawnVeh.carmodel            = newCar.carmodel;
            spawnVeh.ownerId             = newCar.ownerId;
            spawnVeh.NumberplateText     = numPlate;
            spawnVeh.allowedIds          = new List <int>();
            spawnVeh.fuel                = 100f;
            spawnVeh.kilometer           = 0;
            spawnVeh.carId               = newCar.carId;
            spawnVeh.ManualEngineControl = true;
            spawnVeh.EngineOn            = false;
            spawnVeh.LockState           = VehicleLockState.Locked;

            return(Task.CompletedTask);
        }
        public async Task ClientStartInteract(User player)
        {
            var dbChar             = Utils.Utils.GetDatabaseCharacter(player);
            var buergerBuero       = BuergerBueros.buergerBueroList.ToList().FirstOrDefault(x => player.Position.IsInRange(x.pos, 1.5f));
            var vehShop            = ServerNPCS.ServerNPCList.ToList().FirstOrDefault(x => player.Position.IsInRange(x.pos, 1.5f));
            var atm                = ATMS.atmInteractions.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Position), 1.5f));
            var garage             = GarageInteractions.garageList.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 1.5f));
            var itemshop           = itemShopInteraction.shopList.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 2f));
            var paintball          = paintballInteraction.paintballNPCs.ToList().FirstOrDefault(x => player.Position.IsInRange(x.pos, 2f));
            var tankstelle         = fuelStationInteract.fuelStationList.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 20f));
            var kleidershop        = ClothingStoreInteraction.clothingStores.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 5f));
            var feld               = feldInteraction.feldListe.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.pos), x.radius));
            var fraknpc            = FrakNPCInteraction.frakNPCList.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 3f));
            var carshop            = VehShopInteraction.vehShops.ToList().FirstOrDefault(x => player.Position.IsInRange(ATMS.atmInteraction.toAltPos(x.Pos), 2f));
            var frakGarage         = FrakGarageInteraction.frakGarages.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Pos.ToAltPos(), 2.5f));
            var ammunation         = AmmunationInteraction.AmmunationList.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Pos.ToAltPos(), 2.5f));
            var kleiderschrank     = KleiderSchrankInteraction.KlederSchränke.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Position.ToAltPos(), x.Range));
            var jumppoint          = JumpPointInteraction.JumpPointList.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Position.ToAltPos(), 2f));
            var frakkleiderschrank = FrakKleiderSchrankInteraction.KlederSchränke.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Position.ToAltPos(), 2f));
            var itemproducer       = ItemProductionInteraction.ItemProductionList.ToList().FirstOrDefault(x => player.Position.IsInRange(x.Position.ToAltPos(), 5f));

            if (buergerBuero != null)
            {
                player.Emit("client:cef:loadBürgerBüro", true);
            }
            if (vehShop != null)
            {
            }
            if (atm != null)
            {
                var konto = Main.database.BankCollection.AsQueryable().FirstOrDefault(k => k.objectOwnerId == dbChar.id);
                player.Emit("client:cef:loadAtm", konto.kontoPin, konto.kontoStand);
            }
            if (garage != null)
            {
                #region Fetch parked in cars
                var carPool = Main.database.CarCollection.AsQueryable().ToList();
                var cars    = new List <Carcollection>();
                foreach (var car in carPool)
                {
                    if (car.ownerId == dbChar.playerId && car.parkedIn && car.garageId == garage.garageId || car.allowedIds.Contains(dbChar.playerId) && car.parkedIn && car.garageId == garage.garageId)
                    {
                        var tempCar = new Carcollection()
                        {
                            carmodel = car.carmodel,
                            numPlate = car.numPlate,
                            carId    = car.carId,
                            parkedIn = true
                        };
                        cars.Add(tempCar);
                    }
                }

                #endregion
                #region Fetch cars nearby
                var carpool = Alt.GetAllVehicles();
                // ReSharper disable once PossibleInvalidCastExceptionInForeachLoop
                foreach (Car car in carpool)
                {
                    if (car.frakId > 0)
                    {
                        continue;
                    }

                    if (car.Position.IsInRange(ATMS.atmInteraction.toAltPos(garage.Pos), 30f))
                    {
                        if (car.frakId != 0)
                        {
                            continue;
                        }
                        if (car.carId == 0)
                        {
                            continue;
                        }
                        if (car.ownerId == dbChar.playerId || car.allowedIds.Contains(dbChar.playerId))
                        {
                            var listCar = new Carcollection()
                            {
                                carmodel = car.carmodel,
                                numPlate = car.numPlate,
                                objectId = car.objectId,
                                parkedIn = false
                            };
                            cars.Add(listCar);
                        }
                    }
                }
                var carList = JsonConvert.SerializeObject(cars);
                player.Emit("client:cef:hud:loadgarage", carList, garage.garageId);
                #endregion
            }
            if (itemshop != null)
            {
                var itemList = new List <itemShopInteraction.ShopClientItem>();

                var shopItems = itemshop.shopItems;
                foreach (var item in shopItems)
                {
                    var dbItem  = Main.database.ItemCollection.AsQueryable().FirstOrDefault(i => i.itemId == item);
                    var newItem = new itemShopInteraction.ShopClientItem()
                    {
                        name = dbItem.name, price = dbItem.price.Value, itemId = dbItem.itemId
                    };
                    itemList.Add(newItem);
                }
                player.Emit("client:cef:loadItemShop", JsonConvert.SerializeObject(itemList), itemshop.shopId);
            }
            if (paintball != null)
            {
                var arenaList = Main.database.PaintballCollection.AsQueryable().ToList();
                player.Emit("client:cef:loadPaintball", JsonConvert.SerializeObject(arenaList));
            }

            if (tankstelle != null)
            {
                var vehicle = (Car)player.Vehicle;
                if (player.IsInVehicle)
                {
                    player.Emit("client:hud:showGasstation", vehicle.carId);
                }
            }

            if (kleidershop != null)
            {
                List <ClothesCollection> kleiderListe = new List <ClothesCollection>();

                switch (kleidershop.storeType)
                {
                case 1:
                    kleiderListe = Utils.Utils.Clothes.ponsonList.Where(c => int.Parse(c.gender) == player.sex || int.Parse(c.gender) == 3).ToList();
                    break;

                case 2:
                    kleiderListe = Utils.Utils.Clothes.suburbanList.Where(c => int.Parse(c.gender) == player.sex || int.Parse(c.gender) == 3).ToList();
                    break;

                case 3:
                    kleiderListe = Utils.Utils.Clothes.discountList.Where(c => int.Parse(c.gender) == player.sex || int.Parse(c.gender) == 3).ToList();
                    break;
                }


                var itemCount  = (int)kleiderListe.Count;
                var iterations = Math.Floor((decimal)(itemCount / 200));
                var rest       = itemCount % 200;
                for (var i = 0; i < iterations; i++)
                {
                    var skip = i * 200;
                    player.Emit("client:loadClothesStore", JsonConvert.SerializeObject(kleiderListe.Skip(skip).Take(200).ToList()));
                }
                if (rest != 0)
                {
                    player.Emit("client:loadClothesStore", JsonConvert.SerializeObject(kleiderListe.Skip((int)iterations * 200).ToList()));
                }
            }

            if (feld != null)
            {
                player.Emit("client:feld:farmen", feld.id);
            }

            if (fraknpc != null)
            {
                if (player.frakId != fraknpc.frakId)
                {
                    await NotifyHandler.SendNotification(player, $"({fraknpc.frakId}) Keine Rechte!");

                    return;
                }

                var itemList = new List <itemShopInteraction.ShopClientItem>();

                var shopItems = fraknpc.frakShopItems;
                foreach (var item in shopItems)
                {
                    var dbItem  = Main.database.ItemCollection.AsQueryable().FirstOrDefault(i => i.itemId == item.itemId);
                    var newItem = new itemShopInteraction.ShopClientItem()
                    {
                        name = dbItem.name, price = item.itemPrice, itemId = item.itemId
                    };
                    itemList.Add(newItem);
                }
                player.Emit("client:loadFrakShop", JsonConvert.SerializeObject(itemList), fraknpc.frakId);
            }

            if (carshop != null)
            {
                player.Emit("client:loadCarDealer", JsonConvert.SerializeObject(carshop.Cars), carshop.Id);
            }

            if (frakGarage != null)
            {
                if (player.frakId != frakGarage.FrakId)
                {
                    await NotifyHandler.SendNotification(player, $"Keine Rechte [{frakGarage.FrakId}]");

                    return;
                }
                var carPool = Main.database.FrakcarCollection.AsQueryable().ToList();
                var cars    = new List <frakCarCollection>();
                foreach (var car in carPool)
                {
                    if (car.frakId == dbChar.frakId && car.parkedIn && car.garageId == frakGarage.Id)
                    {
                        var tempCar = new frakCarCollection()
                        {
                            carmodel = car.carmodel,
                            numPlate = car.numPlate,
                            carId    = car.carId,
                            parkedIn = true
                        };
                        cars.Add(tempCar);
                    }
                }
                var carpool = Alt.GetAllVehicles();
                foreach (Car car in carpool)
                {
                    if (car.Position.IsInRange(ATMS.atmInteraction.toAltPos(frakGarage.Pos), 30f))
                    {
                        if (car.frakId != frakGarage.FrakId)
                        {
                            continue;
                        }
                        if (car.carId == 0)
                        {
                            continue;
                        }
                        if (car.frakId == dbChar.frakId)
                        {
                            var listCar = new frakCarCollection()
                            {
                                numPlate = car.numPlate,
                                carmodel = car.carmodel,
                                parkedIn = false,
                                carId    = car.carId
                            };
                            cars.Add(listCar);
                        }
                    }
                }

                var carList = JsonConvert.SerializeObject(cars);

                player.Emit("client:cef:hud:loadfrakgarage", carList, dbChar.frakId);
            }

            if (ammunation != null)
            {
                var itemList = new List <itemShopInteraction.ShopClientItem>();
                foreach (var item in ammunation.Inventory)
                {
                    var dbItem  = Main.database.ItemCollection.AsQueryable().FirstOrDefault(i => i.itemId == item.ItemId);
                    var newItem = new itemShopInteraction.ShopClientItem()
                    {
                        name = dbItem.name, price = item.Price, itemId = item.ItemId
                    };
                    itemList.Add(newItem);
                }

                Console.WriteLine($"AmmoID: {ammunation.Id}");
                player.Emit("client:loadAmmunation", JsonConvert.SerializeObject(itemList), ammunation.Id);
            }

            if (kleiderschrank != null)
            {
                //Get Player Clothing

                var clothing = new List <ClientClothing>();

                var ownedClothing = dbChar.OwnedClothes;
                if (player.sex == 1)
                {
                    clothing.Add(new ClientClothing()
                    {
                        ComponentId = 8, ColorId = 0, DrawableId = 57, ClothId = 11586, Name = "Kein Undershirt"
                    });
                }
                if (player.sex == 0)
                {
                    clothing.Add(new ClientClothing()
                    {
                        ComponentId = 8, ColorId = 0, DrawableId = 34, ClothId = 2393, Name = "Kein Undershirt"
                    });
                }


                foreach (var cloth in ownedClothing)
                {
                    var dbCloth = Main.database.ClothesCollection.AsQueryable()
                                  .FirstOrDefault(c => c.clothId == cloth.ToString());

                    var newcloth = new ClientClothing()
                    {
                        ComponentId = int.Parse(dbCloth.componentId), ColorId = int.Parse(dbCloth.colorId), DrawableId = int.Parse(dbCloth.drawableId), ClothId = int.Parse(dbCloth.clothId)
                    };
                    clothing.Add(newcloth);
                }

                foreach (var torso in Main.database.ClothesCollection.AsQueryable().Where(c => c.componentId == "3").Where(c => c.gender == player.sex.ToString()))
                {
                    var newcloth = new ClientClothing()
                    {
                        ComponentId = int.Parse(torso.componentId), ColorId = int.Parse(torso.colorId), DrawableId = int.Parse(torso.drawableId), ClothId = int.Parse(torso.clothId)
                    };
                    clothing.Add(newcloth);
                }

                player.Emit("client:openCloset", JsonConvert.SerializeObject(clothing));
            }

            if (jumppoint != null)
            {
                player.Position = jumppoint.TargetPosition.ToAltPos();
            }

            if (frakkleiderschrank != null)
            {
                var clothing = new List <ClientClothing>();
                if (player.sex == 1)
                {
                    clothing.Add(new ClientClothing()
                    {
                        ComponentId = 8, ColorId = 0, DrawableId = 57, ClothId = 11586, Name = "Kein Undershirt"
                    });
                    clothing.Add(new ClientClothing()
                    {
                        PropId = 0, ColorId = 0, DrawableId = 8, ClothId = 15035, Name = "Keine Kopfbedeckung"
                    });
                }

                if (player.sex == 0)
                {
                    clothing.Add(new ClientClothing()
                    {
                        ComponentId = 8, ColorId = 0, DrawableId = 34, ClothId = 2393, Name = "Kein Undershirt"
                    });
                    clothing.Add(new ClientClothing()
                    {
                        PropId = 0, ColorId = 0, DrawableId = 57, ClothId = 15036, Name = "Keine Kopfbedeckung"
                    });
                }
                clothing.Add(new ClientClothing()
                {
                    ComponentId = 7, ColorId = 0, DrawableId = 0, ClothId = 15034, Name = "Kein Accessoir"
                });
                clothing.Add(new ClientClothing()
                {
                    ComponentId = 9, ColorId = 0, DrawableId = 0, ClothId = 15030, Name = "Keine Weste"
                });
                clothing.Add(new ClientClothing()
                {
                    ComponentId = 1, ColorId = 0, DrawableId = 0, ClothId = 15033, Name = "Keine Maske"
                });

                var ownedClothing = dbChar.OwnedClothes;


                foreach (var cloth in ownedClothing)
                {
                    var dbCloth = Utils.Utils.CachedColthing
                                  .FirstOrDefault(c => c.clothId == cloth.ToString());

                    var newcloth = new ClientClothing()
                    {
                        ComponentId = int.Parse(dbCloth.componentId), ColorId = int.Parse(dbCloth.colorId), DrawableId = int.Parse(dbCloth.drawableId), ClothId = int.Parse(dbCloth.clothId)
                    };
                    clothing.Add(newcloth);
                }

                foreach (var torso in Utils.Utils.CachedColthing.Where(c => c.componentId == "3").Where(c => c.gender == player.sex.ToString()))
                {
                    var newcloth = new ClientClothing()
                    {
                        ComponentId = int.Parse(torso.componentId), ColorId = int.Parse(torso.colorId), DrawableId = int.Parse(torso.drawableId), ClothId = int.Parse(torso.clothId)
                    };
                    clothing.Add(newcloth);
                }

                foreach (var frakClothing in frakkleiderschrank.Clothing)
                {
                    var dbCloth = Utils.Utils.CachedColthing
                                  .FirstOrDefault(c => c.clothId == frakClothing.ToString());

                    if (dbCloth.gender.ToLower() != player.sex.ToString().ToLower() && dbCloth.gender.ToLower() != "3")
                    {
                        continue;
                    }
                    if (string.IsNullOrEmpty(dbCloth.componentId) && string.IsNullOrEmpty(dbCloth.propId))
                    {
                        continue;
                    }
                    if (!string.IsNullOrEmpty(dbCloth.componentId))
                    {
                        var newcloth = new ClientClothing()
                        {
                            ComponentId = int.Parse(dbCloth.componentId), ColorId = int.Parse(dbCloth.colorId), DrawableId = int.Parse(dbCloth.drawableId), ClothId = int.Parse(dbCloth.clothId), Name = dbCloth.name
                        };
                        clothing.Add(newcloth);
                    }
                    else if (!string.IsNullOrEmpty(dbCloth.propId))
                    {
                        var newprop = new ClientClothing()
                        {
                            PropId = int.Parse(dbCloth.propId), ColorId = int.Parse(dbCloth.colorId), DrawableId = int.Parse(dbCloth.drawableId), ClothId = int.Parse(dbCloth.clothId), Name = dbCloth.name
                        };
                        clothing.Add(newprop);
                    }
                }
                Console.WriteLine($"OpenCloset {clothing.Count}");
                player.Emit("client:openCloset", JsonConvert.SerializeObject(clothing), player.sex);
            }

            if (itemproducer != null)
            {
                Console.WriteLine("found itemproducer");

                var dbchar       = Utils.Utils.GetDatabaseCharacter(player);
                var dbItemInput  = Main.database.ItemCollection.AsQueryable().FirstOrDefault(i => i.itemId == itemproducer.NeededItemId);
                var dbItemOutput = Main.database.ItemCollection.AsQueryable().FirstOrDefault(i => i.itemId == itemproducer.OutComeItemId);
                var producerData = new
                {
                    Name       = itemproducer.Name,
                    Id         = itemproducer.Id,
                    CurrentIn  = dbchar.ItemVerarbeiter.CurrentIn,
                    CurrentOut = dbchar.ItemVerarbeiter.CurrentOut,
                    InputId    = itemproducer.NeededItemId,
                    OutputId   = itemproducer.OutComeItemId,
                    InputName  = dbItemInput.name,
                    OutputName = dbItemOutput.name
                };

                player.Emit("client:openProducer", JsonConvert.SerializeObject(producerData));
            }
        }