You are not logged in.
to XotaBi4b
а проверку на существование машины делать разве не нужно? или я не прав
Offline
Починил. Забыл поставить эту защиту от д**ака
GTA SA CrashKiller by MadniX , Virtual_Key_Codes for opcode 0AB0
Offline
Ребята, скажите пожалуйста, можно ли прицепить компонент тюнинга для машины, которой этот компонент подходить в тюнинге не должен? Например, спойлер от Wang Cars прицепим на лоурайдер? И какими командами это можно сделать?
Offline
@Seemann - hey i need a little help i downloaded sannybuilder and cleo library and it work fine my game dont crash but when i put a cleo mod in the cleo folder it dont work im running vista would that have anything to do with it please help:cry:
Offline
Вариант1: Если хочешь чтобы тачка каталась без водилы, а ты пассажир, то вкл опкод 072B. в игре садишся только в пустые тачки.
Вариант 2: садишся водителем жмёшь кнопки Z+X и тачка сама ездит. Включать опкод 072B не надо.
О! спасибо большое это как раз оно самое!=)
Вот что у меня в итоге получилось в совмещении этих двух команд:
{$CLEO .cs} //-------------MAIN--------------- 0000: NOP :DRIVER_1 wait 0 03C0: 0@ = actor $PLAYER_ACTOR car $MAX_SPEED = 24.5 if Player.Defined($PLAYER_CHAR) else_jump @DRIVER_1 if Player.Controllable($PLAYER_CHAR) else_jump @DRIVER_1 if Actor.Driving($PLAYER_ACTOR) else_jump @DRIVER_1 if and 0AB0: key_pressed 90 0AB0: key_pressed 65 // Z + A else_jump @DRIVER_3 018C: play_sound 1058 at 0.0 0.0 0.0 0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET 02CE: 4@ = ground_z_at 1@ 2@ 3@ 02C2: car 0@ drive_to 1@ 2@ 4@ 00AE: set_car 0@ traffic_behaviour_to 2 0423: set_car 0@ improved_handling_to 1.5 // (float) Car.SetMaxSpeed(0@, $MAX_SPEED) wait 1000 jump @DRIVER_END jump @DRIVER_END :DRIVER_2 wait 0 03C0: 0@ = actor $PLAYER_ACTOR car $MAX_SPEED = 24.5 if Player.Defined($PLAYER_CHAR) else_jump @DRIVER_2 if Player.Controllable($PLAYER_CHAR) else_jump @DRIVER_2 if Actor.Driving($PLAYER_ACTOR) else_jump @DRIVER_2 if and Actor.Driving($PLAYER_ACTOR) 0AB0: key_pressed 90 0AB0: key_pressed 88 // Z + X else_jump @DRIVER_2_2 00A7: car 0@ drive_to -1 -1 -1 00A8: set_car 0@ to_psycho_driver 04BA: set_car 0@ speed_to 10.0 00AD: set_car 0@ max_speed_to $MAX_SPEED 00AE: set_car 0@ traffic_behaviour_to 2 wait 1000 jump @DRIVER_END jump @DRIVER_END :DRIVER_2_2 jump @DRIVER_2 :DRIVER_3 jump @DRIVER_1 :DRIVER_END wait 0 if and Actor.Driving($PLAYER_ACTOR) 0AB0: key_pressed 90 0AB0: key_pressed 81 // Z + Q else_jump @DRIVER_4 018C: play_sound 1058 at 0.0 0.0 0.0 03C0: 0@ = actor $PLAYER_ACTOR car 04BA: set_car 0@ speed_to 0.0 00AD: set_car 0@ max_speed_to 0.0 05CD: AS_actor $PLAYER_ACTOR exit_car 0@ wait 1000 jump @DRIVER_1 :DRIVER_4 if and 0AB0: key_pressed 90 0AB0: key_pressed 67 // Z + C else_jump @DRIVER_5 018C: play_sound 1058 at 0.0 0.0 0.0 0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET 02CE: 4@ = ground_z_at 1@ 2@ 3@ 02C2: car 0@ drive_to 1@ 2@ 4@ wait 1000 jump @DRIVER_END :DRIVER_5 if and 0AB0: key_pressed 90 0AB0: key_pressed 87 // Z + W else_jump @DRIVER_6 if not $MAX_SPEED > 50.0 else_jump @DRIVER_7 $MAX_SPEED += 10.0 018C: play_sound 1133 at 0.0 0.0 0.0 Car.SetMaxSpeed(0@, $MAX_SPEED) wait 1000 :DRIVER_7 jump @DRIVER_END :DRIVER_6 if and 0AB0: key_pressed 90 0AB0: key_pressed 83 // Z + S else_jump @DRIVER_8 if $MAX_SPEED >= 10.0 else_jump @DRIVER_9 $MAX_SPEED -= 10.0 018C: play_sound 1133 at 0.0 0.0 0.0 Car.SetMaxSpeed(0@, $MAX_SPEED) wait 1000 :DRIVER_9 jump @DRIVER_END :DRIVER_8 jump @DRIVER_END
Я пытался сделать так что бы на Z + A машина ехала на маркер, а на Z + X просто каталась, Z + W - увеличить скорость, Z + S - уменьшить, Z + С - обновить кординаты когда тачка на маркер едет, если вдруг затупила, Z + Q выход из машины, в итоге всё работает кроме Z + X!=) Что я не так сделал?=)
Я так же попробовал добавить в начало:
:DRIVER_Select wait 0 if thread @DRIVER_1 or @DRIVER_2 then jump @DRIVER_END wait 250 end
Но после этого кикает из игры) Как сделать что бы при выполнении @DRIVER_1 или @DRIVER_2 был переход на @DRIVER_END?)
Last edited by Driver (21-04-2009 21:25)
Offline
Хорошо бы убрать глобльную переменную $MAX_SPEED
А Z + X - попробуй вытащить в тдельный скрипт(или поток) и проверить работоспосоность.
Или использовать gosub
Поправьте меня если я ошибаюсь
только вежливо :)
Offline
Ребята, помогите со скриптом! Почему он активируется сам, без нажатия на установленную кнопку?
{$CLEO .cs} :PPSTUFD thread 'SuperCar' :PPSTUFD_11 wait 0 if and 8AB0: key_pressed 17 Player.Defined($PLAYER_CHAR) Actor.Driving($PLAYER_ACTOR) jf @PPSTUFD_11 03C0: 2@ = actor $PLAYER_ACTOR car Model.Load(#MINIGUN) :PPSTUFD_60 wait 0 if Model.Available(#MINIGUN) jf @PPSTUFD_60 10@ = Car.Model(2@) 07E4: get_model 10@ dimensions_cornerA_to 25@ 3@ 4@ dimensions_cornerB_to 5@ 6@ 7@ 0087: 8@ = 5@ // (float) 8@ *= 0.63 0087: 9@ = 5@ // (float) 9@ *= -0.63 0087: 10@ = 6@ // (float) 10@ *= 1.0 10@ -= 1.4 0087: 11@ = 7@ // (float) 11@ *= 0.23 11@ += 0.23 22@ = Object.Create(#MINIGUN, 0.0, 0.0, 0.0) 23@ = Object.Create(#MINIGUN, 0.0, 0.0, 0.0) 0681: attach_object 22@ to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 29.0 92.4 0681: attach_object 23@ to_car 2@ with_offset 9@ 10@ 11@ rotation 0.0 29.0 92.4 wait 250 10@ = Car.Model(2@) 07E4: get_model 10@ dimensions_cornerA_to 25@ 3@ 4@ dimensions_cornerB_to 5@ 6@ 7@ 0087: 8@ = 5@ // (float) 8@ *= 0.61 0087: 9@ = 5@ // (float) 9@ *= -0.61 0087: 10@ = 6@ // (float) 10@ *= 0.95 0087: 11@ = 7@ // (float) 11@ *= 0.23 0208: 25@ = random_float_in_ranges -1.0 1.0 0208: 3@ = random_float_in_ranges -1.0 1.0 0208: 4@ = random_float_in_ranges -1.0 1.0 005B: 25@ += 8@ // (float) 005B: 3@ += 9@ // (float) 005B: 4@ += 11@ // (float) :PPSTUFD_501 wait 30 if Player.Defined($PLAYER_CHAR) jf @PPSTUFD_927 if 82BF: not car 2@ sunk jf @PPSTUFD_927 if and not Car.Wrecked(2@) 8AB0: not key_pressed 48 jf @PPSTUFD_927 if Actor.Driving($PLAYER_ACTOR) jf @PPSTUFD_599 if Actor.InCar($PLAYER_ACTOR, 2@) jf @PPSTUFD_927 jump @PPSTUFD_637 :PPSTUFD_599 if and $ONMISSION == 0 0202: actor $PLAYER_ACTOR near_car 2@ radius 50.0 50.0 flag 0 jf @PPSTUFD_927 :PPSTUFD_637 0407: store_coords_to 12@ 13@ 14@ from_car 2@ with_offset 25@ 100.0 4@ 0407: store_coords_to 15@ 16@ 17@ from_car 2@ with_offset 8@ 10@ 11@ 06BC: create_M4_shoot_from 15@ 16@ 17@ target 12@ 13@ 14@ energy 9999 0407: store_coords_to 12@ 13@ 14@ from_car 2@ with_offset 3@ 100.0 4@ 0407: store_coords_to 15@ 16@ 17@ from_car 2@ with_offset 9@ 10@ 11@ 06BC: create_M4_shoot_from 15@ 16@ 17@ target 12@ 13@ 14@ energy 9999 09F1: play_audio_at_actor $PLAYER_ACTOR event 1157 066C: 27@ = attach_particle "GUNFLASH" to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 1.0 0.0 flag 1 8@ *= -1.0 066C: 28@ = attach_particle "GUNFLASH" to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 1.0 0.0 flag 1 064C: make_particle 27@ visible 064C: make_particle 28@ visible 064F: remove_references_to_particle 27@ 064F: remove_references_to_particle 28@ jump @PPSTUFD_501 :PPSTUFD_927 Object.Destroy(22@) Object.Destroy(23@) Car.RemoveReferences(2@) 0A93: end_custom_thread
Offline
опкода 8AB0 нет
почему нет? есть, только функция у него прямо противоположная:
8AB0:not key_pressed 17
именно поэтому скрипт выполняется без нажатия установленной кнопки.
Last edited by KOLLEGA (22-04-2009 11:48)
Поправьте меня если я ошибаюсь
только вежливо :)
Offline
Еще вопросы: как мне сделать, чтобы когда нига выходил из тачки, миниганы уничтожались из памяти и уничтожались сведения о тачке (я там поставил, но чет не работает)?
Я так понял, что строка
06BC: create_M4_shoot_from 15@ 16@ 17@ target 12@ 13@ 14@ energy 999
дает нам луч пуль от М4 с силой стрельбы 999. А как сделать такой же луч, только огненный? Или от ракеты?
{$CLEO .cs} :PPSTUFD thread 'SYSTEM' :PPSTUFD_11 wait 0 if and 0AB0: key_pressed 17 Player.Defined($PLAYER_CHAR) Actor.Driving($PLAYER_ACTOR) jf @PPSTUFD_11 03C0: 2@ = actor $PLAYER_ACTOR car Model.Load(#MINIGUN) :PPSTUFD_60 wait 0 if Model.Available(#MINIGUN) jf @PPSTUFD_60 10@ = Car.Model(2@) 07E4: get_model 10@ dimensions_cornerA_to 25@ 3@ 4@ dimensions_cornerB_to 5@ 6@ 7@ 0087: 8@ = 5@ // (float) 8@ *= 0.63 0087: 9@ = 5@ // (float) 9@ *= -0.63 0087: 10@ = 6@ // (float) 10@ *= 1.0 10@ -= 1.4 0087: 11@ = 7@ // (float) 11@ *= 0.23 11@ += 0.23 22@ = Object.Create(#MINIGUN, 0.0, 0.0, 0.0) 23@ = Object.Create(#MINIGUN, 0.0, 0.0, 0.0) 0681: attach_object 22@ to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 29.0 92.4 0681: attach_object 23@ to_car 2@ with_offset 9@ 10@ 11@ rotation 0.0 29.0 92.4 wait 250 10@ = Car.Model(2@) 07E4: get_model 10@ dimensions_cornerA_to 25@ 3@ 4@ dimensions_cornerB_to 5@ 6@ 7@ 0087: 8@ = 5@ // (float) 8@ *= 0.61 0087: 9@ = 5@ // (float) 9@ *= -0.61 0087: 10@ = 6@ // (float) 10@ *= 0.95 0087: 11@ = 7@ // (float) 11@ *= 0.23 0208: 25@ = random_float_in_ranges -1.0 1.0 0208: 3@ = random_float_in_ranges -1.0 1.0 0208: 4@ = random_float_in_ranges -1.0 1.0 005B: 25@ += 8@ // (float) 005B: 3@ += 9@ // (float) 005B: 4@ += 11@ // (float) 03E5: show_text_box 'Pz_T67' :PPSTUFD_501 wait 30 if Player.Defined($PLAYER_CHAR) jf @PPSTUFD_927 if 82BF: not car 2@ sunk jf @PPSTUFD_927 if and not Car.Wrecked(2@) 8AB0: not key_pressed 48 jf @PPSTUFD_927 if Actor.Driving($PLAYER_ACTOR) jf @PPSTUFD_599 if Actor.InCar($PLAYER_ACTOR, 2@) jf @PPSTUFD_927 jump @PPSTUFD_637 :PPSTUFD_599 if 0202: actor $PLAYER_ACTOR near_car 2@ radius 50.0 50.0 flag 0 jf @PPSTUFD_927 :PPSTUFD_637 if 00E1: player 0 pressed_key 17 jf @PPSTUFD_501 0407: store_coords_to 12@ 13@ 14@ from_car 2@ with_offset 25@ 100.0 4@ 0407: store_coords_to 15@ 16@ 17@ from_car 2@ with_offset 8@ 10@ 11@ 06BC: create_M4_shoot_from 15@ 16@ 17@ target 12@ 13@ 14@ energy 999 0407: store_coords_to 12@ 13@ 14@ from_car 2@ with_offset 3@ 100.0 4@ 0407: store_coords_to 15@ 16@ 17@ from_car 2@ with_offset 9@ 10@ 11@ 06BC: create_M4_shoot_from 15@ 16@ 17@ target 12@ 13@ 14@ energy 999 09F1: play_audio_at_actor $PLAYER_ACTOR event 1157 066C: 27@ = attach_particle "GUNFLASH" to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 1.0 0.0 flag 1 8@ *= -1.0 066C: 28@ = attach_particle "GUNFLASH" to_car 2@ with_offset 8@ 10@ 11@ rotation 0.0 1.0 0.0 flag 1 064C: make_particle 27@ visible 064C: make_particle 28@ visible 064F: remove_references_to_particle 27@ 064F: remove_references_to_particle 28@ jump @PPSTUFD_501 :PPSTUFD_927 if and Actor.Dead($PLAYER_ACTOR) not Actor.InCar($PLAYER_ACTOR, 2@) jump @PPSTUFD_927 Object.Destroy(22@) Object.Destroy(23@) Car.RemoveReferences(2@) jump @PPSTUFD_11
Last edited by GTASA (22-04-2009 13:27)
Offline
Поставь проверку на Actor.InCar. Если да, то на блок отключения скрипта. Если нет, то удаляй модели из памяти и возвращайся на самый первый блок.
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
Прошу прощения, если уже обсуждалось. Если мне не хватает 32 переменных в клео-скрипте, то можно компилировать его в клео миссию, тогда количество локальных переменных увеличится до 1024, но это общий лимит локальных переменных. То есть если в клео-миссии 1024 лок.переменных, то других скриптов одновременно с ней загружать нельзя. Если в клео-миссии, предположим 100 лок. переменных, то одновременно с ней можно использовать другие скрипты, т.к. общий лимит не превышен. Я правильно всё понял?
Offline
Если не хватает переменных , то зайди в Сервис=> Настройки и сними галочку с пункта Проверка локальных переменных.
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
у меня вопрос по статическим адресам. Насколько я понимаю, в дизасме этим адресам соответствуют data-блоки (где резервируется память под какие-то значения). Но определение по размеру почему-то не всегда совпадает. Например, по адресу 0xB6FB54 должен располагаться хэндл актера, в которого целится игрок. То есть 4 байта, dword. А в дизасме там резервируется несколько байтов по отдельности. Как быть? Это вообще справедливо, что я этим адресам в иде присваиваю имена статических адресов? И как может быть такое:
0xC7F158 - Checkpoint block start. Each block is 38 bytes, but theres always only two at a time.
* +0 = [byte] Type of checkpoint
* +2 = [byte] RGBA color value
* +4 = [float] X-axis Position...
На RGBA-структуру отводится всего 2 байта?
или вот:
# 0xB79496 - [float] Pistol stat
# 0xB79498 - [float] Silenced pistol stat
Last edited by Alien (23-04-2009 16:33)
Offline
@Den_spb - локальные переменные текущей миссии хранятся в отдельном блоке памяти (все 1024). Они не пересекаются с переменными потоков (32+2 в каждом потоке) вообще никак. Поэтому можно одновременно с миссией свободно использовать в других скриптах свои локальные переменные.
Опция "не проверять локальные переменные" не дает увеличения количества переменных, а только отключает проверку при компиляции. превышение лимита переменных в скрипте может привести к проблемам.
@Alien -
о адресу 0xB6FB54 должен располагаться хэндл актера, в которого целится игрок. То есть 4 байта, dword. А в дизасме там резервируется несколько байтов по отдельности.
это нормально. Иногда IDA не показывает, что по данному адресу находится DWORD или WORD, а просто выводит байты. Это можно править вручную кнопкой D.
* +0 = [byte] Type of checkpoint
* +2 = [byte] RGBA color value
* +4 = [float] X-axis Position...
тут опечатка, должно быть +1 RGBA color value
# 0xB79496 - [float] Pistol stat
# 0xB79498 - [float] Silenced pistol stat
тут тоже. эти адреса должны быть выравнены по 4, поэтому в первом случае будет 0xB79494 (не проверял).
Offline
ага, спасибо. Я примерно так и думал. Просто хотел удостовериться.
А вот с RGBA все равно неувязочка. Скорее всего это RGB - 3 байта. Там есть еще другие RGBA - они по 4 байта
* 0xBAB22C - [byte] Health bar/red text/enemy marker/anything red color (RGBA, 4 bytes)
* 0xBAB230 - [byte] Money font color/vehicle entry name/green text/anything green color (RGBA, 4 bytes)
* 0xBAB238 - [byte] White text color (RGBA, 4 bytes)
* 0xBAB240 - [byte] Main menu title border (RGBA, 4 bytes)
* 0xBAB244 - [byte] Wanted level/yellow text color (RGBA, 4 bytes)
* 0xBAB24C - [byte] Radio station text color (RGBA, 4 bytes)
Offline
Ребята, а каким опкодом проверяется скорость тачки? Мне надо "если скорость машины такая-та, то что-то происходит".
...
if
если скорость тачки = хз
else_jump @...
...
Offline
Такого опкода нет. Надо сначала записать скорость машины в переменную, затем сравнить ее с опред. значением. Для надежности лучше сравнивать не с одним значением скорости, а с небольшим диапазоном, т.к. машина может не достигнуть точно указанного значения:
02E3: 1@ = car 0@ speed
if and
1@ > 25.0
1@ < 26.0
then
<что-то происходит>
end
А если что-то должно происходить при разгоне машины до опред. скорости, то можно написать и так:
02E3: 1@ = car 0@ speed
if
1@ >= 25.0
then
<что-то происходит>
end
Не нужно забывать, что значения указываются в м/с (1 м/с = 3,6 км/ч)
Last edited by Den_spb (30-04-2009 18:03)
Offline
а ты уверен что это m/s и вообще так то, это скорость перемещения машины в пространстве, если быть точным. Почему сомнения т.к. если взять не 3.6, а 5 то скорость становится реальной по крайней мере совпадает с handling.cfg.
I know everything and nothing...
Offline
Да, уверен и вот почему. Когда-то я проводил эксперимент. Для того, чтобы узнать, в каких единицах выводится на экран скорость поезда в миссии машиниста, я разгонял его до определенной постоянной скорости, снимал координаты начала и конца прямого участка (а они определяются в метрах), замерял время прохождения участка. В итоге оказалось, что скорость выводится в м/с. Потом посмотрел эту миссию в мэйне. Там значение скорости ни на что не домножается, только переводится из float в integer, потом выводится на экран.
Насчет того, что определяется пространственная скорость - это правильно, потому что машина может и в горку ехать, не обязательно по плоскости.
Offline
не ну а как быть с handling.cfg, там в чем тогда измеряется, ты кстате попробуй взять для того же поезда.
и ответь мне please, а то для меня это очень важно, раз ты доказал такой результат.
I know everything and nothing...
Offline
в игре вообще есть понятие метра? Там вроде своя единица измерения расстояния. И вообще это большой вопрос - что считать метром в виртуальном мире, что будет являться эталоном? В реальном мире метр - это длина пути, проходимая светом в вакууме за какое-то там время. В игре метр мы можем определить только на глазок. Кто знает - может по задумке разрабов в гта все великаны или лилипуты.
То, что системы единиц в скриптах и handling.cfg имеют какую-то определенную связь, - тоже не факт. Берите приближенно коэффициент пропорциональности и не парьте моск ни себе ни другим. Не все же должно в метрах и секундах меряться. Скорее всего сначала разрабы взяли какое-то абстрактное понятие скорости, а уж потом подгоняли "на глазок" в м/с.
Offline
То, что в игре нет метров - это понятно. Но ведь там присутсвуют объекты реального мира (актеры,транспорт), поэтому удобнее оперировать с метрами. Всё это конечно приближенно, поскольку масштаб разных игровых объектов иногда бывает различен. Например, некоторые автомобили заметно велики для актеров.
Насчет хандлинга - попробовал уменьшить параметр N (max velocity) для поезда (Streak), запустил игру. Изменений почему-то никаких не произошло - до какой скорости поезд можно было разогнать раньше, до такой же скорости можно разогнать его и сейчас.
Offline