???
Математика на уровне МГУ

Показано с 1 по 25 из 789

Тема: Вопросы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Механик
    Регистрация
    12.05.2011
    Возраст
    33
    Сообщений
    491

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    да, корабль - это AiGroundActor и AiGroundGroup ,с типом Ship , всех

    скорее всего - да.
    это сейчас уже можно, например в скрипте миссии:
    Искреннее спасибо вам!

  2. #2
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    47
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Вопросы по поводу CTF_cross_roundel миссии.

    При открытии подмиссий в полном редакторе не появляются ни танки, ни самолеты, ни точки маршрута (открывается чистая карта), хотя в тексте миссии они есть, если открыть ее блокнотом. Почему это происходит?
    секция с описанием карты, времени и пр. начальных условий миссии не нужна в подмиссии - ведь она загружается к уже запущенной миссии - поэтому такую секцию я удалил - так подмиссия чуть-чуть, но быстрее грузится. Если надо в редакторе открыть - можно просто из основной эту секцию скопировать в файл подмиссии :
    Код:
    [PARTS]
      core.100
      bob.100
    [MAIN]
      MAP Land$Online_Cross_v_Roundel
      BattleArea 6000 6000 26000 26000 1000
      TIME 16
      WeatherIndex 0
      CloudsHeight 1000
      BreezeActivity 10
      ThermalActivity 10
    Цитата Сообщение от -atas- Посмотреть сообщение
    Я правильно понимаю, что чтобы скрипт работал на другой карте, достаточно в нем поменять координаты MissionMarker?
    да, верно

    Цитата Сообщение от -atas- Посмотреть сообщение
    Обязательно ли MissionMarker должны стоять на аэродромах или можно их ставить в любую точку, перенеся на эту точку радиус триггеров changearmy?
    нет, конечно не обязательно, аэродромы я для наглядности сделал. В принципе - триггер и маркер могут не совпадать, но мне кажется так удобнее.
    Цитата Сообщение от -atas- Посмотреть сообщение
    Не будет ли скрипт создавать в этих местах BirthPlace_?
    именно этот, который сейчас - будет, т.к. он берёт координаты birthPlace-ов из координат маркеров . Но можно сделать отдельный массив для birthPlace-ов - и рожать их по координатам из этого массива.
    Цитата Сообщение от -atas- Посмотреть сообщение
    Хотелось бы повоевать за населенные пункты тоже, не только за аэродромы. BirthPlace в этом случае, оказываясь за линией фронта будут менять сторону или необходимо, чтобы их координаты совпадали с MissionMarker?
    в общем случае нет, не необходимо, в этом скрипте т.к. маркеры совпадают с БП - я брал армию из маркеров, чтобы сделать как Вы хотите - надо загрузку разделить - сначала по триггеру загружаем новые маркеры фронта, а после их загрузки - уничтожаем все bP и загружаем их в новой миссии - координаты берём из массива с bP, а армию - через такую ф-цию :
    GamePlay.gpFrontArmy(bP.Pos().x, bP.Pos().y) - после загрузки маркеров линия фронта пересчитается - и эта ф-ция выдаст на чьей территории стоят наши bP. Дальше генерируем миссию с bP и загружаем её.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Можно ли увеличить количество MissionMarker до 8-12 без внесения изменений в скрипт, а только внеся их координаты вначале скрипта?
    да, конечно, везде стоят циклы которые по всей длине массива пробегают, т.е. изменение кол-ва элементов на работу никак не повлияет.
    Цитата Сообщение от -atas- Посмотреть сообщение
    В идеале, конечно желательно, чтобы скрипт сам считывал первоначальные координаты маркеров из главного файла миссии, чтобы создателю миссии даже не приходилось открывать скрипт, а просто создать подмиссии, назвав их по соответствующей схеме.
    я сейчас не помню, есть ли маркеры как объекты при загрузке миссии, наверное можно и так , либо прочитать файл с миссией начальной и там маркеры найти, в принципе , должно так работать.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Как следствие возникнет вопрос не только изменения цвета MissionMarker, но и их движения. Можно ли, например 1 раз в 5 минут рассчитывать новые положения MissionMarker по координатам танковых групп и скоплений арты\ААА? Скажем, танковая группа является маркером пока она не уничтожена более, чем на 50%? Тогда линия фронта будет двигаться автоматически за танками, а филды перекрашиваться, как только они попадут за линию фронта. Создателю миссий останется только нарисовать подмиссии с техникой и назвать триггеры по определенной схеме, не вникая в основной скрипт.
    с группами можно, конечно - для этого не нужен будет массив с маркерами - просто пробегаем по всем AiGroundGroup с их страной и генерируем миссию с фронтмаркерами с координатами в этих группах - для такого подхода и триггеры не нужны, разве только, чтобы новые атакующие силы спаунить при уничтожении предыдущих. Со скоплениями артиллерии хуже - она в группы не входит, там надо позамороченнее как-то определять куда маркер ставить.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Пока необходимость знания C# является препятствием для создания миссий. Например, создатель миссий известного сервера Синдикат не имеет представления о программировании, как и большинство других в этом разделе http://forum.1cpublishing.eu/forumdisplay.php?f=203 . Учитывая это, желательно предложить коммюнити набор готовых скриптов, которые сами будут считывать данные из файлов миссий, созданных в редакторе и обеспечивать определенный функционал (движение ЛФ, перекрас филдов, генерация вейпойнтов...), чтобы создатель миссий мог просто забросить несколько таких скриптов в папку с миссией в зависимости от потребностей и заполнить небольшой mission.ini с их списком и необходимыми вводными данными, не открывая сами скрипты в Студии. Т.е. желательно разделить труд программистов и создателей миссий с помощью удобных инструментов.
    ну, тут, наверное, можно посоветовать только собирать удачные куски скриптов где-то, чтобы создатель миссий подбирал скрипты подходящие для его задач и вставлял его в свои миссии, как Вы понимаете, этот движок настолько мощный, что можно создать скрипт практически на все случаи жизни и сделать это сотней способов - мы сами просто не сможем сделать большим такой набор - большая надежда на заинтересованное сообщество. Насчёт вышеописанного, постараюсь по этим моментам скрипт накидать, но не обещаю быстро.

    Да, кстати, сегодня заглянул на жёлтый форум, есть негугловый перевод описания к миссии с захватом аэродромов:
    There are four airfields on the map. They are your primary capture locations.
    An aircraft is considered captured once the opposing sides armor enters its perimeter. The airfield perimeter is defended with artillery and flak. Once attacking armor is destroyed, a new group of armor will be spawned to continue the assault. Destroyed artillery and flak are not restored.
    Once an airfield is captured, the front line will move and the airfield will change sides allowing the new owner to spawn there. Defending artillery will also spawn for the new owner, while the old owner will spawn an attacking armor group. Finally, capturing an airfield will spawn an AI-controlled aircraft group for the enemy, attacking both air and ground targets.
    Capturing the most airfields is the overall objective for this mode.
    The score system is simple. Capturing an airfield awards 10 points to the victorious side. Defending an airfield, that is, destroying an enemy armor group, awards 1 point.
    может иностранцам попонятнее будет.

    и ещё в скрипте некритичную ошибку нашёл, ф-ция FindOurAirfield(int army, AiActor actor) должна так выглядеть:
    Код:
    internal AiAirport FindOurAirfield(int army, AiActor actor)
        {
            AiAirport result = null;
            Point3d attackerPos = actor.Pos();
            AiAirport[] airports = GamePlay.gpAirports();
    
            if (airports != null)
            {
                foreach (AiAirport airport in airports) 
                {
                    if (GamePlay.gpFrontArmy(airport.Pos().x, airport.Pos().y) == army)
                    {
                        if (result != null)
                        {
                            if (result.Pos().distance(ref attackerPos) > airport.Pos().distance(ref attackerPos))
                                result = airport;
                        }
                        else result = airport;                    
                    }
                }
            }
            return result;
        }

    Цитата Сообщение от cFobos Посмотреть сообщение
    Искреннее спасибо вам!
    да не за что
    Don't happy, be worry

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •