Jump to content
View in the app

A better way to browse. Learn more.

FRONT LINE

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zlodey

Developer
  • Joined

  • Last visited

Everything posted by Zlodey

  1. Хотя, нет, вру. Все уже работает))
  2. Но, работать исправление начнет немного позже.
  3. Не пытайся гадать не понимая как "оно" работает и не видя исходников. Твое дело просто сообщить об ошибке. Хочешь "работать" над проектом, велкам на собес. До: var list = Sortie.Events .Where(x => x.EventType is TypeEventSortie.TakeOff or TypeEventSortie.Landing or TypeEventSortie.IncomingKill) .OrderBy(x => x.EventDate) .ToList();После: /// <summary> /// Рассчитывает общую продолжительность полета (в секундах) на основе событий взлета и посадки в вылете. /// </summary> /// <returns>Продолжительность полета в секундах. Возвращает 0, если вылет или его события отсутствуют.</returns> private long GetDurationFlight() { if (Sortie?.Events == null) return 0; if (TypeVehicle == TypeVehicle.AirCraft) { var list = Sortie.Events .Where(x => x.EventType is TypeEventSortie.TakeOff or TypeEventSortie.Landing or TypeEventSortie.IncomingKill or TypeEventSortie.BotEjectLeave) .OrderBy(x => x.EventDate) .ToList(); long totalDuration = 0; DateTime? takeOffTime = null; foreach (var flightEvent in list) { if (flightEvent.EventType == TypeEventSortie.TakeOff) { // Если мы встречаем взлет, просто запоминаем его время. // Если предыдущий взлет был без посадки, он перезапишется. takeOffTime = flightEvent.EventDate; } // 2. Вычисляем продолжительность, только если был зафиксирован взлет (takeOffTime != null) else if ((flightEvent.EventType == TypeEventSortie.Landing || flightEvent.EventType == TypeEventSortie.IncomingKill || flightEvent.EventType == TypeEventSortie.Crash || flightEvent.EventType == TypeEventSortie.BotEjectLeave) && takeOffTime.HasValue) { // Убедимся, что посадка произошла после взлета if (flightEvent.EventDate > takeOffTime.Value) { totalDuration += (long)(flightEvent.EventDate - takeOffTime.Value).TotalSeconds; } // 4. Сбрасываем время взлета, чтобы ожидать следующую пару "взлет-посадка" takeOffTime = null; } } return totalDuration; } if (TypeVehicle == TypeVehicle.Vehicle) { return (long)(Sortie.EndDate - Sortie.StartDate).TotalSeconds; } return 0; }Для тех, кто не понял - исправлено.
  4. Коммандер обновлен. Исправлены некоторые ошибки, которые приводили к остановке обработки событий на сервере.
  5. Возможно. Есть в планах.
  6. Всем привет! Команда сервера Front Line поздравляет вас с 23 февраля! Хотим пожелать вам железной выдержки, стального терпения и безоговорочных побед - как в жизни, так и на полях сражений «Ил-2 Штурмовик». Спасибо за ваши эмоции, фидбек и за то, что делаете наше сообщество таким живым и сплоченным. Продолжайте держать строй и прорывать линии обороны противника! Желаем вам крепкой брони, полного бака и чтобы «шесть» всегда оставалась чистой! Мирного неба над головой и до встречи на виртуальной Линии Фронта! В честь праздника администрация проекта всем пользователям зарегистрированным и подтвердившим Email, дарит 3 дня премиум подписки. Тем, кто уже имеет подписку +3 дня премиум подписки. Кроме этого, мы обновили стиль и дизайн страницы геймсета. Стиль экспериментальный. Если большинству пользователей понравится, будем распространять данный стиль на весь сайт.
  7. Да? А впечатление складывается иное. Ты переведи с криворукско-кодерского на общедоступный вот это: Ты задал вопрос (боюсь ли я, что ты у меня хлеб отнимешь?), я тебе дал ответ. Не надо возмущаться, так. Юмор, если это именно он, плоский не всем понятен. Я вот тоже готов поюморить, хоть и не понятен буду многим. Но я поддержу тебя, в личном общении с тобой. Будем каждый по своему юморить. Посмотрим у кого получится юморнее. Ну и продолжай рассказывать как правильно делать проект, новости нам приноси, плохие или хорошие. Это забавно.
  8. Тебе все 200К строк выложить? (На скрине только один файл) Хлеб он у меня отнимает)) Бугага, бугагашеньки Я таких как ты, отнимателей, уже несколько видел. И ни один из них, представляешь себе, ни одного проекта не сделал. Хотя пяткой в грудь себя пинали так... что, местами даже верилось... Я второй запустил за это время)) А между ними еще и в других местах успел поработать. Хоспаде, откуда вы беретесь? (Вопрос риторический, отвечать на него не нужно)
  9. /// <summary> /// Обрабатывает прибыль и очки профиля на основе различных условий, /// связанных с текущей игровой ситуацией. /// </summary> /// <param name="profile">Интерфейс профиля, содержащего статистические данные игрока.</param> private void ProcessProfileScore(IProfileStats profile) { if (Sortie == null) return; if (profile == null) return; if (_rootEntity == null) return; if (!TakeOffAllowed) return; var baseDelimiter = 700; decimal maxMultiplicator = 0.25m; decimal maxMultiplierVehicle = 0.04m; decimal maxMultiplierCaptured = 0.1m; bool isApplied = false; decimal resultScore = 0; var ent = FindNodeByIdRecursive(_rootEntity, this.PID); if (ent != null) { if (ent.IsDead) { var basePercent = 13; var multiplicator = (basePercent + (profile.Score / baseDelimiter)) / 100; if (multiplicator > maxMultiplicator) { multiplicator = maxMultiplicator; } _logger.LogWarning( "{method} За смерть персонажа. Игрок: {gamer}, тип: {type}, Очков было: {startScore}, вычитаем: {minus} результат: {result} коэф.: {multiplicator}", nameof(ProcessProfileScore), this.NAME, this.TYPE, profile.Score, profile.Score * multiplicator, profile.Score - profile.Score * multiplicator, multiplicator); resultScore -= profile.Score * multiplicator; profile.Score -= profile.Score * multiplicator; if (profile.Score < 0) { profile.Score = 0; } profile.AirStreak = 0; profile.GroundStreak = 0; profile.DurationGame = 0; isApplied = true; } } if (Sortie.BotCaptured && !isApplied) { var basePercent = 5; var multiplicator = (basePercent + (profile.Score / baseDelimiter)) / 100; if (multiplicator > maxMultiplierCaptured) { multiplicator = maxMultiplierCaptured; } _logger.LogWarning( "{method} За плен. Игрок: {gamer}, тип: {type}, Очков было: {startScore}, вычитаем: {minus} результат: {result} коэф.: {multiplicator}", nameof(ProcessProfileScore), this.NAME, this.TYPE, profile.Score, profile.Score * multiplicator, profile.Score - profile.Score * multiplicator, multiplicator); resultScore -= profile.Score * multiplicator; profile.Score -= profile.Score * multiplicator; if (profile.Score < 0) { profile.Score = 0; } } if (Sortie.VehicleStatus == VehicleStatus.Crashed || Sortie.VehicleStatus == VehicleStatus.Destroyed || Sortie.VehicleStatus == VehicleStatus.ShotDown || Sortie.VehicleStatus == VehicleStatus.MissingInAction) { var basePercent = 2; var multiplicator = (basePercent + (profile.Score / baseDelimiter)) / 100; if (multiplicator > maxMultiplierVehicle) { multiplicator = maxMultiplierVehicle; } _logger.LogWarning( "{method} За потерю самолета. Игрок: {gamer}, тип: {type}, Очков было: {startScore}, вычитаем: {minus} результат: {result} коэф.: {multiplicator}", nameof(ProcessProfileScore), this.NAME, this.TYPE, profile.Score, profile.Score * multiplicator, profile.Score - profile.Score * multiplicator, multiplicator); resultScore -= profile.Score * multiplicator; profile.Score -= profile.Score * multiplicator; if (profile.Score < 0) { profile.Score = 0; } Sortie.Score = resultScore; } }
  10. Кто тебе сказал, что механика работает неправильно? Бугага. Откуда вы только беретесь. (Вопрос риторический, очень желательно не отвечать)
  11. Во втором все спиано.
  12. Думаю, надо пояснить. Количество топлива на филдах настраивается не от того, что в литрах его считают или в кг. Хватает его на 3.5 Ф4 например. Смотрим, хорошо ли работает? Хорошо. Оставляем. Экономика норм крутится. Приходит адепт "историчности" и убеждает, что у вас все неправильно, вы топлива не доливаете. Окей. Идем, пишем формулы, закладываем плотность топлива, марки... короче, тратим массу времени на всю эту фигню. Стало топлива хватать на 4.5 Ф4. Потом смотрим, что-то экономика у нас поехала. Что не так? А вот же, надо с филда (а точнее со всех филдов) бочку убрать одну, а то и две. И опа, снова у нас топлива хватает на 3.5 Ф4. Вот. Хорошо! Поправилась экономика! Что изменилось? Геморроя стало больше, а с точки зрения игровых механик ничего. Надо? Зачем?
  13. Мой аэродром, че хочу то и делаю. Я могу добавить бочку и там будет больше в кг, а могу убрать бочку и там станет меньше в кг. Ты как это проверишь? Ни как, правильно. Так что, отстань пожалуйста.
  14. Во, отлично! Щас будет математика! Смотри. 2300 кг берем с филда, грузим тебе в тетю, с помощью математики (хз, правда зачем? ну да ладно) конвертируем в литры 2300 / 0.76 = 3026.31 литров. Везем в точку назначения. Привезли. Конвертируем в кг (зачем? у нас в кг все, выше сказано же). 3026.31 * 0.76 = 2300 кг. Кладем в склад. Так пойдет? Или тебе надо на ядерном уровне рассчитать сколько ты недополучишь?
  15. 2300 кг, немецкого, сколько это литров?
  16. Как-будто у нас все описанное невозможно)) Еще раз призываю прекратить флуд. Дальше буду принудительно его завершать. Создайте отдельную тему и там флудите.
  17. Создайте тему и пишите сколько хотите. Русским же языком написано. Призыв к прекращению флуда не только к Вам, а ко всем участникам. Вам прямо сказали - все считается в кг. Что опять не так? Не поняли, не оценили вклад? Ну простите. У нас есть много дел, которые требуют, я полгаю Вы согласитесь, приоритетного нашего участия, нежели читать флуд из пустого в порожнее. Спасибо за внимание и за Ваше время. Мы это очень ценим.
  18. Предлагаю флуд прекратить. Тема все таки не для рассуждений. Желающие могут создать тему для рассуждений на тему экономики и т.п. и там флудить сколько влезет. А мы потом, перенесем флуд в ту вашу тему отсюда.
  19. Внимание! Группы запрещено называть используя нецензурную лексику! Названия групп должны соответствовать здравому смыслу. Если вы получаете приглашение в группу, которая называется "сомнительно", лучше отклонить данное приглашение и сообщить администрации. Если же админы найдут в статистике название группы, которое по мнению администрации подпадает под запрет (содержит нецензурную брань или еще что-то), ко всем участникам такой группы будут применяться административне меры.
  20. Успевать надо за 5 минут. Редактирование сообщения разрешено в течение 5 минут! Кто не успел - тот опоздал. И что? По Вашему надо, чтобы он в плюсе был после вот этого вот всего?
  21. Из мухи слона делать не нужно. Особенно ничего не изменилось. Подзажали малость доходность, да. Ничего страшного в этом нет. Большинство рентабельны. Даже абсолютное большинство. Я видел стату, где два из двух это невозврат. И все равно по валюте в плюсе. Более того, когда подъедут награды, еще подзажмем, ибо с наградами будет кошелек наполняться и звания расти. Так что, слона из мухи делать не надо.
  22. const line = L.polyline([offsetLatLng, realLatLng], { color: '#1a1a1a', weight: 2.5, opacity: 1, dashArray: '6, 4', lineCap: 'round', lineJoin: 'round', className: 'sortie-selected-line', }).addTo(map);Вот: color: '#1a1a1a' Какой это цвет в твоем браузере?))
  23. Снова твой браузер чудит)) Вот как это выглядит в нормальном браузере:
  24. Нет тут ошибок. Я не виноват, что событие взлета сервер так пишет в лог, с высотой.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.