Союз | Union

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

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


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


Скрипты

Сообщений 31 страница 60 из 345

31

Чтобы подкрепление выходило через 20 секунд после захвата территории a1 скриптовой группой 120 надо сделать так
function Reinf3()
if (GetNScriptUnitsInArea (120, "a1") > 0 ) then
RunScript("podkrep" , 20000);
Suicide();
end;
end;

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

function Init()
RunScript( "Reinf3" , 3000);   
end;

Сам скрипт запускается через 3 секунды после начала миссии

+1

32

Хм... любопытно, как нибудь обезательно надо попробовать и такой вариант скрипа.
А я поменял в карте номер группы подкрепа, сами юниты заново поставил, поменял им скриптовый номер ну и скрипт ес-но подредактировал - вроде теперь вылазят худо,бедно через 20 сек.

0

33

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

Хм... любопытно, как нибудь обезательно надо попробовать и такой вариант скрипа.

В стиле програмирования он правильнее и более безгеморойный
  проще менять все  + добавлять
Т.Е. в случае изменения или редактирование на карте проще в скрипте поправить пару вещей чем

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

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

)))

0

34

Может кому-то пригодится.
В некоторых миссиях необходимо ограничить действия авиации. Тоесть не полностью еее отрубить, а сделать  ее непредсказуемой.
Как, напимер, в 1941-м по РККА. Авиация летала, штурмовала и бомбила. Но, для многих, неизвестно где и когда. Небыло прямой авиаподдержки и возможности заказать ту авиацию котороая была нужна. Они появлялись сами, непонятно откуда и также неожиданно исчезали.

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

function RusAvia()
local x = RandomInt(20);
if x <= 4 then
RunScript("RazvedkaAv", 5000);
Suicide();
else
if x >= 5 and  x <= 8  then
RunScript("ShturmAv", 5000);
Suicide();
else
if x >= 9 and  x <= 15  then
RunScript("IstrebAv", 12000);
Suicide();
else
if x >= 16 and  x <= 20  then
RunScript("BombAv", 12000);
Suicide();
end;
end;
end;
end;
end;
function RazvedkaAv()
SwitchWeatherAutomatic(0);
SwitchWeather(0);
EnableAviation (0, 0);
RunScript("AviaStop",240000);
Suicide();
end;
function ShturmAv()
SwitchWeatherAutomatic(0);
SwitchWeather(0);
EnableAviation (0, 4);
RunScript("AviaStop",190000);
Suicide();
end;
function IstrebAv()
SwitchWeatherAutomatic(0);
SwitchWeather(0);
EnableAviation (0, 1);
RunScript("AviaStop",270000);
Suicide();
end;
function BombAv()
SwitchWeatherAutomatic(0);
SwitchWeather(0);
EnableAviation (0, 3);
RunScript("AviaStop",200000);
Suicide();
end;
function AviaStart()
RunScript("RusAvia", 600000 + RandomInt(15000));
    RunScript("RusAvia", 800000 + RandomInt(15000));
    RunScript("RusAvia", 1200000 + RandomInt(15000));
    RunScript("RusAvia", 1600000 + RandomInt(15000));
    RunScript("RusAvia", 2400000 + RandomInt(15000));
    RunScript("RusAvia", 3000000 + RandomInt(15000));
    RunScript("RusAvia", 3500000 + RandomInt(15000));   
Suicide();
end;
function AviaStop()
DisableAviation(0, 0);
DisableAviation(0, 1);
DisableAviation(0, 2);
DisableAviation(0, 3);
DisableAviation(0, 4);
Suicide();
end;

+1

35

Причем, если игрок не использует выданую ему авиаподдержку в отведенное время- то ему прийдеться ждать следующего счастливого случая. Который наступит неизвестно когда.И неизвестно еще, что прилетит.

0

36

To Zigfrid:

А как ты страхуешься на случай, если скрипт по выключению авиации запустится в момент, когда самолеты еще будут на карте. Ведь тогда он не сработает, так как авиация вкл. и выкл. только в том случае, если на карте не присутствует НИ ЕДИНОГО самолета (той стороны которой вкл. или выкл. авиацию).
Пример ситуации которая может возникнуть с твоим скриптом:

Рандомом игроку выдали разведчика. Функция отмены авиации сработает через 240 секунд (4 минуты). Но вот игрок не пользуется авиацией 3 минуты, и вызывает ее на 4й. Самолет, как и положено, вылетает и кружит по карте. За это время 4я минута истекает, и скрипт отмены запускается. А так как самолет еще не улетел с карты, то естественно этот скрипт не срабатывает.

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

0

37

Спасибо за дельное замечание. Будем тестировать и проверять.
Если сам салкивался с проблемой, то может и пути решения подскажеш? :question:

0

38

Если сам салкивался с проблемой, то может и пути решения подскажеш? :question:

Да, уже сталкивался. Но у меня чуть иной случай был. Мне только один раз нужно было отмену авиации игрока сделать прямо посредине сценария. Я выкрутился при помощи простого дождя. Примерно за 1.5-2 минуты до отмены включаем дождик, и самолеты к назначеному времени успевают улететь. Так как отмена у меня была только одна, то и один "плановый" дождик как бы не вызывает ни подозрений ни возмущений. А у тебя тут смотрю так не выйдет, не то лето уж слишком дождливое получится. :glasses:

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

Пример:

Рандомом игроку выпадает самолет разведчик. Его отключение должно произойти , к примеру, не позже (причем на 100%!!!) чем через 10 минут. Самолет разведчик находится на карте, к примеру, максимум 5 минут, это с учетом вызова его в самый дальний от точки вылета угол, временем подлета и так же временем улета с карты. То есть вне зависимости от того, что самолет разведчик выполняет, время пребывания его на карте никогда(!!!) не превысит 5ти минут (не знаю как это вычислить, наверное только путем эксперимента с секундомером в руках). Следовательно - что бы успешно (на 100%) отключить его, самолет разведчик НЕ ДОЛЖЕН быть вызван позже чем через 10-5=5 минут, с момента его активации.

Значит задача следующая: не дать ему вылететь в последние 5 минут. Можно поступить следующим образом. За 5 минут и 10 секунд (секунды надо для того, что бы скрипт гарантированно успел сработать, даже при тормозах,  или фризах и т.п.) запускаем вспомогательную функцию проверки наличия самолетов на карте. Возможно удобно будет воспользоваться функцией GetNUnitsOfType. Смысл этой вспомогательной функции - определить наличие самолетов на карте, и в случае их отсутствия НЕМЕДЛЕННО отключить авиацию. Здесь мы получаем следующие возможные ситуации:

а) В момент активации вспомогательной функции проверки авиации самолет разведчик на карте присутствует. Насколько раньше он был вызван уже не имеет значения, так как промежуток времени действия этой функции полностью перекроет время пребывания самолета на карте. Говоря иными словами, самолет улетит с карты гарантированно раньше, чем закончит свою работу вспомогательная функция. Как только самолет покинет карту, функция мгновенно отключит авиацию, при чем не позже 10й минуты. Цель достигнута.

б) В момент активации вспомогательной функции проверки, самолета разведчика на карте нет. Следовательно функция сразу же отключит авиацию. Цель так же достигнута. Но в этом случае игрок теряет 5 минут летного времени. Что ж, теперь это только его проблемы. Нужно было не счелкать клювом. :-)

Вывод: Из вышенаписанных моих выкладок получили следующий алгоритм подпрограммы:
1) Рандомом производится случайный выбор и активация определенного типа авиации.
2) Игроку выдается определенный промежуток времени, в течении которого он стопроцентно может вызвать эту авиацию. В текстах заданий можно этот промежуток огласить, а можно и не оглашать (в зависимости от сценария).
3) По окончании времени из п.2 запускается функция проверки наличия авиации на карте.
4) Как только функция из п.3 даст отрицательный результат (то есть авиации на карте нет), выданный в п.1 тип авиации отключается.
5) По истечении некоего промежутка времени снова активируется п.1 (цикл запускается вновь).

П.С.: Надеюсь я понятно и не слишком запутанно написал. Ну и так же надеюсь, что тебе это поможет.

Отредактировано Reks (2009-02-07 12:14:45)

+1

39

Данке шон!  :rolleyes: Насчет идеи с дождем я тоже думал.
Объяснил все хорошо, все понял.
Получай +  8-)

0

40

Нужен совет.
Ситауция такова. Есть, например такой скрипт.( скрипт теоретический и приведен  исключительно для примера)

function KontAtaka3()
   LandReinforcement(131);
   RunScript("Ataka3", 35000);
Suicide();
end;

function Start()
RunScript("KontAtaka3", 10000);
RunScript("KontAtaka3", 20000);                                 
          Suicide();
end;

Так вот. Согласно этого скрипта функция KontAtaka3()  должна быть запущена функцией Start() 2 раза. Первый раз серез 10 секунд, второй через 20.
Но на практике выходит совсм другое. Она начинает запускаться непрекращаясь.Просто лавионообразно.
В чем проблема и где упущеие?

0

41

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

Нужен совет.
Ситауция такова. Есть, например такой скрипт.( скрипт теоретический и приведен  исключительно для примера)
function KontAtaka3()
   LandReinforcement(131);
   RunScript("Ataka3", 35000);
Suicide();
end;
function Start()
RunScript("KontAtaka3", 10000);
RunScript("KontAtaka3", 20000);                                 
          Suicide();
end;
Так вот. Согласно этого скрипта функция KontAtaka3()  должна быть запущена функцией Start() 2 раза. Первый раз серез 10 секунд, второй через 20.
Но на практике выходит совсм другое. Она начинает запускаться непрекращаясь.Просто лавионообразно.
В чем проблема и где упущеие?

Замени строки
RunScript("KontAtaka3", 10000);
RunScript("KontAtaka3", 20000);                                 

на
RunScript("KontAtaka3",10000,2);

0

42

Просто для интереса

Не сам ли это Константин Jukov из издательства "Запрещенная литература" , автор руководства по скриптам Lua и патч-мода v1.1 для "Операции Север"?

0

43

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

Не сам ли это Константин Jukov из издательства "Запрещенная литература" , автор руководства по скриптам Lua и патч-мода v1.1 для "Операции Север"?

Он самый

+1

44

Респект за руководство по Луа. Очень помогает.  :flag:

0

45

Приветствую!

Вопрос по скриптам:
Можно ли  (как?) выводить сообщения только для одной стороны(iParty), что бы остальные не видели (для сетевой игры)?

P.S.
Jukov
Мануал действительно хорош!  :cool:

0

46

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

Можно ли  (как?) выводить сообщения только для одной стороны(iParty), что бы остальные не видели (для сетевой игры)?

нет

0

47

Подскажите пожалуйста скрипт такой -
если в поле зрения какого либо юнита появится такойто, то ....

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

0

48

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

Подскажите пожалуйста скрипт такой -
если в поле зрения какого либо юнита появится такойто, то ....

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

Такое сделать нельзя

0

49

alderus
А ты запусти игру, заметь, у какого объекта заканчивается зона видимости часового, и в редакторе забеё там скрипт-зону на появление в неё юнитов игрока.

0

50

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

А ты запусти игру, заметь, у какого объекта заканчивается зона видимости часового, и в редакторе забеё там скрипт-зону на появление в неё юнитов игрока.

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

Отредактировано alderus (2009-07-07 21:17:54)

0

51

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

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

Мой вариант: даешь своему юниту команду затаиться. И после этого проверяешь когда юнит перестанет быть скрытым. Ессесно авиацию игроку в такой миссии следует запретить.

0

52

Здравствуйте! Пишу сдесь , так как хочу спросить совет по скриптам. Подскажите , если кто знает пример скрипта патруля, делаю карту , возникла мысль , но осуществить не могу. И еще заоодно хотелось бы узнать как открыть "туман войны" для игрока на время , а потом закрыть.
Спасибо заранее.

0

53

вот надыбал скрипт, который убирает туман войны в некоторой зоне, только он не работает,подскажите что не так

functoin View ()
AskClient( "SetCamera (20,30)" );
ViewZone ( "House",1 );
Suicide ( );
end;

function Views ()
ViewZone ( "House",0 );
Suicide ( );
end;

0

54

function Rei()
if (GetNScriptUnitsInArea (777, "karta") > 0 ) then
DisplayTrace("    В плен захвачен советский офицер с подробными картами расположения войск!");
RunScript("CloseZone" , 3000);
Suicide();
end;
end;

function CloseZone()
ViewZone("View1",1);
Suicide();
end;

function CloseZone2()
ViewZone("View1",0);
Suicide();
end;

этот скрипт на моей карте не срабатывает, но срабатывает на другой, почему скажите если кто знает!?

0

55

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

Qwer

да хрен его знает. меня самого бесят неопределенности не понятные - бывает такое что команды не срабатывают юнитам хотя делаю всё как обычно! бесит это просто. ща запоролся с разработкой миссии про снайпера из за этого

0

56

Qwer
ну если фунция есть в Init, то на первый взгляд...

function Rei()
if (GetNScriptUnitsInArea (777, "karta") > 0 ) then
DisplayTrace("    В плен захвачен советский офицер с подробными картами расположения войск!");
RunScript("CloseZone" , 3000);
RunScript("CloseZone2" , xxxx);
Suicide();
end;
end;

function CloseZone()
ViewZone("View1",1);
Suicide();
end;

function CloseZone2()
ViewZone("View1",0);
Suicide();
end;

0

57

а это будет работать в мульте? или же только в сингле имеет место!?

0

58

делаю карту мультиплеерную, когда замускаю из редактора-все работает , ну скрипт имею ввиду, а когда запускаю уже через комнату в самой игре, скрипт не срабатывает(

0

59

насчет мультиплеера я вообще не в курсах  :dontknow:

0

60

Извините за вопрос - его уже точно задавали, но не могу найти где ! как мосты скриптом разрушать?
например юнит Х в зоне А и бабах такой то мост =))) скриптоделы поймёте

0


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