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