Союз | Union

Объявление

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

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


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


Как перестать бояться и начать скриптить

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

61

Есть вот такой скрипт чтобы грузовик по карте типа что-то развозил, просто имитация жизни.
function PatrolTruck1()
if GetUnitState(801)==1 then
local a;
a=GetIGlobalVar("temp.patrol1",0);
Cmd(3,801,GetScriptAreaParams("a"..a));
a=a+1; if a>16 then a=0; end;
SetIGlobalVar("temp.patrol1",a);
end;
end;

Как сделать чтобы он не просто нарезал круги как умалишенный не останавливаясь ни на секунду а чтобы он при определённом значении счётчика(например в точке a9) останавливался на сколько-то секунд?
В мануалах не нашёл возможности паузить скрипт на энной количество секунд.

upd: в мануалах по языку Lua предлагают для паузы скрипта запускать пинг локалхоста энное количество раз:
function sleep(n)
  if n > 0 then os.execute("ping -n " .. tonumber(n+1) .. " localhost > NUL") end
end

Это дичь, я не буду такое делать  o.O

Отредактировано tochka.u.u (2023-08-04 14:04:30)

0

62

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

+1

63

Нашёл как сделать таймаут на Lua

function sleep (a)
    local sec = tonumber(os.clock() + a);
    while (os.clock() < sec) do
    end
end

но в игре это не отрабатывает как надо - т.к. скрипт запускается из функции init то он через 15 сек запускается заново и таймаут игнорируется.

Отредактировано tochka.u.u (2023-08-04 22:14:55)

+1

64

Проблема со скриптом

Cmd(0,551,GetScriptAreaParams("c9"));
sleep(30);
DisplayTrace("setcamera");
AskClient("SetCamera(9500,8500)");
DisplayTrace("leave car");
Cmd(5,551,GetScriptAreaParams("c9"));
sleep(2);
ChangePlayer(550,1);
ChangePlayer(551,1);
DisplayTrace("reveal ambush");
Cmd(3,550,GetObjCoord(910));`
sleep(30);
Cmd(4,550,551);
ChangePlayer(550,0);
ChangePlayer(551,0);
sleep(20);
Cmd(0,551,GetScriptAreaParams("mpla_spawn_1"));

Он доезжает до этапа AskClient("SetCamera(9500,8500)"); и дальше не выполняется. Эта команда сама по себе уже не отрабатывает.
Если начинаешь запускать команды вручную из консоли по одной то при запуске ChangePlayer(550,1); когда типы эти уже вышли из машины игра тупо крашится. Крашится при смене стороны юнита.
Что за фокусы? У трёх пехотинцев точно айди 550. Может такое быть из-за то что это типа 3 разных юнита а у них у всех одинаковый айди?

0

65

tochka.u.u
По поводу паузы скрипта, это никто никогда не использовал, поэтому неизвестно как это работает и работает ли вообще.
По смене игрока, вероятно номер мог быть выдан случайно ещё какому-то объекту. Количество юнитов с одинаковым номером на отработку команды не влияет.

+1

66

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

tochka.u.u
По поводу паузы скрипта, это никто никогда не использовал, поэтому неизвестно как это работает и работает ли вообще.
По смене игрока, вероятно номер мог быть выдан случайно ещё какому-то объекту. Количество юнитов с одинаковым номером на отработку команды не влияет.

Если убрать паузу то команды поехать в точку А и высадить там юнитов и атаковать ими выполняются моментально друг за другом не дожидаясь пока кто-то куда-то доедет. Как этого можно избежать?

0

67

tochka.u.u
Через несколько разных функций и проверок. Время можно контролировать только так.

0

68

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

Upd: теперь игра крашится когда срабатывает команда атаковать одним пехом другого Cmd(3,552,GetObjCoord(910));
Да бл***ть, что с ним не так?? Айдишники точно правильные и существующие.

Отредактировано tochka.u.u (2023-08-05 21:00:19)

0

69

tochka.u.u
Cmd(3,552,GetObjCoord(910));
Во-первых, это не атака, а следование в боевой готовности.
Во-вторых, скорее всего в логике проблема, отсюда вылеты. Лучше целым куском показывать с пояснением по номерам, так проще понять, что там происходит.

0

70

Полный код вот такой

function menongwe_attack1_1()
Cmd(5,551,GetScriptAreaParams("c9"));
RunScript("menongwe_attack1_2", 190000);
Suicide();
end;

function menongwe_attack1_2()
AskClient("SetCamera(9500,8500)");
ChangePlayer(552,1);
Cmd(3,552,GetObjCoord(910));

RunScript("menongwe_attack1_3", 30000);
Suicide();
end;

function menongwe_attack1_3()
ChangePlayer(552,3);
Cmd(4,552,551);
RunScript("menongwe_attack1_4", 20000);
Suicide();
end;

function menongwe_attack1_4()
Cmd(0,551,GetScriptAreaParams("mpla_spawn_1"));
RunScript("menongwe_attack1_5", 190000);
Suicide();
end;

function menongwe_attack1_5()
DeleteReinforcement(551);
DeleteReinforcement(552);
Suicide();
end;

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

У меня на карте сценарных зон уже порядка 60 штук, из-за этого не может вылетать?

0

71

tochka.u.u
Навскидку могу предположить, что сторона юнитов меняется внутри автомобиля, отсюда вылет. Cmd(3,552,GetObjCoord(910)); попробуй переписать с переменными. То есть вначале функции x,y = GetObjCoord(910), а в Cmd(3,552,x,y))

+1

72

tochka.u.u написал(а):

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

Попробуй этот

function Patrol6()
if GetUnitState(700)==1 then
local a;
a=GetIGlobalVar("temp.patrol7",0);
Cmd(3,700,GetScriptAreaParams("z"..a));
a=a+1; if a>7 then a=0; end;
SetIGlobalVar("temp.patrol7",a);
end;
end;

function Init()
RunScript("Patrol6", 8000); - здесь можно менять время остановки в точках  патрулирования.
end;

Отредактировано Gagarin (2023-08-06 18:25:20)

+1

73

Русский не отображается...В чем может быть проблема?
https://forumupload.ru/uploads/0000/38/bf/3742/t100364.png

0

74

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

0

75

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

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

В начале, я скрипты писал через обычный блокнот, но перейдя на "нотепад++" проблема осталась(везде указывал формат LUA),хм. Эта проблема есть,только, на редактируеой карте,хм

0

76

Иконий
Попробуйте взять файл скрипта от любой другой миссии и вставить туда свой текст.

0

77

Попробывал,только, это вставить:

function Start()
DisplayTrace("Босния, 1943 год");
ObjectiveChanged(0,0);
Suicide();
end;

Не отобразилось...Так,еще, при выставлении легионера-франкиста редактор стал вылетать,а текстуры юнитов слетели и заменились на черно-белые шашечки..хм
Может имеет смысл все переустановить? Нужно ли чистить,что-то,на системном диске?

Отредактировано Иконий (2023-08-10 15:00:10)

0

78

Иконий
Странные вещи творятся. Вы поменяли путь к папке с игрой, как я упоминал?
А лучше всё переставьте, чистить на диске особо нечего.

0

79

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

Иконий
Странные вещи творятся. Вы поменяли путь к папке с игрой, как я упоминал?
А лучше всё переставьте, чистить на диске особо нечего.

Да.Но ничего из простых решений не помогло...Что-то сломалось,а что не понимаю..хех

Upd: пропажа текстур юнитов происходит,только, на карте с типом ландшафта Африка...

Отредактировано Иконий (2023-08-09 14:15:06)

0

80

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

+1

81

Как правило, пустынные текстуры отсутствуют у тех юнитов, которые в реале никогда не были в Африке.

+1

82

Какой-то анекдот(несмешной):
...скриптовал по примеру из видео первые задание(Obj0 и Obj1), так отряд 101(у меня, только, нейтральные автофургончики),вообще, на карте(в игре) пропал(зона указана)!
Если оставлять один(фургон) ВНЕ отряда 101(и в зоне) - отображается, но и толку с него "0",хех
Вхождение в зону срабатывает и задание "выполняется"

скрипты

function Init()
DisplayTrace('Training map!');
RunScript("Obj0",5000);
end;

function Obj0()
ObjectiveChanged(0,0);
RunScript("Obj0End",5000);
Suicide()
end;

function Obj0End()
if GetNUnitsInArea(0,"oboz1") >0 then
ObjectiveChanged(0,1);
ChangePlayer(101,0);
RunScript("Obj1",5000);
Suicide();
end;
end;

Отредактировано Иконий (2023-08-11 21:51:52)

0

83

Иконий
Честно говоря, ничего не понял. В скрипте никаких проблем нет.

0

84

Для наглядности:

Картинки

Возможно, что я(по неопытности),что-то, наклацал в редакторе?Можно ли его обнулить?Сбросить до стоковых настроек?

0

85

Иконий написал(а):

Для наглядности:

Возможно, что я(по неопытности),что-то, наклацал в редакторе?Можно ли его обнулить?Сбросить до стоковых настроек?

Судя по скрипту и по скрину, что я тут вижу: через 5 сек. после старта выдаётся задание 0, потом через 5 сек выдаётся условие его выполнения, т.е. нахождение хотя бы одного юнита игрока в зоне "oboz1", одновременно с чем нейтральные грузовики 101 принимают сторону игрока. Всё предельно просто.  В игре почему-то пехота игрока на миникарте отображается в виде белых точек, а грузовиков нет. Явно игра работает неправильно.
Дистанционно определить причину бага трудно. А не стоит ли Вуду?

0

86

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

0

87

tochka.u.u написал(а):

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

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

+2

88

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

Судя по скрипту и по скрину, что я тут вижу: через 5 сек. после старта выдаётся задание 0, потом через 5 сек выдаётся условие его выполнения, т.е. нахождение хотя бы одного юнита игрока в зоне "oboz1", одновременно с чем нейтральные грузовики 101 принимают сторону игрока. Всё предельно просто.  В игре почему-то пехота игрока на миникарте отображается в виде белых точек, а грузовиков нет. Явно игра работает неправильно.
Дистанционно определить причину бага трудно. А не стоит ли Вуду?

https://forumupload.ru/uploads/0000/38/bf/3742/t281036.png
Да,стоит,НО,наконуне (1-2 дня назад) скрипт срабатывал,хм

0

89

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

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

Я понял в чём баг с попом. Я сделал его из немецкого врача, у которого был пистолет. Естественно пистолет у попа я забрал, оставив в xml пустой блок <Guns></Guns>.  Оказывается этот так не работает, этот блок не может быть пустым - при нападении поп выхватывал из кобуры воображаемый пистолет которого нет и в этот момент игра вылетала.

Отредактировано tochka.u.u (2023-08-12 12:56:27)

0

90

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

Ишь чё вздумал окаянный, священнослужителя жизни лишать!

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

Вот сейчас расстрелял его, он благополучно умер, никаких вылетов.

Это что сценарий Утомленные солнцем 4 ))) Простите не удержался ......

0


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