Спасибо! Как же я сам этого не заметил!
Скрипты
Сообщений 121 страница 150 из 345
Поделиться1222009-12-02 16:06:09
Для темы "ПАЛАТА ИНТЕНСИВНОЙ ТЕРАПИИ" и не только:
Скрипт от Зигфрида
Предназначен для пехоты, сидящей в бтр и затем выходящей и атакующей:
function Ataka10()---------- движение к зоне высадки
Cmd(0, 134, GetScriptAreaParams("DD2"));
RunScript("Vyhod1",1000);
Suicide();
end;
function Vyhod1()--------- высадка
if (GetNScriptUnitsInArea(134, "DD2")==1) then
Cmd(5,134,GetScriptAreaParams("DD2"));
RunScript("Pehota1", 1000);
Suicide();
end;
end;
function Pehota1()---------атака высадившейся пехоты
Cmd(3, 1341, GetScriptAreaParams("DD7"));
Suicide();
end;
Скрипт от Жукова (Jukov)
Патруль, гениально простой и эффективный скипт
function Patrol1()
if GetUnitState(100)==1 then
local a;
a=GetIGlobalVar("temp.patrol1",0);
Cmd(3,100,GetScriptAreaParams("z"..a));
a=a+1; if a>7 then a=0; end; -- здесь 7 - номер последней патрульной точки
SetIGlobalVar("temp.patrol1",a);
end;
end;
-- Инициализация
function Init()
RunScript("Patrol1",10000);
end;
на карте необходимо создать юнит с номером скрипта 100 и проставить в виде скриптовых зон точки патрулирования.
Самя первая долна называться z0, следующая z1 и т.д.
Скрипт от Reks`a
Запрет на вылет всей авиации игрока
function DA1()
if (GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_bomber",0)+
GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_scout",0))==0 then
DisableAviation(0,-1);
RunScript("A1",5000);
Suicide();
end;
end;
ПРИМЕЧАНИЕ: естественно, что все зоны и скриптовые номера, а также переменные надо заменить на свои
Очень удобный скрипт для отступления, вернее для подсчёта оставшихся юнитов (особенно пехоты)
Из миссии Курск
function RetreatHB()
local hb = GetNUnitsInScriptGroup(3101) + GetNUnitsInScriptGroup(3102) + GetNUnitsInScriptGroup(3103) + GetNUnitsInScriptGroup(3111) +
GetNUnitsInScriptGroup(3112) + GetNUnitsInScriptGroup(3113) + GetNUnitsInScriptGroup(3114) + GetNUnitsInScriptGroup(3115) +
GetNUnitsInScriptGroup(3116);
if (hb == 3) then
Cmd(0,3101, GetScriptAreaParams("3101r"));
Cmd(0,3102, GetScriptAreaParams("3102r"));
Cmd(0,3103, GetScriptAreaParams("3103r"));--...и т.д--
Cmd(0,3116, GetScriptAreaParams("w1"));
Suicide();
end;
end;
Примечание: особенно это касается пехоты, потому как если отряд неполный, то игра начинает считать не отряд, а каждого пехотинца отдельно
И еще когда скриптовый номер имеет каждый отдельный сквад пехоты или юнит
Отредактировано simeo (2009-12-02 16:41:18)
Поделиться1232009-12-02 16:26:45
Можно назвать функцией выбора
Применял например для коррекции действия компа в определенной зоне
function DR1()
if (GetNUnitsInArea(1,"w1") > 0) then
RunScript("DRpos1", 60000 + RandomInt(60000));
Suicide();
elseif (GetNUnitsInArea(0,"w1") > 0) then
RunScript("DRmov1", 60000 + RandomInt(60000));
Suicide();
end;
end;
Функция изменения направления атаки для компьютера
function EFpos2()
RunScript("EFpos2a", 15000);
RunScript("EFpos2b", 15000);
Suicide();
end;
function EFpos2a()
Cmd(3,4011, GetScriptAreaParams("4021b"));
Cmd(3,4012, GetScriptAreaParams("4022b"));
Cmd(3,4013, GetScriptAreaParams("4023b"));
KillScript("EFpos2b");
Suicide();
end;
function EFpos2b()
Cmd(3,4011, GetScriptAreaParams("4021e"));
Cmd(3,4012, GetScriptAreaParams("4022e"));
Cmd(3,4013, GetScriptAreaParams("4023e"));
KillScript("EFpos2a");
Suicide();
end;
Отредактировано simeo (2009-12-02 16:36:55)
Поделиться1242009-12-02 16:52:29
Скрипт от Жукова (Jukov)
Патруль, гениально простой и эффективный скипт
function Patrol1()
if GetUnitState(100)==1 then
local a;
a=GetIGlobalVar("temp.patrol1",0);
Cmd(3,100,GetScriptAreaParams("z"..a));
a=a+1; if a>7 then a=0; end; -- здесь 7 - номер последней патрульной точки
SetIGlobalVar("temp.patrol1",a);
end;
end;-- Инициализация
function Init()
RunScript("Patrol1",10000);
end;
на карте необходимо создать юнит с номером скрипта 100 и проставить в виде скриптовых зон точки патрулирования.
Самя первая долна называться z0, следующая z1 и т.д.
Ага, четкий скрипт. И простой как 2 копейки. Видно, что человек знает свое дело. Раньше я почему то боялся глобальных переменных, но сейчас потихоньку начинаю их юзать.
Вот вам тоже, относительно небольшой скрипт. Но очень полезный при организации атак противника:
function A207()
LandReinforcement(207);
RunScript("A2071",10000);
RunScript("A207Stop",900000);
Suicide();
end;
function A2071()
local a,b,c;
for a=2071,2078,1 do
b=(a*10)+1;
c=(a*10)+2;
Cmd(3,b,GetScriptAreaParams(b));
Cmd(3,c,GetScriptAreaParams(b));
end;
RunScript("A2072",5000);
Suicide();
end;
function A2072()
local a,b,c,d,e;
for a=2071,2078,1 do
b=(a*10)+1;
c=(a*10)+2;
for d=1,7,1 do
e=((a*10)+d);
if((GetNUnitsInScriptGroup(b,1)==GetNScriptUnitsInArea(b,e))and(GetNUnitsInScriptGroup(c,1)==GetNScriptUnitsInArea(c,e))and((GetNUnitsInScriptGroup(b,1)>0)or(GetNUnitsInScriptGroup(c,1)>0)))then
Cmd(3,b,GetScriptAreaParams(e+1));
Cmd(3,c,GetScriptAreaParams(e+1));
Suicide();
end;
end;
end;
RunScript("A2073",5000);
Suicide();
end;
function A2073()
RunScript("A2072",5000);
Suicide();
end;
function A207Stop()
KillScript("A2072");
KillScript("A2073");
Suicide();
end;
Скрипт уже довольно старый, и его можно немного еще упростить, но мне пока это лень делать (нет особой надобности).
Как он работает:
Этот скрипт организовывает атаку группы из восьми танков, при каждом из которых закреплен взвод пехоты. Каждый из взводов пехоты следует за своим танком. Танки двигаются по восьми последовательным зонам. У каждого танка свои зоны. В данном случае их всего 64 зоны (по 8 на каждый танк). На каждой из зон танк останавливается и ждет пока его догонит его пехота, и далее они вновь продолжают движение. Таким образом достигается эффект взаимодействия танка с пехотой. Скрипт так же учитывает случаи, если ко то из пары убит. Тогда танк или пехота уже не ждут своего мертвого напарника, а продолжают атаку в одиночку. Единственное слабое место - если танк подорвется на мине, пехота без него дальше не пойдет, так как танк еще жив.
В скрипте используется сквозная система номерации как скриптовых номеров юнитов, так и их зон.
В приведенном скрипте она следующая:
Атакует группа 207
Группа состоит из восьми пар: 2071 - 2078;
В каждой паре юниты так же имеют отдельные номера: танк 20711, пехота 20712 (к номеру пары приставлена одна цифра, танк - 1, пехота - 2);
Названия зон следования для каждой пары состоит из номера пары и приставленного к нему номера (по счету) зоны. Пример последовательности зон для пары 2071: 20711, 20712, 20713, ... , 20718. Пара 2071 последовательно двигается в боевой готовности по выше написанным восьми зонам. Каждая из пар движется параллельно, каждая по своей восьмерке зон.
Скрипт легко копируется, и в нем (помимо названий функций) нужно только сменить номера пар на новые. Самое сложное для данного скрипта - не сделать опечатки при раздаче номеров юнитам и при раздаче номеров зонам (все таки 64 зоны нужно назвать).
Скрипт легко укоротить, или расширить до нужного количества пар и нужного количества зон.
Однако, он немного жрет памяти, так как обсчитывает много информации на единицу времени. При движении по зонам 8 на 8, это уже немного ощущается. По этому, я не рекомендую использовать паралельно больше 2х таких атак. В конце скрипта есть функция остановки данного блока. Я его ввел, что бы по истечении определенного времени (за которое атака гарантированно успеет полностью завершиться) принудительно остановить работу блока, и немного разгрузить игру.
Поделиться1252009-12-07 16:25:07
Ловите, чуваки, очередное издание блицсправочника по Lua и не только от издательства "Запрещенная Литература"
Версия 1.8
http://ifolder.ru/15354206
Поделиться1262009-12-07 17:00:55
Ловите, чуваки, очередное издание блицсправочника по Lua и не только от издательства "Запрещенная Литература"
Версия 1.8
http://ifolder.ru/15354206
Спасибо огромное!
Можешь вкратце сказать в чем основное отличие от 1,4? Глянув навскидку, из нового пока увидел только примеры скриптов.
Примеры хорошие, дельные (особенно первые три). Но четвертый, это ппц (тот что с атакой танков волнами) В том смысле, что он такой сложный и запутанный, что разобраться в нем даже опытным ребятам будет непросто. Я чуть глаза не поломал
Поделиться1272009-12-07 17:20:01
Можешь вкратце сказать в чем основное отличие от 1,4? Глянув навскидку, из нового пока увидел только примеры скриптов.
Примеры хорошие, дельные (особенно первые три). Но четвертый, это ппц (тот что с атакой танков волнами) В том смысле, что он такой сложный и запутанный, что разобраться в нем даже опытным ребятам будет непросто. Я чуть глаза не поломал
В новом справочнике более детальное описание редактора юнитов, оружия. С последним примером полностью разбираться не обязательно, главное лишь научиться правильно задавать входные параметры. Это очень мощный и универсальный скрипт. Он применялся мной в патчмоде 1.2 в миссиях по обороне Ленинграда и в др.
Поделиться1282009-12-07 18:11:16
В новом справочнике более детальное описание редактора юнитов, оружия. С последним примером полностью разбираться не обязательно, главное лишь научиться правильно задавать входные параметры. Это очень мощный и универсальный скрипт. Он применялся мной в патчмоде 1.2 в миссиях по обороне Ленинграда и в др.
Ясно, пасиб
Насчет скрипта, то я сразу понял, что он универсальный Я похожий для себя тоже в одно время сделал, тоже как универсальный, но он попроще. Если интересно, то в посте 146 этой темы. Почти тот же принцип - танки с пехотой двигаются по последовательности зон.
Поделиться1292009-12-07 18:48:22
Насчет скрипта, то я сразу понял, что он универсальный Я похожий для себя тоже в одно время сделал, тоже как универсальный, но он попроще. Если интересно, то в посте 146 этой темы. Почти тот же принцип - танки с пехотой двигаются по последовательности зон.
Да, я видел этот скрипт. Но мой скрипт имеет много преимуществ.
Во-первых у меня пехота сидит на танке, а не следует за ним, и сидит на нем до тех пор, пока на расстоянии выстрела от танка не появится хотя бы один вражеский юнит. Т.е. если первая волна атакующих пробивает первый опорный пункт обороны, то вторая волна просто проезжает этот пункт обороны.
Во-вторых у меня легко определяется количество атакующих по сумме двух глобальных переменных - это облегчает проблемму определения победы игрока. Одна переменная показывает количество оставшихся танков без пехоты, другая - количество танков с пехотой на броне (или на которых сидела пехота)
В-третьих если у танка подорвут траки, а затем его починят, он продолжит движение по маршруту.
В-четвертых для каждого танка(!!!) можно легко задать свой собственный маршрут с помощью скриптовых зон.
В-пятых функция обработки движения танков и пехоты построена по принципу конвейера - можно в любой момент добавить новый атакующий юнит, а те юниты, которые погибли уходят с конвейра - тем самым обеспечивается оптимизация скорости выполнения функции.
Поделиться1302009-12-07 20:35:21
Да, я видел этот скрипт. Но мой скрипт имеет много преимуществ.
Ну да. Я и не спорю
В-четвертых для каждого танка(!!!) можно легко задать свой собственный маршрут с помощью скриптовых зон.
А у меня так и есть У каждого танка свой индивидуальный маршрут.
Во-первых у меня пехота сидит на танке, а не следует за ним, и сидит на нем до тех пор, пока на расстоянии выстрела от танка не появится хотя бы один вражеский юнит. Т.е. если первая волна атакующих пробивает первый опорный пункт обороны, то вторая волна просто проезжает этот пункт обороны.
Кстати, а что если танки с пехотой на броне встретят скажем разведчика (какую нибудь случайную блуждающую БА или танк), и слезут с танка еще далеко от линии обороны игрока? То потом танки оторвутся от пехоты?
В-пятых функция обработки движения танков и пехоты построена по принципу конвейера - можно в любой момент добавить новый атакующий юнит, а те юниты, которые погибли уходят с конвейра - тем самым обеспечивается оптимизация скорости выполнения функции.
Что то не понял что ты конкретно имеешь ввиду. Если можешь, объясни чуть подробнее. Скрипт интересный и хотелось бы в нем получше разобраться.
Поделиться1312009-12-07 20:53:29
Кстати, а что если танки с пехотой на броне встретят скажем разведчика (какую нибудь случайную блуждающую БА или танк), и слезут с танка еще далеко от линии обороны игрока? То потом танки оторвутся от пехоты?
Верно подмечено, есть такой недостаток. Но при этом игрок рискует отдать за просто так этого самого разведчика. А при нападении с нескольких сторон, потери будут неоправданы. Но если всё-таки приспичет, можно изменить условие в скрипте проверки на наличие более чем одного юнита на пути, но это уже дела вкуса. На практике (первая миссия "Оборона Ленинграда" за русских в патчмоде1.2) после первой волны наступления уже не до посыла разведчиков.
Что то не понял что ты конкретно имеешь ввиду. Если можешь, объясни чуть подробнее. Скрипт интересный и хотелось бы в нем получше разобраться.
Допустим по карте движется 100 танков. Каждому танку необходимо постоянно давать команду движения в нужном направлении и следить за тем, когда необходимо ссаживать пехоту и тоже её вести. Ессесно это жрет кучу процессорного времени. А если пойдет вторая волна - ещё 100 танков? Скрипт будет жрать в два раза больше процессорного времени. Выход - выкидывать из обработки те танки, которые уже сдохли. Что и реализовано в моем скрипте
Поделиться1322009-12-07 20:59:38
Теперь понял
Поделиться1332009-12-08 11:28:46
Честно говоря, пока в том скрипте не разобрался, но чувствую, что очень-очень хорош.
И необходим.
В-четвертых для каждого танка(!!!) можно легко задать свой собственный маршрут с помощью скриптовых зон.
Например я столкнулся с этой проблемой и пришлось каждому танку, бтр и скваду пехотинцев давать скриптовый номер. Это связано с миссией, где я не задаю определенную зону боев, игрок сам должен выбрать где ему обороняться или контратаковать. Трудность у меня состояла как раз как заставить пехоту ссаживаться в нужный момент. Я конечно поступал проще: просто выбирал определенное место, высаживал десант и потом атака шла с промежуточными остановками (чтобы отстающие юниты догоняли более скоростных) Этот приём имеет очень много слабых мест.
Вот и возлагаю надежды на этот скрипт
Поделиться1342010-01-13 14:28:06
На днях сделал маленькое, но чень приятное открытие: стартовая команда parad используется для пехоты, чтобы задать ей боевой порядок, причем parameter определяет тип построения. Самое интересное, что если снайперу, дать эту команду с праметром 4, он сможет перемещаться незаметно для игрока, чего раньше нельзя было добиться другими способами. Но к сожалению снайпер при этом никого не атакует. Вот если бы удалось научить его ещё и выстреливать противника, то открылись бы весьма интересные перспективы.
Поделиться1352010-01-18 12:31:47
А вот интересно, можно ли, например с помощью стартовых команд, заставить AI построить мост?
Поделиться1362010-01-19 14:13:43
А вот интересно, можно ли, например с помощью стартовых команд, заставить AI построить мост?
Такого способа неизвестно мировой науке
Поделиться1372010-01-19 14:24:12
Jukov
Там же есть стартовая команда Build Bridge
Она не работает, да?
Ситуация такова: возможно ли что бы появившиеся по скрипту ремонтные машины под руководством AI с помощьювышеприведенной стартовой команды
смогли построить обычный мост в определенном месте (т.е мост выделен как обычно, для постройки) ?
Попробую сам сегодня проверить
Отредактировано simeo (2010-01-19 14:31:31)
Поделиться1382010-01-19 20:01:42
Ситуация такова: возможно ли что бы появившиеся по скрипту ремонтные машины под руководством AI с помощьювышеприведенной стартовой команды
смогли построить обычный мост в определенном месте (т.е мост выделен как обычно, для постройки) ?
Попробую сам сегодня проверить
Исследования данного вопроса показывают, что нет. Но если получиться - пиши
Поделиться1392010-01-19 20:25:43
Jukov
Увы, вызывает зависание компа в момент появления машинки, при чем вызывает так, что пришлось переустанавливать Блиц
жаль конечно что не реализована, а то какое поле для карт
Отредактировано simeo (2010-01-19 20:26:19)
Поделиться1402010-01-20 12:57:20
Небольшое разъяснение по сценарной команде миссий
GetNUnitsInArea(iPlayer, “Name”)
Касается это пехоты. УЧИТЫВАЕТСЯ КАЖДЫЙ ПЕХОТИНЕЦ. Т.е если в зоне находится 4 сквада по 10 пехотинцев, то игра будет считать 40 юнитов, а не 4
Вот пример части скрипта и два скрина подтверждающие:
function Message1()
if (GetNUnitsInArea(0, "a1") < 10) then
Cmd(0,1000, GetScriptAreaParams("a2"));
Cmd(0,1001, GetScriptAreaParams("a2"));
Cmd(0,1002, GetScriptAreaParams("a2"));
Cmd(0,1003, GetScriptAreaParams("a2"));
Suicide();
end;
end;
если в зоне а1 остается меньше 10 юнитов, то они отступают из зоны а1 в зону а2
Отредактировано simeo (2010-01-20 12:58:42)
Поделиться1412010-01-22 12:41:54
жаль конечно что не реализована, а то какое поле для карт
Я думаю здесь можно пойти обходным путем: создаем на карте обычный мост, в xml присваиваем ему ScriptID, затем этот же ScriptID прописываем в подкреплениях. Затем пишем скрипт, если к реке в определенном месте подъезжает ремонтная машина - выдается подкрепление в виде моста.
Поделиться1422010-01-22 18:05:58
Jukov
Шикарная идея!
Поделиться1432010-01-25 00:49:47
Парни, подскажите пожалуйста, в чем может быть причина того, что третья задача не выводится?
В принципе указанная область городка зачищена, т.е. вторая и первая задачи выполнены.
function ToWin()
if (GetNUnitsInArea(1,"anfang")<=0)
and(GetNUnitsInArea(1,"Versorgungszentrum")<=0)
and(GetNUnitsInArea(1,"OosterbeekChurch")<=0) then
Win(0);
Suicide();
end;
end;
function ToLoose()
if(GetNUnitsInArea(0,"Gelungenerangriff")<=0) then
Loose()
Suicide()
end;
end;
function ToLoose2()
if(GetNUnitsInArea(0,"bruecke1")<=0) then
Loose()
Suicide()
end;
end;
function Flieger()
RunScript("Fliegen",1000);
DisableAviation(1,-1);
SwitchWeatherAutomatic(0);
Suicide();
end;
function Fliegen()
DisableAviation(0,0);
DisableAviation(0,3);
Suicide();
end;
function Transporter1()
EnableAviation(1,2);
SetIGlobalVar("ParadropSquad.ScriptID", 1101);
Cmd(22,2000,1,7792,5556);
RunScript("Paras1",120000);
Suicide();
end;
function Paras1()
Cmd(3,1101,9800,15267);
if(GetNUnitsInScriptGroup(1101)<=0) then
LandReinforcement(1);
LandReinforcement(2);
DisplayTrace("Units from Tettau have arrived.");
DisplayTrace("Do not expect too much from them as they are still forming up.");
Suicide();
end;
end;
function Schutz()
EnableAviation(1,1);
Cmd(20,1600,1,7800,5655);
Suicide();
end;
function Break()
DisableAviation(1,1);
Suicide();
end;
function Welle23()
if(GetNUnitsInArea(1,"Feindlicherspaehtrupp")<=0) then
RunScript("Angriff2",145000);
RunScript("Break1",129000);
RunScript("Angriff3",369000);
RunScript("Schutzstaffel3",380000);
RunScript("Transporter3",376000);
RunScript("Break12",379000);
RunScript("Schutzstaffel4",700000);
RunScript("Transporter4",705000);
RunScript("Break23",715000);
RunScript("Break24",715000);
Suicide();
end;
end;
function Angriff2()
EnableAviation(1,4);
Cmd(36,1602,1,3181,10785);
Suicide();
end;
function Break1()
DisableAviation(1,2);
Suicide();
end;
function Angriff3()
EnableAviation(1,4);
Cmd(36,1603,1,3621,12685);
Suicide();
end;
function Transporter3()
EnableAviation(1,2);
SetIGlobalVar("ParadropSquad.ScriptID", 1102);
Cmd(22,3001,1,12232,4676);
RunScript("Paras2",120000);
Suicide();
end;
function Paras2()
Cmd(3,1102,8822,14446);
if(GetNUnitsInScriptGroup(1,1102)<=0) then
LandReinforcement(24);
DisplayTrace("SS Grenadiers Regiment Landstorm Nederland have arrived.");
Suicide();
end;
end;
function Schutzstaffel3()
EnableAviation(1,1);
Cmd(20,1807,1,12260,4806);
Suicide();
end;
function Break12()
DisableAviation(1,2);
DisableAviation(1,1);
Suicide();
end;
function Transporter4()
EnableAviation(1,2);
SetIGlobalVar("ParadropSquad.ScriptID", 1103);
Cmd(22,3003,1,12795,1000);
RunScript("Paras3",120000);
Suicide();
end;
function Paras3()
Cmd(3,1103,12353,7241);
Suicide();
end;
function Schutzstaffel4()
EnableAviation(1,1);
Cmd(20,1807,1,10278,5498);
Suicide();
end;
function Break23()
DisableAviation(1,2);
Suicide();
end;
function Break24()
DisableAviation(1,1);
Suicide();
end;
function Fliegerallarm()
if(GetNUnitsInArea(0,"Waldweg")<=0) then
LandReinforcement(14);
DisplayTrace("The reserve units of the Freiwilligen Regiments Landstorm Nederland have arrived.");
Suicide();
end;
end;
function AngriffS()
EnableAviation(1,4);
Cmd(36,1606,1,10318,9678);
Suicide();
end;
function BreakS()
DisableAviation(1,-1);
Suicide();
end;
function Sonntag8()
if(GetNUnitsInArea(0,"bruecke1")<=0) then
LandReinforcement(930);
LandReinforcement(931);
LandReinforcement(720);
LandReinforcement(721);
RunScript("Sonntag",260000);
RunScript("TNT",268111);
RunScript("Sprengeinheit",247999);
RunScript("AngriffS",100000);
RunScript("BreakS",101000);
Suicide();
end;
end;
function Sprengeinheit()
if(GetNUnitsInArea(0,"bruecke1")<=0) then
LandReinforcement(918);
Suicide();
end;
end;
function Pflanke()
if(GetNUnitsInArea(0,"bruecke2")<=0) then
LandReinforcement(917);
Suicide();
end;
end;
function Regrupierung()
if(GetNUnitsInArea(1,"Bindunganfang")<=0) then
LandReinforcement(10);
DisplayTrace("II SS Panzer Corps sends its reconnaissance units.");
DisplayTrace("Lead units are already on the way.");
RunScript("Nachschub",120000);
Suicide();
end;
end;
function Nachschub()
LandReinforcement(6);
LandReinforcement(8);
LandReinforcement(400);
DisplayTrace("II SS Panzer Corps is now at your disposal.");
Suicide();
end;
function Nachschub2()
if(GetNUnitsInArea(1,"Bindung")<=0) then
DisplayTrace("Remaining units of the II SS Panzer corps are ready for employmennt.");
LandReinforcement(7);
LandReinforcement(9);
Suicide();
end;
end;
function Sonntag()
RunScript("ToLoose2",20000);
RunScript("Erkannt",10000);
RunScript("Verhindert",1000);
Suicide();
end;
function TNT()
if(GetNUnitsInArea(0,"bruecke1")<=0) then
DamageObject(1709,0);
Suicide();
end;
end;
function Erkannt()
if(GetNUnitsInScriptGroup(918)<=0) then
KillScript("ToLoose2");
end;
end;
function Verhindert()
if(GetNUnitsInScriptGroup(918)<=0) then
KillScript("TNT");
end;
end;
function SS9()
if(GetNUnitsInArea(0,"aaa")<=0) then
DamageObject(654,0);
Suicide();
end;
end;
function Kraft()
if(GetNUnitsInArea(1,"Verteidigungslinie")<=0) then
LandReinforcement(405);
RunScript("Bewegung",1000);
Suicide();
end;
end;
function Bewegung()
Cmd(3,408,11333,4497);
Cmd(3,409,8791,4467);
Cmd(3,410,12374,2213);
Cmd(3,411,10448,552);
Suicide();
end;
function Gefaengnis()
DisplayTrace("Ambush..wittmans tiger in trouble,retreat, retreat....");
Cmd(6,1615,16);
RunScript("mg1",1000);
Suicide()
end;
function Gefaengnis1()
Cmd(6,1616,16);
Suicide()
end;
function Gefaengnis2()
Cmd(6,1617,16);
Suicide()
end;
function Gefaengnis3()
Cmd(6,1618,16);
Suicide()
end;
function Gefaengnis4()
Cmd(6,1619,16);
Suicide()
end;
function Gefaengnis5()
Cmd(6,1620,16);
Suicide()
end;
function mg1()
if (GetNScriptUnitsInArea(18, "mg1")>=1) then
GiveCommand(3,18,GetScriptAreaParams("mg2"));
end;
if (GetNScriptUnitsInArea(18, "mg2")>=1) then
GiveCommand(3,18,GetScriptAreaParams("mg1"));
end;
end;
function Objective0()
ObjectiveChanged(0,0);
Suicide();
end;
function Objective_ok0()
if(GetNUnitsInArea(1,"anfang")<=0) then
ObjectiveChanged(0,1);
LandReinforcement(444);
Suicide();
end;
end;
function Objective1()
if(GetNUnitsInArea(1,"anfang")<=0) then
ObjectiveChanged(1,0);
Suicide();
end;
end;
function Objective_ok1()
if(GetNUnitsInArea(1,"Versorgungszentrum")<=0) then
ObjectiveChanged(1,1);
LandReinforcement(404)
Suicide();
end;
end;
function Objective2()
if(GetNUnitsInArea(1,"Versorgungszentrum")<=0) then
ObjectiveChanged(2,0);
Suicide();
end;
end;
function Objective_ok2()
if(GetNUnitsInArea(1,"OosterbeekChurch")<=0) then
ObjectiveChanged(2,1);
RunScript("Verteidigen",1000);
RunScript("BreakT",2100);
Suicide();
end;
end;
function Verteidigen()
EnableAviation(1,4);
Cmd(36,1608,1,6093,3609);
Suicide();
end;
function BreakT()
DisableAviation(1,-1);
Suicide();
end;
function Objective3()
if (GetNUnitsInArea(1,"anfang")<=0)
and(GetNUnitsInArea(1,"Versorgungszentrum")<=0)
and(GetNUnitsInArea(1,"OosterbeekChurch")<=0) then
ObjectiveChanged(3,0);
Suicide();
end;
end;
function Objective_ok3()
if(GetNUnitsInParty(1)<=0) then
ObjectiveChanged(3,1);
Suicide();
end;
end;
function Sicherheit()
if (GetNUnitsInArea(0,"Trakt3")<=0)
and(GetNUnitsInArea(0,"Trakt2")<=0) then
LandReinforcement(300);
LandReinforcement(301);
LandReinforcement(302);
LandReinforcement(303);
Suicide();
end;
end;
function Streckung()
if(GetNUnitsInArea(1,"Angriffstaktik")<=0) then
LandReinforcement(500);
LandReinforcement(501);
RunScript("AngriffB",150000);
RunScript("BreakB",151000);
Suicide();
end;
end;
function AngriffB()
EnableAviation(1,4);
Cmd(36,1641,1,3181,10785);
Suicide();
end;
function BreakB()
DisableAviation(1,4);
Suicide();
end;
function Init()
RunScript("ToWin",10000);
RunScript("ToLoose",10000);
RunScript("Flieger",1000);
RunScript("Transporter1",11200);
RunScript("Schutz",10100);
RunScript("Break",15000);
RunScript("Welle23",10000);
RunScript("Pflanke",10000);
RunScript("Regrupierung",10000);
RunScript("Nachschub2",1000);
RunScript("Fliegerallarm",10000);
RunScript("Sonntag8",1000);
RunScript("SS9",100);
RunScript("Gefaengnis",4000);
RunScript("Gefaengnis1",5000);
RunScript("Gefaengnis2",6000);
RunScript("Gefaengnis3",7000);
RunScript("Gefaengnis4",8000);
RunScript("Gefaengnis5",9000);
RunScript("Sicherheit",1000);
RunScript("Kraft",10000);
RunScript("Objective0",10000);
RunScript("Objective_ok0",10000);
RunScript("Objective1",20000);
RunScript("Objective_ok1",10000);
RunScript("Objective2",20000);
RunScript("Objective_ok2",10000);
RunScript("Objective3",60000);
RunScript("Objective_ok3",10000);
RunScript("Streckung",1000);
end;
Отредактировано moskvich (2010-01-25 01:33:35)
Поделиться1442010-01-25 01:32:53
всмысле "не выводится?"
не засчитывается да?
может исправить if(GetNUnitsInParty(1)<=0) then
на if(GetNUnitsInParty(1)==0) then
либо if(GetNUnitsInParty(1)<=1) then
дело в том что функция GetNUnitsInParty подразумевает всех юнитов компьютера на карте.
Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает
еще и не ясно, как это функция считает пехоту - поштучно или сквадами
Отредактировано simeo (2010-01-25 01:35:46)
Поделиться1452010-01-25 01:36:53
всмысле "не выводится?"
Первая задача - выполнена (снайпер обнаружен и уничтожен)
Вторая задача - выполнена (указанный район городка зачищен)
Третья задача - не выдается ( нет сообщения, нет стрелки)
Хотя если выполнить треью задачу, как бы вне очереди, то выполнение засчитывается и сообщение о выполнении задачи выводится.
Отредактировано moskvich (2010-01-25 01:37:45)
Поделиться1462010-01-25 01:39:10
может исправить if(GetNUnitsInParty(1)<=0) then
на if(GetNUnitsInParty(1)==0) then
либо if(GetNUnitsInParty(1)<=1) then
дело в том что функция GetNUnitsInParty подразумевает всех юнитов компьютера на карте.
Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает
еще и не ясно, как это функция считает пехоту - поштучно или сквадами
Спасибо за совет, попробую.
Поделиться1472010-01-25 01:45:43
moskvich
Если она не выводится, разумно предположить, что надо посмотреть в файле 1.xml, может нет координат задания?
а выполняться может потому, что срабатывает наверное не 3-е задание, а функция выигрыша.
Поделиться1482010-01-25 01:48:13
Если она не выводится, разумно предположить, что надо посмотреть в файле 1.xml, может нет координат задания?
а выполняться может потому, что срабатывает наверное не 3-е задание, а функция выигрыша.
Неужели может быть так просто? Словом все надо посмотреть. Еще раз спасибо.
_________________________________________________________________________
Добавлено:
Нет, координаты задания заданы. Будем дальше копать.
Для выигрыша тоже вроде рановато, поскольку не выполнена последняя 4 задача.
Отредактировано moskvich (2010-01-25 01:54:46)
Поделиться1492010-01-25 11:02:14
Хз, это надо перелопачивать всю миссию
Поделиться1502010-01-26 01:52:49
Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает
Да, ты оказался прав. Прошу меня извинить за ложную тревогу. Действительно один американец-засранец улегся во дворе м/д кустами. Прочесал все и не нашел его. Да и расположился он на приличном расстоянии от отмеченной зоны в городе. А городок совершенно не просматривается, много закрытых дворов и кустарника, заборов и прочего.
Но все равно, премного благодарен за отклик и вариант изменения скрипта, наверняка пригодится в будущем.+1
Отредактировано moskvich (2010-01-26 01:54:53)