Союз | Union

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

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


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


Скрипты

Сообщений 241 страница 270 из 345

241

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

Объясните пожалуйста, какие x,y надо подставлять в AskClient (“SetCamera(x, y)”) пробовал и скриптовые ,и VIS координаты, результат не тот.

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

Это вообще криво работает и желательно не использовать

Для того чтобы работало правильно, необходимо скриптовые координаты поделить на 1,4. Тогда камера будет перемещаться именно туда куда надо.
Например, при выборе места перемещения камеры в редакторе следующие координаты: х=10000, у=5000. Но для того чтобы камера переместилась именно в это место, в скрипте следует указывать не эти координаты, а поделить их на 1,4. То есть записываем так: AskClient("SetCamera(7143,3571)"). В итоге в игре камера переместится именно в точку х=10000, у=5000.
Использую практически в каждой миссии.

+2

242

Спасибо большое, я знал, что здесь есть какой-нибудь подвох.

0

243

Нужен совет. Хочу сделать следующее: Прибывает подкрепление с номером N. Если это подкрепление уничтожают, то оно появляется сново(здесь всё понятно), но это должно происходить не постоянно, а всего лишь 3-5 раз. Понимаю, что без переменных тут не обойтись, поэтому прошу помощи, наведите хотя бы на идею как это воплотить в реальность.

0

244

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

Хочу сделать следующее: Прибывает подкрепление с номером N. Если это подкрепление уничтожают, то оно появляется сново(здесь всё понятно), но это должно происходить не постоянно, а всего лишь 3-5 раз.

Я так понял что состав подкреплений один тот же, то есть это одно и то же подкрепление(?). Тогда можно так: Подкрепление с номером (1) в состав которого входят юниты со скриптовыми номерами (10) игрока (0). Заданное количество подкреплений - 5 (SetIGlobalVar("temp.podkrep",5)), если надо меньше, тогда ставишь то число, которое надо.
Первая функция задает прибытие подкреплений по мере полного уничтожения юнитов скриптовой группы (10), то есть находящихся в этом подкреплении и запускает проверочную функцию подсчета количества подкреплений, которая по прибытии 5го подкрепления прекращает этот скрипт.

function Init()
   RunScript("Podkrep1",3000);
   SetIGlobalVar("temp.podkrep",5);
   Suicide();
end;

function Podkrep1()
  if (GetNUnitsInScriptGroup(10,0)==0) then
  LandReinforcement(1);
  SetIGlobalVar("temp.podkrep",(GetIGlobalVar("temp.podkrep",0) - 1));
   RunScript("CheckPodkrep",2000);
   Suicide();
   end;
end;

function CheckPodkrep()
  if GetIGlobalVar("temp.podkrep",0)> 0 then
   RunScript("Podkrep1",2000);
   Suicide();
  else
   KillScript("Podkrep1");
   DisplayTrace("Подкрепления закончились.");
   Suicide();
   end;
end;

Наверняка можно и по-другому, но общий смысл понятен(?)

+1

245

Можно это упростить, что бы не плодить лишних функций, и упаковать все внутрь одной, хотя бы так:

function Init()
      --С периодичностью 5 секунд производим проверку подкреплений
      RunScript("CheckPodkrep",5000);
      --Устанавливаем стартовое значение счетчика подкреплений
      SetIGlobalVar("temp.podkrep",5);
      --В функции Init() суицид не нужен
end;

function CheckPodkrep()
      --Если счетчик подкреплений больше нуля, разрешить вход в основной блок работы функции CheckPodkrep. Поскольку в основном блоке отсутствует прерыватель Suicide(), то по завершении данного прохода, функция вновь запустится через 5 секунд.
      if GetIGlobalVar("temp.podkrep",0)> 0 then
         --Если юнитов в группе №10 = 0, тогда высадить подкрепление №1 и уменьшить счетчик подкреплений на 1.
         if (GetNUnitsInScriptGroup(10,0)==0) then
             LandReinforcement(1);
             SetIGlobalVar("temp.podkrep",(GetIGlobalVar("temp.podkrep",0) - 1));
        end;
     --Если счетчик подкреплений равен или меньше нуля, выдать сообщение на экран и прервать цикл работы функции
     else
         DisplayTrace("Подкрепления закончились.");
         Suicide();
     end;
end;

+2

246

Спасибо большое, ребята.  :idea:

0

247

ИС 3
Если можно, скинь мне полностью свою миссию (ту, в которой я как-то подсказал, как подправить скрипты; карта называлась "map1.bzm"). Только сегодня рассмотрел карту - мне понравилось, интересно глянуть ее в игре.

0

248

Всю вселенную  отдам за команду (реально работающую) записи переменных в txt файл (да куда угодно) из нашего блицевского lua. Ну и команда читающая оттуда так же необходима. Это все что мне надо, что бы сохранять сетевые игры  :flag: 
Может кто то сталкивался :rain:

Отредактировано vlad_82 (2012-03-01 12:29:23)

0

249

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

Всю вселенную  отдам за команду (реально работающую) записи переменных в txt файл (да куда угодно) из нашего блицевского lua. Ну и команда читающая оттуда так же необходима. Это все что мне надо, что бы сохранять сетевые игры  :flag:
Может кто то сталкивался :rain:

Выкладывал ссылку с примером, но потом решил сам проверить. Результат не утешительный. Мало того, похоже, что и остальные стандартные функции Луа в Б1шных скриптах не работают и даже не читаются/определяются. Даже банальная математические math не работают.

0

250

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

Выкладывал ссылку с примером, но потом решил сам проверить. Результат не утешительный. Мало того, похоже, что и остальные стандартные функции Луа в Б1шных скриптах не работают и даже не читаются/определяются. Даже банальная математические math не работают.

Да да, ссылки с примерами я тоже коллекционирую. Я даже уже до сайта разработчиков добрался. Тестил, то что было там.  Но блин, не работает  :surprise:  Какая подлость  :'(  :'(  :'(

0

251

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

Да да, ссылки с примерами я тоже коллекционирую. Я даже уже до сайта разработчиков добрался. Тестил, то что было там.  Но блин, не работает  :surprise:  Какая подлость  :'(  :'(  :'(

Вся беда скорее всего в том, что в Б1 луа лишь встроенный язык для скриптов, а не исполняемый. И по видимому библиотеки с библиотечными функциями луа в сишных исходниках Б1 были попросту не подключены за ненадобностью, поскольку весь расчет ведется на Си, а там свои библиотеки есть.

0

252

Всем Здравия.
Решил тут поэкспериментировать с топливом и скриптами. Эксперимент прошел удачно, но есть нюансы.
Вот сам скрипт.

function BA()
LandReinforcement(45); --Прибывает бензовоз
Cmd(0,66, GetScriptAreaParams("Zapravka1")); --Бензовоз едет через зону Zapravka 1
QCmd(0,66, GetScriptAreaParams("Zapravka2")); --Бензовоз едет через зону Zapravka 2
QCmd(0,66, GetScriptAreaParams("Zapravka3")); --Бензовоз едет через зону Zapravka 3
QCmd(0,66, GetScriptAreaParams("Zapravka4")); --Бензовоз едет через зону Zapravka 4
RunScript("Peredacha",65000); --Бензовоз едет из точки появления заправлять бронемашины и заправляет первую бронемашину
Suicide();
end;

function Peredacha()
ChangePlayer(115, 0); --Бронемашина переходит под управление игрока.
DisplayTrace("Бронемашина заправлена"); --Первая бронемашина заправлена.
Cmd(0,66, GetScriptAreaParams("Zapravka5"));--Бензовоз едет ко второй бронемашине.
RunScript("Peredacha2",15000);--Бензовоз заправляет вторую бронемашину
Suicide();
end;

function Peredacha2()
ChangePlayer(116, 0); --Вторая бронемашина переходит под управление игроку.
DisplayTrace("Бронемашина заправлена");--Вторая бронемашина заправлена.
Cmd(0,66, GetScriptAreaParams("Zapravka6"));--Бензовоз едет к третьей бронемашине.
RunScript("Peredacha3",15000);--Бензовоз заправляет третью бронемашину.
Suicide();
end;

function Peredacha3()
ChangePlayer(117, 0);--Третья бронемашина переходит под управление игроку.
DisplayTrace("Бронемашина заправлена");--Третья бронемашина заправлена.
Suicide();
end;

Нюанс заключается в том, что если в этой строке
RunScript("Peredacha",65000); ставить например время 10000 (10 секунд), то тогда скрипт опережает бензовоз.
Он не успевает прибыть к бронемашинам и поэтому приходится ставить лишь примерное время. То есть он едет от точки появления например 50000 (50 секунд) и ещё 15000 (15 секунд) он "заправляет". Но результаты радуют.
Ещё такой нюанс, то что бензовозом управляет нейтрал, а не игрок и результат оказывается достигаемым.
Это вариант если брать бензовоз как подкрепление.
Если же брать например бензовоз, который находится около бронемашин, то существенно ситуация лучше.
Можно время ставить практически любое.
Возможно этот способ использовался во всю, тогда я просто напомнил его.

0

253

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

то тогда скрипт опережает бензовоз.
Он не успевает прибыть к бронемашинам и поэтому приходится ставить лишь примерное время.

В твоём случае чтобы "скрипт не опережал бензовоз" лучше использовать оператор if. Наприме, так:
function BA()
LandReinforcement(45); --прибывает бензовоз
Cmd(0,66, GetScriptAreaParams("Zapravka1")); -- едет в первую зону
RunScript("Benzovoz1",5000); --запускает скрипт отслеживающий прибытие бензовоза в первую зону, каждые 5 секунд
Suicide();
end;

function Benzovoz1()
if (GetNScriptUnitsInArea(66,"Zapravka1")==1) then
RunScript("Peredacha1",10000); -- если бензовоз прибыл в первую зону, через 10 секунд запускается скрипт передачи
Suicide();
end;
end;

function Peredacha1 ()
DisplayTrace("Бронемашина заправлена");
ChangePlayer(115, 0); -- передача
Cmd(0,66, GetScriptAreaParams("Zapravka2")); -- бензовоз едет во вторую зону
RunScript("Benzovoz2",5000); -- запускает скрипт отслеживающий прибытие бензовоза во вторую зону, каждые 5 секунд
Suicide();
end;

function Benzovoz2()
if (GetNScriptUnitsInArea(66,"Zapravka2")==1) then
RunScript("Peredacha2",10000); --если бензовоз прибыл во вторую зону, через 10 секунд запускается скрипт передачи
Suicide();
end;
end;

и так далее...

Если предусматривается возможная гибель бензовоза, тогда следует добавить дополнительные скрипты отслеживающие жив он или нет, и соответственно при гибели прекращающие отслеживание его прибытия в зону заправки.

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

+1

254

ilyaka
Спасибо.
То-что нужно.
Просто долго гадал и не мог понять.

0

255

Подскажите как сделать в мультиплеерной карте возможность захвата нейтральной техники?

0

256

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

Подскажите как сделать в мультиплеерной карте возможность захвата нейтральной техники?

Мне кажется, что команда идентичная и для сингловых, и для мульта.
Команда - ChangePlayer (iScriptID, iParty)
Меняет владельца юнита(ов) со сценарной группой iScriptID на игрока iParty.
Пример: ChangePlayer (1000, 2); — дать юнит с iScriptID = 1000 игроку 2.

0

257

Сделал карту, написал к ней скрипт. При попытке загрузить через редактор комп виснет. Что делать? Может что-то со скриптом?

Вот скрипт:

Код:
function Won() 
if ( GetNUnitsInParty(1) < 1) then 
Win(0); 
Suicide(); 
end; 
end; 

function ToDefead() 
if ( GetNUnitsInParty(0) < 1) then 
Loose(0); 
Suicide(); 
end; 
end; 



function Init() 
RunScript( "Won",2000); 
RunScript( "ToDefead",2000); 
end; 


function Objective0() 
   if ( GetNUnitsInArea(perekrestok, 1) == 0) then 
      ObjectiveChanged(0, 1); 
                        RunScript( "RevealObjective1", 3000); 
      Suicide(); 
   end; 
end; 

function Objective1() 
   if ( GetNUnitsInArea(Olxovka, 1) == 0) then 
      ObjectiveChanged(1, 1); 
                        RunScript( "RevealObjective2", 3000); 
      Suicide(); 
   end; 
end; 

function Objective2() 
   if ( GetNUnitsInArea(aerodrom, 1) == 0) then 
      ObjectiveChanged(2, 1); 
      Suicide(); 
   end; 
end; 

function RevealObjective0() 
   ObjectiveChanged(0, 0); 
   Suicide(); 
end; 

function RevealObjective1() 
   ObjectiveChanged(1, 0); 
   Suicide(); 
end; 

function RevealObjective2() 
   ObjectiveChanged(2, 0); 
   Suicide(); 
end; 



function Init() 
            RunScript( "RevealObjective0", 2000); 
            RunScript( "Objective0", 2000); 
            RunScript( "Objective1", 2000); 
            RunScript( "Objective2", 2000); 

end; 

function Init()
RunScript("MoveCar",1000);
end;

function MoveCar()
Cmd(3,200,342,582);
Suicide();
end;

function Init()
if ( GetNUnitsInArea(perekrestok, 1) == 0) then
RunScript("Attac", 1000);
Suicide;
end;
end;

function Attac()
Cmd(3,204,12691,2851);
Suicide;
end;

function Init()
if ( GetNUnitsInArea(Olxovka, 1) == 0) then
RunScript("Attac2", 1000);
Suicide;
end;
end;

function Attac2()
Cmd(3,201,12622,8102);
Suicide;
end;

function Init()
if ( GetNUnitsInArea(perekrestok, 1) == 0) then
RunScript("podkrep", 1000);
Suicide;
end;
end;

function podkrep()
LandReinforcement(101);
Suicide(); 
end; 

function Init()
if ( GetNUnitsInArea(air, 0) == 0) then
RunScript("DA",1000)
Suicide;
end;
end;

function DA()
DisableAviation (0, -1);
Suicide;
end;

function Init()
if ( GetNUnitsInArea(aerodrom, 1) == 0) then 
RunScript("DA2",1000)
Suicide;
end;
end;

function DA2()
DisableAviation (1, -1);
Suicide;
end;

function Reinf2() 
LandReinforcement(102); 
Suicide(); 
end; 

function Init() 
RunScript( "Reinf2",100000); 
RunScript("MoveTruck", 4000); 
end; 

function MoveTruck() 
Cmd(3,205 ,942 ,386 );
end;

0

258

эээ, а не многовато ф-ций Init? Из неё должны запускаться начальные ф-ции.

0

259

Pz.kpfw.V Ausf.A Panter
Ну во-первых зачем 9 Инитов? Грубейшая ошибка! :huh:  :confused:  o.O
Он должен быть один. В начале желательно.
Тут исправлять надо просто всё. :tired:
Лучше не в ините делать все функции, а после функции.
В ините даже есть иф! Грубая ошибка. Чёркать тут очень долго вот приведу пример:
function Init()
RunScript("DebugView",2000);
end;

function DebugView()
Password("www.dtf.ru");
--God(0, 2);
RunScript("brifing",2000);
Suicide();
end;

function brifing()
ObjectiveChanged(0, 0);
RunScript("brifing2",5000);
Suicide();
end;

function brifing2()
ObjectiveChanged(0, 1);
RunScript("RevealObjective1",3000);
Suicide();
end;

А почему скрипт такой маленький? карта каково размера то? Или это набросок?

Отредактировано Soldier110 (2012-08-09 17:50:23)

0

260

Soldier110, спасибо за объяснения!

А почему скрипт такой маленький? карта каково размера то? Или это набросок?

Учусь делать миссии. Карта, можно сказать, тренировочная.

0

261

Pz.kpfw.V Ausf.A Panter написал(а):

спасибо за объяснения!

Pz.kpfw.V Ausf.A Panter написал(а):

Учусь делать миссии. Карта, можно сказать, тренировочная.

Пожалуйста. Рад помочь.
Это хорошо, что учишься. Я тоже учусь делать карты. :)

0

262

Скрипт не работает, в чём дело? Несколько раз проверил - синтаксических ошибок вроде нет. :dontknow:

Код:
function Zadacha1()
ObjectiveChanged(0, 0);
RunScript("Zada1vip", 1000);
Suicide();
end;

function Zada1vip()
if(GetNUnitsInArea(1,artileria)==0) then
ObjectiveChanged(0,1);
RunScript("Zadacha2", 1000);
Suicide();
end;
end;

function Zadacha2()
if(GetNUnitsInArea(1,most)>0) then
ObjectiveChanged(1,0);
RunScript("Zada2vip", 1000);
Suicide();
end;
end;

function Zada2vip()
if(GetNUnitsInArea(1,most)==0)then
ObjectiveChanged(1,1);
RunScript("isch", 1000);
Suicide();
end;
end;

function isch()
DeleteReinforcement(101);
RunScript("sdaus", 1000);
Suicide();
end;

function sdaus()
DisplayTrace("Не стреляйте! Мы сдаёмся!");
LandReinforcement(102);
RunScript("VLager", 1000);
Suicide();
end;

function VLager()
Cmd(6,102,500);
RunScript("VLager2", 1000);
Suicide();
end;

function VLager2()
Cmd(6,103,600);
RunScript("oxrana", 1000);
Suicide();
end;

function oxrana()
DisplayTrace("Организуйте охрану пленных!");
LandReinforcement(700);
RunScript("konvoi", 1000);
Suicide();
end;

function konvoi()
LandReinforcement(140);
RunScript("ZadaKonvoi", 1000);
Suicide();
end;

function ZadaKonvoi()
ObjectiveChanged(3,0);
RunScript("ZadaKonvoiVip", 1000);
Suicide();
end;

function ZadaKonvoiVip()
if(GetNScriptUnitsInArea(140,konvoi) then
ObjectiveChanged(3,1);
RunScript("ZadaKonvoiPro", 1000);
Suicide();
end;
end;

function ZadaKonvoiPro()
if(GetNUnitsInScriptGroup(140,0)==0) then
ObjectiveChanged(3,2);
RunScript("gorod", 1000);
Suicide();
end;
end;

function gorod()
ObjectiveChanged(4,0);
RunScript("gorodZax", 1000);
Suicide();
end;

function gorodZax()
if(GetNUnitsInArea(1,gorod)==0) then
ObjectiveChanged(4,1);
RunScript("winn", 1000);
Suicide();
end;
end;

function winn()
if(ObjectiveChanged(4,1)) then
Win(0);
Suicide();
end;
end;

function razvedchiki()
if(GetNUnitsInArea(0,razvedka)>0) then
ChangePlayer(120,0);
RunScript("xolm", 1000);
Suicide();
end;
end;

function xolm()
ObjectiveChanged(5,0);
RunScript("xolm2", 1000);
Suicide();
end;

function xolm2()
if(GetNUnitsInArea(0,xolm)>0) then
ObjectiveChanged(5,1);
RunScript(airN,2000);
Suicide();
end;
end;

function airN() 
SwitchWeatherAutomatic(0); 
SwitchWeather(0);
DisplayTrace ("Радист разведгруппы: координаты аэродрома: 17383,19779!");
Cmd(19, 10000,2, GetScriptAreaParams("Air")); 
RunScript("AA",60000);
Suicide(); 
end; 

function AA()
DisableAviation (1,-1);
DisplayTrace("Теперь их авиации конец!");
Suicide();
end;

function partizan()
if(GetNScriptUnitsInArea (140,partizanen) then
LandReinforcement (210);
RunScript("part_baza", 1000);
Suicide();
end;
end;

function part_baza()
ObjectiveChanged(6,0);
RunScript("K_reid", 1000);
Suicide();
end;

function K_reid()
if(GetNUnitsInArea(1,baza_partizan)==0) then
ObjectiveChanged(6,1);
RunScript("viselica", 1000);
Suicide();
end;
end;

function viselica()
DisplayTrace ("Повесить партизан!");
LandReinforcement(300);
Suicide();
end;

function attak()
if(ObjectiveChanged(1, 1)) then
RunScript("attak2",1200000);
Suicide();
end;
end;

function attak2()
Cmd(3,321,8606,6130);
Suicide();
end;

function patrols()
Cmd(3,1000,20375,19035);
QCmd(3,1000,16861,18989);
Suicide();
end;

function View() 
if(GetNUnitsInArea (0,pilot)) then
AskClient("SetCamera(853,155)"); 
ViewZone("Home", 1); 
Suicide(); 
end; 

function View2() 
ViewZone("Home", 0); 
Suicide(); 
end; 

function Init()
RunScript("Zadacha1", 1000);
RunScript("razvedchiki", 1000);
RunScript("partizan", 1000);
RunScript("attak", 1000);
RunScript("patrols", 1000);
RunScript("Viev", 1000)
RunScript("Viev2", 1000)
Suicide();
end;

0

263

function Zadacha1()
ObjectiveChanged(0, 0);
RunScript("Zada1vip", 1000);
Suicide();
end;

function Zada1vip()
if(GetNUnitsInArea(1,artileria)==0) then
ObjectiveChanged(0,1);
RunScript("Zadacha2", 1000);
Suicide();
end;
end;

function Zadacha2()
if(GetNUnitsInArea(1,most)>0) then
ObjectiveChanged(1,0);
RunScript("Zada2vip", 1000);
Suicide();
end;
end;

function Zada2vip()
if(GetNUnitsInArea(1,most)==0)then
ObjectiveChanged(1,1);
RunScript("isch", 1000);
Suicide();
end;
end;

function isch()
DeleteReinforcement(101);
RunScript("sdaus", 1000);
Suicide();
end;

function sdaus()
DisplayTrace("?? ?????????! ?? ???????!");
LandReinforcement(102);
RunScript("VLager", 1000);
Suicide();
end;

function VLager()
Cmd(6,102,500);
RunScript("VLager2", 1000);
Suicide();
end;

function VLager2()
Cmd(6,103,600);
RunScript("oxrana", 1000);
Suicide();
end;

function oxrana()
DisplayTrace("??????????? ?????? ???????!");
LandReinforcement(700);
RunScript("konvoi", 1000);
Suicide();
end;

function konvoi()
LandReinforcement(140);
RunScript("ZadaKonvoi", 1000);
Suicide();
end;

function ZadaKonvoi()
ObjectiveChanged(3,0);
RunScript("ZadaKonvoiVip", 1000);
Suicide();
end;

---------CHANGED

function ZadaKonvoiVip()
if(GetNScriptUnitsInArea(140,konvoi)==0)then
ObjectiveChanged(3,1);
RunScript("ZadaKonvoiPro", 1000);
Suicide();
end;
end;

---------/CHANGED

function ZadaKonvoiPro()
if(GetNUnitsInScriptGroup(140,0)==0) then
ObjectiveChanged(3,2);
RunScript("gorod", 1000);
Suicide();
end;
end;

function gorod()
ObjectiveChanged(4,0);
RunScript("gorodZax", 1000);
Suicide();
end;

function gorodZax()
if(GetNUnitsInArea(1,gorod)==0) then
ObjectiveChanged(4,1);
RunScript("winn", 1000);
Suicide();
end;
end;

function winn()
if(ObjectiveChanged(4,1)) then
Win(0);
Suicide();
end;
end;

function razvedchiki()
if(GetNUnitsInArea(0,razvedka)>0) then
ChangePlayer(120,0);
RunScript("xolm", 1000);
Suicide();
end;
end;

function xolm()
ObjectiveChanged(5,0);
RunScript("xolm2", 1000);
Suicide();
end;

function xolm2()
if(GetNUnitsInArea(0,xolm)>0) then
ObjectiveChanged(5,1);
RunScript(airN,2000);
Suicide();
end;
end;

function airN()
SwitchWeatherAutomatic(0);
SwitchWeather(0);
DisplayTrace ("?????? ????????????: ?????????? ?????????: 17383,19779!");
Cmd(19, 10000,2, GetScriptAreaParams("Air"));
RunScript("AA",60000);
Suicide();
end;

function AA()
DisableAviation (1,-1);
DisplayTrace("?????? ?? ??????? ?????!");
Suicide();
end;

---------CHANGED

function partizan()
if(GetNScriptUnitsInArea (140,partizanen)==0) then
LandReinforcement (210);
RunScript("part_baza", 1000);
Suicide();
end;
end;

---------/CHANGED

function part_baza()
ObjectiveChanged(6,0);
RunScript("K_reid", 1000);
Suicide();
end;

function K_reid()
if(GetNUnitsInArea(1,baza_partizan)==0) then
ObjectiveChanged(6,1);
RunScript("viselica", 1000);
Suicide();
end;
end;

function viselica()
DisplayTrace ("???????? ????????!");
LandReinforcement(300);
Suicide();
end;

function attak()
if(ObjectiveChanged(1, 1)) then
RunScript("attak2",1200000);
Suicide();
end;
end;

function attak2()
Cmd(3,321,8606,6130);
Suicide();
end;

function patrols()
Cmd(3,1000,20375,19035);
QCmd(3,1000,16861,18989);
Suicide();
end;

---------CHANGED

function View()
if(GetNUnitsInArea (0,pilot)) then
AskClient("SetCamera(853,155)");
ViewZone("Home", 1);
Suicide();
end;
end;

---------/CHANGED

function View2()
ViewZone("Home", 0);
Suicide();
end;

function Init()
RunScript("Zadacha1", 1000);
RunScript("razvedchiki", 1000);
RunScript("partizan", 1000);
RunScript("attak", 1000);
RunScript("patrols", 1000);
RunScript("Viev", 1000)
RunScript("Viev2", 1000)
Suicide();
end;

You had made three mistakes.

I've corrected your script. Now it should work.
I've marked the old wrong script, which it's actually OK, with "---------CHANGED" and "---------/CHANGED"

Отредактировано Kevin (2012-09-04 22:46:45)

+1

264

Kevin,Thanks!

0

265

GetNUnitsOfType (“iType”, iParty)

не реагирует на десантные самолёты, может и на другие типы тоже, не проверял

http://s017.radikal.ru/i437/1210/04/da86a3cddd20t.jpg

function AviaParad()
if GetNUnitsOfType("avia_lander",0)>0 then
DisplayTrace("ДАсамолет");
elseif GetNUnitsOfType("avia_lander",0)==0 then
DisplayTrace("НЕТсамолетов");
end;
end;

Странно, кажется реагирует только на все типы вместе

GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)==0

0

266

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

не реагирует на десантные самолёты, может и на другие типы тоже, не проверял

Он не работает(вернее даже работает, и правильно пишет, что в небе как раз и нет десантных самолетов) у тебя потому что для десантирования используется бомбардировщик ТБ-3, а скрипт пишешь для десантного самолета(avia_lander), то есть в данном случае в скрипте надо писать "avia_bomber" (ну или заменить ТБ-3 на Ли-2).

Пример:

function Proverka1()
  if GetNUnitsOfType("avia_bomber",0)> 0 then
   DisplayTrace("ДА Самолет");
  else
  end;
  if GetNUnitsOfType("avia_bomber",0)==0 then
   DisplayTrace("НЕТ Самолет");
   Suicide();
   end;
end;

http://s1.uploads.ru/t/jYvuE.jpghttp://s1.uploads.ru/t/CdMXx.jpg

0

267

Если кому нужно
Скрипт случайного выбора авиации для игрока.

function Init()

DisableAviation(0, 0);
DisableAviation(0, 1);
DisableAviation(0, 2);
DisableAviation(0, 3);
DisableAviation(0, 4);

end;

function Wings()
if........................................ then   --условие
RunScript("AviaChange0", 5000);
RunScript("AviaChange1", 5000);
RunScript("AviaChange2", 5000);
RunScript("AviaChange3", 5000);
RunScript("AviaChange4", 5000);
RunScript("AviaStop",600000 + RandomInt(300000)); --регулироется по желанию, время смены видов доступной авиации
Suicide();
end;end;

function AviaChange0()
local t= RandomInt(3)+1;
if (t == 1) then
end;
if (t == 2) then
EnableAviation(0, 0);
end;
if (t == 3) then
end;
Suicide();
end;

function AviaChange1()
local t= RandomInt(3)+1;
if (t == 1) then
EnableAviation(0, 1);
end;
if (t == 2) then
end;
if (t == 3) then
end;
Suicide();
end;

function AviaChange2()
local t= RandomInt(3)+1;
if (t == 1) then
end;
if (t == 2) then
end;
if (t == 3) then
EnableAviation(0, 2);
RunScript("AviaPara", 500); --старт запрета вылета десантных самолётов после трёх вылетов, время от 500 до 1000, на слабых компах может промахнуть функцию при нагрузке, чем меньше, темнезаметнее для игрока
SetIGlobalVar("aavia_lander",3); --зависит от типа самолёта, может быть вариант aavia_bomber
end;
Suicide();
end;

function AviaPara()
if GetNUnitsOfType("avia_lander",0)>0 then
SetIGlobalVar("aavia_lander",GetIGlobalVar("aavia_lander",0)-1);
RunScript("CheckPara", 500);
RunScript("AviaPara1", 180000);
Suicide();
end;
end;

function AviaPara1()
if GetNUnitsOfType("avia_lander",0)>0 then
SetIGlobalVar("aavia_lander",GetIGlobalVar("aavia_lander",0)-1);
RunScript("AviaPara", 180000); --зависит от времени Relax Time
Suicide();
end;
end;

function CheckPara()
if GetIGlobalVar("aavia_lander",0)>0 then
Suicide();
elseif GetIGlobalVar("aavia_lander",0)==0 then
RunScript("StopPara", 1000); --запрет вылета десантных самолётов
KillScript("AviaPara");
KillScript("AviaPara1");
Suicide();
end;
end;

function StopPara()
if GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)==0 then
DisableAviation(0, 2);
Suicide();
elseif GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)~=0 then
RunScript("StopParaAlso",1000);
Suicide();
end;
end;

function StopParaAlso()
if GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)==0 then
DisableAviation(0, 2);
Suicide();
elseif GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)~=0 then
RunScript("StopPara",1000); --время от 500 до 1000, чем меньше, тем лучше, но на слабых компах нужно больше
Suicide();
end;
end;

function AviaChange3()
local t= RandomInt(3)+1;
if (t == 1) then
end;
if (t == 2) then
end;
if (t == 3) then
EnableAviation(0, 3);
end;
Suicide();
end;

function AviaChange4()
local t= RandomInt(3)+1;
if (t == 1) then
end;
if (t == 2) then
EnableAviation(0, 4);
end;
if (t == 3) then
end;
Suicide();
end;

function AviaStop()
if GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)==0 then
DisableAviation(0, 0);
DisableAviation(0, 1);
DisableAviation(0, 2);
DisableAviation(0, 3);
DisableAviation(0, 4);
RunScript("Wings",5000);
Suicide();
elseif GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)~=0 then
RunScript("AviaStopAlso",1000);
Suicide();
end;
end;

function AviaStopAlso()
if GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)==0 then
DisableAviation(0, 0);
DisableAviation(0, 1);
DisableAviation(0, 2);
DisableAviation(0, 3);
DisableAviation(0, 4);
RunScript("Wings",5000);
Suicide();
elseif GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
GetNUnitsOfType("avia_scout",0)~=0 then
RunScript("AviaStop",1000);
Suicide();
end;
end;

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

0

268

Ого как много. А можно вкратце описать что этот большой блок функций выполняет?
Обычное любопытство.

Немного почитал поразбирался. Многое в приведенном примере можно гораздо короче написать. К примеру нет смысла 5 раз писать идентичную функцию AviaChange0 - 4. Удобнее все вместить в одну и прописать цикл на 5 повторений. Так же внутри проверки переменной t абсолютно бесполезны два из трех операторов  if , поскольку во время их срабатывания все равно ничего не выполняется и соответственно нет смысла их писать.

function AviaChange()
   for i = 0,4,1 do
      local t= RandomInt(3)+1;
      if (t == 2) then
         EnableAviation(0, i);
      end;
   end;
   Suicide();
end;

Цепочку функций AviaStop тоже можно сильно сократить что бы не писать четыре раза одну и ту же длинную проверку наличия самолетов на карте. Например, так:

function AviaStop()
   RunScript("AviaDisable",1000);
   Suicide();
end;

function AviaDisable()
   if GetNUnitsOfType("avia_attack",0)+GetNUnitsOfType("avia_bomber",0)+GetNUnitsOfType("avia_fighter",0)+GetNUnitsOfType("avia_lander",0)+
   GetNUnitsOfType("avia_scout",0)==0 then
      DisableAviation(0, 0);
      DisableAviation(0, 1);
      DisableAviation(0, 2);
      DisableAviation(0, 3);
      DisableAviation(0, 4);
      RunScript("Wings",5000);
      Suicide();
   end;
end;

Можно немного подумать, и цепочку контроля десантных самолетов тоже записать в 1-2 коротеньких функции строчек на 10-20.

Отредактировано Reks (2012-10-09 00:35:26)

+2

269

Здравствуйте! Играл в Блицкриг:Дьяволы в хаки. Скрипты к миссиям выглядят иначе (в оригинальном все понятно), карты не открываются в редакторе, ничего не изменить. Кто знает в чем дело?

0

270

Угольщик написал(а):

Дьяволы в хаки. Скрипты к миссиям выглядят иначе (в оригинальном все понятно), карты не открываются в редакторе, ничего не изменить

Специально установил эту игру. Скрипты обычные: название функции, команды, суицид и end.
Может тебя озадачила неаккуратная их подача - там много ненужных пробелов (пустых мест), так на них можно не обращать внимание. Еще в скриптах есть множество комментариев к ним на непонятном языке (все то, что вне функций и отделено от них минимум двумя дефисами --). Так они никакого влияния на работу скриптов не оказывают.
А карты свободно грузятся, только их нужно открывать с помощью редактора той игры, где установлены "Дьяволы" - это или Рокот бури или Пылающий горизонт.

Отредактировано yersinia (2012-10-18 10:38:18)

0


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