Союз | Union

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Союз | Union » Картостроение и скриптовка » Скрипты


Скрипты

Сообщений 301 страница 330 из 345

301

Smoker написал(а):

Да и на срать без вас разберусь.Нашлись то же мне зазнайки.

как его ещё незабанили?

0

302

ДЛЯ ил-2м

1. В функции "kazarma" (в другом варианте скриптов это "Reinf1") стоит условие: если игрока 0 в зоне "база" больше 0, а там все юниты игрока 2 (нейтральные). Посему как условие не выполняется, эта и последующие функции, ею инициированные, то же не выполняются.
Поставь хотя бы одного игрока стороны 0 (Player 0) или убери условие из функции.
2.  Функция "Attack4" нигде не инициирована, поэтому и не выполняется. Здесь еще ошибка: LandReinforcement (22) - в подкреплениях карты оно не прописано, поэтому или не высадится, или игру выбьет.
3. В функции "ToWin" малый промежуток времени - 3с. Пока к немцам подходит подкрепление, условие "Победа" успевает сработать.
4. В функциях "ToWin" и "ToBeDefeated1" условие написано с заглавной буквы I (If), а нужно с прописной - if.

Отредактировано yersinia (2014-02-04 23:07:17)

0

303

yersinia написал(а):

ДЛЯ ил-2м

1. В функции "kazarma" (в другом варианте скриптов это "Reinf1") стоит условие: если игрока 0 в зоне "база" больше 0, а там все юниты игрока 2 (нейтральные). Посему как условие не выполняется, эта и последующие функции, ею инициированные, то же не выполняются.
Поставь хотя бы одного игрока стороны 0 (Player 0) или убери условие из функции.
2.  Функция "Attack4" нигде не инициирована, поэтому и не выполняется. Здесь еще ошибка: LandReinforcement (22) - в подкреплениях карты оно не прописано, поэтому или не высадится, или игру выбьет.
3. В функции "ToWin" малый промежуток времени - 3с. Пока к немцам подходит подкрепление, условие "Победа" успевает сработать.
4. В функциях "ToWin" и "ToBeDefeated1" условие написано с заглавной буквы I (If), а нужно с прописной - if.

Отредактировано yersinia (2014-02-04 23:07:17)

Спасибо огромное!!!

0

304

Люди, зачем нужна эта функция:

function Debug()
Password("Panzerklein");
-- God(0, 1);
ChangeWarFog(1);
-- ViewZone("traintarget",1);
end;

Это функция для читерства что ли?
P.S. она из смертельной схватки

0

305

ил-2м написал(а):

Это функция для читерства что ли?

Именно для него. God соответственно включает режим неубиваемости твоих юнитов, ChangeWarFog - позволяет увидеть то, что видит твой враг. Эти коды, видимо, одинаковы для всех игр на базу Блица 1. Отличается только пароль на запуск читов,

Например

в GZMе это "www.dtf.ru"

0

306

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

0

307

Спасибо

0

308

ил-2м написал(а):

Люди, зачем нужна эта функция

Очень приятно, что есть еще люди, которые увлекаются картоделанием в БК, даже хочется оказать помощь в осмыслении и овладении скриптами.
Чтобы у тебя разрешилось сразу множество вопросов, найди и почитай следующие обучаловки, которые устанавливаются автоматически в следующих играх БК. Это файлы, которые есть в корневой папке "Блицкриг" и "Смертельная схватка":
- mapeditorhelp.chm - здесь есть перечень всех команд с их значением
- mapeditorhelp.html - здесь основательный, но очень простой подход к написанию скриптов и сценария для создания миссии. \
Также скачай и изучи выложенные на форуме "Инструкция по редактору карт игры Блицкриг" от Reks и Asgart (название файла неточное) и "Blitzmaster1.4" от Матвеевского Д. и учебник по LUA v1.8 от товарища Jukov
После изучения указанной мат. части, большинство вопросов разрешатся сами собой. 

Для того, чтобы понять ответ на вопрос, нужно знать 90% ответа.

Отредактировано yersinia (2014-02-11 15:59:45)

+1

309

Подскажите пожалуйста, можно ли как - нибудь посмотреть/узнать скрипты подкреплений в Talvisota ледяной ад? Игру установил, но к ней нет map editor и отсутствует папка maps с соответствующими файлами...

0

310

Бурый мишка100 написал(а):

как - нибудь посмотреть/узнать скрипты ... в Talvisota

В корневой папке Талвисоты открываешь папку «data», в ней папка «maps», в ней файлы скриптов с расширением «.lua». В «Дате» файлы могут быть запакованы – расширение «.pak». Открываешь их с помощью «WinRar», дальше тоже самое.
Как открыть карты Талвисоты через редактор БК уже описывалось на форуме, смотри через поиск или в соответствующей теме.

0

311

Спасибо огромное, нашлись карты

0

312

Всем привет. Помогите, если сможете. Я создал карту на Блицкриг с 4-мя игроками, 2х2, все готово, кроме одного:
На карте 5 "волн" подкреплений, нужны скрипты, которые будут активировать эти подкрепления постепенно каждые 10 минут.
Подкрепления:
1(игроки 0,1)-2(игроки 2,3)
3(0,1)-4(2,3)
5(0,1)-6(2,3)
7(0,1)-8(2,3)
9(0,1)-10(2,3)

0

313

Morusika написал(а):

Помогите, если сможете

Пример скрипта

В редакторе карт ставишь подкрепления для сторон (цифры могут быть любые), не забываешь обозначить в свитке "Подкрепления" номер ID юнита, который соответствует этому подкрепу.Также ставишь на карте юниты, которые приходят в подкреплении, не забывая давать им соответствующий номер игрока (№ плеера) и соответствующий скриптID, обозначенный в разеделе "реинформерсгруп".
Например:
игрок 1, подкрепы для него № 1,  2,  3,  4,  5
игрок 2, подкрепы для него № 6,  7,  8,  9,  10
игрок 3, подкрепы для него № 11, 12, 13, 14, 15
игрок 4, подкрепы для него № 16, 17, 18, 19, 20
В свитке "реинформерсгруп" создаешь подкрепления за №№ от 1 до 20, каждому назначаешь соответствующий номер скриптID; чтобы не путаться, пусть они соответствуют номерам подкреплений.

Тогда:

function Init()
RunScript("podmoga1",600000); - первые подкрепы через 10 минут
end;

function podmoga1()
LandReinforcement(1); --подкреп 1 для №1
LandReinforcement(6); --подкреп 1 для №2
LandReinforcement(11); --подкреп 1 для №3
LandReinforcement(16); --подкреп 1 для №4
RunScript("podmoga2",600000); --инициация второго подкрепа
Suicide();
end;

function podmoga2()
LandReinforcement(2); --подкреп 2 для №1
LandReinforcement(7); --подкреп 2 для №2
LandReinforcement(12); --подкреп 2 для №3
LandReinforcement(17); --подкреп 2 для №4, далее по возрастанию соответственно
RunScript("podmoga3",600000); --инициация третьего подкрепа
Suicide();
end;

function podmoga3()
LandReinforcement(3);
LandReinforcement(8);
LandReinforcement(13);
LandReinforcement(18);
RunScript("podmoga4",600000); --инициация четвертого подкрепа
Suicide();
end;

function podmoga4()
LandReinforcement(4);
LandReinforcement(9);
LandReinforcement(14);
LandReinforcement(19);
RunScript("podmoga5",600000); --инициация пятого подкрепа
Suicide();
end;

function podmoga5()
LandReinforcement(5);
LandReinforcement(10);
LandReinforcement(15);
LandReinforcement(20);
Suicide();
end;

Можно задать условие получения подкрепа через оператор if, тогда не забыть добавить еще один end;
можно разделить по времени для каждого игрока, увеличив число 600000 (милисекунд)в RunScript, прописав каждому отдельную функцию и т.п.. 

Отредактировано yersinia (2014-09-09 13:08:30)

0

314

Всем привет,решил осваивать скрипты,состряпал тренировачный

скрипт

DisplayTrace("демо");
ObjectiveChanged(0,0);

function Bombavia()
Cmd(19, 10000, 0, GetScriptAreaParams("Baza"));
Suicide();
end;

function hinten()
if( GetNUnitsInArea(0,"kim") >=1) then
DisplayTrace("атака");
Suicide();
end;
end;

function ToWin()
if( GetNUnitsInScriptGroup(333,1) <=0) then
Win(0);
Suicide();
end;
end;

function Init()
RunScript( "Bombavia", 8000);
SwitchWeatherAutomatic(0)
SwitchWeather(0);
RunScript( "hinten", 3000);
RunScript( "ToWin", 3000);
end;

победа срабатывает,а бомберы не летят,укажите пожалуйста где косяк.

0

315

Почему не летят?
1) прописана ли авиация игроков 0 и 1 в редакторе?
2) Заданы ли точки вылета в редакторе (для обеих игроков)?
3) Если время между вылетами большое, а другой тип самолетов уже в воздухе, то может и не сработать
4) Нарисована ли зона "Baza" на карте?

ObjectiveChanged(0,0); - оформи функцией, иначе будет постоянно срабатывать при каждой загрузке
SwitchWeatherAutomatic(0);-необязательная точка с запятой, (для лучшего визуального восприятия), SwitchWeather(0); - это тоже желательно оформить функцией (или в нести эти команды-инструкции в самую первую)
RunScript(здесь убрать проблел "Bombavia", 8000); - хотя это может и не критично
Cmd(19, 10000, 0, GetScriptAreaParams("Baza")); - бомбардировщики игрока 0(свои)??! Игрок ведь сам вызывает самолеты, когда это нужно.

+1

316

yersinia написал(а):

2) Заданы ли точки вылета в редакторе (для обеих игроков)?

точно,проглядел.

yersinia написал(а):

бомбардировщики игрока 0(свои)??! Игрок ведь сам вызывает самолеты, когда это нужно.

хотел сделать 1 вылет,и авиацию недоступной.
Спасибо,yersinia все заработало.

0

317

В GZM интересные и большие случайные карты(миссии)... Это хорошо. Сейчас играю "случайку" называется "Бои в сельской местности". Все хорошо, техники хватает... а вот с пехотой незадача. Дали мне 3 сквада по 10 человек и 4 сквада по 5 человек. Прилетела авиация и раздолбала все мои самоходные клонирующие установки... Да и не нравятся мне все эти генетические эксперименты  8-). Я недавно про читы узнал, и решил звать пехоту через чит "Вызов подкрепления"... Но он не срабатывает... Возникает следующее сообщение: "Wrong number reinforcement 0" (0-номер подкрепления в скрипте, имхо). Я понял так... не прописаны для игрока в скрипте к случайкам подкрепления через читы...

Прошу людей соображающих в данном деле ответить на вопрос:

1) Возможно ли прописать такое подкрепление(через чит) для случайных миссий?

0

318

1229 написал(а):

Возможно ли прописать такое подкрепление(через чит

Возможно.
Вызвать подкрепление через чит можно только то, которое существует (прописано) в карте.
Если в начале случайной миссии ни разу не высветилось сообщение "Прибыло подкрепление", то значит, что его не существует (в карте не прописано) - следовательно и никакими читами его вызвать нельзя.
Если в миссии имеется это сообщение ("Прибыло подкрепление"), то его можно повторить и читом.
Но для этого нужно:
1) ввести в консоль после активации чит-режима (пассворд....) фразу: @LandReinforcement(№)
2) Вот здесь возникает проблема - мы не знаем, какой номер подкрепления прописан в карте.
- Можно пойти методом научного тыка: ставить номер от 1 до тысяч - можно заколебаться;
- По идее, они должны быть прописаны в файлах скриптов, находящихся по адресу: Scenarios\Scripts\Village(название части подходящей по смыслу случайки) - там номера подкреплений 3000, 4000 и т.п. порядка.
Есть вариант залезть по этому пути в "Patches", там куски карт, из которых генерируются случайные большие карты. Загрузив их в редактор, можно посмотреть номера подкреплений, которые прописаны.
Вероятно существует и более простой путь, пусть знающие люди, если будет желание, отпишутся.

0

319

Спасибо за ответ. Хотел поставить вам +, но сказали я еще не заслужил такого права...
Если я правильно понял (попрошу подтвердить или опровергнуть).
1) Можно вызвать ранее прибывшее подкрепленее если знаю (или угадаю) его номер.
2) Состав подкреплений прописан в скриптах для всей игры ( т.к. если для каждой карты зачем такое колчество пронумерованных подкреплений от 1 до хотя бы 1000?)
3) В скриптах не может быть прописано подкрепление которое возможно вызвать только через команду-чит.

Заранее спасибо...

0

320

1229 написал(а):

попрошу подтвердить или опровергнуть

1. Да.
2. Нет. В любой карте подкрепление может быть, если оно прописано в редакторе карт (вкладка "Reinforcement Groups") и на саму карту поставлены юниты под соответствующим скриптовым номером. Этот номер произвольный, такой, какой захотелось поставить автору карты, и в разных картах может быть как одинаковым, так и разным. Причем, номер подкрепления необязательно соответствует скриптовому номеру юнита. Загрузи в редактор любую историческую карту и посмотри эту вкладку - там все очень просто. А скрипты для каждой конкретной карты могут вызывать имеющееся (прописанное) в карте подкрепление. 
3. Обычно подкрепления в картах задаются для того, чтобы их вызывать в игре скриптами. Но если подкрепление в карте прописано, то в независимосты от того, вызывается или нет оно скриптом, его можно высадить через читовую команду.
Соответствующий карте скрипт обычно соответствует названию карты или очень похожий, прописывается для даной карты через кнопку со значком гаечного ключа, сам находится тоже в папке "Мэпс".

0

321

Хитрости скриптов

1. При команде № 6 (войти в окоп, здание), при наличи
нескольких окопов с одинаковым номером, вся пехота
идет только в первый прописанный под этим номером
(наверное, первый, который считывается программой). 
Взвод, сидящий в другом окопе или в здании,
самостоятельно выходит из него без команды "покинуть",
чтобы занять окоп (здание).
При команде пехоте 0 (переместиться), 3 (атаковать),
6 (войти в здание, окоп) пехота сама выходит из здания или
окопа и выполняет эти действия без промежуточных команд
(выйти из окопа, подойти и т.п.).

2. При команде № 5 (высадить десант) в координатах
танка, с которого ссаживается пехота,
несколько танков под одним номером высаживают
десант в месте только одного танка (наверное, первый,
который считывается программой).

3. Команду № 1 (атаковать юнит) можно давать нескольким юнитам
для последовательной атаки нескольких юнитов врага под
разными номерами
посредством скриптов GiveCommand, а всех последующих
GiveQCommand. В одной и той функции можно давать
GiveCommand с разными скриптовым номерам юнитов.
Пехота с прописанной командой № 1, находясь
в здании (окопе) не выходит из здания (окопа),
и при недосягаемости врага его, естественно, не атакует.
При команде № 1, если атакуемых юнитов
под одним скриптовым номером больше одного, то атакуется только
первый считываемый, затем выполняется следующее задание.
Для последовательной атаки нескольких юнитов врага
под одним номером, нужно задать условие "если юнитов №...
больше 0, то атаковать юнит №...(тот самый), а Suicide в конце
функции не ставить.

4. При команде № 7 (покинуть окоп, здание), но не заданной любой
точке выхода, пехота не выходит. При установлении им параметра
GetScriptAreaParams или координат "x" и "y" пехота из зданий идет
в эту зону, а сидящая в окопе выходит из него, но остается
рядом с окопом.

5. КАСАЕМО УСТАНОВКИ КАМЕРЫ ПОСРЕДИ ИГРЫ
x,y надо подставлять в
AskClient (“SetCamera(x, y)”)
скриптовые координаты поделить на 1,4.

6. Команда GetNUnitsInScriptGroup считает взводы, а не солдаты

7. Для того чтобы юнит ломал заборы, деревья и прочие
мелкие объекты, в xml самого юнита ничего менять не нужно.
Разрушаемость объекта различными типами юнитов
устанавливается в свойствах самого объекта.
В xml объекта (забора, дерева ) нужно изменить
параметр "AIClasses", поставив там необходимую цифру.
Например, 4 - объект будет давиться только танками,
6 - и танками, и бронетранспортерами,
7 - танками, бронетранспортерами и машинами, и т.д.).

8. В характеристиках над названием орудия есть параметр
Priority ( где-то в середине хмеля ) -
если стоит "0" стрельба на ходу не возможна,
если"1" то стреляет на ходу.

9. Название функции может быть любым. НО!
    - нельзя название начинать с цифры, в конце слова цифры допустимы;
    - не должно быть функций с одинаковыми названиями;
    - в функции не должно быть одинaковых или очень похожих условий
      (н-р, запрашивать количество хоть и разных юнитов, но одной
      стороны и в одной зоне и т.п.)

10. "MinRotateAngle: минимальный угол, на который можно повернуть базу
        во время атаки turret-ом, чтобы улучшить свою позицию (градусы)".
ПОЯСНЕНИЯ (с форума)
В файле consts. xml есть MinRotateAngle. По умолчанию = 90.
Вместо этого прописываем 360.
Что это значит?
Эта команда дается юниту (к примеру танку)
чтоб он мог развернуть базу фронтальной частью
(где макс. броня) к вражескому юниту.
Собственно то же делает и последний юнит.
Получается такие себе танцы на месте,
что смотрится не совсем реалистично и немного напрягает.
Да, важно не подставлять борт противнику,
но в реальности во время боя это происходило не так часто.
Т.о. прописывая 360 вместо 90, юнит,
если и приблизится к противнику на мин. расстояние возможного пробития -
будет использовать только поворот башни,
что будет смотреться вполне реально.

11. Инструкция "ViewZone("area", 1)" (при 1-видеть, при 0-скрыть)
      работает только для игрока; для компа (игрок 1) не работает.
      Пушки врага не обстреливают указанную зону, т.е. не видят юниты игрока
      при любых вариантах этой команды (подставлялись цифры 0; 1; 2 и -1).
      Конечно, если игрока не видят юниты компа.   

12. Для обстрела юнитов игрока компу можно дать такой скрипт:
RunScript("pushka",5000);
      function pushka()
      if (GetNUnitsInScriptGroup(Script)>0) then --условие может быть любое
      local c,d = GetObjCoord(1044);
      Cmd(16,2055,c,d); --беспрерывно стрелять в точку нахождения юнита
      else
      Cmd(9,2055); --отставить, если условине не выполняется, иначе обстрел бесконечен
      Suicide();
      end;
      end;
При этом обстрел ведется при любых сменах положения обстреливаемого юнита,
координаты задаются каждые 5 секунд. 

13. Если в функции какая-либо команда не может выполнится
      (в т.ч. из-за неправильного, но не критичного для хода скриптов написания),
      то эта функция инициируется бесконечно.

0

322

Парни! Есть у кого-нибудь список функций из Карибского Кризиса? Например, интересует функция, которая возвращает количество ресурсов у игрока.

0

323

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

0

324

Я тоже хотел бы такое узнать, так что, знатоки, напишите тут.

0

325

VautourII написал(а):

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

Это делается при помощи генератора случайных чисел, например:

function RandAt()
local i =  RandomInt(20);
if i <= 5 then
   RunScript("Att1",1000);
else
   if i > 5 and i <= 10 then
      RunScript("Att2",1000);
   else
      if i > 10 and i <= 15 then
         RunScript("Att3",1000);
      else
         RunScript("Att4",1000);
      end;
    end;
end;
Suicide();
end;

Переменной i присваивается рандомное число от 0 до 19. И исходя из этого значения выбирается какая именно атака будет запущена. Число 20 взято для более случайного распределения, так можно поиграться со значениями внутри if'а, сделав атаки более или менее вероятными, относительно других.

Отредактировано ИС 3 (2017-02-16 20:46:01)

+1

326

ИС 3 написал(а):

VautourII написал(а):

Это делается при помощи генератора случайных чисел, например:

function RandAt()
local i =  RandomInt(20);
if i <= 5 then
   RunScript("Att1",1000);
else
   if i > 5 and i <= 10 then
      RunScript("Att2",1000);
   else
      if i > 10 and i <= 15 then
         RunScript("Att3",1000);
      else
         RunScript("Att4",1000);
      end;
    end;
end;
Suicide();
end;

Переменной i присваивается рандомное число от 1 (или от 0, вот тут точно сказать не могу) до 20 (или до 19, пусть меня кто-нибудь поправит). И исходя из этого значения выбирается какая именно атака будет запущена. Число 20 взято для более случайного распределения, так можно поиграться со значениями внутри if'а, сделав атаки более или менее вероятными, относительно других.

Подпись автора

    ГЗМ - безусловно самый лучший мод на блицкриг, который когда-либо выходил в свет.

Благодарю. Также столкнулся с невыполнением подводами снабжения следующей команды:
function Snabz()
Cmd(0,2200,4720,10188);
QCmd(0,2200,6671,5691);
QCmd(23,2200,6671,5691);
Suicide();
end;
Промежуточные точки маршрута заданы из-за сложного характера местности.

0

327

VautourII
Не вижу в справочнике команды 23. Она была опытным путём найдена или это ошибка?

0

328

ИС 3 написал(а):

Не вижу в справочнике команды 23

Эта команда (пополнить боезапас) а также команда 43 — пополнить личный состав посредством скриптов не реализованы (недоработки в движке); возможно их задать только через редактор карт (либо как стартовые команды, либо как машины АИ (самый нижний свиток в редакторе карт)).

ИС 3 написал(а):

local i =  RandomInt(20);
if i <= 5 then
   RunScript("Att1",1000);

Случайное число действительно определяется от заданного числа N в пределах от 0(ноль) до N-1 (минус один, т.е. в данном случае это от нуля до 19 включительно).
Наверное нужно уточнить к выложенным скриптам, что в инициированных функциях  "Att1", "Att2" нужно писать команду "атаковать" в разные точки:
например:
function Att1()
Cmd(3,220,4720,10188); ---юниты №220 атакуют в точку 4720,10188
Suicide();
end;

function Att2()
Cmd(3,220,GetScriptAreaParams("Prohor")); ---юниты №220 атакуют в зону "Prohor"
Suicide();
end;

+2

329

Подскажите пожалуйста, как сделать условием запуска функции повреждение того или иного юнита.

0

330

VautourII написал(а):

Подскажите пожалуйста, как сделать условием запуска функции повреждение того или иного юнита.

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

0


Вы здесь » Союз | Union » Картостроение и скриптовка » Скрипты