На карте "Авианосцы" вот с этим скриптом не запускаются двигатели у красных крафтов (спит, хури, тигер, ...). При нажатии I в чат пишет "Двигатель ВЫКЛ" вместо ВКЛ.
Изредка запускается после смены самолета.
Код:
//
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
// destroys aircraft abandoned by a player
private bool isAiControlledPlane (AiAircraft aircraft)
{
if (aircraft == null)
{
return false;
}
Player [] players = GamePlay.gpRemotePlayers ();
foreach (Player p in players)
{
if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft)
{
return false;
}
}
return true;
}
private void destroyPlane (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.Destroy ();
}
}
private void explodeFuelTank (AiAircraft aircraft)
{
if (aircraft != null)
{
aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded);
}
}
private void destroyAiControlledPlane (AiAircraft aircraft) {
if (isAiControlledPlane (aircraft)) {
destroyPlane (aircraft);
}
}
private void damageAiControlledPlane (AiActor actor) {
if (actor == null || !(actor is AiAircraft)) {
return;
}
AiAircraft aircraft = (actor as AiAircraft);
if (!isAiControlledPlane (aircraft)) {
return;
}
if (aircraft == null) {
return;
}
aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled);
aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure);
aircraft.hitNamed (part.NamedDamageTypes.Eng0TotalFailure);
aircraft.hitNamed (part.NamedDamageTypes.Eng1TotalFailure);
/***Timeout (240, () =>
{explodeFuelTank (aircraft);}
);
* ***/
Timeout (300, () =>
{destroyPlane (aircraft);}
);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave (player, actor, placeIndex);
Timeout (1, () =>
{damageAiControlledPlane (actor);}
);
}
public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded (missionNumber, shortName, aircraft);
Timeout (300, () =>
{ destroyPlane(aircraft); }
);
}
public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftLanded(missionNumber, shortName, aircraft);
Timeout(300, () =>
{ destroyPlane(aircraft); }
);
}
/***
// loads my sub-missions
public override void OnTickGame()
{
if (Time.tickCounter() % 72000 == 6000) // 72000 == 18000 40-10
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFv1_6Ground1.mis");
GamePlay.gpHUDLogCenter("Protect friendly shipping in the channel near France!");
}
if (Time.tickCounter() % 72000 == 71999) // 40-40
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFv1_6Bombers1.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to blue airfields!");
}
if (Time.tickCounter() % 72000 == 45000) // 40-25
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFv1_6Bombers2.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to red airfields in France!");
}
} ****/
}
109 тоже иногда не запускается, но гораздо реже.
В чем может быть проблема? Может быть, красный игрок в коде программы покидает ненадолго самолет, его место на мгновенье занимает ИИ и скрипт выключает ему двиг? Может быть, секунд 10 таймаута добавить перед тем как всё ломать ИИ на случай, если игрок вернулся )) Как?
Проверил в оффлайне. Без скрипта тоже не запускаются. wtf? Версия 305. На сервере народ с последней бетой тоже жаловался. Стим сегодня удачно обновился или целостность кеша всем проверять и патчи заново накатывать?