[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Вопросы по скриптингу Sanny Builder
wmysterio
Администраторы
Скриптер
22.11.11 21:52
Offline
Если у вас возник вопрос по скриптингу Sanny Builder, обращайтесь! Мы постараемся решить вашу проблему wink Это ещё не значит, что все прям бросятся решать во чтобы то не стало, но ответ вы сможете вы получить как вариант решения или как невозможность или сложность решения.
УВАЖАЕМЫЕ ПОЛЬЗОВАТЕЛИ! ПРОСЬБА КОД СКРИПТОВ ПОМЕЩАТЬ В КОНСТРУКЦИЮ КОДА:

или

Также указывайте полный код скрипта, иначе причина ошибок может быть и не выявлена.
Прикрепления: 0248203.png(0.9 Kb) · 9085525.png(0.2 Kb)

ed9mkm
Пользователи
12.11.18 19:56
Offline
Здравствуйте. Все никак не могу понять, не могу нигде найти описание следующего кода:

Код
006B: 9@ *= 14@ // (float)
10@ = 80.1
02F6: 15@ = sine 19@ // (float)
02F7: 16@ = cosine 19@ // (float)
006B: 15@ *= 10@ // (float)
006B: 16@ *= 10@ // (float)
15@ *= -1.0
Object.ToggleInMovingList(2@) = True
Object.Throw(2@, 15@, 16@, 9@)
33@ = 0
15@ *= -1.0
16@ *= -1.0


Этот код отвечает за выстрел ракетой. Но я из этой ракеты сделал фейерверк. Да, для стрельбы фейерверками. Я не понимаю, что значит "10@" и почему именно 80.1. Дело в том, что в некоторых других скриптах, где предполагается метание тех или иных объектов, тоже именно этот код. В некоторых других вместо 80.1 стоит значение 30.1. Но именно ".1" в конце. Наверно это что-то совсем элементарное, но я не знаю, что это. В моем случае мне нужно снизить скорость полета фейерверка. Когда я ставлю значение 40.1, например, то скорость становится приемлемой, но выстрел теряет точность - стоит чуть выше держать базуку, так фейерверк летит сильно вверх - т.е. не туда, куда направляю. Если залезть на крышу дома и направить чуть вниз, то фейерверк как бы падает, не летит прямо тоже.

wmysterio
Администраторы
Скриптер
13.11.18 01:19
Offline
Цитата 4lifeGTA ()
Сколько вообще у транспорта здоровья(НР)?
У меня каждый раз 1000.
Цитата 4lifeGTA ()
Что лучше(в смысле нагрузки на "железо")
Использовать грамотный код. Количество уже не так важно, как качество.
Цитата ed9mkm ()
не могу нигде найти описание следующего кода
Думаете здесь много народу знаком с тригонометрией?
Цитата ed9mkm ()
В моем случае мне нужно снизить скорость полета фейерверка
Если память не изменяет, то скорость по оси Z в вашем коде задаётся в переменной 9@.

ed9mkm
Пользователи
13.11.18 01:43
Offline
Цитата wmysterio ()
Думаете здесь много народу знаком с тригонометрией?

Я на всякий случай спросил. Подумал, что я просто не понимаю чего-то простого.

Цитата wmysterio ()
Если память не изменяет, то скорость по оси Z в вашем коде задаётся в переменной 9@.

Спасибо, попробую с ней поэкспериментировать.

4lifeGTA
Пользователи
13.11.18 09:46
Offline
wmysterio, спасибо за ответы.
З.ы.
Опкод не подскажите, такого плана: установить транспорту здоровье столькото. Может и не существует такого... Знать бы...

wmysterio
Администраторы
Скриптер
13.11.18 12:46
Offline
Цитата 4lifeGTA ()
установить транспорту здоровье столькото.
Есть такой:
0224: set_car 0@ health_to 10000

4lifeGTA
Пользователи
13.11.18 15:28
Offline
Благодарю дружище, теперь все "компоненты" скрипта собраны, но я уже скоро лбом об стену буду стучать, что не так в скрипте:
Код
{$CLEO .CS}

//-------------MAIN---------------
thread 'DTP'

:DTP_89
wait 0  

:DTP_94
wait 10
if
   Player.Defined($PLAYER_CHAR)
else_jump @DTP_89
if
00DF: actor $PLAYER_ACTOR driving
// $ONMISSION == 0
else_jump @DTP_2517
0@ = Actor.CurrentCar($PLAYER_ACTOR)
02E3: 1@ = car 0@ speed
0AF2: 6@ = get_float_from_ini_file "cleo\car_dead.ini" section "0" key "speed"
6@ /= 3.6  
jump @DTP_215

:DTP_215
wait 20
if or
   not Actor.Driving($PLAYER_ACTOR)
// $ONMISSION == 1
   Actor.Dead($PLAYER_ACTOR)
wasted_or_busted
else_jump @DTP_1324
jump @DTP_2517

:DTP_1324
wait 20
if and
0025:   1@ > 6@ // (float)
//0119: car 0@ wrecked    
03C9:   car 0@ damaged
else_jump @DTP_2517
//0730: car 0@ damage_door 4
0223: set_actor $PLAYER_ACTOR health_to 1
//0811: 0@ = actor $PLAYER_ACTOR used_car
0224: set_car 0@ health_to 250
jump @DTP_2517

:DTP_2517
//Car.RemoveReferences(0@)
wait 100
jump @DTP_94     


От этой конструкции я лишь хотел добиться чтобы при ударе на большой скорости(скорость прописывается в .ini, у меня там 100), транспорт игрока и сам игрок теряли здоровье до предсмертного.
А на деле получается, если машина хоть как-то повреждена, то разгон до сотни и без аварии происходит задымление(дамажится на 250), просто разгон, даже не врезаясь sad
Если машина никак не повреждена, то разгон, сотня, удар и... ничего cry
Отредактировал 4lifeGTA - Вторник, 13.11.18, 15:40

Diago
Пользователи
13.11.18 18:00
Offline
Цитата 4lifeGTA ()
От этой конструкции я лишь хотел добиться чтобы при ударе на большой скорости(скорость прописывается в .ini, у меня там 100), транспорт игрока и сам игрок теряли здоровье до предсмертного.


Тебе вместо опкода 03C9: надо использовать другой (не могу вспомнить его. Вспомнил только 031D: и 031E: которые проверяют на урон от оружия), который проверяет что машина была повреждена вследствие нанесения урона от столкновений. Потому что 03C9: это триггер который выдаёт true всегда, если здоровье отличное от полного, не важно, врезался ты или нет.
НО
можно сделать так: сделать 2 последовательные проверки между которыми будет небольшая задержка, например wait 10. В первой ты проверяешь что ты едешь больше 100км/ч, если да, то следующая проверка проверяет что скорость, например, не более 20 км/ч. Если тоже да, то это значит за этот промежуток машина потеряла в скорости не мене 80 км/ч, что означает столкновение с препятствием (не важно каким) и потом уже пройдёт твоя часть кода которая отнимает хп.

Код

while Actor.Driving($PLAYER_ACTOR) // циклично выполнять до end, пока игрок — водитель
wait 0
    if
        0025:   1@ > 6@ // мы едем больше 100 км/ч
    then
        wait 10 // задержка
        if
            8025:   1@ > 10 // мы едем не более 20 км/ч
        then
            <выполняемый код после столкновения>
        end
    end
end


Проверьте как работает данная конструкция и отпишитесь. Если не работает то поэкспериментируйте с wait, попробуйте 20, 30 и.т.д. и скоростью 8025:   1@ > 10. Или поищите тот опкод о котором я написал выше и вставьте вместо 03C9: car 0@ damaged
Отредактировал Diago - Вторник, 13.11.18, 18:10

ed9mkm
Пользователи
14.11.18 07:13
Offline
Цитата wmysterio ()
Если память не изменяет, то скорость по оси Z в вашем коде задаётся в переменной 9@.

Эта переменная влияет на наведение только. Когда я ее заменил на просто число, то фейерверки стали выпускать на фиксированной высоте. Т.е. что в небо направлю, что в землю - только на определенной высоте в сторону.

Код
:CNROCKM
thread 'CNROCKM'
Model.Load(#MISSILE)
Model.Load(1598)
0@ = 22
0@ *= 112
0@ += 13150904
0@ += 8
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset -0.2 0.0 0.4
0AB1: call_scm_func @CNROCKM_962 4 0@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ 8@ 9@  
wait 0
0087: 31@ = 9@ // (float)
30@ = 350.0
005B: 30@ += 31@ // (float)
31@ /= 5.0

:CNROCKM_173
wait 0
if and
   Model.Available(#MISSILE)
   Model.Available(1598)
jf @CNROCKM_173
04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 0.2 5.0 0.4
0087: 27@ = 13@ // (float)
0087: 28@ = 11@ // (float)
0087: 29@ = 12@ // (float)
0063: 11@ -= 7@ // (float)
0063: 12@ -= 8@ // (float)
0604: get_Z_angle_for_point 11@ 12@ store_to 19@
0063: 9@ -= 13@ // (float)
0087: 14@ = 9@ // (float)
0087: 30@ = 14@ // (float)
30@ *= 10.0
0092: 30@ = float 30@ to_integer
if
  0.0 > 14@
jf @CNROCKM_406
14@ /= -2.0
14@ -= 0.7
30@ = 350.0
31@ *= 10.0
005B: 30@ += 31@ // (float)
31@ /= 10.0
jump @CNROCKM_426

:CNROCKM_406
14@ /= 10.0
14@ += 1.1

:CNROCKM_426
31@ *= 2.0
2@ = Object.Create(1598, 28@, 29@, 27@)
0750: set_object 2@ visibility 0
04D9: object 2@ set_scripted_collision_check 1
Object.CollisionDetection(2@) = True
0906: set_object 2@ mass_to 1.0 // float
0908: set_object 2@ turn_mass_to 5.0 // float
1@ = Object.Create(#MISSILE, 28@, 29@, 5000.0)
069A: attach_object 1@ to_object 2@ with_offset 0.0 1.0 0.0 rotation 30@ 0.0 180.0
Object.CollisionDetection(1@) = False
Object.Angle(2@) = 19@
006B: 9@ *= 14@ // (float)
10@ = 80.1
02F6: 15@ = sine 19@ // (float)
02F7: 16@ = cosine 19@ // (float)
006B: 15@ *= 10@ // (float)
006B: 16@ *= 10@ // (float)
15@ *= -1.0
Object.ToggleInMovingList(2@) = True
Object.Throw(2@, 15@, 16@, 9@)
33@ = 0
15@ *= -1.0
16@ *= -1.0

:CNROCKM_672
wait 0
if
   Player.Defined($PLAYER_CHAR)
jf @CNROCKM_940
0400: store_coords_to 21@ 22@ 23@ from_object 2@ with_offset 0.0 0.0 0.0
095C: create_smoke_at 21@ 22@ 23@ velocity 0.0 0.0 0.0 RGBA 1.0 1.0 1.0 1.0 size 0.05 last_factor 0.1
08EB: create_sparks_at 21@ 22@ 23@ velocity 0.0 0.0 0.0 density 100
Object.Throw(2@, 15@, 16@, 9@)
Object.StorePos(2@, 11@, 12@, 13@)
if or
04DA:   has_object 2@ collided
8474:   not actor $PLAYER_ACTOR near_object_in_cube 2@ radius 700.0 700.0 700.0 sphere 0
  33@ > 700
jf @CNROCKM_672
064B: 3@ = create_particle "shootlight" at 11@ 12@ 13@ type 4
018C: play_sound 1159 at 11@ 12@ 13@
064F: remove_references_to_particle 3@
wait 400
064B: 4@ = create_particle "BLUEBLOT" at 11@ 12@ 13@ type 4
018C: play_sound 1159 at 11@ 12@ 13@
064F: remove_references_to_particle 4@
wait 100
064B: 5@ = create_particle "YELLOWBLOT" at 11@ 12@ 13@ type 4
018C: play_sound 1159 at 11@ 12@ 13@
064F: remove_references_to_particle 5@
wait 100
064B: 6@ = create_particle "FIREWORKS1" at 11@ 12@ 13@ type 4
018C: play_sound 1159 at 11@ 12@ 13@
064F: remove_references_to_particle 6@
wait 250
064B: 7@ = create_particle "REDBLOT" at 11@ 12@ 13@ type 4
018C: play_sound 1159 at 11@ 12@ 13@
064F: remove_references_to_particle 7@
wait 200
064B: 8@ = create_particle "FIREWORKS2" at 11@ 12@ 13@ type 4  
064F: remove_references_to_particle 8@

:CNROCKM_940
Object.Destroy(2@)
Object.Destroy(1@)
Model.Destroy(#MISSILE)
Model.Destroy(1598)
0A93: end_custom_thread

Так и не могу понять, как здесь можно скорость регулировать. Понял, как дальность регулировать - за это отвечает "33@ > 700". Было значение 7000, уменьшил в 10 раз и теперь дальность полета свойственна фейерверкам. Но слишком быстро летят они.

4lifeGTA
Пользователи
14.11.18 18:36
Offline
Diago, испытания пока не обнадеживают, с разными настройками, но эффекта ноль, разгоны, столкновения, а изменений никаких.
Пока "копаю" в сети на предмет подходящего опкода, но накопал пока только такой:
051D: cars @57 and @40 collided (Проверяет, столкнулась ли машина (машина1) с другой машиной (машина2).
Близко к теме, но не то, найти бы опкод который детектил бы каждое повреждение транспорта от любого препятствия...
А он точно есть?

wmysterio
Администраторы
Скриптер
14.11.18 21:24
Offline
Цитата ed9mkm ()
Когда я ее заменил на просто число, то фейерверки стали выпускать на фиксированной высоте.
Я не имел в буквальном смысле скорость. В коде оно используется для её имитации. Нужно вычислить координату Z, куда будет кинут объект.
Цитата 4lifeGTA ()
А он точно есть?
Нету. Но я покопался в Вашей проблеме и вот такой скрипт у меня получился:
Код
{$CLEO}
0000: NOP

:TEST
thread 'TEST'
wait 250
if
0256: player $PLAYER_CHAR defined
jf @TEST
if and
03EE: player $PLAYER_CHAR controllable
8118: not actor $PLAYER_ACTOR dead
00DF: actor $PLAYER_ACTOR driving
jf @TEST
03C0: 0@ = actor $PLAYER_ACTOR car
if
056E: car 0@ defined
jf @TEST
if and
8119: not car 0@ wrecked
82BF: not car 0@ sunk
jf @TEST
02E3: 1@ = car 0@ speed
if
0021: 1@ > 44.0
jf @TEST

:TEST_LOOP
wait 0
if and
8118: not actor $PLAYER_ACTOR dead
00DB: actor $PLAYER_ACTOR in_car 0@
jf @TEST
02E3: 2@ = car 0@ speed
if and
0025: 1@ > 2@ // (float)
0021: 2@ > 8.0
then
0226: 2@ = actor $PLAYER_ACTOR health
if
002B: 5 >= 2@
then
2@ = 0
else
2@ = 5
end
0223: set_actor $PLAYER_ACTOR health_to 2@
jump @TEST
end
jump @TEST_LOOP
Значения скорости в SA не в километрах, а чёрт его знает в чём. Писал на ощупь. Некоторые доработки возможны, но это уже под свои нужды делайте. В частности нужно проверить чтобы при плавном уменьшении скорости, проверка не срабатывала и перекидала на первую метку.

4lifeGTA
Пользователи
14.11.18 23:09
Offline
Wmysterio, да все просто супер! Покатался, поврезался, работает как часы.
И принцип интересный, вроде того о чем говорил Diago, перехват разницы в переменных, ну программисты все гении cool
Вы ваще Мастер! Все пойду поиграю перед сном, теперь моя ГТА стала идеальной.
СПАСИБО!

Diago
Пользователи
14.11.18 23:12
Offline
Цитата 4lifeGTA ()
Diago, испытания пока не обнадеживают, с разными настройками, но эффекта ноль, разгоны, столкновения, а изменений никаких.

В общем. Я поэкспериментировал, и вышло вот это:
Код

{$CLEO .cs}
{$NOSOURCE}
0000: NOP

thread 'DTP'

var
0@ : Integer
1@ : Float
2@ : Float
end

if
    0AAB: file_exists "CLEO\car_dead.ini"
then
    0AF2: 2@ = get_float_from_ini_file "cleo\car_dead.ini" section "0" key "speed"
else
    0AF3: write_float 33.4 to_ini_file "cleo\car_dead.ini" section "0" key "speed"
    // V[км/ч ] =скорость_ движения_автомобиля_в_игре * 3 (примерно ~3)
    // если хотим чтобы при 200 км/ч работал скрипт, то делим это число
    // на 3 и получаем примерно 66.66 — это значение и надо использовать
    wait 100
    0AF2: 2@ = get_float_from_ini_file "cleo\car_dead.ini" section "0" key "speed"
end
  
while true
    wait 0
    if and
        0256: player $PLAYER_CHAR defined
        0449: actor $PLAYER_ACTOR in_a_car
    then
        0811: 0@ = actor $PLAYER_ACTOR used_car
        02E3: 1@ = car 0@ speed
        while 1@ > 2@
            wait 100
            02E3: 1@ = car 0@ speed
            if and
                0449: actor $PLAYER_ACTOR in_a_car
                00DF: actor $PLAYER_ACTOR driving
                847A: not actor $PLAYER_ACTOR driving_bike // оставить по желанию
                84A7: not actor $PLAYER_ACTOR driving_boat // оставить по желанию
                84C8: not actor $PLAYER_ACTOR driving_flying_vehicle // оставить по желанию
                89AE: not actor $PLAYER_ACTOR driving_train // обязательно оставить, чтобы не было багов
                1@ < 9.9 // около 30 км/ч; чем выше число, тем выше чувствительность к столкновению                
            then
                0223: set_actor $PLAYER_ACTOR health_to 4
                0224: set_car 0@ health_to 444
                05C1: AS_actor $PLAYER_ACTOR speak_from_audio_table 344 // CJ кричит от сильной боли "АААА"
                break
            end
            if or
                044B: actor $PLAYER_ACTOR on_foot
                8256: not player $PLAYER_CHAR defined
                80DF: not actor $PLAYER_ACTOR driving
            then
                break
            end
        end
    end
end

Протестируй и посмотри как работает. У меня при впечатывании в стену почти всегда скрипт работает как ты задумывал.
А вот по поводу скорости:
Цитата wmysterio ()
Значения скорости в SA не в километрах, а чёрт его знает в чём. Писал на ощупь. Некоторые доработки возможны, но это уже под свои нужды делайте. В частности нужно проверить чтобы при плавном уменьшении скорости, проверка не срабатывала и перекидала на первую метку.

Здесь да, в игре нету своей системы измерения скорости. Поэтому я использую коэфф умножения из скрипта спидометра от Kilgor485747 — 3, значит что скорость в км/ч будет отображаться в 3 раза больше от скорости движения, что визуально приблизительно похоже на реальность.
Отредактировал Diago - Среда, 14.11.18, 23:13

4lifeGTA
Пользователи
15.11.18 17:43
Offline
Цитата wmysterio ()
В частности нужно проверить чтобы при плавном уменьшении скорости, проверка не срабатывала и перекидала на первую метку.

Да, вчера я понял про что вы говорите, так и есть, но вчера было поздно уже и не было сил что-то соображать. А сегодня Сэр Diago выкладывает этот чудесный скрипт, я покатал уже немного, пока полет нормальный
surprised , еще покатаюсь по плотнее, на выходных полный тест.

Diago, походу это полноценный мод, каких еще не было, выкладывайте его в массы, это вещь!

За коменты и подробное разжевывание, отдельное СПАСИБО! Особенно это важно таким как я, нубасам в программировании wacko biggrin

Добавлено (15.11.18, 18:35)
---------------------------------------------
Со звуком крика классно придумано, меня это навело на мысль добавить еще звук серьезной аварии,
чтобы прям крэш был happy
Сейчас подбираю звуки в сети.

Тут вопрос нарисовался, как проиграть один звук известно, а возможно ли проиграть рандомный звук, ну будут несколько звуков аварий из которых рандомно будет выбираться один, типа реализм cool


wmysterio
Администраторы
Скриптер
15.11.18 19:15
Offline
Цитата 4lifeGTA ()
возможно ли проиграть рандомный звук
Если брать mp3-файлы, то вот:
Код
0209: 4@ = random_int_in_ranges 0 9
0AD3: 0@v = format "Cleo\sound\%d.mp3" 4@
0AAC: 5@ = load_audiostream 0@v
// ...
Если брать что-то из оригинала, то проблем вообще не должно быть.

4lifeGTA
Пользователи
15.11.18 21:01
Offline
wmysterio, у меня вылет каждый раз когда авария, может я что не так прописал?
Вот так сделал:
0209: 4@ = random_int_in_ranges 0 9
0AD3: 0@v = format "Cleo\sound\Crash\%d.mp3" 4@
0AAC: 5@ = load_audiostream 0@v
У меня в папке Crash лежат три мр3 звука.

Вот звуки аварии, если кому надо, я их почистил, обрезал, затухание сделал, короче норм:
https://my-files.ru/mynqxc
Отредактировал 4lifeGTA - Четверг, 15.11.18, 21:11

Diago
Пользователи
15.11.18 21:41
Offline
Цитата 4lifeGTA ()
может я что не так прописал?

Если мой код используешь то будет так:
Код

0209: 4@ = random_int_in_ranges 0 9
0AD3: 3@v = format "Cleo\sound\сrash\%d.mp3" 4@
0AAC: 5@ = load_audiostream 3@v


Плюс в начале, где блок var...end, надо дописать:
Код

var
0@ : Integer
1@ : Float
2@ : Float

3@ : LongString
4@ : Integer
5@ : Integer
end

Это необязательно, но лучше это сделать, чтобы уж точно наверняка ну было проблем.

А также проверь чтобы имена mp3 были в соответствии с генерируемыми числами: 0.mp3 1.mp3 и.т.д.

4lifeGTA
Пользователи
15.11.18 22:34
Offline
Diago, от души, за пару дней узнал столько нового.
Я тут запарился маленько, уже 35 раз проверяю, а звука нет, уже и регистр заглавных букв у папок сверил и вставлял код, то вверху скрипта:
{$CLEO .cs}
//{$NOSOURCE}
0000: NOP

thread 'DTP'

var
0@ : Integer
1@ : Float
2@ : Float

3@ : LongString
4@ : Integer
5@ : Integer
end

if
0AAB: file_exists "CLEO\car_dead.ini"
then
0AF2: 2@ = get_float_from_ini_file "cleo\car_dead.ini" section "0" key "speed"
0209: 4@ = random_int_in_ranges 0 9
0AD3: 3@v = format "cleo\Sound\Crash\%d.mp3" 4@


(остальное в выдачу "штрафов":
then
0AAC: 5@ = load_audiostream 3@v
0223: set_actor $PLAYER_ACTOR health_to 1
0224: set_car 0@ health_to 300
05C1: AS_actor $PLAYER_ACTOR speak_from_audio_table 344 // CJ êðè÷èò îò ñèëüíîé áîëè "ÀÀÀÀ"
break
end)

или сраз все внизу, где выдача штрафов:
then
0209: 4@ = random_int_in_ranges 0 9
0AD3: 3@v = format "cleo\Sound\Crash\%d.mp3" 4@
0AAC: 5@ = load_audiostream 3@v

0223: set_actor $PLAYER_ACTOR health_to 1
0224: set_car 0@ health_to 300
05C1: AS_actor $PLAYER_ACTOR speak_from_audio_table 344 // CJ êðè÷èò îò ñèëüíîé áîëè "ÀÀÀÀ"
break
end

Да вот так методом научного тыка и мыкаюсь smile Чувствую, упускаю из виду что-то элементарное, но знать бы что question

wmysterio
Администраторы
Скриптер
16.11.18 00:49
Offline
Цитата Diago ()
надо дописать
Да, только нужно ещё учитывать смещение переменных, чтобы не перезаписать случайно часть строки:
Код
var
0@ : Integer
1@ : Float
2@ : Float

3@ : LongString
// 4@ - часть LongString #2
// 5@ - часть LongString #3
// 6@ - часть LongString #4
7@ : Integer
8@ : Integer
end
Цитата 4lifeGTA ()
а звука нет
Я Вам дал пример загрузки звука, вам надо ещё и воспроизвести его:
Код
{$CLEO}
thread 'DTP'
if
0AAB: file_exists "CLEO\car_dead.ini"
jf @DTP_END
0AAC: 10@ = load_audiostream "CLEO\Sound\Crash\0.mp3" // лучше не больше 15 символов
0AAC: 11@ = load_audiostream "CLEO\Sound\Crash\1.mp3" // лучше не больше 15 символов
0AAC: 12@ = load_audiostream "CLEO\Sound\Crash\2.mp3" // лучше не больше 15 символов

:DTP_LOOP
wait 0
if
// DTP ...
then
    // (остальное в выдачу "штрафов"
    0209: 13@ = random_int_in_ranges 0 3 // ~ [0;2)
    0AAD: set_mp3 10@(13@,3i) perform_action 1
    0223: set_actor $PLAYER_ACTOR health_to 1
    0224: set_car 0@ health_to 300
    05C1: AS_actor $PLAYER_ACTOR speak_from_audio_table 344
wait 250
end
jf @DTP_LOOP

:DTP_END
0ACE: show_formatted_text_box "File not found!"
0A93: end_custom_thread

4lifeGTA
Пользователи
16.11.18 17:38
Offline
wmysterio, да я затупил, ведь проворачивал такое с одним звуком, увидел новую схему и думал что она так и должна работать... Спасибо, снова выручили.
По моему игре жутко не хватало такого скрипта, а то несёшся почти на световой скорости, бац, во что-нибудь а тебе хоть бы что, несерьёзно это dry , было biggrin
Не, в сети есть похожее, но не то, причем не безглючное...

А, вот еще по существу, нарыл я таки опкоды которые ломают(визуальный эффект) двери, капот, бампера и др. Ну и успешно интегрировал их в скрипт, где выдача штрафов, это скажу стало ваще улёт, как стукнешься, так все в дребезги biggrin
Вот те опкоды, если кому надо:
0730: damage_car 0@ component 0 // капот
0730: damage_car 0@ component 1 // шина
0730: damage_car 0@ component 2 // дверь водителя
0730: damage_car 0@ component 3 // передняя дверь пассажира
0730: damage_car 0@ component 4 // левые задние двери
0730: damage_car 0@ component 5 // правые задние двери
0730: damage_car 0@ component 6 // левая фара
0730: damage_car 0@ component 7 // правая фара
0730: damage_car 0@ component 8 // ?
0730: damage_car 0@ component 9 // ?
0730: damage_car 0@ component 10 // лобовое стекло
0730: damage_car 0@ component 11 // передний бампер
0730: damage_car 0@ component 12 // задний бампер

Wmysterio, Diago, спасибо парни, вы гении!

Diago
Пользователи
16.11.18 23:21
Offline
Цитата wmysterio ()
Да, только нужно ещё учитывать смещение переменных, чтобы не перезаписать случайно часть строки:

Ой. Да. Забыл v дописать)
Кстати, я решил свою проблему, о которой писал ранее, где в меню неправильно отображался текст. Просто взял все числовые переменные заменил на локальные, боялся что не хватит их, но хватило) Да и в целом, дописал скрипт)
Если кому интересно, можете посмотреть:

SPEED HOOK by Alen Diago - Спидхак [libertycity.ru]

P.S. я понял почему это происходило. Как известно, имена глобальных (Г) переменных при компиляции заменяется номером, но, чтобы знать с какого числа их компелировать, SB сканирует скрипт и выявляет первую попавшуюся Г переменную на его пути которая есть в CustomVariables.ini. Пусть, например это $ONMISSION (409$). Поэтому все неизвестные переменные (которых нет в CustomVariables.ini) он начнёт нумеровать с 410$. НО. Она тоже занята, а именно $Help_SprayCan_Shown. НО SB лично не знает 410$ поэтому первую неизвестную переменную, не смотря на то что она занята, он даст номер 410$ а в игре как я написал она уже используется как $Help_SprayCan_Shown. Поэтому в декомпилеррном скрипте я обнаружил что часть Г переменных были пронумерованы всякими $Help_SprayCan_Shown и прочими УЖЕ занятых игрой переменными, из за этого в скрипте и были баги.
МОРАЛЬ. Как и говорит справка SB, не используйте Г переменные без острой необходимости. А если нужно, то ооооооооооочень осторожно.
Отредактировал Diago - Пятница, 16.11.18, 23:38

Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Поиск: