
Сообщение от
Small_Bee
Перед загрузкой миссии смотришь след. номер миссии
А как его узнать и запомнить? Например, у меня в Степях может одновременно крутиться 3 одинаковых подмиссии с соответственно одинаковыми именами триггера. Мне нужно проверять триггер какой из подмиссии сработал, чтобы считать счет для каждой подмиссии (чтобы не путаться). OnTrigger я могу перебрать все активные миссии и проверить, if (missionnumber == x) но вот где получить х? Самому вручную считать при загрузке каждой подмиссии x = ++ ? Но возможно missionnumber, который присутствует в OnTrigger в каком-то своем внутреннем формате считается?
Т.е. другими словами missionnumber из OnTrigger - это некая внутренняя вещь БзБ или я могу эти номера сам назначать перед загрузкой каждой подмиссии?
--- Добавлено ---

Сообщение от
SlavikSG
Неа! Бесполезно. Не смог найти. Похоже, что этого и нет вовсе.

В cross_roundel миссии naryv:
Код:
foreach (AiGroundGroup gg in GamePlay.gpGroundGroups(army))
{
if (gg != null)
if (gg.Pos().distance(ref AirportPos) < 2000)
{
string triggerName = gg.Name().Substring(0,gg.Name().IndexOf(":"))+":"+markerNum.ToString()+"_" + army .ToString()+ "_attack";
AiTrigger trigger = GamePlay.gpGetTrigger(triggerName);
if (trigger != null) trigger.Enable = false;
foreach (AiActor ggActor in gg.GetItems())
{ if ((ggActor as AiGroundActor) != null)
(ggActor as AiGroundActor).Destroy();
}
}
}
В других его миссиях тоже есть при похожих обстоятельствах но в других видах (отдельно для артиллерии и танков емнип).
edit
Там еще 2я часть интересная, как раз про артиллерию с перебором статиков.
Код:
private void DestroyEnemyAtCaptured(int markerNum, int army)
{
Point3d AirportPos;
AirportPos.x = MissionMarkers[markerNum].x;
AirportPos.y = MissionMarkers[markerNum].y;
AirportPos.z = 1;
foreach (AiGroundGroup gg in GamePlay.gpGroundGroups(army))
{
if (gg != null)
if (gg.Pos().distance(ref AirportPos) < 2000)
{
string triggerName = gg.Name().Substring(0,gg.Name().IndexOf(":"))+":"+markerNum.ToString()+"_" + army .ToString()+ "_attack";
AiTrigger trigger = GamePlay.gpGetTrigger(triggerName);
if (trigger != null) trigger.Enable = false;
foreach (AiActor ggActor in gg.GetItems())
{ if ((ggActor as AiGroundActor) != null)
(ggActor as AiGroundActor).Destroy();
}
}
}
for (int i = 0; i < MissionsCount; i++)
{
AiGroundActor curActor;
for (int j = 0; j < 10; j++)
{
string nameActor = i.ToString() + ":Static" + j.ToString();
curActor = GamePlay.gpActorByName(nameActor) as AiGroundActor;
if (curActor != null)
{
if ( (curActor.Army() == army) &&
(curActor.Pos().distance(ref AirportPos) < 2000) &&
((curActor.Type() == AiGroundActorType.AAGun)||(curActor.Type() == AiGroundActorType.Artillery) )
)
{
curActor.Destroy();
}
}
}
}
}