Союз | Union

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

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


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


Скрипты

Сообщений 121 страница 150 из 345

121

Спасибо!  o.O Как же я сам этого не заметил!

0

122

Для темы "ПАЛАТА ИНТЕНСИВНОЙ ТЕРАПИИ" и не только:

Скрипт от Зигфрида
Предназначен для пехоты, сидящей в бтр и затем выходящей и атакующей:

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)

+2

123

Можно назвать функцией выбора
Применял например для коррекции действия компа в определенной зоне
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)

+2

124

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

Скрипт от Жукова (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х таких атак. В конце скрипта есть функция остановки данного блока. Я его ввел, что бы по истечении определенного времени (за которое атака гарантированно успеет полностью завершиться) принудительно остановить работу блока, и немного разгрузить игру.

+2

125

Ловите, чуваки, очередное издание блицсправочника по Lua и не только от издательства "Запрещенная Литература":)
Версия 1.8
http://ifolder.ru/15354206

+2

126

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

Ловите, чуваки, очередное издание блицсправочника по Lua и не только от издательства "Запрещенная Литература":)
Версия 1.8
http://ifolder.ru/15354206

Спасибо огромное!  :flag:
Можешь вкратце сказать в чем основное отличие от 1,4? Глянув навскидку, из нового пока увидел только примеры скриптов.
Примеры хорошие, дельные (особенно первые три). Но четвертый, это ппц (тот что с атакой танков волнами)  :D  В том смысле, что он такой сложный и запутанный, что разобраться в нем даже опытным ребятам будет непросто. Я чуть глаза не поломал  :D

0

127

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

Можешь вкратце сказать в чем основное отличие от 1,4? Глянув навскидку, из нового пока увидел только примеры скриптов.
Примеры хорошие, дельные (особенно первые три). Но четвертый, это ппц (тот что с атакой танков волнами)    В том смысле, что он такой сложный и запутанный, что разобраться в нем даже опытным ребятам будет непросто. Я чуть глаза не поломал

В новом справочнике более детальное описание редактора юнитов, оружия. С последним примером полностью разбираться не обязательно, главное лишь научиться правильно задавать входные параметры. Это очень мощный и универсальный скрипт. Он применялся мной в патчмоде 1.2 в миссиях по обороне Ленинграда и в др.

0

128

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

В новом справочнике более детальное описание редактора юнитов, оружия. С последним примером полностью разбираться не обязательно, главное лишь научиться правильно задавать входные параметры. Это очень мощный и универсальный скрипт. Он применялся мной в патчмоде 1.2 в миссиях по обороне Ленинграда и в др.

Ясно, пасиб :)

Насчет скрипта, то я сразу понял, что он универсальный :) Я похожий для себя тоже в одно время сделал, тоже как универсальный, но он попроще. Если интересно, то в посте 146 этой темы. Почти тот же принцип - танки с пехотой двигаются по последовательности зон.

0

129

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

Насчет скрипта, то я сразу понял, что он универсальный  Я похожий для себя тоже в одно время сделал, тоже как универсальный, но он попроще. Если интересно, то в посте 146 этой темы. Почти тот же принцип - танки с пехотой двигаются по последовательности зон.

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

0

130

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

Да, я видел этот скрипт. Но мой скрипт имеет много преимуществ.

Ну да. Я и не спорю

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

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

А у меня так и есть ;) У каждого танка свой индивидуальный маршрут.

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

Во-первых у меня пехота сидит на танке, а не следует за ним, и сидит на нем до тех пор, пока на расстоянии выстрела от танка не появится хотя бы один вражеский юнит. Т.е. если первая волна атакующих пробивает первый опорный пункт обороны, то вторая волна просто проезжает этот пункт обороны.

Кстати, а что если танки с пехотой на броне встретят скажем разведчика (какую нибудь случайную блуждающую БА или танк), и слезут с танка еще далеко от линии обороны игрока? То потом танки оторвутся от пехоты?

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

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

Что то не понял что ты конкретно имеешь ввиду. Если можешь, объясни чуть подробнее. Скрипт интересный и хотелось бы в нем получше разобраться.

0

131

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

Кстати, а что если танки с пехотой на броне встретят скажем разведчика (какую нибудь случайную блуждающую БА или танк), и слезут с танка еще далеко от линии обороны игрока? То потом танки оторвутся от пехоты?

Верно подмечено, есть такой недостаток. Но при этом игрок рискует отдать за просто так этого самого разведчика. А при нападении с нескольких сторон, потери будут неоправданы. Но если всё-таки приспичет, можно изменить условие в скрипте проверки на наличие более чем одного юнита на пути, но это уже дела вкуса. На практике (первая миссия "Оборона Ленинграда" за русских в патчмоде1.2) после первой волны наступления уже не до посыла разведчиков.

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

Что то не понял что ты конкретно имеешь ввиду. Если можешь, объясни чуть подробнее. Скрипт интересный и хотелось бы в нем получше разобраться.

Допустим по карте движется 100 танков. Каждому танку необходимо постоянно давать команду движения в нужном направлении и следить за тем, когда необходимо ссаживать пехоту и тоже её вести. Ессесно это жрет кучу процессорного времени. А если пойдет вторая волна - ещё 100 танков? Скрипт будет жрать в два раза больше процессорного времени. Выход - выкидывать из обработки те танки, которые уже сдохли. Что и реализовано в моем скрипте

0

132

Теперь понял  :flag:

0

133

Честно говоря, пока в том скрипте не разобрался, но чувствую, что очень-очень хорош.

И необходим.

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

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

Например я столкнулся с этой проблемой и пришлось каждому танку, бтр и скваду пехотинцев давать скриптовый номер. Это связано с миссией, где я не задаю определенную зону боев, игрок сам должен выбрать где ему обороняться или контратаковать. Трудность у меня состояла как раз как заставить пехоту ссаживаться в нужный момент. Я конечно поступал проще: просто выбирал определенное место, высаживал десант и потом атака шла с промежуточными остановками (чтобы отстающие юниты догоняли более скоростных) Этот приём имеет очень много слабых мест.

Вот и возлагаю надежды на этот скрипт

0

134

На днях сделал маленькое, но чень приятное открытие: стартовая команда parad используется для пехоты, чтобы задать ей боевой порядок, причем parameter определяет тип построения. Самое интересное, что если снайперу, дать эту команду с праметром 4, он сможет перемещаться незаметно для игрока, чего раньше нельзя было добиться другими способами. Но к сожалению снайпер при этом никого не атакует. Вот если бы удалось научить его ещё и выстреливать противника, то открылись бы весьма интересные перспективы.

0

135

А вот интересно, можно ли, например с помощью стартовых команд, заставить AI построить мост?

0

136

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

А вот интересно, можно ли, например с помощью стартовых команд, заставить AI построить мост?

Такого способа неизвестно мировой науке

0

137

Jukov
Там же есть стартовая команда Build Bridge
Она не работает, да?

Ситуация такова: возможно ли что бы появившиеся по скрипту ремонтные машины под руководством AI с помощьювышеприведенной стартовой команды
смогли построить обычный мост в определенном месте (т.е мост выделен как обычно, для постройки) ?

Попробую сам сегодня проверить :-)

Отредактировано simeo (2010-01-19 14:31:31)

0

138

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

Ситуация такова: возможно ли что бы появившиеся по скрипту ремонтные машины под руководством AI с помощьювышеприведенной стартовой команды
смогли построить обычный мост в определенном месте (т.е мост выделен как обычно, для постройки) ?
Попробую сам сегодня проверить

Исследования данного вопроса показывают, что нет. Но если получиться - пиши

0

139

Jukov
Увы, вызывает зависание компа в момент появления машинки, при чем вызывает так, что пришлось переустанавливать Блиц
жаль конечно что не реализована, а то какое поле для карт :-(

Отредактировано simeo (2010-01-19 20:26:19)

0

140

Небольшое разъяснение по сценарной команде миссий
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)

+1

141

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

жаль конечно что не реализована, а то какое поле для карт

Я думаю здесь можно пойти обходным путем: создаем на карте обычный мост, в xml присваиваем ему ScriptID, затем этот же ScriptID прописываем в подкреплениях. Затем пишем скрипт, если к реке в определенном месте подъезжает ремонтная машина - выдается подкрепление в виде моста.

+1

142

Jukov
Шикарная идея!

0

143

Парни, подскажите пожалуйста, в чем может быть причина того, что третья задача не выводится?
В принципе указанная область городка зачищена, т.е. вторая и первая задачи выполнены.

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)

0

144

всмысле "не выводится?"

не засчитывается да?
может исправить if(GetNUnitsInParty(1)<=0) then
на if(GetNUnitsInParty(1)==0) then
либо if(GetNUnitsInParty(1)<=1) then

дело в том что функция GetNUnitsInParty подразумевает всех юнитов компьютера на карте.
Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает

еще и не ясно, как это функция считает пехоту - поштучно или сквадами

Отредактировано simeo (2010-01-25 01:35:46)

+1

145

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

всмысле "не выводится?"

Первая задача - выполнена (снайпер обнаружен и уничтожен)
Вторая задача - выполнена (указанный район городка зачищен)
Третья задача - не выдается ( нет сообщения, нет стрелки)
Хотя если выполнить треью задачу, как бы вне очереди, то выполнение засчитывается и сообщение о выполнении задачи выводится.

Отредактировано moskvich (2010-01-25 01:37:45)

0

146

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

может исправить if(GetNUnitsInParty(1)<=0) then
на if(GetNUnitsInParty(1)==0) then
либо if(GetNUnitsInParty(1)<=1) then
дело в том что функция GetNUnitsInParty подразумевает всех юнитов компьютера на карте.
Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает
еще и не ясно, как это функция считает пехоту - поштучно или сквадами

Спасибо за совет, попробую.

0

147

moskvich
Если она не выводится, разумно предположить, что надо посмотреть в файле 1.xml, может нет координат задания?
а выполняться может потому, что срабатывает наверное не 3-е задание, а функция выигрыша.

0

148

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

Если она не выводится, разумно предположить, что надо посмотреть в файле 1.xml, может нет координат задания?
а выполняться может потому, что срабатывает наверное не 3-е задание, а функция выигрыша.

Неужели может быть так просто? Словом все надо посмотреть. Еще раз спасибо.
_________________________________________________________________________
Добавлено:
Нет, координаты задания заданы. Будем дальше копать.
Для выигрыша тоже вроде рановато, поскольку не выполнена последняя 4 задача.

Отредактировано moskvich (2010-01-25 01:54:46)

0

149

Хз, это надо перелопачивать всю миссию :blush:

0

150

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

Т.е. если остался хоть один пехотинец в забытом богом и игроком углу, то естественно выполнение 3-й задачи не сработает

Да, ты оказался прав. Прошу меня извинить за ложную тревогу. Действительно один американец-засранец улегся во дворе м/д кустами. Прочесал все и не нашел его. Да и расположился он на приличном расстоянии от отмеченной зоны в городе. А городок совершенно не просматривается, много закрытых дворов и кустарника, заборов и прочего.
Но все равно, премного благодарен за отклик и вариант изменения скрипта, наверняка пригодится в будущем.+1

Отредактировано moskvich (2010-01-26 01:54:53)

0


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