Союз | Union

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

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


Вы здесь » Союз | Union » Картостроение и скриптовка » Делаем карту (с грехом пополам)


Делаем карту (с грехом пополам)

Сообщений 61 страница 90 из 693

61

scorpion_ss_
дык!
Дык я не знаю, пишу впервые, вот и интересуюсь

А вот что такое на карте так и не понял, вообще не удаляется

0

62

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

Сегодня обнаружил у себя на карте НЛО
Что это такое и как это удалить?

Это не НЛО. Это объект у которого нет пустынной шкуры.
Если, например, поставить какой-то пустынный танк на карту зимней России, то вполне вероятно он тоже превратиться в такое НЛО.
Просто у него не будет шкуры под соответстсующий сезон.
Надо его просто удалить. Не судьба ему быть на этой карте.

0

63

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

Вопрос: в таком виде скрипт может быть?
function Objective3() 
if ((GetNUnitsInArea(0, "g1")  < 2) then
     RunScript( "RevealObjective4",4000);
              if ((GetNUnitsInArea(0, "eng")  < 2) or ((GetNUnitsInArea(1, "eng")  > 2) then
    ObjectiveChanged(3, 2);
              if ((GetNUnitsInArea(1, "eng")  < 1)  then
                                ObjectiveChanged(3, 1);
                                      RunScript( "RevealObjective5",4000);   
                                            RunScript( "LandReinforcement(2)",10000)               
                 Suicide();
        end;
end;

В таком - нет! Хотя я не суддя в последней инстанции.
Вот в таком, я думаю боле приемлемо.

function Objective3() 
if ((GetNUnitsInArea(0, "g1")  < 2) then
     RunScript( "RevealObjective4",4000);    ???? Так почти навернека не пойдет. Надо прописать или  ObjectiveChanged(3, 2);или   ObjectiveChanged(3, 1);
                                                                    это условия задания, а оно не може закончиться просто запуском какого-то скрипта,а не его   выполнением                 или                провалом . Именно это услови лучше вынести в другую функцию.

Suicide();
else
              if ((GetNUnitsInArea(0, "eng")  < 2) or ((GetNUnitsInArea(1, "eng")  > 2) then
    ObjectiveChanged(3, 2);
Suicide();
else

              if ((GetNUnitsInArea(1, "eng")  < 1)  then
                                ObjectiveChanged(3, 1);
                                      RunScript( "RevealObjective5",4000);   
                                            RunScript( "LandReinforcement(2)",10000)               
                 Suicide();
Suicide();

        end;
  end;
end;
end;

Отредактировано Zigfrid (2008-10-28 20:06:16)

0

64

Лучше всего сделать так.

function Uslovie1()
if ((GetNUnitsInArea(0, "g1")  < 2) then
     RunScript( "RevealObjective4",4000);
     ObjectiveChanged(3, 1);
     KillScript( "Objective3",4000);
Suicide();
end;
end;

function Objective3() 
if ((GetNUnitsInArea(1, "eng")  < 1)  then
    ObjectiveChanged(3, 1);
    RunScript( "RevealObjective5",4000);   
    RunScript( "LandReinforcement(2)",10000)               
        Suicide();
end;
end;
function Uslovie2()
  if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then
    ObjectiveChanged(3, 2);
     KillScript( "Objective3",4000);
Suicide();
end;
end;

Так , думаю будет намного лучше.
Опять же таки. Если согласно 
if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then
    ObjectiveChanged(3, 2);---- задание провалено

То что тогда? Почему не заскриптовано альтернативное развитие событий?
Если допусается, что задание может быть провлено, то надо предусмотреть и дальнейшее развитие событий после его провала. Игра не должна остаовиться на этом. Если коечно это не предполагает провала всей миссии. Но тогда это тоже надо заскриптовать.
А то получаетя задание провалено и больше никаких заданий не будет, и никакая функция не запустится?

0

65

И еще. Обрати внимание на пунктуацию скрипта.

Вот так не пойдет
if ((GetNUnitsInArea(0, "eng")  < 2) or ((GetNUnitsInArea(1, "eng")  > 2) then
Нужно так
if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then

Из-за такой скобки весь скрипт не буде работать.

0

66

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

Мне нужно, что задача прекращалась сама собой через определенное время
Как брифинг в курске или восточном фронте

Вот пример такого скрипта.

function Objective5()
   if ((GetNUnitsInArea(0, "Lovushka")>=1) and (GetNUnitsInArea(1, "Lovushka")<=1) ) then   
        SetIGlobalVar("temp.brody2.objective5", 1);
        ObjectiveChanged(5, 1);
    RunScript("KontAtaka6", 15000);
    RunScript("Yunkers1", 5000);
    RunScript("Artileriya1", 5000);
    RunScript("RevealObjective6", 5000);
                RunScript("Objective6", 145000);
               Suicide();
end;
end;

function ProverkaF1()
   if ((GetNUnitsInArea(0, "Lovushka")<1) and (GetNUnitsInArea(1, "Lovushka")>1) ) then   
        SetIGlobalVar("temp.brody2.objective5", 2);
        ObjectiveChanged(5, 2);
       KillScript("Objective5", 2000);
          Suicide();
end;
end;

Тоесть через определеное время( какое-ты установишь) запускается
функция ProverkaF1. Если условия этой функции не будут выполены, то задание №5 будет провалено и функция Objective5 будет убита.  После этого, если даже условия этой функции Objective5 будут выполнены, задание все равно не станет выполненым. Потому что такие приколы тоже могут быть.
Сначала задание провалено, а потом, позже, игрок все же выполнил условия и задание засчитываеться. Условие  KillScript("Objective5", 2000); позволяет избежать такого казуса.
После провала этого задания не предусмотрено запуса никаких скриптов, так как это задание тупиковое. Его выполнение не влияет на прохождение всей миссии. Его выполение только вызывает  новое альтернативное задание для игрока. А невыполение просто оставляет неприятный осадок на душе  :D

Отредактировано Zigfrid (2008-10-29 00:54:22)

0

67

Zigfrid

Насчет карты- это вообще не объект а черти что и оно не удаляется, да и объкта такой странной конфигурации нет
выделяю и не выделяется, как тогда удалить?

Насчет разбора скрипта спасибо громаднейшее

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

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

0

68

Будут еще вопросы - пиши. :writing:

0

69

часть скрипта - артобстрел территории посёлка- зона sididaud:

function Artbomb1()                                                                             
GiveCommand( 17, 211);
   GiveQCommand( 16, 211, GetScriptAreaParams("sididaud"));
         RunScript( "ArtStop", 180000);
     Suicide();
end;

function ArtStop()
KillScript("Artbomb1", 2000);
          Suicide();
end;

или же

function ArtStop()
GiveCommand( 9, 211);
          Suicide();
end;

Правильно?
В Блицмастере смотрел пример скрипта, но не врубился, там вот так:

function Bomb()
local A_Enter = 6;
local A_Swarm = 3;
local A_Rotate = 8;
local A_Uninstall = 18;
local A_Install = 17;
local A_ArtBomb = 16;
   GiveCommand( A_Uninstall, 2);
   GiveQCommand( A_Rotate, 2, 701,929);
   GiveQCommand( A_Install, 2);
   GiveCommand( A_ArtBomb, 2, 701,929);
   RunScript( "ArtStop", 50000);
   Suicide();
end;

function ArtStop()
local A_Stop = 9;
   Cmd(A_Stop, 2);
   Suicide();
end;

0

70

GiveCommand( 17, 211); - это что? а то я у себя такой команды 17 не нахожу.

лучше
function ArtStop()
GiveCommand( 9, 211);
          Suicide();
end;

Хотя не факт что они потом сами не начнут лупить куда им захочется.
И еще, насколько большая у тебя зона ("sididaud")? Так как точкой обстрела будет центр этой зоны, а не вся ее площадь.

В Блицмастере скрипты не на очень высоком уровне. Не очень понятно и сильно заковыристо.

Отредактировано Zigfrid (2008-10-29 00:52:39)

0

71

17 -подготовить орудие к бою
не важно, там пушки К 39, за 5 минут разнесут всё к чёртовой матери, я просто боюсь, чтоб они не лупили по своим во время атаки

function Uslovie1()
if ((GetNUnitsInArea(0, "g1")  < 2) then
     RunScript( "RevealObjective4",4000);
     ObjectiveChanged(3, 1);
     KillScript( "Objective3",4000);
Suicide();
end;
end;

function Objective3() 
if ((GetNUnitsInArea(1, "eng")  < 1)  then
    ObjectiveChanged(3, 1);
    RunScript( "RevealObjective5",4000);   
    RunScript( "LandReinforcement(2)",10000)               
        Suicide();
end;
end;
function Uslovie2()
  if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then
    ObjectiveChanged(3, 2);
     KillScript( "Objective3",4000);
Suicide();
end;
end;

И всё таки что-то тут меня настораживает
Первое условие- создается угроза штабу-стартует задача: обеспечение эвакуации штаба
Но...не факт, что третье задание, защита посёлка будет провалена...
Хотя не факт что и выполнена

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

+1

72

А если так:

function Usl1()
if ((GetNUnitsInArea(0, "g1")  < 2)) then
    RunScript( "RevealObjective4",4000);
Suicide();
end;
end;

function Objective3() 
if ((GetNUnitsInArea(1, "eng")  < 1))  then
    ObjectiveChanged(3, 1);
    RunScript( "RevealObjective5",4000);   
    RunScript( "LandReinforcement2",10000)
else
  if ((GetNUnitsInArea(0, "eng")  < 1))  then
    ObjectiveChanged(3, 2);
    RunScript( "RevealObjective6",4000);
    RunScript( "LandReinforcement3",4000)
      KillScript( "Objective3",4000);
Suicide();
end;
end;

Отредактировано simeo (2008-10-29 01:26:30)

0

73

упс

Отредактировано simeo (2008-10-29 02:49:08)

0

74

У-у-у-у-ух мля!!!! Ну вы тут и понаписывали!!! Сразу аж испугался...  :rofl:

По названиям функций:
Можешь придумывать любые названия. Главное, что бы сам в них не путался. Единственные ограничения: название нужно писать на англ. языке, начинаться вроде бы должно с большой буквы, оно не должно! начинаться с цифры, и не должно содержать символов типа (~?_ и.т.д. в том числе и пробел). Вообще лучше в названиях функций использовать только буквы и цифры.
По поводу функций RevealObjective и Objective. Это всего лишь "общепринятые" (но отнюдь не обязательные!) названия функций выдачи и выполнения заданий. Просто к этим названиям уже все привыкли что ли, вот их и юзают. А так можешь назвать ф-цию выдачи задания хоть - function GitlerCaput().Я тоже называю многие функции по своему, как мне удобно. Вот например:
function Ataka212() - это не значит, что это функция запускающая 212ю атаку в миссии. У меня это - атака 212й скриптовой группы. А каждую группу при создании карты я заранее выписываю в тетрадку. Ее состав и сценарий ее действий. У меня на каждую миссию по тетрадке уходит ))
Ты главное смотри не на название функции (так как это только название), а на ее содержание (тело). Главное - разобраться внутри, что функция делает.

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

Это проще пареной репы. Делай примерно так:

function RevealObjective0()
ObjectiveChanged(0,0); - выдал задание 0 (твой брифинг)
RunScript("Objective0",300000); - к примеру через 5 минут (время любое!!!) запускаем ф-цию Objective0, которая и выполнит нам задание 0
Suicide();
end;

function Objective0()
ObjectiveChanged(0,1); - вот так вот, тупо, без всяких условий, принуждаем скрипт засчитать нулевое задание
RunScript("RevealObjective1",5000); - не забываем выдать следующее задание, если требуется конечно же
Suicide();
end;

Вот и вышло, что задание игрок получил. А потом, по истечению 5 минут, вне зависимости от того что игрок делал (да хоть убиться успел), задание автоматически выполняется. Чем не брифинг. Если 5 мин. много, можно поставить хоть 10 секунд, правда никто не успеет прочесть текст задания. И главное, что вот так вот автоматом заканчивать миссии ты можешь в любой части миссии. Хоть в начале, хоть в конце.

По НЛО: Скорее всего это объект без пустынной шкуры. Но если это не так, тогда возможно какой то глюк. Трудно сказать. Если не удаляется вручную, попробуй проверить карту на ошибки через ChackMap.

function Objective3()
if ((GetNUnitsInArea(0, "g1")  < 2) then
     RunScript( "RevealObjective4",4000);
              if ((GetNUnitsInArea(0, "eng")  < 2) or ((GetNUnitsInArea(1, "eng")  > 2) then
    ObjectiveChanged(3, 2);
              if ((GetNUnitsInArea(1, "eng")  < 1)  then
                                ObjectiveChanged(3, 1);
                                      RunScript( "RevealObjective5",4000);   
                                            RunScript( "LandReinforcement(2)",10000)               
                 Suicide();
        end;
end;

Суть задания на словах: показываются танки противника в зоне g1
из-за этого появляется задача: эвакуация штаба корпуса в другое место, после выполнения которой запускается след и т.д

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

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

Какие главные ошибки?
Первая ошибка - открыто сразу три ИФА, а закрыт ЭНДОМ только один. Скрипт уже не работает.
Вторая ошибка - старайся никогда не лепить один ИФ внутри другого ИФА. Можешь наловить таких ошибок, в которых черт ногу сломит.
Третяя ошибка - еще раз повторюсь, очень сложно написано. Если ты в таком скрипте где нить облажаешься, потом сам же не сможешь найти ошибку. Проверено лично на себе ))

Критика закончилась, началась собственно помощь:
Смотрим на приведенный выше скрипт, и читаем мои комментарии. Как я пытался в нем разобраться )):

function Objective3()     --ага, ф-ция обжектив3--
if ((GetNUnitsInArea(0, "g1")  < 2) then      --если в зоне "g1" юнитов игрока "0"<2 тогда (вижу, что скобку не закрыл)--
     RunScript( "RevealObjective4",4000);    --запускаем задание-4--
              if ((GetNUnitsInArea(0, "eng")  < 2) or ((GetNUnitsInArea(1, "eng")  > 2) then    --ага, опять Иф! Условие в условии. Ладно, смотрим. Получается - если в зоне "eng" юнитов игрока "0"<2 или игрока "1">2 , при этом надо не забывать, что это все при условии, что в зоне "g1" юнитов игрока "0"<2 (мои мозги начинают слегка поскрипывать плюс опять скобки не правильно стоят) тогда--
    ObjectiveChanged(3, 2); -- задание3 провалено. Так ладно. Это еще проходит--
              if ((GetNUnitsInArea(1, "eng")  < 1)  then   -- еще один ИФ в ИФе и все это еще в одном в ИФе! Так, это уже серьезно! Смотрим: если в зоне "eng" юнитов игрока "1" <1... Вот сдесь сразу стоп! Такого уже не может быть, так как эта строка (этот ИФ) может запуститься только при условии что в зоне "eng" юнитов игрока "1">2. Больше 2 и меньше 1 одновременно быть не может. Далее рассматривать уже нет смысла. Грубая ошибка!!! Плюс опять скобки! Нужно запомнить, что все скобки нужно закрывать! То есть, если в строке есть 5 левых скобок, то в этой же строке обязательно должно присутствовать и 5 правых скобок!!!
                                ObjectiveChanged(3, 1);
                                      RunScript( "RevealObjective5",4000);   
                                            RunScript( "LandReinforcement(2)",10000) --в названии функции не должно быть скобок!!!! В конце строки не стоит точка с запятой!!! Еще две грубейшие ошибки--               
                 Suicide();
        end;
end; -- не хватает двух эндов!--

Но я все же попытался уловит суть. Если я правильно понял из выше написанного скрипта, то выдано задание-3, удержать поселок. Но вот пришли танки противника, выбили игрока из зоны "g1", и по-этому параллельно с заданием-3 выдается задание 4 - эвакуировать штаб. При этом задание-3, обороняться, остается в силе. Если задание-3 выполнено, и поселок удержан, то тогда выдается задание-5. Если нет, то некое альтернативное (в скрипте отсутствует).

Как это сделать, и сделать просто и понятно:

Начнем с function Objective3() - как я понимаю (и как это примерно и должно быть) это ф-ция проверки выполнения/не выполнения задания-3. Значит ничего лишнего приплетать к ней и не надо. Что она должна содержать зависит конкретно от задания. В данном случае, как видно из скрипта, нужно удержать зону "eng". Сразу нужно четко представлять себе условие выполнения/не выполнения задания. Из скрипта выходит:
Если (GetNUnitsInArea(1, "eng")  < 1) - задание выполнено, если ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) - задание провалено. С провалом задания все понятно, а вот с выполнением есть вопросы. Что будет если строка (GetNUnitsInArea(1, "eng")  < 1) уже сработает, а танки штурмующие зону "eng" еще просто не успеют в нее войти в результате занятости расстрелом обороняющихся. Может возникнуть ситуация, когда игроку задание засчитают, а через 10 секунд оборона зоны "eng" вчистую "сольет" этим самым танкам. Значит надо учесть и наличие этих самых танков в живых. Не знаю какой номер у тебя у этих самых танков. Пусть он будет 100.
Тогда надо сделать, что бы задание засчитывалось, если в зоне "eng" нет танков противника и при этом в группе 100 танков осталось меньше 2х (подбили всех кроме одного). Иногда какой нить юнит уезжает "блуждать по карте", так вот этот один как бы на всякий случай учтен. Игроку не прийдется ждать, пока он соизволит (если вообще соизволит) правильно выполнить поставленную команду. Получается, что если танков в зоне нет, но их еще больше одного (атака еще идет) задание остается активным. Собственно говоря ниже пример к твоему скрипту:

function Objective3()
if ((GetNUnitsInArea(1, "eng")  < 1) and (GetNUnitsInScriptGroup(100,1) <2)) then
ObjectiveChanged(3, 1);
RunScript( "RevealObjective5",4000);   
RunScript( "Reinforcement2",10000);
Suicide();
end;
end;

В данном случае, ф-ция Objective3 проверяет только условие победы в задании 3. Если условие выполнилось, задание 3 засчитывается, запускается ф-ция, выдающая следующее задание, и ф-ция, высаживающая подкреп. (Через RunScript запускаются ТОЛЬКО ф-ции, а не команды!) Если ты хотел высадить подкреп, то делается это вот так. Вызывается ф-ция, а уже внутри нее отдается собственно говоря команда:

function Reinforcement2()
LandReinforcement(2);
Suicide();
end;

Название ф-ции (опять же что бы не путать тебя) может быть любое!!! Не обязательно Reinforcement2. Я так ее назвал, что бы потом при проверке не вспоминать что это за ф-ция, а сразу видеть, что эта ф-ция высаживает подкреп-2. Но в скрипте подкреп высаживает непосредственно команда - LandReinforcement!!! Не путай названия с командами. Если не уверен, лучше еще раз загляни в 18_Lua.

Теперь нужно прописать условие провала задания-3. Сделаю я это в отдельной ф-ции:

function Defeat3()
if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then
ObjectiveChanged(3, 2);
RunScript( "RevealObjective6",4000); 
Suicide();
end;
end;

Сдесь уже все должно быть предельно ясно. Если выполнилось условие, то засчитываем провал задания, и выдаем "альтернативное задание-6".

Теперь вернемся к нашим танкам группы 100 и зоне "g1". Как только они войдут в зону и достаточно ее зачистят, должно выдаться задание-4. Сдесь так же все просто. Необходимо ввести вспомогательную ф-цию, которая будет проверять наличие еще живых юнитов игрока  в зоне. Как только их меньше 2, запускаем задание-4. Сдесь только есть маленький нюанс. А что если игрок просто уйдет из зоны раньше времени (еще до появления танков). Значит, для запуска задания-4, нужно оговорить еще и наличие этих танков в зоне (собственно от кого тогда эвакуироваться, если танков врага не будет):

function Tanks()
if ((GetNUnitsInArea(0, "g1")  < 2) and (GetNScriptUnitsInArea(100, "g1")  > 0)) then
RunScript( "RevealObjective4",4000);
Suicide();
end;
end;

А теперь соберем все эти части вместе с небольшими поправками. Для примера я запущу все наши ф-ции из ф-ции RevealObjective3:

function RevealObjective3()
ObjectiveChanged(3,0);
RunScript("Tanks",5000);
RunScript("Objective3",5000);
RunScript("Defeat3",5000);
Suicide();
end;

function Tanks()
if ((GetNUnitsInArea(0, "g1")  < 2) and (GetNScriptUnitsInArea(100, "g1")  > 0)) then
RunScript( "RevealObjective4",4000);
Suicide();
end;
end;

function Objective3()
if ((GetNUnitsInArea(1, "eng")  < 1) and (GetNUnitsInScriptGroup(100,1) <2)) then
KillScript("Defeat3");
ObjectiveChanged(3, 1);
RunScript( "RevealObjective5",4000);   
RunScript( "Reinforcement2",10000);
Suicide();
end;
end;

function Defeat3()
if ((GetNUnitsInArea(0, "eng")  < 2) or (GetNUnitsInArea(1, "eng")  > 2)) then
KillScript("Objective3");
ObjectiveChanged(3, 2);
RunScript( "RevealObjective6",4000); 
Suicide();
end;
end;

function Reinforcement2()
LandReinforcement(2);
Suicide();
end;

Кто внимательно прочел скрипт, увидел, что в скрипте появились строки KillScript. Это простые команды, отключающие указанную в скобках ф-цию, если эта ф-ция в данный момент активна. В нашем случае она нужна в следующих целях. Если, к примеру, задание было провалено, то ф-ция Defeat3 отработает и с помощью Suicide автоматически выключится сама. Но ф-ция Objective3, которая работала параллельно с ней, продолжает работать и дальше! Ее никто не отключал! И нет гарантии, что в дальнейшем, в процессе прохождения миссии не возникнет ситуации, при которой ф-ция Objective3 сработает. То есть выполнится условие: ((GetNUnitsInArea(1, "eng")  < 1) and (GetNUnitsInScriptGroup(100,1) <2)). В таком случае, вне зависимости от того, было ли ранее провалено задание-3 или нет, в момент срабатывания ф-ции Objective3 задание-3 будет засчитано! По-этому, что бы не возникало таких казусов, в пару ф-ций Objective3 и Defeat3 введена команда KillScript. Если срабатывает одна из ф-ций, то она автоматом и сразу же отключает другую.

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

Уфф мля! Прямо лекция получилась ))

По артобстрелу:

function Artbomb1()                                                                             
GiveCommand( 17, 211);
   GiveQCommand( 16, 211, GetScriptAreaParams("sididaud"));
         RunScript( "ArtStop", 180000);
     Suicide();
end;

function ArtStop()
KillScript("Artbomb1", 2000);
          Suicide();
end;

или же

function ArtStop()
GiveCommand( 9, 211);
          Suicide();
end;

Правильно?

Команда 17 не нужна.
По поводу зоны Зиг прав - все пушки будут лупить по одной точке (центру зоны).
function ArtStop - правильный второй вариант.
KillScript("Artbomb1", 2000); - не правильно написана команда. Время не указывается. Нужно писать так - KillScript("Artbomb1"); Срабатывает мгновенно.

Хотя не факт что они потом сами не начнут лупить куда им захочется.

Аааааа!!! Все!!!!! У меня истерика!!! Валяюсь под столом!!!
Просто недавно боролся с такой же проблемой в своем скрипте! Слишком свежи воспоминания!

Вот пример артобстрела из моего скрипта:

function A2296()
Cmd(16,401,15577,16473);
Cmd(16,402,15686,17262);
Cmd(16,403,15748,17696);
Cmd(16,404,15650,18618);
RunScript("A22961",60000);
Suicide();
end;

function A22961()
Cmd(16,401,15088,16004);
Cmd(16,402,15095,16359);
Cmd(16,403,15056,18552);
Cmd(16,404,15098,18990);
RunScript("A22962",60000);
Suicide();
end;

function A22962()
Cmd(16,401,14384,16320);
Cmd(16,402,14377,17105);
Cmd(16,403,14421,17921);
Cmd(16,404,14570,18534);
RunScript("A22963",60000);
Suicide();
end;

function A22963()
Cmd(15,401,14332,15250);
Cmd(15,402,14353,15573);
Cmd(15,403,14565,18453);
Cmd(15,404,14565,18453);
Suicide();
end;

Четыре орудия лупят по квадрату (рис. внизу) поочередно по точкам 1, 2, 3 и 4. По каждой точке бьют 1 минуту (каждое орудие бьет по своей 401-А, 402-В, 403-С 404-D). На последней точке пристреливаются. Артобстрел производится непосредственно перед атакой.
В конце, можно вместо пристрелки поставить простую отмену через команду Cmd(9,401);

http://s42.radikal.ru/i095/0810/cb/de03ffabed48t.jpg

+4

75

Рекс, огромный тебе респект за пример функции действующего огневого вала. Если его внедрить на паре тройке карт перед наступлением - будет офигенно здорово! Причём что игрока, что компа. Моя воля, я вообще запихнул бы такой алгоритм каждой гаубице в игру как стандартную функцию. Вон в Company of Heroes так и сделали.+

@simeo Твоё НЛО - кусок дороги или реки без текстуры. Просто перейди в соотв. режим в редакторе, выдели и нажми del.

0

76

спасибо, стало понятнее :-)

По НЛО на карте- вообще не удаляется, не река, не окоп, не дорога, не ограда, не мост
Как было, так и торчит ((

Reks Так у меня тоже, тока не тетрадка а два тхт-файла- сценарий, и состав, где все-все войска с группами

Пример скрипта авиаудара штурмовиков: так просто?

function Shturmavia()                                                               
SwitchWeatherAutomatic(0);
SwitchWeather(0);
Cmd(36, 1, GetScriptAreaParams("eng"));
Suicide();
end;

Отредактировано simeo (2008-10-29 16:47:51)

0

77

Пример скрипта авиаудара штурмовиков: так просто?

function Shturmavia()                                                               
SwitchWeatherAutomatic(0);
SwitchWeather(0);
Cmd(36, 1, GetScriptAreaParams("eng"));
Suicide();
end;

Да, только надо дописать скриптовый номер авиации - 10000. Хз почему 10000, но работает на всех типах авиации.

Cmd(36, 1,10000, GetScriptAreaParams("eng"));

Кстати, а ты ту часть скрипта, которую написал, уже проверял? Хотя бы на наличие ошибок?

Отредактировано Reks (2008-10-29 17:09:04)

0

78

Reks
Не, не проверял
Пока погряз в нем вообще, там много получается

0

79

Ну очень похоже на кусок развёрнутой дороги. Объектов такой формы не припомню. Выделить ты её не можешь потому, что она вероятно выше/ниже того места где ты кликаешь. Попробуй всё вокруг общёлкать. :glasses:

0

80

AlexGENERAL_Z
Общелкал всё, и как дорогу и и как реку- нефига, там, где оно лежит - высота 0,00
НЛО, блин
И главное, дня три назад не было, я там как раз исправлял место

0

81

AlexGENERAL_Z
Общелкал всё, и как дорогу и и как реку- нефига, там, где оно лежит - высота 0,00
НЛО, блин
И главное, дня три назад не было, я там как раз исправлял место

Прикрыл объектом A_Dirt_02 (группа белых камней - чтоб глаза не мозолил)

Отредактировано simeo (2008-10-29 17:43:23)

0

82

Вопрос насчет групп подкрепления
Можно ли создать в подкреплении группу с разными номерами и как это сделать?
ведь при создании он требует ввести номер Id?

Извините, уже понял

Отредактировано simeo (2008-10-30 17:50:51)

0

83

Такой вот вопрос возник: А как расчитать дальность стрельбы артиллерии в редакторе?
Позиции некоторых батарей зависят от дальности их стрельбы

0

84

Такой вот вопрос возник: А как расчитать дальность стрельбы артиллерии в редакторе?
Позиции некоторых батарей зависят от дальности их стрельбы

Методом тыка. Создай тестовую карту 8*8 к примеру. Поставь в угол пушку, и запусти эту миссию из редактора. Уже в игре посмотри дальность ее стрельбы. В качестве ориентиров поставь какие нить простые объекты. Потом посчитай по ориентиру кол-во квадратов (дистанцию) сетки.

0

85

Нууу, все намного проще и нагляднее. :glasses:

В редакторе есть специальная функция которая позволяет видеть радиус стрельбы юнитов - от пехоты до артилерии.

Выберите на панели инструментов необходимый вам  фильтр стороны и вида юита (Select Fire Rang units filter) и нажимте слева от нее  кнопку"кружок со стрелкой" (Show units fair renges) и на вашей карте появятся гранцы зон огня того или иного вида юнитов соответствующей стороны.

Иллюстрация прилагается.

http://i075.radikal.ru/0810/04/943a576f0884t.jpg

+2

86

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

...запусти эту миссию из редактора...

А как это сделать? Я читал в справке про это, но у меня ничего не получается...

0

87

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

0

88

Вопрос насчет Стартовых команд
Использовали и не возникали ли противоречия с закладкой AI Setting

Я имею ввиду, например даешь стартовуюкоманду снабжения боеприпасами
небудет ли она противоречить идентичной команде через АИ Сеттинг и как вообще эта штука работает?

Особенно меня интересует вопрос снабжения войск противника, ремонт, пополнение состава
Насколько эта штука работает самостоятельно и через что лучше делать?

0

89

Я не жалуюсь на работу. Использую, правда, редко и в основном для пополнения войск и боеприпасов. Лучше ставить машины пополнения недалеко от места их действия и складов. Задав стартовую команду на снабжение артилерии, например, не нужно указывать место действия на пушку. Можно указать где-то рядом, АИ потом сам разберется, что нужно делать.

0

90

А команда про прперемещение компом артиллерии?
Срабатывает и как выглядит?

0


Вы здесь » Союз | Union » Картостроение и скриптовка » Делаем карту (с грехом пополам)