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

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

```
0A4A: store_joystick_X_offset_to 1@ Y_offset_to 2@
```

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

Перейдём к наглядному примеру. Я написал мини-игру с использованием опкода 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00400/000171.-kontrol-za-peremesheniyami-myshi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
