kenking Опубликовано 21 декабря, 2018 Жалоба Поделиться Опубликовано 21 декабря, 2018 [spoiler=пример] {$CLEO} 0000: // здесь выполняются команды один раз с момента запуска скрипта, например: if 0AA9: is_game_version_original then 0AD1: show_formatted_text_highpriority "This game version %.1f" time 7000 1.0 else 0AD1: show_formatted_text_highpriority "This game version not %.1f stop script" time 7000 1.0 0A93: end_custom_thread end while true // главный цикл начало wait 0 if Player.Defined($PLAYER_CHAR) then // начало блока, где выполняются команды, если игрок найден if Actor.Driving($PLAYER_ACTOR) then // начало блока, где выполняются команды, если игрок водит транспорт 03C0: 31@ = actor $PLAYER_ACTOR car 0441: 30@ = car 31@ model //------------------ if 0A01: model 30@ car then // начало блока, где выполняются команды, если транспорт является автомобилем 0A97: 2@ = car 31@ struct 0A8E: 6@ = 2@ + 0x438 // extra 1 0A8D: 6@ = read_memory 6@ size 1 virtual_protect 0 0A8E: 7@ = 2@ + 0x439 // extra 2 0A8D: 7@ = read_memory 7@ size 1 virtual_protect 0 03F0: enable_text_draw 1 045A: draw_text_1number 5.0 5.0 GXT 'NUMBER' number 6@ 045A: draw_text_1number 5.0 15.0 GXT 'NUMBER' number 7@ //------------------ if 0AB0: key_pressed 50 // клавиша 2 then // начало блока, где выполняются команды, если была нажата клавиша 0AB1: call_scm_func @MoveCarComponents 2 31@ 1.0 // вызываем нашу функцию wait 2000 if not Car.Wrecked(31@) then 0AB1: call_scm_func @MoveCarComponents 2 31@ -1.0 // вызываем нашу функцию с другим параметром end repeat // цикл приостанавливает дальнейшую работу скрипта до того момента пока не будет отпущена клавиша wait 0 until 8AB0: not key_pressed 50 // клавиша 2 end // конец блока, где выполняются команды, если была нажата клавиша //------------------ //------------------ if 0AB0: key_pressed 51 // клавиша 3 then // начало блока, где выполняются команды, если была нажата клавиша if not Car.Wrecked(31@) then // пример использования переменной таймера в других целях 0209: 32@ = random_int_in_ranges 2 4 // правое значение не входит в выбираемый диапазон gosub @OpenComponent // переходим на блок открытия/закрытия компонента end repeat // цикл приостанавливает дальнейшую работу скрипта до того момента пока не будет отпущена клавиша wait 0 until 8AB0: not key_pressed 51 // клавиша 3 end // конец блока, где выполняются команды, если была нажата клавиша //------------------ else // блок, где выполняются команды, если транспорт НЕ является автомобилем 0AD1: show_formatted_text_highpriority "This vehicle not car, ID vehicle %d" time 500 30@ end // конец блока, где выполняются команды, если транспорт является автомобилем //------------------ end // конец блока, где выполняются команды, если игрок водит транспорт end // конец блока, где выполняются команды, если игрок найден end // главный цикл конец, дальше переход на начало главного цикла //------------------call_scm_func :MoveCarComponents // сюда в переменную 0@ записалось авто, в 1@ значение на которое будет изменяться положение компонентов авто 28@ = 0x64C for 30@ = 1 to 24 // начало цикла for без wait, цикл без wait можно использовать только для небольшого количества итераций, в функциях цикл с wait не используется 0A97: 31@ = car 0@ struct 005A: 31@ += 28@ 28@ += 0x4 0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 if 31@ > 0 then // начало блока, где выполняются команды, если компонент есть 31@ += 64 0A8D: 2@ = read_memory 31@ size 4 virtual_protect 0 005B: 2@ += 1@ // (float) изменяем координату X 31@ += 4 0A8D: 3@ = read_memory 31@ size 4 virtual_protect 0 005B: 3@ += 1@ // (float) изменяем координату Y 31@ += 4 0A8D: 4@ = read_memory 31@ size 4 virtual_protect 0 // координату Z не изменяем 31@ -= 56 0AA6: call_method 0x59AF80 struct 31@ num_params 3 pop 0 4@ 3@ 2@ end // конец блока, где выполняются команды, если компонент есть end // конец цикла for без wait 0AB2: ret 0 //------------------ //------------------gosub :OpenComponent 0085: 27@ = 32@ // (int) переписываем значение из переменной 32@ в другую переменную, поскольку после wait там будет другое значение 095F: get_car 31@ door 27@ angle_to 25@ if 25@ == 0.0 then // начало блока, где выполняется открытие/закрытие компонента, здесь открытие в цикле for for 12@ = 0.0 TO 1.0 step 0.1 if not Car.Wrecked(31@) jf break 08A6: set_car 31@ door 27@ rotation_to 12@ wait 0 end else // здесь закрытие в цикле while 12@ = 0.9 while 0021: 12@ > 0.0 if not Car.Wrecked(31@) jf break 08A6: set_car 31@ door 27@ rotation_to 12@ wait 0 12@ -= 0.1 end if not Car.Wrecked(31@) then 08A6: set_car 31@ door 27@ rotation_to 0.0 end end // конец блока, где выполняется открытие/закрытие компонента return // возвращаемся на строчку после места вызова gosub //------------------ При декомпиляции и отказе открыть исходный код, получишь знакомую картину[spoiler=меточный стиль] // This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013 {$CLEO .cs} //-------------MAIN--------------- 0000: NOP if 0AA9: is_game_version_original jf @Noname_57 0AD1: show_formatted_text_highpriority "This game version %.1f" time 7000 1.0 jump @Noname_110 :Noname_57 0AD1: show_formatted_text_highpriority "This game version not %.1f stop script" time 7000 1.0 0A93: end_custom_thread :Noname_110 wait 0 if Player.Defined($PLAYER_CHAR) jf @Noname_486 if Actor.Driving($PLAYER_ACTOR) jf @Noname_486 31@ = Actor.CurrentCar($PLAYER_ACTOR) 30@ = Car.Model(31@) if 0A01: model 30@ car jf @Noname_440 0A97: 2@ = car 31@ struct 0A8E: 6@ = 2@ + 1080 // int 0A8D: 6@ = read_memory 6@ size 1 virtual_protect 0 0A8E: 7@ = 2@ + 1081 // int 0A8D: 7@ = read_memory 7@ size 1 virtual_protect 0 03F0: enable_text_draw 1 045A: draw_text_1number 5.0 5.0 GXT 'NUMBER' number 6@ // ~1~ 045A: draw_text_1number 5.0 15.0 GXT 'NUMBER' number 7@ // ~1~ if 0AB0: key_pressed 50 jf @Noname_371 0AB1: call_scm_func @Noname_493 2 31@ 1.0 wait 2000 if not Car.Wrecked(31@) jf @Noname_356 0AB1: call_scm_func @Noname_493 2 31@ -1.0 :Noname_356 wait 0 8AB0: not key_pressed 50 jf @Noname_356 :Noname_371 if 0AB0: key_pressed 51 jf @Noname_433 if not Car.Wrecked(31@) jf @Noname_418 0209: 32@ = random_int_in_ranges 2 4 gosub @Noname_691 :Noname_418 wait 0 8AB0: not key_pressed 51 jf @Noname_418 :Noname_433 jump @Noname_486 :Noname_440 0AD1: show_formatted_text_highpriority "This vehicle not car, ID vehicle %d" time 500 30@ :Noname_486 jump @Noname_110 :Noname_493 28@ = 1612 30@ = 1 :Noname_508 0A97: 31@ = car 0@ struct 005A: 31@ += 28@ // (int) 28@ += 4 0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 if 31@ > 0 jf @Noname_665 31@ += 64 0A8D: 2@ = read_memory 31@ size 4 virtual_protect 0 005B: 2@ += 1@ // (float) 31@ += 4 0A8D: 3@ = read_memory 31@ size 4 virtual_protect 0 005B: 3@ += 1@ // (float) 31@ += 4 0A8D: 4@ = read_memory 31@ size 4 virtual_protect 0 31@ -= 56 0AA6: call_method 5877632 struct 31@ num_params 3 pop 0 4@ 3@ 2@ :Noname_665 30@ += 1 30@ > 24 jf @Noname_508 0AB2: ret 0 :Noname_691 0085: 27@ = 32@ // (int) 095F: get_car 31@ door 27@ angle_to 25@ if 25@ == 0.0 jf @Noname_806 12@ = 0.0 :Noname_741 if not Car.Wrecked(31@) jf @Noname_799 08A6: set_car 31@ door 27@ rotation_to 12@ wait 0 12@ += 0.1 12@ > 1.0 jf @Noname_741 :Noname_799 jump @Noname_910 :Noname_806 12@ = 0.9 :Noname_816 12@ > 0.0 jf @Noname_881 if not Car.Wrecked(31@) jf @Noname_881 08A6: set_car 31@ door 27@ rotation_to 12@ wait 0 12@ -= 0.1 jump @Noname_816 :Noname_881 if not Car.Wrecked(31@) jf @Noname_910 08A6: set_car 31@ door 27@ rotation_to 0.0 :Noname_910 return 2 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 23 декабря, 2018 Жалоба Поделиться Опубликовано 23 декабря, 2018 svyatogor2007, Доброго времени суток. Потестил скрипт с jf вместо jump. В итоге получил такую же картинку. Пока скрипт запущен в первый раз все работает. Сохраняем ее, загружаем это же сохранение и все, встали.) Маркеры больше не пропадают после взятия пикапа. Так что это не основная проблема. Будем думать дальше. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
svyatogor2007 Опубликовано 24 декабря, 2018 Жалоба Поделиться Опубликовано 24 декабря, 2018 svyatogor2007, Доброго времени суток. Потестил скрипт с jf вместо jump. В итоге получил такую же картинку. Пока скрипт запущен в первый раз все работает. Сохраняем ее, загружаем это же сохранение и все, встали.) Маркеры больше не пропадают после взятия пикапа. Так что это не основная проблема. Будем думать дальше.Попробуй удалить Cleo_Saves, ибо у меня после сохранения нормально все работало. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 25 декабря, 2018 Жалоба Поделиться Опубликовано 25 декабря, 2018 (изменено) Попробуй удалить Cleo_Saves, ибо у меня после сохранения нормально все работало.После сохранения работает. Но ты пробовал сохраниться, выйти из игры и загрузить то сохранение (хотя можно и без выхода), вот тогда уже начинается шляпа. Нашел проверку на существования маркера (075C: marker 0@ enabled), чтобы при загрузке сохранения уже с нарисованными иконками скрипт не рисовал их по новой. Но в итоге маркер совсем перестал рисоваться Кто подскажет, что не так в этот раз. По сути запускаем поток, идет проверка на существования маркера: если есть тогда идем на вторую метку, где стоит условие, при котором маркер будет удалятся; если маркера нет, то уже идет проверка существования пикапа, и если пикап существует - создается маркер в указанных координатах и далее идем до конца скрипта. [spoiler=Код]{$CLEO .cs}0A95: enable_thread_savingthread 'Oysters 1-32' :OYSTER1wait 0if075C: marker 11@ enabledthenjump @OYSTER2elsejf @OYSTER1end if048C: is_any_pickup_at_coords 155.0 -1975.0 -8.0then11@ = Marker.CreateIconWithoutSphere(64, 155.0, -1975.0, -8.0)end :OYSTER2wait 0ifpickup.Picked_up($2992)thenMarker.Disable(11@)11@ = 0end if11@ == 0thenend_threadend Изменено 25 декабря, 2018 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Машинист ЭР2 Опубликовано 17 января, 2019 Жалоба Поделиться Опубликовано 17 января, 2019 После установки скрипта от Кенкинга "Дизель v. 2.0" (выхлоп происходит только, когда авто трогается с места, ставил эту версию) появляется огненный шар и потом дизельный выхлоп.http://thumbs2.imagebam.com/0d/fd/05/b8bacc1064173054.jpghttp://thumbs2.imagebam.com/03/ac/51/3f2a611064187284.jpgУстановлены ENB MMGE 2 (Marty McFly), Silent Patch, IMFX (DK22Pac). Как можно убрать огонь из выхлопных труб?При замене эффектов всё работает, но тогда теряется смысл установки ENB. Что скажет Кенкинг? Будет доработка или нет?Просто альтернативы скрипту нету. Цитата "Удивительно начитанный человек" (alexanderliss) "Значит, если сегодня - это вчерашнее завтра, то завтра будет вчерашним сегодня... Так? Время - странная штука." (Stray - Глава IV. Трущобы. Робот Рози) Ссылка на комментарий Поделиться на другие сайты Поделиться
Avant Опубликовано 17 января, 2019 Жалоба Поделиться Опубликовано 17 января, 2019 При замене эффектов всё работает, но тогда теряется смысл установки ENB. Что скажет Кенкинг? Будет доработка или нет?Просто альтернативы скрипту нету.Кидал выше офигенную альтернативу с возможностью настройки густоты и установки любого цвета для любого ID, где же нету? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Synthwave85 Опубликовано 23 января, 2019 Жалоба Поделиться Опубликовано 23 января, 2019 (изменено) Доработал скрипт "новый алгоритм движения поездов" от Den_Spb. Что сделано: 1. На станции Йеллоубелл и участке от Йеллоубелл до Линден теперь может появляться как внутренний, так и внешний поезд (раньше внешний поезд там вообще никогда не появлялся). Причем когда игрок на самой станции, могут появляться оба поезда одновременно (когда между станциями - только по очереди). 2. Светофор внутреннего пути на станции Йеллоубелл, светофоры возле туннеля и светофор внешнего пути на станции Линден теперь включаются красным также при появлении встречных поездов и обратно зеленым (или желтым) при их проезде мимо или заезде на 2-путный участок. Впрочем, на станции Линден на практике почти не актуально, но пусть будет. Если ехать на поезде машинистом или пассажиром и проезжать мимо тех светофоров, тоже все правильно будут светить. 3. Поезда появляются и исчезают за 700 метров, 600 при хорошей дальности прорисовки было маловато. И ездят со скоростью 120 км/ч, тормозят на станциях в правильном месте (глюк был замечен только 1 раз, когда Карл был в таком месте, что поезд появился перед самой станцией и остановился чуть дальше, чем надо было). 4. Когда внутренний поезд собирается отправляться с Йеллоубелл, а встречный поезд уже появился и горит красный светофор, внутренний поезд будет его ждать и поедет уже на зеленый светофор, когда внешний уедет на 2-путку. На станции Линден для встречного поезда аналогично, но на практике обычно ждать не приходится. Минусы: 1. Если в случае, описанном в пункте 4, угнать поезд и поехать на красный, поезда проедут друг через друга, но такое было и в оригинальном скрипте, если поехать на однопутку задним ходом. Как в таких случаях вызывать сход обоих поездов с рельсов, я не знаю. 2. При миссии машиниста на внутреннем кольце, если придется ждать на Йеллоубелл зеленого светофора, не знаю, реально ли будет потом успеть по расписанию. Но ждать там поезду обычно долго не приходится. В остальном, глюков больше не замечал, тестировал практически по всей территории возле однопутных участков.Делал главным образом для себя, так что не знаю как быть с авторскими правами.Навыки программирования у меня никакие, но очень хотелось добавить еще больше реализма по ЖД [spoiler=код]////-----------------------------ГТА СА: НОВЫЙ АЛГОРИТМ ДВИЖЕНИЯ ПОЕЗДОВ, ВЕРСИЯ 5--------(by Den_spb)-------------------------------------------//--- доработка Andrew_synthwave85 ---//// -----------------------------------------------------------------------------------------------------------------------Назначение переменных{0@ - одноразовое дробное число (значение используется в пределах одной операции или последовательной группы операций)1@ - одноразовое дробное число2@ - одноразовое дробное число3@ - одноразовое дробное число4@ - одноразовое дробное число5@ - указатель на маркер внутреннего поезда6@ - одноразовое дробное число7@ - одноразовое целое число8@ - указатель на внутренний поезд9@ - указатель на внешний поезд10@ - указатель на маркер внешнего поезда11@ - минимальное расстояние внутреннего поезда до точки остановки, при котором может включиться торможение12@ - максимальное расстояние внутреннего поезда до точки остановки, при котором может включиться торможение13@ - минимальное расстояние внешнего поезда до точки остановки, при котором может включиться торможение14@ - максимальное расстояние внешнего поезда до точки остановки, при котором может включиться торможение15@ - запись значения производится из адреса памяти при проверке траффика поездов (вкл или откл)16@ - значение, с которым сравнивается значение таймера событий внутреннего поезда (ожидание перед созданием поезда, стоянка на станции)17@ - значение, с которым сравнивается значение таймера событий внешнего поезда (ожидание перед созданием поезда, стоянка на станции)18@ - статус внутреннего поезда.Значения статусов0 - поезд не существует. Время, по истечении которого может быть создан поезд, не отсчитывается1 - поезд не существует. Время, по истечении которого может быть создан поезд, отсчитывается или уже истекло2 - поезд существует3 - поезд тормозит на станции4 - поезд стоит на станции19@ - статус внешнего поезда. Значения те же.20@ - одноразовое целое число21@ - одноразовое целое число22@ - одноразовое целое число23@ - одноразовое целое число24@ - одноразовое целое число25@ - одноразовое целое число26@ - указатель на внутренний мачтовый светофор27@ - указатель на внешний мачтовый светофор28@ - одноразовое дробное число29@ - одноразовое дробное число30@ - флаг автоведения внутреннего поезда.Значения0 - в кабине поезда CJ либо поезд не существует - автоведение отключено1 - в кабине поезда бот - автоведение включено31@ - флаг автоведения внешнего поезда. Значения те же.32@ - таймер 1. Используется в событиях внутреннего поезда33@ - таймер 2. Используется в событиях внешнего поезда34@35@36@37@}//------------------------------------------------------------------------------------------------------------------------------Начало скрипта{$CLEO .cs}0A95: enable_thread_saving // чтобы объекты (светофоры), созданные скриптом, не оставались на карте после сохранения игрыvar // идентификация типа переменных20@ : Integer21@ : Integer22@ : Integer23@ : Integer24@ : Integer25@ : Integerend16@ = 017@ = 030@ = 031@ = 032@ = 033@ = 0while true //------------------------------------------------------------------------------------------------------------Главный цикл скриптаwait 0if //--------------------------------------------------------------------------Операции для внутреннего поезда (поезд пока не существует)856E: not car 8@ definedthenif18@ <> 1then18@ = 10209: 16@ = random_int_in_ranges 31 61 //15 21 // min и max время в секундах, по истечении которого может быть создан внутренний поезд16@ *= 100032@ = 0else0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0 // читаем адрес памяти, чтобы узнать, вкл или откл траффик поездовif and15@ == 0 // траффик включен, следовательно ж д миссии не запущены. Можем продолжать001D: 32@ > 16@ // (int)thenactor.StorePos($PLAYER_ACTOR,3@,4@,6@)if056E: car 9@ definedthencar.StorePos(9@,0@,1@,2@)else0@ = 0.01@ = 0.0endif or0@ < 2520.01@ < 1330.0 // если внешний поезд стоит на станции Линден или только отправился с нее, внутренний не будет созданthenif or3@ < 1500.04@ < 1360.0856E: not car 9@ defined // если игрок в однопутной зоне и существует внешний поезд, то внутренний поезд создан не будетthen// вся плоскость игровой карты делится на части. Минимум - на 2, в этом скрипте - на 4 (карта делится осями Y и X)// в каждой части карты должны проходить ж д пути, иначе деление нецелесообразноif3@ >= 0.0 // игрок в правой половине картыthenif4@ >= 0.0then21@ = 1 // номер квадрантаelse21@ = 2endelseif4@ >= 0.0then21@ = 4else21@ = 3endend// Файл tracks2.dat делится на наборы в соответствии с делением плоскости карты. После того, как определено,// в какой части карты находится игрок, выбирается соответствующий набор точек.// Далее производится последовательная проверка расстояния игрока до точек набора.// Проверка осуществляется от дальних точек к ближним, по ходу движения поезда.// Расстояние между точками около 300 м (менее 300 м). Первая точка набора берётся не у границы части карты (квадранта),// а на 600 м раньше - на случай, если игрок находится вблизи границы квадрантов (частей карты).// Проверяются два набора точек - тот, который соответствует части карты и следующий, по ходу движения поезда.// Если расстояние между игроком и точкой меньше 600 м, то осуществляется переход на код создания поезда.// Иначе, после проверки двух наборов выполнение данной части кода прекращается.// Понятно, что поезд может быть создан на расстоянии 300 - 600 м от игрока.// Для внешнего поезда эта часть кода аналогична, только наборы будут проверяться в обратном порядке,// тоже по ходу движения поезда. Файл маршрута для внешнего поезда - tracks4.datif21@ == 1thenjump @kvad_1t1endif21@ == 2thenjump @kvad_2t1endif21@ == 3thenjump @kvad_3t1endif21@ == 4thenjump @kvad_4t1end:kvad_1t1 //------------------------------------------------------------------------------Внутренний поезд. Набор точек 10@ = -598.09 // данная часть кода была написана pas-программой автоматически1@ = 1188.220509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@ // расстояние между игроком и точкой2@ > 700.0 // если расстояние меньше 700 м, то перейти на код создания поездаjf @create1 // метка, где начинается код создания поезда0@ = -325.941@ = 1248.880509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -35.791@ = 1293.150509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 241.371@ = 1229.340509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 536.141@ = 1247.170509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 739.121@ = 1461.330509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 742.991@ = 1697.590509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 742.511@ = 1787.340509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 740.751@ = 2026.490509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 726.841@ = 2321.070509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 801.161@ = 2609.480509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1072.241@ = 2722.620509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1236.121@ = 2632.270509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1481.991@ = 2632.340509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1774.871@ = 2675.030509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2021.921@ = 2694.180509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2229.691@ = 2690.170509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2519.591@ = 2639.430509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2552.811@ = 2344.890509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2735.051@ = 2111.730509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2781.061@ = 1816.160509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2856.251@ = 1531.030509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2864.771@ = 1239.220509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2764.761@ = 983.250509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2764.791@ = 743.270509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create1if21@ == 4 // если игрок находится в 4 квадранте, то заканчиваем проверкуthenjump @_5 // метка, расположенная после кода создания поездаend:kvad_2t1 //---------------------------------------------------------------------------Внутренний поезд. Набор точек 20@ = 2765.281@ = 528.720509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2781.321@ = 239.500509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2827.611@ = 36.330509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2763.101@ = -250.250509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2467.571@ = -275.000509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2192.47 // point 11@ = -357.990509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2122.11 // point 21@ = -647.610509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2284.981@ = -897.820509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2284.991@ = -1186.050509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2273.191@ = -1484.060509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 2198.651@ = -1760.340509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1989.681@ = -1953.750509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1696.981@ = -1953.730509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1398.431@ = -1948.140509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1197.641@ = -1779.760509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 1002.701@ = -1556.240509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 815.001@ = -1366.510509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 778.251@ = -1333.630509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create1if21@ == 1thenjump @_5end:kvad_3t1 //-------------------------------------------------------------------------Внутренний поезд. Набор точек 30@ = 589.521@ = -1187.750509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 335.441@ = -1061.400509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = 49.591@ = -1018.000509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -237.891@ = -1069.900509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -470.711@ = -1253.470509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -742.621@ = -1133.880509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -847.021@ = -1404.640509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1113.111@ = -1514.300509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1392.211@ = -1509.240509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1676.361@ = -1465.420509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1876.641@ = -1258.100509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1976.751@ = -995.470509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1978.811@ = -717.470509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create1if21@ == 2thenjump @_5end:kvad_4t1 //--------------------------------------------------------------------------Внутренний поезд. Набор точек 40@ = -1980.121@ = -592.060509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1960.091@ = -296.040509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1944.421@ = -11.950509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1942.721@ = 171.880509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1756.161@ = 399.260509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1523.121@ = 568.500509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1290.211@ = 737.810509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -1082.961@ = 888.280509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -992.441@ = 954.080509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create10@ = -760.641@ = 1122.390509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create1if21@ == 3thenjump @_5endjump @kvad_1t1:create1 //---------------------------------------------------------------------------------Создание внутреннего поезда0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0if15@ == 0 // траффик поездов включен (ж д миссии не запущены)thenwhile truewait 00209: 21@ = random_int_in_ranges 0 16 // выбираем тип поезда (1-15)if and21@ <> 821@ <> 921@ <> 1021@ <> 1121@ <> 12 // если тип поезда не трамвайный (8, 9, 14)21@ <> 13 // и не зарезервированный для миссий (10 - 13), то выбор сделан21@ <> 14 // 15-й тип оставил, там локомотив без вагоновthenbreak // выход из циклаendend7@ = -382234 // начало блока адресов памяти, в которых записаны ИД модели вагонов всех поездов21@ *= 16 // номер типа * максимальное количество вагонов в типе005A: 7@ += 21@ // (int) - находим начало выбранного типа поезда0016: 21@ /= 1611@ = 6.643 // зависимость тормозного пути от кол-ва вагонов на скорости 60 км/ч определяется формулой// Тп = 6,643 + 6,357 * количество вагонов; на скорости 120 км/ч цифру 6,357 умножаем на 4while &0(7@,1i) <> 0 // пока ИД вагона ненулевойModel.Load(&0(7@,1i)) // загружаем необходимые модели11@ += 25.428 // и одновременно считаем минимальный тормозной путь7@ += 1end0087: 12@ = 11@ // (float)12@ += 80.0// при скорости 60 км/ч разница между мин. и макс. тормозными путями 20 м; при скорости 120 км/ч - 80 м7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 16while &0(7@,1i) <> 0 // последовательно проверяем, загружены ли моделиrepeatwait 0until Model.Available(&0(7@,1i))7@ += 1end7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 167@ += 14 // адрес модели 14 вагона выбранного типаif and // можно сделать поезд 19 вагонным, но только если выполнены условия&0(7@,1i) <> 0 // в поезде будет существовать 14 вагон21@ < 7 // тип поезда 0-6 (остальные типы - это трамваи и поезда, используемые в миссиях)then22@ = &0(7@,1i) // ИД 14 вагона7@ += 1&0(7@,1i) = 22@ // ИД вагона 15 (0) заменена на 147@ += 123@ = &0(7@,1i) // сохраняем в памяти ИД вагона 16 (первый вагон следующего за выбранным типа)&0(7@,1i) = 22@ // назначаем ИД 16 вагона такой же, как у 147@ += 120@ = &0(7@,1i) // ИД 17 вагона&0(7@,1i) = 22@7@ += 124@ = &0(7@,1i) // ИД 18 вагона&0(7@,1i) = 22@7@ += 125@ = &0(7@,1i) // ИД 19 вагона (последнего)&0(7@,1i) = 0end// в файле маршрутов стандартной игры есть 2 особые точки// внутренний путь в тех местах располагается выше, чем соседний путь.// Поэтому поезд создается на пути противоположного направления.// Чтобы этого избежать, задаем высоту создания поезда для этих точек отдельно.if and0@ == 2192.47 // особая точка 11@ == -357.99then06D8: 8@ = create_train_at 0@ 1@ 60.0 type 21@ direction 1elseif and0@ == 2122.11 // особая точка 21@ == -647.61then06D8: 8@ = create_train_at 0@ 1@ 70.0 type 21@ direction 1else // выбрана какая-то другая точка06D8: 8@ = create_train_at 0@ 1@ 0.0 type 21@ direction 1end // высоту для всех остальных точек можно брать одинаковую - 0.0end18@ = 230@ = 106DC: set_train 8@ acc 33.33 // назначаемая поезду скорость -06DD: set_train 8@ speed 33.33 // 120 км/ч{if$ONMISSION == 0 // во время миссии маркер будет мешатьthen5@ = Marker.CreateAboveCar(8@)Marker.SetColor(5@, 0x807000FF) // 0018B: set_marker 5@ radar_mode 2end}7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 167@ += 14if and // если были прицеплены дополнительные вагоны, то восстанавливаем значения ИД&0(7@,1i) <> 021@ < 7then7@ += 1 // 15&0(7@,1i) = 07@ += 1 // 16&0(7@,1i) = 23@7@ += 1 // 17&0(7@,1i) = 20@7@ += 1 // 18&0(7@,1i) = 24@7@ += 1 // 19&0(7@,1i) = 25@end7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 16while &0(7@,1i) <> 0 // удаляем модели вагонов из памятиModel.Destroy(&0(7@,1i))7@ += 1endendendendendendend:_5if //---------------------------------------------------------------------------Операции для внешнего поезда (поезд пока не существует)856E: not car 9@ definedthenif19@ <> 1then19@ = 10209: 17@ = random_int_in_ranges 31 61 //15 21 // min и max время в секундах, по истечении которого может быть создан внешний поезд17@ *= 100033@ = 0else0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0 // читаем адрес памяти, чтобы узнать, вкл или откл траффик поездовif and15@ == 0 // траффик включен, следовательно ж д миссии не запущены. Можем продолжать001D: 33@ > 17@ // (int)thenactor.StorePos($PLAYER_ACTOR,3@,4@,6@)if056E: car 8@ definedthencar.StorePos(8@,0@,1@,2@)else0@ = 0.01@ = 0.0endif or0@ < 1470.0 // если внутренний поезд стоит на станции Йеллоубелл или только отправился с нее, внешний поезд не будет создан1@ < 2620.0thenif or3@ < 1500.04@ < 1360.0856E: not car 8@ defined // если игрок в однопутной зоне и существует внутренний поезд, то внешний поезд создан не будетthenif3@ >= 0.0 // игрок в правой половине картыthenif4@ >= 0.0then21@ = 1 // номер квадрантаelse21@ = 2endelseif4@ >= 0.0then21@ = 4else21@ = 3endendif21@ == 1thenjump @kvad_1t4endif21@ == 2thenjump @kvad_2t4endif21@ == 3thenjump @kvad_3t4endif21@ == 4thenjump @kvad_4t4end:kvad_4t4 //------------------------------------------------------------------------------Внешний поезд. Набор точек 40@ = 515.981@ = 1240.230509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 226.841@ = 1238.510509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -53.401@ = 1296.120509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -347.381@ = 1247.210509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -631.831@ = 1185.070509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -880.271@ = 1040.720509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1030.441@ = 931.370509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1240.991@ = 778.430509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1342.191@ = 704.870509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create4if21@ == 1thenjump @_6end:kvad_3t4 //----------------------------------------------------------------------------Внешний поезд. Набор точек 30@ = -1498.991@ = 590.900509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1601.061@ = 516.830509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1837.421@ = 347.580509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1948.421@ = 100.000509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1950.421@ = -190.280509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1982.391@ = -488.080509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1982.551@ = -768.100509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1971.891@ = -1059.670509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1846.911@ = -1309.370509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1629.081@ = -1486.730509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1347.521@ = -1513.870509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -1053.531@ = -1508.420509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -835.571@ = -1370.310509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -718.411@ = -1128.250509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create4if21@ == 4thenjump @_6end:kvad_2t4 //------------------------------------------------------------------------------Внешний поезд. Набор точек 20@ = -596.651@ = -1164.910509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -349.441@ = -1223.160509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = -137.481@ = -1027.470509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 151.781@ = -1026.410509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 438.871@ = -1107.080509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 690.561@ = -1266.070509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 910.871@ = -1464.630509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1097.411@ = -1669.800509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1293.721@ = -1894.030509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1573.671@ = -1957.680509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1857.491@ = -1957.930509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2152.761@ = -1957.850509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2205.951@ = -1686.160509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2288.741@ = -1407.020509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2288.951@ = -1110.090509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2281.211@ = -816.010509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2078.881@ = -607.040509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create4if21@ == 3thenjump @_6end:kvad_1t4 //-------------------------------------------------------------------------------Внешний поезд. Набор точек 10@ = 2062.911@ = -593.550509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2087.841@ = -365.310509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2367.591@ = -284.310509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2661.261@ = -298.920509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2832.241@ = -92.440509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2805.301@ = 182.180509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2769.171@ = 442.680509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2768.741@ = 701.560509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2768.721@ = 983.270509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2868.741@ = 1239.210509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2860.001@ = 1532.270509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2785.011@ = 1782.760509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2765.171@ = 2066.970509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2563.531@ = 2264.640509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2551.771@ = 2560.030509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2342.071@ = 2694.160509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 2092.401@ = 2694.220509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1797.401@ = 2682.390509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1510.131@ = 2636.250509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 1212.031@ = 2637.340509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 957.591@ = 2762.660509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 768.571@ = 2550.890509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 725.391@ = 2288.510509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 736.951@ = 2009.090509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 738.761@ = 1746.690509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 735.121@ = 1461.950509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create40@ = 616.451@ = 1297.930509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@2@ > 700.0jf @create4if21@ == 2thenjump @_6endjump @kvad_4t4:create4 //-------------------------------------------------------------------------------------создание внешнего поезда0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0if15@ == 0 // траффик поездов включен (ж д миссии не запущены)thenwhile truewait 00209: 21@ = random_int_in_ranges 0 16 // выбираем тип поезда (1-15)if and21@ <> 821@ <> 921@ <> 1021@ <> 1121@ <> 12 // если тип поезда не трамвайный (8, 9, 14)21@ <> 13 // и не зарезервированный для миссий (10 - 13), то выбор сделан21@ <> 14 // 15-й тип оставил, там локомотив без вагоновthenbreak // выход из циклаendend7@ = -382234 // начало блока адресов памяти, в которых записаны ИД модели вагонов всех поездов21@ *= 16 // номер типа * максимальное количество вагонов в типе005A: 7@ += 21@ // (int) - находим начало выбранного типа поезда0016: 21@ /= 1613@ = 6.643 // зависимость тормозного пути от кол-ва вагонов на скорости 60 км/ч определяется формулой// Тп = 6,643 + 6,357 * количество вагонов; на скорости 120 км/ч цифру 6,357 умножаем на 4while &0(7@,1i) <> 0 // пока ИД вагона ненулевойModel.Load(&0(7@,1i)) // загружаем необходимые модели13@ += 25.428 // и одновременно считаем минимальный тормозной путь7@ += 1end0087: 14@ = 13@ // (float)14@ += 80.0// при скорости 60 км/ч разница между мин. и макс. тормозными путями 20 м; при скорости 120 км/ч - 80 м7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 16while &0(7@,1i) <> 0 // последовательно проверяем, загружены ли моделиrepeatwait 0until Model.Available(&0(7@,1i))7@ += 1end7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 167@ += 14 // адрес модели 14 вагона выбранного типаif and // можно сделать поезд 19 вагонным, но только если выполнены условия&0(7@,1i) <> 0 // в поезде будет существовать 14 вагон21@ < 7 // тип поезда 0-6 (остальные типы - это трамваи и поезда, используемые в миссиях)then22@ = &0(7@,1i) // ИД 14 вагона7@ += 1&0(7@,1i) = 22@ // ИД вагона 15 (0) заменена на 147@ += 123@ = &0(7@,1i) // сохраняем в памяти ИД вагона 16 (первый вагон следующего за выбранным типа)&0(7@,1i) = 22@ // назначаем ИД 16 вагона такой же, как у 147@ += 120@ = &0(7@,1i) // ИД 17 вагона&0(7@,1i) = 22@7@ += 124@ = &0(7@,1i) // ИД 18 вагона&0(7@,1i) = 22@7@ += 125@ = &0(7@,1i) // ИД 19 вагона (последнего)&0(7@,1i) = 0endif and0@ > 1610.0 // если выбрана точка на однопутке возле станции Yellowbell0@ < 2170.01@ > 2630.01@ < 2699.0then // внеш.поезд должен создаваться только на 2-путке, иначе поедет по внутр.пути06D8: 9@ = create_train_at 2173.89 2694.16 9.82 type 21@ direction 0elseif and0@ > 2540.0 // если выбрана точка на однопутке в туннеле возле депо0@ < 2785.01@ > 1910.01@ < 2470.0then // внеш.поезд должен создаваться только на 2-путке, иначе поедет по внутр.пути06D8: 9@ = create_train_at 2785.01 1901.28 5.46 type 21@ direction 0else // выбрана какая-то другая точка06D8: 9@ = create_train_at 0@ 1@ 0.0 type 21@ direction 0end // высоту для всех остальных точек можно брать одинаковую - 0.0end19@ = 231@ = 106DC: set_train 9@ acc 33.33 // назначаемая поезду скорость -06DD: set_train 9@ speed 33.33 // 120 км/ч{if$ONMISSION == 0 // во время миссии маркер будет мешатьthen10@ = Marker.CreateAboveCar(9@)Marker.SetColor(10@, 0x008080FF) // 1018B: set_marker 10@ radar_mode 2end}7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 167@ += 14if and // если были прицеплены дополнительные вагоны, то восстанавливаем значения ИД&0(7@,1i) <> 021@ < 7then7@ += 1 // 15&0(7@,1i) = 07@ += 1 // 16&0(7@,1i) = 23@7@ += 1 // 17&0(7@,1i) = 20@7@ += 1 // 18&0(7@,1i) = 24@7@ += 1 // 19&0(7@,1i) = 25@end7@ = -38223421@ *= 16005A: 7@ += 21@ // (int)0016: 21@ /= 16while &0(7@,1i) <> 0 // удаляем модели вагонов из памятиModel.Destroy(&0(7@,1i))7@ += 1endendendendendendend:_6 // --------------------------------------------------------------------------------------------------Операции с мачтовыми светофорами// вся трасса, вдоль котой расставляются светофоры, делится на определённое число блок-участков.// Пары мачтовых светофоров расставляются вблизи определённых точек на границах блок-участков. В данном скрипте определено 13 точек.// Нормальная длина блок-участка около 1000 м, минимальная рекомендуемая 600 м (т к в любой момент времени существует только 1 пара светофоров)// Начинаем с определения ближайшей к игроку точки, рядом с которой будет установлена пара светофоров// Для этого вычисляем расстояние между игроком и каждой точкой, выбираем наименьшее значение00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@3@ = 1431.0647 // X точки 14@ = 2634.4133 // Y точки 10509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // вычисляем расстояние20@ = 1 // записываем порядковый номер точки3@ = 2550.8633 // берем координаты следующей точки4@ = 2498.47360509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // определяем дистанциюif0025: 2@ > 6@ // (float) // если расстояние игрока до 2 точки меньше, чем до первойthen0087: 2@ = 6@ // (float) // то сохраняем меньшее значение20@ = 2 // и номер точкиend3@ = 2866.91674@ = 1287.74210509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 3end3@ = 2791.60744@ = 218.31580509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 4end3@ = 2284.88794@ = -331.95850509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 5end3@ = 2287.05444@ = -1051.71720509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 6end3@ = 1919.1044@ = -1955.92930509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 7end3@ = -21.63514@ = -1020.18920509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 8end3@ = -1260.71564@ = -1515.53420509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 9end3@ = -1946.12194@ = 134.24690509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 10end3@ = -915.01074@ = 1012.61420509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 11end3@ = 156.33034@ = 1265.42320509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 12end3@ = 739.13874@ = 1994.13340509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if0025: 2@ > 6@ // (float)then0087: 2@ = 6@ // (float)20@ = 13end// После выполнения данной операции, стал известен номер ближайшей к игроку точки// Теперь, в соответствии с номером точки, вычисляются координаты установки светофоров и углы их поворота// Также определяются цвета (модели светофоров)if20@ == 1 // Если номер ближайшей к игроку точки - 1, тоthenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,3@,4@,6@)else3@ = 0.04@ = 0.0endif or0@ > 1483.521// train position - позиция поезда относительно светофора (условие назначения красного сигнала)// Предположим, поезд подъезжает к светофору по направлению запад-восток// Тогда, если X координата поезда больше X координаты светофора, значит, поезд уже проехал светофор// Условие выполнено и будет назначен красный сигнал3@ > 1430.0 // чтобы светофор был красным при появлении встречного внеш.поезда с однопуткиthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,3@,4@,6@)else3@ = 0.04@ = 0.0endif32@ < 30000 // если внутр.поезд не существует и с момента исчезновения последнего поезда прошло менее 30000 мс (30 сек)// то будет назначен желтый сигналthenif3@ < 1430.0 // точка, на которой встречный внеш.поезд уедет на 2-путку на станции Йеллоубеллthen21@ = 18631 // set traffic light color to yellowelse21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendelseif3@ < 1430.0 // точка, на которой встречный внеш.поезд уедет на 2-путку на станции Йеллоубеллthen21@ = 18632 // set traffic light color to greenelse21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendendendif // аналогичная операция для внешнего поезда и светофора056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ < 1380.6613// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend // Теперь назначаем координаты и углы поворота светофоров0@ = 1483.521 // x координата внутреннего светофора1@ = 2629.804 // y координата внутреннего светофора2@ = 9.8203 // z координата внутреннего светофора28@ = 90.0 // z угол внутреннего светофора. Следующие параметры - аналогичные, только для внешнего светофора.3@ = 1380.66134@ = 2638.69686@ = 9.820329@ = 270.0jump @lights_1 // назначение координат и моделей выполнено, можно выйти из данной секцииendif20@ == 2thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,3@,4@,6@)else3@ = 0.04@ = 5000.0 // такое число сугубо для технической надобностиendif or1@ < 2489.8071// train position4@ < 2630.0 // чтобы светофор был красным при появлении внеш.поезда с однопуткиthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,3@,4@,6@)else3@ = 0.04@ = 5000.0 // такое число сугубо для технической надобностиendif32@ < 30000thenif4@ > 2630.0 // место, где внеш.поезд заедет на 2-путкуthen21@ = 18631 // set traffic light color to yellowelse21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendelseif4@ > 2630.0 // место, где внеш.поезд заедет на 2-путкуthen21@ = 18632 // set traffic light color to greenelse21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,3@,4@,6@)else3@ = 5000.0 // такое число сугубо для технической надобности4@ = 0.0endif or1@ > 2507.032// train position3@ < 2250.0 // чтобы светофор был красным при появлении внутр. поезда и до прохождения им стрелки на разъезд перед туннелемthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,3@,4@,6@)else3@ = 5000.0 // такое число сугубо для технической надобности4@ = 0.0endif33@ < 30000thenif3@ > 2250.0 // место, где внутр.поезд заедет на 2-путкуthen22@ = 18631 // set traffic light color to yellowelse22@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendelseif3@ > 2250.0 // место, где внутр.поезд заедет на 2-путкуthen22@ = 18632 // set traffic light color to greenelse22@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофорendendend0@ = 2545.46441@ = 2489.80712@ = 9.820328@ = 0.03@ = 2555.96874@ = 2507.0326@ = 9.820329@ = 180.0jump @lights_1endif20@ == 3thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if1@ < 1226.0918// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,3@,4@,6@)else3@ = 0.04@ = 0.0endif or1@ > 1341.5892// train position4@ > 1870.0 // чтобы светофор был красным до прохождения внутр.поездом стрелкиthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,3@,4@,6@)else3@ = 0.04@ = 0.0endif33@ < 30000 // если поезд не существует и с момента исчезновения последнего поезда прошло менее 30000 мс (30 сек)// то будет назначен желтый сигналthenif4@ < 1870.0then22@ = 18631 // set traffic light color to yellowelse22@ = 18633 // set traffic light color to red - пока встречный внутр.поезд не заедет на 2-путку,end // светофор на станции Линден красныйelseif4@ < 1870.0then22@ = 18632 // set traffic light color to greenelse22@ = 18633 // set traffic light color to red - пока встречный внутр.поезд не заедет на 2-путку,end // светофор на станции Линден красныйendend0@ = 2861.75561@ = 1226.09182@ = 9.820328@ = 0.03@ = 2871.4284@ = 1341.58926@ = 9.820329@ = 180.0jump @lights_1endif // остальные светофоры находятся на 2-путном участке, их режим работы остается как был20@ == 4thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if1@ < 208.3398// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if1@ > 228.1062// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 2790.06761@ = 208.33982@ = 10.445628@ = 17.14333@ = 2793.09694@ = 228.10626@ = 9.383529@ = 197.625jump @lights_1endif20@ == 5thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if and0@ < 2274.7961// train position1@ > -481.795then21@ = 18633 // set traffic light color to redelseif1@ < -481.795then21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if and1@ > -481.795// train position0@ > 2294.8137then22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 2274.79611@ = -332.28222@ = 37.037228@ = 298.1713@ = 2294.81374@ = -331.22386@ = 34.774629@ = 122.6793jump @lights_1endif20@ == 6thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if1@ < -1060.2272// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if1@ > -1042.8805// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 2281.85671@ = -1060.22722@ = 25.866128@ = 0.03@ = 2292.1234@ = -1042.88056@ = 25.832529@ = 180.0jump @lights_1endif20@ == 7thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if0@ < 1910.3224// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ > 1928.194// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 1910.32241@ = -1950.74222@ = 12.554728@ = 270.03@ = 1928.1944@ = -1961.08976@ = 12.546929@ = 90.0jump @lights_1endif20@ == 8thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if0@ < -30.3923// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ > -12.0904// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = -30.39231@ = -1014.8652@ = 19.369528@ = 270.03@ = -12.09044@ = -1025.22366@ = 19.747129@ = 90.0jump @lights_1endif20@ == 9thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if0@ < -1268.5348// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ > -1252.0717// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = -1268.53481@ = -1509.68362@ = 25.487228@ = 265.2623@ = -1252.07174@ = -1521.18996@ = 27.184429@ = 86.347jump @lights_1endif20@ == 10thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if1@ > 206.1199// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if1@ < 61.969// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = -1936.45241@ = 206.11992@ = 24.551628@ = 180.03@ = -1951.30764@ = 61.9696@ = 24.710929@ = 0.0jump @lights_1endif20@ == 11thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if0@ > -905.1539// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ < -925.2382// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = -905.15391@ = 1014.11982@ = 33.578128@ = 125.42593@ = -925.23824@ = 1011.71676@ = 33.578129@ = 305.5475jump @lights_1endif20@ == 12thenif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if0@ > 163.6387// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if0@ < 150.1235// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 163.63871@ = 1257.5072@ = 21.83728@ = 69.5243@ = 150.12354@ = 1273.70736@ = 21.634129@ = 248.1258jump @lights_1endif056E: car 8@ defined // внутр.поезд существуетthencar.StorePos(8@,0@,1@,2@)if1@ > 2002.6312// train positionthen21@ = 18633 // set traffic light color to redelse21@ = 18632 // set traffic light color to greenendelseif32@ < 30000then21@ = 18631 // set traffic light color to yellowelse21@ = 18632 // set traffic light color to greenendendif056E: car 9@ defined // внеш.поезд существуетthencar.StorePos(9@,0@,1@,2@)if1@ < 1985.515// train positionthen22@ = 18633 // set traffic light color to redelse22@ = 18632 // set traffic light color to greenendelseif33@ < 30000then22@ = 18631 // set traffic light color to yellowelse22@ = 18632 // set traffic light color to greenendend0@ = 744.14911@ = 2002.63122@ = 4.754128@ = 180.03@ = 733.9244@ = 1985.5156@ = 4.335929@ = 0.0:lights_1 // ------------------------------------------------------------------------------------создание или замена мачтовых светофоров23@ = -382079 // place of traffic lights - в этой общедоступной ячейке памяти сохранен для сравнения номер точки мачтовых светофоров24@ = -382078 // colour of traffic light 1 - в этой общедоступной ячейке памяти сохранен для сравнения цвет внутр.мачт. светофораif and003B: 20@ == &0(23@,1i) // (int)003B: 21@ == &0(24@,1i) // (int)thenelse // если новый цвет или место установки внутр. светофора не соответствует старому, тоmodel.Load(21@)repeatwait 0until model.Available(21@)if03CA: object 26@ exists // если существует старый внутренний светофор,then0108: destroy_object 26@ // то сначала удаляем егоendobject.Create(26@,21@,0@,1@,2@) // создаем внутренний светофор0177: set_object 26@ Z_angle_to 28@model.Destroy(21@){ marker.CreateAboveObject(7@ 26@)if21@ == 18631thenmarker.SetColor(7@ 0xFFFF00FF)elseif21@ == 18632thenmarker.SetColor(7@ 0x00FF00FF)elsemarker.SetColor(7@ 0xFF0000FF)endend018B: set_marker 7@ radar_mode 2 }0085: &0(24@,1i) = 21@ // (int) // сохраняем цвет светофора в памяти для сравненияend24@ = -382077 // colour of traffic light 4 - цвет внешнего светофораif and003B: 20@ == &0(23@,1i) // (int) - номер точки тот же003B: 22@ == &0(24@,1i) // (int)thenelse // операции внешних светофоров аналогичны вышеприведеннымmodel.Load(22@)repeatwait 0until model.Available(22@)if03CA: object 27@ existsthen0108: destroy_object 27@endobject.Create(27@,22@,3@,4@,6@)0177: set_object 27@ Z_angle_to 29@model.Destroy(22@){ marker.CreateAboveObject(7@ 27@)if22@ == 18631thenmarker.SetColor(7@ 0xFFFF00FF)elseif22@ == 18632thenmarker.SetColor(7@ 0x00FF00FF)elsemarker.SetColor(7@ 0xFF0000FF)endend018B: set_marker 7@ radar_mode 2 }0085: &0(23@,1i) = 20@ // (int) save new parameters in memory0085: &0(24@,1i) = 22@ // (int)end // Конец мачтовых светофоров//-------------------------------------------------------------------------------------алгоритм торможения внутреннего поезда на станции056E: car 8@ defined // если поезд существуетjf @_7if and18@ == 2 // имеет подходящий статус30@ == 1 // и в кабине ботjf @_7car.StorePos(8@,3@,4@,6@) // тогда определяем позицию поезда и последовательно вычисляем расстояния до точек торможения на станциях0509: 2@ = distance_between_XY 1474.9031 2634.6375 and_XY 3@ 4@ // 1474.9031 2634.6375 - точка на какой-то станцииif and0025: 12@ > 2@ // (float) если поезд достаточно близко к точке торможения0025: 2@ > 11@ // (float) но не слишком близко (иначе не успеет затормозить на станции)3@ < 1474.9031 // смысл этого условия следующий// предположим, поезд приближается к станции по направлению юг-север. Тогда, если Y координата поезда меньше Y координаты точки остановки,// то это значит, что поезд подъезжает к станции, а не отъезжает от неё - можно включить торможениеthen06DD: set_train 8@ speed 0.0 // включаем торможение18@ = 3 // присваиваем новый статусjump @_7 // выходим из данной секцииend0509: 2@ = distance_between_XY 2866.8667 1246.4919 and_XY 3@ 4@ //if and0025: 12@ > 2@ // (float)0025: 2@ > 11@ // (float)4@ > 1246.4919then06DD: set_train 8@ speed 0.018@ = 3jump @_7end0509: 2@ = distance_between_XY 1696.873 -1955.7689 and_XY 3@ 4@if and0025: 12@ > 2@ // (float)0025: 2@ > 11@ // (float)3@ > 1696.873then06DD: set_train 8@ speed 0.018@ = 3jump @_7end0509: 2@ = distance_between_XY 784.326 -1341.736 and_XY 3@ 4@ // рынок 821.194 -1364.7119 -0.4794if and0025: 12@ > 2@ // (float)0025: 2@ > 11@ // (float)3@ > 784.326then06DD: set_train 8@ speed 0.018@ = 3jump @_7end0509: 2@ = distance_between_XY -1943.7788 183.2991 and_XY 3@ 4@if and0025: 12@ > 2@ // (float)0025: 2@ > 11@ // (float)4@ < 183.2991then06DD: set_train 8@ speed 0.018@ = 3end:_7//---------------------------------------------------------------------------------------------------алгоритм торможения внешнего поезда056E: car 9@ defined // команды те же, что и для внутреннего поездаjf @_8if and19@ == 231@ == 1jf @_8car.StorePos(9@,3@,4@,6@)0509: 2@ = distance_between_XY 1392.7462 2634.2546 and_XY 3@ 4@if and0025: 14@ > 2@ // (float)0025: 2@ > 13@ // (float)3@ > 1392.7462then06DD: set_train 9@ speed 0.019@ = 3jump @_8end0509: 2@ = distance_between_XY 2867.2666 1330.1616 and_XY 3@ 4@if and0025: 14@ > 2@ // (float)0025: 2@ > 13@ // (float)4@ < 1330.1616then06DD: set_train 9@ speed 0.019@ = 3jump @_8end0509: 2@ = distance_between_XY 1778.1157 -1955.7063 and_XY 3@ 4@if and0025: 14@ > 2@ // (float)0025: 2@ > 13@ // (float)3@ < 1778.1157then06DD: set_train 9@ speed 0.019@ = 3jump @_8end0509: 2@ = distance_between_XY 841.0762 -1393.855 and_XY 3@ 4@if and0025: 14@ > 2@ // (float)0025: 2@ > 13@ // (float)3@ < 841.0762then06DD: set_train 9@ speed 0.019@ = 3jump @_8end0509: 2@ = distance_between_XY -1946.4993 81.0843 and_XY 3@ 4@if and0025: 14@ > 2@ // (float)0025: 2@ > 13@ // (float)4@ > 81.0843then06DD: set_train 9@ speed 0.019@ = 3end:_8if //-------------------------------------------------------------------------------------Назначение времени стоянки внутреннему поезду056E: car 8@ definedthenif and18@ == 330@ == 101C1: car 8@ stoppedthen18@ = 40209: 16@ = random_int_in_ranges 15 21 // мин и макс время стоянки внутреннего поезда в секундах16@ *= 100032@ = 0endendif //-------------------------------------------------------------------------------------Назначение времени стоянки внешнему поезду056E: car 9@ definedthenif and19@ == 331@ == 101C1: car 9@ stoppedthen19@ = 40209: 17@ = random_int_in_ranges 15 21 // мин и макс время стоянки внешнего поезда в секундах17@ *= 100033@ = 0endendif //---------------------------------------------------------------------------------------Отправление внутреннего поезда со станции056E: car 8@ definedthencar.StorePos(8@,0@,1@,2@)if056E: car 9@ defined // если внешний поезд существует (актуально на станции Йеллоубелл)thencar.StorePos(9@,3@,4@,6@)else3@ = 0.04@ = 0.0endif 1@ < 2620.0 // Йеллоубелл - самая северная станция, эта координата показатель, что внутр.поезд находится тамthenif and18@ == 430@ == 1001D: 32@ > 16@ // (int) - время стоянки истеклоthen18@ = 206DD: set_train 8@ speed 33.33 // отправление со всех остальных станцийendelseif and18@ == 430@ == 1001D: 32@ > 16@ // (int) - время стоянки истекло3@ < 1425.0 // отправление с Йеллоубелл: если внеш.поезд существует и не покинул однопутку, внутр.поезд ожидаетthen // для красного светофора условия аналогичные, поезд поедет только на зеленый18@ = 206DD: set_train 8@ speed 33.33 // отправление с Йеллоубеллendendendif //-------------------------------------------------------------------------------------------Отправление внешнего поезда со станции056E: car 9@ definedthencar.StorePos(9@,0@,1@,2@)if056E: car 8@ definedthencar.StorePos(8@,3@,4@,6@)else3@ = 0.04@ = 0.0endif 0@ < 2850.0 // Линден - самая восточная станция, эта координата показатель, что внеш.поезд находится тамthenif and19@ == 431@ == 1001D: 33@ > 17@ // (int) - время стоянки истеклоthen19@ = 206DD: set_train 9@ speed 33.33 // отправление со всех остальных станцийendelseif and19@ == 431@ == 1001D: 33@ > 17@ // (int) - время стоянки истекло4@ < 1865.0 // отправление с Линден: если внутр.поезд существует и не покинул однопутку, внеш.поезд ожидаетthen // для красного светофора условия аналогичные, поезд поедет только на зеленый19@ = 206DD: set_train 9@ speed 33.33 // отправление с Линденendendendif //---------------------------------------------------------------------------------------вход игрока в локомотив внутреннего поезда056E: car 8@ definedthenif andnot actor.InCar($PLAYER_ACTOR,8@)0203: actor $PLAYER_ACTOR near_car 8@ radius 8.0 8.0 flag 0 on_foot00E1: player 0 pressed_key 15then05CB: AS_actor $PLAYER_ACTOR enter_car 8@ as_driver -1 msendendif //-------------------------------------------------------------------------------------------вход игрока в локомотив внешнего поезда056E: car 9@ definedthenif andnot actor.InCar($PLAYER_ACTOR,9@)0203: actor $PLAYER_ACTOR near_car 9@ radius 8.0 8.0 flag 0 on_foot00E1: player 0 pressed_key 15then05CB: AS_actor $PLAYER_ACTOR enter_car 9@ as_driver -1 msendendif //------------------------------------------------------------------------------------ отключение автоведения для внутреннего поезда056E: car 8@ definedthenif and30@ == 1actor.InCar($PLAYER_ACTOR,8@)09AE: actor $PLAYER_ACTOR driving_train // проверка на случай, если игрок является пассажиром поездаthen30@ = 006DD: set_train 8@ speed 0.0 // чтобы поезд не уехал сам, когда игрок выйдет из кабиныendendif //---------------------------------------------------------------------------------------- отключение автоведения для внешнего поезда056E: car 9@ definedthenif and31@ == 1actor.InCar($PLAYER_ACTOR,9@)09AE: actor $PLAYER_ACTOR driving_train // проверка на случай, если игрок является пассажиром поездаthen31@ = 006DD: set_train 9@ speed 0.0 // чтобы поезд не уехал сам, когда игрок выйдет из кабиныendendif //--------------------------------------------------------------------------------------------------------удаление внутреннего поезда056E: car 8@ definedthenactor.StorePos($PLAYER_ACTOR,0@,1@,6@)car.StorePos(8@,3@,4@,6@)0509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if2@ > 700.0 // если поезд удалился от игрока более, чем на 700 мthen07BD: destroy_train 8@ // то удаляем поезд30@ = 018@ = 0endendif //-----------------------------------------------------------------------------------------------------------удаление внешнего поезда056E: car 9@ definedthenactor.StorePos($PLAYER_ACTOR,0@,1@,6@)car.StorePos(9@,3@,4@,6@)0509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@if and0@ > 900.0 // если игрок в районе однопутных участков1@ > 2000.0thenif or0025: 3@ > 0@ // условия, при которых поезд можно считать удаляющимся от игрока и удалять, если расстояние станет больше 700 м3@ > 2430.0thenif2@ > 1400.0 // если поезд создался на большом расстоянии от игрокаthen // (подходящее место на двухпутке может быть намного дальше 700м), чтобы сразу же не исчез07BD: destroy_train 9@31@ = 019@ = 0endelseif2@ > 700.0 // если поезд удалился от игрока более, чем на 700 мthen07BD: destroy_train 9@ // то удаляем поезд31@ = 019@ = 0endendelseif2@ > 700.0 // если поезд удалился от игрока более, чем на 700 мthen07BD: destroy_train 9@ // то удаляем поезд31@ = 019@ = 0endendendif //------------------------------------------------------------------запись указателя на внутренний поезд в общедоступную ячейку памяти056E: car 8@ definedthen7@ = -3820760085: &0(7@,1i) = 8@ // (int) - записываем в память указатель на поезд для синхронизации с другими ж д скриптамиendif //---------------------------------------------------------------------запись указателя на внешний поезд в общедоступную ячейку памяти056E: car 9@ definedthen7@ = -3820750085: &0(7@,1i) = 9@ // (int) - записываем в память указатель на поезд для синхронизации с другими ж д скриптамиendend Настройки файлов tllgs.ide, gta.dat, tracks2.dat, tracks4.dat и модели светофоров можно использовать с оригинального скрипта. Изменено 23 января, 2019 пользователем Synthwave85 2 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Synthwave85 Опубликовано 23 января, 2019 Жалоба Поделиться Опубликовано 23 января, 2019 Также на основе некоторых имевшихся скриптов сделал еще два: для езды пассажиром в вагонах поезда при новом алгоритме (раньше при этом скрипте в вагоны сесть нельзя было) и для случайного выбора вагонов грузового поезда, но там довольно примитивно все. 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dimoman_93 Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 Также на основе некоторых имевшихся скриптов сделал еще два: для езды пассажиром в вагонах поезда при новом алгоритме (раньше при этом скрипте в вагоны сесть нельзя было) и для случайного выбора вагонов грузового поезда, но там довольно примитивно все.очень интересно. А пассажиры тоже выходят на станциях как в оригинальной игре? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Synthwave85 Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 А пассажиры тоже выходят на станциях как в оригинальной игре?Увы, этого сделать не удалось и не знаю как :( Еще, зайти в вагон и выйти из него можно только с правой по ходу движения стороны, слева Карл не хочет заходить и выходить :). Причем почему-то само так получилось, я специально не пытался. Но так даже лучше, зачем выходить на рельсы? [spoiler=код]// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013 {$CLEO .cs} //-------------MAIN---------------thread "PASSASHIR" :PASSASHIR_1wait 0ifPlayer.Defined($PLAYER_CHAR)else_jump @PASSASHIR_1 :PASSASHIR_20AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@wait 0if and056E: car 0@ definednot actor.InCar($PLAYER_ACTOR,0@)0AB0: key_pressed 13else_jump @PASSASHIR_2wait 0ifCar.Model(0@) == #STREAKCelse_jump @PASSASHIR_2wait 0if or0431: car 0@ passenger_seat_free 00431: car 0@ passenger_seat_free 10431: car 0@ passenger_seat_free 2else_jump @PASSASHIR_205CA: AS_actor $PLAYER_ACTOR enter_car 0@ passenger_seat -1 time 10000jump @PASSASHIR_2 Если есть дополнительные вагоны на дополнительных ID, то после строчки Car.Model(0@) == #STREAKC пишем такую же, только вместо #STREAKC номер ID дополнительного вагона, а строчкой выше после if пишем or Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Synthwave85 Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 (изменено) Удалось даже заставить Карла садиться в спальный вагон и ресторан, которые конвертировал Driver: Но поскольку там нет dummy для пассажирских мест, он просто висит в воздухе между этажами. И двери тоже открываются некрасиво. Поэтому, если Driver сам захочет, или кто-то еще сумеет (я не умею, пробовал открыть их в zmodeler и добавить дамми, но когда сохранил, то в игре получилась полная лажа - окна стали непрозрачные и цвет самого вагона темнее), было бы неплохо добавить для этих вагонов дамми пассажиров и адаптировать их двери под скрипт для степвэна. Кстати, немного изменил handling для Driver'овских локомотивов и вагонов, чтобы колеса на рельсах реалистичнее смотрелись, с оригинальными настройками немного в землю проваливались. Ну и чтобы Карл мог заходить в доп. пассажирские вагоны, у которых handling от грузовых. Впрочем, эти настройки рекомендую только со скриптом "новый алгоритм движения поездов", иначе Карл сможет по нажатию клавиши садиться в грузовую платформу. [spoiler=handling]FREIGHT 5500.0 65000.0 3.0 0.0 0.0 0.0 90 0.58 0.8 0.5 4 110.0 20.0 20.0 R D 03.17 0.40 0 30.0 1.4 0.06 0.0 0.45 0.20 0.55 0.0 0.45 0.20 5000 8 200 0 1 2STREAK 5500.0 65000.0 3.0 0.0 0.0 0.0 90 0.58 0.8 0.5 4 110.0 20.0 20.0 R D 03.17 0.40 0 30.0 1.4 0.06 0.0 0.45 0.10 0.55 0.0 0.65 0.20 5000 8 200 0 1 2FREIFLAT 5500.0 33187.9 1.0 0.0 0.0 0.0 90 0.58 0.8 0.5 4 110.0 20.0 20.0 R D 03.17 0.40 0 30.0 1.4 0.06 0.0 0.45 0.20 0.55 0.0 0.65 0.20 5000 8 200 0 1 21CSTREAK 5500.0 33187.9 1.0 0.0 0.0 0.0 90 0.58 0.8 0.5 4 110.0 20.0 20.0 R D 03.17 0.40 0 30.0 1.4 0.06 0.0 0.45 0.10 0.55 0.0 0.65 0.20 5000 8 200 0 1 21 Изменено 24 января, 2019 пользователем Synthwave85 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Dimoman_93 Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 (изменено) Удалось даже заставить Карла садиться в спальный вагон и ресторан, которые конвертировал Driver:Driver писал, что он уже закончил c GTA San Andreas.Плохо, что люди не понимают, что для того чтобы получить хорошую модель для игру нужно взять стандартную модель и просто переработать её в качественную. А то лепят разные поезда и получается, что кроме красивой графики ничего больше нет (посадка через стенку, компоненты не работают и т. п.). Изменено 24 января, 2019 пользователем Dimoman_93 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 29 января, 2019 Жалоба Поделиться Опубликовано 29 января, 2019 (изменено) Доброго времени суток. Давненько не было. В общем заработал скрипт. Но пока только с одним пикапом. После взятия пикапа, маркер удаляется, как и должно быть, да и после загрузки сохранения маркеры не отрисовываются по новой. Теперь у меня вопрос - как это все размножить на 25 пикапов? Чтобы все было более компактно и культурно. Хотя можно еще будет потестить "gosub", что при условии, когда все пикапы взяты сразу же завершался поток без дальнейших проверок. [spoiler=Скрипт]{$CLEO .cs}thread 'Oysters 1-32':OY_1wait 0if048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_upjf @OY_1else_jump @END_THREAD1@ = Marker.CreateIconWithoutSphere(21, 155.0, -1975.0, -8.0):DELOY_1wait 0ifpickup.Picked_up($2992)jf @DELOY_1Marker.Disable(1@)1@ = 0:END_THREADwait 0if1@ == 0thenend_threadelse_jump @DELOY_1end Изменено 30 января, 2019 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 1 февраля, 2019 Жалоба Поделиться Опубликовано 1 февраля, 2019 (изменено) И есть в природе скрипт, который сохраняет авто в указанной точке перед некоторыми миссиями, к которым можно приехать на своем затюненом спорткаре? Чтобы после окончания миссии Карл мог сесть в свое же авто, на котором приехал и уехать в закат. Нашел две альтернативы (Save My Car от Sanjay Vig - сохранение по нажатию F7; Car Save от Trushin Vlad - сохраняет последнее авто, в котором сидел Карл. Работают по другому принципу, но надо попробовать. Изменено 1 февраля, 2019 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 2 февраля, 2019 Жалоба Поделиться Опубликовано 2 февраля, 2019 (изменено) Всем привет. В общем я встал в тупик. Нужен опкод, который не будет сохранять маркеры при сохранении игры. Как к примеру эти опкоды 014B: (если вызвать авто, то оно сохранится в игре на всегда) и 00A5: (если удалим скрипт то, даже на сохраненных, с включенным скриптом, играх, этого автомобиля уже не будет). Может кто знает как это реализовать с иконками на карте. Работа скрипта на сегодняшний день. Важный момент:обязательно добавляем команду 0A95: enable_thread_saving, иначе после добавления иконки и перезагрузке игры иконка останется и удалить ее будет проблематично. Потестил на добавлении одной иконки без других условий. Пишем скрипт на добавление иконки с 0A95: в начале. Завершаем поток 0А93:. Загружаем игру. Иконка нарисовалась. Скрипт завершился. Сохраняем. Выходим. Удаляем скрипт. Загружаем сохранение, а иконка наша осталась на месте. Т.е. получается, что опкод 0А95: не сработал. Перечитал посты. Понял, что все таки 0А95: тут не при чем. Значит перед сохранением игры надо чтобы скрипт удалял созданные маркеры. К примеру если CJ находится в интерьере, где есть дискетка, или приходит на точку сохранения, которая вне дома то скрипт должен удалить маркеры. Ну и соответственно свою работу скрипт должен начинать лишь поле того как пройду проверки на то, что СиДжей не в доме сохранения и не возле точки сохранения. Вопрос. Есть у кого координаты всех сохранений, которые вне дома. По моему это в доме Торето или как его там; второе гараж в Догерти, Сан Фиеро. Поправьте, если забыл, что-то. Завтра буду переписывать скрипт. Проверил на нескольких иконках но с одним домом, где имеется сохранение. Вроде все норм. Иконки удаляются, когда мы входим в дом - соответственно не сохраняются на карте при сохранении игры. Изменено 2 февраля, 2019 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 2 февраля, 2019 Жалоба Поделиться Опубликовано 2 февраля, 2019 И так, думаю, большая часть готова. Теперь скрипт никак не влияет на сохранения. Т.е. поток отрисовал иконки, мы пошли сохранятся,а он их в это время удалил. И если мы удалим скрипт и загрузим наше сохранение, то иконок не будет в отличии от прошлой версии. Если есть у кого возможность проверить, что не так. А куда теперь пихнуть условие удаления маркера, при взятии пикапа. [spoiler=Скрипт] {$CLEO .cs} 0000: NOP :NONAME_0 wait 0 if Player.Defined($PLAYER_CHAR) jf @NONAME_0 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @NONAME_0 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 then jump @NONAME_0 else 0004: 3@ = 0 gosub @NONAME_3 jump @NONAME_1 end :NONAME_1 wait 0 if Player.Defined($PLAYER_CHAR) jf @NONAME_2 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @NONAME_2 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 then gosub @NONAME_3 jump @NONAME_2 else gosub @NONAME_3 jump @NONAME_1 end :NONAME_2 wait 0 if 3@ == 1 jf @NONAME_0 Marker.Disable(0@) Marker.Disable(1@) Marker.Disable(2@) 0004: 3@ = 0 jump @NONAME_0 :NONAME_3 wait 0 if 3@ == 1 then return end if 048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_up then 0@ = Marker.CreateIconWithoutSphere(56, 155.0, -1975.0, -8.0) end if 048C: pickup_at 725.0 -1849.0 -5.0 available_to_be_picked_up then 1@ = Marker.CreateIconWithoutSphere(56, 725.0, -1849.0, -5.0) end if 048C: pickup_at 723.0 -1586.0 -3.0 available_to_be_picked_up then 2@ = Marker.CreateIconWithoutSphere(56, 723.0, -1586.0, -3.0) end 0004: 3@ = 1 return if 3@ == 1 then Marker.Disable(0@) Marker.Disable(1@) Marker.Disable(2@) 0004: 3@ = 0 return else return end Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 6 февраля, 2019 Жалоба Поделиться Опубликовано 6 февраля, 2019 Всем привет. Новая проверка на взятие всех пикапов. И завершение скрипта, если все собраны. Т.е. строки 1@ == 0 и т.д. уже не будут нужны, код будет намного компактнее. И возник еще один вопрос, а нельзя ли написать скрипт в формате *.cm? Так как локальных переменных там можно использовать больше 1000 и не придется делить его на 2 части, при использовании больше 32 переменных. [spoiler=Проверка] {$CLEO} 0000: :OYSTERS thread 'OYSTERS' wait 0 if Player.Defined($PLAYER_CHAR) // Проверка на существование игрока jf @OYSTERS_1 :OYSTERS_1 wait 0 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @OYSTERS_2 else jump @OYSTERS_1 end :OYSTERS_2 wait 0 0A93: end_custom_thread // Удаляем скрипт из памяти Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 13 февраля, 2019 Жалоба Поделиться Опубликовано 13 февраля, 2019 (изменено) И снова здравствуйте. Я тут, походу, сам с собой уже веду беседу. Ну да ладно. В общем-то все. Все проблемы с работой скрипта решены. Осталось лишь добавить оставшиеся 48 пикапов. В связи с этим хотел поинтересоваться почему не рекомендуется использовать глобальные переменные в формате $OBJ, просто выбрав имя которое не встречается в main.csm. (Ответ: http://sannybuilder.com/forums/viewtopic.php?pid=3747#p3747) Или использовать глобальные переменные с помощью опкода 0AB3: var 0 = Marker.CreateIconWithoutSphere (x.y.z)? Но тогда возможны проблемы с другими скриптами, использующие те же переменные, что и в моем потоке. Изменено 13 февраля, 2019 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
kenking Опубликовано 13 февраля, 2019 Жалоба Поделиться Опубликовано 13 февраля, 2019 В связи с этим хотел поинтересоваться почему не рекомендуется использовать глобальные переменные в формате $OBJ, просто выбрав имя которое не встречается в main.csm. Справка Sanny Builder->CLEO 3 Code Library->FAQ по CLEO 3->Почему в CLEO-скриптах нельзя использовать глобальные переменные Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 13 февраля, 2019 Жалоба Поделиться Опубликовано 13 февраля, 2019 Справка Sanny Builder->CLEO 3 Code Library->FAQ по CLEO 3->Почему в CLEO-скриптах нельзя использовать глобальные переменныеЭто уже выяснил. Второй вопрос тоже не решает моей проблемы. А с выделением памяти я пока не разобрался. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 15 февраля, 2019 Жалоба Поделиться Опубликовано 15 февраля, 2019 Народ, ЧП. Срочно нужен ответ - почему после 28 вложенных друг в друга условий на 29 условии компилятор выдает ошибку "Невозможно выполнить переход к метке. Внутренняя метка не найдена. Проверьте ваши высокоуровневые конструкции. Некоторые из них не имеют закрывающего "end"." Сначала прописал 51 условие, а потом скомпилировал и сани выдал ту же ошибку, вот и стал разбираться, считать количество end, проверять условия. Ошибок не нашёл, кроме той, что забыл переменную переназначить, но это уже другой разговор. Вообщем вынес все эти условия в отдельный текстовик и начал постепенно оттуда копировать и вставлять. В итоге и наткнулся на ошибку именно на 29 вложенном условии. Почитал справку, ничего такого типа лимита подусловий не нашел. В чем тогда может быть проблема? При чем если просто условия друг за другом идут, то там все равно (у меня их около 52), никаких ошибок при компиляции. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 16 февраля, 2019 Жалоба Поделиться Опубликовано 16 февраля, 2019 (изменено) Ни прошло и дня, как появился новый вопрос. И радостная новость идея скрипта воплощена в жизнь и уже есть 2 версии. В первой версии иконки появляются одна за другой, по мере взятия пикапов. Во второй версии отрисовываются сразу все иконки к существующим пикапам (из-за ограничения в 32 переменные скрипт поделен на 2 части), но лимит иконок на карте равен 175, и если у вас, на пример, отображается уже 150 иконок, то скрипт нарисует лишь 25, а следующие будут отрисовываться по мере удаления предыдущих, но только после сохранения игры. Ну или как альтернатива - использовать какой-либо limit adjuster, в котором взломан лимит на максимальное количество отображаемых иконок, и увеличить его сразу на 50. Есть как бы и третья, но вот с ней как раз таки и связан вопрос. Суть третьей версии в том, что в отличие от второй версии в памяти игры не будет висеть одновременно два потока. Т.е. сначала будет отрисована первая часть маркеров на карте (23 штуки), и после того как игрок соберет 23 пикапа и удалятся соответствующие маркеры, тогда запуститься второй поток с помощью опкода "0A92: create_custom_thread" и на карте будет отрисовано, оставшиеся 27 маркеров. Но пока по каким-то причинам после того как мы удалили 23 маркера, вторая часть не стартует. Кстати все 3 версии не сохраняют маркеры на карте, при сохранении игры. Т.е. все ваши сохранения останутся нетронутыми и даже после удаления скрипта с уже отрисованными маркерами, они вас больше не потревожат. Выкладываю сразу все 3 версии, вдруг будут какие-то замечания по первым двум.Так пока это все вставлял в 3ей версии нашел несоответствие, что когда запускается новый поток, первый должен завершиться. [spoiler=1_Версия] {$CLEO .cs} 0000: NOP thread 'OYSTERS' :OYSTERS_1 wait 10 if Player.Defined($PLAYER_CHAR) jf @OYSTERS_1 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @OYSTERS_5 end 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYSTERS_1 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYSTERS_1 else if // пошли условия создания маркеров на карте 048C: pickup_at 1968.0 -1203.0 17.0 available_to_be_picked_up // $2993 then 1@ = Marker.CreateIconWithoutSphere(56, 1968.0, -1203.0, 17.0) else if // если не существует пикапа $2993 то идет проверка на существование следующего пикапа $2984, и если есть таковой - рисуем маркер на карте 048C: pickup_at 1279.0 -806.0 85.0 available_to_be_picked_up // $2984 then 1@ = Marker.CreateIconWithoutSphere(56, 1279.0, -806.0, 85.0) else if // а если не существует пикапа $2984 то проверяем существование $2985 и последующей отрисовки маркера на карте. Ну и т.д. 048C: pickup_at 2945.13 -2051.93 -3.0 available_to_be_picked_up // $2985 then 1@ = Marker.CreateIconWithoutSphere(56, 2945.13, -2051.93, -3.0) else if 048C: pickup_at 2750.0 -2584.0 -5.0 available_to_be_picked_up // $2983 then 1@ = Marker.CreateIconWithoutSphere(56, 2750.0, -2584.0, -5.0) else if 048C: pickup_at 2621.0 -2506.0 -5.0 available_to_be_picked_up // $2988 then 1@ = Marker.CreateIconWithoutSphere(56, 2621.0, -2506.0, -5.0) else if 048C: pickup_at 2327.0 -2662.0 -5.0 available_to_be_picked_up // $2987 then 1@ = Marker.CreateIconWithoutSphere(56, 2327.0, -2662.0, -5.0) else if 048C: pickup_at 1249.0 -2687.0 -1.0 available_to_be_picked_up // $2989 then 1@ = Marker.CreateIconWithoutSphere(56, 1249.0, -2687.0, -1.0) else if 048C: pickup_at 979.0 -2210.0 -3.0 available_to_be_picked_up // $2982 then 1@ = Marker.CreateIconWithoutSphere(56, 979.0, -2210.0, -3.0) else if 048C: pickup_at 725.0 -1849.0 -5.0 available_to_be_picked_up // $2990 then 1@ = Marker.CreateIconWithoutSphere(56, 725.0, -1849.0, -5.0) else if 048C: pickup_at 723.0 -1586.0 -3.0 available_to_be_picked_up // $2991 then 1@ = Marker.CreateIconWithoutSphere(56, 723.0, -1586.0, -3.0) else if 048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_up // $2992 then 1@ = Marker.CreateIconWithoutSphere(56, 155.0, -1975.0, -8.0) else if 048C: pickup_at 2767.0 470.0 -8.0 available_to_be_picked_up // $3024 then 1@ = Marker.CreateIconWithoutSphere(56, 2767.0, 470.0, -8.0) else if 048C: pickup_at 2179.0 235.0 -5.0 available_to_be_picked_up // $3031 then 1@ = Marker.CreateIconWithoutSphere(56, 2179.0, 235.0, -5.0) else if 048C: pickup_at 2098.0 -108.0 -2.0 available_to_be_picked_up // $3023 then 1@ = Marker.CreateIconWithoutSphere(56, 2098.0, -108.0, -2.0) else if 048C: pickup_at 486.0 -253.0 -4.0 available_to_be_picked_up // $3010 then 1@ = Marker.CreateIconWithoutSphere(56, 486.0, -253.0, -4.0) else if 048C: pickup_at 40.0 -531.0 -8.0 available_to_be_picked_up // $3021 then 1@ = Marker.CreateIconWithoutSphere(56, 40.0, -531.0, -8.0) else if 048C: pickup_at -90.0 -910.0 -5.0 available_to_be_picked_up // $3011 then 1@ = Marker.CreateIconWithoutSphere(56, -90.0, -910.0, -5.0) else if 048C: pickup_at 67.0 -1018.0 -5.0 available_to_be_picked_up // $2986 then 1@ = Marker.CreateIconWithoutSphere(56, 67.0, -1018.0, -5.0) else if 048C: pickup_at 26.43 -1320.94 -10.04 available_to_be_picked_up // $3012 then 1@ = Marker.CreateIconWithoutSphere(56, 26.43, -1320.94, -10.04) else if 048C: pickup_at -207.0 -1682.0 -8.0 available_to_be_picked_up // $3013 then 1@ = Marker.CreateIconWithoutSphere(56, -207.0, -1682.0, -8.0) else if 048C: pickup_at -1097.0 -2858.0 -8.0 available_to_be_picked_up // $3016 then 1@ = Marker.CreateIconWithoutSphere(56, -1097.0, -2858.0, -8.0) else if 048C: pickup_at -1175.0 -2639.0 -2.5 available_to_be_picked_up // $3015 then 1@ = Marker.CreateIconWithoutSphere(56, -1175.0, -2639.0, -2.5) else if 048C: pickup_at -1672.0 -1641.0 -2.0 available_to_be_picked_up // $3014 - Последняя ракушка в округе Лос-Сантоса then 1@ = Marker.CreateIconWithoutSphere(56, -1672.0, -1641.0, -2.0) else if 048C: pickup_at -2889.0 -1042.0 -9.0 available_to_be_picked_up // $3017 then 1@ = Marker.CreateIconWithoutSphere(56, -2889.0, -1042.0, -9.0) else if 048C: pickup_at -2727.0 -469.0 -5.0 available_to_be_picked_up // $2999 then 1@ = Marker.CreateIconWithoutSphere(56, -2727.0, -469.0, -5.0) else if 048C: pickup_at -1625.0 4.0 -10.0 available_to_be_picked_up // $2996 then 1@ = Marker.CreateIconWithoutSphere(56, -1625.0, 4.0, -10.0) else if 048C: pickup_at -1364.0 390.0 -5.0 available_to_be_picked_up // $3002 then 1@ = Marker.CreateIconWithoutSphere(56, -1364.0, 390.0, -5.0) else jump @OYSTERS_2 // прыгаем на следующую метку с условиями, т.к. SB выдавал ошибку, end // когда пытался скомпилировать скрипт с более 28 подусловиями end end end end end end end end end end end end end end end end end end end end end end end end end end jump @OYSTERS_3 end :OYSTERS_2 wait 10 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYSTERS_1 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYSTERS_1 else if 048C: pickup_at -1252.0 501.0 -8.0 available_to_be_picked_up // $2995 then 1@ = Marker.CreateIconWithoutSphere(56, -1252.0, 501.0, -8.0) else if 048C: pickup_at -1013.0 478.0 -7.0 available_to_be_picked_up // $3001 then 1@ = Marker.CreateIconWithoutSphere(56, -1013.0, 478.0, -7.0) else if 048C: pickup_at -765.0 247.0 -8.0 available_to_be_picked_up // $3022 then 1@ = Marker.CreateIconWithoutSphere(56, -765.0, 247.0, -8.0) else if 048C: pickup_at -1266.0 966.0 -10.0 available_to_be_picked_up // $3000 then 1@ = Marker.CreateIconWithoutSphere(56, -1266.0, 966.0, -10.0) else if 048C: pickup_at -1484.0 1489.0 -10.0 available_to_be_picked_up // $2997 then 1@ = Marker.CreateIconWithoutSphere(56, -1484.0, 1489.0, -10.0) else if 048C: pickup_at -2505.406 1543.724 -22.5553 available_to_be_picked_up // $2998 then 1@ = Marker.CreateIconWithoutSphere(56, -2505.406, 1543.724, -22.5553) else if 048C: pickup_at -2657.0 1564.0 -6.0 available_to_be_picked_up // $2994 then 1@ = Marker.CreateIconWithoutSphere(56, -2657.0, 1564.0, -6.0) else if 048C: pickup_at -2685.0 2153.0 -5.0 available_to_be_picked_up // $3029 then 1@ = Marker.CreateIconWithoutSphere(56, -2685.0, 2153.0, -5.0) else if 048C: pickup_at -2110.5 2329.72 -7.5 available_to_be_picked_up // $3027 then 1@ = Marker.CreateIconWithoutSphere(56, -2110.5, 2329.72, -7.5) else if 048C: pickup_at -1538.0 1708.0 -3.27 available_to_be_picked_up // $3028 then 1@ = Marker.CreateIconWithoutSphere(56, -1538.0, 1708.0, -3.27) else if 048C: pickup_at -832.0 925.0 -2.0 available_to_be_picked_up // $3009 then 1@ = Marker.CreateIconWithoutSphere(56, -832.0, 925.0, -2.0) else if 048C: pickup_at -659.0 874.0 -2.0 available_to_be_picked_up // $3018 then 1@ = Marker.CreateIconWithoutSphere(56, -659.0, 874.0, -2.0) else if 048C: pickup_at -821.0 1374.0 -8.0 available_to_be_picked_up // $3026 then 1@ = Marker.CreateIconWithoutSphere(56, -821.0, 1374.0, -8.0) else if 048C: pickup_at -783.0 2116.0 35.0 available_to_be_picked_up // $3025 then 1@ = Marker.CreateIconWithoutSphere(56, -783.0, 2116.0, 35.0) else if 048C: pickup_at -1066.0 2197.0 32.0 available_to_be_picked_up // $3020 then 1@ = Marker.CreateIconWithoutSphere(56, -1066.0, 2197.0, 32.0) else if 048C: pickup_at -955.0 2628.0 35.0 available_to_be_picked_up // $3019 then 1@ = Marker.CreateIconWithoutSphere(56, -955.0, 2628.0, 35.0) else if 048C: pickup_at 796.0 2939.0 -5.0 available_to_be_picked_up // $3030 then 1@ = Marker.CreateIconWithoutSphere(56, 796.0, 2939.0, -5.0) else if 048C: pickup_at 2130.0 1152.0 7.0 available_to_be_picked_up // $3005 then 1@ = Marker.CreateIconWithoutSphere(56, 2130.0, 1152.0, 7.0) else if 048C: pickup_at 2013.0 1670.0 7.0 available_to_be_picked_up // $3006 then 1@ = Marker.CreateIconWithoutSphere(56, 2013.0, 1670.0, 7.0) else if 048C: pickup_at 2090.0 1898.0 8.0 available_to_be_picked_up // $3004 then 1@ = Marker.CreateIconWithoutSphere(56, 2090.0, 1898.0, 8.0) else if 048C: pickup_at 2531.0 1569.0 9.0 available_to_be_picked_up // $3007 then 1@ = Marker.CreateIconWithoutSphere(56, 2531.0, 1569.0, 9.0) else if 048C: pickup_at 2578.0 2382.0 16.0 available_to_be_picked_up // $3003 then 1@ = Marker.CreateIconWithoutSphere(56, 2578.0, 2382.0, 16.0) else if 048C: pickup_at 2998.0 2998.0 -10.0 available_to_be_picked_up // $3008 then 1@ = Marker.CreateIconWithoutSphere(56, 2998.0, 2998.0, -10.0) end end end end end end end end end end end end end end end end end end end end end end end jump @OYSTERS_3 end :OYSTERS_3 wait 10 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYSTERS_4 if // условия удаления маркеров, в случае взятия пикапа pickup.Picked_up($2993) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2984) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2985) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2983) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2988) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2987) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2989) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2982) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2990) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2991) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2992) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3024) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3031) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3023) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3010) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3021) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3011) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2986) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3012) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3013) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3016) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3015) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3014) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3017) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2999) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2996) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3002) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2995) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3001) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3022) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3000) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2997) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2998) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($2994) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3029) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3027) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3028) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3009) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3018) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3026) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3025) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3020) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3019) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3030) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3005) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3006) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3004) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3007) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3003) then Marker.Disable(1@) jump @OYSTERS_1 end if pickup.Picked_up($3008) then Marker.Disable(1@) jump @OYSTERS_1 end if or // условия, при которых будут удалены все маркеры с карты во избежания сохранения их в игре 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYSTERS_4 else jump @OYSTERS_3 end :OYSTERS_4 wait 0 Marker.Disable(1@) jump @OYSTERS_1 :OYSTERS_5 wait 1000 0A93: end_custom_thread // Удаляем скрипт из памяти [spoiler=2_Версия (Первая часть)] {$CLEO .cs} 0000: NOP thread 'PART1' :PART1_0 wait 0 if Player.Defined($PLAYER_CHAR) jf @PART1_0 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @PART1_3 end 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @PART1_0 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @PART1_0 else if // пошли условия создания маркеров на карте 048C: pickup_at 1968.0 -1203.0 17.0 available_to_be_picked_up // $2993 then 1@ = Marker.CreateIconWithoutSphere(56, 1968.0, -1203.0, 17.0) end if 048C: pickup_at 1279.0 -806.0 85.0 available_to_be_picked_up // $2984 then 2@ = Marker.CreateIconWithoutSphere(56, 1279.0, -806.0, 85.0) end if 048C: pickup_at 2945.13 -2051.93 -3.0 available_to_be_picked_up // $2985 then 3@ = Marker.CreateIconWithoutSphere(56, 2945.13, -2051.93, -3.0) end if 048C: pickup_at 2750.0 -2584.0 -5.0 available_to_be_picked_up // $2983 then 4@ = Marker.CreateIconWithoutSphere(56, 2750.0, -2584.0, -5.0) end if 048C: pickup_at 2621.0 -2506.0 -5.0 available_to_be_picked_up // $2988 then 5@ = Marker.CreateIconWithoutSphere(56, 2621.0, -2506.0, -5.0) end if 048C: pickup_at 2327.0 -2662.0 -5.0 available_to_be_picked_up // $2987 then 6@ = Marker.CreateIconWithoutSphere(56, 2327.0, -2662.0, -5.0) end if 048C: pickup_at 1249.0 -2687.0 -1.0 available_to_be_picked_up // $2989 then 7@ = Marker.CreateIconWithoutSphere(56, 1249.0, -2687.0, -1.0) end if 048C: pickup_at 979.0 -2210.0 -3.0 available_to_be_picked_up // $2982 then 8@ = Marker.CreateIconWithoutSphere(56, 979.0, -2210.0, -3.0) end if 048C: pickup_at 725.0 -1849.0 -5.0 available_to_be_picked_up // $2990 then 9@ = Marker.CreateIconWithoutSphere(56, 725.0, -1849.0, -5.0) end if 048C: pickup_at 723.0 -1586.0 -3.0 available_to_be_picked_up // $2991 then 10@ = Marker.CreateIconWithoutSphere(56, 723.0, -1586.0, -3.0) end if 048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_up // $2992 then 11@ = Marker.CreateIconWithoutSphere(56, 155.0, -1975.0, -8.0) end if 048C: pickup_at 2767.0 470.0 -8.0 available_to_be_picked_up // $3024 then 12@ = Marker.CreateIconWithoutSphere(56, 2767.0, 470.0, -8.0) end if 048C: pickup_at 2179.0 235.0 -5.0 available_to_be_picked_up // $3031 then 13@ = Marker.CreateIconWithoutSphere(56, 2179.0, 235.0, -5.0) end if 048C: pickup_at 2098.0 -108.0 -2.0 available_to_be_picked_up // $3023 then 14@ = Marker.CreateIconWithoutSphere(56, 2098.0, -108.0, -2.0) end if 048C: pickup_at 486.0 -253.0 -4.0 available_to_be_picked_up // $3010 then 15@ = Marker.CreateIconWithoutSphere(56, 486.0, -253.0, -4.0) end if 048C: pickup_at 40.0 -531.0 -8.0 available_to_be_picked_up // $3021 then 16@ = Marker.CreateIconWithoutSphere(56, 40.0, -531.0, -8.0) end if 048C: pickup_at -90.0 -910.0 -5.0 available_to_be_picked_up // $3011 then 17@ = Marker.CreateIconWithoutSphere(56, -90.0, -910.0, -5.0) end if 048C: pickup_at 67.0 -1018.0 -5.0 available_to_be_picked_up // $2986 then 18@ = Marker.CreateIconWithoutSphere(56, 67.0, -1018.0, -5.0) end if 048C: pickup_at 26.43 -1320.94 -10.04 available_to_be_picked_up // $3012 then 19@ = Marker.CreateIconWithoutSphere(56, 26.43, -1320.94, -10.04) end if 048C: pickup_at -207.0 -1682.0 -8.0 available_to_be_picked_up // $3013 then 20@ = Marker.CreateIconWithoutSphere(56, -207.0, -1682.0, -8.0) end if 048C: pickup_at -1097.0 -2858.0 -8.0 available_to_be_picked_up // $3016 then 21@ = Marker.CreateIconWithoutSphere(56, -1097.0, -2858.0, -8.0) end if 048C: pickup_at -1175.0 -2639.0 -2.5 available_to_be_picked_up // $3015 then 22@ = Marker.CreateIconWithoutSphere(56, -1175.0, -2639.0, -2.5) end if 048C: pickup_at -1672.0 -1641.0 -2.0 available_to_be_picked_up // $3014 - Последняя ракушка в округе Лос-Сантоса then 23@ = Marker.CreateIconWithoutSphere(56, -1672.0, -1641.0, -2.0) end jump @PART1_1 end :PART1_1 wait 0 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @PART1_2 if // условия удаления маркеров, в случае взятия пикапа pickup.Picked_up($2993) then Marker.Disable(1@) end if pickup.Picked_up($2984) then Marker.Disable(2@) end if pickup.Picked_up($2985) then Marker.Disable(3@) end if pickup.Picked_up($2983) then Marker.Disable(4@) end if pickup.Picked_up($2988) then Marker.Disable(5@) end if pickup.Picked_up($2987) then Marker.Disable(6@) end if pickup.Picked_up($2989) then Marker.Disable(7@) end if pickup.Picked_up($2982) then Marker.Disable(8@) end if pickup.Picked_up($2990) then Marker.Disable(9@) end if pickup.Picked_up($2991) then Marker.Disable(10@) end if pickup.Picked_up($2992) then Marker.Disable(11@) end if pickup.Picked_up($3024) then Marker.Disable(12@) end if pickup.Picked_up($3031) then Marker.Disable(13@) end if pickup.Picked_up($3023) then Marker.Disable(14@) end if pickup.Picked_up($3010) then Marker.Disable(15@) end if pickup.Picked_up($3021) then Marker.Disable(16@) end if pickup.Picked_up($3011) then Marker.Disable(17@) end if pickup.Picked_up($2986) then Marker.Disable(18@) end if pickup.Picked_up($3012) then Marker.Disable(19@) end if pickup.Picked_up($3013) then Marker.Disable(20@) end if pickup.Picked_up($3016) then Marker.Disable(21@) end if pickup.Picked_up($3015) then Marker.Disable(22@) end if pickup.Picked_up($3014) then Marker.Disable(23@) end // Последняя ракушка в округе Лос-Сантоса (Last oyster in Los-Santos) if or // условия, при которых будут удалены все маркеры с карты во избежания сохранения их в игре 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @PART1_2 else jump @PART1_1 end :PART1_2 wait 0 Marker.Disable(1@) Marker.Disable(2@) Marker.Disable(3@) Marker.Disable(4@) Marker.Disable(5@) Marker.Disable(6@) Marker.Disable(7@) Marker.Disable(8@) Marker.Disable(9@) Marker.Disable(10@) Marker.Disable(11@) Marker.Disable(12@) Marker.Disable(13@) Marker.Disable(14@) Marker.Disable(15@) Marker.Disable(16@) Marker.Disable(17@) Marker.Disable(18@) Marker.Disable(19@) Marker.Disable(20@) Marker.Disable(21@) Marker.Disable(22@) Marker.Disable(23@) jump @PART1_0 :PART1_3 wait 0 0A93: end_custom_thread // Удаляем скрипт из памяти [spoiler=2_Версия (Вторая часть)] {$CLEO .cs} 0000: NOP thread 'PART2' :PART2_0 wait 0 if Player.Defined($PLAYER_CHAR) jf @PART2_0 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @PART2_3 end 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @PART2_0 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @PART2_0 else if // пошли условия создания маркеров на карте 048C: pickup_at -2889.0 -1042.0 -9.0 available_to_be_picked_up // $3017 then 1@ = Marker.CreateIconWithoutSphere(56, -2889.0, -1042.0, -9.0) end if 048C: pickup_at -2727.0 -469.0 -5.0 available_to_be_picked_up // $2999 then 2@ = Marker.CreateIconWithoutSphere(56, -2727.0, -469.0, -5.0) end if 048C: pickup_at -1625.0 4.0 -10.0 available_to_be_picked_up // $2996 then 3@ = Marker.CreateIconWithoutSphere(56, -1625.0, 4.0, -10.0) end if 048C: pickup_at -1364.0 390.0 -5.0 available_to_be_picked_up // $3002 then 4@ = Marker.CreateIconWithoutSphere(56, -1364.0, 390.0, -5.0) end if 048C: pickup_at -1252.0 501.0 -8.0 available_to_be_picked_up // $2995 then 5@ = Marker.CreateIconWithoutSphere(56, -1252.0, 501.0, -8.0) end if 048C: pickup_at -1013.0 478.0 -7.0 available_to_be_picked_up // $3001 then 6@ = Marker.CreateIconWithoutSphere(56, -1013.0, 478.0, -7.0) end if 048C: pickup_at -765.0 247.0 -8.0 available_to_be_picked_up // $3022 then 7@ = Marker.CreateIconWithoutSphere(56, -765.0, 247.0, -8.0) end if 048C: pickup_at -1266.0 966.0 -10.0 available_to_be_picked_up // $3000 then 8@ = Marker.CreateIconWithoutSphere(56, -1266.0, 966.0, -10.0) end if 048C: pickup_at -1484.0 1489.0 -10.0 available_to_be_picked_up // $2997 then 9@ = Marker.CreateIconWithoutSphere(56, -1484.0, 1489.0, -10.0) end if 048C: pickup_at -2505.406 1543.724 -22.5553 available_to_be_picked_up // $2998 then 10@ = Marker.CreateIconWithoutSphere(56, -2505.406, 1543.724, -22.5553) end if 048C: pickup_at -2657.0 1564.0 -6.0 available_to_be_picked_up // $2994 then 11@ = Marker.CreateIconWithoutSphere(56, -2657.0, 1564.0, -6.0) end if 048C: pickup_at -2685.0 2153.0 -5.0 available_to_be_picked_up // $3029 then 12@ = Marker.CreateIconWithoutSphere(56, -2685.0, 2153.0, -5.0) end if 048C: pickup_at -2110.5 2329.72 -7.5 available_to_be_picked_up // $3027 then 13@ = Marker.CreateIconWithoutSphere(56, -2110.5, 2329.72, -7.5) end if 048C: pickup_at -1538.0 1708.0 -3.27 available_to_be_picked_up // $3028 then 14@ = Marker.CreateIconWithoutSphere(56, -1538.0, 1708.0, -3.27) end if 048C: pickup_at -832.0 925.0 -2.0 available_to_be_picked_up // $3009 then 15@ = Marker.CreateIconWithoutSphere(56, -832.0, 925.0, -2.0) end if 048C: pickup_at -659.0 874.0 -2.0 available_to_be_picked_up // $3018 then 16@ = Marker.CreateIconWithoutSphere(56, -659.0, 874.0, -2.0) end if 048C: pickup_at -821.0 1374.0 -8.0 available_to_be_picked_up // $3026 then 17@ = Marker.CreateIconWithoutSphere(56, -821.0, 1374.0, -8.0) end if 048C: pickup_at -783.0 2116.0 35.0 available_to_be_picked_up // $3025 then 18@ = Marker.CreateIconWithoutSphere(56, -783.0, 2116.0, 35.0) end if 048C: pickup_at -1066.0 2197.0 32.0 available_to_be_picked_up // $3020 then 19@ = Marker.CreateIconWithoutSphere(56, -1066.0, 2197.0, 32.0) end if 048C: pickup_at -955.0 2628.0 35.0 available_to_be_picked_up // $3019 then 20@ = Marker.CreateIconWithoutSphere(56, -955.0, 2628.0, 35.0) end if 048C: pickup_at 796.0 2939.0 -5.0 available_to_be_picked_up // $3030 then 21@ = Marker.CreateIconWithoutSphere(56, 796.0, 2939.0, -5.0) end if 048C: pickup_at 2130.0 1152.0 7.0 available_to_be_picked_up // $3005 then 22@ = Marker.CreateIconWithoutSphere(56, 2130.0, 1152.0, 7.0) end if 048C: pickup_at 2013.0 1670.0 7.0 available_to_be_picked_up // $3006 then 23@ = Marker.CreateIconWithoutSphere(56, 2013.0, 1670.0, 7.0) end if 048C: pickup_at 2090.0 1898.0 8.0 available_to_be_picked_up // $3004 then 24@ = Marker.CreateIconWithoutSphere(56, 2090.0, 1898.0, 8.0) end if 048C: pickup_at 2531.0 1569.0 9.0 available_to_be_picked_up // $3007 then 25@ = Marker.CreateIconWithoutSphere(56, 2531.0, 1569.0, 9.0) end if 048C: pickup_at 2578.0 2382.0 16.0 available_to_be_picked_up // $3003 then 26@ = Marker.CreateIconWithoutSphere(56, 2578.0, 2382.0, 16.0) end if 048C: pickup_at 2998.0 2998.0 -10.0 available_to_be_picked_up // $3008 then 27@ = Marker.CreateIconWithoutSphere(56, 2998.0, 2998.0, -10.0) end jump @PART2_1 end :PART2_1 wait 0 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @PART2_2 if // условия удаления маркеров, в случае взятия пикапа pickup.Picked_up($3017) then Marker.Disable(1@) end if pickup.Picked_up($2999) then Marker.Disable(2@) end if pickup.Picked_up($2996) then Marker.Disable(3@) end if pickup.Picked_up($3002) then Marker.Disable(4@) end if pickup.Picked_up($2995) then Marker.Disable(5@) end if pickup.Picked_up($3001) then Marker.Disable(6@) end if pickup.Picked_up($3022) then Marker.Disable(7@) end if pickup.Picked_up($3000) then Marker.Disable(8@) end if pickup.Picked_up($2997) then Marker.Disable(9@) end if pickup.Picked_up($2998) then Marker.Disable(10@) end if pickup.Picked_up($2994) then Marker.Disable(11@) end if pickup.Picked_up($3029) then Marker.Disable(12@) end if pickup.Picked_up($3027) then Marker.Disable(13@) end if pickup.Picked_up($3028) then Marker.Disable(14@) end if pickup.Picked_up($3009) then Marker.Disable(15@) end if pickup.Picked_up($3018) then Marker.Disable(16@) end if pickup.Picked_up($3026) then Marker.Disable(17@) end if pickup.Picked_up($3025) then Marker.Disable(18@) end if pickup.Picked_up($3020) then Marker.Disable(19@) end if pickup.Picked_up($3019) then Marker.Disable(20@) end if pickup.Picked_up($3030) then Marker.Disable(21@) end if pickup.Picked_up($3005) then Marker.Disable(22@) end if pickup.Picked_up($3006) then Marker.Disable(23@) end if pickup.Picked_up($3004) then Marker.Disable(24@) end if pickup.Picked_up($3007) then Marker.Disable(25@) end if pickup.Picked_up($3003) then Marker.Disable(26@) end if pickup.Picked_up($3008) then Marker.Disable(27@) end if or // условия, при которых будут удалены все маркеры с карты во избежания сохранения их в игре 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @PART2_2 else jump @PART2_1 end :PART2_2 wait 0 Marker.Disable(1@) Marker.Disable(2@) Marker.Disable(3@) Marker.Disable(4@) Marker.Disable(5@) Marker.Disable(6@) Marker.Disable(7@) Marker.Disable(8@) Marker.Disable(9@) Marker.Disable(10@) Marker.Disable(11@) Marker.Disable(12@) Marker.Disable(13@) Marker.Disable(14@) Marker.Disable(15@) Marker.Disable(16@) Marker.Disable(17@) Marker.Disable(18@) Marker.Disable(19@) Marker.Disable(20@) Marker.Disable(21@) Marker.Disable(22@) Marker.Disable(23@) Marker.Disable(24@) Marker.Disable(25@) Marker.Disable(26@) Marker.Disable(27@) jump @PART2_0 :PART2_3 wait 0 0A93: end_custom_thread // Удаляем скрипт из памяти [spoiler=3_Версия (Основной поток)] {$CLEO .cs} 0000: NOP thread 'OYPART1' :OYPART1_0 wait 0 if Player.Defined($PLAYER_CHAR) jf @OYPART1_0 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @OYPART1_3 end 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYPART1_0 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYPART1_0 else if // пошли условия создания маркеров на карте 048C: pickup_at 1968.0 -1203.0 17.0 available_to_be_picked_up // $2993 then 1@ = Marker.CreateIconWithoutSphere(56, 1968.0, -1203.0, 17.0) else 1@ = 0 end if 048C: pickup_at 1279.0 -806.0 85.0 available_to_be_picked_up // $2984 then 2@ = Marker.CreateIconWithoutSphere(56, 1279.0, -806.0, 85.0) else 2@ = 0 end if 048C: pickup_at 2945.13 -2051.93 -3.0 available_to_be_picked_up // $2985 then 3@ = Marker.CreateIconWithoutSphere(56, 2945.13, -2051.93, -3.0) else 3@ = 0 end if 048C: pickup_at 2750.0 -2584.0 -5.0 available_to_be_picked_up // $2983 then 4@ = Marker.CreateIconWithoutSphere(56, 2750.0, -2584.0, -5.0) else 4@ = 0 end if 048C: pickup_at 2621.0 -2506.0 -5.0 available_to_be_picked_up // $2988 then 5@ = Marker.CreateIconWithoutSphere(56, 2621.0, -2506.0, -5.0) else 5@ = 0 end if 048C: pickup_at 2327.0 -2662.0 -5.0 available_to_be_picked_up // $2987 then 6@ = Marker.CreateIconWithoutSphere(56, 2327.0, -2662.0, -5.0) else 6@ = 0 end if 048C: pickup_at 1249.0 -2687.0 -1.0 available_to_be_picked_up // $2989 then 7@ = Marker.CreateIconWithoutSphere(56, 1249.0, -2687.0, -1.0) else 7@ = 0 end if 048C: pickup_at 979.0 -2210.0 -3.0 available_to_be_picked_up // $2982 then 8@ = Marker.CreateIconWithoutSphere(56, 979.0, -2210.0, -3.0) else 8@ = 0 end if 048C: pickup_at 725.0 -1849.0 -5.0 available_to_be_picked_up // $2990 then 9@ = Marker.CreateIconWithoutSphere(56, 725.0, -1849.0, -5.0) else 9@ = 0 end if 048C: pickup_at 723.0 -1586.0 -3.0 available_to_be_picked_up // $2991 then 10@ = Marker.CreateIconWithoutSphere(56, 723.0, -1586.0, -3.0) else 10@ = 0 end if 048C: pickup_at 155.0 -1975.0 -8.0 available_to_be_picked_up // $2992 then 11@ = Marker.CreateIconWithoutSphere(56, 155.0, -1975.0, -8.0) else 11@ = 0 end if 048C: pickup_at 2767.0 470.0 -8.0 available_to_be_picked_up // $3024 then 12@ = Marker.CreateIconWithoutSphere(56, 2767.0, 470.0, -8.0) else 12@ = 0 end if 048C: pickup_at 2179.0 235.0 -5.0 available_to_be_picked_up // $3031 then 13@ = Marker.CreateIconWithoutSphere(56, 2179.0, 235.0, -5.0) else 13@ = 0 end if 048C: pickup_at 2098.0 -108.0 -2.0 available_to_be_picked_up // $3023 then 14@ = Marker.CreateIconWithoutSphere(56, 2098.0, -108.0, -2.0) else 14@ = 0 end if 048C: pickup_at 486.0 -253.0 -4.0 available_to_be_picked_up // $3010 then 15@ = Marker.CreateIconWithoutSphere(56, 486.0, -253.0, -4.0) else 15@ = 0 end if 048C: pickup_at 40.0 -531.0 -8.0 available_to_be_picked_up // $3021 then 16@ = Marker.CreateIconWithoutSphere(56, 40.0, -531.0, -8.0) else 16@ = 0 end if 048C: pickup_at -90.0 -910.0 -5.0 available_to_be_picked_up // $3011 then 17@ = Marker.CreateIconWithoutSphere(56, -90.0, -910.0, -5.0) else 17@ = 0 end if 048C: pickup_at 67.0 -1018.0 -5.0 available_to_be_picked_up // $2986 then 18@ = Marker.CreateIconWithoutSphere(56, 67.0, -1018.0, -5.0) else 18@ = 0 end if 048C: pickup_at 26.43 -1320.94 -10.04 available_to_be_picked_up // $3012 then 19@ = Marker.CreateIconWithoutSphere(56, 26.43, -1320.94, -10.04) else 19@ = 0 end if 048C: pickup_at -207.0 -1682.0 -8.0 available_to_be_picked_up // $3013 then 20@ = Marker.CreateIconWithoutSphere(56, -207.0, -1682.0, -8.0) else 20@ = 0 end if 048C: pickup_at -1097.0 -2858.0 -8.0 available_to_be_picked_up // $3016 then 21@ = Marker.CreateIconWithoutSphere(56, -1097.0, -2858.0, -8.0) else 21@ = 0 end if 048C: pickup_at -1175.0 -2639.0 -2.5 available_to_be_picked_up // $3015 then 22@ = Marker.CreateIconWithoutSphere(56, -1175.0, -2639.0, -2.5) else 22@ = 0 end if 048C: pickup_at -1672.0 -1641.0 -2.0 available_to_be_picked_up // $3014 - Последняя ракушка в округе Лос-Сантоса then 23@ = Marker.CreateIconWithoutSphere(56, -1672.0, -1641.0, -2.0) else 23@ = 0 end jump @OYPART1_1 end :OYPART1_1 wait 0 gosub @OYPART2_1 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYPART1_2 if // условия удаления маркеров, в случае взятия пикапа pickup.Picked_up($2993) then Marker.Disable(1@) end if pickup.Picked_up($2984) then Marker.Disable(2@) end if pickup.Picked_up($2985) then Marker.Disable(3@) end if pickup.Picked_up($2983) then Marker.Disable(4@) end if pickup.Picked_up($2988) then Marker.Disable(5@) end if pickup.Picked_up($2987) then Marker.Disable(6@) end if pickup.Picked_up($2989) then Marker.Disable(7@) end if pickup.Picked_up($2982) then Marker.Disable(8@) end if pickup.Picked_up($2990) then Marker.Disable(9@) end if pickup.Picked_up($2991) then Marker.Disable(10@) end if pickup.Picked_up($2992) then Marker.Disable(11@) end if pickup.Picked_up($3024) then Marker.Disable(12@) end if pickup.Picked_up($3031) then Marker.Disable(13@) end if pickup.Picked_up($3023) then Marker.Disable(14@) end if pickup.Picked_up($3010) then Marker.Disable(15@) end if pickup.Picked_up($3021) then Marker.Disable(16@) end if pickup.Picked_up($3011) then Marker.Disable(17@) end if pickup.Picked_up($2986) then Marker.Disable(18@) end if pickup.Picked_up($3012) then Marker.Disable(19@) end if pickup.Picked_up($3013) then Marker.Disable(20@) end if pickup.Picked_up($3016) then Marker.Disable(21@) end if pickup.Picked_up($3015) then Marker.Disable(22@) end if pickup.Picked_up($3014) then Marker.Disable(23@) end // Последняя ракушка в округе Лос-Сантоса (Last oyster in Los-Santos) if or // условия, при которых будут удалены все маркеры с карты во избежания сохранения их в игре 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYPART1_2 else jump @OYPART1_1 end :OYPART1_2 wait 0 Marker.Disable(1@) Marker.Disable(2@) Marker.Disable(3@) Marker.Disable(4@) Marker.Disable(5@) Marker.Disable(6@) Marker.Disable(7@) Marker.Disable(8@) Marker.Disable(9@) Marker.Disable(10@) Marker.Disable(11@) Marker.Disable(12@) Marker.Disable(13@) Marker.Disable(14@) Marker.Disable(15@) Marker.Disable(16@) Marker.Disable(17@) Marker.Disable(18@) Marker.Disable(19@) Marker.Disable(20@) Marker.Disable(21@) Marker.Disable(22@) Marker.Disable(23@) jump @OYPART1_0 :OYPART1_3 wait 10 0A93: end_custom_thread // Удаляем скрипт из памяти :OYPART2_1 wait 10 if and 1@ == 0 2@ == 0 3@ == 0 4@ == 0 5@ == 0 6@ == 0 7@ == 0 8@ == 0 then if and 9@ == 0 10@ == 0 11@ == 0 12@ == 0 13@ == 0 14@ == 0 15@ == 0 16@ == 0 then if and 17@ == 0 18@ == 0 19@ == 0 20@ == 0 21@ == 0 22@ == 0 23@ == 0 then 0A92: create_custom_thread "OYPART2" // создаем новый поток 0A93: end_custom_thread end end end return [spoiler=3_Версия (Второй поток)] {$CLEO .s} 0000: NOP thread 'OYPART2' :OYPART2_0 wait 0 if Player.Defined($PLAYER_CHAR) jf @OYPART2_0 0A8D: 0@ = read_memory 0xB791EC size 4 virtual_protect 1 // В переменную 0@ будет записано количество найденных ракушек if 0@ == 50 then jump @OYPART2_3 end 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYPART2_0 if or 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYPART2_0 else if // пошли условия создания маркеров на карте 048C: pickup_at -2889.0 -1042.0 -9.0 available_to_be_picked_up // $3017 then 1@ = Marker.CreateIconWithoutSphere(56, -2889.0, -1042.0, -9.0) end if 048C: pickup_at -2727.0 -469.0 -5.0 available_to_be_picked_up // $2999 then 2@ = Marker.CreateIconWithoutSphere(56, -2727.0, -469.0, -5.0) end if 048C: pickup_at -1625.0 4.0 -10.0 available_to_be_picked_up // $2996 then 3@ = Marker.CreateIconWithoutSphere(56, -1625.0, 4.0, -10.0) end if 048C: pickup_at -1364.0 390.0 -5.0 available_to_be_picked_up // $3002 then 4@ = Marker.CreateIconWithoutSphere(56, -1364.0, 390.0, -5.0) end if 048C: pickup_at -1252.0 501.0 -8.0 available_to_be_picked_up // $2995 then 5@ = Marker.CreateIconWithoutSphere(56, -1252.0, 501.0, -8.0) end if 048C: pickup_at -1013.0 478.0 -7.0 available_to_be_picked_up // $3001 then 6@ = Marker.CreateIconWithoutSphere(56, -1013.0, 478.0, -7.0) end if 048C: pickup_at -765.0 247.0 -8.0 available_to_be_picked_up // $3022 then 7@ = Marker.CreateIconWithoutSphere(56, -765.0, 247.0, -8.0) end if 048C: pickup_at -1266.0 966.0 -10.0 available_to_be_picked_up // $3000 then 8@ = Marker.CreateIconWithoutSphere(56, -1266.0, 966.0, -10.0) end if 048C: pickup_at -1484.0 1489.0 -10.0 available_to_be_picked_up // $2997 then 9@ = Marker.CreateIconWithoutSphere(56, -1484.0, 1489.0, -10.0) end if 048C: pickup_at -2505.406 1543.724 -22.5553 available_to_be_picked_up // $2998 then 10@ = Marker.CreateIconWithoutSphere(56, -2505.406, 1543.724, -22.5553) end if 048C: pickup_at -2657.0 1564.0 -6.0 available_to_be_picked_up // $2994 then 11@ = Marker.CreateIconWithoutSphere(56, -2657.0, 1564.0, -6.0) end if 048C: pickup_at -2685.0 2153.0 -5.0 available_to_be_picked_up // $3029 then 12@ = Marker.CreateIconWithoutSphere(56, -2685.0, 2153.0, -5.0) end if 048C: pickup_at -2110.5 2329.72 -7.5 available_to_be_picked_up // $3027 then 13@ = Marker.CreateIconWithoutSphere(56, -2110.5, 2329.72, -7.5) end if 048C: pickup_at -1538.0 1708.0 -3.27 available_to_be_picked_up // $3028 then 14@ = Marker.CreateIconWithoutSphere(56, -1538.0, 1708.0, -3.27) end if 048C: pickup_at -832.0 925.0 -2.0 available_to_be_picked_up // $3009 then 15@ = Marker.CreateIconWithoutSphere(56, -832.0, 925.0, -2.0) end if 048C: pickup_at -659.0 874.0 -2.0 available_to_be_picked_up // $3018 then 16@ = Marker.CreateIconWithoutSphere(56, -659.0, 874.0, -2.0) end if 048C: pickup_at -821.0 1374.0 -8.0 available_to_be_picked_up // $3026 then 17@ = Marker.CreateIconWithoutSphere(56, -821.0, 1374.0, -8.0) end if 048C: pickup_at -783.0 2116.0 35.0 available_to_be_picked_up // $3025 then 18@ = Marker.CreateIconWithoutSphere(56, -783.0, 2116.0, 35.0) end if 048C: pickup_at -1066.0 2197.0 32.0 available_to_be_picked_up // $3020 then 19@ = Marker.CreateIconWithoutSphere(56, -1066.0, 2197.0, 32.0) end if 048C: pickup_at -955.0 2628.0 35.0 available_to_be_picked_up // $3019 then 20@ = Marker.CreateIconWithoutSphere(56, -955.0, 2628.0, 35.0) end if 048C: pickup_at 796.0 2939.0 -5.0 available_to_be_picked_up // $3030 then 21@ = Marker.CreateIconWithoutSphere(56, 796.0, 2939.0, -5.0) end if 048C: pickup_at 2130.0 1152.0 7.0 available_to_be_picked_up // $3005 then 22@ = Marker.CreateIconWithoutSphere(56, 2130.0, 1152.0, 7.0) end if 048C: pickup_at 2013.0 1670.0 7.0 available_to_be_picked_up // $3006 then 23@ = Marker.CreateIconWithoutSphere(56, 2013.0, 1670.0, 7.0) end if 048C: pickup_at 2090.0 1898.0 8.0 available_to_be_picked_up // $3004 then 24@ = Marker.CreateIconWithoutSphere(56, 2090.0, 1898.0, 8.0) end if 048C: pickup_at 2531.0 1569.0 9.0 available_to_be_picked_up // $3007 then 25@ = Marker.CreateIconWithoutSphere(56, 2531.0, 1569.0, 9.0) end if 048C: pickup_at 2578.0 2382.0 16.0 available_to_be_picked_up // $3003 then 26@ = Marker.CreateIconWithoutSphere(56, 2578.0, 2382.0, 16.0) end if 048C: pickup_at 2998.0 2998.0 -10.0 available_to_be_picked_up // $3008 then 27@ = Marker.CreateIconWithoutSphere(56, 2998.0, 2998.0, -10.0) end jump @OYPART2_1 end :OYPART2_1 wait 0 077E: get_active_interior_to $ACTIVE_INTERIOR if $ACTIVE_INTERIOR == 0 jf @OYPART2_2 if // условия удаления маркеров, в случае взятия пикапа pickup.Picked_up($3017) then Marker.Disable(1@) end if pickup.Picked_up($2999) then Marker.Disable(2@) end if pickup.Picked_up($2996) then Marker.Disable(3@) end if pickup.Picked_up($3002) then Marker.Disable(4@) end if pickup.Picked_up($2995) then Marker.Disable(5@) end if pickup.Picked_up($3001) then Marker.Disable(6@) end if pickup.Picked_up($3022) then Marker.Disable(7@) end if pickup.Picked_up($3000) then Marker.Disable(8@) end if pickup.Picked_up($2997) then Marker.Disable(9@) end if pickup.Picked_up($2998) then Marker.Disable(10@) end if pickup.Picked_up($2994) then Marker.Disable(11@) end if pickup.Picked_up($3029) then Marker.Disable(12@) end if pickup.Picked_up($3027) then Marker.Disable(13@) end if pickup.Picked_up($3028) then Marker.Disable(14@) end if pickup.Picked_up($3009) then Marker.Disable(15@) end if pickup.Picked_up($3018) then Marker.Disable(16@) end if pickup.Picked_up($3026) then Marker.Disable(17@) end if pickup.Picked_up($3025) then Marker.Disable(18@) end if pickup.Picked_up($3020) then Marker.Disable(19@) end if pickup.Picked_up($3019) then Marker.Disable(20@) end if pickup.Picked_up($3030) then Marker.Disable(21@) end if pickup.Picked_up($3005) then Marker.Disable(22@) end if pickup.Picked_up($3006) then Marker.Disable(23@) end if pickup.Picked_up($3004) then Marker.Disable(24@) end if pickup.Picked_up($3007) then Marker.Disable(25@) end if pickup.Picked_up($3003) then Marker.Disable(26@) end if pickup.Picked_up($3008) then Marker.Disable(27@) end if or // условия, при которых будут удалены все маркеры с карты во избежания сохранения их в игре 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0 // Укрытие Каталины (Catalina's Hideout) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0 // Отель-Казино "4 Дракона" (The Four Dragons Casino) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0 // Ранчо Майка Торено (Mike Toreno's Ranch) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0 // Гараж в Доэрти (Doherty Garage) 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0 // Эйнджел-Пайн (Angel Pine) then jump @OYPART2_2 else jump @OYPART2_1 end :OYPART2_2 wait 0 Marker.Disable(1@) Marker.Disable(2@) Marker.Disable(3@) Marker.Disable(4@) Marker.Disable(5@) Marker.Disable(6@) Marker.Disable(7@) Marker.Disable(8@) Marker.Disable(9@) Marker.Disable(10@) Marker.Disable(11@) Marker.Disable(12@) Marker.Disable(13@) Marker.Disable(14@) Marker.Disable(15@) Marker.Disable(16@) Marker.Disable(17@) Marker.Disable(18@) Marker.Disable(19@) Marker.Disable(20@) Marker.Disable(21@) Marker.Disable(22@) Marker.Disable(23@) Marker.Disable(24@) Marker.Disable(25@) Marker.Disable(26@) Marker.Disable(27@) jump @OYPART2_0 :OYPART2_3 wait 0 0A93: end_custom_thread // Удаляем скрипт из памяти ЗЫ: Сразу после написания поста родилась идея убрать одну метку из первой части 3 версии скрипта вообще. Но пока еще не проверил. Как проверю отпишусь. Изменено 16 февраля, 2019 пользователем Constantines 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 17 февраля, 2019 Жалоба Поделиться Опубликовано 17 февраля, 2019 (изменено) И так в соседнем топике был задан вопрос - можно ли как-то увеличить лимит покрасочных работ. В итоге после несколько часовых манипуляций удалось добавить 5ый винил, просто получая максимально возможное количество покрасок из ini-файла. Изначально в игре на большинстве моделей, поддерживающих покрасочные работы, установлено максимум 3 покрасочные работы на номера 0, 1 и 2. Когда мы добавляем 4 покрасочную работу (elegy4.txd к примеру) - она прописывается в игре на номер 3. И большинство знает, что если таким же образом добавить 5 покрасочную работу (elegy5.txd), то ничего не произойдет, т.к. лимит игры максимум в 4 работы. Но подняв этот лимит до 5 наша модель засверкала новыми красками, а сам painjob/scin (покрасочная работа или винил) был записан игрой под номером -1. Увеличивая лимит дальше ни к чему хорошему не привело. То максимальное возможное число покрасок сбрасывалось до 4, то вместо 6 и далее покрасок устанавливались какие-то левые текстуры, иногда просто сбрасывая покраску. В общем на этом и все. Особого смыла от добавления 5го винила не вижу, т.к. мы не сможем установить его в тюнинг-ателье. Кроме как установкой через клео-скрипты. На данный момент я попросту не нашел строки куда разработчиками были прописаны цены на покраски. [spoiler=Код] {$CLEO .cs} thread "CAR1" :Car wait 0 if 00DD: actor $PLAYER_ACTOR driving_car_with_model 562 jf @Car 03C0: 0@ = actor $PLAYER_ACTOR car if and 0AB0: key_pressed 9 // Tab+X 0AB0: key_pressed 88 // then 0988: get_car 0@ paintjob 2@ 0AF0: write_int 2@ to_ini_file "CLEO\car.ini" section "Car" key "Number" // Текущая покрасочная работа. Не обращайте внимания. Чисто для моих тестов 06EC: get_car 0@ number_of_color_indices_to 3@ // Получим количество возможных покрасочных работ для данного авто 0AF0: 3@ = get_int_from_ini_file "CLEO\car.ini" section "Car" key "Max" // Присвоим максимальное число покрасок из ини фала. Хотя можно просто присвоить end // значение переменной. Но не пробовал. if 0AB0: key_pressed 48 // Жмем 0 then 06ED: set_car 0@ paintjob 0 // Будет выбрана покрасочная работа elegy1 end if 0AB0: key_pressed 49 // Жмем 1 then 06ED: set_car 0@ paintjob 1 // Будет выбрана покрасочная работа elegy2 end if 0AB0: key_pressed 50// Жмем 2 then 06ED: set_car 0@ paintjob 2 // Будет выбрана покрасочная работа elegy3 end if 0AB0: key_pressed 51 // Жмем 3 then 06ED: set_car 0@ paintjob 3 // В моем случае elegy4 end if 0AB0: key_pressed 52 // Жмем 4 then 06ED: set_car 0@ paintjob 4 // В моем случае elegy5 end jump @Car [spoiler=Скрин]http://www.imageup.ru/img218/thumb/53288760.jpg Не обращайте внимания, что 5 скин просто вся тачка голубенькая, так и задумано. car.rar Совсем забыл. На просторах интернета нашел интересный скрипт, который тоже позволяет добавлять новые покрасочные работы, но ,увы и ах, потестить мне его не удалось. Как сажусь в тачку и пишу 'PJ' (условия кода, чтобы встала покраска) получаю вылет. Пробовал изменять код, исход один и тот же - вылет при желании перекрасить авто. Может у кого удастся запустить. Easy Paintjobs (Junior_Djjr) для работы нужен newOpcodes.cleo. Изменено 17 февраля, 2019 пользователем Constantines Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
kenking Опубликовано 19 февраля, 2019 Жалоба Поделиться Опубликовано 19 февраля, 2019 Но подняв этот лимит до 5 наша модель засверкала новыми красками, а сам painjob/scin (покрасочная работа или винил) был записан игрой под номером -1. Увеличивая лимит дальше ни к чему хорошему не привело. То максимальное возможное число покрасок сбрасывалось до 4, то вместо 6 и далее покрасок устанавливались какие-то левые текстуры, иногда просто сбрасывая покраску. В общем на этом и все.Это давно известно. В классе CVehicleModelInfo под текстуры для покрасок зарезервировано место для четырёх штук - short m_anRemapTxds[4]; Дальше в структуре идёт неиспользуемые два байта, туда видимо и записывается пятая покраска. Обойти это ограничение в плагине можно так: vehicle->m_pRemapTexture = texture; Пример: #include "plugin.h" #include "common.h" #include "CModelInfo.h" #include "CTxdStore.h" #include "CKeyGen.h" #include "extensions\KeyCheck.h" using namespace plugin; class VehicleTexture { public: static int index; static void Remap() { KeyCheck::Update(); if (KeyCheck::CheckWithDelay('P', 1000)) { CPed *player = FindPlayerPed(-1); if (player) { if (player->m_pVehicle && player->m_nPedFlags.bInVehicle) { TxdDef *txd = CTxdStore::ms_pTxdPool->GetAt(CModelInfo::ms_modelInfoPtrs[player->m_pVehicle->m_nModelIndex]->m_nTxdIndex); if (txd) { RwTexture *texture = nullptr; switch (index) { case 0: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint1")); break; case 1: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint2")); break; case 2: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint3")); break; case 3: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint4")); break; case 4: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint5")); break; case 5: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint6")); break; case 6: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint7")); break; case 7: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint8")); break; case 8: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint9")); break; case 9: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint10")); break; case 10: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint11")); break; case 11: texture = RwTexDictionaryFindHashNamedTexture(txd->m_pRwDictionary, CKeyGen::GetUppercaseKey("paint12")); break; case 12: player->m_pVehicle->m_pRemapTexture = nullptr; break; } if (texture) { player->m_pVehicle->m_pRemapTexture = texture; if (index <= 11) ++index; else index = 0; } else { player->m_pVehicle->m_pRemapTexture = nullptr; index = 0; } } } } } } VehicleTexture() { Events::gameProcessEvent += Remap; } } vehTexture; int VehicleTexture::index = 0; В txd модели добавить покраски с названиями paint1 - paint12 (не обязательно все 12, можно любое количество до 12 включительно).Плагин поместить в корневой каталог игры.В архиве с плагином для примера два изменённых txd стандартных моделей.Покраски ставятся нажатием клавиши P (англ.) P.S. Сегодня юбилей - 10 лет, как я зарегистрировался на GCU paint.rar 6 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Constantines Опубликовано 19 февраля, 2019 Жалоба Поделиться Опубликовано 19 февраля, 2019 Но это пока тоже не решение. Так как в трансфендере мы не сможем оформить эти покраски. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.