Крайний раз редактировалось podvoxx; 09.01.2012 в 06:06.
Хотелось бы уточнить
public override void OnBattleStarted() - это переопределение метода, в него мы заносим то, что нужно сделать при старте миссии-хоста (?), здесь загружаем миссии и слушаем их все. Можно получить какое-то нормально определение, что это такое? И что в нем делает это: base.OnBattleStarted();.Код:public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; GamePlay.gpPostMissionLoad("missions\\Single\\Samples\\TestSubmissions\\TestSubMission1.mis"); GamePlay.gpPostMissionLoad("missions\\Single\\Samples\\TestSubmissions\\TestSubMission2.mis"); GamePlay.gpPostMissionLoad("missions\\Single\\Samples\\TestSubmissions\\TestSubMission3.mis"); }
У меня есть только такое определение:
И:В начале любой миссии "Ил-2.БЗБ" вызывается метод '''public virtual void OnBattleStarted()'''. Именно при его помощи мы будем загружать под-миссии при старте основной миссии (миссии-хоста):
Оба неустраивают, хотелось бы ясности.base.OnBattleStarted() - метод вызова, выполняемый один раз при инициализации.
Насколько я понимаю, это случается, когда сервер нажимает кнопку Battle! или если выделенный, то когда пишет battle start в консоли launcher.exe.
Есть еще другой метод Init, который происходит при загрузке миссии емнип.
Для чего используется base. ... во многих методах самому интересно.
Еще смежный вопрос: onMissionLoaded если прописан в миссии хосте, будет срабатывать при подгрузке подмиссий или только хоста? Соответственно, в подмиссию можно его включать и, например запускать timeout некоторых процессов подмиссии в методе onMissionLoaded ? Например для подмиссии:
OnBattleStarted() если присутствует в подмиссии при загрузке подмиссии будет срабатывать?Код:onMissionLoaded ... timeout ... { destroy actors и перезагрузить саму себя }
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
В тех скриптах, что у меня есть - этот метод прописывается в подмиссии и значит срабатывает, вот пример naruv'а scripttest
Код:public override void OnBattleStarted() { AiActor actor = GamePlay.gpActorByName("Static0"); if (actor != null) { serverMessage("Объект найден"); } else { serverMessage("Объект не найден"); } }
OnBattleStarted()
Метод вызывается один раз при старте битвы. Точнее - как только битва уже стартовала.
OnMissionLoaded(...)
Вызывается как только загрузилась новая миссия. Причем вызывается во всех ранее загруженных миссиях.
Роль ключевого слова base. Вызывается переопределяемый метод класса-предка. На пример - у нас есть класс MyMission, предком которого является AMission. В классе MyMission переопределен OnBattleStarted(), в котором мы пишем на экран - "Битва началась!". Определим еще один класс RealMission, предком которого будет класс MyMission, и так же, переопределим в нем метод OnBattleStarted(), где на экран выведем - "Таки да, началась!" Что произойдет, если мы создадим экземпляр RealMission и вызовем в нем OnBattleStarted()? Как и предполагается, будет выведена надпись "Таки да, началась!". Получается, весь код, который мы писали в MyMission в том же методе, никак не используется. Для этого и существует base. Т.е. Этим мы вызовем метод предка. Т.е., если в реализации RealMission.OnBattleStarted() вначале дописать base.OnBattleStarted(), мы получим две последовательно выведенные надписи - "Битва началась!" и "Таки да, началась!".
Спасибо за подробный ответ!
Можно это назвать вызовом метода MyMission из RealMission, после которого уже идет выполнение самого RealMission?
А если добавить третий класс SuperMission, предок которого RealMission, как тогда добраться до MyMission? Или так делать нельзя?
Крайний раз редактировалось podvoxx; 05.10.2011 в 13:32.
Нужна помощь. Не могу понять, почему в миссии на карте Степи чтобы сменить самолет, нажав ESC нужно сначала кликнуть на флажек страны. В других миссиях достаточно клика на спауне своей же стороны или клика на карте. В этой миссии ничего не происходит, пока не кликнешь на флажек своей стороны (или противника). При этом появляется окно "Вы действительно хотите покинуть свой самолет?".
В настройках реализма сервера все пересадки полностью разрешены, все галочки с чекбоксов сняты. Скрипта нет.
При попытке добавить в миссию
Army 1 gb
Army 2 de
редактор виснет на загрузке миссии (переходит в полноэкранный режим без меню и возможности выхода).
Миссию прилагаю.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Это правильный формат?
Встречал еще такой:Код:void gpLogServer(Player[] to, string msg, new object[] parms) Пример: GamePlay.gpLogServer (null, "OnTrigger ({0} | {1} | {2}) wurde ausgelost", new object [] {missionNumber, shortName, active});
Какой из них правильный и нет ли разных вариантов, как для gpHUDLogCenterКод:void gpLogServer(maddox.game.Player[] to, string format, object[] args)
Можно ли запрограммировать некий админский вход на сервер, чтобы на сервере без внешних видов админ мог пользоваться внешними видами для отладки?
Как это сделать?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Прошу пояснить первую строчку.
Имеются подмиссии, в каждой триггер с именем "WinCondition1", "WinCondition2", "WinCondition3" ... "WinConditionn". При срабатывании любого триггера, он проверяется в условии.Код:Чтобы не копировать постоянно названия триггеров, мы можем использовать такой код: if (shortName.Substring(0, 12).Equals("WinCondition") && active) { WinConditionCounter++; GamePlay.gpGetTrigger(shortName).Enable = false; }
shortName.Substring(0, 12) позволяет учитывать только первые 12 символов названия триггеров. Т.е. мы можем добавлять сколь угодно подмиссий с именами типа "WinConditionn" и не портить при этом код главного скрипта. Я прав? Что означает ноль?
GamePlay.gpGetTrigger(shortName).Enable = false; - переключает триггер в состояние OFF?
Тогда GamePlay.gpGetTrigger(shortName).Enable = enable; наоборот, включает ?
П.С.Прошу прощения за простые вопросы, но с работы не могу нормально пользоваться поиском, а дома скорее всего не будет времени этим заняться.
Все верно. В многих случаях нумерация символов с строке начинается с нуля (в других языках может и с единицы) Соответственно первые двенадцать символов будут иметь индексы с 0 до 11. В данном случае первая цифра (0) означает индекс символа, с которого надо начинать отсчет. "12" означает кол-во символов, которые надо забрать. Статья на MSDN.
--- Добавлено ---
Пинг получить можно.. Кикнуть скриптом - не видел.
Пинг тоже хорошо, но хотелось бы еще настройки сети клиента получить.
Вот это из БзБ или из Ил-2?
Если из БзБ, то можно скриптом сгенерить (и наверное запустить?) .cmd в который писатьКод:[17:31:32] <ban> [17:31:32] [ADD] [REM] [NAME [<name>]] [PATTERN [<pattern>]] [CLEAR] [LOAD [<file name>]] [SAVE [<file name>]] <kick<player - kicks player matching pattern (wildcards: ? - matches one charcter, * - matches any character) <ban<player - bans player matching pattern (wildcards: ? - matches one charcter, * - matches any character) <banlist - list banned players <unban<player - remove ban for payer matching pattern (use <banlist to see what can be unbanned)
kick<player>
Только как такой файл генерить в .net не знаю. У Веточки видел генерацию списков неких.
А <ban> точно работает. Я себя банил. В крайнем случае можно его вместо кика использовать.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Гм.. В принципе, это идея однако.. Скриптом сгенерить батник и запустить его... Только я не сильно соображаю в этом - например, есть ли простой направить команды из этого батника в консоль? Можно конечно написать свою консольку, которая бы через telnet коннектилась к консоли сервера и отправляла туда команды.
Развожу репки и мейн-кунов
Ищу человека территориально из Крымска, Новороссийска или Краснодара, с "приличным" интернетом, просьба "не пыльная", но очень нужно, буду благодарен.
Стучать в личку, в мыло repka@inbox.ru или skype repka-78rus
help kick выдает
<kick> <name>
А любой .cmd в папке конфигов игры все сразу в консоль передает. Так что генери и запускай kick.cmd с содержанием
kick <name>Желательно сначала предупреждения писать на экран многократные.
Сейчас проверил, кикает на ура, раньше такого не былоКакие у вас ники игровые, кстати?
Пинг до 180 где-то ограничить видимо имеет смысл?
Скрипт может отправить сообщение от Server to Server. думаю, так можно и команды отправлять?
log: Server to [Server]: Captured BR.20M are used by UK side only. Check your fire!
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
@ naryv
В IL-2 (на ADW, например) можно было кикать игроков за неправильно установленные сетевые настройки (запрещалось ставить в настройках LAN при большом количестве народа).
Как это можно сделать в БзБ? Как получить в скрипт скорость соединения клиента и как его кикнуть скриптом? (Вроде можно в банлист тоже добавить?) Как вообще из скрипта команды серверные посылать? Например, добавить в банлист, выйти из launcher.exe, и т.д.
--- Добавлено ---
Вроде все верно.
Возможно считают с 0 до 11. Часто такое встречал (от 0 до < 12).
Откуда кстати такой код? Может, там еще что интересное есть? Не видел раньше.
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
Из перевода туторов Kodiak'а
Как можно показывать разный онлайн-брифинг в зависимости от языка клиента, т.е. русским один, а всем остальным на английском?
Как можно отправлять консольные команды из скрипта сервера в консоль сервера?
...зелёные горят.
----------------------
i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.
если общий бриф(англ) в файле "1.briefing" то русский - в файле "1_ru.briefing" в полном редакторе выбираем меню Редактировать->языки там выбираем нужный , тогда брифинг сохранится с выбранным языком, ну или просто написать английский, потом в текстовом редакторе изменить на русский и переименовать добавив к названию миссии "_ru"
вот так попробуйте:
System.Console.WriteLine("bla-bla-bla");
Don't happy, be worry