GTA Vice City > Скриптинг

Dubstep-пушка

(1/4) > >>

Prographer:
Всем привет. Написал тут скрипт на дабстеп-пушку, но работает он как-то не стабильно. Помогите разобраться, в чём проблема? Закомментировал всё, что вспомнил (что-то может быть не совсем верно :) ). Всем заранее спасибо.

--- Код: ---{$CLEO}
0000:
thread 'DubGun'
    wait 0
        :start
        wait 0
       
        if or
            Player.Defined($PLAYER_CHAR)
            Player.Wasted($PLAYER_CHAR)
            Model.Available(#RUGER)
        jf @start
       
        Model.Load(#RUGER)
        038B: load_requested_models
        :check
            wait 0
            3@ = 0x0 // отступ от нулевого элемента в массиве указателей на педов
            if and
                02D7: player $PLAYER_CHAR currentweapon == 27           // 27 - Ruger
                05EE: key_pressed 0x1                                   // 0x1 - левый клик
                02E0: actor $PLAYER_ACTOR firing_weapon
            then
                03CF: load_wav 'bust_07' as 1
                04ED: load_animation 'STRIP'
               
                repeat
                    wait 0
                until 04EE: has_animation_loaded 'STRIP'
               
                repeat
                    wait 0
                until 03D0: wav 1 loaded
                       
                03D1: play_wav 1
               
                /* * * ЛОГИКА * * */
                /*
                    1. Получаем структуру игрока и кладём в 1@
                    2. Преобразуем 1@ в массив указателей на 10 педов (0x56С)
                    3. Прибавляем размер указателей, которые уже обработали
                    4. Получаем структуру из адреса на педа
                    5. Применяем ему анимацию
                    6. Прибавляем к 3@ размер текущего указателя на педа
                */
               
                for 2@ = 0 to 5                                         // применяем анимацию к пяти педам
               
                    05E6: 1@ = actor $PLAYER_ACTOR struct               // структура игрока
                    1@ += 0x56C                                         // адрес нулевого элемента в массиве указателей на ближайших десяти педов
                   
                    005A: 1@ += 3@
                    05E0: 1@ = read_memory 1@ size 4 virtual_protect 0  // 1@ - адрес n-го педа
                   
                    05E9: 1@ = ped_struct 1@ handle                     // переводим структуру в дискриптор, чтобы применить анимацию
                    0372: set_actor 1@ anim 32 wait_state_time 3000 ms  // применяем анимацию
                    3@ += 0x4                                           // 0x4 - размерность указателя на педа
                   
                end
               
                2@ = 0                                                  // обнуляем счётчик
                01E3: text_1number_styled 'REWARD' number 1@ time 6000 style 6
               
                while 05EE: key_pressed 0x1                             // левый клик мыши (стрельба)
                    wait 0
                    0419: 0@ = player $PLAYER_CHAR weapon 27 ammo
                    if
                        0@ == 0
                    then
                        01C2: remove_references_to_actor 1@
                        040D: unload_wav 1
                        //04EF: release_animation 'STRIP'
                    end
                end
               
                01C2: remove_references_to_actor 1@
                040D: unload_wav 1
                3@ = 0x0
            end
        //04EF: release_animation 'STRIP'   
        jump @check
end_thread

--- Конец кода ---

Prographer:
Забыл дополнительные файлы: модель дабстеп-пушки и аудиофайл.
https://yadi.sk/d/tLYWg6D_3HU87R

Shagg_E:
Блин. Помог бы, но терпеть не могу такой вид кода, так что "на глазок" хз в чем проблема. Если будет время на след. неделе - протестирую, передекомпилирую код в привычный для меня вид и поковыряюсь

Shagg_E:
Черт. Наконец появилось время на гташку, решил глянуть этот скрипт, потеребонькал опкоды да параметры, понял, что такой вид кода - не моё и решил переписать с нуля, т.к. вроде понял, как это должно работать (посмотрел, как это сделано в Saints Row 4).
Но вот беда: пока этим занимался - пришла пара идей, и вот уже часа 2 не могу оторваться....беда.

mfisto:
Player.wasted проверка никчему, и желательно циклов поменьше, я обычно делаю один цикл на весь скрипт и один wait 0 и прогоняю все возможные проверки в нем, если нужно например выполнять последовательные действия, то использую одну из переменных как этапы. Скажем если 0@ == 0 (это первый этап: выполняем его и присваиваем 0@ = 1) далее второй этап 0@ == 1 и так далее. В этом случае можно делать какие то глобальные проверки а какие то внутри этапов.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии