You are not logged in.
Hello. I'm trying to do desaturation by layering a filter on top of the environment and learning about screen painting along the way. So far there has been a “haze” (in the screenshot). This is a cleo script for Vice City. And at the same time I season it with rain. I took the text displayed on the screen from the MAIN section and want it to remain invisible (you can use any text from the MAIN section, but it should still remain invisible).
Please help me realize my plans, I still don’t know how to do bleaching any other way.
{$CLEO .cs}
0000:
03A4: name_thread 'BACKFC'
0001: wait 2000 ms
0006: TIMERA = 0 // @ = int
0004: $hz = 0 // $ = int
while true
wait 0
03F0: enable_text_draw 1
if
001B: 5000 > TIMERA // int > @
then
01B6: set_weather 2
0050: gosub @BACKFC_15844
0340: set_text_draw_color 0 0 0 0
045A: text_draw_1number 0.0 0.0 'BIKE' $hz
end
01B7: release_weather
// break
end
03F0: enable_text_draw 0
:BACKFC_15844
//0341: set_text_draw_align_justify 1
//03E4: set_text_draw_align_right 0
0343: set_text_linewidth 3500.0
//0348: set_text_draw_proportional 1
//0342: set_text_draw_centered 0
0345: set_text_draw_in_box 1
033F: set_text_draw_letter_width_height 1.6 55.6
0051: return
//0A93: terminate_this_custom_script
Hello. I'm trying to do desaturation by layering a filter on top of the environment and learning about screen painting along the way. So far there has been a “haze” (in the screenshot). This is a cleo script for Vice City. And at the same time I season it with rain. I took the text displayed on the screen from the MAIN section and want it to remain invisible (you can use any text from the MAIN section, but it should still remain invisible).
Please help me realize my plans, I still don’t know how to do bleaching any other way.
{$CLEO .cs}
0000:
03A4: name_thread 'BACKFC'
0001: wait 2000 ms
0006: TIMERA = 0 // @ = int
0004: $hz = 0 // $ = int
while true
wait 0
03F0: enable_text_draw 1
if //разукрашиваем в нужный цвет на протяжении 5сек
001B: 5000 > TIMERA // int > @ //5sekund
then //5секунд это временное условие, позже заменится на смерть нужного педа
01B6: set_weather 2
0050: gosub @BACKFC_15844
0340: set_text_draw_color 0 0 0 0
045A: text_draw_1number 0.0 0.0 'BIKE' $hz
end
01B7: release_weather
// break
end
03F0: enable_text_draw 0 //когда прошло 5секунд выключаем рисование на экране и погода будет сброшена.
:BACKFC_15844 //вытягиваем эффект на весь экран.
//0341: set_text_draw_align_justify 1
//03E4: set_text_draw_align_right 0
0343: set_text_linewidth 3500.0
//0348: set_text_draw_proportional 1
//0342: set_text_draw_centered 0
0345: set_text_draw_in_box 1
033F: set_text_draw_letter_width_height 1.6 55.6
0051: return
//0A93: terminate_this_custom_script
Hello. I'm trying to do desaturation by layering a filter on top of the environment and learning about screen painting along the way. So far there has been a “haze” (in the screenshot). This is a cleo script for Vice City. And at the same time I season it with rain. I took the text displayed on the screen from the MAIN section and want it to remain invisible (you can use any text from the MAIN section, but it should still remain invisible).
Please help me realize my plans, I still don’t know how to do bleaching any other way.
{$CLEO .cs}
0000:
03A4: name_thread 'BACKFC'
0001: wait 2000 ms
0006: TIMERA = 0 // @ = int
0004: $hz = 0 // $ = int
while true
wait 0
03F0: enable_text_draw 1
if //разукрашиваем в нужный цвет на протяжении 5сек
001B: 5000 > TIMERA // int > @ //5sekund
then //5секунд это временное условие, позже заменится на смерть нужного педа
01B6: set_weather 2
0050: gosub @BACKFC_15844
0340: set_text_draw_color 0 0 0 0
045A: text_draw_1number 0.0 0.0 'BIKE' $hz
end
01B7: release_weather
// break
end
03F0: enable_text_draw 0 //когда прошло 5секунд выключаем рисование на экране и погода будет сброшена.
:BACKFC_15844 //вытягиваем эффект на весь экран.
//0341: set_text_draw_align_justify 1
//03E4: set_text_draw_align_right 0
0343: set_text_linewidth 3500.0
//0348: set_text_draw_proportional 1
//0342: set_text_draw_centered 0
0345: set_text_draw_in_box 1
033F: set_text_draw_letter_width_height 1.6 55.6
0051: return
//0A93: terminate_this_custom_script
Здравствуйте, тема еще актуальна. Я повторял свою просьбу не только здесь, получал ответ. Но видимо оффсеты не те. Я использую ехе-шник версии 1.0
https://media.discordapp.net/attachment … height=536
Код исходный вот такой как на картинке. Главная проблема в том что не отключаются бонусы от фбр (броня), и от полицейской машины (дробовик). От полицейской машины пробовали оффсеты несколько раз - пока пришлось закомментировать.
Зато 100% работает отключение бонуса от скорой помощи. 

Код обновился, теперь работает отключение точно бонуса хп от скорой, и бонуса дробашом от коповозки.
Вот пожалуйста текущий исходный код. Возможно что оффсетом ошиблись, уж не знаю.
{$CLEO .cs}
0000:
03A4: script_name 'Mvlght'
:name1
wait 0
05E5: 0@ = game_version
if
0@ == 0 // integer values
else_jump @name2
0A8C: write_memory 0x69C69C size 4 value 0.0 virtual_protect 1
0A8C: write_memory 0x094AE6C size 2 value 0 virtual_protect 1
0A8C: write_memory 0x5B8974 size 11 value 0x90 virtual_protect 1
0A8C: write_memory 0x5B8987 size 9 value 0x90 virtual_protect 1
0A8C: write_memory 0x5B89C8 size 11 value 0x90 virtual_protect 1
//0A8C: write_memory 0x05B8C1B size 1 value 0x85 virtual_protect 1
:name2
0A93: terminate_this_custom_scriptНо от фбр бонус пока не отключается, как давали броню за посадку в фбр, так и дают.
Тема закрыта, так как решение удалось недавно найти.
Я же тебе уже говорил: проверить настройки SB. Форматирование текста должно быть установлено на "Как есть" или "нижний", чтобы "%d" компилировался в правильном формате.
Но я ведь пробовал. Пока не помогло... 
Здравствуйте, я столкнулся с проблемой. По коду, значение читается и записывается в переменную. В моём случае это целое число. Я хочу выводить из переменной полученное значение.
Это вид в декомпилированном виде.
read_memory 0@ 6848578 2 0 print_formatted_now "%D" 20000 0@
А это исходный вид:
0A8D: 0@ = read_memory 6848578 size 2 virtual_protect 1 0AD1: show_formatted_text_highpriority "%d" time 20000 0@
%d - целое число
Я использовал разные опкоды для вывода текста, но результат был всегда один - буква.
Я просто не понимаю почему вместо числа всё равно выводится буква ?
Проблема решена) Для тех кому интересно решение оно простое - текст в gxt должен быть прописан правильно: в алфавитном порядке, без лишних пробелов, особенно без лишних пробелов между секциями. Работоспособность текста можно проверить простым клео-скриптом выводящий текст на экран, в моём случае опкодом 00ba.
И всё же эта тема останется открытой ненадолго, т.к. возможно и у Вас были случаи когда пикап невозможно было подобрать. Можете описывать свои наблюдения и решения, т.к. другим людям это может помочь. 
Здравствуйте, помогите мне пожалуйста, я столкнулся с проблемой что пикап не подбирается или же не делает то что должен.
Скриптую на вайс сити. В моём случае весь прилагаемый скрипт вшит в main.scm из-за особенностей пикапов и гаражей.
Прежде опишу суть скрипта: суть скрипта в покупке актива с гаражом, в котором можно сохранять тачки. Поэтому используется опкод 0518. Этот код ниже находится до метки :intro, ну эдакий стартер.
:STHBY_50 script_name 'STHBY' wait 0 0518: $PICK = create_available_asset_pickup 'INT_B' at -45.2802 -432.4575 32.0248 price 25000 :STHBY_50_31 wait $DEFAULT_WAIT_TIME if Player.Defined($PLAYER_CHAR) jf @STHBY_50_128 if $ONMISSION == 0 // $ == int jf @STHBY_50_128 if Player.Controllable($PLAYER_CHAR) jf @STHBY_50_128 if Pickup.Picked_up($PICK) jf @STHBY_50_128 00BA: text_styled 'LNKV_L' 15000 ms 2 // Press the ~h~~k~~PED_ANSWER_PHONE~ ~w~button to purchase Staunton Island Safehouse for $~1~ start_mission 83 // Distribution terminate_this_script :STHBY_50_128 jump @STHBY_50_31
Прилагаю скриншот для наглядности.
Затем прописан запуск миссии после завершения нужной мне миссии
И теперь миссия покупки:
//-------------Mission 83--------------- // Originally: Distribution :STHBYY script_name 'STHBYY' $ONMISSION = 1 // $ = int wait 0 030C: progress_made += 1 0169: set_fade_color 0 0 1 fade 0 500 Player.CanMove($PLAYER_CHAR, False) 03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 1 03F4: set_all_vehicles_apply_damage_rules 0 :STHBYY_58 if fading jf @STHBYY_129 wait 0 if not Player.Defined($PLAYER_CHAR) jf @STHBYY_122 0570: 5@ = create_asset_radar_marker_with_icon 5 at -45.2802 -432.4575 32.0248 018B: set_marker 5@ display 2 terminate_this_script :STHBYY_122 jump @STHBYY_58 :STHBYY_129 0570: 5@ = create_asset_radar_marker_with_icon 5 at -45.2802 -432.4575 32.0248 018B: set_marker 5@ display 2 0395: clear_area 1 at -37.7255 -454.517 31.747 range 1.0 0055: put_player $PLAYER_CHAR at -37.7255 -454.517 31.747 0171: set_player $PLAYER_CHAR z_angle_to 276.3156 02A3: enable_widescreen 1 0169: set_fade_color 0 0 1 fade 1 500 Camera.SetPosition(-40.2151, -462.2522, 31.247, 0.0, 0.0, 0.0) Camera.PointAt(-37.9329, -444.0719, 32.0248, 2) :STHBYY_282 if fading jf @STHBYY_324 wait 0 if not Player.Defined($PLAYER_CHAR) jf @STHBYY_317 terminate_this_script :STHBYY_317 jump @STHBYY_282 :STHBYY_324 $1799 = 1 // $ = int $1304 = 1 // $ = int 01E3: text_1number_styled 'STHBYY' number 25000 time 5000 style 6 0529: add 25000 to_money_spent_on_property_stats 0542: add_property 9 to_property_own_stats 0394: play_music 1 043C: set_game_sounds_disable_on_fade 0 wait 2000 00BC: text_highpriority 'BUYSAVE' 3000 ms 1 wait 3000 00BC: text_highpriority 'BUYGARG' 3000 ms 1 02FA: garage $STNTN_HS change_to_type 26 wait 3000 0169: set_fade_color 0 0 1 fade 0 500 :STHBYY_440 if fading jf @STHBYY_486 wait 0 if not Player.Defined($PLAYER_CHAR) jf @STHBYY_479 043C: set_game_sounds_disable_on_fade 1 terminate_this_script :STHBYY_479 jump @STHBYY_440 :STHBYY_486 Camera.SetBehindPlayer Camera.Restore_WithJumpCut Player.CanMove($PLAYER_CHAR, True) 03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 03F4: set_all_vehicles_apply_damage_rules 1 02A3: enable_widescreen 0 0169: set_fade_color 0 0 1 fade 1 500 043C: set_game_sounds_disable_on_fade 1 $ONMISSION = 0 // $ = int mission_cleanup terminate_this_script return
Также я пробовал закомментировать и ставить опкод 8214, тогда миссия точно запускается. Но по замыслу миссия должна запускаться после подбора пикапа.
Привет, уточняю сразу что вопрос касается игры гта вайс сити. Меня интересуют оффсеты, которые:
1) игроку даётся несколько единиц хп если он сел в машину скорой помощи
2) игроку выдается несколько патронов с дробовиком если он сел в полицейскую машину
и как эти фишки от машин возможно отключить ? Нужно какой-то оффсет прочитать/записать через клео ?
Здравствуйте. Скажите пожалуйста как найти id анимации ?
Имя нужной мне анимации (Когда Клод показывает фак: FUCKU). Fire_head, за что ему спасибо объяснил что мне понадобится id анимации и clump, который как-то находится в CEntity. К сожалению больше он мне не объяснил, да и никогда я не искал то что прошу потому что еще не знаю как это делать надо.
Скажу коротко: Я хочу детектить анимацию когда Клод показывает средний палец, чтобы за это игроку было какое-то последствие. Например, если игрок покажет фак копу, то ему дадут звезду.
id анимаций мне подсказали где смотреть: в eAnimations.h В моём случае id анимации фака - 169. Осталось с clump разобраться и правильным вызовом RpAnimBlendClumpGetAssociation
Я верно понял, что таким вот кодом ниже, я смогу проверить показал ли игрок фак ?
:FACK
03A4: script_name 'FACK'
00D6: if and
0256: player $PLAYER_CHAR defined
0038: $FLAG_PLAYER_ON_MISSION == 0 // $ == int
004D: jump_if_false @FACK
0A96: 11@ = actor $PLAYER_ACTOR struct
000A: 11@ += 0x4C
0A8D: 11@ = read_memory 11@ size 4 virtual_protect 1
while true
wait 0
0AA7: call_function_return 0x4055C0 num_params 2 pop 2 169 11@ 0@
if
0@ <> 0
then
0109: player $PLAYER_CHAR money += 100
end
end
004E: terminate_this_scriptЯ пытаюсь действовать так как мне подсказывают:
Хелп! 
Прикрепляю лог, может он поможет. 
Скрипт переписан, в части цикла, но осталась проблема: после сброса розыска надпись выводится в независимости от того где машина. А как мне активировать гараж именно тогда когда машина в гараже покраски и сброшен розыск ?
while true
wait 0
if
0256: player 0 defined
then
if
010F: player 0 wanted_level > 0
then
02FA: garage $SPRAYSHOP1 change_to_type 1
02FA: garage $72 change_to_type 1
02FA: garage $93 change_to_type 1
repeat
wait 0
until 810F: not player 0 wanted_level > 0
02FA: garage $SPRAYSHOP1 change_to_type 5
02FA: garage $72 change_to_type 5
02FA: garage $93 change_to_type 5
end
end
end
Я пишу скрипт цель которого закрывать гараж перекраски если игрок имеет розыск и имеет на хвосте копов. Это значит что гараж должен будет оставаться открытым если игрок имеет звезды розыска, но рядом нет копов. Пока что я видимо не понимаю какой-то принцип у гаражей и поэтому выходят стандартные надписи после сброса розыска. Текущий код в main.scm-е:
:ROGA
thread 'ROGA'
wait 0
00D6: if
0256: player 0 defined
jf @ROGA
while true
wait 0
if
010F: player $PLAYER_CHAR wanted_level > 0
then
0361: close_garage $SPRAYSHOP1
0361: close_garage $72
0361: close_garage $93
else
0360: open_garage $SPRAYSHOP1 //Эти переменные стандартные, т.е. эта переменная у гаража покраски Портленда
0360: open_garage $72 //Стаунтона
0360: open_garage $93 //и Шорсайд-велла
end
end
:ROGA2
0054: store_player $PLAYER_CHAR position_to 0@ 5@ 6@
repeat
wait 0
if
0AE1: 7@ = random_actor_near_point 0@ 5@ 6@ in_radius 35.0 find_next 0 pass_deads 1
jf @ROGA
until 8AE1: 7@ = random_actor_near_point 0@ 5@ 6@ in_radius 35.0 find_next 1 pass_deads 1
end_threadПока что главная проблема в том что выходят стандартные надписи после перекраски машин.
Если игрок отплывет слишком далеко от лодки, игра виснет (с учетом того что телепорт находиться в цикле while true). Сразу в маине скрипт.
Из цикла:
while true
if or
03CE: car $BOMBER_CAR stuck
82CA: car $BOMBER_CAR bounding_sphere_visible
81FC: player $PLAYER_CHAR near_car $BOMBER_CAR radius 90.0 90.0 0
then
04C3: create_coordinate 14@ 15@ 0.0 from_car $BO10 offset 0.0 -65.0 0.0
00AB: put_car $BOMBER_CAR at 14@ 15@ 0.0
end
endЯ пробовал выносить телепорт в новую метку используя госаб, но тогда срабатывает лишь 1 раз
Те стало вот так после госаба:
Эта часть пока что не сидит в цикле (пробую)
if or
03CE: car $BOMBER_CAR stuck
82CA: car $BOMBER_CAR bounding_sphere_visible
81FC: player $PLAYER_CHAR near_car $BOMBER_CAR radius 90.0 90.0 0
then
gosub @RANDCAR2
end:RANDCAR2
04C3: create_coordinate 14@ 15@ 0.0 from_car $BO10 offset 0.0 -65.0 0.0
00AB: put_car $BOMBER_CAR at 14@ 15@ 0.0Но при таком раскладе телепорт работает лишь 1 раз
Помогите пожалуйста, это ситуация безвыходная. Что делать ? Как правильно должно быть ?
По задумке, если лодка застряла где-то то её телепортирует к игроку (на 65единиц сзади). 
04A8: player $PLAYER_CHAR driving_boat это нестандартный для GTA3 опкод, он добавляется через CLEO 2.0
https://github.com/cleolibrary/III.VC.C … .cpp#L1022возможно, что он неправильно реализован, поэтому и выбивает ошибку
Спасибо это исправлено. Мне сейчас нужна помощь по адресам памяти и функциям.
Я пытаюсь заставить полицейскую лодку гоняющуюся стрелять пулями (просто плывет за игроком и должна стрелять пулями постепенно нанося урон). В начале кода была выделена память и смещение, также чуть в других местах и метке randcar прописано обновление координат. Функция стрельбы используется для гта 3 версии 1.1
Помогите мне пожалуйста чтобы лодка могла стрелять, а то она этого не делает совсем. Код прикреплен ниже, если будут вопросы пишите (да хоть в лс).
Помогите пожалуйста. Я пытаюсь создавать случайную лодку, но пока гта 3 выдаёт ошибку на опкод проверяющий что игрок в любой лодке. Я кучу комментариев оставил.
:HIDBOMB
thread 'HIDBOMB'
wait 0
0AC8: 4@ = allocate_memory_size 12
0AC8: 5@ = allocate_memory_size 12
0085: 6@ = 4@
0085: 7@ = 5@
0A8C: write_memory 6@ size 4 value -1337.0 virtual_protect 1
0A8C: write_memory 6@ size 4 value -1488.0 virtual_protect 1
0A8C: write_memory 6@ size 4 value 34.0 virtual_protect 1
0A8C: write_memory 7@ size 4 value 1337.0 virtual_protect 1
0A8C: write_memory 7@ size 4 value 1488.0 virtual_protect 1
0A8C: write_memory 7@ size 4 value 69.0 virtual_protect 1
0AA5: call_function 0x563C30 num_params 3 pop 0 34 5@ 4@
if and
0256: player 0 defined
$flag_player_on_mission == 0
jf @HIDBOMB
03E1: $PACK_1 = packages_found
if
$PACK_1 == 200
then
end_thread
else
repeat
wait 0
03E1: $PACK_2 = packages_found
until 803A: not $PACK_2 == $PACK_1 // $ == $ int
if and
001C: $PACK_2 > $PACK_1 // $ > $ int
$flag_player_on_mission == 0
then
023C: load_special_actor 1 'BOMBER'
0247: request_model #GRENADE
0247: request_model #PREDATOR
0247: request_model #GHOST
repeat
wait 0
until 023D: special_actor 1 loaded
repeat
wait 0
until 0248: model #GRENADE available
repeat
wait 0
until 0248: model #PREDATOR available
repeat
wait 0
until 0248: model #GHOST available
gosub @RANDPLACE // returns 0@ 1@ 2@ (X Y Z)
//00A0: store_actor $BOMBER position_to 0@ 1@ 2@ //float
//0AD1: show_formatted_text_highpriority "%.2f %.2f %.2f" time 20000 0@ 1@ 2@
009A: $BOMBER = create_actor 21 #SPECIAL01 at 0@ 1@ 2@
03FC: actor $BOMBER bind_to_current_island 0
0223: set_actor $BOMBER health_to 200
01B2: give_actor $BOMBER weapon 11 ammo 9999
0249: release_model #GRENADE
02AB: set_actor $BOMBER immunities 0 0 1 0 0
0187: $MARKER_BOMBER = create_marker_above_actor $BOMBER
01CC: actor $BOMBER kill_player 0
while true
wait 0
if or
0117: player $PLAYER_CHAR wasted
0130: player $PLAYER_CHAR busted
80A2: actor $BOMBER alive
then
02AB: set_actor $BOMBER immunities 0 0 0 0 0
break
end
if or
00E9: player 0 0 $BOMBER radius 5.0 5.0
8184: not actor $BOMBER health >= 5
$flag_player_on_mission <> 0
then
00A0: store_actor $BOMBER position_to 0@ 1@ 2@
020C: create_explosion 0 at 0@ 1@ 2@
else
if and
80E9: not player 0 0 $BOMBER radius 20.0 20.0
8123: actor $BOMBER spotted_player $player_char
then
020F: actor $BOMBER look_at_player $player_char
00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
0239: actor $BOMBER run_to 0@ 1@
01CC: actor $BOMBER kill_player 0
end
if and
80E9: not player 0 0 $BOMBER radius 40.0 40.0
82CB: not actor $BOMBER bounding_sphere_visible
then
gosub @RANDPLACE
if
00A2: actor $BOMBER alive
then
00A1: put_actor $BOMBER at 0@ 1@ 2@
01CC: actor $BOMBER kill_player 0
end
end
end
end //конец цикла
wait 2000
end
end
if //условия для езды лодками за актёром
04A8: player $PLAYER_CHAR driving_boat //если Клод в любой лодке
//пока что игра ругается на опкод 04A8.
//0056: player $PLAYER_CHAR 0 -230.0 255.0 -210.0 275.0 //и в зоне (хз какой,
// наверное что-то другое понадобится)
then //то
gosub @RANDCAR
end
0164: disable_marker $MARKER_BOMBER
0164: disable_marker $MARKER_BOMBER1
01C2: mark_actor_as_no_longer_needed $BOMBER
0296: unload_special_actor 1
jump @HIDBOMB
:RANDPLACE
repeat
wait 0
0208: 0@ = random_float -20.0 20.0
0208: 1@ = random_float -20.0 20.0
04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0@ 1@ 0.0
0209: 3@ = random_int 0 2
if
3@ == 0
then
02C0: set 0@ 1@ 2@ to_ped_path_coords_closest_to 0@ 1@ 2@
else
02C1: set 0@ 1@ 2@ to_car_path_coords_closest_to 0@ 1@ 2@
end
until 80C2: not sphere_onscreen 0@ 1@ 2@ 4.0
return
:RANDCAR //случайная злая лодка.
03C1: $BOMBER_CAR = player $PLAYER_CHAR car_no_save
repeat
wait 0
00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0@ 1@ 0.0
0209: 9@ = random_int 0 2
if
9@ == 0
then //по задумке случайная лодка поплывёт за игроком
00A5: $BOMBER_CAR = create_car #GHOST at 0@ 1@ 2@
0187: $MARKER_BOMBER1 = create_marker_above_actor $BOMBER_CAR
else //а за рулём лодки будет подрывник (актёр)
00A5: $BOMBER_CAR1 = create_car #PREDATOR at 0@ 1@ 2@
end
until 80C2: not sphere_onscreen 0@ 1@ 2@ 4.0 //забыл для чего этот конец.
//после спавна гоняем лодки за актёром: полицейка стреляет, а лодка-призрак
//только плывёт сподрывником
//так как хватит близости чтобы подрывник подорвал и лодку свою и лодку игрока.
0AC9: free_allocated_memory 4@
0AC9: free_allocated_memory 5@
end_thread
03C6: current_island == 1
Пока я тестировал скрипт, вышла интересная проблема: если игрок собрал спрятанный пакет на одном острове и переместился на другой остров, неважно как (додо, noclip и т.д.), то актер будет телепортироваться. Но находится он будет в земле, а не на путях педов и машин. Код тот же самый. (пока не измененный)
но тогда он себя подрывает кучу раз стоя на одном месте
а кто ему говорит, что нужно бежать? По условию взрыв происходит если подрывник находится рядом с игроком. Если игрок стоит на месте, что должно произойти? Подрывник ведь тоже будет стоять? Наверно, есть смысл переместить взрыв (опкод 020C) после проверки 02A0: actor $BOMBER stopped.
Т.е. логика должна быть примерно такая
создали подрывника
запускаем бесконечный цикл (while true)проверяем, если игрок или подрывник умер - делаем break
проверяем остановился ли подрывник рядом с игроком
если да, то создаем explosion
если нет, заставляем его бежать
делаем паузу на 2 секунды (тогда серия взрывов будет реже)конец цикла
очистка
Как проверить что игрок на каком-то острове ? Я пытаюсь телепортировать актёра на тот же остров на котором находится игрок опкодом 03fc ? Но он не условный, а других способов я не знаю. Гта 3, если что.
Код обновлён. Вроде как всё верно. Если что-то неверно - слушаю.
Измененный код подрывника. Я не останавливаю игрока, так как это мешает ему кидать гранаты, вместо этого я его заставляю посмотреть в сторону игрока.
Спасибо за типы, возьму на заметку)
Я убирал break, но при первом же подрывании себя подрывник сдох, а затем я закомментировал строку где снимается иммунитет подрывника от взрыва, но тогда он себя подрывает кучу раз стоя на одном месте. А подрывник должен подрываться если игрок близко с подрывником, но если подрывник ещё жив, то он опять должен побежать к игроку чтобы подорваться до тех пор пока он сам не умрет.
Если цикл не прерывать то за подрывником будет хвост взрывов пока он бежит, а он не побежит если к нему не подойти. Но если цикл прерывать то он себя подорвет лишь 1 раз.
Спасибо за пояснения, подрывник себя должен подрывать пока он жив и игрок жив, но если хоть кто-то из них умрёт, то подрывник больше не будет нужен.
Осталась лишь самая странная проблема: подрывник себя подрывает только 1 раз, а потом у него стирается память, а когда именно стирать его память (имеется ввиду все сведения об актёре) я не знаю. Когда это лучше делать ?
Оказывается подрывник дёргался из-за того что я его заставлял бежать к игроку, в случае если игрок далеко стоит, и тогда подрывник тупит.
Закомментировав эту часть кода подрывник стал кидать нормально гранаты:
if
02A0: actor $BOMBER stopped
then
0054: store_player 0 position_to 0@ 1@ 2@
0239: actor $BOMBER run_to 0@ 1@Я забыл где надо смотреть типы актёров.
Спасибо, но это всё сразу в main.scm-е пишется. У меня 2 основные проблемы: подрывник после своего первого подрыва становится бычным трусливым педом и если его ударить, то он будет убегать от игрока, а если он где-то затупит то может не найти игрока, поэтому раньше я давал ему проверку на видимость игрока.
Я пробовал вот так, когда подрывник тупит, чтобы подрывник сразу смотрел в сторону игрока.
if 8123: actor $bomber spotted_player $player_char then 020f: actor $bomber look_at_player $player_char end
Необходимо чтобы подрывник подрывался пока игрок жив.
Но самое странное что подрывник не может кинуть гранату, он ее только хочет кинуть, а потом дергается, в итоге гранату он кинуть не может и она не взрывается.
Здравствуйте. Я пишу скрипт подрывника. Суть: в игре есть 200 спрятанных пакетов, но их охраняет актёр. При сборе каждого пакета этот актёр появляется и агрится на игрока, пока игрок не умрёт. Актёру даны гранаты для нападения и иммунитет от взрывов (чтобы сам не подорвался). Когда игрок соберёт все пакеты то скрипт отключится. Но пока я делал скрипт я нашёл много проблем, которые я не знаю как решить. Все проблемы описаны в архиве с помощью картинок.
https://cloud.mail.ru/public/naWb/2ygzNiVEH
Подскажите пожалуйста все возможные способы и пути решения, чтобы подрывник стал стабильнее.
Это текущий скрипт подрывника:
{$CLEO}
0000:
:HIDBOMB
thread 'HIDBOMB'
wait 0
if and
0256: player 0 defined
$flag_player_on_mission == 0
jf @HIDBOMB
03E1: $PACK_1 = packages_found
if
$PACK_1 == 200
then
end_thread
else
repeat
wait 0
03E1: $PACK_2 = packages_found
until 803A: not $PACK_2 == $PACK_1 // $ == $ int
if and
001C: $PACK_2 > $PACK_1 // $ > $ int
$flag_player_on_mission == 0
then
023C: load_special_actor 1 'BOMBER'
0247: request_model #GRENADE
repeat
wait 0
until 023D: special_actor 1 loaded
repeat
wait 0
until 0248: model #GRENADE available
gosub @RANDPLACE // returns 0@ 1@ 2@ (X Y Z)
009A: $BOMBER = create_actor 18 #SPECIAL01 at 0@ 1@ 2@
0223: set_actor $BOMBER health_to 200
01B2: give_actor $BOMBER weapon 11 ammo 9999
0249: release_model #GRENADE
02AB: set_actor $BOMBER immunities 0 0 1 0 0
0187: $MARKER_BOMBER = create_marker_above_actor $BOMBER
01CC: actor $BOMBER kill_player 0
while 00A2: actor $BOMBER alive
if or
8256: not player 0 defined
00E9: player 0 0 $BOMBER radius 5.0 5.0
8184: not actor $BOMBER health >= 75
$flag_player_on_mission <> 0
then
02AB: set_actor $BOMBER immunities 0 0 0 0 0
00A0: store_actor $BOMBER position_to 0@ 1@ 2@
020C: create_explosion 8 at 0@ 1@ 2@
break
else
if
02A0: actor $BOMBER stopped
then
0054: store_player 0 position_to 0@ 1@ 2@
0239: actor $BOMBER run_to 0@ 1@
else
if
00E9: player 0 0 $BOMBER radius 25.0 25.0
then
01CA: actor $BOMBER kill_player 0
end
end
if and
80E9: not player 0 0 $BOMBER radius 40.0 40.0
82CB: not actor $BOMBER bounding_sphere_visible
then
gosub @RANDPLACE
if
00A2: actor $BOMBER alive
then
00A1: put_actor $BOMBER at 0@ 1@ 2@
end
end
end
wait 0
end
0164: disable_marker $MARKER_BOMBER
01C2: mark_actor_as_no_longer_needed $BOMBER
0296: unload_special_actor 1
else
jump @HIDBOMB
end
end
jump @HIDBOMB
:RANDPLACE
repeat
wait 0
0208: 0@ = random_float -20.0 20.0
0208: 1@ = random_float -20.0 20.0
04C4: create_coordinate 0@ 1@ 2@ from_actor $PLAYER_ACTOR offset 0@ 1@ 0.0
0209: 3@ = random_int 0 2
if
3@ == 0
then
02C0: set 0@ 1@ 2@ to_ped_path_coords_closest_to 0@ 1@ 2@
else
02C1: set 0@ 1@ 2@ to_car_path_coords_closest_to 0@ 1@ 2@
end
until 80C2: not sphere_onscreen 0@ 1@ 2@ 4.0
return
end_thread
Спасибо, я не знал этого. Как сюда + или положительную оценку ставить я не знаю, поэтому

Здравствуйте, у меня вопрос по звукам и аудио. Какие для этого используются опкоды ? Я хочу воспроизвести звук выстрела снайперской винтовки и звук её перезарядки. Какие используются наверное id, audio events, sfx ?
Как находят эту информацию по звукам ?
Я заметил что используются 3 опкода по звукам чтобы их воспроизвести:
018D: $INT = $Sounds at $X $Y $Z Размещение звука sfx на карте 018C: Проиграть SFX звук 78 at $X $Y $Z и 0394: play_music 1