1. Снова вопрос по GamePlay.gpNextMissionNumber(), намучался я тут с ним.
При вот таком применении выдает номер подмиссии 0. Почему так может быть? До этого -1 было получается? Почему не 1?
Задача была в методе OnActorCreated сохранить все созданные акторы в заранее созданные списки. Актор добавляется в список только если номер подмиссии совпадает с тем, что получен при помощи GamePlay.gpNextMissionNumber(). Потом этими списками легко управлять: удалять акторы, заново создавать и т.п.Код:public override void Inited() { SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber()); GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis"); }
Далее необходимо было удалить все созданные акторы из одного из таких списков, создать новые и также добавить по номеру подмиссии в этот же список. Аналогично третья чистка/замена
В игре выглядит так - город сначала имеет обычное зенитное прикрытие. Как только его выбирают для штурма - все зенитки удаляются и загружается усиленный набор зениток. Штурм закончился, снова загрузился первоначальный набор зениток. Это работает и вполне нормально.
Однако сначала я не заметил баг, но потом попались на глаза зенитки синие и красные в одной точке, так как удаление акторов не происходило из-за неправильно определенного номера подмиссии. Разница была в единицу.
- Т.е. первая загрузка зениток - номер определен неверно, на единицу меньше
- Вторая и третья, уже во время миссии - номер в GamePlay.gpNextMissionNumber() верный
Тут еще особенность, точнее две. В миссии используется наследование от миссии командера. И вторая - первоначально загрузка зениток происходила до Inited(), примерно так:
В этом Data в методе создания зениток правильный номер подмиссии определялся только если прибавить к нему единицу(так как на этот момент GamePlay.gpNextMissionNumber() равен нулю, т.е. номеру хост-миссии):Код: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"); } }
Однако если потом в методе OnTickGame(к примеру) удалить акторы-зенитки и создать новые методом SetAAA(), то к номеру подмиссии уже не нужно прибавлять единицу, а если прибавить - то новые акторы не попадут в список через метод OnActorCreatedКод:public void SetAAA() { AAAMisNumber = GamePlay.gpNextMissionNumber() + 1; SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2)); SendMessage.ToServer("[SERVER]: Номер подмиссии ААА гарнизона [{0}] - [{1}]", Name, AAAMisNumber); }
Позже я вынес первое создание акторов в OnTickGame, номера стали совпадать.Код:public void SetAAA() { AAAMisNumber = GamePlay.gpNextMissionNumber(); SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2)); }
Т.е. сейчас так выглядит:
Выходит до загрузки хостмиссии номер подмиссии на единицу меньше определяется?Код:[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. Постоянно сообщают о взрывах на аэродромах в некоторых ангарах. Имеет ли смысл собрать информацию о таких ангарах?




Ответить с цитированием