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

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

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

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

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

    Re: Вопросы.

    1. Снова вопрос по GamePlay.gpNextMissionNumber(), намучался я тут с ним.
    При вот таком применении выдает номер подмиссии 0. Почему так может быть? До этого -1 было получается? Почему не 1?

    Код:
    public override void Inited()
        {
            SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
            GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");
           
        }
    Задача была в методе OnActorCreated сохранить все созданные акторы в заранее созданные списки. Актор добавляется в список только если номер подмиссии совпадает с тем, что получен при помощи GamePlay.gpNextMissionNumber(). Потом этими списками легко управлять: удалять акторы, заново создавать и т.п.
    Далее необходимо было удалить все созданные акторы из одного из таких списков, создать новые и также добавить по номеру подмиссии в этот же список. Аналогично третья чистка/замена
    В игре выглядит так - город сначала имеет обычное зенитное прикрытие. Как только его выбирают для штурма - все зенитки удаляются и загружается усиленный набор зениток. Штурм закончился, снова загрузился первоначальный набор зениток. Это работает и вполне нормально.
    Однако сначала я не заметил баг, но потом попались на глаза зенитки синие и красные в одной точке, так как удаление акторов не происходило из-за неправильно определенного номера подмиссии. Разница была в единицу.
    - Т.е. первая загрузка зениток - номер определен неверно, на единицу меньше
    - Вторая и третья, уже во время миссии - номер в GamePlay.gpNextMissionNumber() верный

    Тут еще особенность, точнее две. В миссии используется наследование от миссии командера. И вторая - первоначально загрузка зениток происходила до Inited(), примерно так:

    Код:
    public class Mission : RSTMission
    {
        MissionBOR Data = MissionBOR.GetInstance; // Get MissionSMP class
        public override void Inited()
        {
            SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
            GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");
           
        }
    }
    В этом Data в методе создания зениток правильный номер подмиссии определялся только если прибавить к нему единицу(так как на этот момент GamePlay.gpNextMissionNumber() равен нулю, т.е. номеру хост-миссии):

    Код:
    public void SetAAA()
            {
                AAAMisNumber = GamePlay.gpNextMissionNumber() + 1;
                SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
                SendMessage.ToServer("[SERVER]: Номер подмиссии ААА гарнизона [{0}] - [{1}]", Name, AAAMisNumber);
            }
    Однако если потом в методе OnTickGame(к примеру) удалить акторы-зенитки и создать новые методом SetAAA(), то к номеру подмиссии уже не нужно прибавлять единицу, а если прибавить - то новые акторы не попадут в список через метод OnActorCreated

    Код:
    public void SetAAA()
            {
                AAAMisNumber = GamePlay.gpNextMissionNumber();
                SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
            }
    Позже я вынес первое создание акторов в OnTickGame, номера стали совпадать.

    Т.е. сейчас так выглядит:
    Код:
    [15:19:09]	35>difficulty Vulnerability 1
    [15:19:09]	36>difficulty WindTurbulence 1
    [15:19:09]	37>missLoad missions\SMP\Battle\battle.mis
    [15:19:19]	38>[15:19:19]	Loading mission ...
    [15:19:19]	Server to [Server]: ......................
    [15:19:19]	Server to [Server]: [SERVER]: Инициализация миссии...ok
    [15:19:20]	Server to [Server]: [SERVER]: Load hostmission: Battle.mis
    [15:19:20]	Server to [Server]: [TEST] Номер подмиссии - [0]
    [15:19:20]	Load landscape...
    [15:19:22]	Load bridges
    [15:19:22]	LongBridge: wrong width. (3)
    [15:19:24]	Load static objects...
    [15:19:25]	Mission loaded. time = 5,933
    [15:19:25]	Loading mission ...
    [15:19:25]	Server to [Server]: [SERVER]: Load submission: destroyAI.mis
    [15:19:25]	Server to [Server]: [TEST]: ЗАГРУЖЕНА МИССИЯ # [1]
    Выходит до загрузки хостмиссии номер подмиссии на единицу меньше определяется?
    2. Вопрос по линии фронта. Сейчас она черная, это будет правиться?

    3. Постоянно сообщают о взрывах на аэродромах в некоторых ангарах. Имеет ли смысл собрать информацию о таких ангарах?

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    1. Снова вопрос по GamePlay.gpNextMissionNumber(), намучался я тут с ним.
    При вот таком применении выдает номер подмиссии 0. Почему так может быть? До этого -1 было получается? Почему не 1?

    Код:
    public override void Inited()
        {
            SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
            GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");
           
        }
    Inited() вызывается до загрузки хост миссии, поэтому gpNextMissionNumber() - показывает 0, это номер хост миссии будет.
    Цитата Сообщение от podvoxx Посмотреть сообщение
    Задача была в методе OnActorCreated сохранить все созданные акторы в заранее созданные списки. Актор добавляется в список только если номер подмиссии совпадает с тем, что получен при помощи GamePlay.gpNextMissionNumber(). Потом этими списками легко управлять: удалять акторы, заново создавать и т.п.
    Далее необходимо было удалить все созданные акторы из одного из таких списков, создать новые и также добавить по номеру подмиссии в этот же список. Аналогично третья чистка/замена
    В игре выглядит так - город сначала имеет обычное зенитное прикрытие. Как только его выбирают для штурма - все зенитки удаляются и загружается усиленный набор зениток. Штурм закончился, снова загрузился первоначальный набор зениток. Это работает и вполне нормально.
    Однако сначала я не заметил баг, но потом попались на глаза зенитки синие и красные в одной точке, так как удаление акторов не происходило из-за неправильно определенного номера подмиссии. Разница была в единицу.
    - Т.е. первая загрузка зениток - номер определен неверно, на единицу меньше
    - Вторая и третья, уже во время миссии - номер в GamePlay.gpNextMissionNumber() верный

    Тут еще особенность, точнее две. В миссии используется наследование от миссии командера. И вторая - первоначально загрузка зениток происходила до Inited(), примерно так:

    Код:
    public class Mission : RSTMission
    {
        MissionBOR Data = MissionBOR.GetInstance; // Get MissionSMP class
        public override void Inited()
        {
            SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
            GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");
           
        }
    }
    В этом Data в методе создания зениток правильный номер подмиссии определялся только если прибавить к нему единицу(так как на этот момент GamePlay.gpNextMissionNumber() равен нулю, т.е. номеру хост-миссии):

    Код:
    public void SetAAA()
            {
                AAAMisNumber = GamePlay.gpNextMissionNumber() + 1;
                SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
                SendMessage.ToServer("[SERVER]: Номер подмиссии ААА гарнизона [{0}] - [{1}]", Name, AAAMisNumber);
            }
    Однако если потом в методе OnTickGame(к примеру) удалить акторы-зенитки и создать новые методом SetAAA(), то к номеру подмиссии уже не нужно прибавлять единицу, а если прибавить - то новые акторы не попадут в список через метод OnActorCreated

    Код:
    public void SetAAA()
            {
                AAAMisNumber = GamePlay.gpNextMissionNumber();
                SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
            }
    Позже я вынес первое создание акторов в OnTickGame, номера стали совпадать.

    Т.е. сейчас так выглядит:
    Код:
    [15:19:09]	35>difficulty Vulnerability 1
    [15:19:09]	36>difficulty WindTurbulence 1
    [15:19:09]	37>missLoad missions\SMP\Battle\battle.mis
    [15:19:19]	38>[15:19:19]	Loading mission ...
    [15:19:19]	Server to [Server]: ......................
    [15:19:19]	Server to [Server]: [SERVER]: Инициализация миссии...ok
    [15:19:20]	Server to [Server]: [SERVER]: Load hostmission: Battle.mis
    [15:19:20]	Server to [Server]: [TEST] Номер подмиссии - [0]
    [15:19:20]	Load landscape...
    [15:19:22]	Load bridges
    [15:19:22]	LongBridge: wrong width. (3)
    [15:19:24]	Load static objects...
    [15:19:25]	Mission loaded. time = 5,933
    [15:19:25]	Loading mission ...
    [15:19:25]	Server to [Server]: [SERVER]: Load submission: destroyAI.mis
    [15:19:25]	Server to [Server]: [TEST]: ЗАГРУЖЕНА МИССИЯ # [1]
    Выходит до загрузки хостмиссии номер подмиссии на единицу меньше определяется?
    до загрузки 0-й миссии gpNextMissionNumber() будет показывать 0 (см. лог -
    [15:19:09] 37>missLoad missions\SMP\Battle\battle.mis
    [15:19:19] 38>[15:19:19] Loading mission ... - миссия начала загружаться
    [15:19:20] Server to [Server]: [TEST] Номер подмиссии - [0] - она ещё не загружена, миссий в битве ещзё нет, gpNextMissionNumber() показывает 0
    [15:19:25] Mission loaded. time = 5,933 а вот тут она уже загрузилась, в битве есть миссия, gpNextMissionNumber() покажет 1),и я очень бы не советовал загружать какие-то подмиссии до старта основной, лучше это сделать хотя-бы в OnBattleStarted().

    Цитата Сообщение от podvoxx Посмотреть сообщение
    2. Вопрос по линии фронта. Сейчас она черная, это будет правиться?
    думаю да.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    3. Постоянно сообщают о взрывах на аэродромах в некоторых ангарах. Имеет ли смысл собрать информацию о таких ангарах?
    ну наверное да.
    Don't happy, be worry

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

    Re: Вопросы.

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

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

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Ясно, просто если грузить из OnBattleStarted, то там у меня не получалось в подмиссиях получать события по убитым акторам, т.е. подмиссия в таком случае "не видит" остальные миссии. Хотя надо будет еще проверить.
    Код:
    public override void OnBattleStarted()
        {
            base.OnBattleStarted();
            MissionNumberListener = -1;
        }
    а после этого уже грузить. Но в Inited-е грузить точно не стоит - может абсолютно не корректно работать.

    PS а ещё - зачем 400 точек линии фронта ставить - она прокладывается как среднее между соседними маркерами разных цветов. Может проще в центре миссионных районов ставить по флажку соответствующего цвета ?
    Don't happy, be worry

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

    Re: Вопросы.

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

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

    Re: Вопросы.

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

Ваши права

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