По крайней мере, шутка со звуковыми сообщениями здесь похиляет. Только, с учетом изменившихся условий придется отказаться от случайного значения, но прописывать строго-заданное значение убитых гражданских объектов.
Для изменения звуковых сообщений:
- создаем звуковые файлы C1M7_msg_BildingKill_2.wav, C1M7_msg_BildingKill_3.wav и т.д. сколько надо.
- переформировываем массив идентификаторов звуков до вида:
Array GetVoiceSoundTable()
{
return
[
[ "str_ArtillerySupport_Disagree", "Resources/C1M7_str_ArtillerySupport_Disagree.wav" ],
[ "str_ArtillerySupport_Agree", "Resources/C1M7_str_ArtillerySupport_Agree.wav" ],
[ "str_ArtillerySupport_OpenFire", "Resources/C1M7_str_ArtillerySupport_OpenFire.wav" ],
[ "str_ArtillerySupport_OpenAllFire", "Resources/C1M7_str_ArtillerySupport_OpenAllFire.wav" ],
[ "str_ArtillerySupport_Incorrect", "Resources/C1M7_str_ArtillerySupport_Incorrect.wav" ],
[ "msg_BildingKill1", "Resources/C1M7_msg_BildingKill.wav" ],
[ "msg_BildingKill2", "Resources/C1M7_msg_BildingKill_2.wav" ],
[ "msg_BildingKill3", "Resources/C1M7_msg_BildingKill_3.wav" ],
[ "msg_Message01", "Resources/C1M7_msg_Message01.wav" ]
];
}

Соответственно, в вызовеfireEvent(0.0, [], "SendCockpitMessage", ... произойдет изменение в последнем передаваемом аргументе до вида
fireEvent(0.0, [], "SendCockpitMessage", [msg_BildingKill + new WString(m_BildingsKill), CCockpitColorMap::m_BadNewsColor, "msg_BildingKill"+new String(m_BildingsKill)]);
Т.о. конструкция ""msg_BildingKill"+new String(m_BildingsKill)" зашлет в ухи идентификатор звука "msg_BildingKill1", если будет уничтожен первый объект, "msg_BildingKill2", если второй гражданский объект будет поражен и так далее.
Текстовое сообщение, соответственно, пырвый аргумент функции SendCockpitMessage. В нашем случае - "msg_BildingKill + new WString(m_BildingsKill)". Указатель на текстовое сообщение "msg_BildingKill" уложен в MissionC1M7Strings.script. Одно "но" при работе со стрингами сообщений - они не String - они WString.
Т.е. в нашем конкретном случае текстовое сообщение "msg_BildingKill + new WString(m_BildingsKill)" будет выглядеть, как "Уничтожено гражданское здание. Всего уничтожено <число уничтоженных объектов из переменной m_BildingsKill>".