GTA Vice City > Скриптинг
Dubstep-пушка
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 и так далее. В этом случае можно делать какие то глобальные проверки а какие то внутри этапов.
Навигация
Перейти к полной версии