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

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

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

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

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

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Нарисовали подмиссии для карты с Repka #1, но возникла проблеммка: Филды не перекрашиваются, ЛФ не двигается.
    По достижению красными танками красного филда в D3 срабатывает тригер, пишется сообщение о захвате. Далее красные танки дестроились на своем же филде, пришлось эту часть скрипта выключить.
    После этого красные танки проезжают маркер на синем филде в D3. Триггер не срабатывает, маркер не перекрашивается. Затем эти танки доезжают до синего филда в D4, триггер не срабатывает.

    Сообщение о захвате красными поля в D3 возникает периодически (хотя оно всегда было красным). Счет за захват начисляется, причем растет счет у обеих сторон и разница постоянна и составляет 10 очков (у красных на 1 захват больше.) Синее поле в D3 тоже есть, и его красные танки проезжают, но оно не перекрашивается.

    Синие танки, атакующие Е3 и затем F3 не вызывают срабатывание триггера.

    Миссию можно прогонять в оффлане с ускорением времени. Тестировалось именно так. Миссия во вложении.
    BoF2.zip

    Подмиссии присутствуют не для каждого маркера (соответствено, не для каждого триггера). Надеюсь, это не вызовет проблем при попытке скрипта их подгрузить.

    Скрипт приходится прикладывать также файлом, т.к. превышает допустимую длину сообщения. Переименован в txt.

    BoF_1_main1_8.txt

    (Часть кода отключена, но будет включаться позже. Если сразу увидите нестыковки, буду благодарен за совет.)
    Сейчас глянул быстро, завтра подробнее посмотрю. Вы отключили уничтожение танков на маркере, поэтому получается такая ситуация - синие приезжают к маркеру, он срабатывает перекрашивая маркер, но поскольку там же находятся красные - тут же срабатывает обратный триггер и перекрашивает маркер опять в красный, происходит это достаточно быстро - счёт начисляется и тем и другим но смена ЛФ происходит незамеченной. Т.е. надо сделать так, чтобы одновременно две группы разных цветов у одного маркера не оказывались, либо, при перекраске маркера проигравшая группа уничтожалась. По поводу вопроса "что за триггер активируется?" - там не активируется а наоборот деактивируется триггер, который был у меня в каждой атакующей подмиссии - когда группа танков уничтожалась защитниками - рождалась новая группа танков, но при смене маркера, новая группа танков нам не нужна - вот я этот триггер и выключал.

    PS спаунточки в начальной миссии не нужны - они всё равно при старте битвы удалятся.
    Don't happy, be worry

  2. #2
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Вы отключили уничтожение танков на маркере, поэтому получается такая ситуация - синие приезжают к маркеру, он срабатывает перекрашивая маркер, но поскольку там же находятся красные - тут же срабатывает обратный триггер и перекрашивает маркер опять в красный, происходит это достаточно быстро - счёт начисляется и тем и другим но смена ЛФ происходит незамеченной.
    Там синие и красные атакуют разные направления, на одном филде не встречаются. Но на будущее, конечно надо бы такие ситуации исключить, т.к. могут встретиться. В принципе нормально, если маркер меняет цвет несколько раз подряд, т.к. резервы могут подтягиваться в зону действия тригера по очереди. Если так, пусть воюют до конца честно, а дестроить врагов нужно только в радиусе спауна, чтобы не обижали игроков при спауне на захваченном филде. На маркере пусть все идет естественным путем, как в жизни. Может быть его нейтральным делать на время боя или таймаут ввести перед перекрашиванием, или красить в цвет стороны, которой в радиусе присутствует больше (проверять раз в 5 минут, например).

    Отключение уничтожения танков - это следствие. Т.к. красные приезжают на свой же красный филд в D3, почему-то пишется сообщение о захвате своего же изначально филда, и эти же красные танки уничтожаются скриптом как будто бы они синие, как я описал выше. Т.е. как будто срабатывает противоположный тригер. А синих там и близко не было, они другой фланг совсем атакуют в Е3. Только после этого уничтожение танков было отключено.

    PS. я как-то писал о баге, что при сохранении миссии триггер на проезд синей наземки сбрасывается на проезд красной наземки (спорадически наблюдается, как и британские взрыватели к немецким бомбам). Возможно, это он вылезает: приезжает красная группа, а срабатывает синий триггер, который уничтожает красные танки, но перед этим они успевают перекрасить филд снова в красный, т.к. триггера там 2. Видимо нужен таймаут на перекрашивание маркера и филдов: если за пару минут враги не приехали, перекрасить, если приехали, отсчитывать заново и проверять чья взяла каждые 2-5 минут.
    Крайний раз редактировалось -atas-; 31.05.2011 в 20:09.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

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

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Там синие и красные атакуют разные направления, на одном филде не встречаются. Но на будущее, конечно надо бы такие ситуации исключить, т.к. могут встретиться. В принципе нормально, если маркер меняет цвет несколько раз подряд, т.к. резервы могут подтягиваться в зону действия тригера по очереди. Если так, пусть воюют до конца честно, а дестроить врагов нужно только в радиусе спауна, чтобы не обижали игроков при спауне на захваченном филде. На маркере пусть все идет естественным путем, как в жизни. Может быть его нейтральным делать на время боя или таймаут ввести перед перекрашиванием, или красить в цвет стороны, которой в радиусе присутствует больше (проверять раз в 5 минут, например).

    Отключение уничтожения танков - это следствие. Т.к. красные приезжают на свой же красный филд в D3, почему-то пишется сообщение о захвате своего же изначально филда, и эти же красные танки уничтожаются скриптом как будто бы они синие, как я описал выше. Т.е. как будто срабатывает противоположный тригер. А синих там и близко не было, они другой фланг совсем атакуют в Е3. Только после этого уничтожение танков было отключено.

    PS. я как-то писал о баге, что при сохранении миссии триггер на проезд синей наземки сбрасывается на проезд красной наземки (спорадически наблюдается, как и британские взрыватели к немецким бомбам). Возможно, это он вылезает: приезжает красная группа, а срабатывает синий триггер, который уничтожает красные танки, но перед этим они успевают перекрасить филд снова в красный, т.к. триггера там 2. Видимо нужен таймаут на перекрашивание маркера и филдов: если за пару минут враги не приехали, перекрасить, если приехали, отсчитывать заново и проверять чья взяла каждые 2-5 минут.
    Ух, вроде разобрался в чём дело миссия, конечно, головусворачивающая по количеству всего что там есть . Значит основная проблема с некорректно срабатывающими триггерами - это армии заданные в миссии, вот эти строчки в файле основной миссии:
    Army 1 gb
    Army 2 de

    вариантов решения проблемы сейчас 2 - либо эти строчки удалить совсем(наверное более предпочтительный), либо дополнить ещё одной вот так:
    Army 0 nn
    Army 1 gb
    Army 2 de

    в след. патче уже можно будет оставлять 2 армии, как и было изначально в миссии.

    Соответственно уничтожение танков на маркере в скрипте можно включить назад, свои танки не должны больше убиваться. Ещё нашёл свой косяк в скрипте - везде MissionMarkers.Capacity лучше заменить на MissionMarkers.Count, а то эксепшны будут сыпаться.
    Теперь по самой миссии - вот этот кусок
    Код:
    [NPC]
      10_Chief Armor.SdKfz_222 de /posx 271412.66/posy 205413.17 /npc_count 4/target Spawn3 - Attack D3 /num_units 4
      16_Chief Armor.Guy_Mk_IA gb /posx 277976.34/posy 195607.69 /script baseAntiAir.cpp/npc_count 4/target BirthPlace_0 - Attack D3 /num_units 4
      7_Chief Armor.Beaverette_III gb /posx 273296.41/posy 200605.77 /script baseAntiAir.cpp/npc_count 4/num_units 4
      17_Chief Armor.SdKfz_222 gb /posx 287501.72/posy 202349.14 /script baseAntiAir.cpp/npc_count 4/target BirthPlace_5 - Attack D3 /num_units 4
      0_Chief Armor.Guy_Mk_IA gb /posx 272533.38/posy 200932.58 /script baseAntiAir.cpp/npc_count 8/num_units 8
      1_Chief Armor.SdKfz_222 gb /posx 276254.53/posy 191791.23 /script baseAntiAir.cpp/npc_count 4/target BirthPlace_01 - Attack D3 /num_units 4
    почти весь неправильный - скрипт baseAntiAir.cpp для прожекторов, не для техники, техника рождаться не будет, и очень возможны глюки различные , с таргетами для наземки тоже неправильно, в случае техники таргет будет работать на сплайновой дороге если скрипт car.cpp назначен NPC группе.
    Ну и в целом всё сразу сделано много и сложно, очень сложно отладить так - лучше кусочками делать - поставили пушки, пустили пару групп танчиков - если корректно отработали - дальше уже добавляем усложняем и т.д. а то сразу куча объектов все по своему работают и сложно понять кто что и почему делает . А так, без строчек с армиями прогнал - вроде всё перекрашивается как надо.
    Don't happy, be worry

  4. #4
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    А так, без строчек с армиями прогнал - вроде всё перекрашивается как надо.
    Еще раз спасибо, с мелкими вопросами типа пересчет счета и изменение логики атак пытаюсь сам разобраться.

    У меня просьба на будущее. В версии скрипта для островной карты "кресты и круги" была часть, генерирующая вейпойнты для бомбардировщиков.

    Хотелось бы посмотреть пример генерации вейпойнтов для танков, например:

    - группа танков захватила маркер
    - на маркере генерится оборона из противотанковой артиллерии и немного ПВО для прикрытия арты
    - если потери группы танков больше 50% на захваченном маркере генерится новая подмиссия с танками (подкрепление)
    - старые и новые танки выдвигаются на сгенеренные вейпойнты
    - вейпойнты генерятся, например, по алгоритму:
    - если между танками и одним из своих маркеров есть маркер противника, если он не за водной преградой, захватываем его (чтобы в тылу не оставлять незахваченные территории).
    - если в радиусе расстояния до этого маркера есть вражеская наземка - атакуем сначала наземку,
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - берем координаты 2х ближайших ключевых объектов из числа аэродромов и городов на территории противника
    - создаем конечный вейпойнт в точке с координатами посередине между этими пунктами (чтобы в города и на аэродромы не въезжать), если там суша и не остров
    - если в радиусе расстояния до этого вейпойнта есть вражеская наземка - атакуем сначала наземку,
    - проверяем, есть ли в радиусе маркер противника, захватываетм его
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - едем к конечному вейпойнту, захватываем его, ставим на нем маркер линии фронта своего цвета

    Количесто возрождений одной и той же группы ограничиваем 3 в рамках одного цикла, затем атакуем в другом месте карты либо атаковать начинает противник. Пока нет менеджмента ресурсов и сапплая это можно сделать рандом выбором, а в дальнейшем привязать к уровню сапплая района: атакует тот, у кого сапплай выше, например.

    Может возникнуть проблемка с непроходимостью некоторых участков карты для танков, пока ИИ не выведен на достаточный уровень. Мосты бывают непроходимы для танков. Говорят, реки можно пересекать без мостов по сплайн-дорогам. Против застревания в населенных пунктах можно запретить танкам приближаться к домикам (ставить объездные вейпойнты), и предусмотреть, что если группа не находится на конечном вейпойнте или в бою и при этом не двигается 5 минут, ставить промежуточный вейпойнт где-то сзади и сбоку (чтобы объехать препятствие). В крайнем случае дестроить совсем застрявшую группу и создавать новую с новым маршрутом.

    Тем временем постараемся запутить на Repka миссию с подмиссиями нарисованными вручную, что сильно ограничивает регион действий.
    Крайний раз редактировалось -atas-; 06.06.2011 в 13:51.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

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

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Еще раз спасибо, с мелкими вопросами типа пересчет счета и изменение логики атак пытаюсь сам разобраться.

    У меня просьба на будущее. В версии скрипта для островной карты "кресты и круги" была часть, генерирующая вейпойнты для бомбардировщиков.

    Хотелось бы посмотреть пример генерации вейпойнтов для танков, например:

    - группа танков захватила маркер
    - на маркере генерится оборона из противотанковой артиллерии и немного ПВО для прикрытия арты
    - если потери группы танков больше 50% на захваченном маркере генерится новая подмиссия с танками (подкрепление)
    - старые и новые танки выдвигаются на сгенеренные вейпойнты
    - вейпойнты генерятся, например, по алгоритму:
    - если между танками и одним из своих маркеров есть маркер противника, если он не за водной преградой, захватываем его (чтобы в тылу не оставлять незахваченные территории).
    - если в радиусе расстояния до этого маркера есть вражеская наземка - атакуем сначала наземку,
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - берем координаты 2х ближайших ключевых объектов из числа аэродромов и городов на территории противника
    - создаем конечный вейпойнт в точке с координатами посередине между этими пунктами (чтобы в города и на аэродромы не въезжать), если там суша и не остров
    - если в радиусе расстояния до этого вейпойнта есть вражеская наземка - атакуем сначала наземку,
    - проверяем, есть ли в радиусе маркер противника, захватываетм его
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - едем к конечному вейпойнту, захватываем его, ставим на нем маркер линии фронта своего цвета

    Количесто возрождений одной и той же группы ограничиваем 3 в рамках одного цикла, затем атакуем в другом месте карты либо атаковать начинает противник. Пока нет менеджмента ресурсов и сапплая это можно сделать рандом выбором, а в дальнейшем привязать к уровню сапплая района: атакует тот, у кого сапплай выше, например.

    Может возникнуть проблемка с непроходимостью некоторых участков карты для танков, пока ИИ не выведен на достаточный уровень. Мосты бывают непроходимы для танков. Говорят, реки можно пересекать без мостов по сплайн-дорогам. Против застревания в населенных пунктах можно запретить танкам приближаться к домикам (ставить объездные вейпойнты), и предусмотреть, что если группа не находится на конечном вейпойнте или в бою и при этом не двигается 5 минут, ставить промежуточный вейпойнт где-то сзади и сбоку (чтобы объехать препятствие). В крайнем случае дестроить совсем застрявшую группу и создавать новую с новым маршрутом.

    Тем временем постараемся запутить на Repka миссию с подмиссиями нарисованными вручную, что сильно ограничивает регион действий.
    Сорри, у меня сейчас времени совсем нет чтобы рабочий скрипт с этими условиями написать .
    Вообще наземке путь так задаётся :
    у AiGroup есть ф-я SetWay(AiWayPoint[] way) которая пускает группу по пути. Чтобы самому не забивать маршрут, есть ф-я GamePlay.gpFindPath(GP.Point2d a, double ra, GP.Point2d b, double rb, PathType type, int army) , где a - начальная точка пути, b - конечная ra и rb - радиусы, в которых точка считается достигнутой, PathType для наземки PathType.GROUND , ну а army - армия группы. Чтобы пустить группу по маршруту, соответственно надо узнать точки (начальная - Pos() нашей группы), начать считать маршрут
    Код:
    IRecalcPathParams cur_rpp =  GamePlay.gpFindPath(тут наши параметры пути);
    т.к. путь ищется в отдельном потоке, в OnTickGame() надо проверять статус маршрута:
    if (cur_rpp.State == RecalcPathState.SUCCESS) 
         GroundGroup.SetWay(cur_rpp.Path); // если посчитался, тогда командуем группе двигаться
    примерно так.
    Вообще по идее дома они должны объезжать, но иногда тупят, при этом через некоторое время должны выехать когда построят новый путь.
    Don't happy, be worry

  6. #6

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    т.к. путь ищется в отдельном потоке, в OnTickGame() надо проверять статус маршрута:
    О, а вот за вот это спасибо, теперь ясно. Я то я совсем залип со статусом WAITING.

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

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    Еще раз спасибо, с мелкими вопросами типа пересчет счета и изменение логики атак пытаюсь сам разобраться.

    У меня просьба на будущее. В версии скрипта для островной карты "кресты и круги" была часть, генерирующая вейпойнты для бомбардировщиков.

    Хотелось бы посмотреть пример генерации вейпойнтов для танков, например:

    - группа танков захватила маркер
    - на маркере генерится оборона из противотанковой артиллерии и немного ПВО для прикрытия арты
    - если потери группы танков больше 50% на захваченном маркере генерится новая подмиссия с танками (подкрепление)
    - старые и новые танки выдвигаются на сгенеренные вейпойнты
    - вейпойнты генерятся, например, по алгоритму:
    - если между танками и одним из своих маркеров есть маркер противника, если он не за водной преградой, захватываем его (чтобы в тылу не оставлять незахваченные территории).
    - если в радиусе расстояния до этого маркера есть вражеская наземка - атакуем сначала наземку,
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - берем координаты 2х ближайших ключевых объектов из числа аэродромов и городов на территории противника
    - создаем конечный вейпойнт в точке с координатами посередине между этими пунктами (чтобы в города и на аэродромы не въезжать), если там суша и не остров
    - если в радиусе расстояния до этого вейпойнта есть вражеская наземка - атакуем сначала наземку,
    - проверяем, есть ли в радиусе маркер противника, захватываетм его
    Если потери больше 50%, начинаем новый цикл.
    Если нет:
    - едем к конечному вейпойнту, захватываем его, ставим на нем маркер линии фронта своего цвета

    Количесто возрождений одной и той же группы ограничиваем 3 в рамках одного цикла, затем атакуем в другом месте карты либо атаковать начинает противник. Пока нет менеджмента ресурсов и сапплая это можно сделать рандом выбором, а в дальнейшем привязать к уровню сапплая района: атакует тот, у кого сапплай выше, например.

    Может возникнуть проблемка с непроходимостью некоторых участков карты для танков, пока ИИ не выведен на достаточный уровень. Мосты бывают непроходимы для танков. Говорят, реки можно пересекать без мостов по сплайн-дорогам. Против застревания в населенных пунктах можно запретить танкам приближаться к домикам (ставить объездные вейпойнты), и предусмотреть, что если группа не находится на конечном вейпойнте или в бою и при этом не двигается 5 минут, ставить промежуточный вейпойнт где-то сзади и сбоку (чтобы объехать препятствие). В крайнем случае дестроить совсем застрявшую группу и создавать новую с новым маршрутом.

    Тем временем постараемся запутить на Repka миссию с подмиссиями нарисованными вручную, что сильно ограничивает регион действий.
    Собственно написал:
    Dogfight.rar

    Как работает - расставляем на карте маркеры, добавляем скрипт и всё - можно миссию запускать. Что делает скрипт: при инициализации битвы собирает все маркеры, приписывает к ним триггеры на переключение. В точке каждого маркера ставит артиллерию развёрнутую к ближайшему вражескому маркеру. От всех маркеров рождает группы танков, которые едут к ближнему вражьему маркеру или ближней вражьей группе(что ближе будет). Если на маркер приехали - перекрашиваем его и обновляем спаунточки, ну как и раньше. Если группу танков убили - рождаем от ближайшего к месту гибели своего маркера новую группу. Для примера в архиве миссия с уже расставленными маркерами, карта большая, в скрипте постарался всё закомментировать, если что-то захочется поменять, должно быть более менее понятно, если не понятно - постараюсь ответить. Попробуйте, если есть желание.
    Don't happy, be worry

  8. #8
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Собственно написал:
    Большое спасибо! У меня в ближайшие пару месяцев нет возможности заниматься созданием миссий, к сожалению, но берусь выложить миссию на западном форуме. Там есть 2 человека, делающих миссии.

    Возможно, BigRepa попробует имеющуюся миссию на сервере Repka.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

  9. #9
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Попробуйте, если есть желание.
    Некоторые моменты не совсем корректно работают. Комментарии в теме Сервер Repka (по поводу Repka #2) http://www.sukhoi.ru/forum/showthrea...60#post1647360
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

Ваши права

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