000171. Контроль за перемещениями мыши

Контроль за перемещениями мыши|Всем доброго дня! На связи SanKing и это мой второй урок скриптинга. На этот раз мы с вами рассмотрим опкод, возвращающий силу движения мыши и всё, что с этим опкодом можно сделать.|SanKing|SanKing||||Собственно, сам опкод:

0A4A: store_joystick_X_offset_to 1@ Y_offset_to 2@

Здесь: 1@ - смещение по оси X, то есть влево-вправо. 2@ - смещение по оси Y, то есть вперёд-назад.

Перейдём к наглядному примеру. Я написал мини-игру с использованием опкода 0A4A, смысл которой заключается в том, что нужно очень быстро дёргать мышкой вверх-вниз. Давайте разберём код скрипта!

{$CLEO}
0000:

while true
 if
 Key.Pressed(90) //Z
 then
 $POLOSA = 40 // задаём начальное значение статус-текста
 04F7: status_text $POLOSA type 1 line 1 GXT 'DUMMY' // создаём статус-текст

 while true // бесконечный цикл
 0A4A: store_joystick_X_offset_to 1@ Y_offset_to 2@ // получаем смещение мыши
 if or // проверяем, как сильно двинулась мышь вперёд или назад
 2@ > 1050000000
 -1050000000 > 2@
 then // если достаточно сильно, то полоса увеличивается на десять единиц
 $POLOSA += 10
 end
 $POLOSA -= 5 // но сразу же уменьшается на пять, так что за одну итерацию полоска может увеличиться только на 10-5=5 единиц
 if // если полоска достигла нуля
 1 > $POLOSA
 then // тогда флаг принимает значение 1 (провал) и осуществляется выход из цикла
 0@ = 1
 break
 end
 if // а если же она заполнилась полностью
 $POLOSA > 99
 then // то флаг становится равным 2, то есть успех, и игра выходит из цикла
 0@ = 2
 break
 end 
 wait 250
 end
 
 0151: remove_status_text $POLOSA // убираем статус-текст
 if // если задание провалено 
 0@ == 1
 then
 00BA: show_text_styled GXT "M_FAIL" time 2500 style 1 // показываем текст "Миссия провалена"
 wait 2500
 end
 if // если же выполнено
 0@ == 2
 then
 0394: play_music 2 // играет музыка завершения миссии
 wait 2500
 end
 end
wait 0
end

Отмечу несколько моментов. При проверке значения переменной 2@ можно использовать и другие числа. Например: 1000000000 (миллиард). Удивительно, но это число считается минимальным сдвигом мыши в GTA SA! Если вставить в код его, то выиграть не составит никакого труда. 1100000000 - с этим значением игра станет ОЧЕНЬ сложной, я лично не мог пройти ни разу. В своём примере я использовал среднее значение ( 1050000000 ). Так играть тоже сложно, но пройти вполне реально.

Также нужно запомнить, что хэндл статус-текста может быть только глобальной переменной.

Осталось навести косметические правки, а именно добавить больше текста и анимацию. Зелёным отмечены новые строки:

{$CLEO}
0000:
054C: use_GXT_table 'SMOKE1'
Animation.Load("BOMBER")

while true
 if
 Key.Pressed(90) //Z
 then
 $POLOSA = 40
 04F7: status_text $POLOSA type 1 line 1 GXT 'DUMMY'
 0605: actor $PLAYER_ACTOR perform_animation "BOM_PLANT_LOOP" IFP "BOMBER" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1
 
 while true
 0A4A: store_joystick_X_offset_to 1@ Y_offset_to 2@
 if or
 2@ > 1050000000
 -1050000000 > 2@
 then
 $POLOSA += 10
 end
 $POLOSA -= 5
 if
 1 > $POLOSA
 then
 0@ = 1
 break
 end
 if
 $POLOSA > 99
 then
 0@ = 2
 break
 end 
 wait 250
 end
 
 0151: remove_status_text $POLOSA
 0605: actor $PLAYER_ACTOR perform_animation "BOM_PLANT_CROUCH_OUT" IFP "BOMBER" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time -1
 if
 0@ == 1
 then
 00BA: show_text_styled GXT "M_FAIL" time 2500 style 1
 00BC: show_text_highpriority GXT 'SMO1_FC' time 2500 flag 1 // реплика Фредди из миссии OG Loc
 wait 2500
 end
 if
 0@ == 2
 then
 00BC: show_text_highpriority GXT 'DNC_020' time 2500 flag 1 // похвала в танцах
 0394: play_music 2
 wait 2500
 end
 end
wait 0
end 

На этом всё, желаю удачи в скриптинге, цените GTA San Andreas!|1329|48|0||kontrol_za_peremeshhenijami_myshi|1504602503

Last updated