Текущее время: 18 окт 2018, 09:46



Ответить на тему  [ Сообщений: 7 ] 
Помогу со скриптами 
Автор Сообщение
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Помогу со скриптами
В своё время на портале sudden-strike.ru тема пользовалась большой популярностью и давно назрела необходимость её реанимировать.
Перед тем, как задать вопрос - НАСТОЯТЕЛЬНО рекомендуется ВНИМАТЕЛЬНО прочитать следующее:
Разработка карт
Разработка миссий
Логические команды
Руководство пользователя Sudden Strike 2 (Противостояние 4)
Сохранённая часть темы с портала sudden-strike.ru
Особенности движка и редактора

Теперь несколько аксиом:
    1. Все скрипты работают
    2. Если скрипт не работает - то Вы ошиблись
    3. Скриптам всё равно, что думаете Вы - у них свой "процессор"
    4. Если Вы и скрипты "думаете" различно - проверьте, правильно ли Вы реализовали свою идею в уловиях
    5. Скрипты "читаются" постоянно, последовательно сверху вниз. После считывания крайнего пороцесс повторяется.
    6. Игра не "тормозит" от большого количества скриптов.
      В движке нет ограничений на количество. (возможно! это и не так, но Вы НИКОГДА не напишете их столько, чтобы это проверить).
      ~5000 скриптов обрабатываются движком за 2-4 сек. (в зависимости от мощности компьютера).
    7. Не используйте одинаковые условия в двух (и более) скриптах.
      Если какой-либо параметр задействован в нескольких, добавьте еще один (во ВСЕ скрипты, где он присутствует) использовав логический оператор "И".
      Строго говоря, это не обязательно, но потом не "dash2" на "не работает" или "работает не так".
    8. Старайтесь избегать "жестких" условий - и Вы "закроете" 50% проблем.
    9. Не стройте миссию линейно (всегда просчитывайте и прописывайте в скриптах ВСЕ варианты).
      Вам же не придется потом писать, что миссия не завершается, т.к. игрок свернул "у того столба" направо, а не на лево.
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


05 июл 2017, 16:38
Профиль ICQ
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Re: Помогу со скриптами
Если всё же что-то у вас не работает, то ЕДИНСТВЕННО правильным алгоритмом Ваших дествий должно быть следующее:
    1. Проверяем, что условие выполняется
    2. Проверяем, что реакция (ответ на условие) выполняется

По какой-то странной (мне не понятной) причине люди, которые обращаются за помощью НЕ СЛЫШАТ того, что им говорят и на вопрос "проверил ли ты условие" отвечают: "ну как же, ведь у меня..... бла-бла-бла!"
По п.1 именно ПРОВЕРЯЕМ, а не думаем: ну, у меня же .... - т.е. получаем ОТ ДВИЖКА подтверждение.
Как это сделать?
В самом простом варианте (если условие простое, т.е. односложное - просто вывести сообщение (например, с именем скрипта) - убрав при этом всё остальное, типа ...отправить ... завести ... и пр.
Если условий несколько и простого вывода сообщения не достаточно (Вы его не видете) - разбейте свой скрипт на несколько (по кол. условий) и проверьте каждое отдельно.

Бывает крайне полезно отслеживать в реальном времени какие-либо условия (что, кстати, поможет Вам еще и понять логику работы скриптов). Например, у Вас скрипт с условием:
Юнитов гр."A1">0 в зоне z01 и юнитов гр."B1">0 в зоне z02 и юнитов гр."C1">0 в зоне z03[/i]
    => сделать что-то
и Вы хотите отслеживать их наличие в указанных зонах. Для этого добавляем три скрипта непоследственно ПЕРЕД своим
    1. Юнитов гр."A1">0 в зоне z01
      => сказать фразу {текст}=A1>0 в зоне 01
    2. Юнитов гр."B1">0 в зоне z02
      => сказать фразу {текст}=B1>0 в зоне 02
    3. Юнитов гр."C1">0 в зоне z03
      => сказать фразу {текст}=C1>0 в зоне 03
ВАЖНО! Тестовые ообщения лучще располагать внизу списка, начиная с самого крайнего - так Вы не затронете свои (из самой миссии) тексты.
Теперь у Вас постоянно будет "бежать" столбик с сообщениями:
    A1>0 в зоне 01
    B1>0 в зоне 02
    C1>0 в зоне 03
Если какого-то из сообщений не появилось - условие не выполняется (т.е. юнитов группы в зоне нет)

Более сложный вариант: нам надо отслеживать ИЗМЕНЕНИЯ состояния (условия), т.е., например, изменение наличия (или количества) юнитов гр."A1" в зоне 01. Для этого воспользуемся ячейками для "запоминания" текущего состояния нашего условия. Пишем:
    1. Начало миссии
      => занести в ячейку с01 число 99
    2. Юнитов гр."A1"=0 в зоне z01 и НЕ верно, что число в ячейке с01=0
      => занести в ячейку с01 число 0
      => сказать фразу {текст}=A1=0 в зоне 01
    3. Юнитов гр."A1">0 в зоне z01 и НЕ верно, что число в ячейке с01=1
      => занести в ячейку с01 число 1
      => сказать фразу {текст}=A1>0 в зоне 01
Третий скрипт можно заменить на такие:
    3. Юнитов гр."A1"=1 в зоне z01 и НЕ верно, что число в ячейке с01=1
      => занести в ячейку с01 число 1
      => сказать фразу {текст}=A1=1 в зоне 01
    4. Юнитов гр."A1"=2 в зоне z01 и НЕ верно, что число в ячейке с01=2
      => занести в ячейку с01 число 2
      => сказать фразу {текст}=A1=2 в зоне 01
    5. Юнитов гр."A1"=3 в зоне z01 и НЕ верно, что число в ячейке с01=3
      => занести в ячейку с01 число 3
      => сказать фразу {текст}=A1=3 в зоне 01
    6. Юнитов гр."A1">3 в зоне z01 и НЕ верно, что число в ячейке с01=4
      => занести в ячейку с01 число 4
      => сказать фразу {текст}=A1>3 в зоне 01
И тогда мы будем видеть сообщения о кол. юнитов в зоне только при изменении этого количества + будем знать сколько именно их там находится.
ВАЖНО! Обратите внимание на отличие скрипта №6 (крайнего) от остальных.

Подобную систему можно использовать для контроля ЛЮБЫХ условий - все зависит только от Вашей фантазии.
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


05 июл 2017, 17:26
Профиль ICQ
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Re: Помогу со скриптами
Добавил файлик:
Некоторые особенности движка и редактора
Полезно знать при работе с редактором и создании своих карт/миссий (будет дополняться).
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


13 июл 2017, 13:26
Профиль ICQ
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Re: Помогу со скриптами
К сожалению, в игре отсутствует генератор случайных чисел (точнее, в самом движке он есть и активно используется, но вот в редакторе - не доступен). И для картодела становится проблемой выполнение некоторых действий "случайно", вне зависимости от поведения игрока. Привязка же к одному или даже нескольким конкретным действиям игрока, как правило, не дают желаемого результата.

Естественно, на любой карте есть войска как игрока, так и противника Что важно: если действия компа во многом зависят от нас, то как будет строить оборону и проводить наступление игрок предугадать обычно не всегда возможно. Кроме того, для решения своих задач мы используем зоны на карте. Вот эти два элемента (зоны и перемещения юнитов игрока) мы и задействуем!
Прежде всего определимся с необходимой вариативностью (т.е. с размером числового ряда, достаточного нам для операций). Для примера выберем 50. Далее мы выделяем под работу генератора две ячейки (одна у нас будет переменной, а вторая самим рабочим оператором).
Смысл дальнейших действий сводится к следующему: в зависимости от обстоятельств суммировать некие числа в переменной. На что тут необходимо обратить особое внимание:
    1. Начинать работу скриптов именно с генератора, т.е. он должен отработать ДО того, как пойдут все Ваши скрипты (иными словами - находиться сверху)
    2. Генератор должен работать постоянно, т.е. на КАЖДОМ проходе просмотра скриптов. На самом деле не обязательно делать это постоянно, более того: иногда даже вредно (в зависимости опять-таки от потребностей. В помощь тут циклический будильник для выполнения работы раз в 10 сек... 1мин... 5 мин... - кому как надо.
    3. В конце каждого прохода сохранять результат своей работы (в ячейке, которую мы и будем использовать для своих реакций).
    4. Обеспечить разовую отработку скриптов на каждом проходе.
Теперь примеры. Скажем, у нас будет:
С1 - переменная
С2 - вывод итога
С3 - счетчик
Далее пишем:
    число в ячейке С3 точно 1 => добавить в ячейку С1 количество юнитов в группе А0 + увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 2 => добавить в ячейку С1 количество юнитов в группе А1 + увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 3 => добавить в ячейку С1 количество юнитов в группе А2 + увеличить число в ячейке С3 на 1
и т.д. для всех групп, которые у нас есть или для части (на Ваш выбор)
    1 замечание: НАСТОЯТЕЛЬНО не рекомендую использовать вычитание - движек ведёт себя непредсказуемо с отрицательными числами!
    2 замечание: кто-то скажет, что использовать тут С3 нет обязательно, но такой подход ко всему позволит исключить любые неопределённости, и в итоге - избавит от ошибок.
    3 замечание: использование скрипта добавить в ячейку количество юнитов в группе даёт компактность всей конструкции, но никак не завязано на зоны, т.е. при отсутствии боевой движухи мало что даст;
Можно сделать так:
    число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 больше, чем 0 => увеличить число в ячейке С1 на число 5 + увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 2 и юнитов группы А1 в зоне 8 больше, чем 0 => увеличить число в ячейке С1 на число 8 + увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 3 и юнитов группы D3 в зоне 18 больше, чем 0 => увеличить число в ячейке С1 на число 18 + увеличить число в ячейке С3 на 1
и т.д. для всех групп и зон, которые хотим учитывать
Самый качественный подсчёт даст следующий метод:
    число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 точно 0 => увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 точно 1 => увеличить число в ячейке С1 на число 1+ увеличить число в ячейке С3 на 1
    число в ячейке С3 точно 1 и юнитов группы А1 в зоне 5 точно 2 => увеличить число в ячейке С1 на число 2 + увеличить число в ячейке С3 на 1
... и так до максимального числа юнитов в группе А1, потом то же для всех других зон:
    число в ячейке С3 точно 2 и юнитов группы А1 в зоне 8 точно 0 => увеличить число в ячейке С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 больше, чем 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 (которое лежит в пределах от 0 до 50) и кроме того, добавлять произвольные числа в С1 в любых скриптах далее, что отразится в результате следующего прохода.
    1 замечание: значение С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
И заключительное пояснение: что же нам делать с итогом (значением С2)?
Напомню: значение в ячейке - это точно такое же условие, как и все прочие. Причём мы можем использовать любые комбинации. Например:
    больше 0 и меньше 26 - даст 50% вероятность
    больше 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!
Если мы напишем:
    число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 50 => уменьшить число в ячейке С1 на 50
то получим числовой ряд от 1 до 51 (т.е. 0 сюда не попадёт!)
Если же напишем:
    число в ячейке С3 точно 79 и число в ячейке С1 больше, чем 50 => уменьшить число в ячейке С1 на 51
то получим числовой ряд от 0 до 50 (т.е. в том числе и 0!)
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


14 июл 2017, 14:04
Профиль ICQ
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Re: Помогу со скриптами
Каждому опытному игроку известна такая "фишка": при острой нехватке пехоты можно задействовать имеющихся на карте животных. Конечно, это будет не полноценный боевой юнит, но в качестве орудийного расчета, наблюдателя в здании или даже разведчика-смертника - вполне подойдёт. Как правило, животные вводятся в миссии для антуража и обычно принадлежат группе "нейтрал", но ничто не мешает "переманить" их на свою сторону офицером или генералом. Как этого избежать?
Вариант, при котором такой юнит не имеет поведения мы даже не будем рассматривать, т.к. болванчик/статуя в виде коровы или овцы - это (на мой взгляд) запредельное неуважение к игрокам.
Если же они "живые" и имеют хоты бы минимальный набор поведения - значит имеют они и свою группу.
В этом случае блокировать использование игроком животных очень просто!
Допускаем, что наши коровки имеют группу B1 и принадлежат игроку "нейтрал" (это логично, поскольку их не станет расстреливать ни один из участников конфликта). Пишем простенький скрипт:

    (Более чем 0 юнитов игрока "игрок" в группе B1) или (Более чем 0 юнитов игрока "противник" в группе B1) или (Более чем 0 юнитов игрока "союзник" в группе B1) =>
    Передать группу B1 игроку "нейтрал"
    Установить поведение для группы B1 ....

Обращаю Ваше внимание на два момента:
    1. Настоятельно рекомендуется перечислить ВСЕХ игроков на карте.
    2. Необходимость ещё раз установить группе поведение после смены (принадлежности) игроку.
"Выключать" такой скрипт не надо, игра будет постоянно (при каждом проходе) проверять наличие указанной группы у всех других игроков и срабатывать ТОЛЬКО в случае, если таковых будет более нуля.
Удачи!
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


08 ноя 2017, 13:46
Профиль ICQ
Лейтенант
Аватар пользователя

Зарегистрирован: 12 янв 2012, 10:30
Сообщений: 3328
Сообщение Re: Помогу со скриптами
Я им просто высокую мораль и опыт ставлю - вроде прокатывает.
.
_________________
Изображение


09 ноя 2017, 10:40
Профиль ICQ
Мл. Лейтенант

Зарегистрирован: 12 янв 2012, 05:22
Сообщений: 1585
Откуда: МВО
Сообщение Re: Помогу со скриптами
kit писал(а):
Я им просто высокую мораль и опыт ставлю - вроде прокатывает.
Против лома (генерала) - нет приёма! "hunter"
.
_________________
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)


09 ноя 2017, 14:21
Профиль ICQ
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ Сообщений: 7 ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


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

Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.
Русская поддержка phpBB