Регистрация • FAQ • Вход | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Текущее время: 28 мар 2024, 22:57 |
Часовой пояс: UTC + 3 часа |
Модератор: zarathustra
![]() |
Страница 1 из 1 |
[ Сообщений: 18 ] |
Для печати | Предыдущая тема | Следующая тема |
Автор | Сообщение | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
В своё время на портале sudden-strike.ru тема пользовалась большой популярностью и давно назрела необходимость её реанимировать.
Перед тем, как задать вопрос - НАСТОЯТЕЛЬНО рекомендуется ВНИМАТЕЛЬНО прочитать следующее: Разработка карт Разработка миссий Логические команды Руководство пользователя Sudden Strike 2 (Противостояние 4) Сохранённая часть темы с портала sudden-strike.ru Особенности движка и редактора Теперь несколько аксиом:
2. Если скрипт не работает - то Вы ошиблись 3. Скриптам всё равно, что думаете Вы - у них свой "процессор" 4. Если Вы и скрипты "думаете" различно - проверьте, правильно ли Вы реализовали свою идею в уловиях 5. Скрипты "читаются" постоянно, последовательно сверху вниз. После считывания крайнего пороцесс повторяется. 6. Игра не "тормозит" от большого количества скриптов.
~5000 скриптов обрабатываются движком за 2-4 сек. (в зависимости от мощности компьютера).
Строго говоря, это не обязательно, но потом не ![]() 9. Не стройте миссию линейно (всегда просчитывайте и прописывайте в скриптах ВСЕ варианты).
|
|||||||||
05 июл 2017, 16:38 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Если всё же что-то у вас не работает, то ЕДИНСТВЕННО правильным алгоритмом Ваших дествий должно быть следующее:
2. Проверяем, что реакция (ответ на условие) выполняется По какой-то странной (мне не понятной) причине люди, которые обращаются за помощью НЕ СЛЫШАТ того, что им говорят и на вопрос "проверил ли ты условие" отвечают: "ну как же, ведь у меня..... бла-бла-бла!" По п.1 именно ПРОВЕРЯЕМ, а не думаем: ну, у меня же .... - т.е. получаем ОТ ДВИЖКА подтверждение. Как это сделать? В самом простом варианте (если условие простое, т.е. односложное - просто вывести сообщение (например, с именем скрипта) - убрав при этом всё остальное, типа ...отправить ... завести ... и пр. Если условий несколько и простого вывода сообщения не достаточно (Вы его не видете) - разбейте свой скрипт на несколько (по кол. условий) и проверьте каждое отдельно. Бывает крайне полезно отслеживать в реальном времени какие-либо условия (что, кстати, поможет Вам еще и понять логику работы скриптов). Например, у Вас скрипт с условием: Юнитов гр."A1">0 в зоне z01 и юнитов гр."B1">0 в зоне z02 и юнитов гр."C1">0 в зоне z03[/i]
Теперь у Вас постоянно будет "бежать" столбик с сообщениями:
B1>0 в зоне 02 C1>0 в зоне 03 Более сложный вариант: нам надо отслеживать ИЗМЕНЕНИЯ состояния (условия), т.е., например, изменение наличия (или количества) юнитов гр."A1" в зоне 01. Для этого воспользуемся ячейками для "запоминания" текущего состояния нашего условия. Пишем:
=> сказать фразу {текст}=A1=0 в зоне 01
=> сказать фразу {текст}=A1>0 в зоне 01
=> сказать фразу {текст}=A1=1 в зоне 01
=> сказать фразу {текст}=A1=2 в зоне 01
=> сказать фразу {текст}=A1=3 в зоне 01
=> сказать фразу {текст}=A1>3 в зоне 01 ВАЖНО! Обратите внимание на отличие скрипта №6 (крайнего) от остальных. Подобную систему можно использовать для контроля ЛЮБЫХ условий - все зависит только от Вашей фантазии. |
|||||||||
05 июл 2017, 17:26 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Добавил файлик:
Некоторые особенности движка и редактора Полезно знать при работе с редактором и создании своих карт/миссий (будет дополняться). |
|||||||||
13 июл 2017, 13:26 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
К сожалению, в игре отсутствует генератор случайных чисел (точнее, в самом движке он есть и активно используется, но вот в редакторе - не доступен). И для картодела становится проблемой выполнение некоторых действий "случайно", вне зависимости от поведения игрока. Привязка же к одному или даже нескольким конкретным действиям игрока, как правило, не дают желаемого результата.
Естественно, на любой карте есть войска как игрока, так и противника Что важно: если действия компа во многом зависят от нас, то как будет строить оборону и проводить наступление игрок предугадать обычно не всегда возможно. Кроме того, для решения своих задач мы используем зоны на карте. Вот эти два элемента (зоны и перемещения юнитов игрока) мы и задействуем! Прежде всего определимся с необходимой вариативностью (т.е. с размером числового ряда, достаточного нам для операций). Для примера выберем 50. Далее мы выделяем под работу генератора две ячейки (одна у нас будет переменной, а вторая самим рабочим оператором). Смысл дальнейших действий сводится к следующему: в зависимости от обстоятельств суммировать некие числа в переменной. На что тут необходимо обратить особое внимание:
2. Генератор должен работать постоянно, т.е. на КАЖДОМ проходе просмотра скриптов. На самом деле не обязательно делать это постоянно, более того: иногда даже вредно (в зависимости опять-таки от потребностей. В помощь тут циклический будильник для выполнения работы раз в 10 сек... 1мин... 5 мин... - кому как надо. 2а. Для запуска процесса надо занести в ячейку С3 значение 1. 3. В конце каждого прохода сохранять результат своей работы (в ячейке, которую мы и будем использовать для своих реакций). 4. Обеспечить разовую отработку скриптов на каждом проходе. С1 - переменная С2 - вывод итога С3 - счетчик Далее пишем:
число в ячейке С3 точно 2 => добавить в ячейку С1 количество юнитов в группе А1 + увеличить число в ячейке С3 на 1 число в ячейке С3 точно 3 => добавить в ячейку С1 количество юнитов в группе А2 + увеличить число в ячейке С3 на 1
2 замечание: кто-то скажет, что использовать тут С3 нет обязательно, но такой подход ко всему позволит исключить любые неопределённости, и в итоге - избавит от ошибок. 3 замечание: использование скрипта добавить в ячейку количество юнитов в группе даёт компактность всей конструкции, но никак не завязано на зоны, т.е. при отсутствии боевой движухи мало что даст;
число в ячейке С3 точно 2 и юнитов группы А1 в зоне 8 больше, чем 0 => увеличить число в ячейке С1 на число 8 + увеличить число в ячейке С3 на 1 число в ячейке С3 точно 3 и юнитов группы D3 в зоне 18 больше, чем 0 => увеличить число в ячейке С1 на число 18 + увеличить число в ячейке С3 на 1 Самый качественный подсчёт даст следующий метод:
число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 точно 1 => увеличить число в ячейке С1 на число 1+ увеличить число в ячейке С3 на 1 число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 точно 2 => увеличить число в ячейке С1 на число 2 + увеличить число в ячейке С3 на 1
число в ячейке С3 точно 2 и юнитов группы А1 в зоне 8 точно 1 => увеличить число в ячейке С1 на число 1+ увеличить число в ячейке С3 на 1 число в ячейке С3 точно 2 и юнитов группы А1 в зоне 8 точно 2 => увеличить число в ячейке С1 на число 2 + увеличить число в ячейке С3 на 1 Вообще говоря, так можно обсчитать практически любые действия на карте и суммировать результат в ячейке. В заключении осталось выполнить некоторые арифметические действия: - скажем, вариантов у нас получилось 78 (и значит крайнее значение С3 было 78) - напомню - мы остановились на числе 50, поэтому надо "загнать" полученный результат в эти рамки и не потерять уникальности, для чего делаем следующее:
число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 1600 => уменьшить число в ячейке С1 на 1600 число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 800 => уменьшить число в ячейке С1 на 800 число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 400 => уменьшить число в ячейке С1 на 400 число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 200 => уменьшить число в ячейке С1 на 200 число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 100 => уменьшить число в ячейке С1 на 100 число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 50 => уменьшить число в ячейке С1 на 50 число в ячейке С3 точно 79 => Занести в ячейку С2 число в ячейке С1 + Занести в ячейку С3 число 1
2 замечание: при уменьшении итогового значения С1 важно не скупиться и ГАРАНТИРОВАННО перекрыть возможный максимальный порог. Иначе вся работа в небо и работать ничего не будет 3 замечание: начинать надо именно с максимального значения и ступень должна быть кратна двум, т.е.: при 20 получим числовой ряд: 1280/640/320/160/80/40/20 при 50 получим числовой ряд: 3200/1600/800/400/200/100/50 при 70 получим числовой ряд: 4480/2240/1120/560/280/140/70 Напомню: значение в ячейке - это точно такое же условие, как и все прочие. Причём мы можем использовать любые комбинации. Например:
больше 0 и меньше 11 - даст 20% вероятность больше 20 и меньше 31 - даст 20% вероятность больше 37 и меньше 48 - даст 20% вероятность (больше 15 и меньше 24) или точно 31 или точно 43 - даст 20% вероятность точно 1 или точно 4 или точно 5 или точно 8 или 12 или 36 или 38 или 41 или 47 или 50 - тоже даст 20% вероятность Обращаю Ваше внимание на 0! Если мы напишем:
Если же напишем:
|
|||||||||
14 июл 2017, 14:04 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Каждому опытному игроку известна такая "фишка": при острой нехватке пехоты можно задействовать имеющихся на карте животных. Конечно, это будет не полноценный боевой юнит, но в качестве орудийного расчета, наблюдателя в здании или даже разведчика-смертника - вполне подойдёт. Как правило, животные вводятся в миссии для антуража и обычно принадлежат группе "нейтрал", но ничто не мешает "переманить" их на свою сторону офицером или генералом. Как этого избежать?
Вариант, при котором такой юнит не имеет поведения мы даже не будем рассматривать, т.к. болванчик/статуя в виде коровы или овцы - это (на мой взгляд) запредельное неуважение к игрокам. Если же они "живые" и имеют хоты бы минимальный набор поведения - значит имеют они и свою группу. В этом случае блокировать использование игроком животных очень просто! Допускаем, что наши коровки имеют группу B1 и принадлежат игроку "нейтрал" (это логично, поскольку их не станет расстреливать ни один из участников конфликта). Пишем простенький скрипт:
Передать группу B1 игроку "нейтрал" Установить поведение для группы B1 .... Обращаю Ваше внимание на два момента:
2. Необходимость ещё раз установить группе поведение после смены (принадлежности) игроку. Удачи! |
|||||||||
08 ноя 2017, 13:46 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант ![]() Зарегистрирован: 12 янв 2012, 10:30 Сообщений: 3565 ![]() |
Я им просто высокую мораль и опыт ставлю - вроде прокатывает.
|
|||||||||
09 ноя 2017, 10:40 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
![]() |
|||||||||
09 ноя 2017, 14:21 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Каждый уважающий себя картодел стремится вдохнуть жизнь в своё творение. Одним из наиболее часто встречающихся приёмов (если, конечно, у нас не "Сталинград" и не упорное противостояние непосредственно на линии фронта) - размещение на карте животных. Для того, чтобы они не изображали собой статуи достаточно просто установить им поведение:
Пусть у нас будет группа А0 в зоне 01 Пехота охранять зону
+ (не забываем!) "не использовать незанятые орудия" + (не забываем!) "ПТО - не занимать, занятые покинуть" + (не забываем!) "здания не занимать" Группа А1 в той же зоне 01 Пехота следовать за группой
+ "случайно изменять преследуемый юнит" + (не забываем!) "не использовать незанятые орудия" + (не забываем!) "ПТО - не занимать, занятые покинуть" + (не забываем!) "здания не занимать" Взаимодействовать с группой А0 Взаимодействовать в зоне 01 Поведение можно установить как в свойствах группы, так и скриптом. Теперь наши коровки будут пастись в указанной зоне, а пастух станет за ними бдительно следить! ![]() Весьма важно (против особо хитрых игроков) добавить сюда и блокировку от захвата коров и пастуха (из поста выше): (Более чем 0 юнитов игрока "игрок" в группе А0) или (Более чем 0 юнитов игрока "противник" в группе А0) или (Более чем 0 юнитов игрока "союзник" в группе А0) =>
Установить поведение для группы А0 => (дублируем установку поведения в скрипте) Вроде бы всё хорошо, но есть одна заковыка: если рядом начнётся бой и по стаду "прилетит" - коровы и рогами не поведут. Будем это исправлять и для создания более простой конструкции нам потребуются ячейки. За состояние стада будет отвечать ячейка 0 и её значения, равные 0 - будет соответствовать нормальному состоянию 1 - поиску стада 2 - панике (атаке) 3 - отсутствию пастуха (бесконтрольному блужданию стада) Для реализации при старте заносим в ячейку 0 значение 0 Пишем скрипт атаки на коров или пастуха: число в ячейке 0 менее чем 2 и ( группа А0 атакована менее чем 10 сек. назад или группа А1 атакована мене чем 10 сек. назад ) =>
Установить АИ зона 1 группы А0 в 2 Установить АИ поведение группы А0 в Пехота охранять зону Установить АИ зона 1 группы А1 в 2 Установить АИ зона 1 группы А1 в 2 Установить АИ поведение группы А1 в Пехота охранять зону занести в ячейку 0 число 2 Пишем скрипт отсутствия опасности для коров и пастуха: число в ячейке 0 строго 2 и активных (на карте) юнитов в группе А1 более чем 0 и неверно что группа А0 атакована менее чем 10 сек. назад и неверно что группа А1 атакована мене чем 10 сек. назад=>
Установить АИ зона 1 группы А0 в 1 Установить АИ поведение группы А0 в Пехота охранять зону Установить АИ зона 1 группы А1 в 2 Установить АИ зона 1 группы А1 в 2 Установить АИ поведение группы А1 в Пехота охранять зону занести в ячейку 0 число 1 Пишем скрипт сбора коров в зоне выпаса: число в ячейке 0 строго 1 и активных (на карте) юнитов в группе А1 более чем 0 и неверно что группа А0 атакована менее чем 10 сек. назад и неверно что группа А1 атакована мене чем 10 сек. назад и более чем 90% юнитов группы А0 в зоне 1=>
Установить АИ зона 1 группы А1 в 1 Установить АИ поведение группы А1 в Пехота следовать за группой занести в ячейку 0 число 0 Обращаю Ваше внимание на это: Скрипт атаки на коров или пастуха: число в ячейке 0 менее чем 2 Именно МЕНЕЕ! чем два - таким образом скрипт будет срабатывать на атаку против пастуха и стада в любой момент, независимо от того, в каком состоянии они находятся - просто пасутся или уже опять бредут на выпас! ВАЖНО! Скрипты блокировки переманивания стада и пастуха необходимо продублировать для ВСЕХ состояний (значений в ячейке 0), т.к. устанавливать поведение мы им будем также различное! Всё. Вроде бы должно работать безупречно, но тут нас поджидает засада от ФГ: если корова или пастух будут СРАЗУ убиты (а не ранены), то скрипт "отсутствия опасности для коров и пастуха" сработает СРАЗУ, поскольку уже не будет на карте ни одного юнита, который бы был атакован более чем (сколько-то времени назад) - что разрушит нашу стройную конструкцию! Вы можете предложить свои варианты, а можете просто фиксировать "падёж" в стаде. Для этого будем считать наших коровок (и пастуха) и в ячейке 2 и сравнивать их количество с сохранённым в ячейке 1. Коров у нас 6 + 1 пастух, добавляем в стартовый скрипт действие: занести в ячейку 1 число 7 занести в ячейку 2 число 0 и напишем ещё один скрипт (подсчёта текущего количества) Считаем коров и пастуха число в ячейке 0 менее чем 3 (т.к. значение 3 соответствует смерти пастуха и менять при нём мы уже ничего не будем ) =>
число в ячейке 2 увеличить на номер 1 (добавляем пастуха) Поместим его в самом верху, после стартового - он будет вести арифметику при каждом проходе Теперь нам остаётся только изменить условия атаки стада: число в ячейке 0 менее чем 2 и ( группа А0 атакована менее чем 10 сек. назад или группа А1 атакована мене чем 10 сек. назад или число в ячейке 2 менее, чем число в ячейке 1) =>
Установить АИ зона 1 группы А0 в 2 Установить АИ поведение группы А0 в Пехота охранять зону Установить АИ зона 1 группы А1 в 2 Установить АИ зона 1 группы А1 в 2 Установить АИ поведение группы А1 в Пехота охранять зону занести в ячейку 0 число 2 завести будильник 0 на 1 мин. Пишем скрипт для возобновления подсчёта звенит будильник 0 и число в ячейке строго 0 =>
выключить будильник 0
У вас нет доступа для просмотра вложений в этом сообщении. |
|||||||||
03 ноя 2018, 18:14 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Одним из наиболее важных условий правильной работы скриптов является уникальность условий в каждом конкретном случае (на самом деле это не совсем так: возможно использование абсолютно одинаковых условий в разных скриптах при совершенно различных реакциях, но это всё же особый разговор).
При большом количестве скриптов это становится проблемой. Вообще, независимо от количества скриптов и сложности миссии правильным решением будет использование блочной, или модульной структуры: когда за работу (действия) конкретной группы юнитов отвечает свой, независимый блок, никак не пересекающийся с другими блоками. Тема эта очень обширна и охватить её одним разом невозможно, поэтому будем "погружаться" постепенно. Допустим, у нас есть миссия (не важно, в процессе создания или практически готовая). Как типовой (и наиболее часто используемый) вариант: некая линия фронта, на которой и будут происходить бои. Опять же, как правило, имеется несколько зон, где ожидается атака игрока и имеется какое-либо противодействие со стороны AI. Мы расширим имеющийся (не важно какой и как реализованный) функционал - добавив отдельный и универсальный модуль. Начнём с того, что создадим "запрос о помощи": при старте миссии заносим в выбранную для этого ячейку (допустим, 10) число 0 - это у нас будет "вызов". Каждый возможный участок (зону) условно закрепляем за своим числом. Например, у нас 5 зон (их номера не принципиальны, но для простоты пусть будут с 1 по 5, сопоставим им те же числовые значения) - т.е. значение будет "указателем" на источник опасности. Как частность - можно и варьировать "степень" опасности, для 1 степени заносим значения 1-5, для второй - 11-15 и для третьей - 21-25 - например, в зависимости от "массовости" натиска (т.е. значение в ячейке у нас становится ещё и вариатором степени угрозы). Далее есть нюанс: если миссия простая или Вы не предполагаете атаку на двух участках (т.е. мы не боимся, что в одном проходе по скриптам значение будет перезаписано) - делаем просто: в уже имеющиеся скрипты на зону при атаке игрока в реакции просто добавляем:
где х - значение, соответствующее зоне атаки Если важно сохранять ВСЕ возможные варианты - немного усложняем: копируем исходное условие (скрипт, первый - не трогаем!), а вот во вторую копию добавляем:
И число в ячейке строго 0 В реакцию же пишем только: занести в ячейку 10 число х где х - опять же, значение, соответствующее зоне атаки ВСЁ остальное удаляем! На этом можно и закончить вводную часть - мы имеем маркер вызова, НИКАК не связанный с основным массивом нашей миссии (скриптов). Для особо продвинутых можно добавить и "очередь" таких вызовов - это довольно просто: Скажем, мы хотим хранить до трех запросов в перспективе. для этого выделяем три ячейки: с10 (как основную) с11 и с12 - как "очередь" Все запросы при такой организации будут заноситься в ячейку с12 и далее, по мере освобождения (или отсутствия вообще) "смещаться" к основному (ячейка с10) маркеру. Для этого пишем простенький блок:
число в ячейке с10 точно 0 и число в ячейке с11 больше 0 => занести в ячейку с10 значение с11 Таким образом, мы будем иметь в памяти до трёх вызовов о "помощи", которые можем использовать в дальнейшем на своё усмотрение. |
|||||||||
13 дек 2018, 14:25 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Итак, запрос у нас есть. Что же мы с ним будем делать?
Чип и Дейл спешат на помощь ![]() Вариантов может быть множество, рассмотрим наиболее очевидные и схематично - т.е. пока без конкретной реализации поведения. Условимся, что имеем мы три абстрактные блока скриптов, каждый из которых управляет свой группой и никак не связан с "основным течением" нашей миссии. Всё, что нам надо знать - такие группы есть и за их поведение отвечает какая-либо ячейка памяти (за каждую группу - своя). Допустим, у нас будет:
с52 - 2 группа с53 - 3 группа
с5Х > 0 - группа "работает" Иногда бывает полезно отметить и "смерть" группы: с5Х = 99 - группа накрылась "медным тазом" (значение произвольное, не суть) Обращаю внимание ещё раз: будем рассматривать ТОЛЬКО различные процедуры АКТИВАЦИИ помощи и варианты подхода к этому вопросу, о самой работе таких блоков - позже. 1 вариант (самый простой) - один запрос - одна помощь от одной группы:
занести в ячейку с10 число 0
занести в ячейку с10 число 0
занести в ячейку с10 число 0 Если свободной группы нет - вызов будет висеть, пока его кто-то не примет или пока значение (зона запроса) не изменится - тут он тоже будет "висеть" до принятия, но уже на другую зону - тут зависит от Ваших настроек выше. 2 вариант (тоже простой), но помощь идет от ВСЕХ свободных групп:
Данная дилемма тоже решаема, но сложнее и мы не будем тут её рассматривать. 3 вариант (1 гибридный). При условии, что у нас варьируется "степень" опасности (и с10= 1-5 / 11-15 / 21-25). Сводится к тому, что каждая группа у нас среагирует ТОЛЬКО на свою степень опасности:
4 вариант (2 гибридный). Так же варьируется "степень" (с10= 1-5 / 11-15 / 21-25). Сводится к тому, что каждая группа, среагировав - будет видоизменять степень запроса:
занести в ячейку с10 число 0
уменьшить значение в ячейке с10 на число 10
занести в ячейку с10 число 0
уменьшить значение в ячейке с10 на число 10
занести в ячейку с10 число 0
уменьшить значение в ячейке с10 на число 10 Конечно, этим не ограничиваются возможности и варианты, всё зависит от Вашей фантазии, но, скорее всего, они будут различными производными от рассмотренных вариантов. Ещё раз отмечу важный момент: построенная нами система вызовов НЕЗАВИСИМА от прочих условий, может быть расписана своим блоком скриптов (каждая!) и при этом находиться в любом месте. Не забываем (во избежание проблем) занести в стартовом скрипте нули в нужные ячейки, в нашем случае:
занести в ячейку с51 число 0 занести в ячейку с52 число 0 занести в ячейку с53 число 0 выключить это условие Примечание к вар. 2 и 3 Отсутствие поддержки со стороны групп (когда все заняты) можно обойти, причём различными способами:
- добавить ещё одну ячейку, в которой будем фиксировать факт активации помощи (заносить туда ненулевое значение) и уже только при наличии там какого-то числа "обнулять" запрос - расписать (усложнить) скрипты таким образом, чтобы они сами фиксировали факт активации Продолжение следует .... |
|||||||||
13 дек 2018, 18:44 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Как оказалось, до сих пор существует заблуждение, будто бы в Sudden Strike не работает патрулирование
![]() Вместо того, чтобы расписывать работу этих скриптов - предлагаю скомпилированную демонстрацию работы вместе с исходником:
У вас нет доступа для просмотра вложений в этом сообщении. |
|||||||||
25 апр 2020, 12:16 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Относительно подсчета юнитов в зоне можно использовать и иной метод (на самом деле - массу различных вариантов).
Скажем, нам необходимо постоянно знать численность в нескольких зонах постоянно и/или только когда там появится игрок. Сделаем так:
С2 - вывод итога 1 зоны С3 - вывод итога 2 зоны С4 - вывод итога 4 зоны ..... С9 - вывод итога 8 зоны При этом старт можно как разнести по разным скриптам (например, при использовании будильника), так и объединить (иногда) в одном. Разберем оба варианта. Самый простой - нам надо просто знать количество) Пишем: число в ячейке С1 больше, чем 0 и юнитов игрока в зоне 1 более чем 0 =>
занести в ячейку С2 число С1 занести в ячейку С1 число 0
занести в ячейку С3 число С1 занести в ячейку С1 число 0
занести в ячейку С3 число С1 занести в ячейку С1 число 0 И т.д. На выходе имеем в ячейках С2 - С9 кол. юнитов игрока в зонах 1 - 8 Обратите внимание: скрипты НЕ выключаются и в каждом - последовательно выполняется по три мат.действия. Если нам надо отдельно посчитать определенные группы в зонах и/или стартовать обсчет по особым условиям то сделаем более развернуто. Сначала запускаем подсчет: число в ячейке С1 равно 0 и юнитов игрока в зоне 1 более чем 0 =>
занести в ячейку С2 число 0 Пишем:
число в ячейке С1 больше, чем 0 и юнитов группы А1 в зоне 1 точно 2 => занести в ячейку С2 число 2 число в ячейке С1 больше, чем 0 и юнитов группы А1 в зоне 3 точно 1 => занести в ячейку С2 число 3 ... число в ячейке С1 больше, чем 0 и юнитов группы А1 в зоне 1 точно 15 => занести в ячейку С2 число 15 число в ячейке С1 больше, чем 0 и юнитов группы А1 в зоне 1 больше чем 15 => занести в ячейку С2 число 16
число в ячейке С1 больше, чем 0 и юнитов группы А2 в зоне 1 точно 2 => увеличить число в ячейке С2 на число 2 число в ячейке С1 больше, чем 0 и юнитов группы А2 в зоне 1 точно 3 => увеличить число в ячейке С2 на число 3 ... число в ячейке С1 больше, чем 0 и юнитов группы А2 в зоне 1 больше чем 15 => увеличить число в ячейке С2 на число 16 Важно! Независимо от того, будем мы наблюдать за одной зоной или за несколькими - в конце обсчета КАЖДОЙ зоны обязательно надо добавить такой скрипт:
Повторяем всю эту писанину для всех зон, которые нам нужны. На выходе мы ПОСТОЯННО будем иметь в ячейках С2-Сх количество юнитов игрока в зонах 1-х Особо хочу заметить: 1. Если (к примеру) по нашей идее зоны 1 и 2 (любое количество) составляют один логический объект - то мы точно так же можем посчитать общее число для этих зон (суммируя зоны 1-3-х к одной ячейке С2 и сбрасывая значение С1 в конце блока этих зон). 2. Разделить "вес" группы пехоты и танков, добавляя последние несколько раз) 3. Можно использовать С1 как "внутренний" буфер (переменную). Например, нам надо просто посчитать кол. юнитов игрока на трех объектах, но первый - состоит из 3 (1,2,3) зон, второй - из 2 (4,5), а третий-из 4 (6,7,8,9). Тогда наши скрипты будут выглядеть так: число в ячейке С1 равно 0 и (юнитов игрока в зоне 1 более чем 0 или юнитов игрока в зоне 2 более чем 0 или юнитов игрока в зоне 3 более чем 0) =>
добавить в ячейку С1 количество юнитов игрока в зоне 2 увеличить число в ячейке С2 на число С1 добавить в ячейку С1 количество юнитов игрока в зоне 3 увеличить число в ячейке С2 на число С1 занести в ячейку С1 число 0
добавить в ячейку С1 количество юнитов игрока в зоне 5 увеличить число в ячейке С3 на число С1 занести в ячейку С1 число 0
добавить в ячейку С1 количество юнитов игрока в зоне 7 увеличить число в ячейке С4 на число С1 добавить в ячейку С1 количество юнитов игрока в зоне 8 увеличить число в ячейке С4 на число С1 добавить в ячейку С1 количество юнитов игрока в зоне 9 увеличить число в ячейке С4 на число С1 занести в ячейку С1 число 0 На выходе мы получим: в С2- суммарное количество юнитов игрока в зонах 1-3 в С3- суммарное количество юнитов игрока в зонах 4 и 5 в С4- суммарное количество юнитов игрока в зонах 6-9 4. И много-много чего еще. |
|||||||||
28 окт 2020, 00:17 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Красноармеец
Зарегистрирован: 13 дек 2022, 21:44 Сообщений: 6 ![]() |
Здравствуйте! Я начинающий тут и многого не знаю. Прошу помощи, как у старших в этом деле! Не могу написать несколько скриптов для моего противника ( не понимаю, что и куда прописывать).
1) Я хотел бы, чтобы пехота противника занимала здания(Причём не хаотичные, а именно те, которые я захочу) и при виде моих войск начинала стрельбу. Как это сделать? 2) Как сделать так, чтобы бронетехника врага не стояла на месте, как в музее (хотя там при виде врага, макеты не стреляют), а защищала определённую зону? Типо чтобы при виде моих войск они начинали защищать выбранную мной зону. Желательно, чтоб в этой зоне вражеская техника не стояла на месте, а иногда передвигалась. 3) Что нужно написать в скриптах, чтобы вражеская артиллерия не просто стояла на месте, а вела по мои войскам огонь? Я имею ввиду, чтоб огонь она вела, когда меня замечает вражеские юниты. Заранее спасибо и извините, если написал не туда. |
|||||||||
15 дек 2022, 23:57 |
![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
1. Поведение: "Пехота - охранять зону", нужные здания пометить этими зонами. Стрелять (при возможности) они и так будет, сли не установлен флаг "Засада" и/или "Прятаться до последнего момента"
2. Поведение: "Танки - охранять зону" + (желательно) "хаотично распределиться в зоне" 3. Не понятно: какая артиллерия? У ПТО и гаубиц совершенно разная работа. ПС. Рекомендую прочитать все документы из шапки + внимательно просмотреть поведение в редакторе и скрипты - большинство вопросов отпадут |
|||||||||
16 дек 2022, 11:45 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Красноармеец
Зарегистрирован: 13 дек 2022, 21:44 Сообщений: 6 ![]() |
Спасибо большое! В 3 пункте я имел ввиду, артиллерия ( гаубицы, желательно еще и миномёты, но они почему то вечно пустые оказываются). Вообщем спасибо за помощь !
|
|||||||||
16 дек 2022, 17:52 |
![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Имеется ввиду - БК? Так его надо пополнять, сделать это можно "естественно" (ящик, машина снабжения) или скриптом. Но минометам (обычно это ПТО) и гаубицам требуется установка разного поведения. |
|||||||||
16 дек 2022, 18:04 |
![]() ![]() |
|||||||||
![]() |
||||||||||
Красноармеец
Зарегистрирован: 13 дек 2022, 21:44 Сообщений: 6 ![]() |
ну вот мне желательно сделать так, чтобы вражеские гаубицы стреляли по мои войскам, когда противник засекает меня
|
|||||||||
16 дек 2022, 18:41 |
![]() |
|||||||||
![]() |
||||||||||
Лейтенант
Зарегистрирован: 12 янв 2012, 05:22 Сообщений: 2268 Откуда: МВО ![]() |
Скипт "Дать залп одной из гаубиц в зону/по объекту" Какое условие Вы для этого установите - вопрос, скорее философский: что значит "засекает"? Насколько помню, гаубица будет обстреливать противника и сама, если он обнаружен и находится в зоне досягаемости. ПС Мне думается, скрипт не нуждается в пояснении, достаточно было просто прочитать его название в редакторе ![]() И еще: никто и никогда Вам не вложит в голову все решения, пробуйте сами! Ставим на карту гаубицу, тыкаем наблюдателей, нагло перед ними ездим и смотрим результат ![]() |
|||||||||
20 дек 2022, 16:35 |
![]() ![]() |
|||||||||
![]() |
Страница 1 из 1 |
[ Сообщений: 18 ] |
Часовой пояс: UTC + 3 часа |
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |