???
Математика на уровне МГУ

Страница 29 из 30 ПерваяПервая ... 19252627282930 КрайняяКрайняя
Показано с 701 по 725 из 789

Тема: Вопросы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Парни! Простите за нубский вопрос. AiAircraft и классы из part не позволяют определить какую систему измерения использует панель приборов данного крафта, не хотелось бы переопределять классы (память), по армии же будет не слишком универсально (что там серверострители удумают?), ни у кого идей нет на этот счет?
    А не переопределяй классы. переопредели поведение.
    Я не в курсе, как у тебя все устроено, но к примеру.

    public double AircraftObserver.GetIAS(IMeasureConverter converter)

    где AircraftObserver твой класс, который следит за самолетом.
    GetIAS метод, возвращающий IAS
    IMeasureConverter интерфейс, ответственный за перевод значений из одной системы в другую. Содержит набор методов для перевода м/с в что-то еще, метры в что-то еще и т.п. AircraftObserver получает сырые данные и переводит их в требуемый формат, используя класс с этим интерфейсом.
    Можно класс этот к примеру вообще в конструкторе передавать.
    Юзер к примеру может сам выбрать, в какой системе ему данные возвращать. Тогда скажем класс UserDefinitions будет в одном из свойств содержать конкретную, нужную именно этому юзеру реализацию IMeasureConverter. Оттуда ее берем и передаем в методе GetIAS и остальных.

    Т.е. у тебя будет набор "переводчиков" IMeasureConverter на все случаи жизни, подставляй нужный.

  2. #2
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    А не переопределяй классы. переопредели поведение.
    Я не в курсе, как у тебя все устроено, но к примеру.

    public double AircraftObserver.GetIAS(IMeasureConverter converter)

    где AircraftObserver твой класс, который следит за самолетом.
    GetIAS метод, возвращающий IAS
    IMeasureConverter интерфейс, ответственный за перевод значений из одной системы в другую. Содержит набор методов для перевода м/с в что-то еще, метры в что-то еще и т.п. AircraftObserver получает сырые данные и переводит их в требуемый формат, используя класс с этим интерфейсом.
    Можно класс этот к примеру вообще в конструкторе передавать.
    Юзер к примеру может сам выбрать, в какой системе ему данные возвращать. Тогда скажем класс UserDefinitions будет в одном из свойств содержать конкретную, нужную именно этому юзеру реализацию IMeasureConverter. Оттуда ее берем и передаем в методе GetIAS и остальных.

    Т.е. у тебя будет набор "переводчиков" IMeasureConverter на все случаи жизни, подставляй нужный.
    Спасибо! Мда, так мыслить классами мне еще учиться и учиться. Правда, мне этот вариант не совсем подходит.
    Задача - определить какие данные идут, преобразовать их не проблема (можно и на клиенте).
    Так сказать для аутентичной внешней панели, чтоб она сама настраивалась : идут данные в футах (игрок выбрал английски самолет) - панель натягивает скин с приборами в британской системе, идут метры - скин с приборами в метрической системе. Как-то так.
    Не найду свойство однозначно определяющее страну-производителя самолета
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  3. #3

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Спасибо! Мда, так мыслить классами мне еще учиться и учиться. Правда, мне этот вариант не совсем подходит.
    Задача - определить какие данные идут, преобразовать их не проблема (можно и на клиенте).
    Так сказать для аутентичной внешней панели, чтоб она сама настраивалась : идут данные в футах (игрок выбрал английски самолет) - панель натягивает скин с приборами в британской системе, идут метры - скин с приборами в метрической системе. Как-то так.
    Не найду свойство однозначно определяющее страну-производителя самолета
    Страна-производитель, имхо, тебе мало поможет. Потому что у одной и той же страны та же скорость может измеряться и в милях и в узлах (поправьте, если не прав).

    Я бы примерно вот так сделал, навскидку.

    Класс AircraftObserver, уже упомянутый. В OnTickGame обновляет состояние; смотрит за GamePlay.gpPlayer().Place() - самолет/что угодно, где сидит игрок в сингл-плеере.
    Он же, в зависимости от того, что в GamePlay.gpPlayer().Place() создает требуемый конкретный экземпляр IMeasureConverter (по стране, по типу самолета или предпочтениям юзера)
    Структура, скажем AircraftParameters, содержащая снятые в текущей итерации данные по самолету и идентификатор скина, согласно текущему IMeasureConverter
    В AircraftObserver публичный метод, возвращающий текущую AircraftParameters по запросу с клиента. Данные сериализуются и отправляется клиенту.
    Клиент на основании полученных данных ставит нужный скин и нужные положения стрелочек/индикаторов. Все.

    Можно вообще задачу перевода из одной системы в другую отдать клиенту, что бы сама миссия поменьше считала, отдавать сырые данные и идентификатор скина/"во что надо переводить".
    Крайний раз редактировалось Small_Bee; 09.12.2012 в 21:19.

  4. #4
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    Страна-производитель, имхо, тебе мало поможет. Потому что у одной и той же страны та же скорость может измеряться и в милях и в узлах (поправьте, если не прав).

    Я бы примерно вот так сделал, навскидку.

    Класс AircraftObserver, уже упомянутый. В OnTickGame обновляет состояние; смотрит за GamePlay.gpPlayer().Place() - самолет/что угодно, где сидит игрок в сингл-плеере.
    Он же, в зависимости от того, что в GamePlay.gpPlayer().Place() создает требуемый конкретный экземпляр IMeasureConverter (по стране, по типу самолета или предпочтениям юзера)
    Структура, скажем AircraftParameters, содержащая снятые в текущей итерации данные по самолету и идентификатор скина, согласно текущему IMeasureConverter
    В AircraftObserver публичный метод, возвращающий текущую AircraftParameters по запросу с клиента. Данные сериализуются и отправляется клиенту.
    Клиент на основании полученных данных ставит нужный скин и нужные положения стрелочек/индикаторов. Все.
    Вот и где их найти?
    Можно вообще задачу перевода из одной системы в другую отдать клиенту, что бы сама миссия поменьше считала, отдавать сырые данные и идентификатор скина/"во что надо переводить".
    Так и хочу, но getParameter отдает данные в системе конкретных приборов кокпита, если пересел с мерса в спит данные тут-же идут уже в футах/милях. И вот ищу этот «идентификатор скина», сиречь идентификатор кокпита. Есть возможность читать абсолютные данные (Z_Orientation и т.д., они всегда в метрах) как сейчас сделал в версии Beta 2.3, но это немного читерно , в онлайн точно не стоит.
    Крайний раз редактировалось LePage; 09.12.2012 в 22:18.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  5. #5

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Вот и где их найти?
    Брать самолет, смотреть какие у него там приборы и в чем передают, и делать конвертер персонально. По каждому летабу. После смотреть на AiAircraft.InternalTypeName() и подставлять соответствующий.
    Например будет у тебя метод IMeasureConverter GetConverterForAircraft(string internalTypeName).

    Отсюда (примерный код)

    Код:
    AiAircraft airc = GamePlay.gpPlayer().Place() as AiAircraft;
    if (airc != null)
    {
        IMeasureConverter converter = GetConverterForAircraft(airc.InternalTypeName());
        AircraftObserver observer = new AircraftObserver(airc, converter);
    
        // юзаем observer;
    
    }


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

    Цитата Сообщение от LePage Посмотреть сообщение
    в онлайн точно не стоит.
    Если сделаешь онлайн, а после объяснишь, как сделал, цены тебе не будет!

  6. #6
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Цитата Сообщение от Small_Bee Посмотреть сообщение
    Брать самолет, смотреть какие у него там приборы и в чем передают, и делать конвертер персонально. По каждому летабу. После смотреть на AiAircraft.InternalTypeName() и подставлять соответствующий.
    Например будет у тебя метод IMeasureConverter GetConverterForAircraft(string internalTypeName).

    Отсюда (примерный код)

    Код:
    AiAircraft airc = GamePlay.gpPlayer().Place() as AiAircraft;
    if (airc != null)
    {
        IMeasureConverter converter = GetConverterForAircraft(airc.InternalTypeName());
        AircraftObserver observer = new AircraftObserver(airc, converter);
    
        // юзаем observer;
    
    }


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



    Если сделаешь онлайн, а после объяснишь, как сделал, цены тебе не будет!
    Спасибо за AiAircraft.InternalTypeName(). Имхо, проще его значение передать клиенту и там отпарсить на предмет модели крафта. И уже понятно в чем данные идут.
    Эх, жаль нет подробного описания на манер этого http://www.sukhoi.ru/forum/attachmen...7&d=1311685400
    Naryv, у Вас еще чего нибудь подобного не завалялось в закромах?

    С онлайном, ИМХО, думаю так, как и сейчас поднимать HTTP-сервер в хост-миссии на дедикейтед-сервере, передавать ему хост-миссию, по IP идентифицировать игрока, и отсылать ему данные по его запросу + плюшки по управлению геймплеем. Оценочный траффик 100 кбит/с на игрока.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  7. #7
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    А кто-нибудь, ничем типа doxygen и graphviz пройтись не пробовал?
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  8. #8
    Пилот Аватар для LePage
    Регистрация
    17.07.2009
    Адрес
    Simbirsk
    Возраст
    56
    Сообщений
    511

    Re: Вопросы.

    Ну тогда передайте мой низкий поклон всему коллективу!!!

    Надеюсь у Вас, в связи с работой над новым проектом, все-же останется время проконсультировать иногда по БзБ?

    з/ы/ Ну и может (надеюсь), получится прикрутить аналогичную по фукционалу фичу в новом проекте, пусть и не на c#... на с++ тоже можно
    Крайний раз редактировалось LePage; 14.12.2012 в 10:01.
    a` la guerre comme a` la guerre
    profile: Core i5-3570K 3.4GHz, ASUS GTX660 2Gb GDDR5, ASUS GT520 Silent 1Gb, LCD 1600x1200x32 IPS, LCD 1600x1200x32 MVA, LCD 800х600 TFT,
    RAM DDR3 32GB, OCZ Vertex 4 128 Gb, OCZ Vertex 450 128 Gb, 4xHDD WD 1 Tb FAEX, RAID10, WD 2 Tb FAEX, Win 7 x64, БП FSP 600Вт
    lepage.sytes.net:21000

  9. #9
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    46
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от LePage Посмотреть сообщение
    Ну тогда передайте мой низкий поклон всему коллективу!!!
    хорошо

    Цитата Сообщение от LePage Посмотреть сообщение
    Надеюсь у Вас, в связи с работой над новым проектом, все-же останется время проконсультировать иногда по БзБ?
    это и раньше не было моими должностными обязанностями насколько смогу - помогу, конечно.
    Don't happy, be worry

  10. #10
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Такой вопрос возник, так как боюсь протестировать нормально не получится.

    Если на ж/д платформе стоит зенитка или танк/машина, то уничтожение зенитки ведет к уничтожению вагона?

  11. #11
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    46
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Нет, вообще "грузы" должны умирать отдельно от "носителя", правда, некоторые грузы могут при гибели взрываться или загораться, и повреждать носитель. А вот при уничтожении носителя - груз, емнип умирает тоже.
    Don't happy, be worry

  12. #12
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Нет, вообще "грузы" должны умирать отдельно от "носителя", правда, некоторые грузы могут при гибели взрываться или загораться, и повреждать носитель. А вот при уничтожении носителя - груз, емнип умирает тоже.
    Спасибо

  13. #13
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Есть вопрос по поездам.
    Пытаюсь определить уничтожение вагонов и зениток на платформах в событии OnActorDead.
    Поставил зенитку, которая лупит по эшелонам и вывод в чат имени актора(который определен до этого как AiGroundActor). Также добавил проверку AiGroundGroup, но вроде не срабатывает.

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

    Как правильно уничтожение вагона определить и почему на статики-"груз" срабатывает 4 события об уничтожении?

  14. #14
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    46
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Есть вопрос по поездам.
    Пытаюсь определить уничтожение вагонов и зениток на платформах в событии OnActorDead.
    Поставил зенитку, которая лупит по эшелонам и вывод в чат имени актора(который определен до этого как AiGroundActor). Также добавил проверку AiGroundGroup, но вроде не срабатывает.

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

    Как правильно уничтожение вагона определить и почему на статики-"груз" срабатывает 4 события об уничтожении?
    Странно, а приложи миссию, пожалуйста, посмотрю.
    Don't happy, be worry

  15. #15
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    Странно, а приложи миссию, пожалуйста, посмотрю.
    Там куча всего, ее просто так не запустить, попробую сам разобраться

  16. #16
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    46
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Там куча всего, ее просто так не запустить, попробую сам разобраться
    да просто кусок с паровозами и зениткой, без скрипта, чтобы точно на той же сцене посмотреть какие ивенты пойдут при убийстве. Я могу и сам такую миссию сделать, но время уйдёт и результат может отличаться
    Don't happy, be worry

  17. #17
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Цитата Сообщение от naryv Посмотреть сообщение
    да просто кусок с паровозами и зениткой, без скрипта, чтобы точно на той же сцене посмотреть какие ивенты пойдут при убийстве. Я могу и сам такую миссию сделать, но время уйдёт и результат может отличаться
    Они в скрипте создаются, в файле миссии стандартный состав от которого маршрут берется(вагоны в dll-ке создаются).
    Но по сути поезд - паровоз, 8 вагонов, 2 платформы с бофорсами. По ним стреляет вражеский бофорс.
    Скорее всего я где-то в определении события ошибся(определяю принадлежость акторов по номеру подмиссий). Цель, которой добиваюсь - посчитать кол-во убитых вагонов, кол-во статиков груженых на них.
    Крайний раз редактировалось podvoxx; 04.02.2013 в 11:51.

  18. #18

    Re: Вопросы.

    Цитата Сообщение от andersbravers Посмотреть сообщение
    Vetochka, вы на яве пишите? Просто давно слышал, что ил на яве написан. Так для сэбэ.
    Это вроде бы С#.

  19. #19

    Re: Вопросы.

    Цитата Сообщение от andersbravers Посмотреть сообщение
    Веточка, а в каком языковом редакторе лучше заниматься миссиями для БОБа, не подскажешь?
    Visual studio 2010.
    Качать отсюда:
    http://www.microsoft.com/visualstudi...csharp-express
    Только ты не по адресу обращаешься У нас тут много программистов, а мои интуитивно-обрывочные школьные знания и знания моего соавтора кампаний явно малы, чтобы еще кому-то чего-то объяснять.
    Я могу подробно объяснить как ликвидировать или зарегистрировать ООО или на что в суде напирать, чтобы доказать свои правоту
    Крайний раз редактировалось Vetochka; 12.08.2011 в 15:19.

  20. #20
    Любопытный
    Регистрация
    03.10.2005
    Адрес
    Киров
    Возраст
    41
    Сообщений
    1,386

    Re: Вопросы.

    Цитата Сообщение от andersbravers Посмотреть сообщение
    Олег, вопрос такого плана: скажем мне нужно постоянно возрождать группу кораблей после ее уничтожения. Если написать на одних триггерах, то я ставлю триггер на уничтожение группы (выбираю корабли), ставлю действие возрождение группы (выбираю опять корабли), получаю возрождение кораблей после их уничтожения. Но мне нужно, чтобы это происходило постоянно, т.е. цикл до бесконечности. Пробовал создавать второй аналогичный триггер с действием возрождения, выбирал этот же кораблик (в идеале хотел поставить скажем 5 возрождений на один танкер), но кораблик возрождался все равно только один раз. Можно ли добиться этого эффекта средствами редактора или тут уже нужны скрипты? Или просто создавать группы кораблей по цепочке, каждый раз указывая для возрождения новую группу? В принципе так можно, но тогда если мне нужно, чтобы кораблик возродился, предположим, 5 раз, то мне нужно для 10 кораблей создать 5*10=50 групп - это не совсем удобно.
    А не проще при уничтожении загружать миссию с танкером? Ты же уничтожил 1 танкер, значит и появиться должен 1 танкер. Значит нужна миссия с 1 танкером.
    AMD Phenom(tm) II X4 955 3.21ГГц, Gigabyte GA-MA770-US3, 4Гб DDR2-800, ATI Radeon HD 5850 1Гб DDR5 256-бит, Microsoft Windows 7 Home SP1 x64, 1920х1080 24"

  21. #21

    Re: Вопросы.

    Цитата Сообщение от andersbravers Посмотреть сообщение
    Олег, вопрос такого плана: скажем мне нужно постоянно возрождать группу кораблей после ее уничтожения. Если написать на одних триггерах, то я ставлю триггер на уничтожение группы (выбираю корабли), ставлю действие возрождение группы (выбираю опять корабли), получаю возрождение кораблей после их уничтожения. Но мне нужно, чтобы это происходило постоянно, т.е. цикл до бесконечности. Пробовал создавать второй аналогичный триггер с действием возрождения, выбирал этот же кораблик (в идеале хотел поставить скажем 5 возрождений на один танкер), но кораблик возрождался все равно только один раз. Можно ли добиться этого эффекта средствами редактора или тут уже нужны скрипты? Или просто создавать группы кораблей по цепочке, каждый раз указывая для возрождения новую группу? В принципе так можно, но тогда если мне нужно, чтобы кораблик возродился, предположим, 5 раз, то мне нужно для 10 кораблей создать 5*10=50 групп - это не совсем удобно.
    Это через триггеры не сделаешь. Триггер "уничтожение группы" вроде как работает только для групп, запущенных в первой миссии, а на группу, которая уже запущена скриптом триггер первой миссии не срабатывает. Возможно я чего-то не догнала.
    Так что либо делать загрузку миссий как предлагает Женя, по идеи триггер, приписанный в загружаемой миссии должен работать. Но я не проверяла.
    Либо вот так:
    Вот этот скрипт по идеи должен работать. Как танкер тонет, то рождается новый в начальной точке.
    Проверить не могу, т.к. БзБ нет под рукой.

    Код:
    public class Mission : AMission
    {
    // ------------
     public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> initiatorList)
        {
         if (shortName.IndexOf("0_Chief", 0) > 0) //0_Chief краткое имя корабля, см. в файле миссии в разделе [Chiefs]
            {
                AiAction action = GamePlay.gpGetAction("a1"); //a1 - действие по рождению танкера, которое прописывается в редакторе
                if (action != null)
                {
                    action.Do();
                }
            }
        }
    }
    По любому нужно писать скрипт.

  22. #22

    Re: Вопросы.

    Цитата Сообщение от andersbravers Посмотреть сообщение
    Самое прикольное, что когда в редакторе создаешь триггеры-действия, то в разделе скрипты естественно появляются скрипты. Но когда заходишь в папку с миссией, то там один только файл .mis. Т.е. для нормальной работы .cs файл создавать неизбежно (даже, чтобы воткнуть скрипт Vetochki), а Atas говорит, что если создать .cs, то он перебьет внутренние скрипты миссии (к-е, создаются автоматом на триггеры внутри редактора).
    Именно так. Но с триггерами все просто.
    Внутри AMission дописываем следующее:


    Код:
    public class Mission : AMission
    {
    // ------здесь скрипт, который уже был, его не трогать. Вставлять дописанное перед последней скобкой скрипта 
    // ----- вставлять отсюда -----------------
    public override void OnTrigger(int missionNumber, string shortName, bool active)
        {
          
            AiAction action;
    if ("tname1".Equals(shortName) && active) //tmane1 - имя 1-го триггера 
            {
                GamePlay.gpGetTrigger(shortName).Enable = false;
                action = GamePlay.gpGetAction("aname1"); //aname1 - имя действия 1, которое вызывается по срабатыванию 1-го триггера
                if (action != null)
                {
                    action.Do();
                }
           }
    
    if ("tname2".Equals(shortName) && active) //tmane2 - имя 2-го триггера 
            {
                GamePlay.gpGetTrigger(shortName).Enable = false;
                action = GamePlay.gpGetAction("aname2"); //aname2 - имя действия 2, которое вызывается по срабатыванию 2-го триггера
                if (action != null)
                {
                    action.Do();
                }
           }
    // аналогично можно вставлять сколько удодно триггеров и привязывать к ним действия
    
    
        }
    // ------------ до сюда
    } // а это последняя скобка скрипта :)

  23. #23
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от Vetochka Посмотреть сообщение
    Внутри AMission дописываем следующее:
    После добавления этого куска кода в скрипт триггеры редактора начинают работать со скриптом.

    Я бы добавил, что имена, группы и прочее тригеров 1 и 2 и действий 1 и 2 задаются в редакторе. Для меня это было откровением в свое время.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

  24. #24
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    46
    Сообщений
    6,905
    Images
    51

    Re: Вопросы.

    Цитата Сообщение от Vetochka Посмотреть сообщение
    Именно так. Но с триггерами все просто.
    Внутри AMission дописываем следующее:


    Код:
    public class Mission : AMission
    {
    // ------здесь скрипт, который уже был, его не трогать. Вставлять дописанное перед последней скобкой скрипта 
    // ----- вставлять отсюда -----------------
    public override void OnTrigger(int missionNumber, string shortName, bool active)
        {
          
            AiAction action;
    if ("tname1".Equals(shortName) && active) //tmane1 - имя 1-го триггера 
            {
                GamePlay.gpGetTrigger(shortName).Enable = false;
                action = GamePlay.gpGetAction("aname1"); //aname1 - имя действия 1, которое вызывается по срабатыванию 1-го триггера
                if (action != null)
                {
                    action.Do();
                }
           }
    
    if ("tname2".Equals(shortName) && active) //tmane2 - имя 2-го триггера 
            {
                GamePlay.gpGetTrigger(shortName).Enable = false;
                action = GamePlay.gpGetAction("aname2"); //aname2 - имя действия 2, которое вызывается по срабатыванию 2-го триггера
                if (action != null)
                {
                    action.Do();
                }
           }
    // аналогично можно вставлять сколько удодно триггеров и привязывать к ним действия
    
    
        }
    // ------------ до сюда
    } // а это последняя скобка скрипта :)

    Можно ещё проще :
    Код:
     
    public override void OnTrigger(int missionNumber, string shortName, bool active)
        {
            base.OnTrigger(missionNumber, shortName, active);        
            AiAction action = GamePlay.gpGetAction(ActorName.Full(missionNumber, shortName));
            if (action != null)
                action.Do();
        }
    так все триггеры будут запускать одноимённые экшены, не надо на каждый триггер код писать.


    Цитата Сообщение от -atas- Посмотреть сообщение
    После добавления этого куска кода в скрипт триггеры редактора начинают работать со скриптом.
    а в чём "скрип"? Может быть MissionNumberListener неверно установлен? Напомню, на всякий случай - по умолчанию каждая миссия "слышит" только свои события, т.е. если управляющий скрипт у нас в первой запущенной миссии, она не узнает о событии вызванном триггером или актором в подгруженной другой миссии. Чтобы скрипт "слышал" все события - надо установить параметр MissionNumberListener в -1 , вот так:
    Код:
    public override void OnBattleStarted()
    {
         base.OnBattleStarted();
         MissionNumberListener = -1;
    }
    , теперь такая миссия "слышит" события во всех дозагруженных миссиях .
    Don't happy, be worry

  25. #25
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

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

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

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

Страница 29 из 30 ПерваяПервая ... 19252627282930 КрайняяКрайняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •