# 000182. Колода карт в GTA San Andreas

\#Колода карт в GTA San Andreas

В этом уроке мы рассмотрим возможности работы с игровыми картами.

Привет! Будем играть в карты? Маловероятно, так как написать хорошую карточною игру обычным скриптингом проблематично. Тем не менее, некоторые возможности для работы с колодой у нас есть. Их мы и рассмотрим.

У нас доступны только 2 опкода, которые относятся к теме. Рассмотрим первый:

```
059D: shuffle_card_decks 1
```

Этот опкод включает возможность перемешивания карт. За что отвечает параметр "1" мне точно не известно. Скорее всего - это количество карт, которые не будут повторятся, когда будет взята карта с колоды. Или этот параметр отвечает за тип колоды, которая может использоваться для той или иной игры.

Я смог узнать только допустимые значения. Разрешено использовать параметр от 0 до 6 включительно. Если установить значение выше, то игра у меня вылетала.

После включения генератора колоды можно уже получить карту, используя опкод:

```
059E: get_card_to 0@
```

В переменную 0@ будет записан текущий идентификатор карты. По-сути: это обычное число от 1 до 52 включительно. Идентификаторы располагаются в таком порядке:

```
Т 2 3 4 5 6 7 8 9 10 В Д К
```

По цвету масти сортировка следующая:

```
Трефы (♣) Бубны (♦) Пики (♠) Червы (♥)
```

Чтобы было легче ориентироваться в этой паутине идентификаторов, я сгруппировал всё в одной картинке через скрипт:

![title](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/2/65920439.png)

Собственно, на этом можно было и закончить. Но я решил написать пример использования, чтобы статья не была такой бесполезной. Давайте дадим игроку 6 карт и позволим ему выбрать одну из них. В зависимости от выбранной карты игроку будут начислены деньги:

```
{$CLEO}
wait 2000 
01B4: set_player $PLAYER_CHAR can_move 0
0390: load_txd_dictionary 'LD_CARD' 
038F: load_texture "CD1C" as 1
038F: load_texture "CD2C" as 2
038F: load_texture "CD3C" as 3
038F: load_texture "CD4C" as 4
038F: load_texture "CD5C" as 5
038F: load_texture "CD6C" as 6
038F: load_texture "CD7C" as 7
038F: load_texture "CD8C" as 8
038F: load_texture "CD9C" as 9
038F: load_texture "CD10C" as 10
038F: load_texture "CD11C" as 11
038F: load_texture "CD12C" as 12
038F: load_texture "CD13C" as 13
038F: load_texture "CD1D" as 14
038F: load_texture "CD2D" as 15
038F: load_texture "CD3D" as 16
038F: load_texture "CD4D" as 17
038F: load_texture "CD5D" as 18
038F: load_texture "CD6D" as 19
038F: load_texture "CD7D" as 20
038F: load_texture "CD8D" as 21
038F: load_texture "CD9D" as 22
038F: load_texture "CD10D" as 23
038F: load_texture "CD11D" as 24
038F: load_texture "CD12D" as 25
038F: load_texture "CD13D" as 26
038F: load_texture "CD1S" as 27
038F: load_texture "CD2S" as 28
038F: load_texture "CD3S" as 29
038F: load_texture "CD4S" as 30
038F: load_texture "CD5S" as 31
038F: load_texture "CD6S" as 32
038F: load_texture "CD7S" as 33
038F: load_texture "CD8S" as 34
038F: load_texture "CD9S" as 35
038F: load_texture "CD10S" as 36
038F: load_texture "CD11S" as 37
038F: load_texture "CD12S" as 38
038F: load_texture "CD13S" as 39
038F: load_texture "CD1H" as 40
038F: load_texture "CD2H" as 41
038F: load_texture "CD3H" as 42
038F: load_texture "CD4H" as 43
038F: load_texture "CD5H" as 44
038F: load_texture "CD6H" as 45
038F: load_texture "CD7H" as 46
038F: load_texture "CD8H" as 47
038F: load_texture "CD9H" as 48
038F: load_texture "CD10H" as 49
038F: load_texture "CD11H" as 50
038F: load_texture "CD12H" as 51
038F: load_texture "CD13H" as 52
0581: enable_radar 0 
0826: enable_hud 0 
02EB: restore_camera_with_jumpcut
03F0: enable_text_draw 1 
 
059D: shuffle_card_decks 6 // тасуем колоду 
059E: get_card_to 1@ // сохраняем ID карты
059E: get_card_to 2@ // сохраняем ID карты
059E: get_card_to 3@ // сохраняем ID карты
059E: get_card_to 4@ // сохраняем ID карты
059E: get_card_to 5@ // сохраняем ID карты
059E: get_card_to 6@ // сохраняем ID карты

7@ = 0 // текущая выбранная карта
32@ = 0 // таймер для контроля нажатия клавиш

while true
wait 0
 if
 00E1: player 0 pressed_key 15 // ~k~~VEHICLE_ENTER_EXIT~ 
 then
 jump @END_SCRIPT
 end
 
 00E2: get_player 0 key 0 state_to 8@ // ~k~~GO_LEFT~ / ~k~~GO_RIGHT~

 if and
 32@ > 128
 8@ == 128
 then 
 32@ = 0
 if
 5 > 7@
 then
 7@ += 1
 end
 end 
 
 if and
 32@ > 128
 8@ == -128
 then 
 32@ = 0
 if
 7@ > 0
 then
 7@ -= 1
 end
 end
 
 9@ = 169.0 
 for 0@ = 0 to 5 
 if
 003B: 7@ == 0@ // (int)
 then 
 038E: draw_box_position 9@ 224.0 size 48.0 80.0 RGBA 64 0 156 222
 else 
 038E: draw_box_position 9@ 224.0 size 40.0 72.0 RGBA 0 0 0 196
 end 
 038D: draw_texture 1@(0@,6i) position 9@ 224.0 size 32.0 64.0 RGBA 255 255 255 255 
 9@ += 54.0
 end
 
 if
 00E1: player 0 pressed_key 16 // ~k~~PED_SPRINT~ 
 then
 1@(7@,6i) *= 1000
 0109: player $PLAYER_CHAR money += 1@(7@,6i)
 jump @END_SCRIPT
 end
 
end

:END_SCRIPT
0581: enable_radar 1 
0826: enable_hud 1 
03F0: enable_text_draw 0 
0391: release_textures 
059D: shuffle_card_decks 0 
01B4: set_player $PLAYER_CHAR can_move 1
0A93: end_custom_thread
```

Вот такой небольшой скрипт у нас получился. Результат такой:

![title](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/2/67868845.png)

Спасибо за внимание!

× **Примечание:** я использовал идентификаторы согласно оригинальному MAIN.SCM. Возможно, они только декоративные и по-сути колода является только генератором простых чисел от 1 до 52 включительно.


---

# 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/000182.-koloda-kart-v-gta-san-andreas.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.
