#1 Re: Вопросы по скриптингу » Вопрос про фишки которые выдаются при посадки в машину. » 07-12-2021 05:41

wall
Здравствуйте, тема еще актуальна. Я повторял свою просьбу не только здесь, получал ответ. Но видимо оффсеты не те. Я использую ехе-шник версии 1.01.png?width=457&height=535

https://media.discordapp.net/attachment … height=536

Код исходный вот такой как на картинке. Главная проблема в том что не отключаются бонусы от фбр (броня), и от полицейской машины (дробовик). От полицейской машины пробовали оффсеты несколько раз - пока пришлось закомментировать.
Зато 100% работает отключение бонуса от скорой помощи. good

unknown.png?width=714&height=536

Код обновился, теперь работает отключение точно бонуса хп от скорой, и бонуса дробашом от коповозки.

Вот пожалуйста текущий исходный код. Возможно что оффсетом ошиблись, уж не знаю.

{$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

Но от фбр бонус пока не отключается, как давали броню за посадку в фбр, так и дают.

Тема закрыта, так как решение удалось недавно найти.

#2 Re: Вопросы по скриптингу » Вывод текста из локальной переменной. » 03-11-2021 15:44

wmysterio wrote:

Я же тебе уже говорил: проверить настройки SB. Форматирование текста должно быть установлено на "Как есть" или "нижний", чтобы "%d" компилировался в правильном формате.

Но я ведь пробовал. Пока не помогло... rolleyes

#3 Вопросы по скриптингу » Вывод текста из локальной переменной. » 31-10-2021 06:39

Remca12
Replies: 3

Здравствуйте, я столкнулся с проблемой. По коду, значение читается и записывается в переменную. В моём случае это целое число. Я хочу выводить из переменной полученное значение.
Это вид в декомпилированном виде.

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 - целое число

Я использовал разные опкоды для вывода текста, но результат был всегда один - буква.
Я просто не  понимаю почему вместо числа всё равно выводится буква ?unknown.png?width=714&height=536

#4 Re: Вопросы по скриптингу » Не подбираемый пикап. » 13-08-2021 21:33

Проблема решена) Для тех кому интересно решение оно простое - текст в gxt должен быть прописан правильно: в алфавитном порядке, без лишних пробелов, особенно без лишних пробелов между секциями. Работоспособность текста можно проверить простым клео-скриптом выводящий текст на экран, в моём случае опкодом 00ba.

И всё же эта тема останется открытой ненадолго, т.к. возможно и у Вас были случаи когда пикап невозможно было подобрать. Можете описывать свои наблюдения и решения, т.к. другим людям это может помочь. smile

#5 Вопросы по скриптингу » Не подбираемый пикап. » 13-08-2021 06:41

Remca12
Replies: 1

Здравствуйте, помогите мне пожалуйста, я столкнулся с проблемой что пикап не подбирается или же не делает то что должен.
Скриптую на вайс сити. В моём случае весь прилагаемый скрипт вшит в main.scm из-за особенностей пикапов и гаражей.
Прежде опишу суть скрипта: суть скрипта в покупке актива с гаражом, в котором можно сохранять тачки. Поэтому используется опкод 0518. Этот код ниже находится до метки :intro, ну эдакий стартер. smile

: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 

Прилагаю скриншот для наглядности.
Weh5K4lS-EE.jpg?size=1280x960&quality=96&sign=ad543181ec7865a85a38b5aa2198c92e&type=album

Затем прописан запуск миссии после завершения нужной мне миссии
PAEV_d_iNy4.jpg?size=1280x960&quality=96&sign=3eeef36d5cd0ee1203b7bbda4b5c4b0b&type=album

И теперь миссия покупки:

//-------------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, тогда миссия точно запускается. Но по замыслу миссия должна запускаться после подбора пикапа.

#6 Вопросы по скриптингу » Вопрос про фишки которые выдаются при посадки в машину. » 14-07-2021 16:47

Remca12
Replies: 2

Привет, уточняю сразу что вопрос касается игры гта вайс сити. Меня интересуют оффсеты, которые:
1) игроку даётся несколько единиц хп если он сел в машину скорой помощи
2) игроку выдается несколько патронов с дробовиком если он сел в полицейскую машину
и как эти фишки от машин возможно отключить ? Нужно какой-то оффсет прочитать/записать через клео ?

#7 Вопросы по скриптингу » Анимации в гта 3. Их id и пример с clump » 26-01-2021 14:00

Remca12
Replies: 0

Здравствуйте. Скажите пожалуйста как найти id анимации ?unknown.png?width=690&height=552
Имя нужной мне анимации (Когда Клод показывает фак: 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

Я пытаюсь действовать так как мне подсказывают:
unknown.png?width=690&height=552

Хелп! clap

Прикрепляю лог, может он поможет.
unknown.png?width=690&height=552

#8 Re: Вопросы по скриптингу » Всё что связано с гаражом и поиском » 15-01-2021 14:39

Скрипт переписан, в части цикла, но осталась проблема: после сброса розыска надпись выводится в независимости от того где машина. А как мне активировать гараж именно тогда когда машина в гараже покраски и сброшен розыск ?

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

#9 Вопросы по скриптингу » Всё что связано с гаражом и поиском » 09-01-2021 13:49

Remca12
Replies: 2

Я пишу скрипт цель которого закрывать гараж перекраски если игрок имеет розыск и имеет на хвосте копов. Это значит что гараж должен будет оставаться открытым если игрок имеет звезды розыска, но рядом нет копов. Пока что я видимо не понимаю какой-то принцип у гаражей и поэтому выходят стандартные надписи после сброса розыска. Текущий код в 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

Пока что главная проблема в том что выходят стандартные надписи после перекраски машин.

#10 Вопросы по скриптингу » Проблемы с телепортом лодки. » 23-12-2020 04:26

Remca12
Replies: 1

Если игрок отплывет слишком далеко от лодки, игра виснет (с учетом того что телепорт находиться в цикле while true). Сразу в маине скрипт.

Из цикла: smile

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 раз
Те стало вот так после госаба:
Эта часть пока что не сидит в цикле (пробую) wall

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единиц сзади). clap

#11 Re: Вопросы по скриптингу » Проблемы со скриптом » 18-12-2020 07:51

Seemann wrote:

04A8: player $PLAYER_CHAR driving_boat это нестандартный для GTA3 опкод, он добавляется через CLEO 2.0
https://github.com/cleolibrary/III.VC.C … .cpp#L1022

возможно, что он неправильно реализован, поэтому и выбивает ошибку

Спасибо это исправлено. Мне сейчас нужна помощь по адресам памяти и функциям.

Я пытаюсь заставить полицейскую лодку гоняющуюся стрелять пулями (просто плывет за игроком и должна стрелять пулями постепенно нанося урон). В начале кода была выделена память и смещение, также чуть в других местах и метке randcar прописано обновление координат. Функция стрельбы используется для гта 3 версии 1.1
Помогите мне пожалуйста чтобы лодка могла стрелять, а то она этого не делает совсем. Код прикреплен ниже, если будут вопросы пишите (да хоть в лс).

#12 Re: Вопросы по скриптингу » Проблемы со скриптом » 13-12-2020 09:46

Помогите пожалуйста. Я пытаюсь создавать случайную лодку, но пока гта 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

#13 Re: Вопросы по скриптингу » Проблемы со скриптом » 11-12-2020 05:36

Seemann wrote:

03C6:   current_island == 1

Пока я тестировал скрипт, вышла интересная проблема: если игрок собрал спрятанный пакет на одном острове и переместился на другой остров, неважно как (додо, noclip и т.д.), то актер будет телепортироваться. Но находится он будет в земле, а не на путях педов и машин. Код тот же самый. (пока не измененный)

#14 Re: Вопросы по скриптингу » Проблемы со скриптом » 07-12-2020 16:59

Seemann wrote:

но тогда он себя подрывает кучу раз стоя на одном месте

а кто ему говорит, что нужно бежать? По условию взрыв происходит если подрывник находится рядом с игроком. Если игрок стоит на месте, что должно произойти? Подрывник ведь тоже будет стоять? Наверно, есть смысл переместить взрыв (опкод 020C) после проверки 02A0:   actor $BOMBER stopped.

Т.е. логика должна быть примерно такая

создали подрывника
запускаем бесконечный цикл (while true)

проверяем, если игрок или подрывник умер - делаем break
проверяем остановился ли подрывник рядом с игроком
если да, то создаем explosion
если нет, заставляем его бежать
делаем паузу на 2 секунды (тогда серия взрывов будет реже)

конец цикла

очистка

Как проверить что игрок на каком-то острове ? Я пытаюсь телепортировать актёра на тот же остров на котором находится игрок опкодом 03fc ? Но он не условный, а других способов я не знаю. Гта 3, если что.

#15 Re: Вопросы по скриптингу » Проблемы со скриптом » 05-12-2020 09:27

Код обновлён. Вроде как всё верно. Если что-то неверно - слушаю.

#16 Re: Вопросы по скриптингу » Проблемы со скриптом » 05-12-2020 08:14

Измененный код подрывника. Я не останавливаю игрока, так как это мешает ему кидать гранаты, вместо этого я его заставляю посмотреть в сторону игрока.

#17 Re: Вопросы по скриптингу » Проблемы со скриптом » 04-12-2020 15:50

Спасибо за  типы, возьму на заметку)
Я убирал break, но при первом же подрывании себя подрывник сдох, а затем я закомментировал строку где снимается иммунитет подрывника от взрыва, но тогда он себя подрывает кучу раз стоя на одном месте. А подрывник должен подрываться  если игрок близко с подрывником, но если подрывник ещё жив, то он опять должен побежать к игроку чтобы подорваться до тех пор пока он сам не умрет.
Если цикл не прерывать то за подрывником будет хвост взрывов пока он бежит, а он не побежит если к нему не подойти. Но если цикл прерывать то он себя подорвет лишь 1 раз.

#18 Re: Вопросы по скриптингу » Проблемы со скриптом » 04-12-2020 09:10

Спасибо за пояснения,  подрывник себя должен подрывать пока он жив и игрок жив, но если хоть кто-то из них умрёт, то подрывник больше не будет нужен.
Осталась лишь самая странная проблема: подрывник себя подрывает только 1 раз, а потом у него стирается память, а когда именно стирать его память (имеется ввиду все сведения об актёре) я не знаю. Когда это лучше делать ?
Оказывается подрывник дёргался из-за того что я его заставлял бежать к игроку, в случае если игрок далеко стоит, и тогда подрывник тупит.

Закомментировав эту часть кода подрывник стал кидать нормально гранаты:

if
  02A0:   actor $BOMBER stopped
  then
          0054: store_player 0 position_to 0@ 1@ 2@
          0239: actor $BOMBER run_to 0@ 1@

Я забыл где надо смотреть типы актёров.

#19 Re: Вопросы по скриптингу » Проблемы со скриптом » 03-12-2020 16:53

Спасибо, но это всё сразу в main.scm-е пишется. У меня 2 основные проблемы: подрывник после своего первого подрыва становится бычным трусливым педом и если его ударить, то он будет убегать от игрока, а если он где-то затупит то может не найти игрока, поэтому раньше я давал ему проверку на видимость игрока.
Я пробовал вот так, когда подрывник тупит, чтобы подрывник сразу смотрел в сторону игрока.

if
8123: actor $bomber spotted_player $player_char
then
020f: actor $bomber look_at_player $player_char
end

Необходимо чтобы подрывник подрывался пока игрок жив.

Но самое странное что подрывник не может кинуть гранату, он ее только хочет кинуть, а потом дергается, в итоге гранату он кинуть не может и она не взрывается.

#20 Вопросы по скриптингу » Проблемы со скриптом » 03-12-2020 09:41

Remca12
Replies: 15

Здравствуйте. Я пишу скрипт подрывника. Суть: в игре есть 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

#21 Re: Вопросы по скриптингу » Всё о звуках и аудио в гта 3 » 15-11-2020 06:23

Спасибо, я не знал этого. Как сюда + или положительную оценку ставить я не знаю, поэтому  good  smile

#22 Вопросы по скриптингу » Всё о звуках и аудио в гта 3 » 14-11-2020 19:06

Remca12
Replies: 2

Здравствуйте, у меня вопрос по звукам и аудио. Какие для этого используются опкоды ? Я хочу воспроизвести звук выстрела снайперской винтовки и звук её перезарядки. Какие используются наверное id, audio events, sfx ?
Как находят эту информацию по звукам ?
Я заметил что используются 3 опкода по звукам чтобы их воспроизвести:

018D: $INT = $Sounds at $X $Y $Z Размещение звука sfx на карте
018C: Проиграть SFX звук 78 at $X $Y $Z
и
0394: play_music 1

#23 Вопросы по скриптингу » Телефон в гта 3. И всё о телефоне. » 14-11-2020 14:06

Remca12
Replies: 0

Здравствуйте. у меня вопросы по телефонам (телефонные будки по карте расставлены). Я узнал у нужных мне координаты, но я не понимаю как запускать телефон. И как я понял проще будет выяснять в какой зоне находится игрок. Как проверить что игрок находится в зоне где проходим миссию Туризмо и миссии Дональда Лава ?

{$CLEO .cs}
0000:
//да-да скрипт сырой, но только пока что он такой.
:PHHE
thread 'PHHE'
wait 0
if
0256:   player 0 defined //жив ли Клод?
jf @PHHE

024A: 0@ = get_phone_at 604.506 -229.501 //создаём телефон (или телефонная будка)
024A: 1@ = get_phone_at -278.51 -1591.95//другой телефон
//
029B: 0@ = init_object #FAKETARGET at 604.506 -229.501 10.723 //В Портленде рядом с миссиями Эль-Бурро.
029B: 1@ = init_object #FAKETARGET at -278.51 -1591.95 31.8195 //В Стаунтоне рядом с миссиями Дональда Лава.
//если игрок находится в нужной нам зон где стоит телефонная будка, то будет проигрываться звук телефона 
//и появится маркер на который игрок сможет встать.

0226: 3@ = actor $PLAYER_ACTOR health
00D6: if and //сравниваю жизни игрока
3@ >= 80 //если у игрока больше 80 жизней
3@ <= 100 //и при этом меньше 100

then //т.е. от 80 до 100, то тогда заканчиваем скрипт и выводим диалоги (health1-4; Как кстати выводить диалоги? Те что мне нужны находятся в gxt-файле, american.gxt) что игрок полностью здоров и т.д.



//Т.е. скорая не приедет и игрока лечить не будет.
end_thread 
else //иначе: к нам приедет скорая и будет нас лечить 

if 
0121:   player $PLAYER_CHAR in_zone 'TOWERS'  // там  нужный мне телефон в Портленде
then
0405: enable_phone 0@ 
end

if
0121:   player $PLAYER_CHAR in_zone 'SHOPING'  // там  нужный мне телефон в Стаунтоне
then
0405: enable_phone 1@
end

//перед телефонами будут маркеры чтобы игрок на них встал (только если у игрока меньше 80 жизней)
//Временно взято из примеров:
024F: create_corona 1.0 5 0 with_color 0 200 200 at_point $X_1 $Y_1 $Z_1 //координаты прямо перед телефонной будкой.
//телефону 0@
024F: create_corona 1.0 5 0 with_color 0 200 200 at_point $X_2 $Y_2 $Z_2
//и к телефону 1@

if and
00F6: player $PLAYER_CHAR 0 $X_1 $Y_1 $Z_1 radius 1.0 1.0 2.0
00F9: player $PLAYER_CHAR stopped 0 $X_1 $Y_1 $Z_1 radius 1.0 1.0 2.0 
jf @PHHE
//
end

if
//
0447: player $PLAYER_CHAR lifting_a_phone //если игрок поднял трубку
then //и его жизнь меньше 80. то тогда
018C: play_sound 94 at 0.0 0.0 0.0 //не знаю как проиграть звук выстрела снайперки (и потом перезарядки), но именно он и будет проигрываться.
//  
0223: set_actor $PLAYER_ACTOR health_to 0 //убиваем игрока
024E: disable_phone 0@ //выключаем телефон
0108: destroy_object 0@ //уничтожаем телефон
024E: disable_phone 1@ //выключаем телефон
0108: destroy_object 1@ //уничтожаем телефон
end

0A93: terminate_this_custom_script

//P.S. По-задумке, над игроком происходят 2 события: либо его лечат или не лечат в зависимости от того сколько жизней у игрока. либо игрока сразу убивают со снайперки (с заморозкой игрока чтобы он не мог двигаться).

#24 Re: Вопросы по скриптингу » Время появления пикапа » 30-10-2020 18:39

Я переписал код с нуля итак его понимает игра в main.scm

:PICK_CR
03A4: name_thread 'PICK_CR' 

:PICK_CR_10
0001: wait 0 ms 
00BF: $HOURS = current_time_hours, $MINUTES = current_time_minutes 
00D6: if and
001A:   19 > $HOURS // int > $ 
0018:   $HOURS < 7 // $ > int 
004D: jump_if_false @PICK_CR_47 

:PICK_CR_47 //проверил в игре и убедился тыщу раз что игра при таком коде удаляет пикапы :crazy: 
//"если нет пикапов, то удалить пикапы" :o 
0001: wait 0 ms 
00D6: if and
83CA:   not object $IND_PICKUP8 exists 
83CA:   not object $IND_PICKUP9 exists 
83CA:   not object $COM_PICKUP8 exists 
83CA:   not object $COM_PICKUP9 exists 
83CA:   not object $SUB_PICKUP8 exists 
83CA:   not object $SUB_PICKUP9 exists 
004D: jump_if_false @PICK_CR_47 
0215: destroy_pickup $IND_PICKUP8 
0215: destroy_pickup $IND_PICKUP9 
0215: destroy_pickup $COM_PICKUP8 
0215: destroy_pickup $COM_PICKUP9 
0215: destroy_pickup $SUB_PICKUP8 
0215: destroy_pickup $SUB_PICKUP9
0002: jump @PICK_CR_10

//с этой метки идёт попытка создать пикапы. Но пикапы не возвращаются с 7 утра.
:PICK_CR_11
00D6: if and
001A:   19 < $HOURS // int > $
0018:   $HOURS > 7 // $ > int 
004D: jump_if_false @PICK_CR_48 

:PICK_CR_48
0001: wait 0 ms 
00D6: if and
03CA:   not object $IND_PICKUP8 exists 
03CA:   not object $IND_PICKUP9 exists 
03CA:   not object $COM_PICKUP8 exists 
03CA:   not object $COM_PICKUP9 exists 
03CA:   not object $SUB_PICKUP8 exists 
03CA:   not object $SUB_PICKUP9 exists 
004D: jump_if_false @PICK_CR_48 
0213: $IND_PICKUP8 = create_pickup #HEALTH type 14 at 1147.75 -597.0625 14.875 
0213: $IND_PICKUP9 = create_pickup #HEALTH type 14 at 1147.75 -585.25 14.875 
0213: $COM_PICKUP8 = create_pickup #HEALTH type 14 at 182.875 -16.25 16.1875 
0213: $COM_PICKUP9 = create_pickup #HEALTH type 14 at 222.5625 16.0 16.1875 
0213: $SUB_PICKUP8 = create_pickup #HEALTH type 14 at -1247.5 -79.5 58.75 
0213: $SUB_PICKUP9 = create_pickup #HEALTH type 14 at -1247.5 -82.5 58.75
0002: jump @PICK_CR_11

Люди добрые помогите, я уже замучился wall clap

#25 Re: Вопросы по скриптингу » Время появления пикапа » 29-10-2020 13:06

Примерно так ?

// This file was decompiled using SCM.ini published by GTAMods.com on 2017-07-29
{$CLEO .cs}

//-------------MAIN---------------
0001: wait 100 ms
:VRPI 
while 00BF: $hours = current_time_hours, $minutes = current_time_minutes
wait 250 
$hours = 19
$minutes = 00
0215: destroy_pickup $IND_PICKUP8 
0215: destroy_pickup $IND_PICKUP9
0215: destroy_pickup $COM_PICKUP8
0215: destroy_pickup $COM_PICKUP9
0215: destroy_pickup $SUB_PICKUP8
0215: destroy_pickup $SUB_PICKUP9
if and 00BF: $hours = current_time_hours, $minutes = current_time_minutes
$hours = 07
$minutes = 01
then 
 break
 end
end

Board footer

Powered by FluxBB