public void execute(GameSession gameSession, byte[] bytes)
        {
            var read = new BuildStationRequest();

            read.readCommand(bytes);

            var player        = gameSession.Player;
            var battleStation = player.Spacemap.GetActivatableMapEntity(read.battleStationId) as BattleStation;

            if (battleStation != null)
            {
                if (player.Position.DistanceTo(battleStation.Position) > 700)
                {
                    player.SendCommand(BattleStationErrorCommand.write(BattleStationErrorCommand.OUT_OF_RANGE));
                    return;
                }

                if (battleStation.EquippedStationModule[player.Clan.Id].Count != 10 || battleStation.InBuildingState || battleStation.Clan.Id != 0)
                {
                    return;
                }

                if (battleStation.Destroyed)
                {
                    battleStation.Destroyed = false;
                }

                battleStation.InBuildingState = true;
                battleStation.Clan            = player.Clan;

                foreach (var module in battleStation.EquippedStationModule[player.Clan.Id])
                {
                    module.Clan      = player.Clan;
                    module.FactionId = module.Clan.FactionId;
                }

                battleStation.FactionId          = battleStation.Clan.FactionId;
                battleStation.BuildTimeInMinutes = 0;
                battleStation.buildTime          = DateTime.Now;

                Program.TickManager.AddTick(battleStation);

                battleStation.AddVisualModifier(VisualModifierCommand.BATTLESTATION_CONSTRUCTING, 0, "", 0, true);

                player.SendCommand(BattleStationBuildingStateCommand.write(battleStation.Id, battleStation.Id, battleStation.Name, (int)TimeSpan.FromMinutes(battleStation.BuildTimeInMinutes).TotalSeconds, 3600, battleStation.Clan.Name, new FactionModule((short)battleStation.FactionId)));

                QueryManager.BattleStations.BattleStation(battleStation);
                QueryManager.BattleStations.Modules(battleStation);
            }
        }
Beispiel #2
0
        public override void Click(GameSession gameSession)
        {
            var player = gameSession.Player;

            int secondsLeft = (int)(TimeSpan.FromMinutes(BuildTimeInMinutes).TotalSeconds - (DateTime.Now - buildTime).TotalSeconds);

            if (InBuildingState)
            {
                player.SendCommand(BattleStationBuildingStateCommand.write(Id, Id, Name, secondsLeft, 0, Clan.Name, new FactionModule((short)FactionId)));
            }
            else
            {
                if (player.Clan.Id == 0)
                {
                    player.SendCommand(BattleStationNoClanUiInitializationCommand.write(Id));
                }
                else
                {
                    var stationModuleModule = new List <StationModuleModule>();

                    if (EquippedStationModule.ContainsKey(player.Clan.Id))
                    {
                        foreach (var mm in EquippedStationModule[player.Clan.Id])
                        {
                            if (mm.Type == StationModuleModule.HULL || mm.Type == StationModuleModule.DEFLECTOR)
                            {
                                mm.CurrentHitPoints    = CurrentHitPoints;
                                mm.MaxHitPoints        = MaxHitPoints;
                                mm.CurrentShieldPoints = CurrentShieldPoints;
                                mm.MaxShieldPoints     = MaxShieldPoints;
                            }

                            stationModuleModule.Add(new StationModuleModule(Id, mm.ItemId, mm.SlotId, mm.Type, mm.CurrentHitPoints,
                                                                            mm.MaxHitPoints, mm.CurrentShieldPoints, mm.MaxShieldPoints, 16, QueryManager.GetUserPilotName(mm.OwnerId), 0, mm.InstallationSecondsLeft, 0, 0, 500));
                        }
                    }

                    var playerModules = new List <StationModuleModule>();

                    for (var i = 0; i < player.Storage.BattleStationModules.Count; i++)
                    {
                        if (!player.Storage.BattleStationModules[i].InUse)
                        {
                            playerModules.Add(new StationModuleModule(Id, player.Storage.BattleStationModules[i].Id, i, player.Storage.BattleStationModules[i].Type, 1, 1, 1, 1, 16, QueryManager.GetUserPilotName(player.Id), 0, 0, 0, 0, 500));
                        }
                    }

                    if (Clan.Id != 0 && player.Clan.Id == Clan.Id)
                    {
                        player.SendCommand(BattleStationManagementUiInitializationCommand.write(
                                               Id,
                                               Id,
                                               Name,
                                               Clan.Name,
                                               new FactionModule((short)FactionId),
                                               new BattleStationStatusCommand(Id, Id, Name, DeflectorActive, 0, DeflectorSecondsMax, 0, 0, 0, 0, 0, 0, 0, 0, new EquippedModulesModule(stationModuleModule)),
                                               new AvailableModulesCommand(playerModules),
                                               0,
                                               0,
                                               0,
                                               false));
                    }
                    else
                    {
                        var bestClan = EquippedStationModule.Values.Where(x => x.Where(y => y.Installed).ToList().Count() > 0).ToList().Count > 0 ? EquippedStationModule.OrderByDescending(x => x.Value.Count) : null;
                        player.SendCommand(BattleStationBuildingUiInitializationCommand.write(Id, Id, Name,
                                                                                              new AsteroidProgressCommand(
                                                                                                  Id,
                                                                                                  (float)(EquippedStationModule.ContainsKey(player.Clan.Id) ? EquippedStationModule[player.Clan.Id].Where(x => x.Installed).ToList().Count : 0) / 10,
                                                                                                  (float)(bestClan != null ? bestClan.FirstOrDefault().Value.Where(x => x.Installed).ToList().Count : 0) / 10,
                                                                                                  player.Clan.Name,
                                                                                                  bestClan != null ? GameManager.GetClan(bestClan.FirstOrDefault().Key)?.Name : "Leading clan's progress",
                                                                                                  new EquippedModulesModule(EquippedStationModule.ContainsKey(player.Clan.Id) ? stationModuleModule : new List <StationModuleModule>()),
                                                                                                  (EquippedStationModule.ContainsKey(player.Clan.Id) ? EquippedStationModule[player.Clan.Id].Where(x => x.Installed).ToList().Count : 0) == 10),
                                                                                              new AvailableModulesCommand(playerModules),
                                                                                              1,
                                                                                              60,
                                                                                              0));
                    }
                }
            }
        }