Да, но некоторые вещи, например фоторазведку и арткорректировку, на Mission Objective не привесишь.(
И в случае выполнения фоторазведки оно будет считаться выполненой? Так почему же за него очков не дают?
Ну, да. А, то какой стимул? Если толковый разведчик, то он и на цель толково выйдет и истребителю работать не придется. ПОлучается слетал - только время потратил. А про безтолковых я не говорю - там цырк-шапито, какие очки? Только вот как это сделать.
Я просто хочу выяснить потенциал сего инструмента. Сервер свой есть выделенный. Хотелось бы его использовать на полную катушку. Скрипты писать умею. Ну и Ваала распрашивать э-э... целенаправленно.
Кстати, по скриптам: транслятор Next Missoin у меня почему то не срабатывает. Подскажите как его использовать? Я указываю ему файл миссии в папке multiplayer\dogfight\ с необходимым расширением и таймером его талкаю. Ничего не происходит. Что не так?
Из-за этого я перестал писать сценарную догфайт-компанию, хотя месяц осенью с ней провозился. А, выясняется, что теоретически этот транслятор можно заменить через консоль.
Редактор, конечно не идеален, и вовсе не из-за своей сложности. Просто для "идеала" ему не хватает нескольких полезных мелочей, штрихов так сказать. Хотя бы тех же активных иконок, которые можно было бы изменять по ходу сценария. Но, эти мелочи, надеюсь воплотятся со временем. Но, я отвлекся.
Ваал. С чего нужно начать свое обучение, что бы написать программу для консоли, которая бы читала логи и выводила бы их в удобоварибельный вид. Или на сайте или как программа на самом сервере?
у Mission Objective теперь можно ставить иконку, и по идеи она должна меняться по завершению задачи, сам пока не пробовал.Хотя бы тех же активных иконок, которые можно было бы изменять по ходу сценария
Изучить азы программирования, разобраться с парсингом файлов, работа с базами данных, сокетами, отправкой/получением пакетов. Для сайта соответственно - изучить написание веб приложений.С чего нужно начать свое обучение, что бы написать программу для консоли, которая бы читала логи и выводила бы их в удобоварибельный вид. Или на сайте или как программа на самом сервере?
Но это грубо говоря, не знаю как по другому ответить на такой вопрос.
Такие вопросы:
1. Полный ли список команд в файле readme.txt который рядом с тестовой утилиткой ремот консоли лежит?
2. Есть ли возможность через ремот консоль получать лог миссии? Если да, то какой командой (ридми прочитал, все команды перетыкал) и какие настройки выделенного сервера должны быть?
3. Если из пункта 2 возможности нет, правильно ли я рассуждаю что помимо ремот консоль клиента должна будет быть еще программа/сервис следящий за лог файлом и отслеживающий в нем изменения?
Ну и в ридми не указан endianness длины сообщения, подобрать не сложно, но все же![]()
Крайний раз редактировалось vasmann; 07.01.2012 в 15:19.
там нет последних добавленных команд1. Полный ли список команд в файле readme.txt который рядом с тестовой утилиткой ремот консоли лежит?
Open SDS, Close session, Get SPS, Reset SPS, Shutdown
формат их написания можно посмотреть в тестовой консоли
нельзя2. Есть ли возможность через ремот консоль получать лог миссии? Если да, то какой командой (ридми прочитал, все команды перетыкал) и какие настройки выделенного сервера должны быть?
да3. Если из пункта 2 возможности нет, правильно ли я рассуждаю что помимо ремот консоль клиента должна будет быть еще программа/сервис следящий за лог файлом и отслеживающий в нем изменения?
Спасибо.
--- Добавлено ---
Еще вопрос.
Все ответы сервера будут всегда содержать в себе STATUS=значение статуса?
Из ридми не совсем ясно.
И еще вопрос.
Честно поискал ответ, не нашел.
Какие параметры конфига (и какого конфига) нужно настроить чтобы выделенный сервер писал логи?
А то у меня он пишет только шапку стандартную - аутентифицируюсь, создаюсь, создался...
А события не пишет.
Может я не тот лог смотрю.
Спасибо еще раз.
--- Добавлено ---
И еще вопрос. Прошу прощения за назойливость.
по RoF Wiki
Вменяемое описание лог файла?
И на сколько полное?
Разделитель между элементами одной записи лога - пробел? Или зависит от типа линии лога (AType)?
вполне вменяемоеВменяемое описание лог файла?
И на сколько полное?
емнип
нет тип 16 - дисконект объекта и освобождение id, не с сервера, а как бы завершение его "жизни"
в тип 10 теперь есть информация о загрузке, топливе, скине и id "родителя" для турелей
в тип 12 добавили имя объекта
не совсем понял о чем конкретно речьРазделитель между элементами одной записи лога - пробел? Или зависит от типа линии лога (AType)?
так что вот пример лога 1322938145.zip
Пример:
T:16022 AType:0 GDate:2010.6.20 GTime:12:5:20 MFile:Multiplayer\Cooperative\cocos_pvp10_v0.4_d.vii_dr.i_vs_n28_camel.mission MID: GType:1 CNTRS:0:0,101:1,102:1,103:1,104:2,105:2,501:2,502:2,600:3 SETTS:0000000000000010000000010
Пары:
T:16022
AType:0
GDate:2010.6.20
....
Всегда разделены пробелом? Возможна ли такая ситуация (я сейчас выдумаю, для пример): SomeKey: Some Value Here - тоесть в тексте Some Value Here - три прибела, если считать после :
Уже по логу увидел.
Не всегда.
Спасибо.
Крайний раз редактировалось vasmann; 08.01.2012 в 02:14.
Вопрос снимается, разобрался.
Крайний раз редактировалось vasmann; 10.01.2012 в 10:01.
Ну раз разобрался рассказал бы здесь остальным. Тема как бы для этого и создана, зачем удалять то.
--- Добавлено ---
На счет логов, к сожалению они не без багов и особенностей, так что это надо учитывать.
Вот что встречалось мне
Например берем бомбер хп400 с 1650й бомбой или готу с 300й
респаунимся и кидаем на филде по себя
в логах сначала идет событие тип3 - что самолет уничтожен
потом событие тип5 о взлете
и событие тип6 о приземление
т.е. взлетает уничтоженный самолет
Из логов нельзя выяснить стрелял ли и наносил дмг ты сам с турели своего бомбера или это твой бот стрелял.
С подсчетом расхода боеприпасов турелями вообще была какая-то общая проблема с точностью данных, сейчас не могу вспомнить, надо на это внимание обращать.
записи тип 1 это как просто попадание в объект, так и рикошет
T:10087 AType:1 AMMO:BULLET_GBR_77x56R_MK7 AID:38912 TID:28672
так что например для одной пули может быть записано два(а может и более) попадания в один объект
Когда игроки после посадки не выходят в брифинг, а сразу выходят из игры в логах нет записи события тип4 с информацией об остатках боекомплекта, точность стрельбы и бомбометания не посчитать. Т.е. это как дисконект.
ситуация
1) твой противник и союзника летят рядом
2) ты подлетаешь и взрываешь самолет противника
3) от самолета идет взрывная волна и повреждает/поджигает/уничтожает самолет союзника
T:442712 AType:1 AMMO:explosion AID:90159 TID:118813
вот только в логах "автором" взрывной волны являешься ты, а не самолет противника которого ты взорвал
в итоге можно получить френдликилл
Регулярно встречаются вот такие записи
Т.е. выглядит это как будто появился АИшный самолет взлетел и сел, но это встречается на ньюбай и миссиях с хелликвинс где нет АИ самолетов в миссииT:659520 AType:12 ID:233513 TYPE:Sopwith Camel COUNTRY:105 NAME: PID:-1
T:659520 AType:5 PID:233513 POS(26271.584, 75.542, 24473.090)
T:659810 AType:6 PID:233513 POS(26280.352, 35.750, 24487.174)
бывают проблемы с координатами (-1.#QO,-1.#QO,-1.#QO), (-1.#IO,-1.#IO,-1.#IO)
или вот кинул бомбы под себяT:147503 AType:4 PLID:272415 PID:276511 BUL:1000 SH:0 BOMB:0 RCT:0 (-1.#QO,-1.#QO,-1.#QO)
T:147508 AType:16 BOTID:276511 POS(-1.#QO,-1.#QO,-1.#QO)
после того как бомбы взорвались - появилось 5 разных записей о Bristol F2B (F.III)
Скрытый текст:
если какой-то объект был уничтожен в миссии, а потом отремонтирован
или поврежден и отремонтирован - в логах об этом нет записей
бывало что для активной инфлушен_ареа в логах не было записей с координатами вершин типа
T:1 AType:14 AID:333824 BP((190592.2,136.9,38292.9),(231950.0,136.9,38254.4),(231950.5,136.9,60658.5),(227287.0,136.9,59998.3),(222739.0,136.9,60200.7),(217598.7,136.9,62950.9),(212952.4,136.9,64218.2),(207994.0,136.9,64088.9),(202940.6,136.9,62438.2),(199827.8,136.9,60382.0),(195459.3,136.9,57026.2),(190596.7,136.9,52227.2))
еще логи могут "тормозить"
товарищ Cornelius2 сел в турель TurretDFWC_1
но пилот DFWC уже как бы завершил вылет
Скрытый текст:
или игрок завершил миссию и тут же прошло событие о посадке
Скрытый текст:
или взлете
Скрытый текст:
вообщем будьте внимательны
Числа с плавающей точкой хранятся в 4 байтах в формате:
Wiki: Single-precision floating-point format
У меня же проблема была (ну она собственно осталась, но это ерунда). Сам вывод непонятным (пока что для меня) образом в некоторых случаях округляет, а в некоторых нет.
Тоесть если смотреть в отладчике у меня в переменной лежит число такое же как в текстовом логе, но при выводе оно округляется, причем как то странно.
Поскольку вывод на экран для меня просто служебный, то значения это не имеет.
Если интересно:
Формат бинарного лога таков:
Все числа записаны в Биг-Ендиан формате.
4 байта - тик
1 байт - AType
2 байта - Длина записи лога (N)
N байт - в зависимости от AType разный набор байт (по текстовому логу определяются очень просто, если надо могу описать, ибо у меня уже сделано)
1 байт = всегда 0x0A - я так понял сделали его служебным, чтобы в когда бин лог открывать в текстовом редакторе можно было записи лицезреть на новой строке.
Вот и все.
Конкретно по 6 типу сообщений
идут
4 байта Single precision floating point - DMG
4 байта целое кто нанес урон
4 байте по ком
три 4 байтных Single precision floating point с указанием координат.
Ну раз такая пьянка пошла, вопрос к разработчикам:
1. Очевидно каждый раз писать позиции игроков/ботов нет смысла (очень накладно), можно ли реализовать какую-нибудь команду для ремот консоли которая бы флашила по запросу текущие положения игроков/ботов, их параметры (не уверн надо ли, думаю лишними не будут)
2. можно ли реализовать команду - высадить игрока из место стрелка? В чем задумка - организовать опцию black list/white list для игроков. Тоесть игрок может сказать - я разрешаю vasmann-у садиться на место стрелка, а остальные в лес. Соответсвенно чтобы когда Петя садится к человеку на место стрелка его бы просто высаживало, сейчас это можно сделать киком, что немного жестковато. А так высадить и в чат ему написать - звыняй хлопче, посторонним вход в ...
3. Ввести различие - игрок на турели, игрок пилот.
Спасибо камрад Vaal.
Конкретно в .NET плавающие точки читал по следующему алгоритму (не было желания переводит код в unsafe режим, и работать с указателями)
1. Читаем 4 байта как целое число (да , целое, Int32 или UInt32 не имеет значения)
2. проверкой 0x80000000 бита узнаем знак числа
3. число битовой операцией & с числом 0x7F800000 и сдвижкой на 23 бита вправо узнаем експоненту числа
4. в цеикле от 1 до 23 узнаем 1 бит оставшегося числа через битовое & 0x01
5. если бит не равен нулю к сумме добавляем число = 2 в степени (-(23-i+1))
5. целое число сдвигаем на 1 бит вправо
6. промежуточный результат равен (1 + накопленная сумма) * 2 в степени (експонента - 127)
7. если знаковый бит не равен 0 = то число отрицательное.
Почему сумма идет в порядке возрастания слогаемых и почему 1 добавляется в конце? Чтобы не было заглатывания маленьких чисел большими в силу особенностей хранения чисел с плавающей точкой.
Крайний раз редактировалось vasmann; 11.01.2012 в 16:57.
Аналогичный функционал запрашивался перед разработкой интерфейса который сейчас используется консолью, отказали.1. Очевидно каждый раз писать позиции игроков/ботов нет смысла (очень накладно), можно ли реализовать какую-нибудь команду для ремот консоли которая бы флашила по запросу текущие положения игроков/ботов, их параметры (не уверн надо ли, думаю лишними не будут)
Но если не ошибаюсь в оффлайне логируются позиции самолетов после смешения на 1.5км
Так же запрашивали фичу - принудительное завершение вылета игрока, чтобы как раз не кикать за какие-то нарушения, неправильно выбранный самолет, а просто отправлять в брифинг с мессагой в чате, отказали.2. можно ли реализовать команду - высадить игрока из место стрелка? В чем задумка - организовать опцию black list/white list для игроков. Тоесть игрок может сказать - я разрешаю vasmann-у садиться на место стрелка, а остальные в лес. Соответсвенно чтобы когда Петя садится к человеку на место стрелка его бы просто высаживало, сейчас это можно сделать киком, что немного жестковато. А так высадить и в чат ему написать - звыняй хлопче, посторонним вход в ...
вот тут не понял о чем конкретно речь т.к. в логах это можно определить по типу объекта из события тип 10, самолет или турель.3. Ввести различие - игрок на турели, игрок пилот.
п.с. Спасибо за инфу по бинарникам. Можешь сказать на сколько примерно разница в скорости парсинга текстовых логов и бинарных?
Я с текстовым даже не стал заморачиваться. Не люблю текстовики парсить, правил много нужно всяких учитывать, плюс работа со строками не самое быстрое решение.
Если есть желание, завтра могу выдать тебе консольное приложение (я его до конца доведу), которое парсит бинарный лог и выводит в консоль что напарсило.
Это парсом даже назвать нельзя, фактически последовательное чтение.
По ощущениям очень быстро.
Да думаю до след недели. Только сейчас включил сохранение бинарных логов. Чтобы нормальные логи с "больших" миссий собрать надо выходных дождаться. Вот тогда можно будет сравнить насколько быстрее выходит.
Как вариант, я могу консольное приложение оформить так:
ты ему даешь папку где лежат бин логи, а оно тупо перебирает все и распарсивает, без вывода (консоль сама по себе тормозная). Просто прочитал и все.
И сделать замер - время старта парса и конец.
Разница в секундах - покажет сколько оно парсит.
А ты со своей стороны свою тулзу в таком же духе подправишь, чтобы она замерила сколько парсит без вывода.
Ок, договорились.
Замер, кстати, можно делать не дожидаясь выходных.
Достаточно взять текстовый кусочек лога большой и соответсвующий ему бинарный.
Та расплодить его там в 300 экземплярах в одной папке.
И натравить парсеры.
Результат будет тот же.
В целом время парса будет линейным по отношению к обьему логов (бинарных/текстовых)