Вторник, 01.07.2025, 00:59
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Вопросы по созданию КЛЕО-скриптов 2
RecoilДата: Пятница, 01.10.2021, 21:53 | Сообщение # 391
Группа: Проверенные
Сообщений: 12
Статус: Offline
Еще в начале этого года занимался подобным, пример скрипта с аллокейт, работает как часы, почему тот не работает никто не знает

{$CLEO}
wait 2000

0AC8: 0@ = allocate_memory_size 16
0A8C: write_memory 0@ size 4 value 2.0 virtual_protect 0
0085: 1@ = 0@ // (int)
inc(1@,4)
0A8C: write_memory 1@ size 4 value 4.5 virtual_protect 0 
inc(1@,4)
0A8C: write_memory 1@ size 4 value 6.5 virtual_protect 0
inc(1@,4)
0A8C: write_memory 1@ size 4 value 7.5 virtual_protect 0

wait 500
0085: 1@ = 0@ // (int)
0A8D: 4@ = read_memory 0@ size 4 virtual_protect 0
inc(1@,4)
0A8D: 5@ = read_memory 1@ size 4 virtual_protect 0
inc(1@,4)
0A8D: 6@ = read_memory 1@ size 4 virtual_protect 0
inc(1@,4)
0A8D: 7@ = read_memory 1@ size 4 virtual_protect 0
0AC9: free_allocated_memory 0@
0AD0: show_formatted_text_lowpriority "%.2f %.2f %.2f %.2f" time 4000 4@ 5@ 6@ 7@  // ???????: 20 45
0A93: end_custom_thread
 
Den_spbДата: Воскресенье, 03.10.2021, 14:10 | Сообщение # 392
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
Причин может быть несколько:
1)значения не записываются по адресам
2)значения записываются, но тут же изменяются каким-то другим скриптом/процессом
3)адрес неверный, либо для получения эффекта нужно выполнить ещё какое-то действия.

Судя по тому, что аналогичный скрипт с hex-буфером работает, то скорее всего здесь имеет место первая причина и проблема с самим allocated memory. С помощью последовательного вывода чисел на экран можно проверить, что числа корректно записываются в allocated memory, корректно читаются и копируются в игровую память, а также то, что числа в памяти впоследствии не меняет другой процесс. Сам я такой проверочный скрипт сейчас сделать не могу, так как в отъезде и компьютера нет под рукой. Ещё момент: в коде с hex-буфером меняются 5 значений, с allocate memory - 4. Может, эффект не наступит, пока не изменить все 5 значений?
 
RecoilДата: Воскресенье, 03.10.2021, 18:00 | Сообщение # 393
Группа: Проверенные
Сообщений: 12
Статус: Offline
Цитата Den_spb ()
Ещё момент: в коде с hex-буфером меняются 5 значений, с allocate memory - 4.
Нет, при окончательном тестировании просто добавил адрес в первоначальный скрипт т.к. у бандито оказался свой адрес.
Ясен пень, пример с  hex-буфером смотрел у тебя, потому и работает.
 
reloadedmailidДата: Вторник, 09.11.2021, 17:52 | Сообщение # 394
Группа: Пользователи
Сообщений: 1
Статус: Offline
The site is still alive!!
 
Den_spbДата: Вторник, 09.11.2021, 17:54 | Сообщение # 395
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
Цитата reloadedmailid ()
The site is still alive!!
Alive again!  crazy
 
laggthДата: Понедельник, 31.01.2022, 09:41 | Сообщение # 396
Группа: Пользователи
Сообщений: 88
Статус: Offline
Почему,когда я даю команду поезду стать синим  0229: set_car 1@ primary_color_to 10 secondary_color_to 1 ,он становится чёрным(локомотив). Другие цвета с кучей других поездов(красно-белый,жёлто белый,сине-зелёный(на разных линиях)) работают и появляются с правильным цветом. Но иногда и появляются правильные голубые с белым локмотивы,но почему то редко.
 
Den_spbДата: Среда, 02.02.2022, 17:51 | Сообщение # 397
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
А что за модель локомотива? Стандартная из игры или авторская модификация?
 
laggthДата: Среда, 02.02.2022, 21:36 | Сообщение # 398
Группа: Пользователи
Сообщений: 88
Статус: Offline
Авторская модель метро мытищинского.
 Но теперь работает вроде,я их поставил на новые id и побоялся прописать цвета в carcols(думал что вылетать будет из за них).
 
Den_spbДата: Четверг, 03.02.2022, 13:15 | Сообщение # 399
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
Хорошо, что теперь всё работает! up
 
laggthДата: Четверг, 03.02.2022, 23:39 | Сообщение # 400
Группа: Пользователи
Сообщений: 88
Статус: Offline
Как остановить поезд скриптом моментально или плавно в точке или в маленькой сфере(диаметром не более 1(чтобы не задевать встречный путь)).Я остановливаю поезда кодом
wait 0
if
01AF:   car 1@ sphere 0 in_sphere 2556.0588 -2501.9448 26.5784 radius 14.0 14.0 14.0       // seaport vnutr
jf @platf3
jump @NONAME_926

далее задаю ass 0.0 и speed 0.0 ,и поезд остановливается моментально при скорости 30.0 .
Но на двухпутном пути поезд попадает в одни и те же сферы дважды на обратном пути по параллельному пути и останавливается поэтому в началах встречных платформ(в концах своих платформ)(перед тем как заехать на свою платформу по пути).
Если сферы сделать меньше,то поезд их проезжяет без остановки,потому у меня такие широкие сферы.


Сообщение отредактировал laggth - Четверг, 03.02.2022, 23:41
 
Den_spbДата: Пятница, 04.02.2022, 15:36 | Сообщение # 401
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
Так а почему проверяется нахождение каждого поезда и в своих, и в чужих сферах? Надо проверять нахождение каждого поезда только в сферах своего пути.

Если код переделать по каким-то причинам нельзя, то можно завести переменную-флаг. Например, изначально в 29@ записан 0.
0 означает, что данный поезд на данной станции еще не останавливался. Дальше проверяем:

Код
if and
01AF:   car 1@ sphere 0 in_sphere 2556.0588 -2501.9448 26.5784 radius 14.0 14.0 14.0       // seaport vnutr
29@ == 0 // поезд еще не останавливался на этой станции
jf @platf3
jump @NONAME_926

Если оба условия верны, то останавливаем поезд.
Есть две команды - ass 0.0 и speed 0.0
Одна мгновенно останавливает поезд, вторая - плавно. Какая из них какая - не помню.
И устанавливаем флаг 29@ = 1. Это означает, что поезд уже останавливался на этой станции, второй раз его останавливать не нужно.

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

Вместо проверок со сферами обычно можно просто проверить одну координату. Например, поезд едет с севера на юг. Координата Y будет уменьшаться. Тогда проверка будет выглядеть так:

Код
00AA: store_car 0@ position_to 3@ 4@ 5@
if and
    4@ < 500.0 // Y-координата точки остановки
    29@ == 0
then
    06DD: set_train 0@ speed 0.0
    29@ = 1
end

И последнее - чтобы проверки в коде работали быстрее, надо стараться использовать как можно меньше команд wait (только там, где они действительно нужны).
 
laggthДата: Воскресенье, 06.02.2022, 21:25 | Сообщение # 402
Группа: Пользователи
Сообщений: 88
Статус: Offline
Как сделать скриптом,чтобы поезда,идущие в одном направлении по одному или разным путям tracks,работающие на отдельных разных скриптах cleo,не наезжали бы в зад впереди идущим,а останавливались бы перед ним.?

Сообщение отредактировал laggth - Воскресенье, 06.02.2022, 21:28
 
Den_spbДата: Вторник, 15.02.2022, 13:58 | Сообщение # 403
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
Это реализовано в моем скрипте "Умные трамваи". Смысл в том, что в зоне определенного радиуса перед трамваем осуществляется поиск транспортных средств и пешеходов. Если препятствие найдено, то трамваю дается команда на торможение. Этот скрипт можно использовать не только для трамваев, но и для поездов. Тогда ИД модели трамвая в скрипте надо исправить на ИД модели локомотива.
Если поездов в игре несколько, то самый простой способ - скопировать файл скрипта несколько раз (для каждого поезда - свой файл получается).
 
laggthДата: Пятница, 08.04.2022, 15:25 | Сообщение # 404
Группа: Пользователи
Сообщений: 88
Статус: Offline
Есть ли какой нибудь опкод,дающий остановку поезда в точке(не в сфере с радиусом).01AD:   car 99@ sphere 0 near_point 252@ 253@ radius 6.0 6.0
есть,но хотелось бы без собак в клео ,тк остановок много,и собак может не хватить.
как работает код
06DA: reset_train_directions

09CF: set_train 40@ stop_at_stations 0  (будет ли останавливацца на единицах тракса  - любого дополнительного(не первого)?).

Почему,чем больше  скорость,тем шире должна быть сфера для остановки? - чтоб не проскакивал мимо.... .


Сообщение отредактировал laggth - Пятница, 08.04.2022, 15:27
 
Den_spbДата: Пятница, 08.04.2022, 16:33 | Сообщение # 405
Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
1.Проверки в скрипте медленно работают наверное потому, что у тебя много wait-ов. Каждый раз, когда выполнение скрипта наталкивается на wait, выполнение скрипта приостанавливается и игра выполняет отрисовку очередного кадра.

Если, предположим, выполняется проверка нахождения поезда в сфере, потом 5 wait-ов, потом опять проверка, за это время игра отрисует 5 кадров. Если поезд едет с большой скоростью, он за это время может проехать 10-20-30 метров и запросто проскочить сферу.

2.Вместо проверки нахождения в сфере можно использовать проверку, сколько поезд проехал метров от начала тракса.
Пройденное расстояние от начала тракса хранится в структуре локомотива или вагона по смещению 
Код
0x05A8 | float              distanceTravelled  // Расстояние, пройденное от начала маршрута в метрах
http://gtamodding.ru/wiki/%D0%90%D0%B4%D1%80%D0%B5%D1%81%D0%B0_%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_(SA)
Получаем значение следующим образом:
Код
0A97: 1@ = vehicle 0@ struct
1@ += 0x05A8
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
if and
    2@  > 1000.0
    2@  < 1100.0
then
    06DD: set_train 0@ speed 0.0
end


3. Единицы для остановок работают только в tracks.dat, в других tracks-файлах простановка единицы ничего не даст, работать не будет.

4. Про опкод 06DA: reset_train_directions ничего не знаю, не пользовался им никогда.
 
Поиск: