0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1
Тебе просто надо записать следующее:Код: [Выделить]0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1
...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -555.26 787.57 97.51
fade 1 1000
wait 1000
...
fade 0 1000
wait 1000
0055: put_player $PLAYER_CHAR at -559.85 782.59 22.88
fade 1 1000
wait 1000
...
Вылетает при нажатии F.Дело в том, что команда
Помогайте пожалуйста.
Здравствуйте, всем.
Снова возникала проблема со скрипитом сплавна авто в заданных координатах.
Но с некоторыми не работает, например, PANLANT
Здравствуйте.
Подскажите, пожалуйста, хочу создать пачку денег на точке, а игра вылетает.
004F: create_thread @Noname_12
Вопрос чем разница между ими?.В санни билдере есть такие полезные штуки как кейворды и классы. Они дают возможность не запоминать номера опкодов, а использовать ключевые слова. Например, вместо 0001: wait 0 ms можно написать wait 0, pickup.Picked_up вместо 0214: pickup 3@ picked_up. Классы содержат кейворды объединенные одним объектом (Actor, Car, Object, Model, Camera, Pickup).
0214: pickup 3@ picked_up
И
pickup.Picked_up
также думаю, может быть этот опкод на коробку передач.Нет, этот опкод запрещает тачке кататься по всей карте, заставляя её колесить по одному району(не точно, но как-то так)
0428: set_car $4226 avoid_level_transitions 1
Написал скрипт добавление новой недвижимости со сохранением. Конечно, много ошибок.Опять создание пикапа без проверок нахождения игрока в определенном радиусе. Этот пикап сохранится в файле сохранения и его потом оттуда не выковыришь.
Скажите, пожалуйста, как создать пикап, только на один раз? Взял и больше не появляется.
Сегодня написал скрипт блокировка дверей авто. Если зайти двери блокируются, выйдешь они разблокируется сами,
в машине также это можно сделать нажатием клавишей F. Конечно, есть ошибки. Вам виднее сделать его лучше.
02A7: 13@ = create_icon_marker_and_sphere 31 at -1107.25 -517.35 11.20
вот эти:0570: 13@ = create_asset_radar_marker_with_icon 31 at -1107.25 -517.35 11.20
03BC: 14@ = create_sphere -1107.25 -517.35 11.20
...
:car_tuning_3
0164: disable_marker 13@
03BD: destroy_sphere 14@
{$CLEO}
0570: 13@ = create_asset_radar_marker_with_icon 31 at -1107.25 -517.35 11.20
03BC: 14@ = create_sphere -1107.25 -517.35 11.20 2.0
:car_tuning_1
wait 0
if and
0256: player $PLAYER_CHAR defined
00E0: player $PLAYER_CHAR driving
00F5: player $player_char in_sphere 0 near_point -1107.25 -517.35 11.20 radius 30.0 30.0 30.0
0103: actor $PLAYER_ACTOR stopped_near_point_in_car -1107.25 -517.35 11.20 radius 3.0 3.0 3.0 sphere 0 // never used in VC
0122: player $PLAYER_CHAR pressing_horn
010A: player $PLAYER_CHAR money > 10000
jf @car_tuning_1
0109: player $PLAYER_CHAR money += -10000
016A: fade 0 1000 ms
0001: wait 1500 ms
03C0: 0@ = actor $PLAYER_ACTOR car
053F: set_car 0@ tires_vulnerable 0
016A: fade 1 1000 ms
0001: wait 1500 ms
0394: play_music 1
0164: disable_marker 13@
03BD: destroy_sphere 14@
05DC: end_custom_thread
Вот нашел ломанный скрипт, который должен по нажатию клавиши, взрывать все авто, кроме того, в которым находится игрок.Просто автор этого скрипта поставил на него защиту, из-за которой скрипт неправильно декомпилируется.
Пока моих знаний не хватает понять его, буду рад любым подсказкам.
0x2B0 byte light statusСудя по этому описанию, это поле структуры в 1 байт, и оно является флагом фар. Я имею в виду, что каждый бит этого байта отвечает за свет каждой фары транспортного средства.
• bit 0/1 = front left lights
• bit 2/3 = front right lights
• bit 4/5 = rear left lights
• bit 6/7 = rear right lights
Скажите, пожалуйста, есть такой опкод, который записывает ближайшую машину в переменную.053E: $Car = get_random_car_with_actors -1 in_area $2556 $2658 $445 $446
А почему Вы используйте условный gosub?
взорвать 2 машины около томми
Теперь катана, топор и мачете, отрубает голову с первого удара.
Gosub многие используют, чтоб выглядел скрипт более компактным.Да, я и сам его использую по этой же причине(как и scm-функции). Но вот условный gosub не использовал(не было нужды), поэтому и не могу помочь с ним.
Опкод 01C3 не нужен, являться лишнимОн был лишним конкретно в том случае. Иногда он необходим(когда сам создаешь актера, например, и необходимо, чтобы он исчезал за спиной или вдалеке).
Насчет опкода 0ADC очень дельный совет, теперь использовать его.Да, он удобен для создания чит-кодов. А для опкода 0AB0 номера клавиш можно найти в справке SannyBuilder в разделе CLEO 3 Code Library/Список значений кнопок для 0AB0
Вот написал так.Проверка
Пока не умею пользоваться таймерами в циклах, но буду учиться.Таймерами являются переменные 16@ и 17@. Они начинают свой отсчет сразу при старте скрипта, даже если ты их не используешь.
{$CLEO .cs}
0000:
:1
wait 0
if
05EE: key_pressed 49 // VK_...
jf @1
0006: 0@ = #cleaver // integer values
0006: 1@ = 8 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900
:2
if and
05EE: key_pressed 49 // VK_...
02D8: actor $PLAYER_ACTOR current_weapon == 8
jf @2
0006: 0@ = #machete // integer values
0006: 1@ = 9 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900
:3
if and
05EE: key_pressed 49 // VK_...
02D8: actor $PLAYER_ACTOR current_weapon == 9
jf @3
0006: 0@ = #katana // integer values
0006: 1@ = 10 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
wait 900
:4
if and
05EE: key_pressed 49 // VK_...
02D8: actor $PLAYER_ACTOR current_weapon == 10
jf @4
0006: 0@ = #bat // integer values
0006: 1@ = 6 // integer values
0AB1: call_scm_func @5 2 0@ 1@ var_ret 0
jump @1
:5
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 0
Model.Destroy(0@)
0AB2: ret 0
wait 0
if
05EE: key_pressed 49 // VK_...
jf @1
repeat
wait 0
Model.Load(#cleaver)
until Model.Available(#cleaver)
01B2: give_actor $PLAYER_ACTOR weapon 8 ammo 0
Model.Destroy(#cleaver)
тогда слишком громоздкий код получится
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if
0AB0: key_pressed 0x31
jf @1
if
0039: 1@ == 7
jf @2
0AB1: call_scm_func @fun1 3 #cleaver 8 0 var_ret 3 0@ 1@ 2@
gosub @sab
jump @1
:fun1
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if
0AB0: key_pressed 0x31
jf @1
if
0039: 1@ == 7
jf @2
0AB1: call_scm_func @fun1 3 #cleaver 8 0 var_ret 3 0@ 1@ 2@
gosub @sab
jump @1
:2
if
0039: 1@ == 8
jf @3
0006: 0@ = #machete // integer values
0006: 1@ = 9 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:3
if
0039: 1@ == 9
jf @4
0006: 0@ = #katana // integer values
0006: 1@ = 10 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:4
if
0039: 1@ == 10
jf @5
0006: 0@ = #bat // integer values
0006: 1@ = 6 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:5
if
0039: 1@ == 6
jf @6
0006: 0@ = #chnsaw // integer values
0006: 1@ = 11 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:6
if
0039: 1@ == 11
jf @7
0006: 0@ = #brassknuckle // integer values
0006: 1@ = 1 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:7
if
0039: 1@ == 1
jf @8
0006: 0@ = #screwdriver // integer values
0006: 1@ = 2 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:8
if
0039: 1@ == 2
jf @9
0006: 0@ = #golfclub // integer values
0006: 1@ = 3 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:9
if
0039: 1@ == 3
jf @10
0006: 0@ = #nitestick // integer values
0006: 1@ = 4 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:10
if
0039: 1@ == 4
jf @11
0006: 0@ = #knifecur// integer values
0006: 1@ = 5 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:11
if
0039: 1@ == 5
jf @1
0006: 0@ = #hammer// integer values
0006: 1@ = 7 // integer values
0006: 2@ = 0 // integer values
gosub @sab
jump @1
:sab
0AB1: call_scm_func @fun 3 0@ 1@ 2@ var_ret 0
wait 900
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:fun1
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if
0AB0: key_pressed 0x31
jf @1
if
0039: 1@ == 7
jf @2
0AB1: call_scm_func @fun 3 #cleaver 8 0 var_ret 1 1@
wait 900
jump @1
:2
if
0039: 1@ == 8
jf @3
0AB1: call_scm_func @fun 3 #machete 9 0 var_ret 1 1@
wait 900
jump @1
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 1 1@
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if
0AB0: key_pressed 0x31
jf @1
if
0039: 1@ == 7
jf @2
0AB1: call_scm_func @fun 3 #cleaver 8 0 var_ret 3 0@ 1@ 3@
wait 900
jump @1
:2
if
0039: 1@ == 8
jf @3
0AB1: call_scm_func @fun 3 #machete 9 0 var_ret 3 0@ 1@ 3@
wait 900
jump @1
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 3 0@ 1@ 3@
{$CLEO .cs}
0006: 1@ = 7
:1
wait 0
if
0AB0: key_pressed 0x31
jf @1
if
0039: 1@ == 7
jf @2
05F6: call_scm_func @fun params_count 3 #cleaver 8 0 0@ 1@ 2@
gosub @sab
jump @1
:fun
0006: 0@ = 0@ // integer values
0006: 1@ = 1@ // integer values
0006: 2@ = 2@ // integer values
0AB2: ret 3 0@ 1@ 2@
:sab
0AB1: call_scm_func @fun1 3 0@ 1@ 2@ var_ret 0
wait 900
return
:fun1
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:2
if
0039: 1@ == 8
jf @1
05F6: call_scm_func @fun params_count 3 #machete 9 0 0@ 1@ 2@
gosub @sab
jump @1
0AB1: call_scm_func @fun1 3 0@ 1@ 2@ var_ret 0
не нужно писать "var_ret 0". Просто сразу пишешь получаемые параметры. А поскольку тут их нет - ничего вообще писать не нужно:0AB1: call_scm_func @fun1 3 0@ 1@ 2@
и всё.{$CLEO .cs}
0000:
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 // начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 // начало диапазона типа пистолета
:1
while true
wait 0
if // (1 ветка)
0256: player $PLAYER_CHAR defined // игрок жив
then
if // (2 ветка)
0AB0: key_pressed 0x31 // клавиши 1 нажата
then
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка)
8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // функция загр. модели ход. оружия
else
gosub @sab2 // возврат начала диапазона ход. оружия
if // (4 ветка)
0AB0: key_pressed 0x32 // клавиши 1 нажата
then
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (4 ветка)
8039: not 3@ == 276 // проверка это конец диапазона ход. оружия
then
gosub @sab22 // функция загр. пистолетов
else
gosub @sab33 // возврат начала диапазона пистолетов
end
end
end
end
end
end
jump @1
:sab11
000A: 3@ += 1
000A: 4@ += 1
0006: 5@ = 200
return
:sab22 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 3@ 4@ 5@ var_ret 0
wait 900 // задержка между переключениями оружия
return
:sab33
0006: 3@ = 273
0006: 4@ = 16
return
:sab
000A: 0@ += 1
000A: 1@ += 1
0006: 2@ = 0
return
:sab1 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@ var_ret 0
wait 900 // задержка между переключениями оружия
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:sab2
0006: 0@ = 258
0006: 1@ = 0
return
{$CLEO}
0000: NOP
thread "REBOOT"
:REBOOTC
wait 0
if and
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
Player.Defined(0)
jf @REBOOTC
0ABA: end_custom_thread_named 'rbt'
while true
wait 50
if and
0ab0: key_pressed 15 //заменяем на свою
0ab0: key_pressed 16 //заменяем на свою
then break
end
end
0A92: create_custom_thread "rebootc.cs" //тут указываем название скрипта перезагрузки .” у меня это rebootc
wait 1000
thread 'rbt'
0ABA: end_custom_thread_named 'ffaa' //название перезагружаемого потока
wait 50
0A92: create_custom_thread "asdf.cs" //название перезагружаемого скрипта, с вышеуказанным потоком
0acd: show_text_high_priority "Script was reloaded" time 1000
wait 1000
jump @REBOOTC
[code=php]
Хотел, чтобы по нажатию клавиши 2 переключались пистолеты (colt45 и python), но почему-то не работает.Достаточно использовать табуляцию(сдвиг строк на 4 пробела при нажатии клавижи TAB), чтобы увидеть, что проверка второй клавиши находится где-то не там:
:1
while true
wait 0
if // (1 ветка)
0256: player $PLAYER_CHAR defined // игрок жив
then
if // (2 ветка)
0AB0: key_pressed 0x31 // клавиши 1 нажата
then
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка)
8039: not 0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // функция загр. модели ход. оружия
else
gosub @sab2 // возврат начала диапазона ход. оружия
if // (4 ветка)
0AB0: key_pressed 0x32 // клавиши 1 нажата
then
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (4 ветка)
8039: not 3@ == 276 // проверка это конец диапазона ход. оружия
then
gosub @sab22 // функция загр. пистолетов
else
gosub @sab33 // возврат начала диапазона пистолетов
end
end
end
end
end
end
jump @1
Нужно написать имя каждого потока и скрипта который мы хотим перезапустить. Что не очень удобно. Можно сделать так, чтобы он автоматически находил их сам? Например, из файла cleo.А как игра узнает, какой именно скрипт нужно перезагрузить? Тогда уж перезагружать сразу все. Но ведь многие скрипты по-просто не расчитаны на перезагрузку. Да и к тому же: представленный код перезагрузки вполне удобно юзать, когда работаешь над каким-нибудь одним скриптом. Ты же не работаешь над несколькими одновременно, поэтому не вижу проблемы 1 раз изменить код перезагрузки, заменив название перезагружаемого скрипта, чтобы потом спокойно тестировать и работать над своим скриптом...
{$CLEO .cs}
0000:
0006: 0@ = 258 // начало диапазона ход. оружия
0006: 1@ = 0 // начало диапазона типа ход. оружия
0006: 3@ = 273 // начало диапазона пистолета
0006: 4@ = 16 // начало диапазона типа пистолетов
0006: 5@ = 275 // начало диапазона дробовиков
0006: 6@ = 18 // начало диапазона типа дробовика
0006: 7@ = 280 // начало диапазона автоматов
0006: 8@ = 21 // начало диапазона типа автоматов
0006: 9@ = 286 // начало диапазона тяжелого оружия
0006: 10@ = 29 // начало диапазона типа тяжелого оружия
0006: 11@ = 269 // начало диапазона гранат
0006: 12@ = 11 // начало диапазона типа гранат
:1
while true
wait 0
if // (1 ветка)
0256: player $PLAYER_CHAR defined // игрок жив
then
if // (2 ветка)
0AB0: key_pressed 0x31 // клавиши 1 нажата
jf @2
gosub @sab // сдвиг модели ход. оружия на 1 перед
if // (3 ветка)
0039: 0@ == 270 //проверка это конец диапазона ход. оружия
then
gosub @sab1 // возврат начала диапазона ход. оружия
else
gosub @sab2 // функция загр. модели ход. оружия
jump @1
:2
if // (5 ветка)
0AB0: key_pressed 0x32 // клавиши 2 нажата
jf @3
gosub @sab11 // сдвиг модели пистолетов на 1 перед
if // (6 ветка)
0039: 3@ == 276 // проверка это конец диапазона пистолетов
then
gosub @sab22 // возврат начала диапазона пистолетов
else
gosub @sab33 // функция загр. пистолетов
jump @1
:3
if // (7 ветка)
0AB0: key_pressed 0x33 // клавиши 3 нажата
jf @4
gosub @sab1d // сдвиг модели дробовиков на 1 перед
if // (8 ветка)
0039: 5@ == 279 // проверка это конец диапазона дробовиков
then
gosub @sab2d // возврат начала диапазона дробовиков
else
gosub @sab3d // функция загр. дробовиков
jump @1
:4
if // (9 ветка)
0AB0: key_pressed 0x34 // клавиши 4 нажата
jf @5
gosub @sab1a // сдвиг модели автоматов на 1 перед
if // (10 ветка)
0039: 7@ == 285 // проверка это конец диапазона автоматов
then
gosub @sab2a // возврат начала диапазона автоматов
else
gosub @sab3a // функция загр. автоматов
jump @1
:5
if // (11 ветка)
0AB0: key_pressed 0x35 // клавиши 5 нажата
jf @6
if
0039: 1@ == 27
then
gosub @sabm4 // функция загр. m4
else
gosub @sabkr // функция загр. крюгер m4
jump @1
:6
if // (12 ветка)
0AB0: key_pressed 0x36 // клавиши 6 нажата
jf @7
if
0039: 1@ == 29
then
gosub @sabls // лазерная загр. винтовки
else
gosub @sabsp // обычной загр. винтовки
jump @1
:7
if // (13 ветка)
0AB0: key_pressed 0x37 // клавиши 7 нажата
jf @8
gosub @sabhard // сдвиг модели тяжелого оружия на 1 вперед
if // (4 ветка)
0039: 9@ == 291 // проверка это конец диапазона тяжелого оружия
then
gosub @sabhard1 // возврат начала диапазона тяжелого оружия
else
gosub @sabhard2 // функция загр. тяжелого оружия
jump @1
:8
if // (4 ветка)
0AB0: key_pressed 0x38 // клавиши 8 нажата
jf @1
gosub @grena // сдвиг модели гранат на 1 вперед
if // (4 ветка)
0039: 11@ == 273 // проверка это конец диапазона гранат
then
gosub @grena1 // возврат начала диапазона гранат
else
gosub @grena2 // функция загр. гранат
end
end
end
end
end
end
end
end
end
end
jump @1
:sabsp // функция загр. пистолетов
0006: 0@ = 285
0006: 1@ = 28
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabls // функция загр. пистолетов
0006: 0@ = 286
0006: 1@ = 29
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabm4 // функция загр. mp4
0006: 0@ = 280
0006: 1@ = 26
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
0006: 1@ = 26
return
:grena
000A: 11@ += 1
000A: 12@ += 1
0006: 2@ = 200
return
:grena1
0006: 11@ = 269
0006: 12@ = 11
return
:grena2 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 11@ 12@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab1
0006: 0@ = 258
0006: 1@ = 0
return
:sab
000A: 0@ += 1
000A: 1@ += 1
0006: 2@ = 0
return
:sab2 // функция загр. модели ход. оружия
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab11 // сдвиг модели пистолетов на 1 перед
000A: 3@ += 1
000A: 4@ += 1
0006: 2@ = 200
return
:sab22 // возврат начала диапазона пистолетов
0006: 3@ = 273
0006: 4@ = 16
return
:sab33 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 3@ 4@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab1d // возврат начала диапазона дробовиков
000A: 5@ += 1
000A: 6@ += 1
0006: 2@ = 200
return
:sab2d // возврат начала диапазона дробовиков
0006: 5@ = 275
0006: 6@ = 18
return
:sab3d // функция загр. дробовиков
0AB1: call_scm_func @fun 3 5@ 6@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabm // функция загр. пистолетов
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return
:sab1a
000A: 7@ += 1
000A: 8@ += 1
0006: 2@ = 200
return
:sab2a
0006: 7@ = 280
0006: 8@ = 21
return
:sab3a // функция загр. автоматов
0AB1: call_scm_func @fun 3 7@ 8@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabhard
000A: 9@ += 1
000A: 10@ += 1
0006: 2@ = 200
return
:sabhard1
0006: 9@ = 286
0006: 10@ = 29
return
:sabhard2 // функция загр. пистолетов
0AB1: call_scm_func @fun 3 9@ 10@ 2@
gosub @delay // задержка между переключениями оружия
return
:sabkr // функция загр. крюгер
0006: 0@ = 276
0006: 1@ = 27
0006: 2@ = 200
0AB1: call_scm_func @fun 3 0@ 1@ 2@
gosub @delay // задержка между переключениями оружия
0006: 1@ = 27
return
:fun
repeat
wait 0
Model.Load(0@)
until Model.Available(0@)
038B: load_requested_models
gosub @delay
01B2: give_actor $PLAYER_ACTOR weapon 1@ ammo 2@
Model.Destroy(0@)
0AB2: ret 0
:delay
16@ = 0
repeat
wait 0
until 0029: 16@ >= 300 // задержка между переключениями оружия
return
[code=html5]
0AC8: 14@ = allocate_memory_size 260
к сожалению, он не компилируется.
Все сделал как Вы сказали, все же выдает ошибку при компиляцияОчень странно - кейворды(а именно их отсутствие и вызвало эту ошибку, судя по скрину) должны устанавливаться вместе с Sanny Builder.
Работают над скриптом по изменению цвета авто, думал за 5 мин напишу, а она вылетает.Опкод 00DA используется только в миссиях, так что замени его на 03C1:
Не знаю почему
actor.Driving($player_char)
Должно быть:actor.Driving($player_actor)
зачем нужен поток в скрипте?Каждый скрипт это и есть поток. А вот задание имени потока действительно необязательно. Оно действительно нужно лишь в том случае, если ты потом захочешь где-нибудь удаленно закрыть этот поток, и это можно сделать лишь по его имени(если оно у него есть).
Создавал маркер перед потоком, чтобы избежать вреда сохранениям.Так какая разница, если игрок может пойти и сохраниться в тот период, когда маркер уже создан, а миссия еще не начата и этот маркер в итоге сохранится в файле сохранения(навредит ему)? Не советую вообще создавать какие-либо маркеры вне миссии, лучше сделай так, чтобы миссия активировалась чит-кодом или еще каким действием. Ведь CLEO-миссии - это лишь баловство(тут и чит-код сойдет). Если хочешь написать полноценную красивую сюжетную линию с кучей миссий и маркерами, как в оригинале, то и делать это стоит как в оригинале - в main.scm. Там уже можно и маркеры, и пикапы, и парковки и прочее создавать и юзать глобальные переменные.
Скажите, пожалуйста, как записать в константы $player_char как ch.Странный вопрос, ведь ты уже записал $ONMISSION в ONM
Скажите, пожалуйста, как записать в константы имя модели- медик"имена моделей" - это лишь упрощение SannyBuilder, на самом деле при компиляции они заменяются на соответствующие ID из IDE файлов.
1@ = actor.Create(16, #MEDIC, 77.3075, -879.1083, 10.4481можно писать
1@ = actor.Create(16, 5, 77.3075, -879.1083, 10.4481Соответственно, в константы тоже следует записывать номер, а можно и также имя модели:
MEDICMODEL = #MEDIC
Как цикл For использовать в качестве условие, что актер 1@ убить 3 раза?Я не практикую высокоуровневый скриптинг для подобных запутанных вещей, и тебе того же советую. Высокоуровневый код хорош только для несложных скриптов и то - чисто для эстетики. И чем сложнее миссии ты будешь писать, тем запутаннее будут эти твои циклы for, while и until. Конечно, Рокстары вроде как писали подобным типом кода, но это их дело. Я скинул примеры моего способа написания миссий, а ты уже смотри, как тебе будет удобно.
Циклом for создаем нужно их количество, так как в vc нет массива.Я показал на примере тех двух миссий, как работать с массивами - всё там работает отлично. У тебя же все 5 актеров записываются в одну и ту же переменную 3@, соответственно работать в дальнейшем ты сможешь только с последним созданным, а других даже удалить не сможешь.
При установки здоровье 150, вылетать
При подъеме денег с убитых врагов идет вылет, что странно.
Как правильно загружать несколько моделей? Через request_model или model.Load()?
0247: request_model #ARMYДля него есть кейворд:
request_model #ARMYА также - команда класса:
model.Load(#ARMY)- все три способа абсолютно легитимны. Просто юзай тот, который тебе кажется наиболее удобным. При компиляции будет один результат.
... ставим $ONMISSION == 1, миссия активировалась- создаем маркер, делаем проверки стоим на маркере, удаляем его и так далее.Ты же не установил флаг, а опять его проверяешь. Двойное равенство - это проверка равна ли левая часть выражения правому? Надо
Странно флаг $ONMISSION == 1 в скрипте не отключает возможность прохождения других миссии, хотя по идеи должен.
...
$ONMISSION = 1
$ONMISSION = 0
В принципе cleo миссия работает, ее можно использовать как шаблон для написание миссии, путем внесения изменений.Если просто "работает" - это еще не значит, что всё сделано правильно, будь пожалуйста внимательнее к коду, чтобы не было таких моментов:
Вы как один из лучших модеров по гта, прекрасно знакомы с языком lua.Я "середнячок" в моддинге(просто относительно эрудирован), а Lua я не знаю совершенно...
Раньше придерживался девиз "Главное, чтоб работало", сейчас с опытом, хочется переписать все скрипты, начиная с первого, теперь вижу все свои недочеты и серьезные огрехи, которые тогда не замечал.Твой прогресс меня радует - немногие так быстро углубляются в скриптинг, да еще и прислушиваются к советам. Если продолжишь в том же темпе - скоро я тебе уже буду бесполезен ;)
при 6 прохождении начала вылетать с этой ошибкой странноНу тут точно проблема в коде, судя по скрину. Но не факт, что в коде миссии - пробуй перепроходить, удалив все сторонние скрипты. Вообще, тестирование - это очень времязатратный процесс, поэтому тут уж вряд ли тебе кто-то поможет. Тратить большую часть времени на тесты - это бремя скриптера/программиста.
Есть вопрос в чем отличия между этими опкодамиНи в чем, это одинаковые опкоды. Просто изначально сделали второй, а первый добавили для упрощения переноса скриптов из SA.
Plugin SDK. Это круто! Но что это такое? Как пользоваться? Что может? не понятно. Боюсь писать туда, бан получу за тупость еще.Если вкратце, то с помощью этого упрощается написание плагинов для III/VC/SA на языке C++. Всё остальное написано тут (http://forum.gtabuilder.ru/index.php?topic=337.0).
Написал скриптА теперь скомпилируй и декомпилируй его. И увидишь, что в конце скрипт "обрублен", что вызовет краш игры, если игрок не существует.
А как записать координаты в одну строчку? Чтобы удобнее копировать их.
Есть Вы не против, буду выкладывать свои поделки по lua.Да я не против) Главное - чтобы в соответствующем разделе ;)
Очень интересна разница между опкодами создающими и завершающими поток.
Хотел бы научиться писать плагины на C++, жаль пока нет инструкции в видео формате…..Это не ко мне(я сам пока с этим профан). Но по C++ есть достаточно материала в интернете(да и на этом сайте, кстати).
Увидел у Vital на канале, что он использовал.Я знаю одно - при декомпиляции это превращается в белиберду, значит тут что-то не так. Проверь сам и увидишь. Я уже писал, что с высокоуровневым кодингом в scm-скриптинге могут быть большие проблемы, поэтому сам им не пользуюсь, и помочь с этим не могу.
Насчет опкода 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@%f означает, что вместо этого символа будет вставлено float число(дробное), которое записано далее(переменная 1@).
Почему пишется %f %f %f? Что это дает и почему именно так?
XYZ: 1.2 4.5 3.7
Также можно вставлять не только float, но и integer. Для этого вместо %f нужно писать %dПомогло избавиться от вылетов при подбирание денег 004E: end_thread // Завершение потока, но при провале или выполнении миссии, приходится перезагружать сэйв. Думаю решить эту проблему перезагрузкой из другого файла, методом 0A9A.Зачем, если можно вместо завершения(end_thread) скрипта сделать "прыжок"(jump) на его начало?
if
034E: move_object 3@ to -836.77 -901.84 12.05 speed 0.0 0.0 0.05 collision_check 0
then
...
end
0AE3: 3@ = random_object_near_point -836.77 -901.84 15.95 in_radius 5.0 find_next 0 //IF and SET // получаем хендл объекта в заданных координатах
0A98: 15@ = object 3@ struct // получаем структуру по хендлу
15@ += 0x5C // переходим к смещению в структуре, где находится модель объекта
0A8D: 15@ = read_memory 15@ size 2 virtual_protect 0 // вычисляем модель, которая в Вайсе занимает 2 байта (кстати и не только в этой гта)
if
15@ == 826 // проверяем равняется ли модель - 826
then
...
end
0A8C: write_memory 0xBA676C size 1 value 2 virtual_protect 0 // эту строчку добавляешь туда, где надо отключить "Радарный режим"
0A8C: write_memory 0xBA6769 size 1 value 0 virtual_protect 0 // а эту - где надо отключить "Hud"
есть вопрос. Как использовать такие адреса памяти?
0x703997
Выбранный индекс меню [байт]. Сообщение GTAForums
• 00 - Статистика
• 01 - Начало игры
• 03 - Настройка звука
• 04 - Дисплей
• 05 - Язык
• 06 - Карта
На питоне можно писать плагины или только на с++?Не знаю - не пользуюсь им(питоном). Плагины лучше писать строго на c++ . Ведь когда ты забросишь Вайс - знания по c++ останутся, а этот язык будет актуален еще долгие годы.
Есть проблема, она постоянно снижается, не удерживая высоту. Подскажите, пожалуйста, как решить эту проблему?Скорее всего проблема в опкоде автопилота(04D2), но не уверен(не пользовался им). Я предпочитаю задавать скорость и направление движения "вручную"(задавая точные значения в адреса памяти).
нашел только это+0x25 - это смещение от какого-то адреса памяти. От какого адреса - это зависит от того, откуда взята эта информация.
+ 0x25 - [1 байт] - тип бомбы (3 = дистанционный, 2 = зажигание двигателя, 1 = время, 0 = нет)
но как использовать? не знаю.
Вот этот кусочек
0x1FE byte (& 7) car bomb state
Также не нашел адрес памяти гаража кэма.
0219: $681 = create_garage_type 5 door -914.129 -1263.54 10.706 to -906.3 -1266.9 14.421 depth -907.137 -1246.626
скрипт сам по себе небольшой, но работает он крайне медленно, думаю над его оптимизациейК сожалению - тут я не помощник. У меня уйдут часы на разбор, столько времени у меня, увы - нет...
Скажите, пожалуйста, адрес памяти дающий возможность стрелять ракетам из любой машины...Боюсь, я тут не в силах чем-то помочь :(
...
Очень интересна директива $OPCODE понял только, что добавление новых опкодов...
Как добавить звук выстрела? Есть таблица звуков?
как вывести значение переменной на экран?
"First: 5. Second: 0.4."
конечно, очень писать плагины для vc, уроков для нубов нет. Прям горю желанием, сделать, что крутое.
хотелось бы больше уроков по работе ida базой.
Может как-то можно задать движения через память?
018E: stop_sound 4@Последнюю строчку можно удалить(зачем дубликат?), а в опкоде 018C звук 3 изменить на 5 (https://www.gtamodding.com/wiki/018C#Vice_City). Звук был 3 хорош для ворот фабрики мороженого, а для гаража лучше 5(это специальный "гаражный" звук).
018C: play_sound 3 at 1@ 2@ 3@
018E: stop_sound 4@
Дубликат опкода 018E нужен, чтобы точно избежать зависание звука.
только нужно знать адрес памяти. Везде искал его, так и не нашел.
Здравствуйте всем. Скажите пожалуйста, можно ли через cleo двигать объекты?Можно, но лишь те, что прописаны в data/object.dat
к большому сожалению, что только не делал происходит вылет.
как заставить актера стрелять в определенную точку?
[int1]
номер эффекта (список: 1 (https://i.gyazo.com/682db2e13410040db11defc4ed74cf9a.png), 2 (https://i.gyazo.com/47be908042e4862868996f13e4c27778.png), 3 (https://i.gyazo.com/40aa21857ee4f4f81b3688e223210a54.png))
[flt1]
размер
[int2]
Цвет: Red(0-255)
[int3]
Цвет: Green(0-255)
[int4]
Цвет: Blue(0-255)
[int5]
Длительность эффекта в ms
[flt2]
Координаты: X
[flt3]
Координаты: Y
[flt4]
Координаты: Z
[flt5]
Ускорение: X
[flt6]
Ускорение: Y
[flt7]
Ускорение: Z
:Car_1
wait 0
if and
Player.Defined(0)
84AD: not actor $PLAYER_ACTOR in_water
jf @Car_1
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 20.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not 12@ = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not 13@ = random_vehicle_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_wrecked 0
8AE3: not 14@ = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
03C5: create_random_car_for_carpark $cX $cY $cZ 0.0
jump @Car_1
Работает, машины спавнятся, но когда игрок садится в неё, то машина создаётся заново, как это исправить, желательно показать где мои ошибкиТы используешь опкод, создающий пускай и временную, но всё же парковку, а в Вайсе припаркованные авто не могут создаваться ближе чем в радиусе 10 м, поэтому авто у тебя пересоздается.
Вот интересно, почему спавнятся одни и те же машины?Так работает стримминг в Вайсе. Это сделано для экономии памяти: спавнится в основном то, что уже существует неподалеку.
8AE1: not 12@ = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0Поскольку ты не юзаешь эти переменные, ты можешь ставить туда одну и ту же(12@ например). Но это не ошибка, просто экономия переменных(на будущее)
8AE2: not 13@ = random_vehicle_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_wrecked 0
8AE3: not 14@ = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
https://yadi.sk/i/obLVDgGSsgJiJA (https://yadi.sk/i/obLVDgGSsgJiJA) примерУвеличь радиус проверки авто до 12 м. Радиусы проверок педов и объектов оставь равными 2. Проблема повторений, увы, уже глубоко в exe.
Будем делать!В принципе, если хочешь по-больше авто на дорогах - делай больше постоянных парковок классическим методом
Вот ещё интересно, как на дорогах поставить сгоревшие машины?Тебе нужно будет писать уже другой скрипт, который будет спавнить авто в 1000м от игрока, взрывать его там(чтобы не было видно и слышно взрыв), затем перемещать куда-нибудь в зону видимости игрока.
https://yadi.sk/i/UuTauCYa4lHk3Q (https://yadi.sk/i/UuTauCYa4lHk3Q)
Вот ещё интересно, как на дорогах поставить сгоревшие машины?Взрывать машины, чтобы они выглядели сгоревшими, не обязательно. За это отвечает такой флаг (на примере plugun sdk), кстати не только для машин:
https://yadi.sk/i/UuTauCYa4lHk3Q (https://yadi.sk/i/UuTauCYa4lHk3Q)
у этого значения поставить 5 бит в 1, как-то так короче:Ты имеешь в виду 5й бит? Тогда разве не проще через OR? Типа,
0@ |= 32
Или я не так понял? Я сам в этом не силен, руководствуюсь всякими левыми статейками (https://ravesli.com/urok-45-pobitovye-operatory/).Как ты написал через OR - правильно, только вместо 32 надо 16 (10000), 32 это шестой бит.Аа, понятно: я просто считал с 0, поэтому подумал, что речь была о шестом по факту бите :D
:Surv1
thread 'Surv1'
:Surv1_1
wait 0
if and
Player.Defined(0)
not wasted_or_busted
00F5: player $PLAYER_CHAR 0 -984.6564 -568.8753 11.2097 radius 200.0 200.0 200.0
jf @Surv1_1
:Surv1_2
Model.Load(#ARMY)
Model.Load(#MALE01)
Model.Load(#M4)
Model.Load(#SNIPER)
038B: load_requested_models
:Surv1_3
wait 0
if and
Model.Available(#ARMY)
Model.Available(#MALE01)
Model.Available(#M4)
Model.Available(#SNIPER)
jf @Surv1_3
Actor.Create($SUR1, CivMale, #ARMY, -898.8752, -550.2214, 22.4789)
Actor.Angle($SUR1) = 98.9238
Actor.Create($SUR2, CivMale, #MALE01, -935.8588, -518.7619, 27.9093)
Actor.Angle($SUR2) = 86.1648
Actor.Health($SUR1) = 300
Actor.Health($SUR2) = 300
01B2: give_actor $SUR1 weapon 26 ammo 320
02E2: set_actor $SUR1 weapon_accuracy_to 80
0350: set_actor $SUR1 maintain_position_when_attacked 1
01B2: give_actor $SUR2 weapon 28 ammo 90
02E2: set_actor $SUR2 weapon_accuracy_to 85
0350: set_actor $SUR2 maintain_position_when_attacked 1
Model.Destroy(#ARMY)
Model.Destroy(#MALE01)
Model.Destroy(#M4)
Model.Destroy(#SNIPER)
:Surv1_4
wait 0
if and
Actor.Dead($SUR1)
Actor.Dead($SUR2)
jf @Surv1_4
Actor.RemoveReferences($SUR1)
Actor.RemoveReferences($SUR2)
jump @Surv1_1
Я вот про что спрашивал https://yadi.sk/i/x0dYdWi_rSSRUAТак я тебе и написал - поверни её:
Здравствуйте, хотел узнать, как убрать людей в определённой зоне, мне вот нужно, чтобы в киностудии не спавнились людиЕсли на постоянке - то редактированием data\maps\paths.ipl через специальные редакторы путей, если временно - то опкодом:
:Car
thread 'Car'
:Car_0
wait 0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038: not $ZC1 == 136
8038: not $ZC1 == 155
8038: not $ZC1 == 160
8038: not $ZC1 == 162
8038: not $ZC1 == 176
8038: not $ZC1 == 177
8038: not $ZC1 == 182
8038: not $ZC1 == 183
jf @Car_0
if and
8038: not $ZC1 == 184
8038: not $ZC1 == 187
8038: not $ZC1 == 188
8038: not $ZC1 == 189
8038: not $ZC1 == 190
8038: not $ZC1 == 199
8038: not $ZC1 == 201
8038: not $ZC1 == 202
jf @Car_0
if and
8038: not $ZC1 == 203
8038: not $ZC1 == 214
8038: not $ZC1 == 215
8038: not $ZC1 == 217
8038: not $ZC1 == 218
8038: not $ZC1 == 223
8038: not $ZC1 == 224
8038: not $ZC1 == 225
jf @Car_0
if and
8038: not $ZC1 == 227
8038: not $ZC1 == 232
8038: not $ZC1 == 233
8038: not $ZC1 == 234
8038: not $ZC1 == 235
8038: not $ZC1 == 171
8038: not $ZC1 == 194
8038: not $ZC1 == 195
jf @Car_0
if and
8038: not $ZC1 == 231
8038: not $ZC1 == 165
8038: not $ZC1 == 180
8038: not $ZC1 == 181
jf @Car_0
Model.Load($ZC1)
038B: load_requested_models
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7
:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
jump @Car_1
:Car_3
Model.Destroy($ZC1)
jump @Car_0
:Car
thread 'Car'
:Car_0
wait 0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038: not $ZC1 == 136
8038: not $ZC1 == 155
8038: not $ZC1 == 160
8038: not $ZC1 == 162
8038: not $ZC1 == 176
8038: not $ZC1 == 177
8038: not $ZC1 == 182
8038: not $ZC1 == 183
jf @Car_0
if and
8038: not $ZC1 == 184
8038: not $ZC1 == 187
8038: not $ZC1 == 188
8038: not $ZC1 == 189
8038: not $ZC1 == 190
8038: not $ZC1 == 199
8038: not $ZC1 == 201
8038: not $ZC1 == 202
jf @Car_0
if and
8038: not $ZC1 == 203
8038: not $ZC1 == 214
8038: not $ZC1 == 215
8038: not $ZC1 == 217
8038: not $ZC1 == 218
8038: not $ZC1 == 223
8038: not $ZC1 == 224
8038: not $ZC1 == 225
jf @Car_0
if and
8038: not $ZC1 == 227
8038: not $ZC1 == 232
8038: not $ZC1 == 233
8038: not $ZC1 == 234
8038: not $ZC1 == 235
8038: not $ZC1 == 171
8038: not $ZC1 == 194
8038: not $ZC1 == 195
jf @Car_0
if and
8038: not $ZC1 == 231
8038: not $ZC1 == 165
8038: not $ZC1 == 180
8038: not $ZC1 == 181
jf @Car_0
:Car_0b
Model.Load($ZC1)
038B: load_requested_models
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0b
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7
:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
:Car_3
Model.Destroy($ZC1)
jump @Car_0
:Fuel
thread 'Fuel'
:Fuel_1
wait 0
if and
Player.Defined(0)
Actor.Driving($PLAYER_ACTOR)
not Actor.Dead($PLAYER_ACTOR)
jf @Fuel_3
$CF1 = Actor.CurrentCar($PLAYER_ACTOR)
0209: $CF2 = random_int_in_ranges 0 100
:Fuel_2
wait 0
if and
not Car.Wrecked($CF1)
Actor.InCar($PLAYER_ACTOR, $CF1)
jf @Fuel_3
//00BE: text_clear_all
04F7: status_text $CF2 0 line 1 'FUEL1'
wait 1000
000C: $CF2 -= 1 // integer values
if
not $CF2 >= 0
jf @Fuel_2
$CF2 = 0
02D4: car $CF1 turn_off_engine
:Fuel_3
wait 0
if or
not Actor.InCar($PLAYER_ACTOR, $CF1)
Actor.Dead($PLAYER_ACTOR)
Car.Wrecked($CF1)
jf @Fuel_2
//00BE: text_clear_all
0151: remove_status_text $CF2
Car.RemoveReferences($CF1)
jump @Fuel_1
:Car
thread 'Car'
:Car_0
if
Player.Defined(0)
jf @Car_0
0209: $ZC1 = random_int_in_ranges 130 236
if and
8038: not $ZC1 == 136
8038: not $ZC1 == 155
8038: not $ZC1 == 160
8038: not $ZC1 == 162
8038: not $ZC1 == 176
8038: not $ZC1 == 177
8038: not $ZC1 == 182
8038: not $ZC1 == 183
jf @Car_0
if and
8038: not $ZC1 == 184
8038: not $ZC1 == 187
8038: not $ZC1 == 188
8038: not $ZC1 == 189
8038: not $ZC1 == 190
8038: not $ZC1 == 199
8038: not $ZC1 == 201
8038: not $ZC1 == 202
jf @Car_0
if and
8038: not $ZC1 == 203
8038: not $ZC1 == 214
8038: not $ZC1 == 215
8038: not $ZC1 == 217
8038: not $ZC1 == 218
8038: not $ZC1 == 223
8038: not $ZC1 == 224
8038: not $ZC1 == 225
jf @Car_0
if and
8038: not $ZC1 == 227
8038: not $ZC1 == 232
8038: not $ZC1 == 233
8038: not $ZC1 == 234
8038: not $ZC1 == 235
8038: not $ZC1 == 171
8038: not $ZC1 == 194
8038: not $ZC1 == 195
jf @Car_0
if and
8038: not $ZC1 == 231
8038: not $ZC1 == 165
8038: not $ZC1 == 180
8038: not $ZC1 == 181
jf @Car_0
:Car_0b
Model.Load($ZC1)
038B: load_requested_models
:Car_1
wait 0
if
Player.Defined(0)
jf @Car_3
if
Model.Available($ZC1)
jf @Car_0b
04C4: create_coordinate $cX $cY $cZ from_actor $PLAYER_ACTOR offset 0.0 100.0 0.0
02C1: set $cX $cY $cZ to_car_path_coords_closest_to $cX $cY $cZ
if and
8AE1: not $ZC = random_actor_near_point $cX $cY $cZ in_radius 2.0 find_next 0 pass_deads 0
8AE2: not $ZC = random_vehicle_near_point $cX $cY $cZ in_radius 80.0 find_next 0 pass_wrecked 0
8AE3: not $ZC = random_object_near_point $cX $cY $cZ in_radius 2.0 find_next 0
jf @Car_1
0209: $CARH = random_int 250 1000
0209: $CARD = random_int 0 7
/*not $CARD == 154
not $CARD == 166
not $CARD == 178
not $CARD == 191
not $CARD == 192
not $CARD == 193
not $CARD == 198*/
:Car_2
0208: $ANGLE = random_float 0.0 360.0
00A5: $CARZ = create_car $ZC1 at $cX $cY $cZ
020A: set_car $CARZ door_status_to $CARD
Car.Angle($CARZ) = $ANGLE
Car.Health($CARZ) = $CARH
Car.RemoveReferences($CARZ)
:Car_3
Model.Destroy($ZC1)
jump @Car_0
Снова проблема, игра начала тормозить и фризить, походу опять что-то с моделямиКуда-то пропал начальный
wait 0
сразу после:Car_0
передif