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

Показано с 1 по 24 из 24

Тема: Модификации -- как и что

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Курсант
    Регистрация
    04.04.2003
    Адрес
    Moscow
    Сообщений
    112

    Модификации -- как и что

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

  2. #2
    Курсант
    Регистрация
    04.04.2003
    Адрес
    Moscow
    Сообщений
    112
    Я придумал -- мы сюда будем информацию о скриптах складывать... по мере ее появления. Наверное, начнем с объяснения того, что за что отвечает в скрипте вертолета.

  3. #3
    Сварка пепелацев. ДОРОГО Аватар для Vadifon
    Регистрация
    13.04.2002
    Адрес
    Днепропетровск
    Возраст
    57
    Сообщений
    1,879
    жизненно необходимое начинание!
    Хорошо там, где я есть... и пить

  4. #4
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    Что и как в вертолете (по мелочи)

    Интересен каталог \Units.
    В нем куча скриптов, описывающих юниты. В первую голову интересны вертолеты. Распаковываем, к примеру Ka50Unit.script и открываем его в редакторе.
    Первый интересный класс: CKa50CollisionExplosion
    Описывает повреждения, наносимые вертолету при столкновении. Хардкорщики, ставьте здесь тыщщу! ;o)
    Далее, интерес представляет 30мм пушка. За нее отвечает класс CKa50Gun. Что там можно поменять? Гм...
    Переменная InitBulletSpeed описывает, с какой скоростью в м/с полетит наш снаряд.
    Переменная FireDeviation описывает, каково будет случайное отклонение визира пушки при стрельбе. Чем больше коэффициент, тем сильнее будет болтать пушку и снаряды будут лететь мимо. Значение в градусах отклонения.
    Переменная Ammunition указывает общее кол-во выстрелов к пушке.
    Переменные LockAngleHMin, LockAngleHMax, LockAngleVMin, LockAngleVMax указывают углы сопровождения пушкой цели от линии визирования вертолета: по горизонтали, по вертикали.
    Переменная BlockedLockAngle указывает фактически рамку вокруг маркера цели, куда нужно поставить маркер пушки для автозалпа. Т.о. блокируем пушку, зажимаем спуск, выбираем цель и наводим маркер пушки на цель. Как только маркер пушки совмещается с маркером цели +- BlockedLockAngle (в градусах) получаем очередь.
    Переменная TargetingRange указывает дистанцию, на которой пушка "захватит" цель.
    Коль скоро дистанцию огневого контакта мы планируем увеличить (например, до 4 км), то необходимо в классе CKa50GunBulletControl всадить переменную float MaxDistance, присвоив ей значение 4000.0 (в метрах). В обратном случае наш снаряд будет самоликвидироваться на дистанции 2000 метров, не долетая до цели.
    Соответственно, все это корректно будет работать, если в классе CKa50Unit поставить значения дальности оптики RadarRange на дистанцию свыше 4 км.
    =======================

  5. #5
    Офицер Форума
    Регистрация
    28.01.2002
    Адрес
    РФ, Москва и иногда Курск
    Возраст
    48
    Сообщений
    3,606
    А можно ли в 6-й миссии первой кампании сделать так, что б на событие "уничтожение гражданского объекта" транслировался не один единственный звуковой файл, как сейчас, а один из нескольких, специально подготовленных? Т.е. случайная фраза из, скажем, трех подготовленных?

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

  6. #6
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    Можно и случайно

    Необходимо будет объявить массив сообщений (текстовых и звуковых), после чего в скрипте миссии вызывать на событие сообщение с индексом, генерируемым функцией случайного числа из ренжа (от 1 до 3, к примеру).
    Или в лоб. Например, у нас есть три звуковых сообщения msg_NeutralBuildingLost1, msg_NeutralBuildingLost2, msg_NeutralBuildingLost3. И общее текстовое сообщение str_NeutralBuildingLost.
    Тогда можно создать конструкцию для вывода случайного сообщения:
    SendPersonalCockpitMessage(_LeaderID, CC1M6Mission_Strings::str_NeutralBuildingLost, CCockpitColorMap::m_BadNewsColor, "msg_NeutralBuildingLost"+new string(randnum(3)+1));
    Т.о. конструкция "msg_NeutralBuildingLost"+new string(randnum(3)+1) вызовет сообщение msg_NeutralBuildingLost c номером, сгенерированным случайно от 1 до 3. На экране появится в виде от первого, третьего лиц сообщение об уничтожении гражданского объекта, а в ухи гавкнет сообщение, выбранное из трех.
    Только в шестой миссии первой кампании я че-то не нашел воспроизведение сообщения о неправомерном уничтожении гражданских объектов.
    Понятно, что метод описан поверхносто. Но, если интерес не угас, можно будет пошагово изложить.
    =======================

  7. #7
    Офицер Форума
    Регистрация
    28.01.2002
    Адрес
    РФ, Москва и иногда Курск
    Возраст
    48
    Сообщений
    3,606
    Я ошибся с указанием миссии...
    Вера наших соотечественников в то, что Россия - одна из худших стран мира по своей абсурдности уступает только их же вере в абсолютную личную непричастность к сему положению.

  8. #8
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    Я понял.

    В любом случае, данная конструкция имеет виды на жизнь. Тонкости лишь в правильном идентифицировании звуковых файлов и корректном их "протаскивании". На досуге можно посмотреть Sounds.script из \Common
    =======================

  9. #9
    Офицер Форума
    Регистрация
    28.01.2002
    Адрес
    РФ, Москва и иногда Курск
    Возраст
    48
    Сообщений
    3,606
    Благодарю, покопаюсь.
    Вера наших соотечественников в то, что Россия - одна из худших стран мира по своей абсурдности уступает только их же вере в абсолютную личную непричастность к сему положению.

  10. #10
    Офицер Форума
    Регистрация
    28.01.2002
    Адрес
    РФ, Москва и иногда Курск
    Возраст
    48
    Сообщений
    3,606
    Значит так. Помогите разобраться с конкретным случаем. Скрипт 7-й миссии первой кампании.

    Array GetVoiceSoundTable()
    {
    return
    [
    [ "str_ArtillerySupport_Disagree", "Resources/C1M7_str_ArtillerySupport_Disagree.wav" ],
    [ "str_ArtillerySupport_Agree", "Resources/C1M7_str_ArtillerySupport_Agree.wav" ],
    [ "str_ArtillerySupport_OpenFire", "Resources/C1M7_str_ArtillerySupport_OpenFire.wav" ],
    [ "str_ArtillerySupport_OpenAllFire", "Resources/C1M7_str_ArtillerySupport_OpenAllFire.wav" ],
    [ "str_ArtillerySupport_Incorrect", "Resources/C1M7_str_ArtillerySupport_Incorrect.wav" ],
    [ "msg_BildingKill", "Resources/C1M7_msg_BildingKill.wav" ],
    [ "msg_Message01", "Resources/C1M7_msg_Message01.wav" ]
    ];
    }

    Это, как я понимаю, объявлен массив звуковых сообщений, пользуемых в игре. Как в нем указать вместо единственного значения
    переменной "msg_BildingKill", равного "Resources/C1M7_msg_BildingKill.wav",
    массив значений Resources/C1M7_msg_BildingKill-1.wav, Resources/C1M7_msg_BildingKill-2.wav и Resources/C1M7_msg_BildingKill-3.wav ?

    Далее. Вот, как я понимаю, алгоритм вызова сообщения на событие Уничтожение Объекта.

    event void OnObjectDestroyed( String _ObjectID )
    {
    CSPMission::OnObjectDestroyed(_ObjectID);
    logMessage("WARNING! Game object " +new String(_ObjectID)+ " has been destroyed");

    Component DeadThing = GetObject(_ObjectID);
    if ( checkMask(DeadThing, ["CIVIL"], []) )
    {
    // logError("[skunkie sez] and the offender is... " + DeadThing.GetLastDamager() + "!");
    m_BildingsKill++;
    if (m_BildingsKill < m_BildingsMax)
    {
    fireEvent(0.0, [], "SendCockpitMessage", [msg_BildingKill + new WString(m_BildingsKill), CCockpitColorMap::m_BadNewsColor, "msg_BildingKill"]);
    // SendBroadcastCockpitMessage(new String(m_BildingsKill) + msg_BildingKill , CCockpitColorMap::m_BadNewsColor);
    }
    else if (!m_CivilTooMuch)
    {
    m_CivilTooMuch = true;
    DelayedFailMission();
    }
    }

    Где здесь описывается вызов текстового сообщения на экран, а где - звукового?


    Ну или если на пальцах сложно объяснить - вышлите мне (если просьба не слишком нахальна) скрипт 7-й миссии, измененный под такую фичу:

    На уничтожение n-ного гражданского объекта вызывается сообщение Resources/C1M7_msg_BildingKill-n.wav

    Желательно с комментариями, что и как измененно.
    Вера наших соотечественников в то, что Россия - одна из худших стран мира по своей абсурдности уступает только их же вере в абсолютную личную непричастность к сему положению.

  11. #11
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    В целом все понятно.

    По крайней мере, шутка со звуковыми сообщениями здесь похиляет. Только, с учетом изменившихся условий придется отказаться от случайного значения, но прописывать строго-заданное значение убитых гражданских объектов.
    Для изменения звуковых сообщений:
    - создаем звуковые файлы C1M7_msg_BildingKill_2.wav, C1M7_msg_BildingKill_3.wav и т.д. сколько надо.
    - переформировываем массив идентификаторов звуков до вида:
    Array GetVoiceSoundTable()
    {
    return
    [
    [ "str_ArtillerySupport_Disagree", "Resources/C1M7_str_ArtillerySupport_Disagree.wav" ],
    [ "str_ArtillerySupport_Agree", "Resources/C1M7_str_ArtillerySupport_Agree.wav" ],
    [ "str_ArtillerySupport_OpenFire", "Resources/C1M7_str_ArtillerySupport_OpenFire.wav" ],
    [ "str_ArtillerySupport_OpenAllFire", "Resources/C1M7_str_ArtillerySupport_OpenAllFire.wav" ],
    [ "str_ArtillerySupport_Incorrect", "Resources/C1M7_str_ArtillerySupport_Incorrect.wav" ],
    [ "msg_BildingKill1", "Resources/C1M7_msg_BildingKill.wav" ],
    [ "msg_BildingKill2", "Resources/C1M7_msg_BildingKill_2.wav" ],
    [ "msg_BildingKill3", "Resources/C1M7_msg_BildingKill_3.wav" ],
    [ "msg_Message01", "Resources/C1M7_msg_Message01.wav" ]
    ];
    }

    Соответственно, в вызовеfireEvent(0.0, [], "SendCockpitMessage", ... произойдет изменение в последнем передаваемом аргументе до вида
    fireEvent(0.0, [], "SendCockpitMessage", [msg_BildingKill + new WString(m_BildingsKill), CCockpitColorMap::m_BadNewsColor, "msg_BildingKill"+new String(m_BildingsKill)]);
    Т.о. конструкция ""msg_BildingKill"+new String(m_BildingsKill)" зашлет в ухи идентификатор звука "msg_BildingKill1", если будет уничтожен первый объект, "msg_BildingKill2", если второй гражданский объект будет поражен и так далее.
    Текстовое сообщение, соответственно, пырвый аргумент функции SendCockpitMessage. В нашем случае - "msg_BildingKill + new WString(m_BildingsKill)". Указатель на текстовое сообщение "msg_BildingKill" уложен в MissionC1M7Strings.script. Одно "но" при работе со стрингами сообщений - они не String - они WString.
    Т.е. в нашем конкретном случае текстовое сообщение "msg_BildingKill + new WString(m_BildingsKill)" будет выглядеть, как "Уничтожено гражданское здание. Всего уничтожено <число уничтоженных объектов из переменной m_BildingsKill>".
    =======================

  12. #12
    Хым... А сделать внешнюю прогу, которая меняет скрипты (имя звукового файлика). Перед запуском игры/после/когда кнопку нажмешь/по таймеру. Это слишком сложно? Или слишком криво
    Так пожалуй и компанию сделать можно...

  13. #13
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    А нафига, я не понял?

    Хым... А сделать внешнюю прогу, которая меняет скрипты (имя звукового файлика). Перед запуском игры/после/когда кнопку нажмешь/по таймеру. Это слишком сложно? Или слишком криво
    Так пожалуй и компанию сделать можно...
    ====================================
    Внешняя прога, которая меняет скрипты? С какой целью? Менять скрипты? Эта прога есть. Называется скрипт-мастер, получает з/п и работает полный день. Только его вряд ли когда-нибудь называли прогой.
    А теперь серьезно: нельзя ли почетче изложить вопрос? Пока не могу уловить сути.
    =======================

  14. #14
    Это не вопрос был. Совет из категории - нормальные герои всегда идут в обход. Поскольку игрушку до нас еще не довезли, а демка качается со скоростью 0.5к/с ,совет носит несколько абстрактный характер. Если нельзя чего-то сделать средствами языка скриптов, (чего-то там говорили о случайных гражданских объектах) можно внешней програмкой менять отдельные строчки в тексте скриптов. Совсем как скрипт-местер. И з/п можно съэкономить
    Кстати, кто-то обещал выложить конвертор для 3DS или Х форматов. От безделия уже дурацкие мысли в голову лезут - а вот добавлю я свой крафт. Tie-fighter например он, кажется, без щитов был. Только вот как сделать перезаряжаемвые пушки? Сразу узнаем кто круче к50 или...? Помоему, старине Лукасу ничего не светит

  15. #15
    кто здесь?! (с) Аватар для Tui
    Регистрация
    07.07.2003
    Адрес
    Russian Federation
    Возраст
    49
    Сообщений
    106
    террайн сдк в студию!

    т.е. мануал как ландшафты клепать...

  16. #16
    Зашедший
    Регистрация
    24.11.2003
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    88

    С ландшафтами - засада

    Там надо думать.
    Скажем так, ландшафт характеризуется картой высот, картой зон, текстурой с освещением, уровнем моря, и еще рядом второстепенных значений.
    Озновная засада - осветить вновь созданный ландшафт.
    Надо подумать.
    =======================

  17. #17
    кто здесь?! (с) Аватар для Tui
    Регистрация
    07.07.2003
    Адрес
    Russian Federation
    Возраст
    49
    Сообщений
    106
    ну типа подумаем...

    мануал в студию

  18. #18
    Курсант
    Регистрация
    04.04.2003
    Адрес
    Moscow
    Сообщений
    112
    Originally posted by Tui
    ну типа подумаем...

    мануал в студию
    Ну давайте попробуем

    http://www.fair-strike.com/rus/Files.Html

  19. #19
    кто здесь?! (с) Аватар для Tui
    Регистрация
    07.07.2003
    Адрес
    Russian Federation
    Возраст
    49
    Сообщений
    106
    дороги и столбы хых клепать давольна проста

  20. #20
    кто здесь?! (с) Аватар для Tui
    Регистрация
    07.07.2003
    Адрес
    Russian Federation
    Возраст
    49
    Сообщений
    106
    Как уже ландскейпы клепать?
    Хочецца попробовать какую нить реальную карту замутить...
    и заставить ея столбами, и пересеч напрочь дорогами хыхы,
    и пару деревень воткнуть 8)
    И лес такой - дремучий-дремучий 8))
    Посредине озеро какое-нить, а там - авианосец 8() хыхы

  21. #21
    Курсант
    Регистрация
    04.04.2003
    Адрес
    Moscow
    Сообщений
    112
    Originally posted by Tui
    Как уже ландскейпы клепать?
    Хочецца попробовать какую нить реальную карту замутить...
    и заставить ея столбами, и пересеч напрочь дорогами хыхы,
    и пару деревень воткнуть 8)
    И лес такой - дремучий-дремучий 8))
    Посредине озеро какое-нить, а там - авианосец 8() хыхы
    Берешь из Terrains RAW файл. Сохраняешь резервную копию. Грузишь фотошопом. Соглашаешься на предлагаемые параметры. Видишь перед собой карту высот. Извращаешь ее как хочешь. Сглаживаешь пару раз чтобы не получить триллион граней в один кадр и записываешь обратно.

    Вот.

    Текстуру менять сложнее и для этого нужна утилита.

  22. #22
    Офицер Форума
    Регистрация
    28.01.2002
    Адрес
    РФ, Москва и иногда Курск
    Возраст
    48
    Сообщений
    3,606
    Ну что, спасибо, получилось. Т.к. максимальное кол-во зданий, кот. можно уничтожить, равно 10, то я сделал (пока тестовых) 10 разных сообщений.

    Внимание, вопрос! (с) "Что? Где? Когда?"

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

  23. #23
    Хто то обещал конвертер моделей для УС выложить. Уже давно, однако. Я тут уже две модельки из разных мест наковырял. А то на тех что в игре, как на танке... Броня крепка...

  24. #24
    Курсант
    Регистрация
    04.04.2003
    Адрес
    Moscow
    Сообщений
    112
    Originally posted by SVM-Nafigator
    Хто то обещал конвертер моделей для УС выложить. Уже давно, однако. Я тут уже две модельки из разных мест наковырял. А то на тех что в игре, как на танке... Броня крепка...
    Как только, так сразу. С патчами разберемся для начала. Вы пока продолжайте конструктивно ругать -- мы уже много полезного для себя извлекли. Постараемся воплотить то, что легко сделать.

Ваши права

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