Нет разницы кто кого грузил, -1 будет слушать все подмиссии.
Вид для печати
Как совет - пробуй такие вещи в отдельных тестовых миссиях - так понятнее будет, и гарантия того, что нигде ничего не мешается.
Может еще проблема в том, что подмиссия загружается уже после старта битвы. Листенера тогда лучше назначать например в OnMissionLoaded. Так как OnMissionLoaded вызывается во всех подмиссиях вне зависимости от листенера надо сначала проверить на соответствие фактического номера миссии переданному в параметре. Если совпадает (значит загрузилась именно эта миссия) то ставь слушателя -1.
Что это за ошибка? Скорее всего с коллизией связана, но отловить не получается пока. И насколько она критична? Появляется не всегдаКод: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 )
Это не скрипт, походу моделька какая-то.
А можно миссию, где вылезает ошибка, посмотрим.
PS в эту бету включили работу с стационарами, ивенты при убийствах домиков и стационаров и переводчик. Попробуйте:)
Для переводчика - перед вызовом прописать путь к файлу словаря GamePlay.gpDictionaryFilePath , можно в OnBattleStarted(). Словари - section file вида:или xmlСкрытый текст:
Скрытый текст:
вызывается 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 добавили ещё домики в стационарные объекты но есть проблема - стационары планировались небольшими не очень прочными объектами и ДМ их заточена под такие условия, так что большие фабрики к сожалению могут убиваться достаточно легко бомбами.
Ааааа бонба!!!!!!!!!:bravo:
Абалдеть, как раз войнушку собирался начинать, очень пригодится. Спасибо :bravo:
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 ;))
А как определить номер подмиссии (int missionNumber), которой принадлежит статик?Код:public override void OnStationaryKilled(GroundStationary _stationary, AiDamageInitiator initiator, int eventArgInt)
{
base.OnStationaryKilled(_stationary, initiator, eventArgInt);
}
Есть две подмиссии с одинаковыми зданиями, событие OnStationaryKilled срабатывает в обеих подмиссиях независимо от MissionNumberListener, мне же нужны статики только определенной подмиссии
Спасибо за отличные новости!
:) Sorry, i know just one phrase in german - "Hande hoch" :) so it's just russian words with latin alphabet :)
напомните, пожалуйста в понедельник, я посмотрю, но боюсь, что номер подмиссии может не оказаться в свойствах стационара.
:) и желательно, конечно, это всё посмотреть - потестировать, чтобы к финальному патчу исправить косяки
При ошибке:
0 - пишет ключ
1 - ключ/ название ошибки
2 - расширенное описание ошибки указанием ключа и языка перевода
Пока только на ошибки смотрю :)
Что-то путь не получается задать. Прописываю:
Получается ошибкаКод:GamePlay.gpDictionaryFilePath = "missions\\SMP\\Friday on my mind\\submissions\\BlueTask5\\BlueMilitaryDepot\\dictionary.xml";
В общем проблема с путем. Как его правильно задавать? Пробовал полный, короткий, тхт и хml, слэши в разные стороны наклонялКод:[13] ERROR [SYSTEM] Translator error NoDictionaryPath; DictionaryPath = ; Message : blueStaticKillLabel ; Language : ru
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?
1. Что-то я запутался с триггерами. В миссии есть такой: Target Pass Through, срабатывает на красную наземку. Нужно посчитать танчики, вошедшие в зону триггера. Триггер срабатывает только один раз(когда первый танк подъезжает), хотя activ вроде переключаю. Или нельзя так юниты посчитать(этот триггер вроде на проход работает)?
2. Пока не могу заставить работать перевод, но есть пожелание по xml файлу. Добавить туда еще один раздел "верхнего" уровня, как здесь сделал Кодиак- <LanguageSection name="Messages">, т.е. добавить еще один уровень. Это упростит работу с ним при большом количестве сообщенийКод: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;
}
}
3. Планируется ли добавить в редактор объект мост? Во Франции с этим беда, да и вообще они очень важными могут быть(как было исторически) при правильной реализации. Можно сделать хотя бы по принципу ж/д, т.е. без мостов. Или чтобы мосты прокладывались при установке сплайновой дороги - тогда можно было бы переправы организовать, при условие что дороги можно будет грузить через подмиссию.
4. Возможно ли добавить в редактор объект "взрыв" с настраиваемой мощностью(ну и таймер наверное нужен). Это пригодится для создания артобстрелов, можно даже организовать корректировку артогня с воздуха.
Добавил, в след. патче будет наверное, как параметр в ивенте будет приходить.
массивы со стационарами так заполняются :
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 с заданой страной.
возможно задаёте после вызова переводчика? Вот так у меня работает, с заданием в OnBattleStarted() :
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 .Цитата:
public override void OnBattleStarted()
{
base.OnBattleStarted();
GamePlay.gpDictionaryFilePath = "E:\\BoB\\missions\\tests\\dictionary.xml";
}
так Вы дизейблите триггер после срабатывания - он перестают быть активным и никаких событий не выдаёт, поэтому и получается одно срабатывание.
не очень понятно зачем.
тут пока ничего не могу сказать, мост как отдельный объект не будет учитываться пасфайндингом, и по такому машинки не поедут.
не знаю, вряд-ли. Есть бомба в стационарах которая должна взрываться когда на неё кто то наезжает, можно наверное так :)
PS где-то справшивали про отображение ников в маркерах - в этой бете вернули их.
Спасибо за ответы!
При наличии динамического меню и различных подмиссий, выдающих сообщение это упростит редактирование и чтение. Сейчас все сообщения получаются в одном едином списке. В 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";
Не срабатывает триггер после первого раза.Код: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;
Может вообще не так делаю?