Цитата Сообщение от Small_Bee Посмотреть сообщение
Конечно не работает, уничтожения аэростата не вызывает никаких методов в миссии, конечно нельзя применить Destroy() когда нету даже ссылки на объект. )))
Я не был бы так настойчив, если бы не был уверен в обратном. Проверял это дело раньше. Проверил и еще раз. Событие на убиение аэростата происходит! Гружу одной миссией шесть синих зениток в ряд. Другой миссией гружу напротив два красных аэростата. И пишу такой код:
Код:
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
 base.OnActorDead(missionNumber, shortName, actor, damages);

 Sss("Был подбит аэростат армии :" + actor.Army().ToString());
 Sss("Хеш подбитого аэростата :" + actor.GetHashCode().ToString());
 Sss("Имя подбитого аэростата :" + actor.Name());    
}
И в логе сервера пишется это:
Server: Был подбит аэростат армии :1
Server: Хеш подбитого аэростата :60779388
Server: Имя подбитого аэростата :NONAME
Server: Был подбит аэростат армии :1
Server: Хеш подбитого аэростата :2922015
Server: Имя подбитого аэростата :NONAME


Определяется и "Хеш" и "Армия". А вот остальное ничего не пашет. В том числе и имя, заданное в файле-миссии, не определяется. А вот само событие срабатывает четко и неизменно.

Ладно, наверное с этим пока точно ничего не поделаешь. Буду спавнить аэростаты просто в начале миссии. Где-нибудь не рядом с зенитками, а подальше. Так, чтобы глаз радовали, и если подобьют, чтобы трупики их (не убирающиеся) не сильно мешались.

Имею еще один каверзный вопрос:
Есть событие появления в миссии объектов. Название ему OnActorCreated. Естественно, срабатывает оно на все подряд. При этом срабатывании я начинаю заполнять, ранее созданные два словаря: _Zenitki_Red_ и _Zenitki_Blue_. Заполняю я их только нужными мне объектами. А именно зенитками. Все остальное игнорируется. Пишу такой код:

Код:
public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) 
{
   base.OnActorCreated(missionNumber, shortName, actor); 

   Timeout(1, () =>
      {
       //Определяем имя загружаемого объекта
       Zena = (actor as AiCart).InternalTypeName().ToString();

       //Если миссия не является стартово-загрузочной и этот объект принадлежит
       // армии красных и имя ему "bob:Artillery.Krupp_L2H43_Protze_Flak38", то...
       if (missionNumber != 0 && actor.Army() == 1 && Zena == "bob:Artillery.Krupp_L2H43_Protze_Flak38")
          {
           _Zenitki_Red_.Add(shortName, missionNumber); //добавляем в справочник красных очередную новую запись
          }

       //Если миссия не является стартово-загрузочной и этот объект принадлежит
       // армии синих и имя ему "bob:Artillery.Krupp_L2H43_Protze_Flak38", то...
       if (missionNumber != 0 && actor.Army() == 2 && Zena == "bob:Artillery.Krupp_L2H43_Protze_Flak38")
          {
           _Zenitki_Blue_.Add(shortName, missionNumber); //добавляем в справочник синих очередную новую запись
          }
      });
}
Опять же, как и несколько постов ранее, получается, что нужно нужно ОБЯЗАТЕЛЬНО вводить задержку Timeout. Если ее не вводить, то все отлично пашет и так, но в логе сервера неизменно возникает ошибка, как только я пытаюсь выполнить эту часть кода: Zena = (actor as AiCart).InternalTypeName().ToString();. Повторюсь... Это все замечательно пашет и без задержки Timeout.

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