Example #1
0
        public async Task <IActionResult> Edit(int id, [Bind("ID,Name,UserID,DepartGarageID,ArrivalGarageID,DriverID,VehicleID,BeginTime,EndTime,IsActive")] Expeditions expeditions)
        {
            if (id != expeditions.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(expeditions);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ExpeditionsExists(expeditions.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(expeditions));
        }
Example #2
0
        public void Update(RawMasterInfo rpInfo)
        {
            Ships.UpdateRawData(rpInfo.Ships, r => new ShipInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));
            ShipTypes.UpdateRawData(rpInfo.ShipTypes, r => new ShipTypeInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));

            Equipment.UpdateRawData(rpInfo.Equipment, r => new EquipmentInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));
            EquipmentTypes.UpdateRawData(rpInfo.EquipmentTypes, r => new EquipmentTypeInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));

            Items.UpdateRawData(rpInfo.Items, r => new ItemInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));

            MapAreas.UpdateRawData(rpInfo.MapAreas, r => new MapAreaInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));
            Maps.UpdateRawData(rpInfo.Maps, r => new MapMasterInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));

            Expeditions.UpdateRawData(rpInfo.Expeditions, r => new ExpeditionInfo(r), (rpData, rpRawData) => rpData.Update(rpRawData));

            EventMapCount = (from rArea in MapAreas.Values
                             where rArea.IsEventArea
                             join rMap in Maps.Values on rArea.ID equals rMap.AreaID
                             select rMap).Count();

            if (r_InitializationLock != null)
            {
                r_InitializationLock.Set();
                r_InitializationLock.Dispose();
                r_InitializationLock = null;
            }
        }
        public IActionResult BiletAl(int sefer_id, int user_id, double fiyat)
        {
            Tickets bilet = new Tickets();

            bilet.SeatNumber   = 1;
            bilet.Status       = true;
            bilet.UserId       = user_id;
            bilet.ExpeditionId = sefer_id;
            bilet.TicketPrice  = fiyat;
            _context.Add(bilet);
            _context.SaveChanges();

            Expeditions sefer = new Expeditions();

            sefer = _context.Expeditions.Where(x => x.Id == sefer_id).FirstOrDefault();

            int biletSayısı = _context.Tickets.Where(x => x.ExpeditionId == sefer_id && x.Status == true).Count();

            if (biletSayısı % 5 == 0)
            {
                double yeniFiyat = sefer.Price + ((sefer.Price * 10) / 100);
                sefer.Price = yeniFiyat;
                _context.SaveChanges();
            }
            int id = user_id;

            string message = "Biletiniz Alındı...";

            return(RedirectToAction("Index", "Home", new { id, message }));
        }
Example #4
0
        public async Task <IActionResult> Create([Bind("ID,Name,UserID,DepartGarageID,ArrivalGarageID,DriverID,VehicleID,BeginTime,EndTime,IsActive")] Expeditions expeditions)
        {
            if (ModelState.IsValid)
            {
                _context.Add(expeditions);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(expeditions));
        }
Example #5
0
 public CitySaveData Save_Data()
 {
     return(new CitySaveData()
     {
         Name = Name,
         Cash = Cash,
         Buildings = new List <BuildingSaveData>(),
         Contacts = Contacts.Instance.Save(),
         Expeditions = Expeditions.Select(x => new ExpeditionSaveData()
         {
             Goal = (int)x.Goal, Lenght = (int)x.Lenght, Building_Id = x.Building_Id, Resource = x.Resource != null ? (int)x.Resource.Type : -1,
             State = (int)x.State, Time_Remaining = x.Time_Remaining, Colony_Data = x.Colony_Data == null ? null : x.Colony_Data.Save_Data
         }).ToList(),
         Colony_Locations = Colony_Locations.Select(x => x.Save_Data).ToList()
     });
 }
Example #6
0
        public override void OnInitialized()
        {
            var rMasterInfo = KanColleGame.Current.MasterInfo;

            using (var rCommand = CreateCommand())
            {
                rCommand.CommandText = "SELECT DISTINCT expedition FROM expedition ORDER BY expedition;";
                using (var rReader = rCommand.ExecuteReader())
                {
                    var rExpeditions = new List <ExpeditionInfo>(rReader.VisibleFieldCount);

                    while (rReader.Read())
                    {
                        ExpeditionInfo rExpedition;
                        if (rMasterInfo.Expeditions.TryGetValue(rReader.GetInt32(0), out rExpedition))
                        {
                            rExpeditions.Add(rExpedition);
                        }
                    }

                    Expeditions.AddRange(rExpeditions);
                }
            }
        }
Example #7
0
    public void Update(float delta_time)
    {
        DiagnosticsManager.Instance.Message(GetType(), "--- UPDATE STARTS ---");
        DiagnosticsManager.Instance.Start(GetType(), "total", "Total");
        DiagnosticsManager.Instance.Start(GetType(), "expeditions", "Expeditions");

        if (grace_time_remaining > 0.0f)
        {
            grace_time_remaining = Math.Max(grace_time_remaining - TimeManager.Instance.Seconds_To_Days(delta_time), 0.0f);
        }
        //TODO: Add stopwatch?
        //Expeditions
        foreach (Expedition expedition in Expeditions)
        {
            expedition.Update(delta_time);
        }
        DiagnosticsManager.Instance.End(GetType(), "expeditions");
        DiagnosticsManager.Instance.Start(GetType(), "buildings", "Buildings");

        //Buildings
        foreach (Building building in Buildings)
        {
            if (building is Residence)
            {
                (building as Residence).Update(delta_time);
            }
            else
            {
                building.Update(delta_time);
            }
        }
        foreach (Building building in removed_buildings)
        {
            Buildings.Remove(building);
        }
        removed_buildings.Clear();
        foreach (Building building in added_buildings)
        {
            Buildings.Add(building);
        }
        added_buildings.Clear();

        foreach (Expedition expedition in removed_expeditions)
        {
            Expeditions.Remove(expedition);
        }
        removed_expeditions.Clear();
        foreach (Expedition expedition in added_expeditions)
        {
            Expeditions.Add(expedition);
        }
        added_expeditions.Clear();

        DiagnosticsManager.Instance.End(GetType(), "buildings");
        DiagnosticsManager.Instance.Start(GetType(), "statistics", "Update statistics");

        //Update statistics
        foreach (Resource resource in Resource.All)
        {
            Resource_Totals[resource]        = 0.0f;
            Usable_Resource_Totals[resource] = 0.0f;
            Resource_Max_Storage[resource]   = 0.0f;
            Resource_Delta[resource]         = 0.0f;
        }
        Cash_Delta    = 0.0f;
        Food_Current  = 0.0f;
        Food_Max      = 0.0f;
        Food_Produced = 0.0f;
        Food_Consumed = 0.0f;
        Food_Delta    = 0.0f;

        Dictionary <Building.Resident, int>   current_population = new Dictionary <Building.Resident, int>();
        Dictionary <Building.Resident, int>   max_population     = new Dictionary <Building.Resident, int>();
        Dictionary <Building.Resident, float> happiness          = new Dictionary <Building.Resident, float>();
        Dictionary <Building.Resident, int>   workers_required   = new Dictionary <Building.Resident, int>();
        Dictionary <Building.Resident, int>   available_workers  = new Dictionary <Building.Resident, int>();
        Dictionary <Building.Resident, float> total_education    = new Dictionary <Building.Resident, float>();

        foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
        {
            current_population.Add(resident, 0);
            max_population.Add(resident, 0);
            happiness.Add(resident, 0.0f);
            workers_required.Add(resident, 0);
            available_workers.Add(resident, 0);
            total_education.Add(resident, 0.0f);
        }
        foreach (Building building in Buildings)
        {
            foreach (KeyValuePair <Resource, float> pair in building.Storage)
            {
                Resource_Totals[pair.Key]        += pair.Value;
                Usable_Resource_Totals[pair.Key] += pair.Value;
                if (pair.Key.Is_Food)
                {
                    Food_Current += pair.Value;
                }
            }
            foreach (KeyValuePair <Resource, float> pair in building.Input_Storage)
            {
                Resource_Totals[pair.Key] += pair.Value;
                if (pair.Key.Is_Food)
                {
                    Food_Current += pair.Value;
                }
            }
            foreach (KeyValuePair <Resource, float> pair in building.Output_Storage)
            {
                Resource_Totals[pair.Key] += pair.Value;
                if (pair.Key.Is_Food)
                {
                    Food_Current += pair.Value;
                }
            }
            foreach (KeyValuePair <Resource, float> pair in building.Per_Day_Resource_Delta)
            {
                Resource_Delta[pair.Key] += pair.Value;
            }
            foreach (KeyValuePair <Resource, float> pair in building.Total_Max_Storage)
            {
                Resource_Max_Storage[pair.Key] += pair.Value;
                if (pair.Key.Is_Food)
                {
                    Food_Max += pair.Value;
                }
            }
            Cash_Delta    += building.Per_Day_Cash_Delta;
            Food_Produced += building.Food_Production_Per_Day;
            Food_Delta    += building.Food_Production_Per_Day;
            if (building is Residence)
            {
                Food_Consumed += (building as Residence).Food_Consumed;
                Food_Delta    -= (building as Residence).Food_Consumed;
            }
            if (building.Is_Complete)
            {
                if (building is Residence && building.Is_Operational)
                {
                    Residence residence = building as Residence;
                    foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
                    {
                        current_population[resident] += residence.Current_Residents[resident];
                        available_workers[resident]  += residence.Available_Work_Force[resident];
                        max_population[resident]     += residence.Resident_Space[resident];
                        happiness[resident]          += residence.Happiness[resident] * residence.Current_Residents[resident];
                        total_education[resident]    += residence.Education(resident) * residence.Current_Residents[resident];
                    }
                }
                if (building.Requires_Workers && building.Is_Complete && (building.Is_Connected || !building.Requires_Connection) && (!building.Is_Paused || PAUSED_BUILDINGS_KEEP_WORKERS))
                {
                    foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
                    {
                        workers_required[resident] += building.Worker_Settings[resident];
                    }
                }
            }
        }
        DiagnosticsManager.Instance.End(GetType(), "statistics");
        DiagnosticsManager.Instance.Start(GetType(), "workers", "Allocate workers");

        //Allocate workers
        Dictionary <Building.Resident, float> worker_ratios     = new Dictionary <Building.Resident, float>();
        Dictionary <Building.Resident, int>   workers_allocated = new Dictionary <Building.Resident, int>();

        foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
        {
            worker_ratios.Add(resident, workers_required[resident] == 0 ? 0.0f : current_population[resident] / (float)workers_required[resident]);
            workers_allocated.Add(resident, 0);
        }
        foreach (Building building in Buildings)
        {
            if (!building.Requires_Workers)
            {
                continue;
            }
            foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
            {
                building.Current_Workers[resident] = 0;
            }
            if (!(building.Is_Complete && (building.Is_Connected || !building.Requires_Connection) && (!building.Is_Paused || PAUSED_BUILDINGS_KEEP_WORKERS)))
            {
                continue;
            }
            if (building.Is_Complete && (building.Is_Connected || !building.Requires_Connection) && (!building.Is_Paused || PAUSED_BUILDINGS_KEEP_WORKERS))
            {
                foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
                {
                    int workers = Mathf.RoundToInt(building.Worker_Settings[resident] * Mathf.Clamp(worker_ratios[resident], 0.0f, 1.0f));
                    if (workers > available_workers[resident])
                    {
                        workers = available_workers[resident];
                    }
                    building.Current_Workers[resident] = workers;
                    available_workers[resident]       -= workers;
                    workers_allocated[resident]       += workers;
                    if (available_workers[resident] < 0)
                    {
                        CustomLogger.Instance.Error("More workers allocated, than there is available workers");
                    }
                }
            }
        }

        foreach (Building building in Buildings)
        {
            if (!building.Requires_Workers || !(building.Is_Complete && (building.Is_Connected || !building.Requires_Connection) && (!building.Is_Paused || PAUSED_BUILDINGS_KEEP_WORKERS)))
            {
                continue;
            }
            foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
            {
                if (available_workers[resident] > 0 && worker_ratios[resident] < 1.0f && building.Current_Workers[resident] < building.Worker_Settings[resident])
                {
                    building.Current_Workers[resident]++;
                    available_workers[resident]--;
                    workers_allocated[resident]++;
                }
            }
        }

        foreach (Building.Resident resident in Enum.GetValues(typeof(Building.Resident)))
        {
            if (available_workers[resident] > 0 && workers_allocated[resident] < workers_required[resident])
            {
                CustomLogger.Instance.Error("Worker allocation mismatch, not enough allocated");
            }
            if (workers_allocated[resident] > workers_required[resident])
            {
                CustomLogger.Instance.Error("Worker allocation mismatch, too many allocated");
            }
            if (workers_allocated[resident] > current_population[resident])
            {
                CustomLogger.Instance.Error("Worker allocation mismatch, allocated > population");
            }
        }
        DiagnosticsManager.Instance.End(GetType(), "workers");
        DiagnosticsManager.Instance.Start(GetType(), "walkers", "Spawn walkers");

        //Spawn walkers
        int max = Spawn_Walkers ? Mathf.Min(Mathf.RoundToInt((current_population[Building.Resident.Peasant] + current_population[Building.Resident.Citizen] + current_population[Building.Resident.Noble]) / 30.0f) + 1, 10) : 0;

        if (Walkers.Count < max)
        {
            List <Building> possible_buildings = Buildings.Where(x => x.Is_Connected && x.Requires_Connection && x.Is_Operational && !x.Is_Road && x.Entities_Spawned.Count == 0).ToList();
            if (possible_buildings.Count > 25)  //TODO
            //TODO: Implement faster pathfinding A* ?
            {
                if (Buildings.Count <= 1)
                {
                    //Use pathfinding for paths
                    Building spawner = RNG.Instance.Item(possible_buildings);
                    possible_buildings.Remove(spawner);
                    if (possible_buildings.Count >= 1)
                    {
                        Building road = null;
                        foreach (Building b in Map.Instance.Get_Buildings_Around(spawner))
                        {
                            if (b.Is_Road && b.Is_Built && b.Is_Connected)
                            {
                                road = b;
                                break;
                            }
                        }
                        if (road != null)
                        {
                            Building target_building = RNG.Instance.Item(possible_buildings);//TODO: allow x.Entities_Spawned.Count != 0 in this list
                            Building target_road     = null;
                            foreach (Building b in Map.Instance.Get_Buildings_Around(target_building))
                            {
                                if (b.Is_Road && b.Is_Built && b.Is_Connected)
                                {
                                    target_road = b;
                                    break;
                                }
                            }
                            if (target_road != null)
                            {
                                List <PathfindingNode> path = Pathfinding.Path(Map.Instance.Road_Pathing, road.Tile.PathfindingNode, target_road.Tile.Road_PathfindingNode, false);
                                if (path.Count > 2)
                                {
                                    Entity walker = new Entity(EntityPrototypes.Instance.Get("walker"), road.Tile, spawner);
                                    walker.Set_Path(path, 0.5f);
                                    Walkers.Add(walker);
                                }
                            }
                        }
                    }
                }
                else
                {
                    //Use connected buildings for paths
                    Tile     spawn              = null;
                    Building spawner            = null;
                    List <PathfindingNode> path = Entity.Find_Walker_City_Path(out spawn, out spawner);
                    if (path != null)
                    {
                        Entity walker = new Entity(EntityPrototypes.Instance.Get("walker"), spawn, spawner);
                        walker.Set_Path(path, 0.5f);
                        Walkers.Add(walker);
                    }
                }
            }
        }
        DiagnosticsManager.Instance.End(GetType(), "walkers");
        DiagnosticsManager.Instance.Start(GetType(), "ships", "Spawn ships");

        //Spawn ships
        if (Map.Instance.Ship_Spawns.Count > 0)
        {
            ship_spawn_cooldown -= delta_time * TimeManager.Instance.Multiplier;
            if (ship_spawn_cooldown <= 0.0f)
            {
                ship_spawn_cooldown += 120.0f * (200.0f / (100.0f + ((0.5f * current_population[Building.Resident.Peasant]) + (1.5f * current_population[Building.Resident.Citizen]) + current_population[Building.Resident.Noble]))) *
                                       (RNG.Instance.Next(50, 150) * 0.01f);
                foreach (Building building in Buildings)
                {
                    if (!building.Data.ContainsKey(Building.DOCK_ID_KEY))
                    {
                        continue;
                    }
                    Building dock = Buildings.FirstOrDefault(x => x.Id == long.Parse(building.Data[Building.DOCK_ID_KEY]));
                    if (dock == null || ships.ContainsKey(dock) || building.Tags.Contains(Building.Tag.Creates_Expeditions) || !building.Is_Operational)
                    {
                        continue;
                    }
                    Tile spawn  = RNG.Instance.Item(Map.Instance.Ship_Spawns);
                    Tile target = null;
                    foreach (Tile t in Map.Instance.Get_Adjanced_Tiles(dock.Tile).Select(x => x.Value).ToArray())
                    {
                        if (t.Building == null && t.Has_Ship_Access)
                        {
                            target = t;
                            break;
                        }
                    }
                    if (target == null)
                    {
                        break;
                    }
                    List <PathfindingNode> path = Pathfinding.Path(Map.Instance.Ship_Pathing, spawn.Ship_PathfindingNode, target.Ship_PathfindingNode, false);
                    if (path.Count > 2)
                    {
                        List <PathfindingNode> return_path = Pathfinding.Path(Map.Instance.Ship_Pathing, target.Ship_PathfindingNode, spawn.Ship_PathfindingNode, false);
                        path.AddRange(return_path.Where(x => !x.Coordinates.Equals(target.Coordinates)).ToList());
                        Entity ship = new Entity(EntityPrototypes.Instance.Get("ship"), spawn, dock);
                        ship.Set_Path(path, 0.75f);
                        ship.Add_Order(new Entity.PathOrder(target.Ship_PathfindingNode, 20.0f));
                        ships.Add(dock, ship);
                    }
                }
            }
        }
        DiagnosticsManager.Instance.End(GetType(), "ships");
        DiagnosticsManager.Instance.Start(GetType(), "gui", "Update GUI");

        //GUI
        int   peasant_current   = current_population[Building.Resident.Peasant];
        int   peasant_max       = max_population[Building.Resident.Peasant];
        float peasant_happiness = peasant_current > 0 ? happiness[Building.Resident.Peasant] / peasant_current : 0.0f;

        Happiness[Building.Resident.Peasant] = peasant_happiness;
        int   peasant_employment          = workers_allocated[Building.Resident.Peasant] - workers_required[Building.Resident.Peasant] + available_workers[Building.Resident.Peasant];
        float peasant_employment_relative = peasant_current == 0 ? 0.0f : peasant_employment / (float)peasant_current;

        Unemployment[Building.Resident.Peasant] = peasant_employment_relative > 0.0f ? peasant_employment_relative : 0.0f;
        Education[Building.Resident.Peasant]    = peasant_current == 0 ? 0.0f : total_education[Building.Resident.Peasant] / peasant_current;

        int   citizen_current   = current_population[Building.Resident.Citizen];
        int   citizen_max       = max_population[Building.Resident.Citizen];
        float citizen_happiness = citizen_current > 0 ? happiness[Building.Resident.Citizen] / citizen_current : 0.0f;

        Happiness[Building.Resident.Citizen] = citizen_happiness;
        int   citizen_employment          = workers_allocated[Building.Resident.Citizen] - workers_required[Building.Resident.Citizen] + available_workers[Building.Resident.Citizen];
        float citizen_employment_relative = citizen_current == 0 ? 0.0f : citizen_employment / (float)citizen_current;

        Unemployment[Building.Resident.Citizen] = citizen_employment_relative > 0.0f ? citizen_employment_relative : 0.0f;
        Education[Building.Resident.Citizen]    = citizen_current == 0 ? 0.0f : total_education[Building.Resident.Citizen] / citizen_current;

        int   noble_current   = current_population[Building.Resident.Noble];
        int   noble_max       = max_population[Building.Resident.Noble];
        float noble_happiness = noble_current > 0 ? happiness[Building.Resident.Noble] / noble_current : 0.0f;

        Happiness[Building.Resident.Noble] = noble_happiness;
        int   noble_employment          = workers_allocated[Building.Resident.Noble] - workers_required[Building.Resident.Noble] + available_workers[Building.Resident.Noble];
        float noble_employment_relative = noble_current == 0 ? 0.0f : noble_employment / (float)noble_current;

        Unemployment[Building.Resident.Noble] = noble_employment_relative > 0.0f ? noble_employment_relative : 0.0f;
        Education[Building.Resident.Noble]    = noble_current == 0 ? 0.0f : total_education[Building.Resident.Noble] / noble_current;
        noble_count = noble_current;

        TopGUIManager.Instance.Update_City_Info(Name, Cash, Cash_Delta, Mathf.RoundToInt(Usable_Resource_Totals[Resource.Wood]), Mathf.RoundToInt(Usable_Resource_Totals[Resource.Lumber]), Mathf.RoundToInt(Usable_Resource_Totals[Resource.Stone]),
                                                Mathf.RoundToInt(Usable_Resource_Totals[Resource.Bricks]), Mathf.RoundToInt(Usable_Resource_Totals[Resource.Tools]), Mathf.RoundToInt(Usable_Resource_Totals[Resource.Marble]), Mathf.RoundToInt(Usable_Resource_Totals[Resource.Mechanisms]),
                                                Mathf.RoundToInt(Usable_Resource_Totals[Resource.Glass]), peasant_current, peasant_max, peasant_happiness, peasant_employment_relative, peasant_employment, citizen_current, citizen_max, citizen_happiness,
                                                citizen_employment_relative, citizen_employment, noble_current, noble_max, noble_happiness, noble_employment_relative, noble_employment);

        DiagnosticsManager.Instance.End(GetType(), "gui");
        DiagnosticsManager.Instance.End(GetType(), "total");
    }
Example #8
0
        protected override void OnRecordInsert(string rpTable, long rpRowID)
        {
            base.OnRecordInsert(rpTable, rpRowID);

            Expeditions.AddIfAbsent(LastInsertedRecord.Expedition);
        }