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

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

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Вопрос по респаунам BirthPlace появился.

    Есть набор эскадрилий, у каждой на вооружении стоят определенные самолеты. Задача - изменение плейнсета на аэродроме в зависимости от находящихся на нем эскадрилий.

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

    Код:
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Dieppe_Saint_Aubin]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Grandvilliers]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_dH5-20]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Deauville_Saint_Gatien]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_dH5-20]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Montdidier]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BlenheimMkIV]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.DH82A]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BR-20M]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Dieppe_Saint_Aubin]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BlenheimMkIV]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.DH82A]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BR-20M]
    Создано два респауна Dieppe_Saint_Aubin с одинаковыми координатами, но активный тот, что создан первым(где доступны только спиты). Это не дает быстро менять доступные самолеты на аэродромах, нужно вводить какую-то задержку для загрузки подмиссии с респауном.

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

    Если нельзя ни первое ни второе хотелось бы, чтобы в будущем такая возможность была(подмиссии неудобны для динамичных респаунов). Также пригодилось бы событие на создание BirthPlace.
    Ну и может какой-нибудь совет кто-то даст, как в таком случае решить проблему корректной замены респауна на новый с удалением старого(так как именно он выбирается при клике на карте).
    Я пока придумал вариант с периодическим(например 5-10 сек) сканированием массива GamePlay.gpBirthPlaces() и при наличии в нем BirthPlace с одинаковыми именами удалять имеющие меньший индекс, но это будут постоянные проверки в OnTickGame()
    Крайний раз редактировалось podvoxx; 04.12.2012 в 09:22.

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Вопрос по респаунам BirthPlace появился.

    Есть набор эскадрилий, у каждой на вооружении стоят определенные самолеты. Задача - изменение плейнсета на аэродроме в зависимости от находящихся на нем эскадрилий.

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

    Скрытый текст:
    Код:
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Dieppe_Saint_Aubin]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Grandvilliers]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_dH5-20]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Deauville_Saint_Gatien]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI_dH5-20]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.HurricaneMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Montdidier]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BlenheimMkIV]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.DH82A]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BR-20M]
    [22:23:16]	Server to [podvoxx]: [TEST]: BirthPlace [Dieppe_Saint_Aubin]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkI]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.SpitfireMkIa_100oct]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BlenheimMkIV]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.DH82A]
    [22:23:16]	Server to [podvoxx]: [TEST]: at [Aircraft.BR-20M]


    Создано два респауна 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()
    ну вот как выше написал, например, по событию когда надо сменить спаун - удаляете старый и генерите миссию в которой в одном спауне все нужные самолёты прописаны(у меня правда для списка аэродромов написано но для одного то-же самое будет, без верхнего цикла), мне кажется это оптимальный вариант.
    Don't happy, be worry

  3. #3
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    я бы просто в миссию с BirthPlace-ом из списка все доступные самолёты добавлял и эту миссию грузил - получится на одном аэродроме - один спаун, с доступными самолётами, не надо никаких таймеров и т.п. что-то типа такого -
    Я так и сделал, но так как респауны постоянно меняются, а время загрузки подмиссии выходит за пределы методов, то только что созданные респауны не обрабатываются(не загрузились). Еще попробую сделать что-то вроде очереди событий типа удалить/создать, которые будут добавляться в список и обрабатываться по таймеру последовательно и учитывать время на загрузку подмиссии. А лучше наверное в событии OnMissionLoaded поставить на проверку - если есть уже такой респаун просто заменять его

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    А лучше наверное в событии OnMissionLoaded поставить на проверку - если есть уже такой респаун просто заменять его
    да, так можно без таймеров обойтись - если миссия загрузилась - тогда можно со спауном работать, не дёргаясь постоянно в тиках.
    Цитата Сообщение от podvoxx Посмотреть сообщение
    Я так и сделал, но так как респауны постоянно меняются, а время загрузки подмиссии выходит за пределы методов, то только что созданные респауны не обрабатываются(не загрузились). Еще попробую сделать что-то вроде очереди событий типа удалить/создать, которые будут добавляться в список и обрабатываться по таймеру последовательно и учитывать время на загрузку подмиссии.
    тут я не очень понял, спауны меняются многократно в пределах секунд?
    Don't happy, be worry

  5. #5
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    тут я не очень понял, спауны меняются многократно в пределах секунд?
    Да, при загрузке миссии эскадрилии добавляются на аэродром и "обновляют" респауны за очень маленький промежуток времени(по логу - в пределах одной секунды, в следующую секунду уже идет сообщение о загрузке подмиссий, но к этому времени все эскадрилии распределены). Такая же ситуация может случится при одновременном перебазировании

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Да, при загрузке миссии эскадрилии добавляются на аэродром и "обновляют" респауны за очень маленький промежуток времени(по логу - в пределах одной секунды, в следующую секунду уже идет сообщение о загрузке подмиссий, но к этому времени все эскадрилии распределены). Такая же ситуация может случится при одновременном перебазировании
    всё равно не очень понял - если в течении короткого времени спауны много раз обновляются - это, наверное, не очень хорошо с точки зрения построения логики миссии, а если один раз обновляется - тогда секундная задержка не влияет ни на что , нет?
    Don't happy, be worry

  7. #7
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    всё равно не очень понял - если в течении короткого времени спауны много раз обновляются - это, наверное, не очень хорошо с точки зрения построения логики миссии, а если один раз обновляется - тогда секундная задержка не влияет ни на что , нет?
    Они обновляются, только когда добавляются эскадрилии на аэродром, что-то вроде Airfield.Add(Sqadron Name). Добавление происходит при загрузке миссии, при отступлении с потерянной территории, при перебазировании. В методе Add происходит сначала удаление старого респауна с тем же именем(если он есть) и загрузка подмисии с новым(в котором изменяется только список доступных самолетов). Загрузка подмиссии происходит независимо от выполнения метода Add в том смысле, что добавлено уже несколько эскадрилий, а респаун еще не один не загрузился. Timeout я не могу в коде dll поставить, да и неправильно это будет так как неизвестно сколько миссия грузится. Т.е. проблема в том, что нет метода который бы создавал респаун и только после него код исполнялся дальше, сейчас одно с другим не связано. Было бы проще при возможности изменять список самолетов/вооружения уже созданных респаунов - тогда их можно было бы создать "пустыми" заранее и управлять уже только параметрами.
    OnMissionLoaded позволит сделать "пошаговую" загрузку - даже если код по созданию респаунов уже выполнен здесь можно проверить результат и убрать ненужные респауны.

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Они обновляются, только когда добавляются эскадрилии на аэродром, что-то вроде Airfield.Add(Sqadron Name). Добавление происходит при загрузке миссии, при отступлении с потерянной территории, при перебазировании. В методе Add происходит сначала удаление старого респауна с тем же именем(если он есть) и загрузка подмисии с новым(в котором изменяется только список доступных самолетов). Загрузка подмиссии происходит независимо от выполнения метода Add в том смысле, что добавлено уже несколько эскадрилий, а респаун еще не один не загрузился. Timeout я не могу в коде dll поставить, да и неправильно это будет так как неизвестно сколько миссия грузится. Т.е. проблема в том, что нет метода который бы создавал респаун и только после него код исполнялся дальше, сейчас одно с другим не связано. Было бы проще при возможности изменять список самолетов/вооружения уже созданных респаунов - тогда их можно было бы создать "пустыми" заранее и управлять уже только параметрами.
    OnMissionLoaded позволит сделать "пошаговую" загрузку - даже если код по созданию респаунов уже выполнен здесь можно проверить результат и убрать ненужные респауны.
    Ага, так вроде бы понятнее, Airfield.Add может приключаться в любой, заранее не известный момент времени и для каждого аэродрома их может быть любое количество, так? Если так и у аэродрома есть список эскадрилий на нём, я бы в конце метода Add вызвал бы функцию, которая удаляла бы спаун с именем аэродрома(если такой уже есть) и генерировала миссию со спауном в который записывались бы все доступные эскадрильи/самолёты и грузила бы её, тогда после крайнего Add-а для аэродрома всегда на нём будет актуальный спаун. Ну а если списка нет - тогда сделать его для аэродрома, и в Add добавлять сначала эскадрилью в этот список, а потом запускать рефреш спауна для этого аэродрома.
    Don't happy, be worry

  9. #9
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

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

Ваши права

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