я не в курсе, я ссылку перепостил.
Вид для печати
Красота!
http://8thafhsoregon.org/archive/Ore...ruary-1944.jpg
попробуй эту 1944 года, правда. нооооо клевая
3 мб
Карта класс! И вообще вы молодцы, столько энергии. я даже завидую...:ups:
Пятиминутка занудства - Хокидж правильно пишется Hawkidge, у вас на карте через u, и вообще - Фолкстон это город, а Хокидж это филд, так что если исходить из логики карты, то надо поменять, в смысле шрифты, красный и черный. Занудство офф :)
Еще раз спасибо, на серве летать интересно и приятно!
Мне все очень нравится, если учесть замечания shammy.
Еще бы я убрал по-возможности русский текст в названии операции и на карте в самом центре. Остальной в глаза не бросается.
Один вопрос, почему изображен Лев?
Может тогда лучше вообще без животных обойтись?
ps. Spit2 и Е4 не указаны.
А и еще мысль пришла опосля, у нас по легенде немцы высаживаются, а англичане контратакуют (см. мой брифинг). Поэтому желательно красные стрелки сделать в 2 раза меньше синих, иначе логический винигрет получится. Механика я думаю тоже будет похожая из-за превосходства бомберов у синих.
Скорее всего филды идут по названию населённых пунктов, там скорее типа посёлка.Цитата:
Хокидж это филд
карта отлично. эх. верите бриттам два аэродрома-а-а-а-ааа
Спасибо! Классная стилизация.
Как будет более-менее релизная версия, создам на 1С новую тему с анонсом. (пока утечки памяти и т.п. исчезнут, может на новом сервере уже?)
Для русского объявления в главном разделе Сухого текст с вики и брифинга подготовьте пока, кто слогом владеет :)
По брифингу:
Перенос строк нужно убирать, как в англ. варианте.
Служебные шапки/теги нельзя переводить, только то, что ниже <Description>.
Скопируй это дело в текстовый файл "название миссии_ru.briefing" (к любой миссии), открой миссию, чтобы посмотреть как будет смотреться в игре. Например host_ru.briefing
--- Добавлено ---
Тему откроем с новой версией и на новом железе. Пока текст прилижите на русском.
Уважаемые,может кто сказать, по какой причине, на серверах Репки,после установки патча 2(бета),каждые 5-10 минут вылет,с мотивацией ...тайм-аут
Что может инициировать такую трактовку?
Я попробую... шут его знает... если в двух словах... до сего дня, вернее уже до вчера №1 и№2 были пропатчены английской версией патча, но №1 переехала на новый хост и проблема эта решена, линия инета до репок стабильна, ничего в настройках после патча не менялось... я посыпаю голову пеплом, но у меня нет однозначного ответа на этот вопрос... на "моей" стороне я не вижу ни каких критических ошибок.
В догонку, нарыл вот это . Скорее всего таже карта 10752x9126 pixel PNG, весит 90+ мб.
Р2 так и не переставил, принципе специально, падать из за этого не должно.
Проверь линк.
Да, а то сайта "тут" не находит :)
http://andersbraver.hut2.ru/index_files/red_mine.htm
как то выбило с репки, мисси стартовали заново. во-пепрвых. какое там время? в сторону франции без слез не взглянешь, все преимущества у немцев, от солнца летят. ну это ладно. долетел до дюнкерка на бленяше, начал топить танкеры. потопил семь. а смысл? они тут же новые нарождаются. вот если бы его бахнул под мэнстоном, ему замена два часа бы приходила. а так, запасные выходят тут же, и идут в 3-5 км позади. и смысл их топить на чужом берегу? нет смысла... а теперь еще и не разобрать навскидку кто тут участвует в атаке, а кто нет.
Да нет смысла. Должна быть атака, которую можно остановить. Надеюсь уберут позже.
Хороший истребитель будет ждать бобров где угодно, если его сторона может что-то существенное потерять в результате бомбоудара. Неважно как это далеко будет или высоко, он дождется и постарается сбить. Если ястребам нравится крутиться в куче - пусть крутятся, не нужно из-за этого бомберов в эту свалку направлять (точнее оставить возможность уйти на другое направление). По поводу видимости - есть даже тема соответствующая, тут все зависит от разрабов.
Повторяю, хороший истребитель найдет бобров в любом случае. Сейчас большинство крутятся над водой и наоборот нужно поднимать бои на высоту.
я о том и говорю. что топя у ИХ берега - нифига не оттянешь. выгоднее дожаться пока подплывут и тогда вдарить. тогда, действительно, отложишь на 2 часа. а топя их у дюнкерка - на всего-то на 10 минут отложишь, да еще и лететь долго и рисков больше. и смысл...
у меня кстати рекламы нет там. файрфокс плюс адблок плюс ноускрипт
правильно .Мы так и делаем-даже на середине пролива конвои не трогаем .Хай плывут. Вот когда уже совсем близко к берегу подплывают -тогда и топим сразу оба конвоя. А потом собираемся и идём на Хокиндж -выносить зены и артиллерию .Полтора часа в запасе есть пока подойдут новые конвои. Можно спокойно повулчить филд.
У меня вообще нет возможности прочитать правила сервера и брифинг. Работают только кнопки: карта, "сухой" и статистика. А правила и брифинг - только реклама%)
Вложение 143387
Есть и хостинг и все остальное... кидайте, сайт повешу, + дам фтп к нему.
Брат Андрей. Друг! Сделай,прошу, статистику, бо перцам, скучно. Корабли прилетели убили, лаунчер.,Корабли прилетели, убили-лаунчер. Однообразие. А с дуромером веселей как то.
http://r1.repka.su/
Ну, вот собственно...
--- Добавлено ---
ДаЦитата:
Чтобы прикрутить стат, я так думаю java-файлы должны лежать все-таки вместе с самой миссией, как на Р2. Там вроде так же?
Красивый сайт!
Красный брифинг мне иностранцы на человеческий язык перевели, а синий нет.
Про ява файлы вроде бы в ридми ко 2й миссии stillborn написано, что чтобы на сайте работала сортировка и прочее, их на сайт заливать нужно. Но я давно читал, точно не помню.Цитата:
A surprise counter-offensive against the Axis ground invasion codenamed 'Operation Sea Lion' has begun. Ground forces are now en-route to France to capture and secure strategic areas. If our ground forces succeed, this should force the Axis into re-calling their ships back to mainland France to counter the Britsh offensive.
The role of the RAF is to protect and assist our ground forces. This includes ground forces that are en-route, those protecting strategic coastal locations (if under attack) and ground forces that have successfully landed in France.
Do your best to help our ground forces take and secure enemy ground whilst protecting our own.
The quantity of available Spitfire IIa and Bf-109E4 depends on the number of airfields we control. Fight hard to deny the enemy using superior aircraft.
* Fighters, escort our ships to France and intercept enemy bombers attacking our ships at all costs!
* Bombers, sink enemy ships approaching our coastal positions.
Может, еще style.css надо?
Или sorttable.js не должна сортировать на сайте, а только 1 раз сортирует при создании страницы? Кто у нас яву читает?Цитата:
//Upload sorttable.js and Style.css to the same location on your site manually, created htm depends on them to be viewed properly
sorttable.js:
Код:/*
SortTable
version 2
7th April 2007
Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
Instructions:
Download this file
Add <script src="sorttable.js"></script> to your HTML
Add class="sortable" to any table you'd like to make sortable
Click on the headers to sort
Thanks to many, many people for contributions and suggestions.
Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
This basically means: do what you want with it.
*/
var stIsIE = /*@cc_on!@*/false;
sorttable = {
init: function() {
// quit if this function has already been called
if (arguments.callee.done) return;
// flag this function so we don't do the same thing twice
arguments.callee.done = true;
// kill the timer
if (_timer) clearInterval(_timer);
if (!document.createElement || !document.getElementsByTagName) return;
sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
forEach(document.getElementsByTagName('table'), function(table) {
if (table.className.search(/\bsortable\b/) != -1) {
sorttable.makeSortable(table);
}
});
},
makeSortable: function(table) {
if (table.getElementsByTagName('thead').length == 0) {
// table doesn't have a tHead. Since it should have, create one and
// put the first table row in it.
the = document.createElement('thead');
the.appendChild(table.rows[0]);
table.insertBefore(the,table.firstChild);
}
// Safari doesn't support table.tHead, sigh
if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
if (table.tHead.rows.length != 1) return; // can't cope with two header rows
// Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
// "total" rows, for example). This is B&R, since what you're supposed
// to do is put them in a tfoot. So, if there are sortbottom rows,
// for backwards compatibility, move them to tfoot (creating it if needed).
sortbottomrows = [];
for (var i=0; i<table.rows.length; i++) {
if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
sortbottomrows[sortbottomrows.length] = table.rows[i];
}
}
if (sortbottomrows) {
if (table.tFoot == null) {
// table doesn't have a tfoot. Create one.
tfo = document.createElement('tfoot');
table.appendChild(tfo);
}
for (var i=0; i<sortbottomrows.length; i++) {
tfo.appendChild(sortbottomrows[i]);
}
delete sortbottomrows;
}
// work through each column and calculate its type
headrow = table.tHead.rows[0].cells;
for (var i=0; i<headrow.length; i++) {
// manually override the type with a sorttable_type attribute
if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
if (mtch) { override = mtch[1]; }
if (mtch && typeof sorttable["sort_"+override] == 'function') {
headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
} else {
headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
}
// make it clickable to sort
headrow[i].sorttable_columnindex = i;
headrow[i].sorttable_tbody = table.tBodies[0];
dean_addEvent(headrow[i],"click", function(e) {
if (this.className.search(/\bsorttable_sorted\b/) != -1) {
// if we're already sorted by this column, just
// reverse the table, which is quicker
sorttable.reverse(this.sorttable_tbody);
this.className = this.className.replace('sorttable_sorted',
'sorttable_sorted_reverse');
this.removeChild(document.getElementById('sorttable_sortfwdind'));
sortrevind = document.createElement('span');
sortrevind.id = "sorttable_sortrevind";
sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴';
this.appendChild(sortrevind);
return;
}
if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
// if we're already sorted by this column in reverse, just
// re-reverse the table, which is quicker
sorttable.reverse(this.sorttable_tbody);
this.className = this.className.replace('sorttable_sorted_reverse',
'sorttable_sorted');
this.removeChild(document.getElementById('sorttable_sortrevind'));
sortfwdind = document.createElement('span');
sortfwdind.id = "sorttable_sortfwdind";
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
this.appendChild(sortfwdind);
return;
}
// remove sorttable_sorted classes
theadrow = this.parentNode;
forEach(theadrow.childNodes, function(cell) {
if (cell.nodeType == 1) { // an element
cell.className = cell.className.replace('sorttable_sorted_reverse','');
cell.className = cell.className.replace('sorttable_sorted','');
}
});
sortfwdind = document.getElementById('sorttable_sortfwdind');
if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
sortrevind = document.getElementById('sorttable_sortrevind');
if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
this.className += ' sorttable_sorted';
sortfwdind = document.createElement('span');
sortfwdind.id = "sorttable_sortfwdind";
sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾';
this.appendChild(sortfwdind);
// build an array to sort. This is a Schwartzian transform thing,
// i.e., we "decorate" each row with the actual sort key,
// sort based on the sort keys, and then put the rows back in order
// which is a lot faster because you only do getInnerText once per row
row_array = [];
col = this.sorttable_columnindex;
rows = this.sorttable_tbody.rows;
for (var j=0; j<rows.length; j++) {
row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
}
/* If you want a stable sort, uncomment the following line */
//sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
/* and comment out this one */
row_array.sort(this.sorttable_sortfunction);
tb = this.sorttable_tbody;
for (var j=0; j<row_array.length; j++) {
tb.appendChild(row_array[j][1]);
}
delete row_array;
});
}
}
},
guessType: function(table, column) {
// guess the type of a column based on its first non-blank row
sortfn = sorttable.sort_alpha;
for (var i=0; i<table.tBodies[0].rows.length; i++) {
text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
if (text != '') {
if (text.match(/^-?[Ј$¤]?[\d,.]+%?$/)) {
return sorttable.sort_numeric;
}
// check for a date: dd/mm/yyyy or dd/mm/yy
// can have / or . or - as separator
// can be mm/dd as well
possdate = text.match(sorttable.DATE_RE)
if (possdate) {
// looks like a date
first = parseInt(possdate[1]);
second = parseInt(possdate[2]);
if (first > 12) {
// definitely dd/mm
return sorttable.sort_ddmm;
} else if (second > 12) {
return sorttable.sort_mmdd;
} else {
// looks like a date, but we can't tell which, so assume
// that it's dd/mm (English imperialism!) and keep looking
sortfn = sorttable.sort_ddmm;
}
}
}
}
return sortfn;
},
getInnerText: function(node) {
// gets the text we want to use for sorting for a cell.
// strips leading and trailing whitespace.
// this is *not* a generic getInnerText function; it's special to sorttable.
// for example, you can override the cell text with a customkey attribute.
// it also gets .value for <input> fields.
hasInputs = (typeof node.getElementsByTagName == 'function') &&
node.getElementsByTagName('input').length;
if (node.getAttribute("sorttable_customkey") != null) {
return node.getAttribute("sorttable_customkey");
}
else if (typeof node.textContent != 'undefined' && !hasInputs) {
return node.textContent.replace(/^\s+|\s+$/g, '');
}
else if (typeof node.innerText != 'undefined' && !hasInputs) {
return node.innerText.replace(/^\s+|\s+$/g, '');
}
else if (typeof node.text != 'undefined' && !hasInputs) {
return node.text.replace(/^\s+|\s+$/g, '');
}
else {
switch (node.nodeType) {
case 3:
if (node.nodeName.toLowerCase() == 'input') {
return node.value.replace(/^\s+|\s+$/g, '');
}
case 4:
return node.nodeValue.replace(/^\s+|\s+$/g, '');
break;
case 1:
case 11:
var innerText = '';
for (var i = 0; i < node.childNodes.length; i++) {
innerText += sorttable.getInnerText(node.childNodes[i]);
}
return innerText.replace(/^\s+|\s+$/g, '');
break;
default:
return '';
}
}
},
reverse: function(tbody) {
// reverse the rows in a tbody
newrows = [];
for (var i=0; i<tbody.rows.length; i++) {
newrows[newrows.length] = tbody.rows[i];
}
for (var i=newrows.length-1; i>=0; i--) {
tbody.appendChild(newrows[i]);
}
delete newrows;
},
/* sort functions
each sort function takes two parameters, a and b
you are comparing a[0] and b[0] */
sort_numeric: function(a,b) {
aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
if (isNaN(aa)) aa = 0;
bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
if (isNaN(bb)) bb = 0;
return aa-bb;
},
sort_alpha: function(a,b) {
if (a[0]==b[0]) return 0;
if (a[0]<b[0]) return -1;
return 1;
},
sort_ddmm: function(a,b) {
mtch = a[0].match(sorttable.DATE_RE);
y = mtch[3]; m = mtch[2]; d = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt1 = y+m+d;
mtch = b[0].match(sorttable.DATE_RE);
y = mtch[3]; m = mtch[2]; d = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt2 = y+m+d;
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
},
sort_mmdd: function(a,b) {
mtch = a[0].match(sorttable.DATE_RE);
y = mtch[3]; d = mtch[2]; m = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt1 = y+m+d;
mtch = b[0].match(sorttable.DATE_RE);
y = mtch[3]; d = mtch[2]; m = mtch[1];
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt2 = y+m+d;
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
},
shaker_sort: function(list, comp_func) {
// A stable sort function to allow multi-level sorting of data
// see: http://en.wikipedia.org/wiki/Cocktail_sort
// thanks to Joseph Nahmias
var b = 0;
var t = list.length - 1;
var swap = true;
while(swap) {
swap = false;
for(var i = b; i < t; ++i) {
if ( comp_func(list[i], list[i+1]) > 0 ) {
var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
swap = true;
}
} // for
t--;
if (!swap) break;
for(var i = t; i > b; --i) {
if ( comp_func(list[i], list[i-1]) < 0 ) {
var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
swap = true;
}
} // for
b++;
} // while(swap)
}
}
/* ******************************************************************
Supporting functions: bundled here to avoid depending on a library
****************************************************************** */
// Dean Edwards/Matthias Miller/John Resig
/* for Mozilla/Opera9 */
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", sorttable.init, false);
}
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
sorttable.init(); // call the onload handler
}
};
/*@end @*/
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
sorttable.init(); // call the onload handler
}
}, 10);
}
/* for other browsers */
window.onload = sorttable.init;
// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini
// http://dean.edwards.name/weblog/2005/10/add-event/
function dean_addEvent(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else {
// assign each event handler a unique ID
if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
// create a hash table of event types for the element
if (!element.events) element.events = {};
// create a hash table of event handlers for each element/event pair
var handlers = element.events[type];
if (!handlers) {
handlers = element.events[type] = {};
// store the existing event handler (if there is one)
if (element["on" + type]) {
handlers[0] = element["on" + type];
}
}
// store the event handler in the hash table
handlers[handler.$$guid] = handler;
// assign a global event handler to do all the work
element["on" + type] = handleEvent;
}
};
// a counter used to create unique IDs
dean_addEvent.guid = 1;
function removeEvent(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else {
// delete the event handler from the hash table
if (element.events && element.events[type]) {
delete element.events[type][handler.$$guid];
}
}
};
function handleEvent(event) {
var returnValue = true;
// grab the event object (IE uses a global event object)
event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
// get a reference to the hash table of event handlers
var handlers = this.events[event.type];
// execute each event handler
for (var i in handlers) {
this.$$handleEvent = handlers[i];
if (this.$$handleEvent(event) === false) {
returnValue = false;
}
}
return returnValue;
};
function fixEvent(event) {
// add W3C standard event methods
event.preventDefault = fixEvent.preventDefault;
event.stopPropagation = fixEvent.stopPropagation;
return event;
};
fixEvent.preventDefault = function() {
this.returnValue = false;
};
fixEvent.stopPropagation = function() {
this.cancelBubble = true;
}
// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
forEach, version 1.0
Copyright 2006, Dean Edwards
License: http://www.opensource.org/licenses/mit-license.php
*/
// array-like enumeration
if (!Array.forEach) { // mozilla already supports this
Array.forEach = function(array, block, context) {
for (var i = 0; i < array.length; i++) {
block.call(context, array[i], i, array);
}
};
}
// generic enumeration
Function.prototype.forEach = function(object, block, context) {
for (var key in object) {
if (typeof this.prototype[key] == "undefined") {
block.call(context, object[key], key, object);
}
}
};
// character enumeration
String.forEach = function(string, block, context) {
Array.forEach(string.split(""), function(chr, index) {
block.call(context, chr, index, string);
});
};
// globally resolve forEach enumeration
var forEach = function(object, block, context) {
if (object) {
var resolve = Object; // default
if (object instanceof Function) {
// functions have a "length" property
resolve = Function;
} else if (object.forEach instanceof Function) {
// the object implements a custom forEach method so use that
object.forEach(block, context);
return;
} else if (typeof object == "string") {
// the object is a string
resolve = String;
} else if (typeof object.length == "number") {
// the object is array-like
resolve = Array;
}
resolve.forEach(object, block, context);
}
};
заливал все, сортировка НИКОГДА не работала.Цитата:
Может, еще style.css надо?
В брифинге адрес сайта не забудьте написать )
http://r2.repka.su/ "работает" до сих пор.
Лимитер поднят на всех хостах
24000 байт/с, мах пинг 300, 5 предупреждений через 5 сек... потом катапульта:)
Суточные перезагрузки в 9-00 и 17-30 с шагом 10 мин (Р1... Р2... Р3)
--- Добавлено ---
Из интересного
Пока ковырялся, запустил случайно сервер Боба без стим-клиента... и он запустился.
10 минут, это жестко имхо: люди только зайдут с Р1 на Р2 и тут же выкинет, потом с Р2 на Р3 повторится. Лучше с интервалом в 60 минут - дать час полетать хотя бы. Как раз в 19.30 с Р3 на Р1 всех замотивируем :)
Желательно статистику по кикам посмотреть: кого за пинг кикает, а кого за ширину канала и сколько в процентном отношении. Я за пингами наблюдал, до 400 кратковременно у многих прыгает, иногда и выше. Особенно после захода на сервер, потом устаканивается на 200. Как бы нам всех подряд не покикать. 25 секунд на стабилизацию пинга - это маловато имхо.
Лимит канала какой настройке клиента соответствует? ISDN, xDSL или LAN?
Про превышение лимита канала предупреждения есть? Сколько времени дается на перенастройку в меню? Какую скорость советуем устанавливать в клиенте? Нельзя кикать не предупредив и не дав время на перенастройку.
Я бы кикал только тех, у кого стабильно на протяжении 3-5 минут пинг в рамки не влезает. Они со временем просто перестанут на Р заходить и все устаканится.
Ок, шаг поменяю на 1 час
Кикать должно только за пинг, вся прелесть Лимитера, что пополам, какая ширина на клиенте, раз 5сек он опрашивает и изменяет сам.
Какой соответствует хз... надо поменять в игре и заглянуть в conf.ini на клиенте, но 24000 не стандартное значение... стандартное 20000. Лан, знаю - 100000.
Буду внимательно следить за пингами и если что отрихтую.
Прямо сейчас на Р1 летает пилот
7: _RAAF_Magpie ping: 392ms timeout: 0,018/131s speed: 10000b/s
В окне лимитера счетчик предупреждений -0
наблюдал около 5 минут - его не кикнуло...
@ andersbravers
Это мои старые брифинги. Выложи то, что на сайте.
Поправил немного по смыслу синий:
BLUE BRIEFING.
Our offensive codenamed 'Operation Sea Lion' has begun. Ground forces are now en-route to England to capture and secure strategic areas.
If our ground forces succeed, this should force the Allies to surrender.
The role of the Luftwaffe is to protect and assist our ground forces. This includes ground forces that are en-route, those protecting strategic coastal locations (if under attack) and ground forces that have successfully landed in England. Do your best to help our ground forces take and secure enemy ground whilst protecting our own.
The quantity of available Spitfire IIa and Bf-109E4 depends on the number of airfields we control. Fight hard to deny the enemy using superior aircraft.
* Fighters, escort our ships to England and intercept enemy bombers attacking our ships at all costs!
* Bombers, clear enemy defenses and sink enemy ships approaching our coastal positions in case the Allies launch a counter-offensive.
---------------------------------------
The mission uses a resource management system. Destroy enemy supply chain to stop their attack. Eliminating bigger supply ships stops landing barges operations. Destroying landing barges slows ground units advancement.
Play smart and have fun!
http://r1.repka.su/index_en.htm