# 000102. Метки и прыжки

Метки и прыжки|Всем хай! Этот короткий урок будет о метках и о том, как совершать прыжки на них.|wmysterio|wmysterio||||Как и в СанниБилдер, в C# так же есть подобная возможность. Начнём с меток. Синтаксис написания похож на 99% с SB, разница только в том, что символ **:** нужно ставить после названия метки:

```
cs
Label1:
```

Пример:

```
cs
using System;
using GTA;

namespace TestScript {

 public class Thread : Script {

 public Thread() {

 Label1:

 Label2:

 Label3: 
 
 Label4:

 }

 }
}
```

С метками скрипт уже во многом напоминает наш любимый SannyBuilder. Здесь также присутствуют правила написания меток ( и переменных в том числе ):

* Нужно использовать латинские символы в качестве имён;
* Первый символ не должен начинаться с цифры;
* Нельзя разделать название пробелами и использовать спец-символы;
* Название должно быть уникальным (не должно совпадать);

Прыжки! Наш любимый **jump** теперь есть в c#. Как и SannyBuilder, в c# есть инструкция **goto**, что равносильна команде **jump** в SB. Синтаксис в C# следующий:

```
cs
goto Label1;
```

Минусы в том, что метки не сохраняются в каком-то буфере обмена, поэтому нужно запоминать все метки. К тому-же метку нельзя писать, если на неё не переходит хоть один оператор goto, что не совсем удобно.

× \*\*Примечание:\*\* такие зависимости действуют не во всех версиях C#.

Рассмотрим простой пример:

<table><thead><tr><th>C#</th><th>Аналог в Sanny Builder</th></tr></thead><tbody><tr><td><p>```</p><p>cs using System; using GTA;</p><p>namespace TestScript {</p><p>public class Thread : Script {</p><p>public Thread() {</p><p>Label1: goto Label2;</p><p>Label2: goto Label1;</p><p>}</p><p>}</p><p>}</p><pre><code>&#x3C;/td>&#x3C;td>
</code></pre><p>{$CLEO} 0000: thread 'Thread'</p><p>:Label1 jump @Label2</p><p>:Label2 jump @Label1</p><p>0A93: end_custom_thread</p><pre><code>&#x3C;/td>&#x3C;/tr>
&#x3C;/tbody>&#x3C;/table>

Согласитесь, похож ведь SannyBuilder на C#! С метками и прыжками кодить в C# намного привычнее.

Мы помним, что в SannyBuilder, наш вариант кода приведёт к ошибке, так как отсутствует "wait 0" после меток. В c# таже ситуация. Я тестировал этот код и игра у меня постоянно загружалась, но загрузится так и не смогла. На помощь мне пришел именно этот **wait**! В C# так же есть требования относительно задержки. И, вот наша первая команда с библиотеки **ScriptHookDotNet**:

</code></pre><p>cs Wait(0);</p><pre><code>

Теперь наш код должен иметь такой вид:

\<table class="table table-bordered">\<tbody>
\<tr>\<th>C#\</th>\<th>Аналог в Sanny Builder\</th>\</tr>
\<tr>\<td> </code></pre><p>cs using System; using GTA;</p><p>namespace TestScript {</p><p>public class Thread : Script {</p><p>public Thread() {</p><p>Label1: Wait(0); goto Label2;</p><p>Label2: goto Label1;</p><p>}</p><p>}</p><p>}</p><pre><code>\</td>\<td> </code></pre><p>{$CLEO} 0000: thread 'Thread'</p><p>:Label1 wait 0 jump @Label2</p><p>:Label2 jump @Label1</p><p>0A93: end\_custom\_thread</p><pre><code>\</td>\</tr>
\</tbody>\</table>

Следует помнить, что нельзя делать прыжки на метки другого потока, так как они находятся не в области видимости оператора "goto". Да и в c# метками не особо часто пользуются, но вы должны о них знать. На этом урок окончен. Всем спасибо за уделённое время на урок :)|745|1|0||metki\_i\_pryzhki|1511734080 </code></pre></td><td></td></tr></tbody></table>
