Союз | Union

Объявление

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

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


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


Скрипты

Сообщений 181 страница 210 из 345

181

очень много минусов.

Полностью согласен, танк встанет и иметь его будут все, кому не лень.

0

182

Гы. Пришла в голову мысль. А что, когда танк "встанет" (а это значит только то, что он просто передан компьютерному игроку-союзнику), и в какой то момент его скажем атакует противник, или он заметит противника неподалеку. Танк при этом наверняка кинется сражаться и рассекать по карте, не смотря на то, что у него "нет горючего"? На сие действо будут смотреть как минимум с улыбкой :). Или того хуже, танк "без горючего", погонится за проезжающим мимо противником и его где то там в сторонке попросту прибьют. Остановить его у игрока не будет возможности, так как он лишь союзник, а не подчиненный юнит.  :hobo:

0

183

Reks
Ну я же не наобум это выкладываю

Предусмотрел этот момент.
танк остаётся неподвижным, единственное он может крутится вокруг оси и только
это проверено и в действующей миссии "Мехили" и в новой "Суомуссалми"
пример скрипта для танка:

function Gasolin1044()
ChangePlayer (1044, 2);
Cmd(50,1044);
Suicide();
end;

пример скрипта для грузовика, с высадкой десанта, отцеплением пушки
function Gasolin1051()
local x,y = GetObjCoord(1051);
Cmd(32,1051,x,y);QCmd(5,1051,x,y);QCmd(9,1051);
ChangePlayer (1051, 2);
Suicide();
end;

Конечно можно вообще убрать возможность верчения юнита и сделать его вообще нейтральным - это дело вкуса и сценария миссии

Shabar
Николай
Эта фишка не для всех миссий, в большинстве она не имеет смысла, при запасе хода танка в 200 км даже самая большая карта в Блице едва ли превысит 60 км. Да никто и не будет переделывать их.
Она просто призвана помочь мапперу не выдумывать что-то из головы, а предложить готовый рецепт в виде скрипта для миссий, где обыгрывается именно нехватка топлива и только, а таких миссий едва ли будет масса.

0

184

simeo
Я не имел ввиду миссии,где по сценарию это задумано обыиграть.Это нормально.Но вот эта фраза меня смутила:Актуально применять для карт где бронетанковые подразделения действуют наступательно.
Сразу игроку будет понятно, что "топливо - это кровь войны"

0

185

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

Ну я же не наобум это выкладываю

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

0

186

Reks
Существует карта в GZM, называется Мехили, там уже год танки принимают союзную сторону и не разу подобного не было, а там есть атаки и танков на эти юниты и пехоты.
А чтобы ещё предохранится, дается команда "держать позицию".
Сейчас тестируется вторая карта, где воспроизводится момент, когда заканчивается топливо. И тоже, подобного не было, хотя танки, бтр и грузовики оказываются под атаками пехоты.
И второй момент. Если это произойдет на 100-й раз, а в 99% будет нормально - тогда не стоит это вообще использовать?

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

Если не веришь, возьми пусти пару машинок противника, и пусти так, что бы те на 4-5 секунд попали в зону видимости "танка без топлива" (например создав мелкую карту для теста в редакторе). Он скорее всего не успеет их расстрелять. И увидишь, как этот танк ломонется за ними в догонку, когда машинки выйдут из радиуса обзора или обстрела.

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

Поясню
Скрипт заправки показывает, что на неизвестно где вставший юнит можно воздействовать определённым юнитом(ми). И только
Что даёт возможность реализовать в некоторых миссиях момент дефицита топлива.

Поведение юнитов при изменении им стороны на союзническую не рассматривался по причине того, что я с этим не сталкивался, те юниты, которые я использовал, активности не проявляли. Но этот момент вообще легко обойти, присвоив им, юнитам сначала нейтральную сторону. Подозреваю, что активность проявляют основные юниты (например Т-34, или Pz-IV), у других же такой активности нет
Например такого не было у танков БТ, Т-26, бтр Комсомолец, Д-8, БА-10 и ну и т.д. (список большой)
Это лишь показывает, что многое зависит от набора юнитов и от экспериментов в конкретной создаваемой миссии

+1

187

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

0

188

Simeo, зачем же так болезненно реагировать?  :hobo:  Я ж не для того что бы насолить, или как ты там сказал - "наснобить"  :D , а наоборот только что бы помочь и улучшить твою работу. Если чем обидел, то извини.

Даж страшно теперь и замечания  или предложения то делать, после такой реакции  :confused:

0

189

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

0

190

:question:
Хотелось бы узнать, можно сделать такой скрипт, чтобы по определённому событию начиналось воспроизвидение видеофайла в формате .bin?

0

191

Нет, совершенно невозможно.

0

192

А возможно ли создавать например какието зоны, в моём случае завод куда например пригоняеш технику и она начинает чинится ?

0

193

Panzer-IV написал(а):

А возможно ли создавать например какието зоны, в моём случае завод куда например пригоняеш технику и она начинает чинится ?

Да, в редакторе в одном из менюшек можно рисовать и называть зоны. А в скрипте по ним(названиям) запустить какую то функцию. Но лечить, как в конкретном случае, можно будет только юнитов с определенными заранее ID (т.е. не всех подряд)

0

194

Знающие помогите!!! Сделал скрипт ,но он почему-то не работает :'( .Вот он:
function ChangePlayer()
ChangePlayer(100,0);
Suicide();
end;

function Init()

RunScript("ChangePlayer", 100);

end;
Подскажите что неправильно плз

0

195

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

Знающие помогите!!! Сделал скрипт ,но он почему-то не работает  .Вот он:
function ChangePlayer()
ChangePlayer(100,0);
Suicide();
end;
function Init()

RunScript("ChangePlayer", 100);
end;
Подскажите что неправильно плз

Если не ошибаюсь, то нельзя писать в качестве имени функции ключевые слова.

0

196

имя функции вроде может быть любое. Главное чтобы имя на 100% не совпадало с функциями и сценариями языка lua.(который здесь на форуме где то есть) . впрочем тов.Jukov выше об этом указал.
например
function Fuck()
              ChangePlayer(100,0);
              Suicide();
end;

function Init()
             RunScript("Fuck",100);
end;

хотя я может и ошибаюсь. специалисты меня поправят))

+1

197

Большое спасибо .З.ы. хорошее имя функции :D
У меня ещё один вопрос : Что такое глобальная (или не глобальная) переменная?Ответте если не трудно
в заранее спасибо!

0

198

Локальная переменная может использоваться только внутри одной функции. Из другой функции её считать или изменить напрямую нельзя. В двух разных функциях могут использоваться переменные с одинаковыми именами и при этом они не будут конфликтовать друг с другом. Глобальные переменные доступны напрямую из любой функции.

0

199

А нет ни у кого пособий по использованию переменных?

0

200

Уважаемые знатоки, никто не сталкивался в lua с массивами? Синтаксис и проверку в lua редакторе проходит, а вот игра вылетает с этим скриптом.
Смысл в том, что бы проверить есть ли 4 юнита в зоне "Tank" (в различных вариантах), убирать с карты только четверку. Грубо говоря, пока 4 из 7 юнитов с разным ID в квадрат не припрутся, четверых не убирать с глаз.

function HTank()
local A={0,0,0,0,0,0,0,0,0,0,0};
local i=1;
local count=0; DisplayTrace("gop");    <-- до этого момента уже не доходит. надписи не видно перед вылетом. Но что не так? Массив как в книжке задал всего лишь.
if ((GetNUnitsInArea (10, 'Tank'))>0) then count=count+1; A[i]=10; i=i+1; end;
if ((GetNUnitsInArea (11, 'Tank'))>0) then count=count+1; A[i]=11; i=i+1; end;
if ((GetNUnitsInArea (12, 'Tank'))>0) then count=count+1; A[i]=12; i=i+1; end;
if ((GetNUnitsInArea (13, 'Tank'))>0) then count=count+1; A[i]=13; i=i+1; end;
if (count==4) then
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]); count=0; i=1; end;
if ((GetNUnitsInArea (14, 'Tank'))>0) then count=count+1; A[i]=14; i=i+1; end;
if (count==4) then
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]); count=0; i=1; end;
if ((GetNUnitsInArea (15, 'Tank'))>0) then count=count+1; A[i]=15; i=i+1; end;
if (count==4) then
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]); count=0; i=1; end;
if ((GetNUnitsInArea (16, 'Tank'))>0) then count=count+1; A[i]=16; i=i+1; end;
if (count==4) then
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);
count=0; i=1; end;

end;

function Init()
DisplayTrace("start");
RunScript("HTank",1000);
end;

Отредактировано vlad_82 (2011-01-11 23:16:25)

0

201

Для начала везде замени ((GetNUnitsInArea (число, 'Tank'))>0)  на GetNUnitsInArea (число, "Tank")>0

Отредактировано Jukov (2011-01-12 14:55:45)

0

202

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

Для начала везде замени ((GetNUnitsInArea (число, 'Tank'))>0)  на GetNUnitsInArea (число, "Tank")>0

Наличие СИМЕТРИЧНЫХ скобок в данном случае не принципиально. Ковычки тоже допускаются обоих типов, для этой функции. Строчка скопирована из рабочего скрипта.
      Я щас нашел косяк свой.  :tired: Как всегда из за не внимательности, использовал GetNUnitsInArea для обнаружения ID юнитов. А функция эта для определения номера игрока. Конечно со значением 10 оно вылетает (игроков у меня всего 2).
   Итого: массивы пока ни причем :)

0

203

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

Наличие СИМЕТРИЧНЫХ скобок в данном случае не принципиально. Ковычки тоже допускаются обоих типов, для этой функции. Строчка скопирована из рабочего скрипта.
      Я щас нашел косяк свой.   Как всегда из за не внимательности, использовал GetNUnitsInArea для обнаружения ID юнитов. А функция эта для определения номера игрока. Конечно со значением 10 оно вылетает (игроков у меня всего 2).
   Итого: массивы пока ни причем

лишние скобки лучше не ставить - листинг лучше читается. Про кавычки - это интересно. Скрипт-то заработал?

function HTank()
local a={10,11,12,13,14,15,16,17};
local b,c;
local d={};
c=0;
for b=1,7 do
  if GetNScriptUnitsInArea (a[b],"Tank")>0 then d[b]=a[b]; c=c+1;
end;
if c>=4 then
  for b=1,4 do
   DeleteReinforcement(d[b]);
  end;
end;
end;

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

Отредактировано Jukov (2011-01-15 18:16:51)

0

204

Jukov
Да, как только я заменил GetNUnitsInArea на GetNScriptUnitsInArea.  :yep:
Типы кавычек важны в иных функциях. А этим двум, работающим с зоной - все равно. Проверено.
Скобок столько, потому что я скопировал строчку из уже рабочих скриптов. А там комплексные условия. И мне спокойнее, чисто для меня это еще и маркеры условий. :writing:

P.S. Важно определять размер массива заранее.
A={}; - так нельзя...

В итоге получился это тестовый кусок:

function HTank()
local A={0,0,0,0,0,0,0,0,0,0,0};
local i=1;
local count=0; DisplayTrace("gop");
if ((GetNScriptUnitsInArea (10, 'Tank'))>0) then count=count+1; A[i]=10; i=i+1; end;
if ((GetNScriptUnitsInArea (11, 'Tank'))>0) then count=count+1; A[i]=11; i=i+1; end;
if ((GetNScriptUnitsInArea (12, 'Tank'))>0) then count=count+1; A[i]=12; i=i+1; end;
if ((GetNScriptUnitsInArea (13, 'Tank'))>0) then count=count+1; A[i]=13; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
if ((GetNScriptUnitsInArea (14, 'Tank'))>0) then count=count+1; A[i]=14; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
if ((GetNScriptUnitsInArea (15, 'Tank'))>0) then count=count+1; A[i]=15; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
if ((GetNScriptUnitsInArea (16, 'Tank'))>0) then count=count+1; A[i]=16; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
if ((GetNScriptUnitsInArea (17, 'Tank'))>0) then count=count+1; A[i]=17; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
if ((GetNScriptUnitsInArea (18, 'Tank'))>0) then count=count+1; A[i]=18; i=i+1; end;
if (count==4) then Four(A,i); count=0; i=1; end;
DisplayTrace(count);
end;

function Four(A,i)
i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);i=i-1;
DeleteReinforcement(A[i]);
end;

function Init()

DisplayTrace("start");
RunScript("HTank",1000);
end;

Отредактировано vlad_82 (2011-01-15 20:04:28)

0

205

Вот рабочая версия:

function HTank()
local a={10,11,12,13,14,15,16};
local b,c;
local d={};
c=0;
for b=1,7 do
  if GetNScriptUnitsInArea (a[b],"Tank")>0 then d[b]=a[b]; c=c+1; end;
end;
if c>=4 then
  for b=1,4 do
   DeleteReinforcement(d[b]);
  end;
end;
end;

function Init()
DisplayTrace("GO!");
RunScript("HTank",3000);
end;

Текущая редакция справочника по LUA:справочник LUA v1.9

Отредактировано Jukov (2011-01-15 21:17:38)

+2

206

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

0

207

Вот наверное то, что Вам нужно (скрипт проверен - работает):
создайте на карте 6 юнитов со scriptID от 1 до 6 и три зоны zone1, zone2, zone3.

function DelUnit()
local a={"zone1","zone2","zone3"};
local b;
for b=1,3 do
for unit=1,6 do
  if GetNScriptUnitsInArea (unit,a[b])>0 then
   if RandomInt(100)==10 then DamageObject(unit,0); end;
  end;
end;
end;
end;

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

Числа в RandomInt(100)==10 задают вероятность

Отредактировано Jukov (2011-01-16 15:22:49)

+2

208

Касательно танка, который ждет заправки и может (теоретически) без топлива гоняться за вражескими юнитами. Можно попробовать не менять номер игрока (с 0 на 2), а команду задать не 50 (держать позицию), а 9 (отставить все действия). При этом, Suicide(); в конце функции писать не надо – танк ничего не сможет сделать, даже если дать ему команду (функция через доли секунды тут же отменит все действия танка).  Затем, когда бензовоз подойдет к танку и заправит его, функцию «без топлива» убить.

0

209

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

Вот наверное то, что Вам нужно

Да, гибель происходит очень даже хаотично, то что нужно.
Премного благодарен!

0

210

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

Числа в RandomInt(100)==10 задают вероятность

Эмм. Тут наверное опечатка?
Что бы число выражало вероятность наверное нужно писать не строгое равенство, а меньше или равно:

RandomInt(100)<=10

0


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