Хотелось бы, чтобы было так: в свойствах каждой точки маршрута наземки, был чекбокс "Использовать дороги".
Если он включен, маршрут выбирается с учетом дорог, иначе - по полю напрямую. Этот чекбокс по умолчанию включен у обычных маршевых точек маршрута, и выключен у точек типа АТАКА.
С точки зрения .NET ini файлы походу рассматриваются как архаизм, и родных классов для чтения ини в нем вроде как и нет. заменой ини служит XML. В этом случае смотреть в сторону XDocument.
Если все же ини, то читаем сюда - http://msdn.microsoft.com/ru-ru/library/ezwyzy7b.aspx.
После ищем первое вхождение знака "равно" и по нему разбиваем строку на имя-значение. После убираем лишние пробелы через trim(). Смотрим String http://msdn.microsoft.com/ru-ru/library/a292he7t.aspx
В инете есть классы разработанные третьими лицами для работы с ини, на крайний случай.
По поводу разделения данных между миссиями можно свой аbattle сделать через дополнения (только для оффлайна, онлайн тоже вроде можно, но как - хз).Соответственно он будет доступен всем миссиям. Все остальные способы относительно сложные.
Правда я не вижу задач, которые бы это требовали. Убиение наземки можно из одной миссии отслеживать, и там же считать очки и принимать решения о запрете или разрешении вызова новой миссии.
Спасибо за ответы!
Не очень подходит вариант, так как использую для основы загрузчик и кол-во очков стороны должно влиять на возможность загрузки миссии через меню- если их недостаточно ,миссия не грузится, выводится соответствующее сообщение. В один файл все скидывать не хочется, он и так уже большой.
За секции отдельное спасибо, видел похожий код в миссии "Танки", там таким образом создаются файлы миссии.
naryv, а можно еще по этим вопросам разъяснить:
http://www.sukhoi.ru/forum/showthrea...=1#post1755337
http://www.sukhoi.ru/forum/showthrea...=1#post1744470
Обновление в коллекции от Атаса, как раз про подсчет очков и мн. другое - http://forum.1cpublishing.eu/showpos...3&postcount=14.![]()
Крайний раз редактировалось podvoxx; 26.12.2011 в 14:55.
ну, мне кажется так удобнее - меню же в стартовом скрипте создаётся? Если в нём же и статистика ведётся - проще разрешать или нет запуск миссии, можно вообще по очкам показывать только доступные для загрузки миссии в меню. А несколько перекрёстно связанных скриптов это скорее всего какие-нибудь глюки будут, я так никогда не делал.
да, конечно, файл миссии - это тоже секционный файл.
так задумано, техника старается по дороге всегда ехать, на дорогах скорость гораздо выше чем "в поле". "Проложить дороги" - это пункт, который позволяет сплайновую дорогу из сплайна сделать дорогой, он к маршрутам движения напрямую не относится. В принципе при прокладке маршрута достаточно начальной и конечной точек, остальной маршрут оптимальный сама группа выбирает. Вот в городах проблема, да, там домов очень много.
Сейчас не могу ответить, по моему здания нельзя было подгрузить но мне надо уточнять.
Don't happy, be worry
А как же бой? У меня есть группа танков (допустим 15 штук), мне достаточно только две точки - начало движения и конец на вражеской позиции. Когда ставишь второй вэйпоинт маршрут начинает прилипать к дорогам и танк в результате подставляет бок под прицел противотанковой артиллерии на поворотах. Если дорог много или она близко от направления атаки - это довольно быстро утомляет двигать туда-сюда, притом что это ни к чему и вредно для танкистов. Ну и не реалистично, вчера тестировал - по шоссе три танчика едут по ПДД, хотя вокруг все горит и взрывается, в том числе и их собратья в поле. Помогает поставить больше вэйпоинтов. А это +15 точек, у меня три таких подмиссии +45 точек всего, довольно много времени отнимает.
Может настройку ввести какую-нибудь, чтобы отключить движение по дорогам, если не требуется?
Для авиасима двигаются неплохо вполне, в Арме примерно также очень часто бывает
Да и даже реалистичности можно сказать добавляет - пока он в городе плутает, его легче добить артиллерии и самолетам
емнип в бою танки должны в боевой порядок перестраиваться и направляться в сторону врага, когда заметили того, но это когда заметят, в случае неожиданного огня их судьба сгореть.
Не знаю, точно не в ближайшее время, и будет ли вообще - обещать не могу.
ну, всё-же иногда очень тупят![]()
Don't happy, be worry
ВНИМАНИЕ! Код приведенный здесь не работает, рабочая версия кода находится на несколько постов ниже.
Подвох, если все скрипты исполняются в одном процессе, то обмен данными можно организовать так:
Код:// требуемые пространства имен using System.Windows; using System.Collections.Generic; // при инициализации хост миссии создаем и регистрируем таблицу достижений пилотов var table = new Dictionary<Player, int>(); Application.Current.Properties.Add("PlayerScoreTable", table); // в процессе игры, в подмиссии, получаем количество очков пилота if (Application.Current.Properties.Contains("PlayerScoreTable")) { // получаем таблицу var tablex = (Dictionary<Player, int>)Application.Current.Properties["PlayerScoreTable"]; // блокируем таблицу на время использования lock (tablex) { // тут получаем, не важно откуда, объект нужного нам игрока Player player = GamePlay.gpPlayer(); // проверяем, есть ли в таблице запись для указанного игрока if (tablex.ContainsKey(player)) { // получаем количество очков int score = tablex[player]; // добавляем указанному игроку 25 очков tablex[player] += 25; } else { // добавляем в таблицу запись для указанного игрока tablex.Add(player, 0); } } }
Крайний раз редактировалось Octocat; 13.01.2012 в 18:26.
Если под рукой нет Вижуал Студио, в подобных случаях можно делать так:
- Смотрим какие новые классы введены в программу:
1. Dictionary - он из System.Collections, и к возникшей проблеме явно не имеет отношения.
2. Application - этот подозрительный, смотрим на него доку в онлайн MSDN-е, и там видим такие строчки:
Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in System.Windows.Forms.dll)
Ага, это явно наш пациент.
Добавляем в скрипт макрос с линком на указанную в доке сборку:
//$reference System.Windows.Forms.dll
Полный путь к сборке указывать не надо, она системная, поэтому заранее откомпилированная лежит в глобальном кэше сборок, и там будет найдена по любому.![]()
По кикобане посредством скриптов ничего нового? Все остановилось на этом?
http://forum.1cpublishing.eu/showthr...246#post348246
Как получить чьё-то сообщение из чата?
Крайний раз редактировалось Vetochka; 04.01.2012 в 15:29.
Small_Bee кажется говорил, что его лимитер-коммандер читает чат через телнет. Телнет программка, что стоит на Репках тоже видит, что в чате пишется.
По другому видимо только лог копировать, сравнивать с новым и парсить новые строчки, что образовались.
Разработчики давно молчат по этому поводу.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Подвох, сорри за нерабочий пример, вот 100% рабочий код:
Код://$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Xaml.dll" //$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WindowsBase.dll" //$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\PresentationFramework.dll" using System; using System.Globalization; using System.IO; using System.Windows; using maddox.game; using maddox.GP; using maddox.game.world; public class Mission : AMission { private void Log(string format, params object[] args) { GamePlay.gpLogServer(new[] { GamePlay.gpPlayer() }, string.Format(CultureInfo.InvariantCulture, format, args), null); } public override void OnBattleInit() { base.OnBattleInit(); try { if (Application.Current == null) { new Application(); Log("**Application Instance Created"); } Application.Current.Properties.Add("AF2505FCA", "OurStatsTable"); Log("**Stats Table Added"); if (Application.Current.Properties.Contains("AF2505FCA")) { Log("**Stats Table Founded"); Log("**Value is: {0}", (string)System.Windows.Application.Current.Properties["AF2505FCA"]); } } catch (Exception error) { Log("**EXCEPTION: {0}", error); } } }
Крайний раз редактировалось Octocat; 09.01.2012 в 14:48.
Полная версия, с таблицей достижений:
Код://$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Xaml.dll" //$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WindowsBase.dll" //$reference "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\PresentationFramework.dll" using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Windows; using maddox.game; using maddox.game.world; public class Mission : AMission { private void Log(string format, params object[] args) { GamePlay.gpLogServer(new[] { GamePlay.gpPlayer() }, string.Format(CultureInfo.InvariantCulture, format, args), null); } public override void OnBattleInit() { base.OnBattleInit(); try { // Master-mission if (true) { var player = GamePlay.gpPlayer(); var pscore = PlayerScore.Get(player.Name()); Log("********Initial PlayerScore {0}", pscore); } // Submission Timeout(5, () => { var player = GamePlay.gpPlayer(); var pscore = PlayerScore.Get(player.Name()); pscore.KillsGnd++; pscore.Score += 10; Log("********PlayerScore After Tank Destroyed {0}", pscore); }); // Another submission Timeout(10, () => { var player = GamePlay.gpPlayer(); var pscore = PlayerScore.Get(player.Name()); pscore.KillsAir++; pscore.Score += 50; Log("********PlayerScore After Aircraft Killed {0}", pscore); }); } catch (Exception error) { Log("********EXCEPTION: {0}", error); } } class PlayerScore { public string Name { get; private set; } public double Score { get; set; } public int KillsAir { get; set; } public int KillsGnd { get; set; } public override string ToString() { return string.Format(CultureInfo.InvariantCulture, "Name:{0} Score:{1} KillsAir/Ground: {2}/{3}", Name, Score, KillsAir, KillsGnd); } public static PlayerScore Get(string pname) { if (Application.Current == null) { new Application(); } string token = "AF2505FCA"; Dictionary<string, PlayerScore> table = null; if (Application.Current.Properties.Contains(token)) { table = (Dictionary<string, PlayerScore>)Application.Current.Properties[token]; } else Application.Current.Properties.Add(token, table = new Dictionary<string, PlayerScore>()); PlayerScore pscore = null; if (table.TryGetValue(pname, out pscore) == false) { table.Add(pname, pscore = new PlayerScore() { Name = pname }); } return pscore; } } }
Крайний раз редактировалось Octocat; 09.01.2012 в 14:45.
Спасибо большое!
Пока не пробовал, но уже выяснил что NET 4.0 у меня по указанному пути нет.В этой папке только 3.0 , 3.5. Сам 4-й есть, на всякий случай заново установил. Наверное искать его надо
Нашелся в папке Windows по такому пути:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
На сервере это не создаст проблемы?
Да, у меня они тоже там есть. Поправил исходный пост.
Попробуй, думаю все будет нормально.
1. Сейчас есть возможность в скриптах завершить миссию без использования аддинов? И загрузить потом следующую, т.е. oрганизовать ротацию?
Пробовал сделать ротацию на выделенном - первая миссия грузится нормально, в последующих подмиссии не грузятся. Читал на желтом о различии команд f и file, но не разобрался, подписсии все равно оказываются за бортом.
2. Старт самолетов на парковке сейчас корректно работает?
Крайний раз редактировалось podvoxx; 10.01.2012 в 12:21.
Это только из .cmd файла вроде. Из скрипта должно работать если все миссии будут подмиссией мастермиссии или 2я миссия будет подмиссией первой и т.д. Самое надежное, наверное, все подмиссии всех миссий из одного мастер-скрипта грузить.
Ошибка вроде бы с отправкой сообщений как-то связана. Попробуй отключить. На выделенном сервере отсутствуют player, есть только remoteplayers емнип. У Kodiak система сообщений для онлайна и офлайна отличается поэтому.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Так и есть сейчас. Могу выслать миссию
Вот тут может быть. Хотя на нуль проверяется, а у Кодиака скрипты универсальные. Видимо из-за player, хотя проверка стоит же вроде..
Код://=========================LOCALIZATION============================= string[] languageArray = { "en", "ru", "de", "fr", "es", "cs", "it", "pl" }; //******************Localize Message Method******************* private string getLocalizedMessage(string textTranslate) { if (GamePlay.gpPlayer() != null) { string[] localizeArray; string langIndex = GamePlay.gpPlayer().LanguageName(); switch (textTranslate) { //GET TEAM POINTS and win-msg case "getPointsRED": { localizeArray = new string[] { "Red team gets points for complite task : ", "Команда красных получает очки за выполнение задания: ", "Red team gets points for complite task : ", "Red team gets points for complite task : ", "Red team gets points for complite task : ", "Red team gets points for complite task : ", "Red team gets points for complite task : ", "Red team gets points for complite task : " }; return localizeArray.GetValue(Array.IndexOf(languageArray, langIndex)).ToString(); } break; } return textTranslate; } //======================================================================
[QUOTE=podvoxx;1767574]Так и есть сейчас. Могу выслать миссию
Вот тут может быть. Хотя на нуль проверяется, а у Кодиака скрипты универсальные.
Высылал ты мне эту миссию? Если хочешь, прикручу к ней свой локалайзер и отправлю назад - сразу пример будет.