# 00020. Типы пешеходов, номера банд и отношение между ними

Типы пешеходов, номера банд и отношение между ними|Этот урок я посвящу бандам, то есть мы научим банды контролировать улицы, указывать отношение банд к игроку ( CJ ).|wmysterio|wmysterio||||Пришло время нам немного бросить теорию и начать делать что то с игрой :)

Для начала нужно знать кто такой актёр ( actor ). Актёр — это любой персонаж в игре, в том числе и СЖ. Каждый такой актёр имеет свой тип, то есть какую роль он будет выполнять в игре. Таблицу всех известных типов можно найти в справке SB или в нашей [базе данных](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/tipy_peshekhodov/1-1-0-35/README.md)).

Банда — это небольшое количество людей, в которых общие цели. Всего в игре есть около 10 банд. И каждая банда имеет свой уникальный номер. Номера банд можно узнать со справки компилятора или посмотреть нашу [базу данных](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/nomera_band/1-1-0-36/README.md). Обратите внимание, что счёт ведётся с нуля.

Итак, давайте укажем зону, которую будут контролировать банды. Делается это опкодом:

```
076C: set_zone 'GAN1' gang 1 density_to 80
```

Здесь:\
'GAN1' — это имя зоны, которую будут контролировать банды ( имя игровые зоны можно найти в справке или в нашей [базе данных](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/nazvanie_zon_dlja_gta_san_andreas/1-1-0-16/README.md) )\
1 — номер банды, которая будет контролировать, в нашем случаи это гроув\
80 — это плотность ( сила ) банды. Советую брать диапазон от 1 до 100. Учтите, что чем меньше плотность, тем реже будут появляться члены банд на улице.<br>

Чтобы в банд было какое-то оружие, нужно написать опкод:

```
0237: set_gang 1 weapons_to 24 29 4
```

1 — номер банды\
24 - номер первого оружия\
29 - номер второго оружия\
4 - номер третьего оружия

Все номера оружия вы сможете просмотреть в нашей [базе данных](https://github.com/wmysterio/scm-scripting-lessons/blob/main/dir/gta_sa/oruzhie_v_gta_san_andreas/1-1-0-14/README.md) ( см. колонку "Номер оружия" ).

Если мы хотим, что бы велась война за территории ( их можно было захватить ), то используйте опкод:

```
0879: enable_gang_wars 1
```

Здесь:\
1 - включить возможность ( если поставить 0, то такой возможности не будет ).× \*\*Примечание:\*\* Можно отбирать территории только в Баллас и Вагос. Менять цвет или добавлять новый опкодом нельзя! Ещё нету такой возможности, что бы СЖ стал представителем какой то банды ( не гров ). Такие возможности скорее можно делать только через игровую память, но там я не силён.× \*\*ВАЖНО:\*\* Чтобы увидеть окраску зон, нужно зайти в любой интерьер ( например, дом Карла ) и снова выйти на улицу. Если эффект не достигается, то как правило, достаточно убить игрока и зоны окрасятся в нужные цвета. Также иногда помогает загрузка сохранения.

Давайте напишем скрипт, что бы было парочка районов, которых можно захватить:

```
// WMYSTERIO, ru-script.3dn.ru
DEFINE OBJECTS 1
DEFINE OBJECT SANNY BUILDER 3.04 

DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0

DEFINE UNKNOWN_EMPTY_SEGMENT 0

DEFINE UNKNOWN_THREADS_MEMORY 3072

//-------------MAIN---------------
thread 'MAIN'
set_wb_check_to 0
set_weather 0
select_interior 0
fade 0 0
0180: set_on_mission_flag_to $ONMISSION
00C0: set_current_time_hours_to 8 minutes_to 0
04E4: unknown_refresh_game_renderer_at 2491.1572 -1670.3434
Camera.SetAtPos(2491.1572, -1670.3434, 12.3359)
$PLAYER_CHAR = Player.Create(#NULL, 2491.1572, -1670.3434, 12.3359)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Actor.Angle($PLAYER_ACTOR) = 66.3548
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
Camera.SetBehindPlayer
Player.Build($PLAYER_CHAR)
Player.CanMove($PLAYER_CHAR) = True
fade 1 0
// старт нового кода
0879: enable_gang_wars 1
076C: set_zone 'GAN1' gang 1 density_to 40 
076C: set_zone 'GAN2' gang 1 density_to 80 
076C: set_zone 'IWD1' gang 0 density_to 40 
076C: set_zone 'IWD2' gang 0 density_to 80 
076C: set_zone 'IWD3A' gang 2 density_to 40 
076C: set_zone 'IWD3B' gang 2 density_to 80 
0237: set_gang 0 weapons_to 22 31 14 
0237: set_gang 1 weapons_to 30 28 17 
0237: set_gang 2 weapons_to 36 15 27 
// конец нового кода
end_thread
```

Давайте проверим наш скрипт. Как видим, наша задача выполнена. Просмотрев карту, мы увидим примерно такое:

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

Всё, что нам осталось - это захватить их. Как это делается, думаю, вам известно :) Давайте напишем как будут относится к СЖ банды или другие педы ( актёры(люди) ). Вот опкод, который отвечает за это:

```
0746: set_acquaintance 1 of_actors_pedtype 8 to_actors_pedtype 0
```

Здесь:\
1 — это само отношение. Таблица возможных отношений приведена ниже\
8 — тип актёра, который относится к кому-то\
0 — тип актёра, к которому относятся

| Таблица отношений |                                                             |
| ----------------- | ----------------------------------------------------------- |
| Номер             | Отношение                                                   |
| 0                 | Превознесение ( не будут нападать )                         |
| 1                 | Уважение ( могут отвечать на атаки в их сторону )           |
| 2                 | Ранодушее ( будут нападать только тогда, когда атакуют их ) |
| 3                 | Неприязнь ( есть шанс напасть без причины )                 |
| 4                 | Ненависть ( будут нападать при первой возможности )         |

В нашем примере банда гров относится к СЖ с уважением. Если мы хотим, что бы СЖ-я ненавидела банда Гров, то 1 нужно поменять на 4.

Давайте сделаем так, что бы были постоянно перестрелки между бандами и копами, то есть что бы они ненавидели друг друга. То же самое касается и банд:

```
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 6
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 6
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 6
```

После этого, как только банды ( гров, вагос, баллас ) увидят копов, сразу же попытаются их убить. Что бы копы тоже ненавидели банды, допишем строки:

```
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 9
```

Таким образом мы сделали поставленную задачу. Теперь нам осталось только написать отношение банд к другим бандам, а так же отношение банд к СЖ:

```
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 9
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 9
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 0
0746: set_acquaintance 0 of_actors_pedtype 8 to_actors_pedtype 0
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 0
```

Вот мы и написали отношение банд к СЖ, к другим бандам и копам. Нам осталось только вставить результат в скрипт и проверить.

```
// WMYSTERIO, ru-script.3dn.ru
DEFINE OBJECTS 1
DEFINE OBJECT SANNY BUILDER 3.04 

DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0

DEFINE UNKNOWN_EMPTY_SEGMENT 0

DEFINE UNKNOWN_THREADS_MEMORY 3072

//-------------MAIN---------------
thread 'MAIN'
set_wb_check_to 0
set_weather 0
select_interior 0
fade 0 0
0180: set_on_mission_flag_to $ONMISSION
00C0: set_current_time_hours_to 8 minutes_to 0
04E4: unknown_refresh_game_renderer_at 2491.1572 -1670.3434
Camera.SetAtPos(2491.1572, -1670.3434, 12.3359)
$PLAYER_CHAR = Player.Create(#NULL, 2491.1572, -1670.3434, 12.3359)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Actor.Angle($PLAYER_ACTOR) = 66.3548
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group
Camera.SetBehindPlayer
Player.Build($PLAYER_CHAR)
Player.CanMove($PLAYER_CHAR) = True
fade 1 0
0879: enable_gang_wars 1 // наш новый код!
076C: set_zone 'GAN1' gang 1 density_to 40 
076C: set_zone 'GAN2' gang 1 density_to 80 
076C: set_zone 'IWD1' gang 0 density_to 40 
076C: set_zone 'IWD2' gang 0 density_to 80 
076C: set_zone 'IWD3A' gang 2 density_to 40 
076C: set_zone 'IWD3B' gang 2 density_to 80 
0237: set_gang 0 weapons_to 22 31 14 
0237: set_gang 1 weapons_to 30 28 17 
0237: set_gang 2 weapons_to 36 15 27 
// старт нового кода
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 6
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 6
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 6
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 6 to_actors_pedtype 9
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 9
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 8 to_actors_pedtype 9
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 7
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 8
0746: set_acquaintance 4 of_actors_pedtype 7 to_actors_pedtype 0
0746: set_acquaintance 0 of_actors_pedtype 8 to_actors_pedtype 0
0746: set_acquaintance 4 of_actors_pedtype 9 to_actors_pedtype 0
// конец нового кода
end_thread
```

С таким кодом в игре обязательно должны случатся массовые перестрелки, что повышает криминальность города. Так же можно сделать, что бы банды не приставали к СЖ, когда он возле них. Экспериментируйте с отношениями и типами актёров. Если есть вопросы по этой теме пишите комментарии или обращайтесь на [форум](https://github.com/wmysterio/scm-scripting-lessons/blob/main/forum/6-9-0-17/README.md).

P. S. Думаю бессмысленно указывать отношение СЖ к другим педам, так как управляете им вы! =)|2637|1|0|09129058`png`1314`788`400\`239\`\`||tipy\_peshekhodov\_i\_band|1498566085
