# 000117. Обзор класса Model

Обзор класса Model|Сегодня мы рассмотрим ещё один небольшой класс - Model. Мы узнаем как загружать модели и как их использовать!|wmysterio|wmysterio||||Начнём с конструктора. Что бы объявить модель нам нужно написать:

```
cs
Model MyModel;
```

Мы объявляем нашу модель и она ждёт указания имени нашей модели и дальнейшего использования. Но более удобно использовать именно конструктор, когда модель мы уже знаем и хотим явно присвоить переменной. Для этого нужно использовать следующий код:

```
cs
Model MyModel = new Model("Admiral");
```

Само слово**new** значит "новый", то есть мы создаём очередной экземпляр класса. Такая запись является вызовом конструктором класса. Хочу обратить ваше внимание, на следующую картинку:

![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/68072620.png)

Такое выпадающее меню указывает, что конструктор или функция может иметь несколько вариантов выполнения. Такой процесс называется перегрузкой функций. Детальнее о перегрузках вы можете узнать со ссылок в конце урока. Если мы во время этого списка мы начнём нажимать на клавиатуре стрелками ↑ `или <kbd>&#8595;`, вы увидите какие параметры может принимать функции. В моём случаи устраивает следующий вариант:

![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/88770923.png)

Мы явно указали, какую модель мы должны записать в переменную MyModel, как показано выше.

Рассмотрим, что у нас есть с самим объектом класса. А содержит он только условия. Вот их список:

<table data-header-hidden><thead><tr><th></th></tr></thead><tbody><tr><td><p>```</p><p>cs /* Проверка: "Модель является для мотоциклов?": <em>/ MyModel.isBike /</em> Здесь: возвращаемый параметр: bool */</p><pre><code>Пример в Sanny Builder: нет&#x3C;/td>&#x3C;/tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для лодок?": <em>/ MyModel.isBoat /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>081E: model 0@ boat</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для автомобилей?": <em>/ MyModel.isCar /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>0A01: model 0@ car</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для вертолётов?": <em>/ MyModel.isHelicopter /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>0820: model 0@ heli</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель загружена?" или "Модель в памяти игры?": <em>/ MyModel.isInMemory /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>0820: model 0@ heli</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для пешеходов?": <em>/ MyModel.isPed /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для самолётов?": <em>/ MyModel.isPlane /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>081F: model 0@ plane</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для поездов?: <em>/ MyModel.isTrain /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель является для транспорта?": <em>/ MyModel.isVehicle /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Проверка: "Модель действительная?" или "Модель существует?": <em>/ MyModel.isValid /</em> Здесь: возвращаемый параметр: bool \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>0488: model 0@ exists // versionA 07DE: model 0@ exists // versionB</p><pre><code>\</td>\</tr>

\</tbody>\</table>

Также класс имеет ряд статических свойств. Рассмотрим их:

\<table class="table table-bordered">\<tbody>

\<tr>\<td> </code></pre><p>cs /\* Получить модель оружия: <em>/ Model.GetWeaponModel(WeapMod) /</em> Здесь: "Admiral" - название модели (string)</p><p>Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: </code></pre><p>0781: get\_weapon\_with\_ID 31 model\_to $TEMP\_MODEL</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получает модель, указав её имя: <em>/ Model.FromString("Admiral") /</em> Здесь: "Admiral" - модель (string)</p><p>Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получает базовую модель копов: <em>/ Model.BasicCopModel /</em> Здесь: Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получает базовую модель машины копов: <em>/ Model.BasicPoliceCarModel /</em> Здесь: Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получает текущую модель копов: <em>/ Model.CurrentCopModel /</em> Здесь: Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получает текущую модель машины копов: <em>/ Model.CurrentPoliceCarModel /</em> Здесь: Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Скорее всего это модель игрока (???): <em>/ Model.Null /</em> Здесь: Возвращает: объект класса Model */</p><pre><code>Пример в Sanny Builder: </code></pre><p>/* Возможно: \*/ 0@ = #NULL</p><pre><code>\</td>\</tr>

\<tr>\<td> </code></pre><p>cs /\* Получить модель машины такси: <em>/ Model.TaxiCarModel /</em> Здесь: Возвращает: объект класса Model \*/</p><pre><code>Пример в Sanny Builder: нет\</td>\</tr>

\</tbody>\</table>

Ещё хотел бы добавить о конструкторах. Создавать объекты классов можно непосредственно в методах. Хорошим примером будет следующий код:

</code></pre><p>cs World.CreateVehicle(new Model("Admiral"), MyVec);</p><pre><code>

Функция CreateVehicle имеет перегрузку. Если в Ваших планах стоит только создать автомобиль и никаких дальнейших действий мы с ним не планируем делать, то команда позволяем это сделать: создать машину, не указывая переменную.

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

\<table class="table table-bordered">\<tbody>
\<tr>\<th>C#\</th>\<th>Sanny Builder\</th>\</tr>
\<tr>\<td> </code></pre><p>cs using System; using System.Windows.Forms; using GTA;</p><p>namespace TestScript { public class Thread : Script { public Thread() { Vector3 MyVec; while (true) { MyVec = Player.Character.Position; if (Game.isKeyPressed(Keys.Tab)) { Wait(5000); World.CreateVehicle(new Model("Admiral"), MyVec); Game.DisplayText("Car Created!"); } Wait(0); } } } }</p><pre><code>\</td>\<td> </code></pre><p>{$CLEO} 0000: thread 'TestScript' model.Load(#ADMIRAL) 038B: load\_requested\_models</p><p>while not model.Available(#ADMIRAL) wait 0 end</p><p>while true Actor.StorePos($PLAYER\_ACTOR, 0@, 1@, 2@) wait 5000 if 0AB0: key\_pressed 9 // Tab then 00A5: 3@ = create\_car #ADMIRAL at 0@ 1@ 2@ end wait 0 end</p><pre><code>\</td>\</tr>
\</tbody>\</table>

Проверим скрипт:

\<!--IMG1-->\<img src="/\_pu/1/12407798.png" />\<!--IMG1-->

Надеюсь, урок вам понравился :)

\<hr>
Ссылки на перегрузку функций:

* \<a href="[http://professorweb.ru/my/csharp/charp\_theory/level6/6\_1.php">ProfessorWeb\&#x3C;/a>](http://professorweb.ru/my/csharp/charp_theory/level6/6_1.php">ProfessorWeb\&#x3C;/a>)
* \<a href="[http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0\_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80\_%D0%B8\_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9">Википедия\&#x3C;/a>\&#x3C;br](http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80_%D0%B8_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9">Википедия\&#x3C;/a>\&#x3C;br) />
* \<a href="[http://vbbook.ru/visual-c.net/peregryzka-metodov-c/">vbbook\&#x3C;/a>](http://vbbook.ru/visual-c.net/peregryzka-metodov-c/">vbbook\&#x3C;/a>)
  |589|1|0|12407798`png`400`338 </code></pre><p><code>\|68072620</code>png<code>295</code>51</p><pre><code>`|88770923`png`390`52 </code></pre><p>`||obzor\_klassa\_model|1554385340</p></td></tr></tbody></table>
