You are not logged in.
3Doomer wrote:нельзя, переменная сама по себе не поменяется
А ты попробуй.
А можно заставить актёра упасть? Не просто анимация падения, а чтоб реально упал?
возможно,эту переменную обновляет один из потоков мейна. Я бы не стал на это надеяться, а то, мало ли, в чьи руки попадёт скрипт...будут вопли "а пачиму не работает" итд
"Лучше переесть, чем недоспать."
GIMS developer
Offline
Как правильно пользоваться sa limit adjuster? Как там правильно выставить пункт vehicles чтобы у меня были новые id для машин? Или хотябы какую нить ссылочку на tutorial дайте. За ранее спасибо!!!
Для этого не нужен SALA. Просто установи More Vehicles с сайта alexander.sannybuilder.com
возможно,эту переменную обновляет один из потоков мейна. Я бы не стал на это надеяться, а то, мало ли, в чьи руки попадёт скрипт...будут вопли "а пачиму не работает" итд
Тоже думаю, что переменную обновляет мэйн. Сами по себе обновляются только переменные-таймеры. В этом случае, при использовании очищенного мэйна например, скрипт работать не будет.
Last edited by Den_spb (23-11-2010 22:34)
Offline
Для этого не нужен SALA. Просто установи More Vehicles с сайта alexander.sannybuilder.com
Я скачал, спасибо!!!, но как ей пользоваться? Там есть какой то текстовый файл, в котором написаны разные id. Это чё там свободные id написаны? Т.е. если я установлю новую машину с каким нибудь из этих id, то она пойдёт?
Offline
Спасибо!!!!
Offline
После прохождения n-ного количества миссий, в какой-то момент может вывалиться ошибка(адреса не помню), лимит аджастер пишет примерно следущее:
Object limit breached.
Recommendation: Increase object value in salimits.ini
object у меня равен 3500, увеличение естественно не помогает. Впрочем суть в том, что ошибку эту я знаю, и все скрипты, которые могут её вызвать убраны уже давно(например гоночный скрипт от zaz'a). Просмотрел все cleo, думаю что из за переписанного спидометра.(больше кандидатов не нашёл, так что пока вернул старый код, буду тестить)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | {$CLEO .cs} 0000: NOP 0A95: enable_thread_saving while true wait 0 0AAA: 25@ = thread 'DSKOOL' pointer if and //textures 30@ == 0 25@ == 0 Actor.Driving( $PLAYER_ACTOR ) $Active_Interior == 0 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle 84A7: not actor $PLAYER_ACTOR driving_boat 80DD: not actor $PLAYER_ACTOR driving_car_with_model #TAXI 80DD: not actor $PLAYER_ACTOR driving_car_with_model #CABBIE then 03C0: 1@ = actor $PLAYER_ACTOR car 0390: load_txd_dictionary "SPEED" 038F: load_texture "STRELK" as 15 // Load dictionary with 0390 first 038F: load_texture "CIF" as 16 // Load dictionary with 0390 first 038F: load_texture "CIFN" as 17 // Load dictionary with 0390 first 038F: load_texture "STRELKN" as 18 // Load dictionary with 0390 first 30@ = 1 {else 03F0: enable_text_draw 0 0391: release_txd_dictionary 30@ = 0 } end //textures while 30@ == 1 wait 0 gosub @CutsceneCheck gosub @WideScreenCheck 00BF: 12@ = current_time_hours, 13@ = current_time_minutes if and 056E: car 1@ defined 29@ == FALSE 28@ == FALSE 12@ >= 6 12@ <= 20 then 02E3: 2@ = car 1@ speed 2@ *= 4.0 03F0: enable_text_draw 0 03E3: set_texture_to_be_drawn_antialiased 1 038D: draw_texture 16 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 03E3: set_texture_to_be_drawn_antialiased 1 074B: draw_texture 15 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255 end if and 056E: car 1@ defined 29@ == FALSE 28@ == FALSE 12@ >= 20 then 02E3: 2@ = car 1@ speed 2@ *= 4.0 03F0: enable_text_draw 1 03E3: set_texture_to_be_drawn_antialiased 1 038D: draw_texture 17 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 03E3: set_texture_to_be_drawn_antialiased 1 074B: draw_texture 18 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255 end if // or //30@ == 2 80DF: not actor $PLAYER_ACTOR driving then 03F0: enable_text_draw 0 wait 1 0391: release_txd_dictionary 30@ = 0 end if or 0ab0: 117 00DD: actor $PLAYER_ACTOR driving_car_with_model #TAXI 00DD: actor $PLAYER_ACTOR driving_car_with_model #CABBIE then 03F0: enable_text_draw 0 wait 1 0391: release_txd_dictionary 30@ = 0 end end //30@ == 1 end :CutsceneCheck if 06B9: cutscene_data_loaded then if 82E9: not cutscene_reached_end then 29@ = TRUE end else 29@ = FALSE end return :WideScreenCheck 0A8D: 27@ = read_memory 0xB6F 065 size 4 virtual_protect 0 if 27@ == 1 then 28@ = TRUE else 28@ = FALSE end return |
Так вот, действительно ли в коде что-то не так, или стоит искать причину ошибки в другом направлении?
ЗЫ. Ошибка проявляется и с 0A95, и без него.
ЗЫЫ.Или мб ошибка здесь?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | { $cleo } wait 0 Model.Load( #NVGOGGLES ) 20@ = 17 20@ *= 2 20@ += 0xB 73458 while true wait 0 if and // Player.Defined($PLAYER_CHAR) 80DF: not actor $PLAYER_ACTOR driving 8818: not actor $PLAYER_ACTOR in_air 0AB0: key_pressed 50 then 0470: 0@ = actor $PLAYER_ACTOR current_weapon wait 10 if 8611: not actor $PLAYER_ACTOR performing_animation "WEAPON_crouch" then 01B2: give_actor $PLAYER_ACTOR weapon 44 ammo 1 wait 20 0A8C: write_memory 20@ size 2 value 0xFF virtual_protect 0 wait 1100 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0@ end if 0611: actor $PLAYER_ACTOR performing_animation "WEAPON_crouch" then 01B2: give_actor $PLAYER_ACTOR weapon 44 ammo 1 wait 20 0A8C: write_memory 20@ size 2 value 0xFF virtual_protect 0 wait 1100 01B9: set_actor $PLAYER_ACTOR armed_weapon_to 0@ 0A8C: write_memory 0xB7347C size 2 value 0xFF virtual_protect 0 end end // if and //Player.Defined($PLAYER_CHAR) 00DF: actor $PLAYER_ACTOR driving 0AB0: key_pressed 50 then wait 100 0A8D: 1@ = read_memory 0xC402B 8 size 4 virtual_protect 0 if 1@ == 0 then 25@ = 5 08B1: enable_night_vision 1 else 25@ = 0 08B1: enable_night_vision 0 end end if and 25@ == 5 00DF: actor $PLAYER_ACTOR driving 00E1: player 0 pressed_key 15 then 08B1: enable_night_vision 0 25@ = 0 end end |
Модель загружается каждый раз, но не удаляется, тем самым сохраняясь и в какой то момент лимит будет превышен?
Last edited by Sergey81 (01-12-2010 12:50)
Offline
Ну по-идее, игра сама очищает неиспользуемые объекты (стример, называется). Ищи ошибку в другом.
Offline
Я не замечал, чтоб стример объекты сохранял в памяти. Хотя может быть и из-за этого, что модель не выгрузил.
Offline
Второй скрипт переписал, теперь модель выгружается. Посмотрю что будет.
мп3 кстати тоже обязательно выгружать во избежание? А то есть скрипт, начинается с
{$CLEO .cs}
0000: NOP
0AAC: 10@ = load_mp3 "CLEO\playlist\01.mp3"
и впоследствии 10@ только проигрывается, не выгружаясь.(А не выгружаю, потому что загрузка фризит игру)
Offline
Похоже, что ошибка из за скрипта missile.cs, по крайней мере потестил значительную часть игры без него - вылетов "SCM Object limit breached" не было. Скрипт полезный, так что просто его выкидывать не хочется, написал для него отдельный загрузчик, чтоб активировался только когда игрок в гидре или хантере. Однако теперь, если загрузить скрипт(сесть в гидру например), потом загрузить какой-нибудь другой сейв, там скрипт запущен не будет - итого, вылет при выстреле из базуки. Тоже самое если опкодом 0ABA его завершать. Есть какой-нибудь способ выгружать его полностью?(подозреваю что ассемблерные вставки пишутся в память и остаются там до завершения игры)
Last edited by Sergey81 (05-12-2010 22:10)
Offline
Limit Adjuster пишет Exception At Address: 0x10F2CC3C
Но по этому адресу нули что со скриптом, что без него, так что незнаю что ещё можно сделать.
UPD.
Так, посмотрел таки исходник повнимательней, вылет можно вылечить к примеру так:
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: NOP wait 0 0A8C: write_memory 0x741A 50 size 4 value 0xE 8565308 virtual_protect 1 0A8C: write_memory 0x741A 54 size 4 value 0xFFFF 6228 virtual_protect 1 0A8C: write_memory 0x741A 58 size 4 value 0x3320C 483 virtual_protect 1 0A8C: write_memory 0x59FE 44 size 4 value 0x8B18244C virtual_protect 1 0A8C: write_memory 0x59FE 48 size 4 value 0x5F8D 0478 virtual_protect 1 0A8C: write_memory 0x59FE4C size 4 value 0x8B1A 7410 virtual_protect 1 0a93: |
Останутся ли другие баги/глюки - незнаю )
UPD2. C адресами непонятки - некоторые меняются, некоторые дают вылет при изменении. Забил на это, пришлось сделать схему, если missile.s не загружен, а память была изменена, запускаем скрипт повторно, вне зависимости от нахождения в гидре/хантере.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | {$CLEO .cs} 0000: while true wait 0 0AAA: 1@ = thread 'MISSILE' pointer if //and 1@ == 0 then 0A8D: 0@ = read_memory 0x00741A 54 size 4 virtual_protect 1 if not 0@ == 0xFFFF 6228 then 0A92: create_custom_thread "missile.s" {0A8C: write_memory 0x00429760 size 4 value 0xE8084289 virtual_protect 1 0A8C: write_memory 0x00429764 size 4 value 0x0030E518 virtual_protect 1 0A8C: write_memory 0x00429768 size 4 value 0x5F20C483 virtual_protect 1 } {0A8C: write_memory 0x0042B458 size 4 value 0xE8085189 virtual_protect 1 0A8C: write_memory 0x0042B45C size 4 value 0x0030C820 virtual_protect 1 0A8C: write_memory 0x0042B460 size 4 value 0x5F20C483 virtual_protect 1 } {0A8C: write_memory 0x5A0B38 size 4 value 0xE8084289 virtual_protect 1 0A8C: write_memory 0x5A0B3C size 4 value 0x00197140 virtual_protect 1 0A8C: write_memory 0x5A0B40 size 4 value 0x5F20C483 virtual_protect 1} {0A8C: write_memory 0x00741A50 size 4 value 0xE8565308 virtual_protect 1 0A8C: write_memory 0x00741A54 size 4 value 0xFFFF6228 virtual_protect 1 0A8C: write_memory 0x00741A58 size 4 value 0x3320C483 virtual_protect 1 } end if or Actor.DrivingVehicleType( $PLAYER_ACTOR , #HUNTER ) Actor.DrivingVehicleType( $PLAYER_ACTOR , #HYDRA ) then 0A92: create_custom_thread "missile.s" end end {if and not 1@ == 0 80DD: not actor $PLAYER_ACTOR driving_car_with_model #HYDRA 80DD: not actor $PLAYER_ACTOR driving_car_with_model #HUNTER then 0ABA: end_custom_thread_named 'MISSILE' end } end |
Last edited by Sergey81 (06-12-2010 06:48)
Offline
В клео 3 есть нормальные опкоды для захвата актёров? Пробовал эти
073F: get_actor_in_sphere 0@ 1@ 2@ radius 20.0 with_pedtype_civilian 1 gang 1 criminal/prostitute 1 handle_as 9@
089E: get_actor_in_sphere 0@ 1@ 2@ radius 1.0 handle_as 9@ // versionB
08E5: get_actor_in_sphere 0@ 1@ 2@ radius 1.0 handle_as 9@
0A3E: unknown_get_actor_in_sphere 0@ 1@ 2@ radius 1.0 1.0 1.0 handle_as 9@
091C: get_actor_in_sphere 0@ 1@ 2@ radius 1.5 model -1 external_script_named "null" handle_as 9@
но некоторые не все типы захватывают, некоторые вообще не действуют.
Самый лучший это 08E5:, но его недостаток в том, что он не действует на актёров созданных скриптом.
Offline
И кому понадобилось взламывать мой майл....пришлось и тут делать новый акк, мой старый ник BoPoH
У меня несколько опросов накопилось, связанных с анимациями в основном...
во всех опкодах, вопроизводяших анимации (0605, 0812, 088A, 0A1A) есть 2 параметра названных LockX и LockY, я предполагал, что если выставить их по 1, то центр тяжести игрока (актёра) будет двигаться вместе с анимацией, но заметил, что второй параметр (LockY) на это никак не влияет, а влияет на это только первый. Вопрос: что делает LockY???)))
Кстати, насчёт параметра типа float в этих опкодах (чаще всего равен 4.0), я заметил что если поставить слишком мало (например 1.0), то вырезается середина анимации, чем меньше этот параметр, тем больше вырезается...для чего это можно использовать? использовалось ли оно в игре как-то?)
И самый значимый, самый главный вопрос:
1 | 088A: actor $PLAYER_ACTOR perform_animation "ROLL" IFP_file "FREERUNNING" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 limT - 1 unknown 0 unknown 1 |
в этом опкоде последний параметр отвечает за перемещение игрока в точку, где заканчивается анимация, т.е. если запустить анимацию (параметр LockX равен 0), камера остаётся на месте, но по окончании анимации игрока перемещает туда где закончилась анимация. Весьма похоже на анимацию перелазивания через забор, однако есть и отличия: если править анимацию перелазивания через забор, то можно заметить, что игрока в любом случае помещает в одно и то же место... и ещё, камера во время анимации двигается вместе с актёром, но судя по всему перемещается она искусственно...Вопрос: как сделать тоже самое? как перемещать камеру, так чтобы можно было вертеть мышкой?) если ответите хотя бы на последний вопрос, вы меня очень выручите! заранее спс
Last edited by Voron295 (06-12-2010 16:55)
Offline
В клео 3 есть нормальные опкоды для захвата актёров? Пробовал эти
Лучший вариант для захвата актёров/транспорта/объектов - Interceptor, т.к. он не имеет ограничений по использованию (педтип, наличие флага уникальности и т.п.). На клео3 Interceptor реализуется с помощью отдельного куска кода (http://sannybuilder.com/forums/viewtopic.php?id=75), на клео4 - с помощью специальных опкодов (0AE1, 0AE2 или 0AE3).
он не действует на актёров созданных скриптом
Точнее сказать - не действует на актёров, имеющих флаг уникальности, т.к. можно снять флаг уникальности у актёра, созданного скриптом - и тогда он ничем не будет отличаться от рандомного педа, или наоборот, включить флаг уникальности у рандомного педа - тогда игра не удалит его ни при каких условиях.
Offline
Флаг уникальности и References - одно и то же?
Offline
Блин, оказалось что лимитную ошибку вызывает совсем не missile.cs. Что хреново, потому что я так и не могу понять откуда она появляется. Единственное, в этот раз она вылезла во время использования airsupport.cs от того же Ryosuke, так что попробую убрать его.
Offline
В клео 3 есть нормальные опкоды для захвата актёров? Пробовал эти
Лучший вариант для захвата актёров/транспорта/объектов - Interceptor, т.к. он не имеет ограничений по использованию (педтип, наличие флага уникальности и т.п.). На клео3 Interceptor реализуется с помощью отдельного куска кода (http://sannybuilder.com/forums/viewtopic.php?id=75), на клео4 - с помощью специальных опкодов (0AE1, 0AE2 или 0AE3).
он не действует на актёров созданных скриптом
Точнее сказать - не действует на актёров, имеющих флаг уникальности, т.к. можно снять флаг уникальности у актёра, созданного скриптом - и тогда он ничем не будет отличаться от рандомного педа, или наоборот, включить флаг уникальности у рандомного педа - тогда игра не удалит его ни при каких условиях.
К сожалению я не могу здесь использовать Interceptor, он плоховлияет на цикл.
А снять флаг уникальности - как это сделать если код его записывает? Тем более в миссии, тогда вообще может вылететь.
А коды клео4 можно использовать в мэйне?
Offline
Offline