
Сообщение от
podvoxx
Вопрос по респаунам BirthPlace появился.
Есть набор эскадрилий, у каждой на вооружении стоят определенные самолеты. Задача - изменение плейнсета на аэродроме в зависимости от находящихся на нем эскадрилий.
При загрузке миссии читается файл сохранения, откуда берется список эскадрилий и аэродромы на которых они базируются, далее в цикле каждая авиачасть добавляется на свой аэродром. При этом удаляется старый респаун с таким же именем и создается новый. Но тут я не учел время на загрузку подмиссии с респауном(а он создается как подмиссия). Получается что удаления не происходит, т.к. респаун еще не был загружен. В результате загружаются все подмиссии с респаунами и для каждой эскадрилии создается свой отдельный с таким же именем(кол-во респаунов равно кол-во добавленных эскадрилий, т.к. неактуальные не удаляются). При получении массива выглядит это примерно так:
Создано два респауна Dieppe_Saint_Aubin с одинаковыми координатами, но активный тот, что создан первым(где доступны только спиты). Это не дает быстро менять доступные самолеты на аэродромах, нужно вводить какую-то задержку для загрузки подмиссии с респауном.
я бы просто в миссию с BirthPlace-ом из списка все доступные самолёты добавлял и эту миссию грузил - получится на одном аэродроме - один спаун, с доступными самолётами, не надо никаких таймеров и т.п. что-то типа такого -
Код:
ISectionFile f = GamePlay.gpCreateSectionFile();
string sect;
string key;
string value;
for (int i = 0; i < список аэродромов.length; i++)
{
sect = "BirthPlace";
key = список аэродромов[i].name;
string Country = ".";
if (army == 1) Country = "gb"; // страну выбираем
if (army == 2) Country = "de";
value = " " + army.ToString() + " " + (список аэродромов[i].x).ToString() + " " + (список аэродромов[i].y).ToString() + " 0 " + BPMaxPlanesAllowed + " " + BPSpawnParked + " 0 " + Country + " . .";
f.add(sect, key, value);
sect = "BirthPlace" + список аэродромов[i].name;
string[] PlaneSet = список нужных самолётов;
if (PlaneSet.Length > 0)
for (int j = 0; j < PlaneSet.Length; j++)
{
key = PlaneSet[j];
value = "";
f.add(sect, key, value);
}
}
GamePlay.gpPostMissionLoad(f);
а в Вашем варианте, более поздние не доступны скорее не потому-что удаляться не успевают, а стоят в одной точке и при клике на них берётся какой-то верхний из списка. Ну либо надо вокруг аэродрома их расставлять, чтобы не в одной точке были.

Сообщение от
podvoxx
Вопрос такой. Возможно ли создание BirthPlace не используя подмиссию(чтобы сразу получить над ним контроль, не дожидаясь загрузки подмиссии)?
Возможно ли модифицировать уже созданный BirthPlace(поменять настройки, изменить список самолетов). Нашел пока только методы для чтения параметров BirthPlace.
нет, создать без миссии или модифицировать нельзя, только дестроить и читать св-ва.

Сообщение от
podvoxx
Я пока придумал вариант с периодическим(например 5-10 сек) сканированием массива GamePlay.gpBirthPlaces() и при наличии в нем BirthPlace с одинаковыми именами удалять имеющие меньший индекс, но это будут постоянные проверки в OnTickGame()
ну вот как выше написал, например, по событию когда надо сменить спаун - удаляете старый и генерите миссию в которой в одном спауне все нужные самолёты прописаны(у меня правда для списка аэродромов написано но для одного то-же самое будет, без верхнего цикла), мне кажется это оптимальный вариант.