PDA

Просмотр полной версии : Вопросы.



Страницы : 1 2 [3] 4

podvoxx
18.05.2012, 16:15
2 игры на одной машине не запустишь (когда ты уже в миссии), а игру и твой редактор можно, т.е. в любой момент переключился в редактор, посмотрел разведку нужного района, переключился в игру. Даже на 2м компьютере чтобы игру запустить нужно ее 2й раз купить сначала, а с твоей программой не нужно будет, т.е. на ноутбуке или планшете всегда будет открыта разведанная карта.

Так это замечательно, в чем проблема-то? Карта-планшет, еще и на втором мониторе. К тому же видно будет только то, что скрипт не грузит. Это больше для оффлайна пригодится, видеть или не видеть цель игрок сам решит, выбрав фильтр - самого себя обманывать это как в шахматы против себя любимого играть. Плюс для отладки пригодится, например чтобы в брифинге правильные координаты целей написать, а не грузить каждую подмиссию. Да много полезного можно сделать. И вообще это все в планах, мне крутому программеру сейчас с аддинами хотя бы разобраться :D А программку на выходных поучу человечков включать))

Charger
18.05.2012, 16:42
2 игры на одной машине не запустишь (когда ты уже в миссии), а игру и твой редактор можно, т.е. в любой момент переключился в редактор, посмотрел разведку нужного района, переключился в игру. Даже на 2м компьютере чтобы игру запустить нужно ее 2й раз купить сначала, а с твоей программой не нужно будет, т.е. на ноутбуке или планшете всегда будет открыта разведанная карта.

Если есть желание программировать можно веб интерфейс для кооп-скрипта сделать (выбор самолетов, настройка топлива, вооружения, запуск игры). 41sqn_Banks будет это делать как побочный продукт своего проекта, но не скоро.

Проблема в другом. У меня, к примеру, в сети две машины. И вторая вполне тянет БзБ на самом предельном минимуме настроек... Перекинуть файло и посмотреть, ни разу не проблема. Но это практически ранняя-меловая тема, если геологическими категориями думать. :)

Small_Bee
18.05.2012, 16:43
кто - то уже нашел где клиент сохраняет этот файл и читать его пробовал?

podvoxx
18.05.2012, 21:57
свои dll добавляются в папку стима? Они не затираются оф. патчем?

Small_Bee
18.05.2012, 22:05
свои dll добавляются в папку стима? Они не затираются оф. патчем?

В папке игры - нет.

podvoxx
21.05.2012, 09:53
Объясните, в чем заблуждаюсь)

1. Есть dll, находится в игровой папке стима P11_folder. dll называется P11_localization.dll.
Наследую класс localization от AMission
Ее содержание ниже - просто складывает два числа в статическом методе locText(int number1, int number2). Компилирую в VS и копирую в вышеназванную папку.



using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using part;

namespace locaddin
{
public class localization : AMission
{

public static int locText(int number1, int number2)
{
int result = number1 + number2;
return result;
}
}
}

Далее прописываю референсом созданную библиотеку и добавляю в namespace.
Наследую от localization
Пробую сложить два числа и вывести в чат - выдает ошибку. Ошибку не записал, но что-то вроде Exception - только вечером смогу посмотреть, но явно что-то не так делаю


//$reference "P11_folder\P11_localization.dll"
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using locaddin;


public class Mission : localization
{
public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;

int xxx = localization.locText(1, 2);
SendMessageToAll("Расчет из DLL = " + xxx.ToString(), "Chat"); //метод вырезан для краткости

//LOAD MAIN MISSION MAP OBJEKTS
//GamePlay.gpPostMissionLoad("missions\\SMP\\Friday on my mind\\submissions\\Map AAA\\Map AAA.mis");
}


Хотелось бы уточнить пошагово - что я вообще сделал, так как в основном методом тыка и копированием и просмотром чужих скриптов, особого понятия пока не обрел - слишком много на это времени уходит, а его сейчас нет.

2. Я так понимаю нужно всегда в dll наследовать от AMission? Так как сначала было без наследования и мне игра написала в ошибках что-то про пенальти, даже испугался - за читера может принять по глупости моей...

3. Как организовать наследования, если у меня допустим две dll - статистика и локализация и нужно чтобы они могли работать отдельно. Т.е. локализация мне к примеру нужна во всех миссиях, а статистика только в некоторых.
Я в обеих dll наследую от AMission, а в скрипте миссии от чего наследовать? Или вообще в нем можно тоже наследовать от AMission также?

Small_Bee
21.05.2012, 10:24
1. Напиши сначала что за ошибка. Дело в том, что конструкция //$reference не родная для С#, и там может быть все что угодно.
2. Всегда
3. Ну тут вопрос на миллион. Множественное наследование есть в плюсах, но от него зачастую больше проблем, чем пользы. )
В твоем случае можно
1. Наследоваться AMission -> LocMission - > StatMission
2. Сделать по аналогии с Battle. Т.е. делаешь AMission -> LocMission, AMission -> StatMission, после еще делаешь AMission - > MyBattle. В MyBattle добавляешь приватным мембером List<AMission> myMissions. Там же переопределяешь каждый метод, и в методе, к примеру OnBattleStarted() пишешь foreach(AMission mis in myMissions) mis.OnBattleStarted(); Аналогично для остальных. Далее все легко и просто. На этапе инициализации надо просто сделать

AMission mission = new LocMission();
myMissions.Add(mission);
mission = new StatMission();
myMissions.Add(mission);

От кого наследоваться собственно в скрипте миссии - задача на сообразительность )

3. Событийная модель. Долго объяснять, если интересно, покопай мою dll из коммандера.

podvoxx
21.05.2012, 12:25
2. Сделать по аналогии с Battle. Т.е. делаешь AMission -> LocMission, AMission -> StatMission, после еще делаешь AMission - > MyBattle. В MyBattle добавляешь приватным мембером List<AMission> myMissions. Там же переопределяешь каждый метод, и в методе, к примеру OnBattleStarted() пишешь foreach(AMission mis in myMissions) mis.OnBattleStarted(); Аналогично для остальных. Далее все легко и просто. На этапе инициализации надо просто сделать
AMission mission = new LocMission();
myMissions.Add(mission);
mission = new StatMission();
myMissions.Add(mission);
От кого наследоваться собственно в скрипте миссии - задача на сообразительность )
Этот вариант вроде подходит. Основная задача использовать различные набор dll по необходимости в миссиях. Имеем две dll с нэймспайсами - locaddin и stataddin.


using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using part;

namespace locaddin
{
public class localization : AMission
{

public static int locText(int number1, int number2)
{
int result = number1 + number2;
return result;
}
}
}


using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using part;

namespace stataddin
{
public class statistic : AMission
{

public static int statText(int number1, int number2)
{
int result = number1 + number2;
return result;
}
}
}

И сама миссия, которая использует обе dll в исходном состоянии:



//$reference "P11_folder\P11_localization.dll"
//$reference "P11_folder\P11_statistic.dll"
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using locaddin;
using stataddin;

public class Mission : AMission
{
public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;

//LOAD MAIN MISSION MAP OBJEKTS
//GamePlay.gpPostMissionLoad("missions\\SMP\\Friday on my mind\\submissions\\Map AAA\\Map AAA.mis");
}


Далее добавляем List<AMission> myMissions. В OnBattleStarted() или Inited? Или совсем в другое место?



//$reference "P11_folder\P11_localization.dll"
//$reference "P11_folder\P11_statistic.dll"
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using locaddin;
using stataddin;

public class Mission : AMission
{
public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;

List<AMission> myMissions; //новый список переменных типа AMission
AMission mission = new LocMission(); // заполняю список созданными миссиями, только не пойму чем если честно. Что это за миссии и как они связаны с dll?
myMissions.Add(mission);
mission = new StatMission();
myMissions.Add(mission);
//Как-то так? :
StatMission : statistic;
LocMission : localization;

// "Там же переопределяешь каждый метод" - вот это не понял. Где там же и какие методы? У меня в неразумной голове это так пока выглядит:
foreach(AMission mis in myMissions)
{
mis.OnBattleStarted(); //т.е. именно здесь переопределяю методы
}


//LOAD MAIN MISSION MAP OBJEKTS
//GamePlay.gpPostMissionLoad("missions\\SMP\\Friday on my mind\\submissions\\Map AAA\\Map AAA.mis");
}


Вроде истина где-то рядом, но пока мозаика не собирается.


3. Событийная модель. Долго объяснять, если интересно, покопай мою dll из коммандера.

А что значит покопай? Просто посмотреть методы или декомпилировать(что я не умею)? Или можно просмотреть исходник dll?

Small_Bee
21.05.2012, 12:43
Если ты хочешь просто добавлять длл-ки без перекомпиляции основного кода, тогда надо юзать рефлексию - Assembly, Activator и т.п. Смотри в MSDN. Опять же долго объяснять, но подсказка вполне прозрачная. Тут же в теме я вроде выкладывал пример такого подхода.
Блеск и нищета NET в том, что исходный код из сборок можно просматривать практически в первозданном виде, если его специально перед этим не обработать. Гугли .Net Reflector (shareware) и ILSpy (бесплатный аналог)

И еще. К Addin то что ты предлагаешь, не имеет никакого отношения, лучше переименуй, что бы не путаться. А вот оно - курим конвейер дополнений (http://msdn.microsoft.com/ru-ru/library/bb384200.aspx)

podvoxx
21.05.2012, 12:53
Если ты хочешь просто добавлять длл-ки без перекомпиляции основного кода, тогда надо юзать рефлексию - Assembly, Activator и т.п. Смотри в MSDN. Опять же долго объяснять, но подсказка вполне прозрачная. Тут же в теме я вроде выкладывал пример такого подхода.
Блеск и нищета NET в том, что исходный код из сборок можно просматривать практически в первозданном виде, если его специально перед этим не обработать. Гугли .Net Reflector (shareware) и ILSpy (бесплатный аналог)

И еще. К Addin то что ты предлагаешь, не имеет никакого отношения, лучше переименуй, что бы не путаться. А вот оно - курим конвейер дополнений (http://msdn.microsoft.com/ru-ru/library/bb384200.aspx)

Спасибо, хотя мало что понятно. Конкретно, что мне нужно для начала - это отправлять сообщения через свою сборку, чтобы в каждом скрипте не прописывать много кода по локализации. Достаточно dll для этого?
Рефлексия - это миссия-бридж, которую ты выкладывал?

Второе назначение - хранение глобальных переменных, для статистики например, чтобы их могли использовать(читать/менять) скрипты хост-миссии и подмиссии. Достаточно dll для этого?

Small_Bee
21.05.2012, 14:31
Спасибо, хотя мало что понятно. Конкретно, что мне нужно для начала - это отправлять сообщения через свою сборку, чтобы в каждом скрипте не прописывать много кода по локализации. Достаточно dll для этого?
Рефлексия - это миссия-бридж, которую ты выкладывал?

Второе назначение - хранение глобальных переменных, для статистики например, чтобы их могли использовать(читать/менять) скрипты хост-миссии и подмиссии. Достаточно dll для этого?

Если ты не задумываешь действительно чего то глобального с пол-сотней классов и тысячами строк кода, делать отдельную dll не стоит. Да и засорять папку игры dll-ками я бы не стал, имхо стоит подумать как сделать проще (например загружать пустые миссии со скриптом)
Bridge это не совсем рефлексия, там она используется для загрузки сборки и извлечению из нее класса и его методов.
Переменные можешь смело хранить в файле. Код скриптов миссии вызывается последовательно, так что о проблемах многопоточности можно не беспокоится.

А вообще, скажу по секрету, будет встроенный локалайзер и общее хранилище для миссий в RSTMission, это что бы не делал лишнюю работу, если что.

podvoxx
21.05.2012, 16:01
Вот такой вариант использует Кодиак
http://forum.1cpublishing.eu/showpost.php?p=427974&postcount=2

For example i use this in my dll:


using System.Collections.Generic;
using System.Globalization;
using maddox.game;
using maddox.game.world;

namespace COD
{
public static class Message
{
static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay;


public static void ToChatbar(string msg, params object[] args)
{
GamePlay.gpLogServer(null, msg, args);
}


public static void ToChatbar(Player player, string msg, params object[] args)
{
if (player != null)
GamePlay.gpLogServer(new[] { player }, msg, args);
}


public static void ToChatbar(int army, string msg, params object[] args)
{
var consignees = new List<Player>();

if (GamePlay.gpPlayer() != null)
consignees.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
consignees.AddRange(GamePlay.gpRemotePlayers());

if (army == -1)
GamePlay.gpLogServer(null, msg, args);
else if (consignees.Exists(item => item.Army() == army))
GamePlay.gpLogServer(consignees.FindAll(item => item.Army() == army).ToArray(), msg, args);
}


public static void ToScreen(string msg, params object[] args)
{
GamePlay.gpHUDLogCenter(null, msg, args);
}


public static void ToScreen(Player player, string msg, params object[] args)
{
if (player != null)
GamePlay.gpHUDLogCenter(new[] { player }, msg, args);
}


public static void ToScreen(int army, string msg, params object[] args)
{
var consignees = new List<Player>();

if (GamePlay.gpPlayer() != null)
consignees.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
consignees.AddRange(GamePlay.gpRemotePlayers());

if (army == -1)
GamePlay.gpHUDLogCenter(null, msg, args);
else if (consignees.Exists(item => item.Army() == army))
GamePlay.gpHUDLogCenter(consignees.FindAll(item => item.Army() == army).ToArray(), msg, args);
}


public static void ToScreenCountDown(string message, string endMessage, int seconds)
{
string tmpMessage = message + " ";
int count = 0;

while (count < seconds)
{
Strategy.THIS.Timeout(count++, () =>
{
ToScreen(tmpMessage + seconds--.ToString(CultureInfo.InvariantCulture));
});
}
Strategy.THIS.Timeout(count, () => ToScreen(endMessage));
}


public static void ToScreenCountDown(Player player, string message, string endMessage, int seconds)
{
string tmpMessage = message + " ";
int count = 0;

while (count < seconds)
{
Strategy.THIS.Timeout(count++, () =>
{
ToScreen(player, tmpMessage + seconds--.ToString(CultureInfo.InvariantCulture));
});
}
Strategy.THIS.Timeout(count, () => ToScreen(player, endMessage));
}


public static void ToScreenCountDown(int army, string message, string endMessage, int seconds)
{
string tmpMessage = message + " ";
int count = 0;

while (count < seconds)
{
Strategy.THIS.Timeout(count++, () =>
{
ToScreen(army, tmpMessage + seconds--.ToString(CultureInfo.InvariantCulture));
});

}
Strategy.THIS.Timeout(count, () => ToScreen(army, endMessage));
}

}
}


In the script file i use



//$reference parts/core/COD.dll //reference to my dll (Assembly)
using System;
using maddox.game;
using maddox.game.world;
using COD; //My namespace

public class Mission : AMission
{

public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);

Message.ToChatbar(player, "Welcome {0}", player);


}
}


Это то, что нужно, кажется. Что вот эта строчка значит:

static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay;

Small_Bee
21.05.2012, 16:07
1. Точно так же dll подключает коммандер.
2. тоже самое, что ты делаешь в скрипте миссии this.Gameplay.SomeMethod()

podvoxx
21.05.2012, 16:36
1. Точно так же dll подключает коммандер.
2. тоже самое, что ты делаешь в скрипте миссии this.Gameplay.SomeMethod()

Спасибо, до вечера наверное хватит информации :)

podvoxx
21.05.2012, 23:22
[22:50:10] =================================================
[22:50:10] System.IO.FileNotFoundException: Could not load file or assembly 'SMPlocalization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Не удается найти указанный файл.
[22:50:10] File name: 'SMPlocalization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
[22:50:10]
[22:50:10] Server stack trace:
[22:50:10] at Mission.OnTickGame()
[22:50:10] at maddox.game.ABattle.OnTickGame()
[22:50:10] at maddox.game.world.Strategy.OnTickGame()
[22:50:10] at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[22:50:10] at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[22:50:10]
[22:50:10] Exception rethrown at [0]:
[22:50:10] at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[22:50:10] at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[22:50:10] at maddox.game.IBattle.OnTickGame()
[22:50:10] at maddox.game.GameDef.tickGame()
[22:50:10] at Rnn9R0HNW1FFeT2aIDs.ltiVH2HK9YyK7SdiCrk.8IDxVdt1dPyeHPkw7Ndf(Object )
[22:50:10] at Rnn9R0HNW1FFeT2aIDs.ltiVH2HK9YyK7SdiCrk.NaqwoOS5Joc()
[22:50:10] at JHVeKKyORf15WCVE1pL.eE20r2yPeQB95WctiCJ.ZRMSPQBwmiC(Boolean , Boolean )
[22:50:10]
[22:50:10] WRN: Assembly binding logging is turned OFF.
[22:50:10] To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
[22:50:10] Note: There is some performance penalty associated with assembly bind failure logging.
[22:50:10] To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
[22:50:10]
[22:50:10] =================================================

Вот такую ошибку получаю, подключив библиотеку Кодиака. Да и с моими также.

podvoxx
22.05.2012, 10:29
Where do you store the file?
For multiplayer it must (should maybe there is another location too) be in "..\Steam\SteamApps\common\il-2 sturmovik cliffs of dover\parts\core" at the moment, until we can create Addins and specify the path of the User Dlls in the xml-file.

Как написал Кодиак еще должен быть путь в xml файле, в кампании Desester видел такой файл.
Small_Bee, библиотеки командера работают без xml? И чем отличается в таком случае твой вариант?

Small_Bee
22.05.2012, 10:57
Как написал Кодиак еще должен быть путь в xml файле, в кампании Desester видел такой файл.
Small_Bee, библиотеки командера работают без xml? И чем отличается в таком случае твой вариант?
Нет, у меня никакого xml не используется.

podvoxx
22.05.2012, 18:56
Простой вопрос. Сейчас вообще можно подключать dll к миссии для онлайна(сервер из игры и выделенный), а также для отдельных заданий не используя дополнительных программ вроде командера? Или это работает только для кампаний?

Small_Bee
22.05.2012, 19:10
Можно, для этого используется в скрипте конструкция
//$reference

Единственное, лончер должен знать, где дллку искать. Как эта конструкция точно работает я не знаю, но в корневой папке лончера находит точно.
Разница с оффом в том, что тут ничего нового не напишешь такого, чего нельзя было бы сделать просто из скрипта.

podvoxx
22.05.2012, 20:07
Можно, для этого используется в скрипте конструкция
//$reference

Единственное, лончер должен знать, где дллку искать. Как эта конструкция точно работает я не знаю, но в корневой папке лончера находит точно.
Разница с оффом в том, что тут ничего нового не напишешь такого, чего нельзя было бы сделать просто из скрипта.

Спасибо, только я перепутал опять аддины с длл %), надо отвлечься). Аддины только для оффа работают, насколько я смог понять.

podvoxx
24.05.2012, 09:40
Вчера все-таки подключил dll, вот этот вариант Кодиака можно использовать как пример - http://forum.1cpublishing.eu/showpost.php?p=427974&postcount=2
Оказалось сборка должна обязательно быть в папке "parts/core", хотя может я опять что-нибудь напутал(может и в корневой лаунчера будет работать, не проверял) :)

Small_Bee
24.05.2012, 11:29
Смотри файл ...exe.config, там пути, где надо искать dll-ки указаны. В корневой папке по умолчанию ищет

podvoxx
24.05.2012, 13:01
http://forum.1cpublishing.eu/showthread.php?t=32329
Вариант от Кодиака использования глобальных переменных в скриптах хост-миссии и подмиссий с использованием собственной сборки dll


Смотри файл ...exe.config, там пути, где надо искать dll-ки указаны. В корневой папке по умолчанию ищет
Спасибо, посмотрю сегодня

podvoxx
28.05.2012, 13:55
Что-то я запутался.
Есть подмиссия с методом OnActorDead(), она слушает все миссии(MissionNumberListener = -1;).
Какой в ней будет missionNumber при уничтожении юнита из подмиссии и хост-миссии?
Задача в методе OnActorDead() отделить юниты самой подмисии(missionNumber=0 ??) от юнитов подмиссий загруженных в хост-миссии(какие у них тогда получаются missionNumber?
(проверить сейчас не могу, хотелось бы заранее написать код и дома проверить)

naryv
28.05.2012, 14:04
Что-то я запутался.
Есть подмиссия с методом OnActorDead(), она слушает все миссии(MissionNumberListener = -1;).
Какой в ней будет missionNumber при уничтожении юнита из подмиссии и хост-миссии? хост миссия- та которая загружается первой имеет номер 0, в OnActorDead(int missionNumber, string shortName, AiActor actor, System.Collections.Generic.List<DamagerScore> damages) missionNumber - номер миссии убитого актора. Ну и лучше скрипт весь в начальной миссии делать.


Задача в методе OnActorDead() отделить юниты самой подмисии(missionNumber=0 ??) нет, у подмиссии свой порядковый номер, 0 - у самой первой.

podvoxx
28.05.2012, 14:13
хост миссия- та которая загружается первой имеет номер 0, в OnActorDead(int missionNumber, string shortName, AiActor actor, System.Collections.Generic.List<DamagerScore> damages) missionNumber - номер миссии убитого актора. Ну и лучше скрипт весь в начальной миссии делать.

нет, у подмиссии свой порядковый номер, 0 - у самой первой.

А есть метод определения номера подмиссии в ее же скрипте? Или придется запоминать ее акторы в списке при помощи OnActorCreate?(Т.е. что-то вроде this.missionNumber)

naryv
28.05.2012, 14:36
А есть метод определения номера подмиссии в ее же скрипте? Или придется запоминать ее акторы в списке при помощи OnActorCreate?(Т.е. что-то вроде this.missionNumber) int MissionNumber в миссии хранит её номер.

podvoxx
28.05.2012, 14:40
int MissionNumber в миссии хранит её номер.

Спасибо

podvoxx
30.05.2012, 16:47
Вопрос к naryv, наверное. Сейчас при разработке миссии приходится прибегать к локализации сообщений и более гибкой настройке параметров(иначе миссия будет только на одном языке) - куда отправлять это сообщение(например "Chat", "ChatAndScreen" и "Screen"), отправить определенным игрокам, всем или определенной армии или просто перевести текст, никуда не отправляя(для пункта меню к примеру). Также нужен вариант отправки сообщения без перевода как есть(но с аналогичным локализации примером). Сам перевод сообщений берется из текстового или xml-файлов. Для этого приходится в сам скрипт миссии добавлять большой кусок кода, но тогда появляется проблема - в скрипты подмиссий его тоже придется добавлять и вообще в любой скрипт, где используется локализация и отправка сообщений. В GamePlay.gpLogServer и GamePlay.gpHUDLogCenter не проводится проверка на null емнип и вообще эти команды в чистом виде неудобны(обычно используют введение дополнительных параметров, указаны выше).
Есть другой способ - отдельный класс в своей сборке dll, которая подключается к каждому скрипту, где необходимо. Этот вариант лучше.
Возможно ли введение нового класса для отправки/локализации сообщений с указанными выше параметрами в игру? Необходимость - для любой серьезной миссии на сервере.

Есть еще одна необходимость - хранилище переменных разных типов, доступное из скриптов подмиссий и хост-миссии. Это реализовано в командере (http://www.sukhoi.ru/forum/showthread.php?t=76000) от Small_Bee с примером.

Ну и кроме этого, возможно встроить проверку на null(это самая частая и не всегда очевидная ошибка, возникающая казалось бы при добавленных везде проверках) куда-нибудь поглубже в код, чтобы не заниматься этим в каждом скрипте?

П.С. Если потребуется, могу более подробно объяснить и привести примеры кода

И пара дополнительных вопросов, более важных, т.к. их нельзя решить самим пользователям. Первое - это контроль над статиками. Проблема известная. Имеем много отлично проработанных наземных статических объектов и возможность создавать миссию нон-стоп, но не имеем возможности объединить их, т.к. учитывать и перезагружать статитики невозможно. Из-за это нынешние миссии мало чем отличаются от старых иловских. Есть наземка(причем посчитать можно только нестатики), длительность миссии несколько часов. Никакой линии фронта в нормальном виде или даже захватываемых аэродромов нет до сих пор в онлайне. Даже цель - завод/склад толком не организовать. Старые иловские костыли в виде машинок не работают. Потому-что если поставить живые - они разъезжаются сквозь стены в разные стороны несмотря на таймаут. Статические машинки - ничем не отличаются от зданий. Приходится ставить ПТ-пушки. Но это тоже плохой вариант, т.к. артиллерия имеет ИИ и отбирает лишние ресурсы у сервера. К тому же если приедут вражеские танки захватить склад - его продукция начнет стрелять по ним.

Вторая проблема - нельзя из подмиссии загружать здания/окопы. Т.е. к примеру если команда "построила" аэродром, то он будет без ангаров и красот, обычное поле с зенитками. Или к примеру создаем объект завод, который загружается в подмиссии. Все здания/цеха приходится в ручную копировать в файл хост-миссии. Если бы возможность грузить такие объекты из подмиссий была - можно было бы сделать полноценные сменяемые аэродромы или опорные пункты, играющие роль линии фронта. Или строящиеся динамически оборону, склады, переправы.

Велась/проводится ли какая-то работа по работе со статиками в ближайшем патче?

naryv
31.05.2012, 10:15
Вопрос к naryv, наверное. Сейчас при разработке миссии приходится прибегать к локализации сообщений и более гибкой настройке параметров(иначе миссия будет только на одном языке) - куда отправлять это сообщение(например "Chat", "ChatAndScreen" и "Screen"), отправить определенным игрокам, всем или определенной армии или просто перевести текст, никуда не отправляя(для пункта меню к примеру). Также нужен вариант отправки сообщения без перевода как есть(но с аналогичным локализации примером). Сам перевод сообщений берется из текстового или xml-файлов. Для этого приходится в сам скрипт миссии добавлять большой кусок кода, но тогда появляется проблема - в скрипты подмиссий его тоже придется добавлять и вообще в любой скрипт, где используется локализация и отправка сообщений. В GamePlay.gpLogServer и GamePlay.gpHUDLogCenter не проводится проверка на null емнип и вообще эти команды в чистом виде неудобны(обычно используют введение дополнительных параметров, указаны выше).
Есть другой способ - отдельный класс в своей сборке dll, которая подключается к каждому скрипту, где необходимо. Этот вариант лучше.
Возможно ли введение нового класса для отправки/локализации сообщений с указанными выше параметрами в игру? Необходимость - для любой серьезной миссии на сервере.

Есть еще одна необходимость - хранилище переменных разных типов, доступное из скриптов подмиссий и хост-миссии. Это реализовано в командере (http://www.sukhoi.ru/forum/showthread.php?t=76000) от Small_Bee с примером.

Ну и кроме этого, возможно встроить проверку на null(это самая частая и не всегда очевидная ошибка, возникающая казалось бы при добавленных везде проверках) куда-нибудь поглубже в код, чтобы не заниматься этим в каждом скрипте? С транслятором, думаю можно сделать, что то типа функции возвращающей строку на указанном языке из файла-словаря, подойдёт такой вариант? С хранилищем не знаю, есть ли необходимость, тем более что Small_Bee уже сделал его. С проверкой на null нет, не получится.


И пара дополнительных вопросов, более важных, т.к. их нельзя решить самим пользователям. Первое - это контроль над статиками. Проблема известная. Имеем много отлично проработанных наземных статических объектов и возможность создавать миссию нон-стоп, но не имеем возможности объединить их, т.к. учитывать и перезагружать статитики невозможно. Из-за это нынешние миссии мало чем отличаются от старых иловских. Есть наземка(причем посчитать можно только нестатики), длительность миссии несколько часов. Никакой линии фронта в нормальном виде или даже захватываемых аэродромов нет до сих пор в онлайне. Даже цель - завод/склад толком не организовать. Старые иловские костыли в виде машинок не работают. Потому-что если поставить живые - они разъезжаются сквозь стены в разные стороны несмотря на таймаут. Статические машинки - ничем не отличаются от зданий. Приходится ставить ПТ-пушки. Но это тоже плохой вариант, т.к. артиллерия имеет ИИ и отбирает лишние ресурсы у сервера. К тому же если приедут вражеские танки захватить склад - его продукция начнет стрелять по ним.

Вторая проблема - нельзя из подмиссии загружать здания/окопы. Т.е. к примеру если команда "построила" аэродром, то он будет без ангаров и красот, обычное поле с зенитками. Или к примеру создаем объект завод, который загружается в подмиссии. Все здания/цеха приходится в ручную копировать в файл хост-миссии. Если бы возможность грузить такие объекты из подмиссий была - можно было бы сделать полноценные сменяемые аэродромы или опорные пункты, играющие роль линии фронта. Или строящиеся динамически оборону, склады, переправы.

Велась/проводится ли какая-то работа по работе со статиками в ближайшем патче?
В принципе добавили три события - на убитого статика, здание и взрыв бомбы, с именами и координатами думаю для учёта поможет, не загружающиеся статики надо посмотреть, не знаю пока. Но это всё возможно будет только в финальной версии патча.

podvoxx
31.05.2012, 11:36
С транслятором, думаю можно сделать, что то типа функции возвращающей строку на указанном языке из файла-словаря, подойдёт такой вариант? С хранилищем не знаю, есть ли необходимость, тем более что Small_Bee уже сделал его. С проверкой на null нет, не получится.
У Small_Bee dll, которая работает только с выделенным сервером. Однако сингл-миссии и кампании тоже нужно локализовывать(я добавил свою сборку, но это все-таки неудобно) . К тому же свою dll приходится прописывать в референсах, копировать в папку игры, добавлять нэймспэйс - не очень удобно. К стати о добавлении dll - хорошо бы какую-нибудь папку в папке с игрой сделать для пользовательских сборок, сейчас они помещаются либо в корень, либо в parts/core.
По транслятору можно как-то так:
Задаем путь к папке с файлами локализации. У Small_Bee каждый язык в отдельном .txt-файле, вполне удобно. Кодиак на желтом выкладывал вариант с xml-файлом и всеми языками в нем.

string langFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\1C SoftClub\\il-2 sturmovik cliffs of dover\\missions\\Single\\LocalizationExample\\localization\\";

Далее перевод нужного текста по метке(параметры: путь к папке с файлами локализации, метка для перевода текста, язык перевода). Т.е. метод возвращает текст перевода. Если перевод не найден - возвращается то же, что было отправлено.

public static string getTranslate(string langFolderPath, string msgKey, string langName)

Ну и отправка сообщения, 3 метода(или же еще один параметр добавить, отвечающий за адресатов). Для армии, определенным игрокам и всем игрокам.

public static void SendMessageToAll(string msgKey, string target, params object[] args)
public static void SendMessageToArmy(string msgKey, int army, string target, params object[] args)
public static void SendMessageToPlayers(string msgKey, Player[] players, string target, params object[] args)
target лучше как-то по другому сделать, наверное. Он имеет три варианта - Чат, Экран, Чат и экран.
Причем по назначению метод(ToAll, ToArmy,ToPlayers) должен сам фильтровать игроков и быть универсальным для выделенного, сингла и кампании, ну и проверять на null конечно)).

Это все очевидные вещи конечно, думаю разберетесь. А на будущее неплохо бы доработать HUD сообщения с возможность задавания цвета, расположения, величины шрифта(и самого шрифта), времени отображения, а также одновременного отображения нескольких худ-сообщений(Таким образом можно отображать где-нибудь в уголке параметры, счет в миссии, кол-во доступных самолетов и т.п.)

По хранилищу - вещь нужная для обмена данными между подмиссиями, но в принципе если сложно/долго сделать - можем пользоваться своими сборками.



В принципе добавили три события - на убитого статика, здание и взрыв бомбы, с именами и координатами думаю для учёта поможет,

Спасибо, хорошая новость :) А удалять статики можно будет подобно "живым" объектам?


не загружающиеся статики надо посмотреть, не знаю пока. Но это всё возможно будет только в финальной версии патча.
Было бы просто замечательно, мы уже особо не торопимся)

И с желтого просили передать за статики )) :


FG28_Kodiak
Give him a big kiss from me! :)

Small_Bee
31.05.2012, 13:54
В принципе добавили три события - на убитого статика, здание и взрыв бомбы, с именами и координатами думаю для учёта поможет, не загружающиеся статики надо посмотреть, не знаю пока. Но это всё возможно будет только в финальной версии патча.
:bravo:

podvoxx
31.05.2012, 14:07
Тестировал наземку и отправлял в чат тип техники, т.е. groundActor.Type(). Иногда кроме обычных тракторов и танчиков появлялся тип Unknown. Это что за тип такой?(на null проверка проводится)

И по корабликам вопрос интересует - http://www.sukhoi.ru/forum/showthread.php?t=73921&p=1850412&viewfull=1#post1850412

А вот свежее подтверждение проблемы со статиками с картинками - http://www.sukhoi.ru/forum/showthread.php?t=76011&p=1850601&viewfull=1#post1850601

podvoxx
01.06.2012, 09:48
Вопрос к naryv

NOT Destroyed actor

При перезагрузке карты на сервере появляются такие сообщения, как это исправить?
http://www.sukhoi.ru/forum/showthread.php?t=76011&p=1850768&viewfull=1#post1850768

И в чем отличие команд f и file в консоли?

naryv
01.06.2012, 13:34
У Small_Bee dll, которая работает только с выделенным сервером. Однако сингл-миссии и кампании тоже нужно локализовывать(я добавил свою сборку, но это все-таки неудобно) . К тому же свою dll приходится прописывать в референсах, копировать в папку игры, добавлять нэймспэйс - не очень удобно. Сделал так - прписываем путь к словарю(может быть xml или SectionFile ), потом строку для перевода передаём в функцию, которая возвращает на заданном языке строку-перевод, либо оригинал, если перевода нет.


Ну и отправка сообщения, 3 метода(или же еще один параметр добавить, отвечающий за адресатов). Для армии, определенным игрокам и всем игрокам. тут не понял, ведь указывается уже кому отправляется сообщение.


Спасибо, хорошая новость :) А удалять статики можно будет подобно "живым" объектам? сейчас нет, только ивенты о смерти, но посмотрим.


Проверил загрузку стационарных объектов в подмиссии - грузится, надо конкретизировать что именно не загружается.



Тестировал наземку и отправлял в чат тип техники, т.е. groundActor.Type(). Иногда кроме обычных тракторов и танчиков появлялся тип Unknown. Это что за тип такой?(на null проверка проводится) неизвестный тип, ни к кому из заданных не относится, или не указан в базе объектов.


И по корабликам вопрос интересует - http://www.sukhoi.ru/forum/showthread.php?t=73921&p=1850412&viewfull=1#post1850412 емнип нельзя.


А вот свежее подтверждение проблемы со статиками с картинками - http://www.sukhoi.ru/forum/showthread.php?t=76011&p=1850601&viewfull=1#post1850601 эммм на картинке разрушенный ангар, в чём именно проблема?


Вопрос к naryv

NOT Destroyed actor

При перезагрузке карты на сервере появляются такие сообщения, как это исправить?
http://www.sukhoi.ru/forum/showthread.php?t=76011&p=1850768&viewfull=1#post1850768
Это стационарные объекты, стат. камеры и т.п. которые не были убиты в миссии остаются в следующую.


И в чем отличие команд f и file в консоли? сейчас ни в чём, в Ил-е отличались, сейчас работают одинаково.

podvoxx
01.06.2012, 13:44
тут не понял, ведь указывается уже кому отправляется сообщение.

Указывается для армии, массива игроков и для всех игроков?


сейчас нет, только ивенты о смерти, но посмотрим.

Просто если нельзя удалить объект, то миссию придется перезагружать. И на месте этого объекта другой не поставить(например поменять синий аэродром на красный с соответствующими статиками)


Проверил загрузку стационарных объектов в подмиссии - грузится, надо конкретизировать что именно не загружается.

Я видимо запутал в понятиях. Под статиками имел в виду не только из группы "Статический" в редакторе, но и "Здания и сооружения" - вот они не грузятся в подмиссиях



эммм на картинке разрушенный ангар, в чём именно проблема?

Хотелось бы об их убиении тоже получать сообщения. Сейчас там стоят пушки. Ангар взрывается, пушки заваливает, их почти не достать после этого. Их вообще не должно там быть по-хорошему(к тому же они "живые" и при приближении вражеской наземки начнут стрелять).
В общем нужно чтобы при уничтожении здания обрабатывалось событие соответствующее, чтобы не запихивать в него пушки или вагончики, а достаточно было бы самого здания. Ну и чтобы они могли перезагружаться на карте нормально для организации войны нон-стоп с динамической линией фронта и складами/заводами



Это стационарные объекты, стат. камеры и т.п. которые не были убиты в миссии остаются в следующую.

А зачем они в следующей? И как это влияет на работу миссии и сервера?

naryv
01.06.2012, 14:48
Указывается для армии, массива игроков и для всех игроков? для массива, а этот массив уже делается таким как автор хочет.

Просто если нельзя удалить объект, то миссию придется перезагружать. И на месте этого объекта другой не поставить(например поменять синий аэродром на красный с соответствующими статиками) да, это понятно.

Я видимо запутал в понятиях. Под статиками имел в виду не только из группы "Статический" в редакторе, но и "Здания и сооружения" - вот они не грузятся в подмиссиях Да, здания не грузятся.

Хотелось бы об их убиении тоже получать сообщения. Сейчас там стоят пушки. Ангар взрывается, пушки заваливает, их почти не достать после этого. Их вообще не должно там быть по-хорошему(к тому же они "живые" и при приближении вражеской наземки начнут стрелять).
В общем нужно чтобы при уничтожении здания обрабатывалось событие соответствующее, чтобы не запихивать в него пушки или вагончики, а достаточно было бы самого здания. Ну и чтобы они могли перезагружаться на карте нормально для организации войны нон-стоп с динамической линией фронта и складами/заводами да, так и сделано, при уничтожении здания соответствующий ивент происходит.

А зачем они в следующей? не знаю точно, возможно, чтобы не перезагружать лишний раз.

И как это влияет на работу миссии и сервера? да никак по идее, просто стационарные объекты которых не убили остануться .

podvoxx
01.06.2012, 15:09
для массива, а этот массив уже делается таким как автор хочет.

Просто обычно используются три таких массива - армия, все игроки, произвольный массив игроков. И собрать такие массивы не так просто. Например если отправлять сообщения всем в чат и на экран одновременно нужно обязательно исключать Server из массива адресатов, иначе при отправке HUD на выделенном появляется ошибка. Это часть проблемы универсальности - нужно сначала определить что за тип игры, отсортировать, потом проверять на null и так для все трех вышеуказанных основных типов сообщений. И это будет засорять каждый скрипт, где есть отправка сообщений. Вот такой кусок примерно:

public static void SendMessageToAll(string langFolderPath, string msgKey, string target, params object[] args)
{
List<Player> players = new List<Player>();
List<Player> playersScreen = new List<Player>();
if (target == "Chat")
{
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());

if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, target, args);
}

}
else if (target == "Screen")
{
if (GamePlay.gpPlayer() != null)
if (GamePlay.gpPlayer().Name().ToString() != "Server")
{
players.Add(GamePlay.gpPlayer());
}
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());

if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, target, args);
}
}
else if (target == "ChatAndScreen")
{
// Chat
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());

if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, "Chat", args);
}

//Screen
if (GamePlay.gpPlayer() != null)
if (GamePlay.gpPlayer().Name().ToString() != "Server")
{
playersScreen.Add(GamePlay.gpPlayer());
}
if (GamePlay.gpRemotePlayers() != null)
playersScreen.AddRange(GamePlay.gpRemotePlayers());

if (playersScreen.ToArray() != null)
{
send(langFolderPath, playersScreen.ToArray(), msgKey, "Screen", args);
}
}
}

public static void SendMessageToArmy(string langFolderPath, string msgKey, int army, string target, params object[] args)
{
List<Player> players = new List<Player>();
List<Player> acceptedPlayers = new List<Player>();

if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());

if (players != null)
{
foreach (Player player in players)
{
if (player.Army() == army) acceptedPlayers.Add(player);
}
if (acceptedPlayers.Count > 0)
{
send(langFolderPath, acceptedPlayers.ToArray(), msgKey, target, args);
}
}
}

public static void SendMessageToPlayers(string langFolderPath, string msgKey, Player[] players, string target, params object[] args)
{
if (players != null)
{
send(langFolderPath, players, msgKey, target, args);
}
}

При том, что обычно используются только эти три типа(они покрывают все потребности) - SendMessageToAll, SendMessageToArmy и произвольные массив - SendMessageToPlayers


Да, здания не грузятся.

Это не планируется менять? Просто для миссий, где загрузка подмиссий меняется от каких-то условий невозможно предусмотреть все постройки в хост миссии. И вообще получается окопы где-то в хостмиссии, артиллерия в подмиссии и еще неизвестно, появится ли она на карте(в зависимости от условий). Это не дает воспользоваться возможностями игры по организации динамической войны.

И еще вопрос. По мультиплеерным аддинам будут изменения в новом патче?

naryv
01.06.2012, 17:01
Просто обычно используются три таких массива ...
При том, что обычно используются только эти три типа(они покрывают все потребности) - SendMessageToAll, SendMessageToArmy и произвольные массив - SendMessageToPlayers
Это уход в частности, думаю вряд-ли будем делать.


Это не планируется менять? Просто для миссий, где загрузка подмиссий меняется от каких-то условий невозможно предусмотреть все постройки в хост миссии. И вообще получается окопы где-то в хостмиссии, артиллерия в подмиссии и еще неизвестно, появится ли она на карте(в зависимости от условий). Это не дает воспользоваться возможностями игры по организации динамической войны. Поменять нельзя, это связано с сетевым кодом и механизмом работы домиков. Как вариант - можно в стационарные объекты добавить здания нужные для подгрузки в таких миссиях(только надо список таких зданий).


И еще вопрос. По мультиплеерным аддинам будут изменения в новом патче? По идее должен быть пример, показывающий как делать такие аддины.

podvoxx
01.06.2012, 17:09
Это уход в частности, думаю вряд-ли будем делать.
Но тогда придется все равно использовать отдельную сборку, чтобы не засорять одинаковым кодом скрипты.
По сути нужен метод, который будет собирать либо всех игроков, либо определенной армии в зависимости от задачи.



Поменять нельзя, это связано с сетевым кодом и механизмом работы домиков. Как вариант - можно в стационарные объекты добавить здания нужные для подгрузки в таких миссиях(только надо список таких зданий).
Все ангары, промышленные здания и окопы можно перенести в статические. Остальное не помню, посмотрю сегодня. А так будет идеальное решение.

И спасибо за ответы и доработку:thx:

Malevich
01.06.2012, 23:30
Кто может подсказать, написать мнуал, как сделать в полном редакторе миссию для теста набивки лент. 1 противник бот самый простой летящий по прямой и за ним с превышением в 500 м мы. В редакторе я полный бот.

aeros
01.06.2012, 23:46
Кто может подсказать, написать мнуал, как сделать в полном редакторе миссию для теста набивки лент. 1 противник бот самый простой летящий по прямой и за ним с превышением в 500 м мы. В редакторе я полный бот.
Метод проб и находок ни кто не отменял).
Для начала нужно добиться появления своего самолета и себя в нем.
1. Загрузить карту по-проще.
2. Самолет выбирается в "объектах", затем клик на карте ЛКМ и "инсерт" - появится кружок, т.е. самолет. Это не все, дальше нужно еще раз кликнуть и инсертнуть - появится следующая точка маршрута, соединенная линией - т.е. куда он будет лететь.
3. Изучить все менюшки во всех вкладках в свойствах этого самолета, найти галку "самолет игрока" или "игрок", не помню, и поставить ее.
4. Найти меню с набивкой и набить).
5. Сохранить миссию как "летчик снайпер - 1!!"
6. Запустить ее, убедиться, что самолет, патроны и пилот функционируют нормально.
---
Все, после этого создать противников труда не составит.
Сведение в редакторе не выставляется!!!!, только в настройках самолета в основном меню игры.

Malevich
01.06.2012, 23:57
На карте можно нажать только правой и то предлагает "вставить из файла". Я просто тупо не могу добавить объект на карту.

podvoxx
02.06.2012, 00:08
На карте можно нажать только правой и то предлагает "вставить из файла". Я просто тупо не могу добавить объект на карту.

Меню сверху смотри, навигатор объектов. В верхнем меню все основные инструменты

aeros
02.06.2012, 00:09
На карте можно нажать только правой и то предлагает "вставить из файла". Я просто тупо не могу добавить объект на карту.
На клавиатуре(компьютерной), над стрелками, есть кнопка "Insert". Объекты на карту добавляются ее нажатием.

Malevich
02.06.2012, 00:13
ОМГ. Спасибо aeros ! Я даже как то не подумал что в редакторе можно только клавой вставлять. :eek:

podvoxx
02.06.2012, 01:06
ОМГ. Спасибо aeros ! Я даже как то не подумал что в редакторе можно только клавой вставлять. :eek:
В настройках управления указаны клавиши для редактора

Malevich
02.06.2012, 09:41
В настройках управления указаны клавиши для редактора
Да спасибо я уже разобрался.

А кто ещё подскажет какие настройки в редакторе ставить, чтобы можно было пересесть на место бота посмотреть повреждения которые нанес? Кто то на форуме уже говорил что делал так.

aeros
02.06.2012, 11:27
В меню игры:
-настройки
-реализм
-пересаживание между самолетами - экспериментируй.
Параметры реализма миссии, создаваемой в СР выставляются в общих "настройках". Убрать маркеры в созданной миссии я смог только там. То есть одна и та же миссия может быть и хардкорной и нубской без ковыряния СР. Пересаживания не пробовал.

podvoxx
28.06.2012, 12:19
Заметил, что моя радиостанция не сообщает об атаке наземки, вопрос такой.
Есть подмиссия, в ней такой код:



public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;
}


При значении MissionNumberListener = -1 подмиссия будет слушать другие подмиссии, загруженные из хостмиссии? Или только те подмиссии, что она сама загружает?

Small_Bee
28.06.2012, 14:55
Заметил, что моя радиостанция не сообщает об атаке наземки, вопрос такой.
Есть подмиссия, в ней такой код:



public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;
}


При значении MissionNumberListener = -1 подмиссия будет слушать другие подмиссии, загруженные из хостмиссии? Или только те подмиссии, что она сама загружает?

Нет разницы кто кого грузил, -1 будет слушать все подмиссии.

podvoxx
28.06.2012, 15:01
Нет разницы кто кого грузил, -1 будет слушать все подмиссии.

OnActorDead тоже будет работать? А то никакой реакции, только хостмиссия выдает сообщения о трупиках. Код простой, просто строчка с отправкой сообщения

Small_Bee
28.06.2012, 15:12
OnActorDead тоже будет работать? А то никакой реакции, только хостмиссия выдает сообщения о трупиках. Код простой, просто строчка с отправкой сообщения

Гм, по идее должно.

podvoxx
28.06.2012, 15:16
Гм, по идее должно.

Раньше вроде все работало. Пока в хост миссии сделаю

Small_Bee
28.06.2012, 15:41
Раньше вроде все работало. Пока в хост миссии сделаю
Как совет - пробуй такие вещи в отдельных тестовых миссиях - так понятнее будет, и гарантия того, что нигде ничего не мешается.
Может еще проблема в том, что подмиссия загружается уже после старта битвы. Листенера тогда лучше назначать например в OnMissionLoaded. Так как OnMissionLoaded вызывается во всех подмиссиях вне зависимости от листенера надо сначала проверить на соответствие фактического номера миссии переданному в параметре. Если совпадает (значит загрузилась именно эта миссия) то ставь слушателя -1.

podvoxx
29.06.2012, 13:57
13:52:08] =================================================
[13:52:08] ERROR: HierMesh: Can't find chunk '<edge>'
[13:52:08]
[13:52:08] =================================================
[13:52:08] System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception.
[13:52:08] at corelib.CoreERROR(SByte* )
[13:52:08] at corelib.HierMeshObj.GetChunkIdxByName(HierMeshObj* , SByte* name)
[13:52:08] at maddox.core.WHMesh.chunkFind(String name)
[13:52:08] at KTmh5969P9sHbZNsJqn.scyXCk6GoW5DSFP3q4Z.msgCollision(GUDIYTA0yPf0ogbiCH , String , String )
[13:52:08] at r3OTrKbkanKFiYeUJ8A.gWwctWbrwUiwwEwMet0.rvvrf7dfEJCLIWUXHBtj(Object , Object , Object , Object )
[13:52:08] at r3OTrKbkanKFiYeUJ8A.gWwctWbrwUiwwEwMet0.BUnX9lrqaYx(Object )
[13:52:08] at 5w4hm6g7ViToh11Xblj.s9Hn4SgDnFnwb9NgjwU.DeM383opUVrBA3bTdXp(Object , Object )
[13:52:08] at 5w4hm6g7ViToh11Xblj.s9Hn4SgDnFnwb9NgjwU.STNE9gTJWE(Object )

Что это за ошибка? Скорее всего с коллизией связана, но отловить не получается пока. И насколько она критична? Появляется не всегда

Small_Bee
29.06.2012, 18:56
Это не скрипт, походу моделька какая-то.

podvoxx
29.06.2012, 18:59
Это не скрипт, походу моделька какая-то.

Это связано с портовыми кранами и ангарами. Убрал четыре штуки крана - весь ряд(если меньше, то не помогает) - ошибка пропала. Может пересекались, хотя другие стоят нормально

naryv
29.06.2012, 20:46
Это связано с портовыми кранами и ангарами. Убрал четыре штуки крана - весь ряд(если меньше, то не помогает) - ошибка пропала. Может пересекались, хотя другие стоят нормально
А можно миссию, где вылезает ошибка, посмотрим.

PS в эту бету включили работу с стационарами, ивенты при убийствах домиков и стационаров и переводчик. Попробуйте:)

Для переводчика - перед вызовом прописать путь к файлу словаря GamePlay.gpDictionaryFilePath , можно в OnBattleStarted(). Словари - section file вида:

[destroed]
ru уничтожил
de das unichtozhil
[kills]
ru злодейски убил
[bombs]
ru разбомбил
[explode]
ru взорвал
[bomb exploded]
ru бонба бахнула
[Stationary count:]
ru кол-во стационарных целей
[at]
ru в точке
или xml

<?xml version="1.0" encoding="utf-8"?>
<dictionary>
<Text key="destroed">
<en>destroed</en>
<ru>уничтожил</ru>
<de>das unichtozhil</de>
</Text>
<Text key="kills">
<en> kills </en>
<ru> злодейски убил </ru>
<de>das ubil</de>
</Text>
<Text key="bombs">
<en> bombs </en>
<ru> разбомбил </ru>
<de>das bomb</de>
</Text>
</dictionary>

вызывается GamePlay.gpTranslate("kills", "ru", 2) - ключ, язык, параметр дебага(0..2), сейчас забыл, как точно, но при разных значениях его при ошибках текст ошибки не пишется, либо добавляется к результирующей строке, либо пишется в лог.


события - OnBuildingKilled(string title, maddox.GP.Point3d pos, AiDamageInitiator initiator, int eventArgInt)
OnBombExplosion(string title, double mass, maddox.GP.Point3d pos, AiDamageInitiator initiator, int eventArgInt)
OnStationaryKilled(GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt)

GroundStationary тип стационарного объекта , gpGroundStationarys() - массив со всеми стац. объектами в битве, стационар можно дестроить, проверять жив он или нет, можно выбирать стационары в радиусе и по стране, к сожалению, сейчас не помню формат вызова (что то типа gpGroundStationarys(double x,double y,double r) - центр и радиус), нет игры под рукой.

примерно так:)

PPS добавили ещё домики в стационарные объекты но есть проблема - стационары планировались небольшими не очень прочными объектами и ДМ их заточена под такие условия, так что большие фабрики к сожалению могут убиваться достаточно легко бомбами.

Small_Bee
29.06.2012, 21:34
Ааааа бонба!!!!!!!!!:bravo:

podvoxx
29.06.2012, 21:46
Абалдеть, как раз войнушку собирался начинать, очень пригодится. Спасибо :bravo:

FG28_Kodiak
30.06.2012, 08:52
Sorry for posting in english, but i don't speak russian.

Congratulation to the team, the new functions are a great improvement!!!

But the heck what is "das unichtozhil" and "das ubil" :D (i am german but never heard about it ;))

podvoxx
30.06.2012, 09:00
Sorry for posting in english, but i don't speak russian.

Congratulation to the team, the new functions are a great improvement!!!

But the heck what is "das unichtozhil" and "das ubil" :D (i am german but never heard about it ;))

"destroyed" and "kill":) "zerstort" ?

podvoxx
30.06.2012, 12:29
public override void OnStationaryKilled(GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt)
{
base.OnStationaryKilled(_stationary, initiator, eventArgInt);
}

А как определить номер подмиссии (int missionNumber), которой принадлежит статик?
Есть две подмиссии с одинаковыми зданиями, событие OnStationaryKilled срабатывает в обеих подмиссиях независимо от MissionNumberListener, мне же нужны статики только определенной подмиссии

Scavenger
30.06.2012, 12:39
Sorry for posting in english, but i don't speak russian.

Congratulation to the team, the new functions are a great improvement!!!

But the heck what is "das unichtozhil" and "das ubil" :D (i am german but never heard about it ;))
This ist russische humor, towarisch!

Und willkommen!

-atas-
30.06.2012, 12:43
Спасибо за отличные новости!

naryv
30.06.2012, 13:16
Sorry for posting in english, but i don't speak russian.

Congratulation to the team, the new functions are a great improvement!!!

But the heck what is "das unichtozhil" and "das ubil" :D (i am german but never heard about it ;))
:) Sorry, i know just one phrase in german - "Hande hoch" :) so it's just russian words with latin alphabet :)



public override void OnStationaryKilled(GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt)
{
base.OnStationaryKilled(_stationary, initiator, eventArgInt);
}

А как определить номер подмиссии (int missionNumber), которой принадлежит статик?
Есть две подмиссии с одинаковыми зданиями, событие OnStationaryKilled срабатывает в обеих подмиссиях независимо от MissionNumberListener, мне же нужны статики только определенной подмиссии напомните, пожалуйста в понедельник, я посмотрю, но боюсь, что номер подмиссии может не оказаться в свойствах стационара.


Ааааа бонба!!!!!!!!!:bravo:


Абалдеть, как раз войнушку собирался начинать, очень пригодится. Спасибо :bravo:


Спасибо за отличные новости!
:) и желательно, конечно, это всё посмотреть - потестировать, чтобы к финальному патчу исправить косяки

podvoxx
30.06.2012, 16:48
напомните, пожалуйста в понедельник, я посмотрю, но боюсь, что номер подмиссии может не оказаться в свойствах стационара.
В свойствах вроде нет. Там есть Category и Title, информации о подмиссии не нашел. Если есть такая возможность - добавьте по типу onActorDead. И желательно чтобы событие также зависело от MissionNumberListener, чтобы меньше загружать сервер.

podvoxx
01.07.2012, 12:09
вызывается GamePlay.gpTranslate("kills", "ru", 2) - ключ, язык, параметр дебага(0..2), сейчас забыл, как точно, но при разных значениях его при ошибках текст ошибки не пишется, либо добавляется к результирующей строке, либо пишется в лог.

При ошибке:
0 - пишет ключ
1 - ключ/ название ошибки
2 - расширенное описание ошибки указанием ключа и языка перевода

Пока только на ошибки смотрю :)

Что-то путь не получается задать. Прописываю:


GamePlay.gpDictionaryFilePath = "missions\\SMP\\Friday on my mind\\submissions\\BlueTask5\\BlueMilitaryDepot\\dictionary.xml";

Получается ошибка


[13] ERROR [SYSTEM] Translator error NoDictionaryPath; DictionaryPath = ; Message : blueStaticKillLabel ; Language : ru

В общем проблема с путем. Как его правильно задавать? Пробовал полный, короткий, тхт и хml, слэши в разные стороны наклонял

FG28_Kodiak
01.07.2012, 21:04
Hi again,
OnBuildingKilled and OnStationaryKilled are great improvements, but in my tests there was no reaction after destroying a bridge. Will this added in future or is there an other way to get it?

podvoxx
02.07.2012, 09:39
1. Что-то я запутался с триггерами. В миссии есть такой: Target Pass Through, срабатывает на красную наземку. Нужно посчитать танчики, вошедшие в зону триггера. Триггер срабатывает только один раз(когда первый танк подъезжает), хотя activ вроде переключаю. Или нельзя так юниты посчитать(этот триггер вроде на проход работает)?


public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);

if ("A_defend_B".Equals(shortName) && active)
{
smpSendMSG.SendMessageToAll("*** Юнит красных вошел в зону - подмиссия [ {0} ], trigger - [ {1} ]", "Chat", missionNumber, shortName);
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}

2.
и желательно, конечно, это всё посмотреть - потестировать, чтобы к финальному патчу исправить косяки

Пока не могу заставить работать перевод, но есть пожелание по xml файлу. Добавить туда еще один раздел "верхнего" уровня, как здесь (http://forum.1cpublishing.eu/showpost.php?p=428589&postcount=14) сделал Кодиак- <LanguageSection name="Messages">, т.е. добавить еще один уровень. Это упростит работу с ним при большом количестве сообщений

3. Планируется ли добавить в редактор объект мост? Во Франции с этим беда, да и вообще они очень важными могут быть(как было исторически) при правильной реализации. Можно сделать хотя бы по принципу ж/д, т.е. без мостов. Или чтобы мосты прокладывались при установке сплайновой дороги - тогда можно было бы переправы организовать, при условие что дороги можно будет грузить через подмиссию.

4. Возможно ли добавить в редактор объект "взрыв" с настраиваемой мощностью(ну и таймер наверное нужен). Это пригодится для создания артобстрелов, можно даже организовать корректировку артогня с воздуха.

naryv
02.07.2012, 18:55
В свойствах вроде нет. Там есть Category и Title, информации о подмиссии не нашел. Если есть такая возможность - добавьте по типу onActorDead. И желательно чтобы событие также зависело от MissionNumberListener, чтобы меньше загружать сервер. Добавил, в след. патче будет наверное, как параметр в ивенте будет приходить.
массивы со стационарами так заполняются :
GroundStationary[] gpGroundStationarys(); - все
GroundStationary[] gpGroundStationarys(string Country); - все с заданой страной
GroundStationary[] gpGroundStationarys(double x, double y, double r); в радиусе r с центром в x,y
GroundStationary[] gpGroundStationarys(string Country, double x, double y, double r); в радиусе r с центром в x,y с заданой страной.


При ошибке:
0 - пишет ключ
1 - ключ/ название ошибки
2 - расширенное описание ошибки указанием ключа и языка перевода

Пока только на ошибки смотрю :)

Что-то путь не получается задать. Прописываю:


GamePlay.gpDictionaryFilePath = "missions\\SMP\\Friday on my mind\\submissions\\BlueTask5\\BlueMilitaryDepot\\dictionary.xml";

Получается ошибка


[13] ERROR [SYSTEM] Translator error NoDictionaryPath; DictionaryPath = ; Message : blueStaticKillLabel ; Language : ru

В общем проблема с путем. Как его правильно задавать? Пробовал полный, короткий, тхт и хml, слэши в разные стороны наклонял возможно задаёте после вызова переводчика? Вот так у меня работает, с заданием в OnBattleStarted() :

public override void OnBattleStarted()
{
base.OnBattleStarted();
GamePlay.gpDictionaryFilePath = "E:\\BoB\\missions\\tests\\dictionary.xml";
}


Hi again,
OnBuildingKilled and OnStationaryKilled are great improvements, but in my tests there was no reaction after destroying a bridge. Will this added in future or is there an other way to get it?
Sorry, bridges are very special type of game objects, built in map, and it is very hard to work with them. I'll look if it is possible to get such event but can't promise .


1. Что-то я запутался с триггерами. В миссии есть такой: Target Pass Through, срабатывает на красную наземку. Нужно посчитать танчики, вошедшие в зону триггера. Триггер срабатывает только один раз(когда первый танк подъезжает), хотя activ вроде переключаю. Или нельзя так юниты посчитать(этот триггер вроде на проход работает)?


public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);

if ("A_defend_B".Equals(shortName) && active)
{
smpSendMSG.SendMessageToAll("*** Юнит красных вошел в зону - подмиссия [ {0} ], trigger - [ {1} ]", "Chat", missionNumber, shortName);
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}
так Вы дизейблите триггер после срабатывания - он перестают быть активным и никаких событий не выдаёт, поэтому и получается одно срабатывание.


Пока не могу заставить работать перевод, но есть пожелание по xml файлу. Добавить туда еще один раздел "верхнего" уровня, как здесь (http://forum.1cpublishing.eu/showpost.php?p=428589&postcount=14) сделал Кодиак- <LanguageSection name="Messages">, т.е. добавить еще один уровень. Это упростит работу с ним при большом количестве сообщений не очень понятно зачем.


Планируется ли добавить в редактор объект мост? Во Франции с этим беда, да и вообще они очень важными могут быть(как было исторически) при правильной реализации. Можно сделать хотя бы по принципу ж/д, т.е. без мостов. Или чтобы мосты прокладывались при установке сплайновой дороги - тогда можно было бы переправы организовать, при условие что дороги можно будет грузить через подмиссию. тут пока ничего не могу сказать, мост как отдельный объект не будет учитываться пасфайндингом, и по такому машинки не поедут.


Возможно ли добавить в редактор объект "взрыв" с настраиваемой мощностью(ну и таймер наверное нужен). Это пригодится для создания артобстрелов, можно даже организовать корректировку артогня с воздуха. не знаю, вряд-ли. Есть бомба в стационарах которая должна взрываться когда на неё кто то наезжает, можно наверное так :)


PS где-то справшивали про отображение ников в маркерах - в этой бете вернули их.

podvoxx
02.07.2012, 19:04
Спасибо за ответы!



не очень понятно зачем.
При наличии динамического меню и различных подмиссий, выдающих сообщение это упростит редактирование и чтение. Сейчас все сообщения получаются в одном едином списке. В xml файлах Армы также используется несколько уровней, очень удобно. Хотя это имеет смысл делать если словарь будет доступен из скриптов подмиссий(как у Кодиака).


А с триггером пока не разобрался, как он включается снова?

Локализация заработала при указании абсолютного пути, я путь указывал от mission. Если есть возможность - лучше сделать путь как для загрузки миссий - "missions\\..."
Сейчас в каждом скрипте, где идет обращение к локализатору приходится определять путь к папке документов пользователя, было бы замечательно избавиться от этого

private static string localizationFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\1C SoftClub\\il-2 sturmovik cliffs of dover\\missions\\SMP\\Battle\\system\\localization.xml";

По объекту взрыв - он помог бы разнообразить гейплей, сделать новые задания. Для гаубиц нужна возможность задать цель "атаковать район", т.к. артиллерия очень важна в бою. Может возможно добавить невидимую мину с настраиваемой мощностью взрыва, которая будет срабатывать по таймеру и/или из скрипта с возможностью ее загрузки из подмиссии?

podvoxx
04.07.2012, 17:07
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);

if ("A_defend_B".Equals(shortName) && active)
{
smpSendMSG.SendMessageToAll("*** Юнит красных вошел в зону - подмиссия [ {0} ], trigger - [ {1} ]", "Chat", missionNumber, shortName);
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}

Не срабатывает триггер после первого раза.
Пробовал и так:
GamePlay.gpGetTrigger(shortName).Enable = true;

Может вообще не так делаю?

naryv
04.07.2012, 18:16
А с триггером пока не разобрался, как он включается снова?

public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);

if ("A_defend_B".Equals(shortName) && active)
{
smpSendMSG.SendMessageToAll("*** Юнит красных вошел в зону - подмиссия [ {0} ], trigger - [ {1} ]", "Chat", missionNumber, shortName);
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}

Не срабатывает триггер после первого раза.
Пробовал и так:
GamePlay.gpGetTrigger(shortName).Enable = true;

Может вообще не так делаю? посмотрел, действительно повторно не срабатывает, посмотрю почему.




По объекту взрыв - он помог бы разнообразить гейплей, сделать новые задания. Для гаубиц нужна возможность задать цель "атаковать район", т.к. артиллерия очень важна в бою. Может возможно добавить невидимую мину с настраиваемой мощностью взрыва, которая будет срабатывать по таймеру и/или из скрипта с возможностью ее загрузки из подмиссии? Ну пока можно рождать бомбу взрывающуюся и машинку на неё наезжающую, насчёт взрыва посмотрим но не уверен можно ли.

naryv
05.07.2012, 10:47
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);

if ("A_defend_B".Equals(shortName) && active)
{
smpSendMSG.SendMessageToAll("*** Юнит красных вошел в зону - подмиссия [ {0} ], trigger - [ {1} ]", "Chat", missionNumber, shortName);
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}

Не срабатывает триггер после первого раза.
Пробовал и так:
GamePlay.gpGetTrigger(shortName).Enable = true;

Может вообще не так делаю?
Посмотрел, вспомнил как оно работает :). active устанавливается при входе объекта в зону триггера, сбрасывается при выходе из зоны, OnTrigger срабатывает и в первом и во втором случае. Т.о. если машинка заехала в зону триггера и не выехала - active будет true и следующая въехавшая машинка изменить и, соответственно, вызвать OnTrigger не сможет. Если машинка проехала зону триггера - на въезде она установит active , на выезде снимет его (будет 2 вызова OnTrigger ), следующая машинка въехав установит active, выехав - снимет, и т.д. Ну а Enable - просто разрешает или запрещает работу триггера.

podvoxx
05.07.2012, 10:56
Посмотрел, вспомнил как оно работает :). active устанавливается при входе объекта в зону триггера, сбрасывается при выходе из зоны, OnTrigger срабатывает и в первом и во втором случае. Т.о. если машинка заехала в зону триггера и не выехала - active будет true и следующая въехавшая машинка изменить и, соответственно, вызвать OnTrigger не сможет. Если машинка проехала зону триггера - на въезде она установит active , на выезде снимет его (будет 2 вызова OnTrigger ), следующая машинка въехав установит active, выехав - снимет, и т.д. Ну а Enable - просто разрешает или запрещает работу триггера.

Т.е. если машина не выезжает из зоны триггера, то он больше не сработает? А можно добавить "одноразовый" триггер в игру, который будет срабатывать только при входе объекта в зону без учета вышел он оттуда или нет? Или может есть другое средство. Есть триггер с радиусом, с разных направлений в него заходят танки. Если делать пересечение зоны триггера, то их нужно будет несколько расставлять, что не вариант. Городить подсчет в радиусе от какой-то точки тоже неудобно.

--- Добавлено ---


Т.е. если машина не выезжает из зоны триггера, то он больше не сработает? А можно добавить "одноразовый" триггер в игру, который будет срабатывать только при входе объекта в зону без учета вышел он оттуда или нет? Или может есть другое средство. Есть триггер с радиусом, с разных направлений в него заходят танки. Если делать пересечение зоны триггера, то их нужно будет несколько расставлять, что не вариант. Городить подсчет в радиусе от какой-то точки тоже неудобно.

Или добавить доступ к вэйпоинтам наземки, т.е. если достигла определенной точки, что-то срабатывает(у самолетов вроде должно такое быть). Про контроль над вэйпоинтами наземки на желтом также писали, можно было бы легко дестроить технику, достигшую последней точки маршрута. Сейчас по таймеру делают, что не удобно.

Small_Bee
05.07.2012, 11:18
А почему бы вместо триггера не юзать просто радиус определенный и периодически в нем прверять наличие машинок. Собственно во льве так и делалось там не было триггеров вообще. А можно даже без радиусов - нарисовать в масштабе картику в которой разные котрольные зоны будут разными цветами обозначены. Екстраполируешь координаты машинки на эту "карту", смотришь цвет пикселя - и по нему понимаешь где машинка. Тогда можно чекпойнты вообще любой формы делать.

naryv
05.07.2012, 12:25
Т.е. если машина не выезжает из зоны триггера, то он больше не сработает? А можно добавить "одноразовый" триггер в игру, который будет срабатывать только при входе объекта в зону без учета вышел он оттуда или нет? Или может есть другое средство. Есть триггер с радиусом, с разных направлений в него заходят танки. Если делать пересечение зоны триггера, то их нужно будет несколько расставлять, что не вариант. Городить подсчет в радиусе от какой-то точки тоже неудобно. Одноразовый триггер и сработает один раз, его в любом случае для многоразовости надо сбрасывать. Можно как Small_Bee написал делать, или поставить "проходной" триггер на предпоследнюю точку маршрута и маршрут строить так, чтобы, перед финальной точкой группа проезжала через триггер - тогда не важно будет, откуда группа подошла и триггер будет один.

Или добавить доступ к вэйпоинтам наземки, т.е. если достигла определенной точки, что-то срабатывает(у самолетов вроде должно такое быть). Про контроль над вэйпоинтами наземки на желтом также писали, можно было бы легко дестроить технику, достигшую последней точки маршрута. Сейчас по таймеру делают, что не удобно. по отдельным вэйпоинтам нельзя их слишком много будет, т.к. в процессе движения в маршрут могут добавлятся точки при нападении врагов, объезде препятствий и т.д. будет очень много "мусорных" ивентов, а на последеней точке маршрута вызывается OnActorTaskCompleted, таймер не надо. Можно ещё проверить точку маршрута через GetWay и GetCurrentWayPoint() у наземки - они покажут где на маршруте сейчас группа.

podvoxx
05.07.2012, 12:44
А почему бы вместо триггера не юзать просто радиус определенный и периодически в нем прверять наличие машинок. Собственно во льве так и делалось там не было триггеров вообще. А можно даже без радиусов - нарисовать в масштабе картику в которой разные котрольные зоны будут разными цветами обозначены. Екстраполируешь координаты машинки на эту "карту", смотришь цвет пикселя - и по нему понимаешь где машинка. Тогда можно чекпойнты вообще любой формы делать.

С радиусом неудобно, я эту точку не буду видеть даже в редакторе, когда танчики подгонять по маршруту надо будет.

Насчет картинки - это не для меня решение явно :) Хотя нет, интересно. Как это технически, хотя бы общими словами? Это ж нефть и уголь можно добывать таким образом))


Одноразовый триггер и сработает один раз, его в любом случае для многоразовости надо сбрасывать. Можно как Small_Bee написал делать, или поставить "проходной" триггер на предпоследнюю точку маршрута и маршрут строить так, чтобы, перед финальной точкой группа проезжала через триггер - тогда не важно будет, откуда группа подошла и триггер будет один.
Это и требуется в принципе, главное чтобы была возможность его сбросить. Сделать проход всей техники через один триггер невозможно для моей миссии, это я сделал только для колонн. Танки атакуют с разных направлений, иначе получится что они все проходят через одну точку как через игольное ушко.
Простой триггер должен быть, он кажется во всех играх есть такого типа.


а на последеней точке маршрута вызывается OnActorTaskCompleted, таймер не надо. Можно ещё проверить точку маршрута через GetWay и GetCurrentWayPoint() у наземки - они покажут где на маршруте сейчас группа.
Спасибо, это то что нужно. Тогда возможно и без триггера можно обойтись, даже лучше будет - можно каждую машинку в любой угол загнать.

И еще пара вопросов:
1. Как узнать точный размер карты (или картинки карты) в игре? Нужно для программки, читающей файл миссии. Т.е. открываем файл, там схематичная карта того же размера, что в БОБе и все маршруты и статики точно на тех же местах, что и в игре.

2. Можно ли из библиотек игры получить список названий машинок, грузов, статиков?
Такого вида(как в файле миссии): Car.Bedford_MW_open
И такого(как в редакторе): Грузовой автомобиль "Bedford MW"
Категории редактора можно таким же образом получить?
Начал делать генератор колонн снабжения, приходится открывать редактор, ставить машинку, сохранять файл, копировать название из файла миссии в файл настроек.

3. Возможно ли добавление в настройки вэйпоинтов линейных маршрутов от точки А к Б и так дале без сплайнов. Нужно для автоматической генерации коротких маршрутов, например атака города с разных направлений. Сейчас приходится прокладывать маршрут(он липнет еще постоянно к дорогам) в редакторе, потом копировать оттуда. Просто когда-то пробовал убрать строчки сплайнов из файла миссии, перестала работать. Или движение от точки к точке можно все же задать принудительно?

naryv
05.07.2012, 13:01
Это и требуется в принципе, главное чтобы была возможность его сбросить. Тут и затык, чтобы сбрасывать нужно какое-то условие для сброса, а его нет => одноразовый триггер получается


Сделать проход всей техники через один триггер невозможно для моей миссии, это я сделал только для колонн. Танки атакуют с разных направлений, иначе получится что они все проходят через одну точку как через игольное ушко. ну сделать триггер радиусом метров 20, и последнюю и предпоследнюю точки поставить на расстоянии 30 метров, "со стороны" игольное ушко будет незаметно. Либо триггер ставить там куда все танки съезжаются атакуя, а потом добавлять точку чтобы после завершения танки расходились "по позициям", всяко они в одной точке сгрудиться не должны.

podvoxx
05.07.2012, 13:13
Тут и затык, чтобы сбрасывать нужно какое-то условие для сброса, а его нет => одноразовый триггер получается
А если условия сброса поставить срабатывание триггера? Т.е. сработал, вызвал событие, сбросился и дальше по кругу. Хотя может я не понимаю чего-то :)



ну сделать триггер радиусом метров 20, и последнюю и предпоследнюю точки поставить на расстоянии 30 метров, "со стороны" игольное ушко будет незаметно. Либо триггер ставить там куда все танки съезжаются атакуя, а потом добавлять точку чтобы после завершения танки расходились "по позициям", всяко они в одной точке сгрудиться не должны.

Это сложно будет, так как если ставить колонну танков, то они хоть и расходятся в стороны, но все равно идут колонной по сути. Поэтому придется делать 8 разных танков каждый со своим маршрутом, и каждый загонять в триггер - уйма времени уйдет.
Ну и прилетит штука и разбомбит их в узком месте.
20 метров мало, будет город Амьен, пока три линии обороны/атаки. И если им давать общую точку, то они подстваят бока пушкам, направляясь в эту точку.

Частично это бы решилось, если бы у триггеров были зоны разной формы как в Арма. Там есть прямоугольник, эллипс и даже вроде произвольная форма. Возможно такое сделать в бобовских триггерах(прямоугольник и эллипс)?

Small_Bee
05.07.2012, 15:30
С радиусом неудобно, я эту точку не буду видеть даже в редакторе, когда танчики подгонять по маршруту надо будет.

Почему неудобно? Надо делать что бы было удобно. расставляешь в редакторе триггеры, в скрипте вытягиваешь их, смотришь радиусы - пожалуйста, все удобно. А нет и файл миссии можно прочитать напрямую. )

Насчет картинки - это не для меня решение явно :) Хотя нет, интересно. Как это технически, хотя бы общими словами? Это ж нефть и уголь можно добывать таким образом))


Все проще чем тебе кажется. Вот класс Bitmap (http://msdn.microsoft.com/ru-ru/library/4e7y164x) или вообще - WriteableBitmap (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx) (если и рисовать еще в реальном времени), пользуйся на здоровье. Хотя это и секрет полишинеля, но такой подход очень сильно много где используется - от карт высот и карты проходимости до наличия каких то ресурсов в определенной точке. На одном пикселе ты можешь задать каждым каналом какой-то ресурс - 3 штуки или вообще 4-ре, если с альфой.

--- Добавлено ---



Частично это бы решилось, если бы у триггеров были зоны разной формы как в Арма. Там есть прямоугольник, эллипс и даже вроде произвольная форма. Возможно такое сделать в бобовских триггерах(прямоугольник и эллипс)?

Дык рисуй картинки - форма армовских триггеров и рядом не стояла. Хоть и ник свой нарисуй, а после загони танчики туда - с высоты сразу будет ясно, кто миссию делал )

podvoxx
05.07.2012, 16:02
Дык рисуй картинки - форма армовских триггеров и рядом не стояла. Хоть и ник свой нарисуй, а после загони танчики туда - с высоты сразу будет ясно, кто миссию делал )

Это понятно, только в редакторе придется "на глаз" эти районы закрашивать либо делать программку специальную, где будет бобовская карта. Хорошо бы из боба прямо изображение карты считывать, как и карту высот. А разная форма триггеров нужна, очень упрощает дело. Нужно учесть пересечение линии фронта по линии - нарисовал вытянутый прямоугольник и готово. Картинки для более сложных задач пригодятся.

Small_Bee
05.07.2012, 17:18
Это понятно, только в редакторе придется "на глаз" эти районы закрашивать либо делать программку специальную, где будет бобовская карта. Хорошо бы из боба прямо изображение карты считывать, как и карту высот. А разная форма триггеров нужна, очень упрощает дело. Нужно учесть пересечение линии фронта по линии - нарисовал вытянутый прямоугольник и готово. Картинки для более сложных задач пригодятся.

Гм. Открываешь карту, ставишь машинки в левый верхний и нижний правый угол планируемой карты, делаешь скриншот. Запоминаешь координаты машинки - вот тебе точки отсчета. Картинку в фотошоп, сверху слой, прозрачность ему 50%, карандаш в руки и рисуешь вплоть до деревца. Слой сохраняешь в бмп - готово. Размеры картинки знаем, размеры поля которое она описывает знаем тоже, экстраполировать координаты не проблема. Все. ) До миллиметра же не надо считать.

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

podvoxx
06.07.2012, 09:25
Ну я хз. Зачем этим дергать разрабов, если самостоятельно это делается на раз и два. Попадание точки в прямоугольник уж как-то можно посчитать. Вообще, имхо триггеры в основном для безскриптовых миссий, что бы какой-то функционал сделать не заморачиваясь на скрипт.

Тогда у меня просьба к разработчикам. Все эти точки, заданные вручную, это хорошо конечно, но чтобы миссию по ним построить придется в координаты точки ставить машинку какую-нибудь, чтобы ориентироваться. Опять пожалуй вспомню Арму(т.к. скриптовый функционал и удобство в ней прекрасные). Там в редакторе есть вспомогательные объекты - маркеры. Имеют характеристики - имя и цвет(может еще что, не помню). Для БОБа еще нужны будут азимут и радиус. Маркер - это иконка на карте(в Арме их несколько видов для разнообразия), чем-то напоминает маркер линии фронта в БОБе. Ставишь ее на карту, затем в миссии можешь получить координаты любого маркера по имени и, допустим, загрузить в эти координаты машинку или поставить вэйпоинт. Цвет и разные иконки нужны чтобы не запутаться при создание большого количества точек респауна/маршрутов.

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

С маркерами, как бы хотелось. Ставим маркер, пишем название(если надо цвет/форму). Если нужно поменять координаты - просто двигаем маркер и все. В скрипте вместо координат точки - ссылка на маркер с определенным именем, от перемещения не зависящая. В той же Арме я как-то сделал автобусный маршрут, в миссии ничего кроме маркеров остановок не было. В зависимости от названия задавалось время остановки, спаунился водитель с автобусом и т.п.

Например сейчас я сделал два маршрута колонн( в БОБЕ), загружающихся из скрипта(файла миссии нет, так как состав колонны рандомный), я только по памяти знаю где они проходят или если посмотрю миссию, из которой взял эти маршруты. Можно еще сохранить сгенерированную миссию в файл, но в любом случае в этой подмиссии не будет ничего, кроме колонны. Куда приезжает и откуда не совсем понятно будет. С маркерами я смогу выставить все маршруты в хостмиссии с помощью маркеров, точки бомбометания, спауна и т.д. А также при желании легко смогу их поменять, просто переместив маркер.

Азимут маркера нужен, чтобы задать направление статику допустим, который спауниться в его координатах.
Радиус - просто как информационный, допустим для поставленных радаров задает радиус их действий или задает зону, в которой обсчитывается что-то. В редакторе отображается окружность цвета маркера(наподобие триггеров)

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

Вот иллюстрация:

http://www.youtube.com/watch?v=pOBMIenB92Q

FG28_Kodiak
07.07.2012, 15:09
Ok, me again ;)

There is a 'problem' in the new posibilities. OnBombExplosion and OnStationaryKilled works like charm ;) but OnBuildingKilled doesn't work in Multiplayer, i get no event if a building is killed, so the question is, should it work in Multiplayer also (then its a bug) or should it not work on Multiplayer because of different Player settings in graphic options (Buildings autogen)?

podvoxx
09.07.2012, 08:34
1.
а на последеней точке маршрута вызывается OnActorTaskCompleted, таймер не надо.

А точно работает? Попробовал - ноль реакции. Проверял так:



public override void OnActorTaskCompleted(int missionNumber, string shortName, maddox.game.world.AiActor actor)
{
base.OnActorTaskCompleted(missionNumber, shortName, actor);

if (actor != null)
{
if (actor is AiGroundActor)
{
AiGroundActor groundActor = actor as AiGroundActor;
if (groundActor != null)
{
SendMessage.ToAll("*** Actor Task Completed: mission - [{0}], shortName - [{1}], actor - [{2}]", "Chat", missionNumber, shortName, actor);
}
}
}
}


2. Прозрачные воронки.
Вроде были нормальные раньше, вчера проверил - боты проезжают сквозь них. При вкюченной коллизии можно было бы использовать для блокировки аэродромов, сейчас просто для красоты получается. В связи с этим на желтом тоже кто-то спрашивал - нельзя остановить поезд разбомбив ж/д пути. Возможно включение коллизии?

podvoxx
21.07.2012, 09:38
http://www.redrodgers.com/forums/showpost.php?p=130896&postcount=17


окопы часто раветвлённые, с различными вариантами площадок и стрелковых ячеек, а сплайном описывается однотипный протяжённый объект. Подумаем, но это точно не в ближайшее время.

Отвечу здесь. Да, это так, но это нужно для тонкой настройки. А вот например сделать линию фронта(просто обозначить ее) длиной 50 км можно просто нарисовав сплайн. Он будет похож на ж/д насыпь, только еще проще ,т.к. не взаимодействует с объектами. Такую линию можно даже к линии фронта , которая по маркерам строится привязать. Ресурсов не должно много отнимать, не больше чем дороги во всяком случае.

Есть еще вопрос. Почему при дестрое артиллерии не удаляется дым/огонь от нее? Касается только пушек. Танки-артиллерия при дестрое удаляются вместе с дымом, можно сделать для пушек также? Просто при респауне статиков они появляются в костре, что не очень хорошо и снижает производительность

podvoxx
21.07.2012, 15:48
del, не там написал

podvoxx
24.07.2012, 16:03
Планируется убрать прозрачность тросов у аэростатов? Они такие красивые, но пока бесполезные по сути. С ними можно было бы интересные миссии сделать.
Еще проблема была с их уничтожением(в воздухе вроде оставались, точно не помню)

podvoxx
25.07.2012, 09:34
В логах сервера лобби нашел такие сообщения.

Эти две во время загрузки:


[21:12:48] Illegal actor : Static111
[21:12:48] Illegal actor : Static112
[21:12:54] Illegal actor : Static111




[21:14:46] Mission: actor '0:Static53' alredy exist
[21:14:46] Mission: actor '0:Static53' alredy exist
[21:14:46] Mission: actor '0:Static55' alredy exist


Эта во время миссии:


[22:14:23] [104813] ERROR [VEHICLE] 2_Chief1 : Die by collision with crater
[22:14:23] [104814] ERROR [VEHICLE] 2_Chief1 : Die by collision with crater
[22:14:24] [104820] ERROR [VEHICLE] 2_Chief0 : Die by collision with crater
[22:14:24] [104821] ERROR [VEHICLE] 2_Chief0 : Die by collision with crater


Что они значат и влияют ли на работу миссии?

И вот еще нашел "нестандартные", непонятно что означают


[22:22:02] =================================================
[22:22:02] System.Exception: Network: Put Guaranted message referenced to NOT mirrored object [IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F+KdItI8ewdVNCYSgS9Q2] -> [6gLghFjHnoUCgCjB0d3.fOa2TfjODQVWwQGd3ID+IB4YtBjpHx7lEiDZ53W] (11).
[22:22:02] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.If38CyfgTEiHsk8vP09.mC0n0IoXOYt(fWfkQoj7v0fLXlH9uju , s0lGabfWOekZpaGtsib , Boolean )
[22:22:02] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.SRyJRnftXFcieoltpLgk(Object , Object , Object , Boolean )
[22:22:02] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.aVo8rvHG1E9(fWfkQoj7v0fLXlH9uju , Boolean )
[22:22:02] at 4X0NlQXKPq8qMTrUn6j.SjMbxUXqvSZkt9AXoI0.a4MP2JdcBM(s0lGabfWOekZpaGtsib , fWfkQoj7v0fLXlH9uju )
[22:22:02] at IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F.EsvlaelhYRDlTKqqColZ(Object , Object , Object )
[22:22:02] at IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F.replicateStep(UCepagHXWORmmIKbAe , s0lGabfWOekZpaGtsib )
[22:22:02] at cHHxGcj0JZP0QCGqk5x.PWMQA9jBHPNuxxlSMgR.dDsAhhqr2b(s0lGabfWOekZpaGtsib , Boolean )
[22:22:02] =================================================

=================================================
=================================================

[22:26:50] =================================================
[22:26:50] System.Exception: Network: Put Guaranted message referenced to NOT mirrored object [IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F+KdItI8ewdVNCYSgS9Q2] -> [6gLghFjHnoUCgCjB0d3.fOa2TfjODQVWwQGd3ID+IB4YtBjpHx7lEiDZ53W] (11).
[22:26:50] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.If38CyfgTEiHsk8vP09.mC0n0IoXOYt(fWfkQoj7v0fLXlH9uju , s0lGabfWOekZpaGtsib , Boolean )
[22:26:50] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.SRyJRnftXFcieoltpLgk(Object , Object , Object , Boolean )
[22:26:50] at 9LK5gJfVqLvwMUfV5fk.s0lGabfWOekZpaGtsib.aVo8rvHG1E9(fWfkQoj7v0fLXlH9uju , Boolean )
[22:26:50] at 4X0NlQXKPq8qMTrUn6j.SjMbxUXqvSZkt9AXoI0.a4MP2JdcBM(s0lGabfWOekZpaGtsib , fWfkQoj7v0fLXlH9uju )
[22:26:50] at IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F.EsvlaelhYRDlTKqqColZ(Object , Object , Object )
[22:26:50] at IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F.replicateStep(UCepagHXWORmmIKbAe , s0lGabfWOekZpaGtsib )
[22:26:50] at IXOhIdeZek66edNpEZd.0h0NW9esCa6b8FI3l2F.I60PmNefBg5ZE8i7IK6.CZEWcbXA996(SjMbxUXqvSZkt9AXoI0 , s0lGabfWOekZpaGtsib )
[22:26:50] at rhcodxxFVykwP1cxsDF.T1yIosx6ZZhT4opb5Ke.8OVa8HVKfhSwcvbQoSY7(Object , Object , Object )
[22:26:50] at rhcodxxFVykwP1cxsDF.T1yIosx6ZZhT4opb5Ke.phlI9CG99Yl()
[22:26:50] at rhcodxxFVykwP1cxsDF.T1yIosx6ZZhT4opb5Ke.kqwI9FviI8e(WQkcBE1XQRSF37NIKR )
[22:26:50] at rhcodxxFVykwP1cxsDF.T1yIosx6ZZhT4opb5Ke.HT8I0T84UiP(yRs598OmrMJGVJ3dfSL )
[22:26:50] at yTuvQnrxSAThhk5a5wH.oLmrOGrQ36klaG7iMXy.hZg52tlmg2BaQ5HL9pX8(Object , Object )
[22:26:50] at yTuvQnrxSAThhk5a5wH.oLmrOGrQ36klaG7iMXy.PlaceEnter(AiActor , Int32 )
[22:26:50] at maddox.game.GameDef.placeEnterRequest(IPlayer player, AiActor actor, Int32 indxPlace)
[22:26:50] at maddox.game.GameDef.<>c__DisplayClass1.<createGroupRequest>b__0()
[22:26:50] at 6taYFJkCm21dGbWnicw.ZYsYp9klQMcPOf8U5l0.rLXfCXLM9y(mn31OFkP0CLvTT9eKWx )
[22:26:50] =================================================


И по корабликам. Будет ли когда-нибудь возможность прокладыать их маршрут в портах и по рекам? Можно было бы создавать миссии с переправами, форсированием рек, минированием выходов из портов.

naryv
25.07.2012, 10:46
Отвечу здесь. Да, это так, но это нужно для тонкой настройки. А вот например сделать линию фронта(просто обозначить ее) длиной 50 км можно просто нарисовав сплайн. Он будет похож на ж/д насыпь, только еще проще ,т.к. не взаимодействует с объектами. Такую линию можно даже к линии фронта , которая по маркерам строится привязать. Ресурсов не должно много отнимать, не больше чем дороги во всяком случае. идея понятна, но будет-ли реализована не могу сказать - не знаю


Есть еще вопрос. Почему при дестрое артиллерии не удаляется дым/огонь от нее? Касается только пушек. Танки-артиллерия при дестрое удаляются вместе с дымом, можно сделать для пушек также? Просто при респауне статиков они появляются в костре, что не очень хорошо и снижает производительность Исправил, теперь при дестрое костёр убирается.


Планируется убрать прозрачность тросов у аэростатов? Они такие красивые, но пока бесполезные по сути. С ними можно было бы интересные миссии сделать. обещать не могу но попсмотрим.

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


В логах сервера лобби нашел такие сообщения.

Эти две во время загрузки:


[21:12:48] Illegal actor : Static111
[21:12:48] Illegal actor : Static112
[21:12:54] Illegal actor : Static111





[21:14:46] Mission: actor '0:Static53' alredy exist
[21:14:46] Mission: actor '0:Static53' alredy exist
[21:14:46] Mission: actor '0:Static55' alredy exist

первое - некорректное имя при создани актора, надо смотреть что именно загружалось и как, второе - чиф с таким именем уже есть, опять таки надо смотреть как грузилось


Эта во время миссии:


[22:14:23] [104813] ERROR [VEHICLE] 2_Chief1 : Die by collision with crater
[22:14:23] [104814] ERROR [VEHICLE] 2_Chief1 : Die by collision with crater
[22:14:24] [104820] ERROR [VEHICLE] 2_Chief0 : Die by collision with crater
[22:14:24] [104821] ERROR [VEHICLE] 2_Chief0 : Die by collision with crater
это вагончик умер,


Что они значат и влияют ли на работу миссии? при первых спаун актора прекращается - т.е. он не спаунится, больше никакого влияния на работу миссии нет, последний просто информационное сообщение надо убрать, ни на что не влияет.


И по корабликам. Будет ли когда-нибудь возможность прокладыать их маршрут в портах и по рекам? Можно было бы создавать миссии с переправами, форсированием рек, минированием выходов из портов. в реках сейчас нельзя, в портах если они на море можно, можно ли будет в реках - пока не знаю, не могу сказать.

podvoxx
25.07.2012, 10:59
Исправил, теперь при дестрое костёр убирается.
Спасибо, теперь линия окопов не будет так дымить)) А дым от самолетов убирается при дестрое? Это одна из главных проблем в районах, где часто бьются. Даже название есть еще с ЗС - пальцы смерти. У меня стоит скрипт, который убирает разбившиеся самолеты с карты. Но дым от них все равно остается.

public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
Timeout(15, () =>
{ destroyPlane(aircraft); }
);
}



первое - некорректное имя при создани актора, надо смотреть что именно загружалось и как, второе - чиф с таким именем уже есть, опять таки надо смотреть как грузилось


Пока даже статиков таких не нашел в миссии) Может это от старой загрузки осталось.

И по поводу аэростатной лебедки хотел спросить. Вчера не смог ее заставить работать, макс. значение высоты постоянно сбрасывается на значение по умолчанию. И надо к ней генератор подключать или она автономна?

naryv
25.07.2012, 11:26
Спасибо, теперь линия окопов не будет так дымить)) А дым от самолетов убирается при дестрое? Это одна из главных проблем в районах, где часто бьются. Даже название есть еще с ЗС - пальцы смерти. У меня стоит скрипт, который убирает разбившиеся самолеты с карты. Но дым от них все равно остается.

public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
Timeout(15, () =>
{ destroyPlane(aircraft); }
);
}
У самолётов другой принцип, я для статиков сделал, с самолётами надо смотреть.


Пока даже статиков таких не нашел в миссии) Может это от старой загрузки осталось.
возможно, либо что-то автоматически генериться с заданным повторяющимся именем.



И по поводу аэростатной лебедки хотел спросить. Вчера не смог ее заставить работать, макс. значение высоты постоянно сбрасывается на значение по умолчанию. И надо к ней генератор подключать или она автономна? генератор не надо - лебёдки автономные. Сейчас проверил всё работает - если стоит галочка фиксированной высоты - тогда аэростат всегда на одной высоте, если галки нет - аэростат спаунится на высоте старта, потом поднимается до высоты финиша (hstart и hend) и там остаётся, сбрасываться высота может при установке новой лебёдки. Миссия :


[PARTS]
core.100
bob.100
[MAIN]
MAP Land$Online_Cross_v_Roundel
BattleArea 0 0 32768 32768 10000
TIME 12
WeatherIndex 0
CloudsHeight 1000
BreezeActivity 10
ThermalActivity 10
[GlobalWind_0]
Power 3.000 0.000 0.000
BottomBound 0.00
TopBound 1500.00
GustPower 5
GustAngle 45
[splines]
[CustomChiefs]
[Stationary]
Static0 Aeroanchored.Balloon_winch_UK1 gb 12410.27 17541.88 0.00 /hstart 100/hend 1000
[Buildings]
[BuildingsLinks]

podvoxx
25.07.2012, 11:30
генератор не надо - лебёдки автономные. Сейчас проверил всё работает - если стоит галочка фиксированной высоты - тогда аэростат всегда на одной высоте, если галки нет - аэростат спаунится на высоте старта, потом поднимается до высоты финиша (hstart и hend) и там остаётся, сбрасываться высота может при установке новой лебёдки.

Странно, полчаса вчера мучил - не получилось. Сбрасывалось когда выбирал другой объект ЕМНИП. Сегодня еще попробую.
А высота там максимум 2000? Ставил больше сбрасывает на это значение. Потом уже на 0.

1. Еще вопрос по подмиссиям. Есть ограничение на их количество? Скажется ли на работе сервера большое кол-во подмиссий при условии, что все акторы в них удаляются при загрузке такой же подмиссии. К примеру у меня загружается колонна и едет из точки А в точку Б, в точке Б она дестроится. Далее все повторяется. За несколько часов работы сервера таких подмиссий может много накопиться, но по идее игра должна сама подчищать за собой память. Номер missionNumber ограничен чем-нибудь?

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

Как развитие этой идеи на будущее: добавить простые значки-маркеры в инструменты карты, которыми игрок может помечать на карте нужные объекты(т.е. просто иконка в выбранном месте). Можно сделать возможность добавить надпись, задать кто видит маркер(свои, только игрок, все).

Еще одно развитие, которое может маленькую революцию сделать. На первый взгляд не очень сложно. Добавить возможность игрокам добавлять маршрут на карту, который можно получить в скрипте. Тогда вообще можно танками управлять так, что между домов заставить проехать. Это позволило бы сделать целые дуэли между "командующими" войсками(с некоторыми ограничениями конечно). Если бы для наземки этот маршрут правильно прокладывался по авто/жд дорогам было бы вообще прекрасно. Маршрут должен быть в формате таком же, какой и в файле миссии

podvoxx
25.07.2012, 17:00
Вопрос немного в сторону. Есть специальные программы для создания блоксхем? Меню все растет, уже с трудом там разбираюсь. Нарисовал от руки схемку на А3, уже опять перерисовывать надо, если кто знает посоветуйте удобную какую-нибудь :)

Scavenger
25.07.2012, 17:04
майкрософт вижуо (http://ru.wikipedia.org/wiki/Microsoft_Visio)

если там принципы или что еще - есть https://live.gnome.org/Dia

но два года назад... эта диа вызывала только диарею. порт под винду. есть еще несколько аналогов гнушных, но что у них с портами - фиг знает.

podvoxx
25.07.2012, 17:08
майкрософт вижуо (http://ru.wikipedia.org/wiki/Microsoft_Visio)

Ох что у них есть, не знал. Спасибо :thx:

naryv
25.07.2012, 20:56
Странно, полчаса вчера мучил - не получилось. Сбрасывалось когда выбирал другой объект ЕМНИП. Сегодня еще попробую.
А высота там максимум 2000? Ставил больше сбрасывает на это значение. Потом уже на 0. я точно не помню макс высоту но похоже на то, выше они не поднимались - трос слишком тяжёлым был. А сбрасываться в 0 всё-же не должно


1. Еще вопрос по подмиссиям. Есть ограничение на их количество? Скажется ли на работе сервера большое кол-во подмиссий при условии, что все акторы в них удаляются при загрузке такой же подмиссии. К примеру у меня загружается колонна и едет из точки А в точку Б, в точке Б она дестроится. Далее все повторяется. За несколько часов работы сервера таких подмиссий может много накопиться, но по идее игра должна сама подчищать за собой память. Номер missionNumber ограничен чем-нибудь? missionNumber - int соответственно много :). В принципе, если объекты дестроятся - память чистится, но насколько я знаю, на максимальное количество подмиссий не проверяли, зависит от сложности подмиссий и количества объектов в них.


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


Как развитие этой идеи на будущее: добавить простые значки-маркеры в инструменты карты, которыми игрок может помечать на карте нужные объекты(т.е. просто иконка в выбранном месте). Можно сделать возможность добавить надпись, задать кто видит маркер(свои, только игрок, все). точка с разными иконками и сейчас ставится, самая левая кнопка в инструментах, в выпадающем списке в котором по умолчанию "контрольная точка" можно выбрать разный иконки. Передачи их по сети и фильтра нет.


Еще одно развитие, которое может маленькую революцию сделать. На первый взгляд не очень сложно. Добавить возможность игрокам добавлять маршрут на карту, который можно получить в скрипте. Тогда вообще можно танками управлять так, что между домов заставить проехать. Это позволило бы сделать целые дуэли между "командующими" войсками(с некоторыми ограничениями конечно). Если бы для наземки этот маршрут правильно прокладывался по авто/жд дорогам было бы вообще прекрасно. Маршрут должен быть в формате таком же, какой и в файле миссии
Ну если будет событие то маршрут по точкам создать в скрипте не проблема.

podvoxx
26.07.2012, 08:59
точка с разными иконками и сейчас ставится, самая левая кнопка в инструментах, в выпадающем списке в котором по умолчанию "контрольная точка" можно выбрать разный иконки. Передачи их по сети и фильтра нет.

Хорошо. А возможно сделать, чтобы положение карты и размеры запоминались раз и навсегда? Очень неудобно постоянно настраивать ее. Или хотя бы границы окна карты сделать "толще", сложно мышкой попасть в бордюр(это касается вообще всех окон в игре)

Есть такой вопрос. Вчера на тестах миссии обнаружили еще один баг из трека на лобби сервере. Аэростаты для всех, кроме хостера "прижаты" к земле, позже должны выложить скриншоты. Т.е. на моем компьютере-хостере все прекрасно, красиво висят в воздухе - у других уныло стоят на земле. Аналогично багу с нарушением ориентации окопов и зданий. Оба этих бага присутствуют также в треках. Какая между треками и сетевой игрой связь и возможно ли исправление этих багов?

Еще хотел добавить по инф. окнам. Это может стать очень полезной фичей. В Арме есть возможность создавать собственные меню-окна на экране, включая картинки, крутилки и т.п. Возможно ли добавить в игру окна, создаваемые из скрипта? Допустим по определенной клавише вызывается список скриптовых окон, которые можно вызвать на экран и настроить как ныне существующие. Хм, на самом деле и для нынешних окон такой список необходим с галочкой "вкл/выкл все" и кнопкой "сохранить настройки окон в пресете". Что это даст. Простое добавление контроля над меню радиокоманд очень расширило возможности по созданию миссий, но уже сейчас структура его получается сложной из-за ограничений самого меню и просто не все в нем удобно делать(допустим задавать числовые значения или координаты).
Я так понимаю интерфейс инф. окон это WPF или что-то подобное? Т.е. картинки, таблицы, списки, кнопки можно будет использовать. Прежде всего это конечно нужно для проектов. И в основном нужны будут окна наподобие карты(кликабельные), чтобы был доступ к каким-то параметрам. Такие возможности покроют большинство потребностей при создании проектов и просто интересных миссий и сделают геймплей непревзойденным. Чтобы получше объяснить напишу для чего это может пригодится.
Т.е. имеем кнопку в настройках управления, которая вызывает список окон по умолчанию и созданных в скрипте(если они были созданы). Список имеет галочки напротив названия каждого окна наподобие e-mail клиента - выделить все, выборочно. Включенная галочка - включить отображение окна. Рядом кнопка "Сохранить пресет" (например для теста скриптов нужно большое окно чата, для полета какие-то изменения - предложение об этом уже было написано в соотв. теме). Элементарно, чтобы сделать "чистый" скриншот нужно закрывать все инф. окна, а потом их все заново создавать и настраивать(и заставляет чувствовать себя мазохистом) - в результате мы имеем большинство картинок с иконками управления. Настройки пресетов могут хранится в отдельном файле. В скрипте пишем что-то вроде AddWindow и где-то описываем окно. Логика наверное в самом скрипте должна быть. Еще желательно дать возможность серверу отключать любые инф. окна(например статистику, где указано кто на чем летает - еще с ила эта проблема читерской разведки существует). Для чего могут использоваться пользовательские окна:

* Можно создавать любые текстовые окна(наподобие HUD-сообщений) в любом месте экрана с настраиваемыми параметрами шрифта - титры, отображение каких-то параметров, например счет очков в миссии, сообщения миссии без "мусорных" сообщений сервера о том кто кого сбил,скорость/время/место для гоночных серверов и еще много чего интересного

* Альтернативные приборы и девайсы - наручный компас, планшет с картой, аутентичная радиостанция(подключается плагином к TeamSpeak, позволяет настраивать частоту, действует только на заданном расстоянии), различные конвертеры величин( мили/километры), таблицы для бомберов, "черные ящики" для тестов, радары для ночников, штурманские инструменты

* Управляющие элементы - управление войсками, экономикой, игроками, статистика миссии и т.п.

* Окна с различной информацией: списки доступных аэродромов, типов самолетов на них и их кол-ва

Вот (http://forum.1cpublishing.eu/showpost.php?p=448279&postcount=1797) кстати по тексту на экране. HUDом люди недовольны(он как минимум прицел может перекрыть), а окно чата очень быстро пролистывается.

Если это сделать, БоБ значительно превзойдет в плане интересных миссий всех конкурентов, ну а в ММО это тем более пригодится(те же инструменты можно продавать).

podvoxx
26.07.2012, 14:41
Еще проблема связанная с дестроем радаров:
http://forum.1cpublishing.eu/showpost.php?p=448301&postcount=9



Well thank you for the code. It works to a point. But the destroyed parts of the radar do not remove from the map. So the new radar just appears on top of the old.

May have to wait till patch and hope the destroyed parts remove after time maybe.

naryv
26.07.2012, 18:56
Хорошо. А возможно сделать, чтобы положение карты и размеры запоминались раз и навсегда? Очень неудобно постоянно настраивать ее.
Положение запоминается и сейчас - расположив карту надо как минимум один раз её закрыть, положение сохранится при выходе из игры. Размер поправили, после патча будет и он запоминаться.


Есть такой вопрос. Вчера на тестах миссии обнаружили еще один баг из трека на лобби сервере. Аэростаты для всех, кроме хостера "прижаты" к земле, позже должны выложить скриншоты. Т.е. на моем компьютере-хостере все прекрасно, красиво висят в воздухе - у других уныло стоят на земле. Аналогично багу с нарушением ориентации окопов и зданий. Оба этих бага присутствуют также в треках. Какая между треками и сетевой игрой связь и возможно ли исправление этих багов? Трек нужен, желательно с хоста и с клиента, есть подозрение, что не вся информация об объектах передаётся - возможно из-за ограничения трафика или ещё из-за чего-то, окопы вчера ставил, в треки писал - ориентация и в треке и в игре совпадала, в сеть ориентация передаётся, так что пока предположение только что не всё принимается, или не всегда. С аэростатами не успел пока протестить, но если трек есть то тоже хорошо-бы посмотреть.


Еще хотел добавить по инф. окнам. Это может стать очень полезной фичей. В Арме есть возможность создавать собственные меню-окна на экране, включая картинки, крутилки и т.п. Возможно ли добавить в игру окна, создаваемые из скрипта? Допустим по определенной клавише вызывается список скриптовых окон, которые можно вызвать на экран и настроить как ныне существующие. Хм, на самом деле и для нынешних окон такой список необходим с галочкой "вкл/выкл все" и кнопкой "сохранить настройки окон в пресете". Что это даст. Простое добавление контроля над меню радиокоманд очень расширило возможности по созданию миссий, но уже сейчас структура его получается сложной из-за ограничений самого меню и просто не все в нем удобно делать(допустим задавать числовые значения или координаты).
Я так понимаю интерфейс инф. окон это WPF или что-то подобное?
нет, на WPF интерфейс не игровой сделан, тот что между полётами, его можно и сейчас делать , емнип Small_Bee и Geniok делали. А тот что внутриигровой не на WPF. Идея понятна, но думаю до след. проекта никто делать это не будет.

--- Добавлено ---


Еще проблема связанная с дестроем радаров:
http://forum.1cpublishing.eu/showpost.php?p=448301&postcount=9
Ну вот как искать причины такой проблемы ? В каком-то коде(каком?), который судя по цитате прекрасно работает, не убираются обломки радара(какого, где и что значит не убираются?). Ну мы же не телепаты, чтобы понять такую проблему :( . Есть бага - кусочек миссии с ней хотя-бы, чтобы можно было запустить и увидеть где она, выяснить причину и исправить, а так гадать только...

Small_Bee
26.07.2012, 19:26
нет, на WPF интерфейс не игровой сделан, тот что между полётами, его можно и сейчас делать , емнип Small_Bee и Geniok делали. А тот что внутриигровой не на WPF. Идея понятна, но думаю до след. проекта никто делать это не будет.

Только для оффлайн. И только благодаря тому, что перед глазами пример был - статическая кампания + ты пример выкладывал. Вот только как это сделать для онлайна - одни сплошные догадки, что требуют много времени на эксперименты с неясным результатом. Все ждем хотя-бы малюсенького примерчика )))

naryv
26.07.2012, 21:19
Только для оффлайн. И только благодаря тому, что перед глазами пример был - статическая кампания + ты пример выкладывал. Вот только как это сделать для онлайна - одни сплошные догадки, что требуют много времени на эксперименты с неясным результатом. Все ждем хотя-бы малюсенького примерчика )))
Это надо от главного программиста пример ждать, когда у него время освободится, я тут, увы, ничего сделать не могу:(

podvoxx
27.07.2012, 01:20
Трек нужен, желательно с хоста и с клиента, есть подозрение, что не вся информация об объектах передаётся - возможно из-за ограничения трафика или ещё из-за чего-то, окопы вчера ставил, в треки писал - ориентация и в треке и в игре совпадала, в сеть ориентация передаётся, так что пока предположение только что не всё принимается, или не всегда. С аэростатами не успел пока протестить, но если трек есть то тоже хорошо-бы посмотреть.
В аттаче трек со стороны хостера, записанный сегодня. То же самое, что было в релизе. Окопы стоят коряво, аэростаты на земле. Такую же картину видят подключившиеся игроки. На выделенном не проверял, но раньше если я заходил на созданный мной выделенный сервер окопы стояли нормально.


Ну вот как искать причины такой проблемы ? В каком-то коде(каком?), который судя по цитате прекрасно работает, не убираются обломки радара(какого, где и что значит не убираются?). Ну мы же не телепаты, чтобы понять такую проблему :( . Есть бага - кусочек миссии с ней хотя-бы, чтобы можно было запустить и увидеть где она, выяснить причину и исправить, а так гадать только...
Разобрались вроде, он пытался дестроить радары, вшитые в карту

naryv
27.07.2012, 13:17
В аттаче трек со стороны хостера, записанный сегодня. То же самое, что было в релизе. Окопы стоят коряво, аэростаты на земле. Такую же картину видят подключившиеся игроки. На выделенном не проверял, но раньше если я заходил на созданный мной выделенный сервер окопы стояли нормально. Спасибо. А можно кусок миссии именно с окопами(т.е. без скриптов и тп) и лебёдками, только строчки типа

[Stationary]
Static0 Aeroanchored.Balloon_winch_UK1 gb 15135.93 18591.98 0.00 /hstart 500
[Buildings]
0_bld buildings.House$Trench00-25 1 14949.16 18888.03 0.00
1_bld buildings.House$Trench00-25 1 14946.85 18873.87 0.00
2_bld buildings.House$Trench00-25 1 14941.68 18835.53 0.00
3_bld buildings.House$Trench00-25 1 14940.23 18789.30 0.00
4_bld buildings.House$Trench00-25 1 14932.61 18723.59 0.00
потому-что в треке косяки вижу, но повторить со своей миссией не получается.


UPD с окопами примера не надо, нашли, исправили. С аэростатми тоже, кажется, знаю причину - если Вы ставили статический баллон, он будет лежать на земле в треке и онлайне, работающий вариант - выбирать из раздела лебёдки и ставить их.

andersbravers
27.07.2012, 22:16
С аэростатми тоже, кажется, знаю причину - если Вы ставили статический баллон, он будет лежать на земле в треке и онлайне, работающий вариант - выбирать из раздела лебёдки и ставить их.
Нет, нет, Илья, подтверждаю еще в "Морском Льве" на "Репка1" был замечен косяк с лебедками в онлайне: при создании миссии была задана высота (допустим 500 м), при тестировании в оффлайне все было прекрасно видно - аэростаты висели на высоте 500 м, а при загрузке на "Репку1" онлайн-игроки видели аэростаты только на земле, вон Шкраб не даст соврать. Ну давно это было в ноябре 2011г. Это было в то же время, когда пропадали бетонные ВПП - в оффе сделаешь все нормально, а в онлайне не прорисовывались. Все-таки онлайн накладывает свою специфику.

ATAG_Wolf
30.07.2012, 03:20
Just an FYI on the Balloons in the Multiplayer online. I have them in Channel Command and all of them stay in the air. none crash or cause errors. You have to go into FMB and make the START and END herigh the same value

START = 500
END = 500

START = 80
END = 80
This will keep the balloons in the air.

In the .mis it will look like this. But the END and START values MUST be the same in FMB.

Static111 Aeroanchored.Balloon_winch_UK1 gb 235160.05 232041.58 -30.00 /hstart 500
Static112 Aeroanchored.Balloon_winch_UK1 gb 234619.30 232051.11 -30.00 /hstart 80

podvoxx
30.07.2012, 11:52
С аэростатми тоже, кажется, знаю причину - если Вы ставили статический баллон, он будет лежать на земле в треке и онлайне, работающий вариант - выбирать из раздела лебёдки и ставить их.

Ясно. А зачем тогда стационарные нужны, если они только в оффе работают и в трек нормально не запишутся? И если я допустим расстрелял аэростат, то что в онлайне увидят другие игроки(у которых он на земле)?
Уничтожение аэростатов проверил, вроде нормально все - сгорают и опускаются на землю

podvoxx
31.07.2012, 10:01
Вспомнил одну проблему с наземкой. Если попытаться организовать встречное движение, то пробка обеспечена(я не дождался когда они перестанут тыкать друг в друга). При создании колонн снабжения и перемещения войск по дорогам это очень критично. Возможна доработка AI машинок на дороге в этом плане? Хотя бы чтобы они всегда ехали по одной стороне дороги или принимали в сторону, если навстречу кто-то едет.
Ну и то как они разбегаются при штурмовке выглядит не очень. Они одновременно поворачивают на один угол и останавливаются ровным рядом(что очень упрощает прицеливание), возможно сделать какой-то рандом(достаточно будет по расстоянию на которое они съезжают от дороги, может быть угол в небольших пределах, чтобы особо не сталкивались)?

andersbravers
31.07.2012, 16:51
START = 500
END = 500

Пардон, я ставил СТАРТ = 0, думая, что аэростат должен подниматься с нулевой высоты)).
Sorry, I set START = 0, thinking that the balloon has to rise from zero height)).

podvoxx
03.08.2012, 10:05
1. Вот такую ошибку встретил:

[22:45:49] [150328] ERROR [AIR] Group don't set maneuver
Что она означает?

2. Если OnActorTaskCompleted для авиагрупп срабатывает сразу(почему, кстати?) для самолетов, как без особых сложностей определить, что группа достигла последнего вэйпоинта. Нужно дестротить ботов, которые прошли маршрут, чтобы была возможность вызвать эту же подмиссию еще раз.

naryv
03.08.2012, 11:04
Нет, нет, Илья, подтверждаю еще в "Морском Льве" на "Репка1" был замечен косяк с лебедками в онлайне: при создании миссии была задана высота (допустим 500 м), при тестировании в оффлайне все было прекрасно видно - аэростаты висели на высоте 500 м, а при загрузке на "Репку1" онлайн-игроки видели аэростаты только на земле, вон Шкраб не даст соврать. Ну давно это было в ноябре 2011г. Это было в то же время, когда пропадали бетонные ВПП - в оффе сделаешь все нормально, а в онлайне не прорисовывались. Все-таки онлайн накладывает свою специфику. С лебёдками такого не должно быть, скорее всего тоже стационар ставили.


Ясно. А зачем тогда стационарные нужны, если они только в оффе работают и в трек нормально не запишутся? И если я допустим расстрелял аэростат, то что в онлайне увидят другие игроки(у которых он на земле)?
Уничтожение аэростатов проверил, вроде нормально все - сгорают и опускаются на землю стационарные нужны т.к. они являются частью комплекса лебёдка-аэростат и модель баллона подгружается в эту систему.


Вспомнил одну проблему с наземкой. Если попытаться организовать встречное движение, то пробка обеспечена(я не дождался когда они перестанут тыкать друг в друга). При создании колонн снабжения и перемещения войск по дорогам это очень критично. Возможна доработка AI машинок на дороге в этом плане? Хотя бы чтобы они всегда ехали по одной стороне дороги или принимали в сторону, если навстречу кто-то едет.
Ну и то как они разбегаются при штурмовке выглядит не очень. Они одновременно поворачивают на один угол и останавливаются ровным рядом(что очень упрощает прицеливание), возможно сделать какой-то рандом(достаточно будет по расстоянию на которое они съезжают от дороги, может быть угол в небольших пределах, чтобы особо не сталкивались)? движение по полосам вернули, должно быть в патче.


1. Вот такую ошибку встретил:

[22:45:49] [150328] ERROR [AIR] Group don't set maneuver
Что она означает? По каким-то причинам(бот подбит, убит и тп) группа не может установить следующий манёвр.


2. Если OnActorTaskCompleted для авиагрупп срабатывает сразу(почему, кстати?) для самолетов, как без особых сложностей определить, что группа достигла последнего вэйпоинта. Нужно дестротить ботов, которые прошли маршрут, чтобы была возможность вызвать эту же подмиссию еще раз. у ботов OnActorTaskCompleted срабатывает в последней точке маршрута, если на место бота садится игрок - тогда срабатывает сразу, т.к. игрок не будет следовать маршруту точно.

podvoxx
03.08.2012, 11:22
С лебёдками такого не должно быть, скорее всего тоже стационар ставили.
Проверил лебедки, работают. Подключившиеся игроки также видят их на высоте.


движение по полосам вернули, должно быть в патче.
О боги, спасибо! :thx: Даешь GTA и автогонки ))


По каким-то причинам(бот подбит, убит и тп) группа не может установить следующий манёвр.
А как узнать по каким? Просто танчики не завершают задачу и не дестроятся скапливаясь в кучку на последнем вэйпоинте. Пока не понял в какой момент это происходит, но первый час респаунов вроде нормально. Возможно домики мешают. Буду наблюдать


у ботов OnActorTaskCompleted срабатывает в последней точке маршрута, если на место бота садится игрок - тогда срабатывает сразу, т.к. игрок не будет следовать маршруту точно.
Спасибо, значит с этим все нормально будет

podvoxx
03.08.2012, 15:10
Забыл еще вопрос. На днях наблюдал как колонна объезжала воронку от бомбы. Сколько держится воронка в миссии?

И еще после дестроя убитой машинки остается такое темное пятнышко на земле(вроде потом пропадает). Оно должно быть?

Вестник
03.08.2012, 15:26
Останки машины укатили, масляное пятно выжженое - осталось :)

naryv
03.08.2012, 18:34
Проверил лебедки, работают. Подключившиеся игроки также видят их на высоте. угу, тросы починил, о них теперь убиться можно, попасть в них только сложновато :)

А как узнать по каким? Просто танчики не завершают задачу и не дестроятся скапливаясь в кучку на последнем вэйпоинте. Пока не понял в какой момент это происходит, но первый час респаунов вроде нормально. Возможно домики мешают. Буду наблюдать это сообщение только от самолётов приходит. Почему танчики не вызывают тасккомплит - надо смотреть миссию, так сложно сказать. Да, с патчем OnStationaryKilled(GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt) будет заменена на OnStationaryKilled(int missionNumber, GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt), номер миссии статика убитого добавился, не забудьте у себя проверить-поменять.


Забыл еще вопрос. На днях наблюдал как колонна объезжала воронку от бомбы. Сколько держится воронка в миссии? час.


И еще после дестроя убитой машинки остается такое темное пятнышко на земле(вроде потом пропадает). Оно должно быть? да:

Останки машины укатили, масляное пятно выжженое - осталось :) :)

podvoxx
03.08.2012, 19:35
угу, тросы починил, о них теперь убиться можно, попасть в них только сложновато :)
Отлично. Спасибо за это и за все остальное) :thx: :thx: :thx:

podvoxx
06.08.2012, 09:56
Есть несколько вопросов

1. GamePlay.gpNextMissionNumber()
К примеру подмиссия загружается из событий OnActorDead() и OnTickGame(), метод GamePlay.gpNextMissionNumber() слушает оба события и может подхватить номер подмиссии из любого события? Код примерно такой:


public override void OnTickGame()
{
base.OnTickGame();

// Запуск колонны снабжения по заданному маршруту
if (way.Timer.ElapsedMilliseconds / 1000 >= way.Time)
{
int x1 = GamePlay.gpNextMissionNumber();
GamePlay.gpPostMissionLoad(xxx);
}
}

public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
base.OnActorDead(missionNumber, shortName, actor, damages);
string staticLine = "";

if (actor != null)
{
if (actor is AiGroundActor)
{
AiGroundActor groundActor = actor as AiGroundActor;
if (groundActor != null)
{
int x2 = GamePlay.gpNextMissionNumber()
GamePlay.gpPostMissionLoad(xxx);

}
}
}
}
GamePlay.gpNextMissionNumber() может подхватить при определенном стечении обстоятельств из "чужого" события? Т.е. задача получить номер подмиссии убитой машинки, но в это время загружается подмиссия по таймеру и берется ее номер x2.
И второй вопрос: GamePlay.gpNextMissionNumber() должен быть до или после GamePlay.gpPostMissionLoad()? А то у меня некоторая путаница возникла.

2. Просьба сократить время горения топливных цистерн до максимум 5-10 минут. Никакой особой игровой ценности они не представляют, а производительность снижают очень сильно(я так и не дождался когда потухнут, больше часа вроде горело). Лучше через скрипт при желании загружать дымы и пожары из объектов редактора. Сейчас пилоты стараются не бросать в цистерны бомбы, чтобы не осложнять себе жизнь падением фпс.
157542

3. Дымы от разбитых самолетов. Через сколько они исчезают? Нужно либо убирать их по команде Destroy() либо сократить время горения до 5-10 минут, так как ценность таких дымов никакая, а фпс снижает. В онлайне особенно критично в местах боев и рядом с аэродромами
157543

4. Крылья двухмоторников. Кажется они не исчезают и не дестроятся. Лежат на земле очень долго(всю миссию вроде часа 2-3). На скринах запчасти 110-ки и бофайтера:
157544157541

5. Что-то не то с немецкими ПТ. Есть нормальная ДМ, когда они уничтожаются и дестроятся(модель почти как целая только стволом вниз), а есть "взрывная". Т.е. пушка разлетается на запчасти и еще встает стволом в землю(может это одно и тоже). При этом боты продолжают атаковать такую пушку, но безрезультатно(на скрине бофайтер этим занимается). Destroy к ней тоже не применяется. Это баг такой?
157545

naryv
06.08.2012, 10:24
Есть несколько вопросов

1. GamePlay.gpNextMissionNumber()
К примеру подмиссия загружается из событий OnActorDead() и OnTickGame(), метод GamePlay.gpNextMissionNumber() слушает оба события и может подхватить номер подмиссии из любого события? Код примерно такой:


public override void OnTickGame()
{
base.OnTickGame();

// Запуск колонны снабжения по заданному маршруту
if (way.Timer.ElapsedMilliseconds / 1000 >= way.Time)
{
int x1 = GamePlay.gpNextMissionNumber();
GamePlay.gpPostMissionLoad(xxx);
}
}

public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
base.OnActorDead(missionNumber, shortName, actor, damages);
string staticLine = "";

if (actor != null)
{
if (actor is AiGroundActor)
{
AiGroundActor groundActor = actor as AiGroundActor;
if (groundActor != null)
{
int x2 = GamePlay.gpNextMissionNumber()
GamePlay.gpPostMissionLoad(xxx);

}
}
}
}
GamePlay.gpNextMissionNumber() может подхватить при определенном стечении обстоятельств из "чужого" события? Т.е. задача получить номер подмиссии убитой машинки, но в это время загружается подмиссия по таймеру и берется ее номер x2.
И второй вопрос: GamePlay.gpNextMissionNumber() должен быть до или после GamePlay.gpPostMissionLoad()? А то у меня некоторая путаница возникла. gpNextMissionNumber() ничего не слушает - он только выдаёт номер следующей миссии, ну или показывает кол-во уже загруженных миссий+1. Соответственно вызвав её до gpPostMissionLoad() - получим номер миссии которая в этом gpPostMissionLoad() загрузится, а вызвав после - номер миссии, которая загрузится следующей.


2. Просьба сократить время горения топливных цистерн до максимум 5-10 минут. Никакой особой игровой ценности они не представляют, а производительность снижают очень сильно(я так и не дождался когда потухнут, больше часа вроде горело). Лучше через скрипт при желании загружать дымы и пожары из объектов редактора. Сейчас пилоты стараются не бросать в цистерны бомбы, чтобы не осложнять себе жизнь падением фпс.
157542 боюсь не получится, они горят пока в них топливо не выгорит, при этом они наносят повреждения окружающему миру, в отличии от дымов и пожаров.


3. Дымы от разбитых самолетов. Через сколько они исчезают? Нужно либо убирать их по команде Destroy() либо сократить время горения до 5-10 минут, так как ценность таких дымов никакая, а фпс снижает. В онлайне особенно критично в местах боев и рядом с аэродромами
157543 дымы от самолётов исчезают через час, в среду, напомните плз, подумаем что с ними сделать. Крылья вроде бы не влияют особо ни на что

podvoxx
06.08.2012, 10:31
gpNextMissionNumber() ничего не слушает - он только выдаёт номер следующей миссии, ну или показывает кол-во уже загруженных миссий+1. Соответственно вызвав её до gpPostMissionLoad() - получим номер миссии которая в этом gpPostMissionLoad() загрузится, а вызвав после - номер миссии, которая загрузится следующей.

Не могу код из миссии привести, там лишнего много слишком, но суть такая. Я все номера подмиссий получал ставив gpNextMissionNumber() перед загрузкой подмиссии, однако в одном из методов(подгружается подмиссия с пушками) - почему-то gpNextMissionNumber() берет (номер нужной подмиссии + 1). Если поставить после, то нормально. Похоже на то, что перед загрузкой пушек загружается еще одна подмиссия в другом методе и запоминается ее номер, такое может быть?

И еще вопрос по ДМ машинок. Некоторые(или все) броневички при уничтожении сразу лопаются не оставляя после себя убитой модельки - буквально испаряются перед этим подпрыгивая. Destroy должен применяться через 60 сек, но дестроить уже нечего. Даже непонятно сразу уничтожили или нет, так как остается пустое место.

naryv
06.08.2012, 10:39
Не могу код из миссии привести, там лишнего много слишком, но суть такая. Я все номера подмиссий получал ставив gpNextMissionNumber() перед загрузкой подмиссии, однако в одном из методов(подгружается подмиссия с пушками) - почему-то gpNextMissionNumber() берет (номер нужной подмиссии + 1). Если поставить после, то нормально. Похоже на то, что перед загрузкой пушек загружается еще одна подмиссия в другом методе и запоминается ее номер, такое может быть?да, так и работает - есть счётчик миссий, при загрузке миссии(любой и от куда угодно), он увеличивается на единичку, этот счётчик глобальный на всю битву, т.е. загрузка из другой миссии тоже увеличит этот счётчик. Примерно так :



int nn = gpNextMissionNumber(); // если из основной миссии загрузили то будет nn =1
gpPostMissionLoad(); //загрузили миссию
nn = gpNextMissionNumber(); // nn =2
gpPostMissionLoad(); //загрузили миссию
nn = gpNextMissionNumber(); // nn =3
//------------параллельно в одной из миссий загрузили ещё одну
nn = gpNextMissionNumber(); // nn =4
gpPostMissionLoad(); //загрузили миссию
nn = gpNextMissionNumber(); // nn =5




И еще вопрос по ДМ машинок. Некоторые(или все) броневички при уничтожении сразу лопаются не оставляя после себя убитой модельки - буквально испаряются перед этим подпрыгивая. Destroy должен применяться через 60 сек, но дестроить уже нечего. Даже непонятно сразу уничтожили или нет, так как остается пустое место. да, есть такой момент, если взрыв сильный сразу дестроится машинка. Пока думаем что с этим делать.

podvoxx
07.08.2012, 09:00
5. Что-то не то с немецкими ПТ. Есть нормальная ДМ, когда они уничтожаются и дестроятся(модель почти как целая только стволом вниз), а есть "взрывная". Т.е. пушка разлетается на запчасти и еще встает стволом в землю(может это одно и тоже). При этом боты продолжают атаковать такую пушку, но безрезультатно(на скрине бофайтер этим занимается). Destroy к ней тоже не применяется. Это баг такой?
157545

Хотел бы уточнить по этому вопросу все-таки. В логе есть ошибки при загрузке подмиссий с пушками:


[22:38:20] Mission: actor '48:Static9' alredy exist
[22:38:20] Mission: actor '48:Static8' alredy exist
[22:38:20] Mission: actor '48:Static3' alredy exist
[22:38:20] Mission: actor '48:Static6' alredy exist

Миссия:

[Stationary]
Static12 Artillery.37mm_PaK_35_36 de 312313.00 97396.00 195.00 /timeout 0/radius_hide 0
Static10 Artillery.Flak30 de 312253.00 97492.00 195.00 /timeout 0/radius_hide 0
Static13 Artillery.Pz_IIC de 312194.00 97586.00 195.00 /timeout 0/radius_hide 0
Static1 Artillery.37mm_PaK_35_36 de 312089.00 97781.00 225.00 /timeout 0/radius_hide 0
Static0 Artillery.Pz_IVD de 312034.16 97879.27 225.00 /timeout 0/radius_hide 0
Static9 Artillery.37mm_PaK_35_36 de 312155.00 98560.00 195.00 /timeout 0/radius_hide 0
Static8 Artillery.Flak30 de 312153.00 98838.00 165.00 /timeout 0/radius_hide 0
Static6 Artillery.37mm_PaK_35_36 de 312145.00 99039.00 165.00 /timeout 0/radius_hide 0
Static14 Artillery.Pz_IVD de 312148.00 99100.00 180.00 /timeout 0/radius_hide 0
Static11 Artillery.37mm_PaK_35_36 de 312150.00 99137.00 165.00 /timeout 0/radius_hide 0
Static3 Artillery.Flak30 de 312151.00 99175.00 180.00 /timeout 0/radius_hide 0
Static37 Artillery.37mm_PaK_35_36 de 312151.00 99225.00 180.00 /timeout 0/radius_hide 0
Static39 Artillery.Pz_IVD de 312147.00 99326.00 180.00 /timeout 0/radius_hide 0
Static38 Artillery.37mm_PaK_35_36 de 312152.00 99365.00 180.00 /timeout 0/radius_hide 0
Static5 Artillery.40mm_2pdr_AT_Gun_Mk_II de 312149.00 99401.00 180.00 /timeout 0/radius_hide 0
Static36 Artillery.40mm_2pdr_AT_Gun_Mk_II de 312146.00 99441.00 180.00 /timeout 0/radius_hide 0
Static7 Artillery.4_cm_Flak_28 de 312149.00 98915.00 165.00 /timeout 0/radius_hide 0
Static2 Artillery.4_cm_Flak_28 de 312144.00 97676.00 210.00 /timeout 0/radius_hide 0

Может ли такая ошибка возникать из-за того, что Destroy не применялся к пушке, которая была убита на том же месте? Так как предварительно(еще протестирую) не должен скрипт два статика создавать(только если OnActorDead срабатывает для него два раза). Может ли то, что на картинке выдавать два срабатывания OnActorDead() ?

Второй вопрос. На некоторых вэйпоинтах машинки скапливаются, так как не срабатывает OnActorTaskCompleted(после которого они дестроятся). Только на некоторых и только на последней точке маршрута, домов-деревьев рядом нет, относительно ровный ландшафт. В редакторе ничего такого по линии маршрута не видно. Маршрут - просто от точки до точки, два вэйпоинта. Видимо радиус зачета вэйпоинта маленький и одна машинка может закрыть пусть остальным или я не знаю :)

podvoxx
10.08.2012, 09:06
Вот такие ошибки в логе попались


[22:53:56] [56129] ERROR [SOUND] Sample $bob/speech/de/Actor1/Wingmen_make_sure_you_stay_with_your_leaders.ogg not found
[22:53:56] [56129] ERROR [SOUND] Sample $bob/speech/de/Actor1/That_way_we_can_maximize_our_volume_of_fire.ogg not found

naryv
10.08.2012, 15:02
Хотел бы уточнить по этому вопросу все-таки. В логе есть ошибки при загрузке подмиссий с пушками:


[22:38:20] Mission: actor '48:Static9' alredy exist
[22:38:20] Mission: actor '48:Static8' alredy exist
[22:38:20] Mission: actor '48:Static3' alredy exist
[22:38:20] Mission: actor '48:Static6' alredy exist

Миссия:

[Stationary]
Static12 Artillery.37mm_PaK_35_36 de 312313.00 97396.00 195.00 /timeout 0/radius_hide 0
Static10 Artillery.Flak30 de 312253.00 97492.00 195.00 /timeout 0/radius_hide 0
Static13 Artillery.Pz_IIC de 312194.00 97586.00 195.00 /timeout 0/radius_hide 0
Static1 Artillery.37mm_PaK_35_36 de 312089.00 97781.00 225.00 /timeout 0/radius_hide 0
Static0 Artillery.Pz_IVD de 312034.16 97879.27 225.00 /timeout 0/radius_hide 0
Static9 Artillery.37mm_PaK_35_36 de 312155.00 98560.00 195.00 /timeout 0/radius_hide 0
Static8 Artillery.Flak30 de 312153.00 98838.00 165.00 /timeout 0/radius_hide 0
Static6 Artillery.37mm_PaK_35_36 de 312145.00 99039.00 165.00 /timeout 0/radius_hide 0
Static14 Artillery.Pz_IVD de 312148.00 99100.00 180.00 /timeout 0/radius_hide 0
Static11 Artillery.37mm_PaK_35_36 de 312150.00 99137.00 165.00 /timeout 0/radius_hide 0
Static3 Artillery.Flak30 de 312151.00 99175.00 180.00 /timeout 0/radius_hide 0
Static37 Artillery.37mm_PaK_35_36 de 312151.00 99225.00 180.00 /timeout 0/radius_hide 0
Static39 Artillery.Pz_IVD de 312147.00 99326.00 180.00 /timeout 0/radius_hide 0
Static38 Artillery.37mm_PaK_35_36 de 312152.00 99365.00 180.00 /timeout 0/radius_hide 0
Static5 Artillery.40mm_2pdr_AT_Gun_Mk_II de 312149.00 99401.00 180.00 /timeout 0/radius_hide 0
Static36 Artillery.40mm_2pdr_AT_Gun_Mk_II de 312146.00 99441.00 180.00 /timeout 0/radius_hide 0
Static7 Artillery.4_cm_Flak_28 de 312149.00 98915.00 165.00 /timeout 0/radius_hide 0
Static2 Artillery.4_cm_Flak_28 de 312144.00 97676.00 210.00 /timeout 0/radius_hide 0

Может ли такая ошибка возникать из-за того, что Destroy не применялся к пушке, которая была убита на том же месте? Так как предварительно(еще протестирую) не должен скрипт два статика создавать(только если OnActorDead срабатывает для него два раза). Может ли то, что на картинке выдавать два срабатывания OnActorDead() ? Ошибка такая получается, когда в одной миссии происходит попытка загрузить акторов с одинаковым именем, при этом первый, уже существующий актор - остаётся, второй - не создаётся. Файл миссии создаётся каким образом? Не может там задвоиться один и тот же актор? Если пушка была на том же месте но загружена в другой миссии - у них будут разные полные имена, ошибки не будет. OnActorDead() срабатывает один раз, дальше этот актор уже убитый и снова убить его нельзя. Пушки разваливаются от взрыва, после разваливания сам актор-пушка дестроится, т.е. OnActorDead() она вызывает, а потом дестроится.


Второй вопрос. На некоторых вэйпоинтах машинки скапливаются, так как не срабатывает OnActorTaskCompleted(после которого они дестроятся). Только на некоторых и только на последней точке маршрута, домов-деревьев рядом нет, относительно ровный ландшафт. В редакторе ничего такого по линии маршрута не видно. Маршрут - просто от точки до точки, два вэйпоинта. Видимо радиус зачета вэйпоинта маленький и одна машинка может закрыть пусть остальным или я не знаю :) Опять надо миссию смотреть, скорее всего что-то может стоять, не пуская машинку к последней точке.


Вот такие ошибки в логе попались


[22:53:56] [56129] ERROR [SOUND] Sample $bob/speech/de/Actor1/Wingmen_make_sure_you_stay_with_your_leaders.ogg not found
[22:53:56] [56129] ERROR [SOUND] Sample $bob/speech/de/Actor1/That_way_we_can_maximize_our_volume_of_fire.ogg not found угу, спасибо , исправим.

podvoxx
10.08.2012, 15:09
Ошибка такая получается, когда в одной миссии происходит попытка загрузить акторов с одинаковым именем, при этом первый, уже существующий актор - остаётся, второй - не создаётся. Файл миссии создаётся каким образом? Не может там задвоиться один и тот же актор? Если пушка была на том же месте но загружена в другой миссии - у них будут разные полные имена, ошибки не будет. OnActorDead() срабатывает один раз, дальше этот актор уже убитый и снова убить его нельзя. Пушки разваливаются от взрыва, после разваливания сам актор-пушка дестроится, т.е. OnActorDead() она вызывает, а потом дестроится.
Это наверное моя ошибка. Сейчас нормально стало, но почему не совсем понимаю. В список добавлялась строчка(которая представляет собой line из секции статиков) при условии равенства shortName убитого актора. Ошибка была потому, что строчка добавлялась несколько раз и скрипт пытался несколько раз создать один и тот же объект. Добавил проверку на присутствие такого статика в списке, пропало. Как-нибудь потом посмотрю внимательней.


Опять надо миссию смотреть, скорее всего что-то может стоять, не пуская машинку к последней точке.

Неподалеку домики были на расстоянии нескольких корпусов. Сейчас переместил последние вэйпоинты, но пока не проверял.

naryv
10.08.2012, 15:24
Это наверное моя ошибка. Сейчас нормально стало, но почему не совсем понимаю. В список добавлялась строчка(которая представляет собой line из секции статиков) при условии равенства shortName убитого актора. Ошибка была потому, что строчка добавлялась несколько раз и скрипт пытался несколько раз создать один и тот же объект. Добавил проверку на присутствие такого статика в списке, пропало. Как-нибудь потом посмотрю внимательней.
ну да, если в одной миссии попытаться загрузить одноимённых акторов тогда вылезет такая ошибка.

Неподалеку домики были на расстоянии нескольких корпусов. Сейчас переместил последние вэйпоинты, но пока не проверял. Домики неподалёку могут помешать первой машинке доехать, а дальше по нарастающей к ней будут пристраиваться всё новые, лучше маршрут всё-же проверять на "проходимость".

podvoxx
12.08.2012, 01:20
Домики неподалёку могут помешать первой машинке доехать, а дальше по нарастающей к ней будут пристраиваться всё новые, лучше маршрут всё-же проверять на "проходимость".

Вот тут точно домиков нет, но все равно скучились:
157868

podvoxx
13.08.2012, 11:06
hc_wolf спрашивает, я тоже такую ошибку иногда встречаю.


Can you ask the question as to why this happens?

CollideEnvXY.collideLine: NONAME drw:0 col:1 #65794 very big step moved actor - IGNORED !!!

Below is an extract taken from my online log confs.txt



[23:51:55] Server: German Aircraft: FW-200C-1 destroyed - Team scores now: RAF 162- LW 60
[23:51:55] Server: AI in a FW 200 () was destroyed by Bofors, Bofors - Stand-Alone, Bofors.
[23:52:38] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54041 very big step moved actor - IGNORED !!!
[23:52:38] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54040 very big step moved actor - IGNORED !!!
[23:53:47] Server: BLITZKRIEG!!! Incoming FW200's. ETA 15 mins at English Point @16,500ft
[23:53:47] Loading mission ...
[23:53:47] Server: OnMissionLoaded: 24
[23:53:47] Mission loaded. time = 0.219
[23:54:14] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54041 very big step moved actor - IGNORED !!!
[23:54:14] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54040 very big step moved actor - IGNORED !!!
[23:54:44] Server: Pilot of a Bf 109 E-3 () (AI) was killed.
[23:54:44] Server: Bf 109 E-3 () (AI) collided with terrain.
[23:55:10] CollideEnvXY.collideLine: NONAME drw:0 col:1 #65794 very big step moved actor - IGNORED !!!
[23:55:10] CollideEnvXY.collideLine: NONAME drw:0 col:1 #65811 very big step moved actor - IGNORED !!!
[23:56:47] CollideEnvXY.collideLine: NONAME drw:0 col:1 #65794 very big step moved actor - IGNORED !!!
[23:57:25] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54041 very big step moved actor - IGNORED !!!
[23:57:25] CollideEnvXY.collideLine: NONAME drw:0 col:1 #54040 very big step moved actor - IGNORED !!!
[23:58:16] Server: Pilot of a FW 200 () (AI) was killed.
[23:58:16] Server: Co-Pilot of a FW 200 () (AI) was killed by AI in a FW 200 (), Bofors - Stand-Alone.

И еще вопрос по поводу лагания движущейся наземки. Проявляется не всегда, но часто. Т.е. заходишь в атаку - она мгновенно перескакивает на метров двадцать вперед. Так и движется телепортацией. Пинг 35. С чем это может быть связано, если не с пингом? Замечено всеми игроками, кто штурмовал наземку на Репке 1

podvoxx
13.08.2012, 13:50
Напомните как в консоль сервера сообщения отправлять, на желтом спрашивают

Small_Bee
13.08.2012, 14:02
Напомните как в консоль сервера сообщения отправлять, на желтом спрашивают



public void SendServerCommand(string command)
{
GameServerDef gameServerDef = base.GamePlay as GameServerDef;
if (gameServerDef != null)
{
gameServerDef.consoleInput(command);
}
}

naryv
13.08.2012, 16:54
Вот тут точно домиков нет, но все равно скучились:
157868 Миссию надо! Ну как можно по картинке определить причину не срабатывания ивента? Может быть Вы удаляете первого актора из колонны, при этом остальные не дают проехать новой колонне, может ещё какая-то причина, но чтобы её понять - надо эту миссию запустить и посмотреть, а по фото диагноз ставить невозможно...


hc_wolf спрашивает, я тоже такую ошибку иногда встречаю.


Can you ask the question as to why this happens?

CollideEnvXY.collideLine: NONAME drw:0 col:1 #65794 very big step moved actor - IGNORED !!!
по какой-то причине объект получил очень большую скорость и исключён из обсчёта столкновений, может быть бомба или её осколок получивший слишком большую скорость от взрыва. Не критическая ошибка, и на игру не влияет.


И еще вопрос по поводу лагания движущейся наземки. Проявляется не всегда, но часто. Т.е. заходишь в атаку - она мгновенно перескакивает на метров двадцать вперед. Так и движется телепортацией. Пинг 35. С чем это может быть связано, если не с пингом? Замечено всеми игроками, кто штурмовал наземку на Репке 1 Это связано с уменьшением трафика генерируемого наземкой, координаты и скорость передаются дискретно, как телепортацию уменьшить - думаем.

podvoxx
13.08.2012, 17:05
Это связано с уменьшением трафика генерируемого наземкой, координаты и скорость передаются дискретно, как телепортацию уменьшить - думаем.

Это важный вопрос, не должно такого быть. Иначе смысла использовать движущуюся наземку нет, что и проект нормальный делает невозможным.

Small_Bee
14.08.2012, 16:49
public void SendServerCommand(string command)
{
GameServerDef gameServerDef = base.GamePlay as GameServerDef;
if (gameServerDef != null)
{
gameServerDef.consoleInput(command);
}
}

Процитирую сам себя, и отсюда вопрос - интересно, что команды вроде chat и battle stopped в такой конструкции проходят, но команда kick [player_name] - нет. Это принудительно так сделали или баг какой-то?

podvoxx
14.08.2012, 16:54
Процитирую сам себя, и отсюда вопрос - интересно, что команды вроде chat и battle stopped в такой конструкции проходят, но команда kick [player_name] - нет. Это принудительно так сделали или баг какой-то?

На желтом просят уточнить, кстати



The function throws a definition error. Which class/component do I neeed to define at the start of the script? ie. something like "using Maddox.game.IO" ????

Small_Bee
14.08.2012, 16:58
На желтом просят уточнить, кстати

Да, не включено какое-то пространство имен. Вечером посмотрю какое именно (так не помню) и напишу.

Small_Bee
14.08.2012, 20:09
using maddox.game;

naryv
15.08.2012, 14:29
Процитирую сам себя, и отсюда вопрос - интересно, что команды вроде chat и battle stopped в такой конструкции проходят, но команда kick [player_name] - нет. Это принудительно так сделали или баг какой-то? Принудительно(для скриптов только 5 команд доступно "?","help","battle","missLoad", "record"), но, видимо, баг, надо бы включить, какие ещё нужны из существующих?

podvoxx
15.08.2012, 15:03
Есть вопрос по маркерам линии фронта. В принципе возможно организовать захват выбранного города на карте в "пограничной" зоне не линейно (поочереди), а с выбором направления. Но тогда линия фронта может иметь несколько вариантов и заранее их предусмотреть нельзя. Если ставить маркер на город, то фронт может получиться "кривым"(у меня и вручную с трудом получается добиться точного расположения) и не отражающим реального положения на карте. К тому же планируется захват не самих городов, а целого района вокруг этого города. И такой район может оказаться в окружении. Может посоветует кто-нибудь, как быть. Или может вообще отказаться от линии фронта? Сделать карту-раскраску "провинций" и для хардкора предлагать пилотам самим прорисовывать линию фронта :)

Small_Bee
15.08.2012, 15:17
Есть вопрос по маркерам линии фронта. В принципе возможно организовать захват выбранного города на карте в "пограничной" зоне не линейно (поочереди), а с выбором направления. Но тогда линия фронта может иметь несколько вариантов и заранее их предусмотреть нельзя. Если ставить маркер на город, то фронт может получиться "кривым"(у меня и вручную с трудом получается добиться точного расположения) и не отражающим реального положения на карте. К тому же планируется захват не самих городов, а целого района вокруг этого города. И такой район может оказаться в окружении. Может посоветует кто-нибудь, как быть. Или может вообще отказаться от линии фронта? Сделать карту-раскраску "провинций" и для хардкора предлагать пилотам самим прорисовывать линию фронта :)

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

Далее программная часть.
Есть сущность "карта", которая содержит коллекцию сущностей "район", каждый из "районов" в свою очередь содержит коллекцию сущностей "маркер". У каждого маркера есть ссылка на противоположный маркер соседнего района.

Кроме этого, "карта" содержит метод Update, который при вызове будет формировать новый набор маркеров и загружать его в качестве подмиссии, а также метод, перекрашивающий маркера указанного района в указанный цвет.

Теперь подробнее о методе Update
Пробегаем по всей коллекции районов и по их коллекциям маркеров и добавляем в результирующий список только те маркера, цвет которого отличается от цвета соседнего маркера - что бы не рисовать ненужные границы между районами одинакового цвета.

Код достаточно простой - но маркера расставлять надо будет долго и нудно, От этого уже никуда не убежишь.

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

podvoxx
15.08.2012, 15:21
Навскидку - рисуешь эти же самые районы сугубо маркерами. В итоге у тебя должен получиться набор районов, и каждый район имеет коллекцию маркеров, описывающую границы этого района.

Далее программная часть.
Есть сущность "карта", которая содержит коллекцию сущностей "район", каждый из "районов" в свою очередь содержит коллекцию сущностей "маркер". У каждого маркера есть ссылка на противоположный маркер соседнего района.

Кроме этого, "карта" содержит метод Update, который при вызове будет формировать новый набор маркеров и загружать его в качестве подмиссии, а также метод, перекрашивающий маркера указанного района в указанный цвет.

Теперь подробнее о методе Update
Пробегаем по всей коллекции районов и по их коллекциям маркеров и добавляем в результирующий список только те маркера, цвет которого отличается от цвета соседнего маркера - что бы не рисовать ненужные границы между районами одинакового цвета.

Код достаточно простой - но маркера расставлять надо будет долго и нудно, От этого уже никуда не убежишь.
Интересное решение, спасибо :)

podvoxx
16.08.2012, 11:26
ну да, если в одной миссии попытаться загрузить одноимённых акторов тогда вылезет такая ошибка.
Нашел ошибку. Недооценил по неопытности волшебное слово this и добавлял убитый статик не к экземляру класса обороны, а в дефолтный список самого класса, в результате при новом респауне и создании экземпляра в списке оказывались статики убитые в чужих подмиссиях. Тернистый путь по с# открывает новые горизонты, даже нелюбимый null начал использовать :)

Upd. Хотя на самом деле ошибка в другом)

ATAG_Wolf
17.08.2012, 07:49
Hello,

Found a couple of bugs. Maybe just in my mission, but could be everyone.


Any idea what these two errors in the online log might be?
if it is an object what object?
If it is coding in .cs file. under which headding maybe?

Issue1:

[11:55:31] NOT PERSON NOT AIRCRAFT NOT CART ----------TYPE IS ----->Y6w91mo2DahILkRIwsZ.axHdsGofGKAsdSibjeE
[11:55:32]
[11:55:32] =================================================
[11:55:32] System.InvalidCastException: Unable to cast object of type '71FYJ7lOKsvy74Onuu2.u6FPqKlIHSNdbtX87TG' to type 'N2nF6P5MAY3BNPlgDs.TXpZGZsafeKHZ1RoMX'.
[11:55:32] at uUIDCoQbPIqfkuEeZpW.3aMBM3Q5dfoyuirgRA1.maddox.core.MsgCollisionListener.msgCollision(rnYEZTeeDMkTZgIDwq , String , String )
[11:55:32] at 3LgnNb98HHUOxnypdyW.Xwx0RV9CbhPwxUntbGy.1Yk6zsYmdfw(Object )
[11:55:32] at eqER1x60txt4AbwUKnw.s3bV556Ux20bbPSxAnE.80fkmS9XZJ(Object )
[11:55:32] =================================================
[11:55:32]
[11:55:32] =================================================
[11:55:32] System.InvalidCastException: Unable to cast object of type '71FYJ7lOKsvy74Onuu2.u6FPqKlIHSNdbtX87TG' to type 'N2nF6P5MAY3BNPlgDs.TXpZGZsafeKHZ1RoMX'.
[11:55:32] at uUIDCoQbPIqfkuEeZpW.3aMBM3Q5dfoyuirgRA1.maddox.core.MsgCollisionListener.msgCollision(rnYEZTeeDMkTZgIDwq , String , String )
[11:55:32] at 3LgnNb98HHUOxnypdyW.Xwx0RV9CbhPwxUntbGy.1Yk6zsYmdfw(Object )
[11:55:32] at eqER1x60txt4AbwUKnw.s3bV556Ux20bbPSxAnE.80fkmS9XZJ(Object )
[11:55:32] =================================================


Issue2:
Bug Found with a model maybe for online play.

I get Heir.Mesh error (Not found) when loading this object for online play.

When this is loaded in a Sub misssion I get a loop error. It was happening every now and then.
But now happes 100% of time so I took out the object and all is fine.

Maybe someone else pop this object in map and see if you get Mesh error.
[Stationary]
Static68 Stationary.BMW_R71_w_MG_34 de 272377.69 200100.64 340.00

naryv
17.08.2012, 11:46
Нашел ошибку. Недооценил по неопытности волшебное слово this и добавлял убитый статик не к экземляру класса обороны, а в дефолтный список самого класса, в результате при новом респауне и создании экземпляра в списке оказывались статики убитые в чужих подмиссиях. Тернистый путь по с# открывает новые горизонты, даже нелюбимый null начал использовать :)

Upd. Хотя на самом деле ошибка в другом) Там ошибка должна быть в формировании файла миссии, она возникает когда в одной миссии два актора с одинаковыми именами пытаются загрузиться.


Hello,

Found a couple of bugs. Maybe just in my mission, but could be everyone.


Any idea what these two errors in the online log might be?
if it is an object what object?
If it is coding in .cs file. under which headding maybe?

Issue1:
Hi! This exception runs when bomb collide with barrage balloon rope, its not critical,but should be fixed.



Issue2:
Bug Found with a model maybe for online play.

I get Heir.Mesh error (Not found) when loading this object for online play.

When this is loaded in a Sub misssion I get a loop error. It was happening every now and then.
But now happes 100% of time so I took out the object and all is fine.

Maybe someone else pop this object in map and see if you get Mesh error.
[Stationary]
Static68 Stationary.BMW_R71_w_MG_34 de 272377.69 200100.64 340.00 i try it both offline and online, and get no mesh error, just motorcycle loaded, can you give us log of this error?

podvoxx
17.08.2012, 11:53
Там ошибка должна быть в формировании файла миссии, она возникает когда в одной миссии два актора с одинаковыми именами пытаются загрузиться.
Проблема в коде где-то, пока выяснил только что каждый статик два раза в список заносится, поэтому проблема возникает. Сегодня разберусь думаю и попробую сделать тестовую миссию для скучивающихся танчиков

podvoxx
17.08.2012, 20:03
Проблема в коде где-то, пока выяснил только что каждый статик два раза в список заносится, поэтому проблема возникает. Сегодня разберусь думаю и попробую сделать тестовую миссию для скучивающихся танчиков

Ошибка оказалась очень простой, прям бревно в глазу, не понимаю как не заметил :)

А с определением времени в игре "по часам" добавилось что-нибудь с патчем?

naryv
17.08.2012, 21:53
Ошибка оказалась очень простой, прям бревно в глазу, не понимаю как не заметил :) ну так частенько и бывает:)


А с определением времени в игре "по часам" добавилось что-нибудь с патчем?должно было вроде, я сейчас не смог найти где мы это обсуждали, там вызов ф-ции получения времени я написал.

--- Добавлено ---


Ошибка оказалась очень простой, прям бревно в глазу, не понимаю как не заметил :) ну так частенько и бывает:)


А с определением времени в игре "по часам" добавилось что-нибудь с патчем?должно было вроде, я сейчас не смог найти где мы это обсуждали, там вызов ф-ции получения времени я написал.

podvoxx
17.08.2012, 21:58
должно было вроде, я сейчас не смог найти где мы это обсуждали, там вызов ф-ции получения времени я написал.

Именно в формате чч:мм равное времени на часах в кабине самолета?

naryv
17.08.2012, 22:27
Именно в формате чч:мм равное времени на часах в кабине самолета?Дробное число - целая часть - часы, дробная - доли часа, на часах в кабине - оно же.

podvoxx
17.08.2012, 22:28
Дробное число - целая часть - часы, дробная - доли часа, на часах в кабине - оно же.
Ясно, спасибо :)

podvoxx
18.08.2012, 08:19
Лог с АТАГа, есть ошибки связанные со звуком
http://forum.1cpublishing.eu/showpost.php?p=455045&postcount=36



------------ BEGIN log session -------------
Load landscape...
Load bridges
LongBridge: wrong width. (3)
Load static objects...
Battle starting...ok
[239521] ERROR [SOUND] Sample $bob/speech/de/Actor1/Wingmen_protect_your_leaders_.ogg not found
[239521] ERROR [SOUND] Sample $bob/speech/de/Actor1/That_way_we_can_maximize_our_volume_of_fire.ogg not found
[242510] ERROR [SOUND] Sample $bob/speech/de/Actor1/Stay_sharp_gentlemen_And_make_sure_to_stay_in_form ation.ogg not found
[242510] ERROR [SOUND] Sample $bob/speech/de/Actor1/Good_to_have_you_with_us_by_the_way.ogg not found
Chat: {dz}: i see them
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25468 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25387 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25468 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25387 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25388 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25388 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25405 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25405 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25388 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25405 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25388 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25405 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25388 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
[288693] ERROR [SOUND] Sample $bob/speech/de/Actor1/Thank_you_Control.ogg not found
[291116] ERROR [SOUND] Sample $bob/speech/de/Actor1/Stay_sharp_gentlemen_And_make_sure_to_stay_in_form ation.ogg not found
[291116] ERROR [SOUND] Sample $bob/speech/de/Actor1/Good_to_have_you_with_us_by_the_way.ogg not found
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: 92sqn~Pstyle: steuben, what happened?
Chat: I/JG53_Steuben: was hit by AAA earlier and water cooler was leaking
Chat: I/JG53_Steuben: engine boiled up
Chat: 92sqn~Pstyle: oh, ko. fair
Chat: 92sqn~Pstyle: nice evasive flying
Chat: I/JG53_Steuben: year distracted you long enough to allow the 110 attack his target XD
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: Server: Grab a mic and join us on our public Teamspeak 3 at
Chat: Server: 216.52.148.29:9987
Chat: Server: Please read the mission briefing for instructions!
Chat: Server: Salute and welcome to the ATAG server.
Chat: I/JG53_Steuben: hm respawned and missing my cockpit XD
Chat: I/JG53_Steuben: wtf
Chat: Server: www.TheAirTacticalAssaultGroup.com/forum
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: I./JG26_Little_D: Hi to all
Chat: ATAG_Tonka: Hi
Chat: 71st_AH_Toto: Hello Everyone
[366292] ERROR [SOUND] Sample $bob/speech/de/Actor1/Return_to_base_immediately_or_you_will_be_shot_dow n_.ogg not found
[366360] ERROR [SOUND] Sample $bob/speech/de/Actor1/Return_to_base_immediately_or_you_will_be_shot_dow n_.ogg not found
Chat: I./JG26_Little_D: Hi Toto
Chat: {dz}: hi
Chat: 71st_AH_Toto: Hello D
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
[368695] ERROR [SOUND] Sample $bob/speech/de/Actor1/Return_to_base_immediately_or_you_will_be_shot_dow n_.ogg not found
[369924] ERROR [SOUND] Sample $bob/speech/de/Actor1/Return_to_base_immediately_or_you_will_be_shot_dow n_.ogg not found
[371176] ERROR [SOUND] Sample $bob/speech/de/Actor1/That_s_the_way_to_do_it.ogg not found
[371692] ERROR [SOUND] Sample $bob/speech/de/Actor1/Return_to_base_immediately_or_you_will_be_shot_dow n_.ogg not found
[372772] ERROR [SOUND] Sample $bob/speech/de/Actor1/Thank_you_Control.ogg not found
[378344] ERROR [SOUND] Sample $bob/speech/de/Actor1/Stay_sharp_gentlemen_And_make_sure_to_stay_in_form ation.ogg not found
[378344] ERROR [SOUND] Sample $bob/speech/de/Actor1/Good_to_have_you_with_us_by_the_way.ogg not found
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: VF/A-Mjoelner: wow
Chat: VF/A-Mjoelner: rpm ?
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: I./JG26_Little_D: wow aaa is good now
Chat: I./JG26_Little_D: but still no sound when get hit
Chat: 92sqn~Pstyle: AA changes depending on team scores
Chat: 92sqn~Pstyle: as team score goes up, enemy flak gets heavier
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: Cassius Calhoun: Ha
Chat: Cassius Calhoun: Hi all Салют всем
Chat: Kodoss: how do you get supply points?
Chat: I./JG26_Little_D: cool and no clouds so no fps under 40
Chat: 92sqn~Pstyle: _gettiong home sfae keeps supply up
Chat: 92sqn~Pstyle: completing objetives adds to supply dscore
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: I/JG53_Steuben: lol we are loosing now because AI gets shot down in mass
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
Chat: I/JG53_Steuben: by AAA
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step moved actor - IGNORED !!!
CollideEnvXY.collideLine: NONAME drw:1 col:1 #25470 very big step m

podvoxx
20.08.2012, 14:07
Есть ли способ получить время движения актора по вэйпоинтам(как в редакторе показывается в скобках напротив каждого вэйпоинта)?

naryv
20.08.2012, 17:24
Лог с АТАГа, есть ошибки связанные со звуком
http://forum.1cpublishing.eu/showpost.php?p=455045&postcount=36
угу, спасибо, поправим.

Есть ли способ получить время движения актора по вэйпоинтам(как в редакторе показывается в скобках напротив каждого вэйпоинта)? нет, нельзя

naryv
21.08.2012, 11:25
угу, спасибо, поправим.
всё, наверное не получится поправить - там неправильный вызов голосовых сообщений у них идёт, есть возмоожность узнать, как они их формируют, в частности - "Wingmen_protect_your_leaders_", "Return_to_base_immediately_or_you_will_be_shot_dow n_", "Stay_sharp_gentlemen_And_make_sure_to_stay_in_form ation" ?

podvoxx
24.08.2012, 09:42
1. А все-таки получится добавить в игру вспомогательные маркеры? Например я сейчас стараюсь использовать файлы-шаблоны(так как прописывать координаты точек вручную оказалось совершенно неприемлемым способом) и к примеру для создания зон для бомбардировки использую триггеры, но есть существенные проблемы. Выглядит примерно так:



[Trigger]
Pua-de-Picardie TPassThrough 0 293595 84456 500
Frevent TPassThrough 0 315293 140027 750
Grandvilliers TPassThrough 0 290391 72211 600
Amiens TPassThrough 0 314257 99134 1000


Отсюда берется имя, координаты и радиус. Есть большой недостаток - пока не выберешь триггер его радиус не отображается и вообще непонятно где он. К тому же он не перемещается, т.к. центр окружности выбирается кликом по карте. Открыв такой файл - мы видим пустую карту и совершенно непонятно, что к чему. Есть вариант создания своего маленького редактора, где можно будет любые маркеры ставить, но пока это не лучший вариант.
Думал использовать другие объекты. BirthPlace можно задать имя, но нельзя задать радиус. Объект ИИ имеет радиус, который всегда отображается в редакторе(легко обнаружить и переместить), но нет возможности задать имя.
Нужен примитивный объект "Маркер", у которого в свойствах будет имя, координаты, радиус и который будет всегда отображаться в редакторе(без выделения). Если бы у него была возможность задать цвет - было бы просто прекрасно.



[Marker]
HelpMarker 293595 84456 500 blue
name x y radius color


Вот тут я подробно хотелку описывал - http://www.sukhoi.ru/forum/showthread.php?t=68629&p=1868518&viewfull=1#post1868518

naryv
24.08.2012, 11:06
Отсюда берется имя, координаты и радиус. Есть большой недостаток - пока не выберешь триггер его радиус не отображается и вообще непонятно где он. К тому же он не перемещается, т.к. центр окружности выбирается кликом по карте. Открыв такой файл - мы видим пустую карту и совершенно непонятно, что к чему. Есть вариант создания своего маленького редактора, где можно будет любые маркеры ставить, но пока это не лучший вариант.
Думал использовать другие объекты. BirthPlace можно задать имя, но нельзя задать радиус. Объект ИИ имеет радиус, который всегда отображается в редакторе(легко обнаружить и переместить), но нет возможности задать имя.
Нужен примитивный объект "Маркер", у которого в свойствах будет имя, координаты, радиус и который будет всегда отображаться в редакторе(без выделения). Если бы у него была возможность задать цвет - было бы просто прекрасно. Попробуйте объект "аэродром" ? Отображается всегда, цвет есть, координаты есть, два радиуса, можно перемещать.

podvoxx
24.08.2012, 11:08
Попробуйте объект "аэродром" ? Отображается всегда, цвет есть, координаты есть, два радиуса, можно перемещать.
Точно, нужно попробовать :)

podvoxx
26.08.2012, 10:13
Дошел до аэродромов и сразу появились вопросы.

Есть такой код:


foreach (AiAirport xxx in GamePlay.gpAirports())
{
SendMessage.ToServer("Name: {0} / Park all: {1} / Pos: {2} / StripCount: {3} / / Army: {4}", xxx.Name(), xxx.ParkCountAll(), xxx.Pos(), xxx.StripCount(), xxx.Army());
}

Выдает такой список:

[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (162575,4, 38819,22, 140) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (285042,3, 182696,3, 200) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (229199,3, 96278,02, 101) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (280257,2, 164215, 80) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (303216,7, 48623,19, 99) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (191769,9, 10254,25, 161) / StripCount: 0 / / Army: 0

Т.е. только координаты. Правильно ли я понимаю, что GamePlay.gpAirports() возвращает список всех аэродромов "зашитых" в карту? Почему они тогда безымянные и другие параметры по нулям. Мне как раз нужно имя каждого стандартного филда(чтобы потом на его место подгрузить из шаблона конкретно для этого аэродрома различные объекты и AiBirthPlace), можно его как-то получить?

Small_Bee
27.08.2012, 03:51
Дошел до аэродромов и сразу появились вопросы.

Есть такой код:


foreach (AiAirport xxx in GamePlay.gpAirports())
{
SendMessage.ToServer("Name: {0} / Park all: {1} / Pos: {2} / StripCount: {3} / / Army: {4}", xxx.Name(), xxx.ParkCountAll(), xxx.Pos(), xxx.StripCount(), xxx.Army());
}

Выдает такой список:

[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (162575,4, 38819,22, 140) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (285042,3, 182696,3, 200) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (229199,3, 96278,02, 101) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (280257,2, 164215, 80) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (303216,7, 48623,19, 99) / StripCount: 0 / / Army: 0
[10:03:02] Server to [podvoxx]: Name: NONAME / Park all: 0 / Pos: (191769,9, 10254,25, 161) / StripCount: 0 / / Army: 0

Т.е. только координаты. Правильно ли я понимаю, что GamePlay.gpAirports() возвращает список всех аэродромов "зашитых" в карту? Почему они тогда безымянные и другие параметры по нулям. Мне как раз нужно имя каждого стандартного филда(чтобы потом на его место подгрузить из шаблона конкретно для этого аэродрома различные объекты и AiBirthPlace), можно его как-то получить?

Счас нету, хотя в релизной версии точно были.
Вот, может поможет

podvoxx
27.08.2012, 09:17
Счас нету, хотя в релизной версии точно были.
Вот, может поможет

Спасибо, хотя получается что этим списком толком воспользоваться не выйдет.
Планировал задать список из имен "аэропортов", потом при наличии файла шаблона оттуда загружаются статики и создается респаун с опр. настройками. Придется задавать в шаблоне так же место самого респауна.

naryv
28.08.2012, 11:50
Дошел до аэродромов и сразу появились вопросы.


Т.е. только координаты. Правильно ли я понимаю, что GamePlay.gpAirports() возвращает список всех аэродромов "зашитых" в карту? всех, самопоставленных тоже.
Почему они тогда безымянные и другие параметры по нулям. Мне как раз нужно имя каждого стандартного филда(чтобы потом на его место подгрузить из шаблона конкретно для этого аэродрома различные объекты и AiBirthPlace), можно его как-то получить? Это баг, исправим.

podvoxx
31.08.2012, 14:58
Есть вопрос по одному нехорошему релизному багу, который нужно исправить к патчу для стима.

Ошибка возникает на запороленных серверах если неправильно ввести пароль или какое-то время вообще ничего не вводить. Выдает окошко с текстом "Server fail autentification" и на него нельзя попасть пока сервер не перезагрузится. В багах о ней сообщалось, ее сложно будет исправить?

Вот опять - http://www.sukhoi.ru/forum/showthread.php?t=76974

podvoxx
03.09.2012, 09:06
Есть вопрос по встречному движению машинок на дороге. Возможно ли их еще больше развести от центра дороги к обочинам? Т.к. колонны часто все-таки утыкаются друг в друга и начинается чехарда. Причем "зацепление" происходит из-за одной-двух машинок как правило, которые принимают чуть вправо/влево относительно остальных машин в колонне.

Еще вопрос, возможно ли добавить серверу настройку, которая отключает отображение самолетов(на которых игроки летают в данный момент) в окне статистики в миссии. Это старый чит и он не потерял актуальности. Бомберам например из-за него часто достается.

andersbravers
03.09.2012, 17:45
Есть вопрос по встречному движению машинок на дороге. Возможно ли их еще больше развести от центра дороги к обочинам? Т.к. колонны часто все-таки утыкаются друг в друга и начинается чехарда. Причем "зацепление" происходит из-за одной-двух машинок как правило, которые принимают чуть вправо/влево относительно остальных машин в колонне.

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

podvoxx
04.09.2012, 10:06
Гы, я вчера на Атаге весь вечера по краю карты прошарился, ни от кого не досталось)).
Ну повезло значит. Я например перед вылетом могу сам посмотреть на каких самолетах противник и выбрать уже исходя из этого на чем и куда лететь и стоит ли вообще делать это. А должна быть неизвестность))

Charger
04.09.2012, 11:29
Ну повезло значит. Я например перед вылетом могу сам посмотреть на каких самолетах противник и выбрать уже исходя из этого на чем и куда лететь и стоит ли вообще делать это. А должна быть неизвестность))

Старый, опытный камикадзе :)

Смотрю в ростер вижу
Кто и на чём
Слушает звон хрусталя...

naryv
05.09.2012, 11:43
Есть вопрос по одному нехорошему релизному багу, который нужно исправить к патчу для стима.

Ошибка возникает на запороленных серверах если неправильно ввести пароль или какое-то время вообще ничего не вводить. Выдает окошко с текстом "Server fail autentification" и на него нельзя попасть пока сервер не перезагрузится. В багах о ней сообщалось, ее сложно будет исправить?

Вот опять - http://www.sukhoi.ru/forum/showthread.php?t=76974 это посмотрим.


Есть вопрос по встречному движению машинок на дороге. Возможно ли их еще больше развести от центра дороги к обочинам? Т.к. колонны часто все-таки утыкаются друг в друга и начинается чехарда. Причем "зацепление" происходит из-за одной-двух машинок как правило, которые принимают чуть вправо/влево относительно остальных машин в колонне. ага, увеличили ещё на полметра в каждую сторону:).

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

podvoxx
05.09.2012, 11:52
это посмотрим.
Там еще одна особенность, неправильно написавший пароль игрок учитывается в кол-ве игроков на сервере, возможно игра считает что он уже на сервере


ага, увеличили ещё на полметра в каждую сторону:).
Спасибо :)

podvoxx
05.09.2012, 16:57
Помню давным-давно было обсуждение по расширению возможностей HUD-сообщений. Возможно как-то их дополнить? Например положение на экране(в процентах), высота шрифта и возможность одновременного отображения любого количества сообщений?

podvoxx
17.09.2012, 08:54
Хотелось бы уточнить по параметрам. Есть еще второе число int, subtype - на что оно влияет? По скорости и высоте тоже непонятно. Значения бывают отрицательные и далекие от приборных( в м/с?)


Z_Coordinates,
Z_Orientation,
Z_Overload,
Z_AltitudeAGL,
Z_AltitudeMSL,
Z_VelocityIAS,
Z_VelocityTAS,
Z_VelocityMach,

Еще вопрос по миссии для чемпионата. Можно ли как-то получить из скрипта массу вооружения на самолете?

naryv
17.09.2012, 10:47
Хотелось бы уточнить по параметрам. Есть еще второе число int, subtype - на что оно влияет? По скорости и высоте тоже непонятно. Значения бывают отрицательные и далекие от приборных( в м/с?)


Z_Coordinates,
Z_Orientation,
Z_Overload,
Z_AltitudeAGL,
Z_AltitudeMSL,
Z_VelocityIAS,
Z_VelocityTAS,
Z_VelocityMach,
Вот комментарии,subtype - параметр :


/// [Misc.: Machine Spatial Coordinates]
/// <para>Indicates machine position in world coordinates.</para>
/// <para>Subtype 0 shows X-coordinate;</para>
/// <para>Subtype 1 shows Y-coordinate;</para>
/// <para>Subtype 2 shows Z-coordinate.</para>
/// </summary>
Z_Coordinates,
/// <summary>
/// [Misc.: Machine Spatial Orientation]
/// <para>Indicates machine orientation, angles are in degrees.</para>
/// <para>Subtype 0 shows yaw (0 degrees point E);</para>
/// <para>Subtype 1 shows pitch (nose-up is negative);</para>
/// <para>Subtype 2 shows roll (right roll is positive).</para>
/// </summary>
Z_Orientation,
/// <summary>
/// [Misc.: Machine Overload under Acceleration]
/// <para>Indicates overload in m/s/s.</para>
/// <para>Generic subtype (-1) shows accelerometer, being 0 under normal conditions;</para>
/// <para>Subtype 0 shows acceleraton along machine's X axis;</para>
/// <para>Subtype 1 shows acceleraton along machine's Y axis;</para>
/// <para>Subtype 2 shows acceleraton along machine's Z axis.</para>
/// </summary>
Z_Overload,
/// <summary>
/// [Misc.: Machine Altitude AGL]
/// <para>Indicates machine elevation above ground level in meters.</para>
/// </summary>
Z_AltitudeAGL,
/// <summary>
/// [Misc.: Machine Altitude MSL]
/// <para>Indicates machine elevation above 0.0 Z-plane.</para>
/// </summary>
Z_AltitudeMSL,
/// <summary>
/// [Misc.: Machine's Velocity in Air]
/// <para>Indicates machine's aerial velocity.</para>
/// <para>Generic subtype (-1) shows velocity length;</para>
/// <para>Subtype 0 shows aerial flow along machine's X-axis;</para>
/// <para>Subtype 1 shows aerial flow along machine's Y-axis;</para>
/// <para>Subtype 2 shows aerial flow along machine's Z-axis.</para>
/// </summary>
Z_VelocityIAS,
/// <summary>
/// [Misc.: Machine's Velocity in World Coordinates]
/// <para>Indicates machine's absolute velocity.</para>
/// <para>Generic subtype (-1) shows velocity length;</para>
/// <para>Subtype 0 shows machine's speed along world's X-coordinate;</para>
/// <para>Subtype 1 shows machine's speed along world's Y-coordinate;</para>
/// <para>Subtype 2 shows machine's speed along world's Z-coordinate.</para>
/// </summary>
Z_VelocityTAS,
/// <summary>
/// [Misc.: Machine's Mach Factor]
/// <para>Indicates machine's aerial velocity devided by sonic speed.</para>
/// <para>Generic subtype (-1) shows velocity length;</para>
/// <para>Subtype 0 shows aerial flow along machine's X-axis;</para>
/// <para>Subtype 1 shows aerial flow along machine's Y-axis;</para>
/// <para>Subtype 2 shows aerial flow along machine's Z-axis.</para>
/// </summary>
Z_VelocityMach,
/// <summary>
/// [Misc.: Ambient Temperature]
/// <para>Indicates air temperature around machine's location, in K.</para>
/// </summary>
Z_AmbientAirTemperature,



Еще вопрос по миссии для чемпионата. Можно ли как-то получить из скрипта массу вооружения на самолете? массу нельзя, можно в штуках :
/// [Gun Ammo Reserve]
/// <para>Indicates current number of bullets in gun storage.</para>
/// <para>Subtype points to gun attachment hook (looking up gun on hook named [_Gun+subtype]).</para>
/// </summary>
S_GunReserve,
/// <summary>
/// [Gun Clip Reserve]
/// <para>Indicates number of bullets in current gun loaded clip / ammo box.</para>
/// <para>Subtype points to gun attachment hook (looking up gun on hook named [_Gun+subtype]).</para>
/// </summary>
S_GunClipReserve,
/// <summary>
/// [Bomb Spawn Ammo Reserve]
/// <para>Indicates number of bombs in bombgun storage.</para>
/// <para>Subtype points to attachment hook (looking up gun on hook named [_Bomb+subtype]).</para>
/// </summary>
S_BombReserve,

BELKA_
17.09.2012, 17:38
Мдя.. еслиб я понимал.. ))
В штуках .. это кол-во стволов?
Или патронов на ствол.. в общем то что нужно, если б/к не загружается при снятии с самолета пары стволов.
Важно чтобы общее кол-во б/к на все стволы ..в чате показывалось при появлении.

Small_Bee
17.09.2012, 17:43
Мдя.. еслиб я понимал.. ))
В штуках .. это кол-во стволов?
number of bullets
снаряды\пули\патроны.

naryv
17.09.2012, 18:09
number of bullets
снаряды\пули\патроны. да, S_GunReserve кол-во "патронов" на ствол(ствол выбирается субтайпом) всего, S_GunClipReserve - кол-во патронов в магазине/ленте текущих(это в основном для турельных, перезаряжаемых стволов)

Что-то типа этого :

public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
AiAircraft ac = actor as AiAircraft;
if (ac !=null)
{
int numBullet = 0;
for (int i=0;i<20;i++)
{
numBullet += (int)ac.getParameter(part.ParameterTypes.S_GunReserve, i);
i++;
}
}
}
numBullet покажет бк на все стволы

podvoxx
18.09.2012, 09:34
Спасибо, информация по параметрам очень пригодится. :thx:
Еще параметр видел, но пока не проверял - I_Time. Это время на часах в кабине должно быть?

naryv
18.09.2012, 10:21
Спасибо, информация по параметрам очень пригодится. :thx:
Еще параметр видел, но пока не проверял - I_Time. Это время на часах в кабине должно быть?
I_Time нет, есть I_Timer - часы и секундомер:
/// <summary>
/// [Inst: Timer]
/// <para>Returns timer reading.</para>
/// <para>Generic subtype (-1) shows clock / time of day, hours, [0.0, 24.0);</para>
/// <para>Subtype 0 shows stopwatch reading, seconds.</para>
/// </summary>
I_Timer
ещё время получить можно так - GamePlay.gpTimeofDay();

podvoxx
24.09.2012, 09:27
1. Снова вопрос по GamePlay.gpNextMissionNumber(), намучался я тут с ним.
При вот таком применении выдает номер подмиссии 0. Почему так может быть? До этого -1 было получается? Почему не 1?


public override void Inited()
{
SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");

}

Задача была в методе OnActorCreated сохранить все созданные акторы в заранее созданные списки. Актор добавляется в список только если номер подмиссии совпадает с тем, что получен при помощи GamePlay.gpNextMissionNumber(). Потом этими списками легко управлять: удалять акторы, заново создавать и т.п.
Далее необходимо было удалить все созданные акторы из одного из таких списков, создать новые и также добавить по номеру подмиссии в этот же список. Аналогично третья чистка/замена
В игре выглядит так - город сначала имеет обычное зенитное прикрытие. Как только его выбирают для штурма - все зенитки удаляются и загружается усиленный набор зениток. Штурм закончился, снова загрузился первоначальный набор зениток. Это работает и вполне нормально.
Однако сначала я не заметил баг, но потом попались на глаза зенитки синие и красные в одной точке, так как удаление акторов не происходило из-за неправильно определенного номера подмиссии. Разница была в единицу.
- Т.е. первая загрузка зениток - номер определен неверно, на единицу меньше
- Вторая и третья, уже во время миссии - номер в GamePlay.gpNextMissionNumber() верный

Тут еще особенность, точнее две. В миссии используется наследование от миссии командера. И вторая - первоначально загрузка зениток происходила до Inited(), примерно так:


public class Mission : RSTMission
{
MissionBOR Data = MissionBOR.GetInstance; // Get MissionSMP class
public override void Inited()
{
SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");

}
}

В этом Data в методе создания зениток правильный номер подмиссии определялся только если прибавить к нему единицу(так как на этот момент GamePlay.gpNextMissionNumber() равен нулю, т.е. номеру хост-миссии):


public void SetAAA()
{
AAAMisNumber = GamePlay.gpNextMissionNumber() + 1;
SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
SendMessage.ToServer("[SERVER]: Номер подмиссии ААА гарнизона [{0}] - [{1}]", Name, AAAMisNumber);
}

Однако если потом в методе OnTickGame(к примеру) удалить акторы-зенитки и создать новые методом SetAAA(), то к номеру подмиссии уже не нужно прибавлять единицу, а если прибавить - то новые акторы не попадут в список через метод OnActorCreated


public void SetAAA()
{
AAAMisNumber = GamePlay.gpNextMissionNumber();
SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
}

Позже я вынес первое создание акторов в OnTickGame, номера стали совпадать.

Т.е. сейчас так выглядит:

[15:19:09] 35>difficulty Vulnerability 1
[15:19:09] 36>difficulty WindTurbulence 1
[15:19:09] 37>missLoad missions\SMP\Battle\battle.mis
[15:19:19] 38>[15:19:19] Loading mission ...
[15:19:19] Server to [Server]: ......................
[15:19:19] Server to [Server]: [SERVER]: Инициализация миссии...ok
[15:19:20] Server to [Server]: [SERVER]: Load hostmission: Battle.mis
[15:19:20] Server to [Server]: [TEST] Номер подмиссии - [0]
[15:19:20] Load landscape...
[15:19:22] Load bridges
[15:19:22] LongBridge: wrong width. (3)
[15:19:24] Load static objects...
[15:19:25] Mission loaded. time = 5,933
[15:19:25] Loading mission ...
[15:19:25] Server to [Server]: [SERVER]: Load submission: destroyAI.mis
[15:19:25] Server to [Server]: [TEST]: ЗАГРУЖЕНА МИССИЯ # [1]

Выходит до загрузки хостмиссии номер подмиссии на единицу меньше определяется?
2. Вопрос по линии фронта. Сейчас она черная, это будет правиться?

3. Постоянно сообщают о взрывах на аэродромах в некоторых ангарах. Имеет ли смысл собрать информацию о таких ангарах?

naryv
24.09.2012, 11:02
1. Снова вопрос по GamePlay.gpNextMissionNumber(), намучался я тут с ним.
При вот таком применении выдает номер подмиссии 0. Почему так может быть? До этого -1 было получается? Почему не 1?


public override void Inited()
{
SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");

}

Inited() вызывается до загрузки хост миссии, поэтому gpNextMissionNumber() - показывает 0, это номер хост миссии будет.

Задача была в методе OnActorCreated сохранить все созданные акторы в заранее созданные списки. Актор добавляется в список только если номер подмиссии совпадает с тем, что получен при помощи GamePlay.gpNextMissionNumber(). Потом этими списками легко управлять: удалять акторы, заново создавать и т.п.
Далее необходимо было удалить все созданные акторы из одного из таких списков, создать новые и также добавить по номеру подмиссии в этот же список. Аналогично третья чистка/замена
В игре выглядит так - город сначала имеет обычное зенитное прикрытие. Как только его выбирают для штурма - все зенитки удаляются и загружается усиленный набор зениток. Штурм закончился, снова загрузился первоначальный набор зениток. Это работает и вполне нормально.
Однако сначала я не заметил баг, но потом попались на глаза зенитки синие и красные в одной точке, так как удаление акторов не происходило из-за неправильно определенного номера подмиссии. Разница была в единицу.
- Т.е. первая загрузка зениток - номер определен неверно, на единицу меньше
- Вторая и третья, уже во время миссии - номер в GamePlay.gpNextMissionNumber() верный

Тут еще особенность, точнее две. В миссии используется наследование от миссии командера. И вторая - первоначально загрузка зениток происходила до Inited(), примерно так:


public class Mission : RSTMission
{
MissionBOR Data = MissionBOR.GetInstance; // Get MissionSMP class
public override void Inited()
{
SendMessage.ToServer("[TEST] Номер подмиссии - [{0}]", GamePlay.gpNextMissionNumber());
GamePlay.gpPostMissionLoad("missions\\SMP\\Battle\\submission\\destroyAI.mis");

}
}

В этом Data в методе создания зениток правильный номер подмиссии определялся только если прибавить к нему единицу(так как на этот момент GamePlay.gpNextMissionNumber() равен нулю, т.е. номеру хост-миссии):


public void SetAAA()
{
AAAMisNumber = GamePlay.gpNextMissionNumber() + 1;
SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
SendMessage.ToServer("[SERVER]: Номер подмиссии ААА гарнизона [{0}] - [{1}]", Name, AAAMisNumber);
}

Однако если потом в методе OnTickGame(к примеру) удалить акторы-зенитки и создать новые методом SetAAA(), то к номеру подмиссии уже не нужно прибавлять единицу, а если прибавить - то новые акторы не попадут в список через метод OnActorCreated


public void SetAAA()
{
AAAMisNumber = GamePlay.gpNextMissionNumber();
SMPLibrary.LoadSubmission(BORLibrary.CreateAAArtilleryByTemplate(mapFile, this.Army, 0.2));
}

Позже я вынес первое создание акторов в OnTickGame, номера стали совпадать.

Т.е. сейчас так выглядит:

[15:19:09] 35>difficulty Vulnerability 1
[15:19:09] 36>difficulty WindTurbulence 1
[15:19:09] 37>missLoad missions\SMP\Battle\battle.mis
[15:19:19] 38>[15:19:19] Loading mission ...
[15:19:19] Server to [Server]: ......................
[15:19:19] Server to [Server]: [SERVER]: Инициализация миссии...ok
[15:19:20] Server to [Server]: [SERVER]: Load hostmission: Battle.mis
[15:19:20] Server to [Server]: [TEST] Номер подмиссии - [0]
[15:19:20] Load landscape...
[15:19:22] Load bridges
[15:19:22] LongBridge: wrong width. (3)
[15:19:24] Load static objects...
[15:19:25] Mission loaded. time = 5,933
[15:19:25] Loading mission ...
[15:19:25] Server to [Server]: [SERVER]: Load submission: destroyAI.mis
[15:19:25] Server to [Server]: [TEST]: ЗАГРУЖЕНА МИССИЯ # [1]

Выходит до загрузки хостмиссии номер подмиссии на единицу меньше определяется?
до загрузки 0-й миссии gpNextMissionNumber() будет показывать 0 (см. лог -
[15:19:09] 37>missLoad missions\SMP\Battle\battle.mis
[15:19:19] 38>[15:19:19] Loading mission ... - миссия начала загружаться
[15:19:20] Server to [Server]: [TEST] Номер подмиссии - [0] - она ещё не загружена, миссий в битве ещзё нет, gpNextMissionNumber() показывает 0
[15:19:25] Mission loaded. time = 5,933 а вот тут она уже загрузилась, в битве есть миссия, gpNextMissionNumber() покажет 1),и я очень бы не советовал загружать какие-то подмиссии до старта основной, лучше это сделать хотя-бы в OnBattleStarted().


2. Вопрос по линии фронта. Сейчас она черная, это будет правиться? думаю да.


3. Постоянно сообщают о взрывах на аэродромах в некоторых ангарах. Имеет ли смысл собрать информацию о таких ангарах? ну наверное да.

podvoxx
24.09.2012, 11:10
и я очень бы не советовал загружать какие-то подмиссии до старта основной, лучше это сделать хотя-бы в OnBattleStarted().

Ясно, просто если грузить из OnBattleStarted, то там у меня не получалось в подмиссиях получать события по убитым акторам, т.е. подмиссия в таком случае "не видит" остальные миссии. Хотя надо будет еще проверить.

naryv
24.09.2012, 11:16
Ясно, просто если грузить из OnBattleStarted, то там у меня не получалось в подмиссиях получать события по убитым акторам, т.е. подмиссия в таком случае "не видит" остальные миссии. Хотя надо будет еще проверить.

public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;
} а после этого уже грузить. Но в Inited-е грузить точно не стоит - может абсолютно не корректно работать.

PS а ещё - зачем 400 точек линии фронта ставить - она прокладывается как среднее между соседними маркерами разных цветов. Может проще в центре миссионных районов ставить по флажку соответствующего цвета ?

podvoxx
24.09.2012, 11:24
PS а ещё - зачем 400 точек линии фронта ставить - она прокладывается как среднее между соседними маркерами разных цветов. Может проще в центре миссионных районов ставить по флажку соответствующего цвета ?

Там нужна точная граница, иначе аэродромы и дороги могут попасть на чужую территорию. Т.е. чтобы соответствовало нарисованной карте, а не наоборот

naryv
24.09.2012, 11:25
Там нужна точная граница, иначе аэродромы и дороги могут попасть на чужую территорию. Т.е. чтобы соответствовало нарисованной карте, а не наоборот ну на аэродромах тоже флажки поставить а дороги наверное не так важно на чьей территории, хотя если важно - можно, конечно и так :)

naryv
26.09.2012, 17:10
Процитирую сам себя, и отсюда вопрос - интересно, что команды вроде chat и battle stopped в такой конструкции проходят, но команда kick [player_name] - нет. Это принудительно так сделали или баг какой-то? В такой конструкции работают дополнительные команды, их 5 штук - "?","help", "battle", "missLoad","record" , чтобы использовать kick и другие основные команды надо вот такую конструкцию использовать :

if( !gameServerDef.consoleInput(command)) // выполнит если команда из доп. списка, в противном случае вернёт false и тогда -
gameServerDef.game.CmdExec(command)// должно выполнить основную команду

Small_Bee
26.09.2012, 17:27
В такой конструкции работают дополнительные команды, их 5 штук - "?","help", "battle", "missLoad","record" , чтобы использовать kick и другие основные команды надо вот такую конструкцию использовать :

if( !gameServerDef.consoleInput(command)) // выполнит если команда из доп. списка, в противном случае вернёт false и тогда -
gameServerDef.game.CmdExec(command)// должно выполнить основную команду

Спасибо, но с game у меня связана проблема такого плана - любая попытка обращения к нему из скрипта миссии вызывает ошибку. Что-то связанное с сериализацией. Вечером воспроизведу и точнее скажу. Аналогичная ситуация, если подсовывать свою strategy.dll, и пытаться то же самое из нее сделать.
Единственное, как работает - если подсовывать свой серверный аддин (по аналогии с синглом), и запускать ее из интерфейса игры. Там даже срабатывает активация аддина (по крайней мере событие активации приходит). А вот как то же самое сделать для выделенного сервера пока не допер.
Пока эту проблему правда (именно с командой сервера) тупо обошел - сначала команда уходит коммандеру, а он уже непосредственно в консоль ее транслирует.
И никак не получается разобрать, как работают консольные команды admin и secure.

naryv
26.09.2012, 17:58
Спасибо, но с game у меня связана проблема такого плана - любая попытка обращения к нему из скрипта миссии вызывает ошибку. Что-то связанное с сериализацией. Вечером воспроизведу и точнее скажу. хорошо, буду ждать уточнение, постараемся исправить.

UPD. Можно попробовать поиграть ключём scriptAppDomain в секции [rts] confs.ini:
[rts]
scriptAppDomain=0
0 или 1 возможные значения, может быть ошибка уйдёт.


И никак не получается разобрать, как работают консольные команды admin и secure. Завтра напомните пожалуйста, попробую уточнить

naryv
27.09.2012, 13:05
И никак не получается разобрать, как работают консольные команды admin и secure. admin позволяет назначить клиента администратором сервера. Такой клиент-админ может запускать все команды сервера - в консоль сервера их надо писать с приставкой sc перед командой, например "sc battle start" и т.п.

secure позволяет поставить пароль на, армию, группу или юнит.

podvoxx
27.09.2012, 13:10
admin позволяет назначить клиента администратором сервера. Такой клиент-админ может запускать все команды сервера - в консоль сервера их надо писать с приставкой sc перед командой, например "sc battle start" и т.п.

secure позволяет поставить пароль на, армию, группу или юнит.

Т.е. можно назначить любого игрока админом и он сможет кикать нарушителей? А кроме ника можно как-то иденитифицировать игрока?(в идеале - steamID).

naryv
27.09.2012, 16:15
Т.е. можно назначить любого игрока админом и он сможет кикать нарушителей? да, любой такой игрок может выполнять все серверные команды, как сам сервер.

А кроме ника можно как-то иденитифицировать игрока?(в идеале - steamID). можно пароль поставить, по стимИД - нет, нельзя.

Small_Bee
27.09.2012, 21:33
хорошо, буду ждать уточнение, постараемся исправить.


Вот такая ошибка



=================================================
System.Runtime.Serialization.SerializationException: Type 'XCmHVL2XxNBIYasUAhA.m
5wJuI2TCJecIAJ6C2k' in assembly 'maddox, Version=1.0.0.0, Culture=neutral, Publi
cKeyToken=8b6839725e48404f' is not marked as serializable.

Server stack trace:
at maddox.game.GameServerDef.get_game()
at maddox.game.world.Strategy.Init(IGamePlay gamePlay) in C:\Users\Small_Bee\
Documents\Visual Studio 2010\Projects\Strategy\Strategy\Strategy.cs:line 29
at maddox.game.ScriptRemote.loadBattleScript(String assemblyFileName, IGamePl
ay gamePlay)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(
IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInCont
ext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMes
sage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage req
Msg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgDa
ta, Int32 type)
at maddox.game.IScriptRemote.loadBattleScript(String assemblyFileName, IGameP
lay gamePlay)
at 5gH4oknoo5EY5CgCVcx.0YwoYOnr3vYskAKoCh6.yxDI29fawsP()
=================================================

=================================================
System.Runtime.Serialization.SerializationException: Type 'XCmHVL2XxNBIYasUAhA.m
5wJuI2TCJecIAJ6C2k' in assembly 'maddox, Version=1.0.0.0, Culture=neutral, Publi
cKeyToken=8b6839725e48404f' is not marked as serializable.

Server stack trace:
at maddox.game.GameServerDef.get_game()
at maddox.game.world.Strategy.Init(IGamePlay gamePlay) in C:\Users\Small_Bee\
Documents\Visual Studio 2010\Projects\Strategy\Strategy\Strategy.cs:line 29
at maddox.game.ScriptRemote.loadBattleScript(String assemblyFileName, IGamePl
ay gamePlay)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(
IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInCont
ext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMes
sage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
at 5gH4oknoo5EY5CgCVcx.0YwoYOnr3vYskAKoCh6.yxDI29fawsP()
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.f3jWCkg4F3(vjbTQEEtEVyjgU6D54J )
=================================================

=================================================
System.Runtime.Serialization.SerializationException: Type 'XCmHVL2XxNBIYasUAhA.m
5wJuI2TCJecIAJ6C2k' in assembly 'maddox, Version=1.0.0.0, Culture=neutral, Publi
cKeyToken=8b6839725e48404f' is not marked as serializable.

Server stack trace:
at maddox.game.GameServerDef.get_game()
at maddox.game.world.Strategy.Init(IGamePlay gamePlay) in C:\Users\Small_Bee\
Documents\Visual Studio 2010\Projects\Strategy\Strategy\Strategy.cs:line 29
at maddox.game.ScriptRemote.loadBattleScript(String assemblyFileName, IGamePl
ay gamePlay)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(
IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInCont
ext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMes
sage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.f3jWCkg4F3(vjbTQEEtEVyjgU6D54J )
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.VaIifIGEbs1lvhe8qWB(Object )
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.Yi0WiwFXpL(vjbTQEEtEVyjgU6D54J )
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.EpqW0os9d1(String )
at XCmHVL2XxNBIYasUAhA.m5wJuI2TCJecIAJ6C2k.MissionLoad(String )
=================================================

=================================================
System.Runtime.Serialization.SerializationException: Type 'XCmHVL2XxNBIYasUAhA.m
5wJuI2TCJecIAJ6C2k' in assembly 'maddox, Version=1.0.0.0, Culture=neutral, Publi
cKeyToken=8b6839725e48404f' is not marked as serializable.

Server stack trace:
at maddox.game.GameServerDef.get_game()
at maddox.game.world.Strategy.Init(IGamePlay gamePlay) in C:\Users\Small_Bee\
Documents\Visual Studio 2010\Projects\Strategy\Strategy\Strategy.cs:line 29
at maddox.game.ScriptRemote.loadBattleScript(String assemblyFileName, IGamePl
ay gamePlay)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(
IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInCont
ext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMes
sage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]:
at XCmHVL2XxNBIYasUAhA.m5wJuI2TCJecIAJ6C2k.MissionLoad(String )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.DNgTRJ0qZgs(gPJU6kIZ4shGykFNZg7 )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.ZJ8TYghii8gjhjgJGaF.rVjXD1enz1g4TJ
NGAfGc(Object , Object )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.ZJ8TYghii8gjhjgJGaF.lnATRrMeUxh(gP
JU6kIZ4shGykFNZg7 )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.y72nUBeniTInHs9txyUS(Object , Obje
ct )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.consoleInput(String )
at 3FZcxHms5IqjoeGeo2h.F0VeDtmByYlY9Blsrhq.SFKIPXhgdov(String )
at IE6CYH9RP8HnCFpewZx.y26yKC95JK9uMUhliYG.vc5cAq3bmR4(String , c7ZuPW9BqdyfJ
C6pStx )
=================================================
>battle start

=================================================
System.ApplicationException: Mission: Mission not loaded.
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.uZlW3QAC9N(Double )
at MW1vr45kkDswEmVZaHH.nYyHpA5yJ8g95O4DLEa.OtqWYy0BF1()
at XCmHVL2XxNBIYasUAhA.m5wJuI2TCJecIAJ6C2k.BattleStart()
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.s9DTR3ZqI4t(gPJU6kIZ4shGykFNZg7 )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.ZJ8TYghii8gjhjgJGaF.rVjXD1enz1g4TJ
NGAfGc(Object , Object )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.ZJ8TYghii8gjhjgJGaF.lnATRrMeUxh(gP
JU6kIZ4shGykFNZg7 )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.y72nUBeniTInHs9txyUS(Object , Obje
ct )
at aX2DOmhyS6kclbFDNtd.c6MannhpCKJgNfMedU4.consoleInput(String )
at 3FZcxHms5IqjoeGeo2h.F0VeDtmByYlY9Blsrhq.SFKIPXhgdov(String )
at IE6CYH9RP8HnCFpewZx.y26yKC95JK9uMUhliYG.vc5cAq3bmR4(String , c7ZuPW9BqdyfJ
C6pStx )
=================================================

И кусочек кода Strategy, который ее вызывает


public override void Init(IGamePlay gamePlay)
{
base.Init(gamePlay);
if (gamePlay is GameServerDef)
{
gameServer = (GameServerDef)gamePlay;
gameServer.EventChat += new GameDef.Chat(gameServer_EventChat);
GameServerIterface gi = gameServer.game;
string addinName = gameServer.addInName;
this.GamePlay.gpLogServer(null, "Addin name is `" + addinName + "`", null);
}
}

public override void OnEventGame(GameEventId eventId, object eventArg0, object eventArg1, int eventArgInt)
{
base.OnEventGame(eventId, eventArg0, eventArg1, eventArgInt);
}

А именно строка GameServerIterface gi = gameServer.game;
Похожую ошибку вызывает также строка
gameServer.EventChat += new GameDef.Chat(gameServer_EventChat);
если ее написать в скрипте миссии. В стратегии нормально.

naryv
28.09.2012, 11:45
Вот такая ошибка



И кусочек кода Strategy, который ее вызывает


public override void Init(IGamePlay gamePlay)
{
base.Init(gamePlay);
if (gamePlay is GameServerDef)
{
gameServer = (GameServerDef)gamePlay;
gameServer.EventChat += new GameDef.Chat(gameServer_EventChat);
GameServerIterface gi = gameServer.game;
string addinName = gameServer.addInName;
this.GamePlay.gpLogServer(null, "Addin name is `" + addinName + "`", null);
}
}

public override void OnEventGame(GameEventId eventId, object eventArg0, object eventArg1, int eventArgInt)
{
base.OnEventGame(eventId, eventArg0, eventArg1, eventArgInt);
}

А именно строка GameServerIterface gi = gameServer.game;
Похожую ошибку вызывает также строка
gameServer.EventChat += new GameDef.Chat(gameServer_EventChat);
если ее написать в скрипте миссии. В стратегии нормально. по словам главного программиста
[rts]
scriptAppDomain=0
должно помочь

Small_Bee
28.09.2012, 11:59
по словам главного программиста
[rts]
scriptAppDomain=0
должно помочь

При этой опции и скрипт работает по другому - по крайней мере относительно событий, связанных со стартом и остановкой битвы. Как именно я детально пока не разбирался (вроде они не вызываются должным образом). Т.е. на данный момент это не подходит.

podvoxx
29.09.2012, 00:28
А АИ наземки правился? Просто колонны как-то плохо ездить стали(машинки разных типов). Ведущая машина постоянно на три-пять корпусов влево по направлению движения держится. Спотыкаются друг об друга часто, раньше стабильней было и резвей ехали

naryv
01.10.2012, 13:19
При этой опции и скрипт работает по другому - по крайней мере относительно событий, связанных со стартом и остановкой битвы. Как именно я детально пока не разбирался (вроде они не вызываются должным образом). Т.е. на данный момент это не подходит. как я понял, при scriptAppDomain=1(по умолчанию) весь game пытается перекинуться в другой домен, что и вызывает ошибку сериализации, глав. программист сказал, что вообще game не планировался для работы из скрипта - он для своего сервера скорее. При scriptAppDomain=0 game остаётся в своём домене и ошибку не должен давать,а вот что за проблема с стартом и стопом - не знаю, вроде-бы не должно ничего страшного происходить.


А АИ наземки правился? Просто колонны как-то плохо ездить стали(машинки разных типов). Ведущая машина постоянно на три-пять корпусов влево по направлению движения держится. Спотыкаются друг об друга часто, раньше стабильней было и резвей ехали только это -
ага, увеличили ещё на полметра в каждую сторону:). у меня вроде как ездили так и ездят, может им дорога узковата, если на обочину их маршрут сильно вынуждает выехать - они пытаются вернуться на дорогу, поэтому могут быть косяки.


Для юзерских меток - вот пример миссии 159600 при создании юзером метки - пишется об этом сообщение и в точку метки от позиции игрока +1000м вылетают бомбардировщики, метка рисуется у всех клиентов. Есть один момент - ивенты о метках приходят в скрипт в сингле, либо от клиентов в сетевой игре, сервер сам свои ивенты не получает.

Small_Bee
01.10.2012, 16:41
как я понял, при scriptAppDomain=1(по умолчанию) весь game пытается перекинуться в другой домен, что и вызывает ошибку сериализации, глав. программист сказал, что вообще game не планировался для работы из скрипта - он для своего сервера скорее. При scriptAppDomain=0 game остаётся в своём домене и ошибку не должен давать,а вот что за проблема с стартом и стопом - не знаю, вроде-бы не должно ничего страшного происходить.


С game вроде понятно.
Ок, может моя ошибка была где-то, попробую позже наглядный пример накидать, что бы видно было разницу.

podvoxx
01.10.2012, 16:54
только это - у меня вроде как ездили так и ездят, может им дорога узковата, если на обочину их маршрут сильно вынуждает выехать - они пытаются вернуться на дорогу, поэтому могут быть косяки.

Не знаю, может из-за сборной колонны(могут быть танки с грузовиками) так. Но первая машина всегда в стороне от дороги, позже еще потестирую. До этого проверял на двух разных дорогах, результат примерно один и тот же.
И они точно не едут по одной колее. Т.е. к примеру 5-6 машин более-менее ровно идут, а пара драндулетов на корпус или больше может в сторону уходить.

-atas-
09.10.2012, 11:29
На форуме 1С не могут с метками разобраться. Нужна помощь http://forum.1cpublishing.eu/showthread.php?t=34676

naryv
09.10.2012, 13:00
На форуме 1С не могут с метками разобраться. Нужна помощь http://forum.1cpublishing.eu/showthread.php?t=34676
Ага, спасибо за размещение ссылки на пример там, из примера вроде всё должно быть понятно, еслли нет, ребята здесь спросят.

41Sqn_Banks
11.10.2012, 01:47
Hello naryv,

thanks for posting the hind with "scriptAppDomain = 0", this finally allows me to register to the EventChat.

I have some problems with the creation of user labels. Basically I want to use gpMakeUserLabel to create a user label for each waypoint of an air group, and than use gpMakeUserLabel to draw it to the player. This is needed to show the waypoints to the players under full real realism settings.



public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);

if (actor is AiAircraft)
{
AiAircraft aiAircraft = actor as AiAircraft;
AiAirGroup aiAirGroup = aiAircraft.AirGroup();
if (aiAirGroup != null)
{
AiWayPoint[] waypoints = aiAirGroup.GetWay();

foreach (AiWayPoint waypoint in waypoints)
{
GPUserLabel userLabel = GamePlay.gpMakeUserLabel(new maddox.GP.Point2d(waypoint.P.x, waypoint.P.x), player, waypoint.P.z.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat), GamePlay.gpTimeofDay(), (int)GPUserIconType.Waypoint);
GamePlay.gpDrawUserLabel(new Player[] { player }, userLabel);
}
}
}
}


The problem is that the labels are not displayed. The creation seems to have been successful, at least gpMakeUserLabel didn't return null. There is also no error or exception in the log.

Am I missing something? Do I have to store the created user label in order to display it? Is it because the same player is used to create and draw it?

naryv
11.10.2012, 12:59
Hello naryv, Hi Banks!


I have some problems with the creation of user labels. Basically I want to use gpMakeUserLabel to create a user label for each waypoint of an air group, and than use gpMakeUserLabel to draw it to the player. This is needed to show the waypoints to the players under full real realism settings.



public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);

if (actor is AiAircraft)
{
AiAircraft aiAircraft = actor as AiAircraft;
AiAirGroup aiAirGroup = aiAircraft.AirGroup();
if (aiAirGroup != null)
{
AiWayPoint[] waypoints = aiAirGroup.GetWay();

foreach (AiWayPoint waypoint in waypoints)
{
GPUserLabel userLabel = GamePlay.gpMakeUserLabel(new maddox.GP.Point2d(waypoint.P.x, waypoint.P.x), player, waypoint.P.z.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat), GamePlay.gpTimeofDay(), (int)GPUserIconType.Waypoint);
GamePlay.gpDrawUserLabel(new Player[] { player }, userLabel);
}
}
}
}


The problem is that the labels are not displayed. The creation seems to have been successful, at least gpMakeUserLabel didn't return null. There is also no error or exception in the log.

Am I missing something? Do I have to store the created user label in order to display it? Is it because the same player is used to create and draw it?
Now in single mission there would be event OnUserCreateUserLabel(GPUserLabel ul) after you make gpDrawUserLabel(), but it really don't display, this is bug ( hope it would be fixed with next patch, we didn't test it this way in single). But it should work in online missions, displaying labels for users thats not a server, i mean client players would get displayed labels, server player wouldn't.

41Sqn_Banks
14.10.2012, 01:49
Hi Banks!


Now in single mission there would be event OnUserCreateUserLabel(GPUserLabel ul) after you make gpDrawUserLabel(), but it really don't display, this is bug ( hope it would be fixed with next patch, we didn't test it this way in single). But it should work in online missions, displaying labels for users thats not a server, i mean client players would get displayed labels, server player wouldn't.

Sorry it doesn't work with single player and dedicated server. gpMakeUserLabel does create a label object (at least it doesn't return null), however gpDrawUserLabel doesn't have any effect, the label created by gpMakeUserLabel is not drawn for the client player. Note that I use the same player in gpMakeUserLabel and gpDrawUserLabel. Maybe it is only possible to draw labels with gpDrawUserLabel that were created by different players?

naryv
16.10.2012, 16:39
Sorry it doesn't work with single player and dedicated server. gpMakeUserLabel does create a label object (at least it doesn't return null), however gpDrawUserLabel doesn't have any effect, the label created by gpMakeUserLabel is not drawn for the client player. Note that I use the same player in gpMakeUserLabel and gpDrawUserLabel. Maybe it is only possible to draw labels with gpDrawUserLabel that were created by different players?
Hi again! Here is simple sample: 160075 single mission - when you enter plane(it is AI controlled first) label of aircraft is drawing on the map in the position of aircraft, try it, does it work this way?

41Sqn_Banks
17.10.2012, 15:10
Thanks naryv, I will try out your example this evening and report back.

41Sqn_Banks
18.10.2012, 01:26
Your example is working (tested with dedicated server). I will do some tests to find out why my code is not working. Thanks.

Kros
18.10.2012, 15:00
Есть вопрос, можно через скрипт получать данные о расстоянии от самолета игрока до расположенного на карте объекта? Через метод или свойство какое-нибудь, чтобы в него название объекта скормить, а в обратку цифру о дальности до него получить?

naryv
18.10.2012, 15:38
Есть вопрос, можно через скрипт получать данные о расстоянии от самолета игрока до расположенного на карте объекта? Через метод или свойство какое-нибудь, чтобы в него название объекта скормить, а в обратку цифру о дальности до него получить? примерно так
AiActor aa;
Point3d pos = aa.Pos();
if (GamePlay.gpPlayer().Place() is AiAircraft)
playerPlane = GamePlay.gpPlayer().Place() as AiAircraft;
double distance = playerPlane.Pos().distance(ref pos); aa - соответственно АИ актор, вместо него может быть стационар, пушка и т.п., из них получается позиция Pos() типа Point3d, и на эту позицию ссылается метод самолёта Pos().distance(ref pos)

Kros
18.10.2012, 15:47
Спасибо :thx:

Попробовал втиснуть в код. В итоге вылазит ошибка в игре и ничего не считается. :(
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Server stack trace:
в Mission.OnBattleStarted() в c:\...\race.cs:строка 22

Понимаю что надо как-то связать переменную Stat с моим объектом в игре через его имя (Static0)
Сделал так: Stat = GamePlay.gpActorByName("Static0") as AiActor;
Результат нулевой.



//$debug
using maddox.game;
using maddox.game.world;
using maddox.GP;
using System.Collections.Generic;
using Math = System.Math;

public class Mission : AMission
{
bool raseStart = false;
AiAircraft playerPlane;
AiActor Stat;

double dis2;


public override void OnBattleStarted()
{
base.OnBattleStarted();
MissionNumberListener = -1;

Stat = GamePlay.gpActorByName("Static0") as AiActor; // это уже от себя дописал

Point3d pos = Stat.Pos(); // вот на эту строку ругается

if (GamePlay.gpPlayer().Place() is AiAircraft)
playerPlane = GamePlay.gpPlayer().Place() as AiAircraft;
double distance = playerPlane.Pos().distance(ref pos);
dis2 = distance;
}


public override void OnTickGame()
{
base.OnTickGame();


GamePlay.gpHUDLogCenter(null, "расстояние равно{0}", new object[] {(dis2).ToString("f2")});

if (raseStart)
{
double Scorost = playerPlane.getParameter(part.ParameterTypes.Z_VelocityTAS, -1);
GamePlay.gpHUDLogCenter(null, "Скорость равна: {0}", new object[] { (Scorost * 3.6).ToString("f2") });

}

}

podvoxx
18.10.2012, 19:15
Не могу победить колонны. Едут безобразно. Есть несколько маршрутов в кол-ве 40 шт. Пробовал на разных. Колонны запускаются с интервалом в 1 минуту, колонн много. Колонны настраиваемые, могут быть танки и машины. Благополучно уходят по маршруту только первые несколько, потом где-то образуется затор(обычно на стартовой точке. Машинки сбиваются в кучу и движение останавливается.
Те, которые едут - отдельные машины в колонне двигаются вразнобой, то и дело виляя, останавливаясь, смещаясь влево-вправо и совершенно не придерживаясь какой-то стороны дороги.
Но иногда бывают исключения и едут как положено, быстро, без кривляний. От маршрута не зависит вроде.
Отчего такое может быть? Возможно ли подкрутить как-то AI колонн. Сейчас пока не получается их использовать :(

На третьем скрине пример неровной колонны - две машины зачем-то на другом краю дороги едут

-atas-
18.10.2012, 22:18
Когда столкнулся с этой проблемой, думал, что нужно в любом случае писать скрипт, телепортирующий колонну на 500м вперед в случае ее неподвижности в течении 3-5 минут (проверив предварительно, что она не под атакой. Если не будут застревать на прямой дороге, то застрянут в городе или на реке без мостов (ИИ иногда такой крюк для объезда закладывает - не угадаешь.) ИМХО

podvoxx
19.10.2012, 08:50
Когда столкнулся с этой проблемой, думал, что нужно в любом случае писать скрипт, телепортирующий колонну на 500м вперед в случае ее неподвижности в течении 3-5 минут (проверив предварительно, что она не под атакой. Если не будут застревать на прямой дороге, то застрянут в городе или на реке без мостов (ИИ иногда такой крюк для объезда закладывает - не угадаешь.) ИМХО

Перепрыгивание довольно сложно будет сделать и нагрузки серверу добавит. Городов, мостов и рек нет на маршруте, изначально так сделал. Все маршруты находятся в файлах-шаблонах .mis и все на 100% проходимы одной колонной, проверял несколько раз.
На выходных еще раз попробую и если не получится придется либо вообще забыть о таких колоннах, либо оставить небольшое их количество. Но если делать мало то и смысл потеряется. 109-й расстреляет 5 колонн особо не напрягаясь и зависимость от ресурсов дивизии потеряется.
Еще можно попробовать не настраиваемые колонны, а из юнитов одного типа. Раньше такие использовал на тестах, отлично работали с интервалом респауна в 30 секунд(и даже меньше) и бесконечным кол-вом на маршруте. Не так будут реалистично выглядеть конечно, но лучше это, чем ничего.

naryv
19.10.2012, 13:58
Спасибо :thx:

Попробовал втиснуть в код. В итоге вылазит ошибка в игре и ничего не считается. :(
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
Server stack trace:
в Mission.OnBattleStarted() в c:\...\race.cs:строка 22

Понимаю что надо как-то связать переменную Stat с моим объектом в игре через его имя (Static0)
Сделал так: Stat = GamePlay.gpActorByName("Static0") as AiActor;
Результат нулевой.
да, т.к. стационарные объекты - это не AiActor , это GroundStationary и все стационары в массиве получаемом при вызове gpGroundStationarys().


Не могу победить колонны. Едут безобразно. Есть несколько маршрутов в кол-ве 40 шт. Пробовал на разных. Колонны запускаются с интервалом в 1 минуту, колонн много. Колонны настраиваемые, могут быть танки и машины. Благополучно уходят по маршруту только первые несколько, потом где-то образуется затор(обычно на стартовой точке. Машинки сбиваются в кучу и движение останавливается.
Те, которые едут - отдельные машины в колонне двигаются вразнобой, то и дело виляя, останавливаясь, смещаясь влево-вправо и совершенно не придерживаясь какой-то стороны дороги.
Но иногда бывают исключения и едут как положено, быстро, без кривляний. От маршрута не зависит вроде.
Отчего такое может быть? Возможно ли подкрутить как-то AI колонн. Сейчас пока не получается их использовать :(

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



Возможно ли подкрутить как-то AI колонн. уже нет, увы :(

podvoxx
19.10.2012, 14:13
у разнотипных машин получается очень разная скорость движения и разные ускорения с которыми они могут достигать средней скорости в колонне, поэтому и то останавливаются то разгоняются, на втором скрине похоже заметили вражеский самолёт и пытаются съехать с дороги, в такой ситуации затормозится следующая колонна и будут тыкаться друг другу мешаясь, лучше, наверное интервал побольше делать для прохождения колонны по одному пути, за минуту колонна может не успеть выстроится и отъехать от старта а в той же точке родится новая - пока они будут разбираться кто куда едет - ещё родится и тп вот и получится затор.

Нет, самолета не было рядом. Это происходит когда какая-то машина встает, все машины ее ждут и останавливаются где придется. А можно в сиквеле как-то выровнять движение в колонне? У них к тому же бывают такие элементы пилотожа когда вроде колонна едет ровно, а пара машинок начинает вилять, как будто объезжает припятствие, потом другие и т.д. На ускорении как старое немое кино смотрится.
Увеличивал интервал до 2-х минут - все равно затор может возникнуть

Кстати вопрос по ускорению. Пытался ускорить процесс респауна, он происходит в методе OnTickGame() после проверки StopWatch. После ускорения респаун не срабатывает, это из-за того, что таймер StopWatch останавливается при изменении скорости времени? Или OnTickGame() не обрабатывается?

41Sqn_Banks
19.10.2012, 22:42
Hi again! Here is simple sample: 160075 single mission - when you enter plane(it is AI controlled first) label of aircraft is drawing on the map in the position of aircraft, try it, does it work this way?

Hello naryv, I tried the different version of gpDrawUserLabel, unfortunatly the following two are not working:

void gpDrawUserLabel(int army, GPUserLabel ul);
void gpDrawUserLabel(Player[] to, GPUserLabel ul);

No label is displayed. Only void gpDrawUserLabel(GPUserLabel ul); is working. :( To late for a fix?

naryv
20.10.2012, 00:51
Нет, самолета не было рядом. Это происходит когда какая-то машина встает, все машины ее ждут и останавливаются где придется. А можно в сиквеле как-то выровнять движение в колонне? У них к тому же бывают такие элементы пилотожа когда вроде колонна едет ровно, а пара машинок начинает вилять, как будто объезжает припятствие, потом другие и т.д. На ускорении как старое немое кино смотрится.
Увеличивал интервал до 2-х минут - все равно затор может возникнуть когда вихляется - скорее всего на обочину наехала - пытается вернуться на дорогу и её может разбросать. Ещё как вариант не только увеличить интервал но и стартовую точку двигать - тогда меньше шансы затора. Насчёт сиквела я ничего сказать не могу, там видно будет.


Кстати вопрос по ускорению. Пытался ускорить процесс респауна, он происходит в методе OnTickGame() после проверки StopWatch. После ускорения респаун не срабатывает, это из-за того, что таймер StopWatch останавливается при изменении скорости времени? Или OnTickGame() не обрабатывается? OnTickGame() всегда тикает, от ускорения не зависит, надо смотреть что за таймер и как он сделан....



Hello naryv, I tried the different version of gpDrawUserLabel, unfortunatly the following two are not working:

void gpDrawUserLabel(int army, GPUserLabel ul);
void gpDrawUserLabel(Player[] to, GPUserLabel ul);

No label is displayed. Only void gpDrawUserLabel(GPUserLabel ul); is working. :( To late for a fix?

оk, try this one :
//$debug
using maddox.game;
using maddox.game.world;
using maddox.GP;
using System.Collections.Generic;
using Math = System.Math;


public class Mission : AMission
{

public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
Point2d p ;
p.x = actor.Pos().x;
p.y = actor.Pos().y;
GPUserLabel ul = GamePlay.gpMakeUserLabel(p,player,actor.Name(),GamePlay.gpTimeofDay(),(int)GPUserIconType.Plane);
GamePlay.gpDrawUserLabel(ul);
p.x -= 300;
ul.pos = p;
ul.Text = "Show player";
GamePlay.gpDrawUserLabel(new Player[] { player }, ul);

p.x += 600;
p.y += 300;
ul.pos = p;
ul.Text = "Show army";
GamePlay.gpDrawUserLabel(0,ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(1, ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(2, ul);
}

}
does it work?

41Sqn_Banks
20.10.2012, 11:52
...

Thanks! I will try out ASAP. I hope I only made a stupid mistake in my script. Would be awesome if it works!

Another question: What's the benefit of having "//$debug" at the top of the script?
I know I can use "//$reference <dll name>" to load a assembly. Are there any other "hidden" commands that can be used at the top of the script?

=HH=Pauk
20.10.2012, 20:12
парни, вопрос, как заставить Walrus садиться на воду и взлетать?
эта амфибия боится воды...
есть конечно же мысль, ограничить топляк, но это крайний выход и то решит вопрос только с посадкой

41Sqn_Banks
21.10.2012, 01:12
does it work?

Unfortunately not, only one user label is drawn that has the actor.Name as text. The labels to a specific player or army are not drawn :( Script is running on a dedicated server, player is a remote client.

=HH=Pauk
21.10.2012, 18:00
podvoxx, выручай, надежда на тебя, никто не может помочь в вопросе посадки гидросамолетов на воду... хотя в условиях задано.

naryv
21.10.2012, 23:45
Unfortunately not, only one user label is drawn that has the actor.Name as text. The labels to a specific player or army are not drawn :( Script is running on a dedicated server, player is a remote client.
It was a single-mission sample, i tryed step by step check :), but now it seems like i know what is the problem:. In multiplayer label will not sent to player which is author of this label - just to not doubling labels, exept case when labels sent to everybody. So, when you use that code you make label with player who enter the plane as author, sever will not send it to this player. But You can change the author of label, then it would be send to remote player, server is good candidate to be author(couse hi makes it really) like this :
using maddox.game;
using maddox.game.world;
using maddox.GP;
using System.Collections.Generic;
using Math = System.Math;


public class Mission : AMission
{

public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
Point2d p ;
p.x = actor.Pos().x;
p.y = actor.Pos().y;
GPUserLabel ul = GamePlay.gpMakeUserLabel(p, GamePlay.gpPlayer(), actor.Name(), GamePlay.gpTimeofDay(), (int)GPUserIconType.Plane);
GamePlay.gpDrawUserLabel(ul);
p.x -= 300;
ul.pos = p;
ul.Text = "Show player";
GamePlay.gpDrawUserLabel(new Player[] { player }, ul);

p.x += 600;
p.y += 300;
ul.pos = p;
ul.Text = "Show army";
GamePlay.gpDrawUserLabel(0,ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(1, ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(2, ul);
}

}
it should draw 3 labels - actor.Name, Show player and Show army , try it please.

--- Добавлено ---


podvoxx, выручай, надежда на тебя, никто не может помочь в вопросе посадки гидросамолетов на воду... хотя в условиях задано. увы, похоже никак:(

--- Добавлено ---


Вопрос,
как определить было ли попадание по самолету одним игроком в другого?

Появилась идея, немного повысить комфортность полетов на дуэльном сервере, а именно: выводить надпись игроку при нажатии Alt+F2 "Самолет противника уничтожен", который ранее подстрелил своего соперника, как это было в старом ИЛе при нажатии новой попытки, либо после полного уничтожения самолета.

есть событие на повреждение самолёта -
public override void OnActorDamaged(int missionNumber, string shortName, AiActor actor, AiDamageInitiator initiator, part.NamedDamageTypes damageType)
{
base.OnActorDamaged(missionNumber, shortName, actor, initiator, damageType);
} в нём как аргумент идёт initiator - это кто подбил и damageType - что подбили, можно запоминать и при выходе писать игроку.

=HH=Pauk
22.10.2012, 16:16
парни, вопрос, как заставить Walrus садиться на воду и взлетать?
эта амфибия боится воды...
есть конечно же мысль, ограничить топляк, но это крайний выход и то решит вопрос только с посадкой
увы, похоже никак:(
спасибо за ответ, а то уже извелся в попытках его таки посадить... кроме как топляком заставить больше никак не получатся.

-Sharp-
23.10.2012, 01:52
Будьте добры, помогите пожалуйста реализовать на сервере следующее:

*все самолеты в скинах сервера, а не тех, что по дефолту стоят на компах (т.е. при заходе на сервер, закачиваются автоматом в кеш)
-какой бы скин пилот не одел, он отображается только у его, все остальные вирпилы видят его в серверном скине
-на синюю группу натягиваются "синие" скины, на красную "красные" скины

а также подскажите где можно взять скрипт:
*на авто перезапуск сервера через определенное "число" времени
*на запрет покидания самолета в воздухе (как реализовано на сервере РЕПКА-4)
*скрипт на "уборщицу" трупов и покинутых самолетов на земле

Помогите пожалуйста реализовать задуманное! Много жаждущих будут Вам признательны!

podvoxx
23.10.2012, 08:41
podvoxx, выручай, надежда на тебя, никто не может помочь в вопросе посадки гидросамолетов на воду... хотя в условиях задано.

К сожалению сам не знаю, пробовал больше года назад, тогда тоже не садились. Видимо не исправили.

41Sqn_Banks
25.10.2012, 19:32
It was a single-mission sample, i tryed step by step check :), but now it seems like i know what is the problem:. In multiplayer label will not sent to player which is author of this label - just to not doubling labels, exept case when labels sent to everybody. So, when you use that code you make label with player who enter the plane as author, sever will not send it to this player. But You can change the author of label, then it would be send to remote player, server is good candidate to be author(couse hi makes it really) like this :
using maddox.game;
using maddox.game.world;
using maddox.GP;
using System.Collections.Generic;
using Math = System.Math;


public class Mission : AMission
{

public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
Point2d p ;
p.x = actor.Pos().x;
p.y = actor.Pos().y;
GPUserLabel ul = GamePlay.gpMakeUserLabel(p, GamePlay.gpPlayer(), actor.Name(), GamePlay.gpTimeofDay(), (int)GPUserIconType.Plane);
GamePlay.gpDrawUserLabel(ul);
p.x -= 300;
ul.pos = p;
ul.Text = "Show player";
GamePlay.gpDrawUserLabel(new Player[] { player }, ul);

p.x += 600;
p.y += 300;
ul.pos = p;
ul.Text = "Show army";
GamePlay.gpDrawUserLabel(0,ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(1, ul);
p.x += 300;
p.y += 300;
ul.pos = p;
GamePlay.gpDrawUserLabel(2, ul);
}

}
it should draw 3 labels - actor.Name, Show player and Show army , try it please.[COLOR="Silver"]


Does GamePlay.gpPlayer() work for dedicated server, too?

naryv
25.10.2012, 22:14
Does GamePlay.gpPlayer() work for dedicated server, too? yes, just tryed this mission runing on dedicated server, join it, and enter the spit flying in mission, get 3 labels as it should be done.

eekz
08.11.2012, 23:13
Как заставить транспорт двигаться по дороге?

podvoxx
08.11.2012, 23:15
Как заставить транспорт двигаться по дороге?

Нужно поставить вэйпоинты рядом с дорогой, сплайн пути сам прилипнет к ней. Вэйпоинты как и объекты ставить кнопкой Ins

eekz
08.11.2012, 23:30
В том то и проблема что если единица транспорта одна то она едет не по дороге а в 5ти метрах правее дороги. Если поставить больше 1-го то остальные в коллоне едут по дороге но когда догоняют первого то утыкаются.

Нашел выход из положения. Для того чтобы транспорт, или коллона правильно встала на дорогу нулевой вейпоинт надо ставить на удалении от дороги (метров 50-100), чтобы 1-я машинка могла сама зеахеать на дорогу.

Извините если выполнил роль КО.

eekz
10.11.2012, 18:35
Обладает ли ИИ машинок некими скрытыми настройками ИИ, как например опытность у самолетов?

naryv
10.11.2012, 21:56
Обладает ли ИИ машинок некими скрытыми настройками ИИ, как например опытность у самолетов?Нет, все одинаковые

podvoxx
10.11.2012, 22:15
Сегодня сорвался вылет из-за такой ошибки, всех выкинуло с сервера, а сам он пропал из списка. В логе есть такое:



[20:59:53] =================================================
[20:59:53] System.IO.IOException: Процесс не может получить доступ к файлу "C:\Users\Администратор\Documents\1C SoftClub\il-2 sturmovik cliffs of dover\cache\37946059426376995.jpg", так как этот файл используется другим процессом.
[20:59:53] в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
[20:59:53] в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
[20:59:53] в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
[20:59:53] в SjFVnQBTrusTVvpug1l.3HqitlBPlsZPiK5Ivpk.A0TTTpa1FtU(UInt64 , String , Int32 )
[20:59:53] =================================================

Была включена подгрузка скинов, которые использовались для опознавания звеньев. Из-за чего такая ошибка может быть? Может из-за имени пользователя на русском("Администратор") такое быть?

naryv
10.11.2012, 22:20
Сегодня сорвался вылет из-за такой ошибки, всех выкинуло с сервера, а сам он пропал из списка. В логе есть такое:



[20:59:53] =================================================
[20:59:53] System.IO.IOException: Процесс не может получить доступ к файлу "C:\Users\Администратор\Documents\1C SoftClub\il-2 sturmovik cliffs of dover\cache\37946059426376995.jpg", так как этот файл используется другим процессом.
[20:59:53] в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
[20:59:53] в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
[20:59:53] в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
[20:59:53] в SjFVnQBTrusTVvpug1l.3HqitlBPlsZPiK5Ivpk.A0TTTpa1FtU(UInt64 , String , Int32 )
[20:59:53] =================================================

Была включена подгрузка скинов, которые использовались для опознавания звеньев. Из-за чего такая ошибка может быть? Может из-за имени пользователя на русском("Администратор") такое быть? ну вообще пишет, что другим процессом файл держится, не мог он быть открыт во вьюере или редакторе каком-то? По идее не должно такое к крашу сервера приводить. Крашдамп с сервера есть?

podvoxx
10.11.2012, 22:31
ну вообще пишет, что другим процессом файл держится, не мог он быть открыт во вьюере или редакторе каком-то? По идее не должно такое к крашу сервера приводить. Крашдамп с сервера есть?
Крэшдампа нет. Скины кэшированные не открывались вручную, возможно какие-то серверные программы вмешались. Хотя открыл в пэинте, поставил точку - файл сохранился без проблем, т.е. доступ есть.

naryv
11.11.2012, 00:07
Крэшдампа нет. Скины кэшированные не открывались вручную, возможно какие-то серверные программы вмешались. Хотя открыл в пэинте, поставил точку - файл сохранился без проблем, т.е. доступ есть.может быть антивирус?

podvoxx
11.11.2012, 00:23
может быть антивирус?
Возможно. Или еще что-нибудь служебное, будем смотреть. Кстати как происходит подгрузка? Она обычно с задержкой, как раз все собрались и тогда началось(через мин. 15-20 после появления на полосе)

podvoxx
11.11.2012, 18:46
А для статиков получается нет метода подобного такому?


OnActorCreated(int missionNumber, string shortName, AiActor actor)

Просто храню акторы по номеру подмиссии, а статики только в массив можно выбрать, но номера подмиссии в свойствах нет. Т.е. загрузить я их могу, учесть уничтожение могу, а вот задестроить по номеру подмиссии не получится. Отбирать по радиусу не получится, т.к. колонны сильно растянуты

naryv
12.11.2012, 02:32
Возможно. Или еще что-нибудь служебное, будем смотреть. Кстати как происходит подгрузка? Она обычно с задержкой, как раз все собрались и тогда началось(через мин. 15-20 после появления на полосе) Подгрузка, чтобы не вызывать фризов при появлении нового игрока идёт постепенно - по частям, пресылаясь в не особо нагруженные моменты(когда нет большого количества стрельбы и т.п.)


А для статиков получается нет метода подобного такому?


OnActorCreated(int missionNumber, string shortName, AiActor actor)

Просто храню акторы по номеру подмиссии, а статики только в массив можно выбрать, но номера подмиссии в свойствах нет. Т.е. загрузить я их могу, учесть уничтожение могу, а вот задестроить по номеру подмиссии не получится. Отбирать по радиусу не получится, т.к. колонны сильно растянуты нет, ивента такого нет, в полном имени статика, емнип, есть номер миссии в котором он загружен.
Кстати, о колоннах, я посмотрел, если чиф утыкается в препятствие - он 40 секунд стоит ничего не делая, потом препятствие пытается объехать, если не выходит ещё 40 сек стоит, но в итоге должен выезжать, у меня во всяком случае все , даже повтыкавшись в итоге доезжают до места...

podvoxx
12.11.2012, 08:42
нет, ивента такого нет, в полном имени статика, емнип, есть номер миссии в котором он загружен.
Точно, это должно сработать)) Спасибо!

eekz
12.11.2012, 14:01
По какому принципу NPC-машинка ставится на spline_road маршрут, если сделать так как указано в этом моем посте http://www.sukhoi.ru/forum/showthread.php?t=76511&p=1923560&viewfull=1#post1923560 ?
И есть ли способ как-то регулировать точку появления машинок на таком маршруте?

podvoxx
12.11.2012, 14:20
По какому принципу NPC-машинка ставится на spline_road маршрут, если сделать так как указано в этом моем посте http://www.sukhoi.ru/forum/showthread.php?t=76511&p=1923560&viewfull=1#post1923560 ?
И есть ли способ как-то регулировать точку появления машинок на таком маршруте?

Точка появления только в точке первого вэйпоинта. Чтобы ее сместить нужно смещать этот стартовый вэйпоинт. Строится прямой отрезок пути к дороге, потом они по ней едут

eekz
12.11.2012, 14:42
У меня при таком раскладе как на скриншотах получается что все машинки респавнятся на сплайн_роуд маршруте независимо от места где их поставить на карте, причем одни движутся в конечную точку маршрута, дагие в начальную - и так по кругу. Я почему спрашиваю, просто таким способом - одной командой на маршрут можно поставить сколько угодно одиночных машинок.

podvoxx
13.11.2012, 09:10
1. Вот таких сообщений при уничтожении артиллерии собрал


[22:51:28] [3055] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!
[22:51:32] [3185] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!
[22:51:45] [3597] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!


Таких сообщений 7, а юнитов артиллерии всего было 16, т.е. получается не все вызывают такую ошибку. Артиллерия - это танки и броневики из категории "Артиллерия". Что это может быть?

2. Каким событием можно отследить смерть пилота(от аварии или пули) в онлайне на выделенном?

naryv
13.11.2012, 11:03
По какому принципу NPC-машинка ставится на spline_road маршрут, если сделать так как указано в этом моем посте http://www.sukhoi.ru/forum/showthread.php?t=76511&p=1923560&viewfull=1#post1923560 ?
И есть ли способ как-то регулировать точку появления машинок на таком маршруте? стартуют в случайном сегменте сплайновой дороги, таким образом, чтобы в одном сегменте не было двух чифов. Точку появления, к сожалению, задавать нельзя:(.


1. Вот таких сообщений при уничтожении артиллерии собрал


[22:51:28] [3055] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!
[22:51:32] [3185] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!
[22:51:45] [3597] ERROR [AI] callStateByName(): state "Main.OnActorDied" not found!


Таких сообщений 7, а юнитов артиллерии всего было 16, т.е. получается не все вызывают такую ошибку. Артиллерия - это танки и броневики из категории "Артиллерия". Что это может быть? это пропущенный рудимент, на такие сообщения не надо обращать внимание, они ни на что не влияют.


2. Каким событием можно отследить смерть пилота(от аварии или пули) в онлайне на выделенном?
public override void OnPersonHealth(AiPerson person, AiDamageInitiator initiator, float deltaHealth)
{
base.OnPersonHealth(person, initiator, deltaHealth);
} для игрока надо взять "person.Player()" (не забудьте проверить не null ли он, для АИшников, емнип null), person.Name() - игровое имя раненого или убитого,person.Player().Name() - имя игрока, соответственно, deltaHealth - степень повреждения, 1 - убили, 0-1, разные степени ранения, initiator - автор повреждений.

podvoxx
13.11.2012, 11:07
public override void OnPersonHealth(AiPerson person, AiDamageInitiator initiator, float deltaHealth)
{
base.OnPersonHealth(person, initiator, deltaHealth);
} для игрока надо взять "person.Player()" (не забудьте проверить не null ли он, для АИшников, емнип null), person.Name() - игровое имя раненого или убитого,person.Player().Name() - имя игрока, соответственно, deltaHealth - степень повреждения, 1 - убили, 0-1, разные степени ранения, initiator - автор повреждений.

Спасибо :thx:

podvoxx
13.11.2012, 16:01
Еще вопрос, скорее уже NET больше касается. Чем больше добавляю кода, тем больше беспокоюсь :)
Создается много классов и переменных, многие из которых используются один раз или ограниченное кол-во времени. Они куда деваются потом? Вроде читал, что есть какой-то сборщик мусора, который очищает память от неиспользуемых данных. Есть еще деструкторы, но не уверен что правильно понял их назначение(и вроде как их использовать с умом надо). Или это особого значения не имеет?
Ресурсов сервер с миссией ест не много вроде.

Small_Bee
13.11.2012, 16:20
Еще вопрос, скорее уже NET больше касается. Чем больше добавляю кода, тем больше беспокоюсь :)
Создается много классов и переменных, многие из которых используются один раз или ограниченное кол-во времени. Они куда деваются потом? Вроде читал, что есть какой-то сборщик мусора, который очищает память от неиспользуемых данных. Есть еще деструкторы, но не уверен что правильно понял их назначение(и вроде как их использовать с умом надо). Или это особого значения не имеет?
Ресурсов сервер с миссией ест не много вроде.

GS вообще тема достаточно сложная и неоднозначная. Имхо пока достаточно знать, что все объекты, на которые не осталось ссылок в видимой области, рано или поздно будут уничтожены без твоего вмешательства. Если класс не реализует IDisposable, в общем случае можно быть спокойным, какие-то специальные действия по его уборке не требуются.
Если реализует, то вполне достаточно делать так
using (DisposableObject obj = new DisposableObject())
{
obj.SomeMetod();
// какой-то код
}

По выходу за блок using на объекте будет вызван Dispose(), дальше его сборщик приберет.

Ну и в нашем случае, если ты объект не создавал, то не тебе его диспозить.

podvoxx
13.11.2012, 16:28
GS вообще тема достаточно сложная и неоднозначная. Имхо пока достаточно знать, что все объекты, на которые не осталось ссылок в видимой области, рано или поздно будут уничтожены без твоего вмешательства. Если класс не реализует IDisposable, в общем случае можно быть спокойным, какие-то специальные действия по его уборке не требуются.
Если реализует, то вполне достаточно делать так
using (DisposableObject obj = new DisposableObject())
{
obj.SomeMetod();
// какой-то код
}

По выходу за блок using на объекте будет вызван Dispose(), дальше его сборщик приберет.

Ну и в нашем случае, если ты объект не создавал, то не тебе его диспозить.

Ну и отлично. Но на всякий случай уточню.
Создаем два экземпляра класса Airfield:



Airfield zzz;

Airfield xxx = new Airfield();
zzz = xxx;

Airfield yyy = new Airfield();
zzz = yyy;

Класс xxx будет сборщиком собран из-за смены ссылки zzz на другой экземляр?

Small_Bee
13.11.2012, 16:36
Ну и отлично. Но на всякий случай уточню.
Создаем два экземпляра класса Airfield:



Airfield zzz;

Airfield xxx = new Airfield();
zzz = xxx;

Airfield yyy = new Airfield();
zzz = yyy;

Класс xxx будет сборщиком собран из-за смены ссылки zzz на другой экземляр?

Если это кусок метода, то собраны будут оба после выхода за метод. )
Если zzz за пределами метода (скажем поле того же класса, где и метод), то явно, что при выходе за метод на на xxx ссылок больше нет, и он будет собран.

podvoxx
13.11.2012, 16:38
Если это кусок метода, то собраны будут оба после выхода за метод. )
Если zzz за пределами метода (скажем поле того же класса, где и метод), то явно, что при выходе за метод на на xxx ссылок больше нет, и он будет собран.
Спасибо, ясно. Надеюсь сиквел на с++ не будут переделывать, смотрел тут старые скрипты для армы, не хочу такой гибкости)) Хочу ставить точку и выбирать нужную строчку :)

Zed4ever
19.11.2012, 13:28
Просьба тем, у кого под рукой есть скрипт с выводом повреждений в консоль:
проверьте, плз, корректно ли выводится название оружия нанёсшего урон на Е4 (или Е3).
Поясню - сейчас командер от Тимофея выводит в лог чем было нанесено повреждение.
По Е4 имеем следующу картину - если 1-е попадание было из пулемёта, то все остальные пишут тоже как "попадание из пулемёта", если 1-е попадание из пушки, то всё какбудто бы из пушки повредилось.
З.Ы. Исключение - ранения персонажей. У них, похоже, пишется инверсия от 1-го попадания. Е4 (Е3) выбран потому, как у него есть вооружение с разным названием.
З.Ы.Ы. Либо, вложите скрипт - я сам проверю.

eekz
20.11.2012, 22:10
Из-за чего могут пропадать все декали мелкого калибра после достижения определенного их количества? (подробности по ссылке у меня в подписи)