Тоже надо. Как минимум везде, где используются таймауты. Потому что не известно, что с ним случится за это время. Другая миссия например может его удалить и т.д. Только соответственно проверять не actor, а aircraft: if (aircraft != null) { код }
Вид для печати
Полный код, коммент выделен
Код:using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
// loads my sub-missions
public override void OnTickGame()
{
if (Time.tickCounter() % 72000 == 18000) // 40-10
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmGroundv1_0.mis");
GamePlay.gpHUDLogCenter("Protect friendly shipping in the channel near France!");
}
if (Time.tickCounter() % 72000 == 71999) // 40-40
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmBombersv1_0.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to blue airfields!");
}
if (Time.tickCounter() % 72000 == 45000) // 40-25
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmBombersv1_0a.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to red airfields in France!");
}
}
// destroys aircraft abandoned by a player
public void _DespawnEmptyPlane(AiActor actor)
{
if (actor == null)
{ return; }
Player[] Players = GamePlay.gpRemotePlayers();
bool PlaneIsEmpty = true;
foreach (Player i in Players)
{
if ((i.Place() as AiAircraft) == (actor as AiAircraft))
{
PlaneIsEmpty = false;
break;
}
}
if ((PlaneIsEmpty) && (actor as AiAircraft).IsAirborne())
{
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
//for 2mots
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng1TotalFailure);
//then wait 10min
Timeout(600.0, () =>
{
if (actor is AiAircraft)
{
(actor as AiAircraft).Destroy();
}
});
}
else if (PlaneIsEmpty)
{
if (actor is AiAircraft)
{
(actor as AiAircraft).Destroy();
}
}; // круглую скобку здесь студия подчеркнула как недопустимый элемент. в остальных строках кушает.
}
public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave(player, actor, placeIndex);
_DespawnEmptyPlane(actor);
}
// destroys crushlanded aircraft in 10 minutes
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
Timeout(600, () =>
{
aircraft.Destroy();
});
}
}
--- Добавлено ---
Сейчас добавлю. Спасибо.
Спасибо большое!
Полный код:
Код:using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
// loads my sub-missions
public override void OnTickGame()
{
if (Time.tickCounter() % 72000 == 18000) // 40-10
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmGroundv1_0.mis");
GamePlay.gpHUDLogCenter("Protect friendly shipping in the channel near France!");
}
if (Time.tickCounter() % 72000 == 71999) // 40-40
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmBombersv1_0.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to blue airfields!");
}
if (Time.tickCounter() % 72000 == 45000) // 40-25
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/128BoF/128BoFsmBombersv1_0a.mis");
GamePlay.gpHUDLogCenter("Intel: Enemy bombers are heading to red airfields in France!");
}
}
// destroys aircraft abandoned by a player
public void _DespawnEmptyPlane(AiActor actor)
{
if (actor == null)
{ return; }
Player[] Players = GamePlay.gpRemotePlayers();
bool PlaneIsEmpty = true;
foreach (Player i in Players)
{
if ((i.Place() as AiAircraft) == (actor as AiAircraft))
{
PlaneIsEmpty = false;
break;
}
}
if ((PlaneIsEmpty) && (actor as AiAircraft).IsAirborne())
{
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
//for 2mots
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng1TotalFailure);
//then wait 10min
Timeout(600.0, () =>
{
if (actor is AiAircraft)
{
(actor as AiAircraft).Destroy();
}
});
}
else if (PlaneIsEmpty)
{
if (actor is AiAircraft)
{
(actor as AiAircraft).Destroy();
}
}; // круглую скобку здесь студия подчеркнула как недопустимый элемент. в остальных строках кушает.
}
public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave(player, actor, placeIndex);
_DespawnEmptyPlane(actor);
}
// destroys crushlanded aircraft in 10 minutes
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
Timeout(600, () =>
{
if (aircraft != null)
{
aircraft.Destroy();
}
});
}
}
--- Добавлено ---
Ага, я снова не успел ))) А у меня неправильно?
Все верно. Можно и так и так.
ОК, спасибо большое, сейчас тестирую.
В архиве только скрипт. Можно загружать на сервер с заменой старого скрипта.
В начале файла (в 7й строке :D ) добавил номер версии // v.1.6.13а
Можно будет скачать файл с сервера после загрузки, чтобы удостовериться, заменился ли файл.
На моем компе работает, на сервере почему-то после крайнего патча были проблемы (
Вложение 133305
Немного рекламы.
Для просмотра: ПКМ на скрине => Открыть изображение.
Скрытый текст:
Всем спасибо за помощь!!!
Поставил скиптик
Реклама хороша.
--- Добавлено ---
Интересная ошибка, вроде как раз в тему разговора
[18:34:30] Server: III/JG77-recke- в кабине III/JG77-recke- разбился.
[18:34:51] CollideEnvXY.collideLine: NONAME drw:1 col:1 #67709 very big step moved actor - IGNORED !!!
и
18:35:37] Server: -atas- в кабине -atas- разбился.
[18:35:39] CollideEnvXY.collideLine: NONAME drw:1 col:1 #67709 very big step moved actor - IGNORED !!!
как я понимаю скрипт пытается убрать обломки
Возможно, я в ангаре рождался. Было раз 7 подряд.
Не...
CollideEnvXY.collideLine: NONAME drw:1 col:1 #67709 very big step moved actor - IGNORED !!!
появилась после 13 или 13а версии, может выскочить и когда нет никого на сервере и не по одному разу.
У меня такой вопрос. Сколько примерно ботов одномоментно в воздухе сервер в состоянии потянуть? Мне для дела. :) Если бы кто после еще взялся и филды оформить как положено, было бы вообще кучеряво. Надеюсь держатель сервера после возьмется карту обкатать? ;)
Перепробовал много десктопного железа, впринципе готовлю небольшое эссе на эту тему, хотя нагрузка немного прыгает от патча к патчу, но в целом загрузка вяленькая... думаю скорее всего упремся "в дно" по памяти, все же лаунчер - это 32х, так что рисуй ботов много и разных.
Как раз по поводу филдов перетераем с -Atas-ом, в общих, пока, чертах.
Обкатаем с удовольствием, на первомайских уикендах подниму еще одну Репку :) (а может и не одну) а то мы тестами своими распугали всех пилотов.
Поставил 15 лайт
[15:32:48] >missLoad missions\multi\Dogfight\128BoF\128BoF1_6_15lite.mis
[15:32:48] Loading mission ...
[15:32:48] Load landscape...
[15:32:55] Load bridges
[15:32:55] LongBridge: wrong width. (3)
[15:32:56] Load static objects...
[15:32:58] [0] ERROR [AIR] MissionLoad: Distinct point '{0}' in airdrome0
[15:32:58] [0] ERROR [AIR] MissionLoad: Distinct point '{0}' in airdrome0
[15:32:58] [0] ERROR [AIR] MissionLoad: Distinct point '{0}' in airdrome0
[15:32:58] [0] ERROR [AIR] MissionLoad: Distinct point '{0}' in airdrome0
[15:33:00] Mission loaded. time = 11,912
Зацикливание
System.NullReferenceException
когда лог подошел к полу гигабайт, остановил сервант... он бы все одно упал, может (и даже скорее всего) и не из за карты.
Эта карта не жилец... можешь попробовать не редактировать старую а создать новую, ибо, где там, что не так, уже никто никогда не поймет, да и не зачем это...
Стоит просто "голый" простоит сутки - можно идти дальше, а так... не стоит оно того.
Синдикат откатился на предыдущую бету из-за зависонов. 20 человек летают.
О! А вот это интересно... Ща попробуем ;)
--- Добавлено ---
Хм. Интересное наблюдение.
Пытался вернуться с 14305 на 14214.
Снес все - поставил через стим 14101 - вылил сверху 14214 - запуск... ошибка
[20:06:54] =================================================
[20:06:54] :
[20:06:54] System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
[20:06:54] в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
[20:06:54] в System.Reflection.Assembly.LoadFile(String path)
[20:06:54] в wKgXhOaFMthaNNrF3F3.6cQC9JaSeOfoCVANxp0.0w9DA5Ug2YDmaCid8DVc(Object )
[20:06:54] в wKgXhOaFMthaNNrF3F3.6cQC9JaSeOfoCVANxp0.jgiCmZghnX2()
[20:06:54] =================================================
System.Exception у меня вчера было. В багах отрепортил все логи.
Больше ничего не знаю. Сервер виснет?
В списке серверов не вижу (
Sov SVAO и Syndicat работают.
--- Добавлено ---
Сейчас 2 сервера без загруженных карт. / 23.14 мск
Ну, да...
Поднял я второй сервант, один на стабильной, другой на бете. Логов с ошибками будет теперь в 2е больше :)
Простояли оба без карт сутки, в железках, коннектах, стимах... я теперь более менее уверен.
Карту прикрутил свою (уж извини, на фтп ее бросил - зацени) никаких скрипов, триггеров и прочей заумной лабуды, простая такая и незатейливая, рабоче-крестьянская балалайка, думаю - то что сейчас надо, что бы не скрипеть мозгом, что там внутри конит, после каждого апдейта.
На юго-западе (слева внизу :) ) 2 филда для "быстро побадаться".
Все крафты доступны, подумал, что если запрещать 2й спит, он так останется убером, а так мож что отрепортят, да разрабы подкрутят чтонидь.
Рисовал в 14101 - ошибка ERROR [AIR] MissionLoad: Distinct point '{0}' in airdrome0 - появляется на обоих серваках при загрузке,
airdrome0 225313.23 228706.85 1 2000 820 0
единственный 0 я тут вижу и, насколько я понимаю - это высота, может тут покавырять?
Что еще? А, взрывы в ангарах - в полный рост, хотя вроде выбирал не самые "благоустроенные" взлетки.
При всём уважении, не зайду если на сервере спиты2а, ну на чём летать против этого убера?
То что он убер изсвестно всем, а тратить нервы на неубиваемость и смотреть как любители лёгкой наживы будут летать на нём не интрессно, звеняйте.
А за сервер и труд отдельное спасибо, ценю что делаешь.
Добавил в редакторе к снаряжению всем немецким бортам по паре цинков серебрянных пулек, специально против этого красного дьявола. (хе-хе, шутка)
Убрал 2а - заходи. :)
--- Добавлено ---
Отставить... походу я выяснил, что это такое. Когда перекрываешь филд на карте сверху еще одним, что бы ангары не попали в зону - вылазит эта фигня.
так с каким патчем лучше к вам коннектиться?
airdrome0 - это номер аэродрома по идее. Я его на своей карте в Англии нашел рядом с г. Хайт и удалил.