Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Подработка — 'Яблоневый сад'

Aurelius

Умник
Доброго времени суток, уважаемые пользователи Pawno-Info — лучшего портала о Pawn скриптинге.​

Хотелось бы представить вашему вниманию небольшую систему для игрового мода с RolePlay режимом. Сама система представляет собой подработку без какого-либо официального трудоустройства, а её наименование: 'Яблочный сад'.

Пролог, чтобы ознакомиться с функционалом​
  • Чтобы начать работу необходимо поднять пикап для выдачи рабочей одежды.
  • Если сад требует поливания для процесса выращивания урожая, необходимо подойти к специальному месту и нажать клавишу L.ALT.
  • Запуска процессе поливания состоит из нажатия случайных клавиш которые отображены на специальном ТД.
  • При верном нажатии клавиши шкала прогресса будет увеличиваться. Когда шкала достигнет конца — стадия поливания успешно запущена.
  • В случае нажатия неверной клавиши весь прогресс будет сброшен.
  • После окончания стадии поливания наступает следующая стадия — выращивание.
  • При окончании стадии выращивания в чат будет отображено специальное уведомление о том, что можно приступать к обработке деревьев.
  • Чтобы обработать дерево необходимо нажать клавишу L.ALT, будет воспроизведена анимация удара по дереву и яблоки упадут на землю. Но это ещё не всё, теперь необходимо собрать яблоки с земли в ящик, также с помощью клавиши L.ALT.
  • Когда дерево успешно обработано необходимо отнести ящик на место склада. При успешной доставке будет выдаваться случайная сумма от 1 до 50$, а также, пополнятся общее количество доставленных ящиков. Вся эта информация обновляется на специальном ТД.
  • Когда все деревья будут успешно обработаны, необходимо повторить весь процесс заново.
  • Чтобы закончить работу и получить деньги, нужно поговорить с специальным NPC.

Перед тем как приступить к рассмотрению кода. Хочу предупредить людей с несдержанными высказываниями о том, что я не имею сверх-знаний в плане оптимизации алгоритмов, а также, считаю себя неофитом в pawn-скриптинге. По этому крайне прошу проявить снисходительность с вашим высказыванием
В свою очередь, мне хотелось бы увидеть конструктивную критику по сомнительным участкам моего кода, чтобы выделить для себя допущенные ошибки.


После всех церемоний хочется написать лишь одно: если вы верующий человек — перекреститесь, ведь мы переходим к коду.

ATTENTION
Для корректной работы системы необходимо подключить пару плагинов/инклудов: streamer.inc, foreach.inc

Непосредственно проверим внимательность прочтения выше написанного текста и после подключения всех инклудов добавим:
C++:
#if !defined Streamer_IncludeFileVersion
    #error requires streamer.inc to work.
#endif


#if !defined _FOREACH_LOCAL_VERSION
    #error requires foreach.inc to work.
#endif


#if !defined HEX_COLOR_AG
    #define HEX_COLOR_AG 0xBEF4C3FF
#endif
Надеюсь, что всё хорошо и необходимые инклуды подключены.

Для начала, нам понадобится объявить несколько макросов.
C++:
#define HEX_COLOR_AG         0xBEF4C3FF /* HEX цвет системы */
#define AG_PLAYER_SALARY     (50)  /* Максимальная допустимая сумма денег за 1 ящик */

/* Текст редактируется под себя */
#define ACTOR_WORK_INFORMATION_TEXT        "\
                                            {FFFFFF}Для того, чтобы начать работу Вам необходимо переодеться в рабочую одежду в интерьере.\n\
                                             После того как Вы переоделись и все деревья сада обработаны, необходимо полить сад водой.\n\
                                             После успешно законченного полива ожидаем процесс созревания урожая.\n\
                                             Когда урожая будет готов к сбору Вы получите уведомление.\n\
                                             После успешной обработки дерева необходимо собрать яблоки в ящик и доставить на склад.\n\
                                             За каждый успешно доставленный ящик Вы получите случайную сумму до 50$.\
                                        "
Также, объявим необходимые константы.
C++:
const
    MAX_AT_APPLE_TREE = 35, /* Максимальное количество деревьев */
    MAX_AT_WATER_OBJECT = 36, /* Максимальное количество объектов воды для стадии поливания */
    MAX_AT_APPLE_OBJECT = 10, /* Максимальное количество объектов яблок */
  
    MAX_AG_KEY_INCREMENT = 10, /* Максимальное количество нажатий клавиш */
    MAX_AG_KEY_TICK = 1500, /* Максимальное количество времени до генерации клавиш для нажатия */
    MAX_AG_KEY_DELAY_TICK = 3000, /* Максимальное количество времени для нажатия клавиши */
    MAX_AG_WATER_STAGE_TICK = 120000, /* Максимальное количество времени стадии поливанря */
    MAX_AG_APPLE_STAGE_TICK = 60000, /* Максимальное количество стадии выращивания */
    MAX_AG_BOX_FILLING_TICK = 5000, /* Максимальное количество наполнения поднятия ящика */
    MAX_AG_CAMERA_MOVE_TICK = 14000; /* Максимальное количество времени до возвращения камеры игроку */
Для диалогов, я бы рекомендовал использовать диалоговый процессор, но не будем усложнять и обойдемся перечислением.
C++:
enum
{
    INVALID_DIALOG_ID = 0,         /* ID 0 - несуществующий диалог, по необходимости замените на свой */
    dAppleGarden_NPC_Mike = 1,     /* Задайте своё значение свободного диалога */
    dAppleGarden_NPC_About,
    dAppleGarden_NPC_Work_End
}
Для более удобного обращения к стадиям создадим перечисление.
C++:
enum e_APPLE_GARDEN_STAGE
{
    APPLE_GARDEN_STAGE_NONE, /* Без стадии */
    APPLE_GARDEN_STAGE_PREPARE, /* Стадия подготовки */
    APPLE_GARDEN_STAGE_WATER, /* Стадия поливания */
    APPLE_GARDEN_STAGE_APPLE /* Стадия урожая */
};
Для более удобного обращения к статусу работы создадим перечисление.
C++:
enum e_JOB_STATUS
{
    JOB_STATUS_NONE, /* Без статуса */
    JOB_STATUS_INVITED /* Игрок устроен */
};
Следующим действием нужно создать структуру данных сада.
C++:
enum e_APPLE_GARDEN_INFO
{
    agActor, /* Хранит ID актера */
    agPickupEntrance, /* Вход интерьер */
    agPickupExit, /* Выход из интерьера */
    agPickupClothes, /* Пикап одежды */
    e_APPLE_GARDEN_STAGE:agGardenStage, /* Хранит статус стадии сада */
    agPlayerStage, /* Хранит ID игрока, который запустил поливание */
    Text3D:ag3DText /* 3D текст информации поливания */
};
new agGardenInfo[e_APPLE_GARDEN_INFO];
Далее необходимо создать структуру данных деревьев.
C++:
enum e_APPLE_TREE_INFO
{
    Float:atTreeXPosX, /* Хранит позицию дерева по координате X */
    Float:atTreePosY, /* Хранит позицию дерева по координате Y */
    bool:atAppleStatus, /* Хранит статус объекта на дереве */
    atAppleDown, /* Хранит статус объекта на на земле */
    atAppleObject[MAX_AT_APPLE_OBJECT], /* Хранит ID объекта */
    atTreeCount, /* Хранит общее количество обработанных деревьев */
    atAppleTime, /* Хранит время до падения объекта на землю  */
    atArea /* Хранит динамическую зону вокруг дерева */
};
new atTreeInfo[MAX_AT_APPLE_TREE][e_APPLE_TREE_INFO];
Ещё одна структура данных для записи информации игроку.
C++:
enum e_APPLE_GARDEN_PLAYER_DATA
{
    e_JOB_STATUS:agJobStatus, /* Хранит статус устройства */
    agSalary, /* Хранит сумму заработной платы */
    agBoxCount, /* Хранит общее количество доставленных ящиков */
    agBoxObject, /* Хранит ID объекта ящика */
    agBoxFilling, /* Хранит статус наполнения ящика */
    agCamTime /* Хранит время до возвращения камеры игроку */
};
new agPlayerData[MAX_PLAYERS][e_APPLE_GARDEN_PLAYER_DATA];
Финальная структура для нажатия клавиш.
C++:
enum e_KEY_INFO
{
    KeyIDX, /* Индекс клавиши */
    KeySymbol[1 + 1] /* Символ клавиши */
};
new const agKeyInfo[][e_KEY_INFO] = {
    {2, "C"},
    {65536, "Y"},
    {131072, "N"},
    {262144, "H"}
};
Когда с перечислениями покончено, необходимо объявить 'нейтральные' переменные.
C++:
new
    pKeyRemainingTime[MAX_PLAYERS][3],  /* Хранит время нажатия на кдавишу */
    pKeyIncrementsCount[MAX_PLAYERS char];  /* Хранит правильное нажатие клавиши */

new
    gWaterObject[MAX_AT_WATER_OBJECT], /* Хранит объекты воды */
    gWaterRemainingTime; /* Хранит время стадии поливания */
  
/* Текстдравы для отображения информации и нажатия клавиш */
new
    PlayerText:ptd_AppleGardenInfo[MAX_PLAYERS][2],
    PlayerText:ptd_AppleGardenKeys[MAX_PLAYERS][2],
  
    Text:td_AppleGardenInfo[7],
    Text:td_AppleGardenKeys[6];
В конце концов финальный массив с координатами.
C++:
new const Float: gWaterObjectCoords[MAX_AT_WATER_OBJECT][2] = { /* Хранит координаты для создания объектов воды */
    {134.62837, 1089.01013},
    {125.73606, 1088.74207},
    {115.97237, 1088.77100},
    {105.69281, 1088.84338},
    {95.13560, 1088.93872},
    {85.94816, 1089.12341},
    {86.03395, 1080.40271},
    {95.17712, 1080.37817},
    {105.69752, 1080.48682},
    {115.93607, 1080.66919},
    {125.61593, 1080.58704},
    {134.41624, 1080.72778},
    {134.51817, 1072.52673},
    {125.77801, 1072.42517},
    {115.87711, 1072.00610},
    {105.73723, 1072.08813},
    {95.17719, 1072.09131},
    {86.19735, 1072.19177},
    {134.30280, 1064.00244},
    {125.72141, 1063.79578},
    {115.91457, 1063.51160},
    {105.65224, 1063.318669},
    {95.17706, 1062.89929},
    {85.97717, 1062.68896},
    {134.55377, 1054.28955},
    {125.77007, 1053.94446},
    {115.97772, 1053.72827},
    {105.74165, 1053.47876},
    {95.17316, 1052.74463},
    {86.05142, 1052.57361},
    {134.62210, 1042.98669},
    {125.80412, 1042.79407},
    {115.99645, 1042.62524},
    {105.76930, 1042.76978},
    {95.12624, 1042.68323},
    {85.99666, 1042.54858}                 
};
Когда скелет готов - перейдём непосредственно к наращиванию кожи. Подробные комментарии каждой строки, думаю, будут уже не уместны, ибо всё должно быть интуитивно понятно каждому.
C++:
public OnGameModeInit()
{
    AG_LoadUtility(); * Загрузка вспомогательных ресурсов из стока, которые будет ниже */

    SetTimer("@_OnEverySecondUpdate", 1000, 0); /* Если у вас нет ежесекундного таймера - ссоздадим, иначе проппустите эту строку */
    SetTimer("@_OneHundredUpdate", 100, 0); /* Если у вас нет 100 миллисекундного таймера - ссоздадим, иначе проппустите эту строку */
    return 1;
}

@_OnEverySecondUpdate();
@_OnEverySecondUpdate()
{
    foreach(new playerid : Player) {
        AG_TimeToResetPlayerCamera(playerid);
        AG_TimeToPickupAppleBox(playerid);
    }

    AG_TimeToEndOfWaterStage();
    SetTimer("OnEverySecondUpdate", 1000, 0);
    return 1;
}

@_OneHundredUpdate();
@_OneHundredUpdate()
{
    foreach(new playerid : Player) {
        AG_KeyResponseDelay(playerid);
        AG_TimeToGenerateRandomKeys(playerid);
    }

    AG_TimeToAppleDown(); 
    SetTimer("OneHundredUpdate", 100, 0);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if (AG_GetPlayerJobStatus(playerid) == JOB_STATUS_INVITED) {
        PlayerTextDrawDestroy(playerid, ptd_AppleGardenInfo[playerid][0]);
        PlayerTextDrawDestroy(playerid, ptd_AppleGardenInfo[playerid][1]);
    }
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if (pickupid == agGardenInfo[agPickupEntrance]) { 
        AG_SetPlayerPosToInterior(playerid, -2204.936035, 405.901306, 2166.239014, 275.0, 17, 1);
        return 1;
    }
    else if (pickupid == agGardenInfo[agPickupExit]) {
        AG_SetPlayerPosToInterior(playerid,  110.4611, 1104.9438, 13.6094, 180.0, 0, 0);
        return 1;     
    }
    else if (pickupid == agGardenInfo[agPickupClothes]) {
        if (AG_GetPlayerJobStatus(playerid) == JOB_STATUS_INVITED) {
            ShowPlayerDialog(playerid, INVALID_DIALOG_ID, " ", !"{FFFFFF}Вы уже взяли рабочую одежджу. Приступайте к работе.", !"Закрыть", "");
            return 1;
        }

        AG_SetPlayerWorkSkin(playerid);
        AG_SetPlayerJobStatus(playerid, JOB_STATUS_INVITED);

        for (new iter = 0; iter < sizeof(td_AppleGardenInfo); iter++) {
            TextDrawShowForPlayer(playerid, td_AppleGardenInfo[iter]); 
        }
      
        PlayerTextDrawShow(playerid, ptd_AppleGardenInfo[playerid][0]);
        PlayerTextDrawShow(playerid, ptd_AppleGardenInfo[playerid][1]);
        return 1;
    } 
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if (PRESSED(KEY_WALK)) {
        if (AG_GetPlayerJobStatus(playerid) == JOB_STATUS_INVITED) {
            if (AG_GetStage() == APPLE_GARDEN_STAGE_NONE) {
                if (IsPlayerInRangeOfPoint(playerid, 0.5, 107.7573, 1105.5297, 13.6094) && AG_GetPlayerStage() == INVALID_PLAYER_ID) {
                    AG_SetPlayerStage(playerid);

                    pKeyRemainingTime[playerid][1] = 0;
                    pKeyRemainingTime[playerid][2] = GetTickCount();
                  
                    SetPlayerPos(playerid, 107.8164, 1105.3507, 13.6094);
                    SetPlayerFacingAngle(playerid, 3.4467); 

                    ApplyAnimation(playerid, "WEAPONS", "SHP_1H_LIFT_END", 4.1, 1, 0, 0, 1, 0, 1);
                    UpdateDynamic3DTextLabelText(agGardenInfo[ag3DText], 0xFFFFFFFF, "");
                    return 1;
                }
            }     
            else {
                new
                    Float:box_x,
                    Float:box_y,
                    Float:box_z,
                    Float:box_a;
                  
                for (new iter = 0; iter < MAX_AT_APPLE_TREE; iter++) {
                    if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_CARRY) {
                        return 1;
                    }

                    if (IsPlayerInDynamicArea(playerid, atTreeInfo[iter][atArea]) && !atTreeInfo[iter][atAppleTime]) {
                        if (atTreeInfo[iter][atTreeCount] > MAX_AT_APPLE_TREE) {
                            atTreeInfo[iter][atTreeCount] = 0;
                            AG_SetStage(APPLE_GARDEN_STAGE_NONE);

                            AG_SendInformationForAll();
                            UpdateDynamic3DTextLabelText(agGardenInfo[ag3DText], 0xFFFFFFFF, !"{FFFFFF}Готов к использованию\nНажмите: {BEF4C3}'ALT'{FFFFFF} чтобы начать обработку");
                            return 1;
                        }

                        GetPlayerPos(playerid, box_x, box_y, box_z);

                        if (!atTreeInfo[iter][atAppleStatus]) {
                            atTreeInfo[iter][atAppleTime] = GetTickCount();

                            SetPlayerFacingAngle(playerid, atan2(box_y - atTreeInfo[iter][atTreePosY], box_x - atTreeInfo[iter][atTreeXPosX]) + 90.0); 
                            ApplyAnimation(playerid, "GRENADE", "WEAPON_throw", 4.1, 0, 1, 1, 0, 0, 1);
                        }
                        else {
                            if (atTreeInfo[iter][atAppleDown] != 0) {
                                GetPlayerPos(playerid, box_x, box_y, box_z);
                                GetPlayerFacingAngle(playerid, box_a);
                              
                                agPlayerData[playerid][agBoxObject] = CreateDynamicObject(19639, box_x + 1.0*-floatsin(box_a + 310.0, degrees), box_y + 1.0 *floatcos(box_a + 310.0, degrees), 12.65, 0.0, 0.0, 35.0); 

                                ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 2.1, 1, 0, 0, 1, 0, 1);
                                Streamer_Update(playerid);
                              
                                agPlayerData[playerid][agBoxFilling] = GetTickCount();
                            }
                        }
                    }
                }
            }
        }
    }

    if (PRESSED(KEY_CTRL_BACK)) {
        if (IsPlayerInRangeOfPoint(playerid, 3.0, 114.4808, 1106.6694, 13.6094)) {
            AG_SetCameraToActor(playerid, agGardenInfo[agActor]);
            ApplyActorAnimation(agGardenInfo[agActor], "PED", "IDLE_CHAT", 4.1, 0, 0, 0, 0, 0);

            ShowPlayerDialog(playerid, dAppleGarden_NPC_Mike, DIALOG_STYLE_LIST,
                !"{BEF4C3}NPC Mikel",
                !"\
                    - Ознакомиться с работой\n\
                    - Завершить рабочий день\
                   ",
                !"Выбрать", !"Закрыть");

            return 1;
        }
    }

    if (AG_GetStage() == APPLE_GARDEN_STAGE_NONE && AG_GetPlayerStage() == playerid && pKeyRemainingTime[playerid][1] != 0) {
        if (pKeyRemainingTime[playerid][0] == newkeys) {
            if (pKeyIncrementsCount{playerid} == MAX_AG_KEY_INCREMENT) {
                AG_ResetKeyRemainingTime(playerid);
              
                agPlayerData[playerid][agCamTime] = GetTickCount();
                gWaterRemainingTime = GetTickCount();
              
                AG_HideAppleGardenKeyTextDraws(playerid);
              
                InterpolateCameraPos(playerid, 111.6290, 1108.9153, 29.8229, 110.9186, 1032.6257, 19.2798, 15000);
                InterpolateCameraLookAt(playerid, 111.6115, 1103.7168, 29.8229, 111.04497, 1024.02673, 18.82170, 15000);

                AG_SetStage(APPLE_GARDEN_STAGE_PREPARE);
                AG_SetPlayerStage(INVALID_PLAYER_ID);

                for (new iter = 0; iter < sizeof(gWaterObject); iter++) {
                    gWaterObject[iter] = CreateDynamicObject(18720, gWaterObjectCoords[iter][0], gWaterObjectCoords[iter][1], 17.0, 0.0, 0.0, 0.0);
                }

                ApplyAnimation(playerid, "CASINO", "manwinb", 4.1, 0, 1, 1, 0, 0, 1);
                UpdateDynamic3DTextLabelText(agGardenInfo[ag3DText], 0xFFFFFF90, !"Использование крана в данный момент недоступна.");
                Streamer_Update(playerid);
            }
            else {
                pKeyRemainingTime[playerid][1] = 0;
                pKeyRemainingTime[playerid][2] = GetTickCount();
            }
        }
        else {
            AG_SetPlayerStage(INVALID_PLAYER_ID);
            AG_ResetKeyRemainingTime(playerid);

            AG_HideAppleGardenKeyTextDraws(playerid);

            ApplyAnimation(playerid, "CASINO", "Slot_lose_out", 4.1, 0, 1, 1, 0, 0, 1);
            UpdateDynamic3DTextLabelText(agGardenInfo[ag3DText], 0xFFFFFFFF, !"{FFFFFF}Готов к использованию\nНажмите: {BEF4C3}'ALT'{FFFFFF} чтобы начать обработку");
        }
        PlayerTextDrawHide(playerid, ptd_AppleGardenKeys[playerid][0]);
    }
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    if (IsPlayerInRangeOfPoint(playerid, 5.0, 115.9721, 1109.4705, 13.6094)) {
        if (AG_GetPlayerJobStatus(playerid) == JOB_STATUS_NONE) {
            return 1;
        }
      
        if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_NONE) {
            return 1;
        }

        new
            salary = random(AG_PLAYER_SALARY) + 1,
            string[9 + 1];
          
        RemovePlayerAttachedObject(playerid, 5);
        DisablePlayerCheckpoint(playerid);

        AG_SetPlayerSalary(playerid, salary);
        AG_SetPlayerBoxAmount(playerid, 1);
      
        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
        ApplyAnimation(playerid, "CARRY", "putdwn", 4.1, 0, 1, 1, 0, 0);

        format(string, sizeof(string), "%d$", AG_GetPlayerSalary(playerid));
        PlayerTextDrawSetString(playerid, ptd_AppleGardenInfo[playerid][0], string);
        PlayerTextDrawShow(playerid, ptd_AppleGardenInfo[playerid][0]);

        format(string, sizeof(string), "%d", AG_GetPlayerBoxAmount(playerid));
        PlayerTextDrawSetString(playerid, ptd_AppleGardenInfo[playerid][1], string);
        PlayerTextDrawShow(playerid, ptd_AppleGardenInfo[playerid][1]);
    }
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case dAppleGarden_NPC_Mike: {
            if (!response) {
                    AG_ResetPlayerCamera(playerid);
                    return 1;
                }

                switch (listitem) {
                    case 0: {
                        ShowPlayerDialog(playerid, dAppleGarden_NPC_About, DIALOG_STYLE_MSGBOX,
                            !"{BEF4C3}Яблочный Сад", ACTOR_WORK_INFORMATION_TEXT, !"Закрыть", "");

                        return 1;
                    }
                    case 1: {
                        if (AG_GetPlayerJobStatus(playerid) == JOB_STATUS_NONE) {
                            ShowPlayerDialog(playerid, INVALID_DIALOG_ID, " ", !"{FFFFFF}Вам необходимо переодеться в рабочую одежду.", !"Закрыть", "");
                            AG_ResetPlayerCamera(playerid);
                            return 1;
                        }

                        if (!AG_GetPlayerSalary(playerid)) {
                            ShowPlayerDialog(playerid, INVALID_DIALOG_ID, " ", !"{FFFFFF}Вы ещё ничего не заработали. Приступайте к работе.", !"Закрыть", "");
                            AG_ResetPlayerCamera(playerid);
                            return 1;
                        }

                        new dialog_string[130 + (-2+8) + (-2+5) + 1];

                        format(dialog_string, sizeof(dialog_string),
                            "\
                                Вы отлично потрудились в нашем яблочном саду.\n\
                                Заработанная сумма: %d\n\
                                Доставлено ящиков: %d\n\n\
                                Получите Ваши деньги и приходите ещё!\
                            ",
                                AG_GetPlayerSalary(playerid),
                                AG_GetPlayerBoxAmount(playerid)
                            );

                        ShowPlayerDialog(playerid, dAppleGarden_NPC_Work_End, DIALOG_STYLE_MSGBOX,
                            !"{BEF4C3}Зарплата", dialog_string !"Получить", !"");

                        return 1;
                    }
                }
            }
            case dAppleGarden_NPC_About: {
                AG_ResetPlayerCamera(playerid);
                return 1;
            }
            case dAppleGarden_NPC_Work_End: {
                if(!response) {
                    return 1;
                }

                /*
                    Ваша выддача денег
                    GivePlayerMoney(playerid, AG_GetPlayerSalary);
                */

                AG_RemovePlayerJob(playerid);
                AG_ResetPlayerCamera(playerid);
                return 1;
            }
        }
    }
    return 1;
}

C++:
stock AG_TimeToEndOfWaterStage()
{
    if ((GetTickCount() - gWaterRemainingTime) > MAX_AG_WATER_STAGE_TICK &&
        AG_GetStage() == APPLE_GARDEN_STAGE_PREPARE) {
        AG_SetStage(APPLE_GARDEN_STAGE_WATER);

        gWaterRemainingTime = GetTickCount();

        for (new iter = 0; iter < sizeof(gWaterObject); iter++) {
            DestroyDynamicObject(gWaterObject[iter]);
        }
    }

    if ((GetTickCount() - gWaterRemainingTime) > MAX_AG_APPLE_STAGE_TICK &&
        AG_GetStage() == APPLE_GARDEN_STAGE_WATER &&
        gWaterRemainingTime != 0) {
        AG_SetStage(APPLE_GARDEN_STAGE_APPLE);

        gWaterRemainingTime = 0;

        for (new iter = 0, j; iter < MAX_AT_APPLE_TREE; iter++) {
            new
                Float:object_x,
                Float:object_y;

            atTreeInfo[iter][atAppleStatus] = false;
            atTreeInfo[iter][atAppleDown] = 2;

            for (j = 0; j < MAX_AT_APPLE_OBJECT; j++) {
                SpawnPlayerToKvadrat(
                    atTreeInfo[iter][atTreeXPosX] - 1.5,
                    atTreeInfo[iter][atTreePosY] - 1.5,
                    atTreeInfo[iter][atTreeXPosX] + 1.5,
                    atTreeInfo[iter][atTreePosY] + 1.5,
                    object_x, object_y);

                atTreeInfo[iter][atAppleObject][j] =
                    CreateDynamicObject(19575,
                    object_x, object_y, 16.0 + float(random(4)),
                    0.0, 0.0, 0.0);
            }
        }
        AG_SendInformationForAll();
    }
    return 1;
}
stock AG_TimeToPickupAppleBox(playerid)
{ 
    if (AG_GetStage() != APPLE_GARDEN_STAGE_APPLE) {
        return 1;
    }

    if (!agPlayerData[playerid][agBoxFilling]) {
        return 1;
    }

    if ((GetTickCount() - agPlayerData[playerid][agBoxFilling]) > MAX_AG_BOX_FILLING_TICK) {
        for (new iter = 0, j; iter < MAX_AT_APPLE_TREE; iter++) {
            if (IsPlayerInDynamicArea(playerid, atTreeInfo[iter][atArea])) {
                agPlayerData[playerid][agBoxFilling] = 0;

                atTreeInfo[iter][atAppleDown] = 0;
                atTreeInfo[iter][atAppleStatus] = true;
                atTreeInfo[iter][atTreeCount]++;

                SetPlayerAttachedObject(playerid, 5, 3052, 1, 0.07, 0.32, 0.1, 0.0, 90.0);
                SetPlayerSpecialAction(playerid, SPECIAL_ACTION_CARRY);
                SetPlayerCheckpoint(playerid, 115.9721, 1109.4705, 13.6094, 3.0);

                ClearAnimations(playerid);
                  DestroyDynamicObject(agPlayerData[playerid][agBoxObject]);

                for (j = 0; j < MAX_AT_APPLE_OBJECT; j++) {
                    DestroyDynamicObject(atTreeInfo[iter][atAppleObject][j]);
                }
                break;
            }
        }
    }
    return 1;
}
stock AG_TimeToAppleDown()
{ 
    if (AG_GetStage() != APPLE_GARDEN_STAGE_APPLE) {
        return 1;
    }
  
    for (new iter = 0, j; iter < MAX_AT_APPLE_TREE; iter++) {
        if ((GetTickCount() - atTreeInfo[iter][atAppleTime]) > 500 && atTreeInfo[iter][atAppleTime] != 0) {
            new
                Float:apple_x,
                Float:apple_y,
                Float:apple_z;

            atTreeInfo[iter][atAppleTime] = 0;
            atTreeInfo[iter][atAppleStatus] = true;

            for (j = 0; j < MAX_AT_APPLE_OBJECT; j++) {
                GetDynamicObjectPos(atTreeInfo[iter][atAppleObject][j], apple_x, apple_y, apple_z);
                MoveDynamicObject(atTreeInfo[iter][atAppleObject][j], apple_x, apple_y, 12.65, 8.0);
            }
            break;
        }
    }
    return 1;
}
stock AG_TimeToResetPlayerCamera(playerid)
{ 
    if (AG_GetStage() != APPLE_GARDEN_STAGE_PREPARE) {
        return 1;
    }

    if (!agPlayerData[playerid][agCamTime]) {
        return 1;
    }

    if ((GetTickCount() - agPlayerData[playerid][agCamTime]) > MAX_AG_CAMERA_MOVE_TICK) {
        agPlayerData[playerid][agCamTime] = 0;
        AG_ResetPlayerCamera(playerid);
    }
    return 1;
}
stock AG_KeyResponseDelay(playerid)
{
    if (AG_GetStage() != APPLE_GARDEN_STAGE_NONE) {
        return 1;
    }
  
    if (AG_GetPlayerStage() != playerid) {
        return 1;
    }

    if ((GetTickCount() - pKeyRemainingTime[playerid][1]) > MAX_AG_KEY_DELAY_TICK && pKeyRemainingTime[playerid][1] != 0) {
        AG_SetPlayerStage(INVALID_PLAYER_ID);
        AG_ResetKeyRemainingTime(playerid);

        ApplyAnimation(playerid, "CASINO", "Slot_lose_out", 4.1, 0, 1, 1, 0, 0, 1);
        UpdateDynamic3DTextLabelText(agGardenInfo[ag3DText], 0xFFFFFFFF, !"{FFFFFF}Готов к использованию\nНажмите: {BEF4C3}'ALT'{FFFFFF} чтобы начать обработку");
        GameTextForPlayer(playerid, " ", 0, 3);
    }
    return 1;
}
stock AG_TimeToGenerateRandomKeys(playerid)
{
    if ((GetTickCount() - pKeyRemainingTime[playerid][2]) > MAX_AG_KEY_TICK && pKeyRemainingTime[playerid][2] != 0) {
        AG_GenerateRandomKeys(playerid);
    }
    return 1;
}
stock AG_GenerateRandomKeys(playerid)
{
    new appeal_random_key = random(3) + 1;
  
    pKeyRemainingTime[playerid][0] = agKeyInfo[appeal_random_key][KeyIDX];
    pKeyRemainingTime[playerid][1] = GetTickCount();
    pKeyRemainingTime[playerid][2] = 0;

    for (new iter = 0; iter < sizeof(td_AppleGardenKeys); iter++) {
        TextDrawShowForPlayer(playerid, td_AppleGardenKeys[iter]); 
    }
  
    PlayerTextDrawSetString(playerid, ptd_AppleGardenKeys[playerid][0], agKeyInfo[appeal_random_key][KeySymbol]);
    PlayerTextDrawShow(playerid, ptd_AppleGardenKeys[playerid][0]);

    PlayerTextDrawTextSize(playerid, ptd_AppleGardenKeys[playerid][1], ++pKeyIncrementsCount{playerid} * 12.5, 11.0);
    PlayerTextDrawShow(playerid, ptd_AppleGardenKeys[playerid][1]);
    return 1;
}
stock AG_SetCameraToActor(playerid, actorid, Float:distance = 1.5)
{
    new
        Float:pX,
        Float:pY,
        Float:pZ,
        Float:aX,
        Float:aY,
        Float:aZ;

    GetPlayerPos(playerid, pX, pY, pZ);
    AG_GetActorTurn(actorid, aX, aY, aZ, distance, 180);

    InterpolateCameraPos(playerid, pX, pY, pZ, aX, aY, aZ + 0.4, 1000);

    GetActorPos(actorid, aX, aY, aZ);
    AG_SetPlayerFacingPos(playerid, aX, aY);

    InterpolateCameraLookAt(playerid, pX, pY, pZ, aX, aY, aZ + 0.4, 1000);

    TogglePlayerControllable(playerid, 0);
}
stock AG_GetActorTurn(actorid, &Float:x, &Float:y, &Float:z, Float:distance, turn)
{
    new
        Float:angle,
        Float:dis;

    dis = dis/2 - distance;

    GetActorPos(actorid, x, y, z);
    GetActorFacingAngle(actorid, angle);

    x += (dis * floatsin(-angle+turn, degrees));
    y += (dis * floatcos(-angle+turn, degrees));
}
stock AG_SetPlayerFacingPos(playerid, Float:x, Float:y)
{
    new
        Float:ax,
        Float:ay,
        Float:az;

    if(GetPlayerPos(playerid, ax, ay, az) == 0) {
        return 0;
    }

    SetPlayerFacingAngle(playerid, atan2(y - ay, x - ax) - 90.00);
    return 1;
}
stock AG_ResetPlayerCamera(playerid)
{
    SetCameraBehindPlayer(playerid);
    TogglePlayerControllable(playerid, 1);
}
stock AG_SetPlayerPosToInterior(playerid, Float:x, Float:y, Float:z, Float:angle, interior, world)
{
    SetPlayerInterior(playerid, interior);
    SetPlayerVirtualWorld(playerid, world);

    SetPlayerPos(playerid, x, y, z);
    SetPlayerFacingAngle(playerid, angle);
  
    SetCameraBehindPlayer(playerid);
}
stock AG_SendInformationForAll()
{
    foreach (new i : Player) {
        if (IsPlayerNPC(i)) {
            continue;
        }
      
        if (AG_GetPlayerJobStatus(i) == JOB_STATUS_NONE) {
            continue;
        }

        if (IsPlayerInRangeOfPoint(i, 100.0, 110.5788, 1068.6051, 13.6094)) {
            SendClientMessage(i, 0xFFFFFFFF, (AG_GetStage() == APPLE_GARDEN_STAGE_APPLE) ?
                (!"{BEF4C3}Яблочный сад: {FFFFFF}урожай готов к сбору.") : (!"{BEF4C3}Яблочный сад: {FFFFFF}весь урожай собран."));
        }
    }
}
stock AG_LoadPlayerTextDraws(playerid)
{
    ptd_AppleGardenKeys[playerid][0] = CreatePlayerTextDraw(playerid, 343.5274, 369.8706, !"F");
    PlayerTextDrawLetterSize(playerid, ptd_AppleGardenKeys[playerid][0], 0.4009, 2.0028);
    PlayerTextDrawAlignment(playerid, ptd_AppleGardenKeys[playerid][0], 1);
    PlayerTextDrawColor(playerid, ptd_AppleGardenKeys[playerid][0], -1);
    PlayerTextDrawSetOutline(playerid, ptd_AppleGardenKeys[playerid][0], 2);
    PlayerTextDrawBackgroundColor(playerid, ptd_AppleGardenKeys[playerid][0], 255);
    PlayerTextDrawFont(playerid, ptd_AppleGardenKeys[playerid][0], 2);
    PlayerTextDrawSetProportional(playerid, ptd_AppleGardenKeys[playerid][0], 1);
    PlayerTextDrawSetShadow(playerid, ptd_AppleGardenKeys[playerid][0], 0);

    ptd_AppleGardenKeys[playerid][1] = CreatePlayerTextDraw(playerid, 252.6442, 407.2026, !"LD_SPAC:white");
    PlayerTextDrawTextSize(playerid, ptd_AppleGardenKeys[playerid][1], 125.0000, 11.0000);
    PlayerTextDrawAlignment(playerid, ptd_AppleGardenKeys[playerid][1], 1);
    PlayerTextDrawColor(playerid, ptd_AppleGardenKeys[playerid][1], 1318203391);
    PlayerTextDrawBackgroundColor(playerid, ptd_AppleGardenKeys[playerid][1], 255);
    PlayerTextDrawFont(playerid, ptd_AppleGardenKeys[playerid][1], 4);
    PlayerTextDrawSetProportional(playerid, ptd_AppleGardenKeys[playerid][1], 0);
    PlayerTextDrawSetShadow(playerid, ptd_AppleGardenKeys[playerid][1], 0);

    ptd_AppleGardenInfo[playerid][0] = CreatePlayerTextDraw(playerid, 586.6224, 254.5191, !"0$");
    PlayerTextDrawLetterSize(playerid, ptd_AppleGardenInfo[playerid][0], 0.2653, 1.0070);
    PlayerTextDrawAlignment(playerid, ptd_AppleGardenInfo[playerid][0], 1);
    PlayerTextDrawColor(playerid, ptd_AppleGardenInfo[playerid][0], 8388863);
    PlayerTextDrawBackgroundColor(playerid, ptd_AppleGardenInfo[playerid][0], 255);
    PlayerTextDrawFont(playerid, ptd_AppleGardenInfo[playerid][0], 2);
    PlayerTextDrawSetProportional(playerid, ptd_AppleGardenInfo[playerid][0], 1);
    PlayerTextDrawSetShadow(playerid, ptd_AppleGardenInfo[playerid][0], 0);

    ptd_AppleGardenInfo[playerid][1] = CreatePlayerTextDraw(playerid, 594.2651, 231.6200, !"0");
    PlayerTextDrawLetterSize(playerid, ptd_AppleGardenInfo[playerid][1], 0.2653, 1.0070);
    PlayerTextDrawAlignment(playerid, ptd_AppleGardenInfo[playerid][1], 1);
    PlayerTextDrawColor(playerid, ptd_AppleGardenInfo[playerid][1], -624121089);
    PlayerTextDrawBackgroundColor(playerid, ptd_AppleGardenInfo[playerid][1], 255);
    PlayerTextDrawFont(playerid, ptd_AppleGardenInfo[playerid][1], 2);
    PlayerTextDrawSetProportional(playerid, ptd_AppleGardenInfo[playerid][1], 1);
    PlayerTextDrawSetShadow(playerid, ptd_AppleGardenInfo[playerid][1], 0);
}
stock AG_RemovePlayerJob(playerid)
{
    AG_SetPlayerWorkSkin(playerid);
    AG_SetPlayerJobStatus(playerid, JOB_STATUS_NONE);
    SetPlayerSkin(playerid, PlayerSkin(playerid));
  
    AG_SetPlayerBoxAmount(playerid, 0);
    AG_SetPlayerSalary(playerid, 0);
  
    if(IsPlayerAttachedObjectSlotUsed(playerid, 5)) {
        RemovePlayerAttachedObject(playerid, 5);
    }

    for (new iter = 0; iter < sizeof(td_AppleGardenInfo); iter++) {
        TextDrawHideForPlayer(playerid, td_AppleGardenInfo[iter]); 
    }
      
    PlayerTextDrawHide(playerid, ptd_AppleGardenInfo[playerid][0]);
    PlayerTextDrawHide(playerid, ptd_AppleGardenInfo[playerid][1]);
}
stock AG_HideAppleGardenKeyTextDraws(playerid)
{
    for (new iter = 0; iter < sizeof(td_AppleGardenKeys); iter++) {
        TextDrawHideForPlayer(playerid, td_AppleGardenKeys[iter]); 
    }

    PlayerTextDrawHide(playerid, ptd_AppleGardenKeys[playerid][0]);
    PlayerTextDrawHide(playerid, ptd_AppleGardenKeys[playerid][1]);
}
stock AG_ResetKeyRemainingTime(playerid)
{
    pKeyRemainingTime[playerid][1] =
    pKeyRemainingTime[playerid][2] =
    pKeyIncrementsCount{playerid} = 0;
}
stock AG_GetPlayerStage()
{
    return agGardenInfo[agPlayerStage];
}
stock AG_SetPlayerStage(stage)
{
    agGardenInfo[agPlayerStage] = stage;
}
stock AG_SetPlayerSalary(playerid, amount)
{
    agPlayerData[playerid][agSalary] += amount;
}
stock AG_GetPlayerSalary(playerid)
{
    return agPlayerData[playerid][agSalary];
}
stock AG_SetPlayerBoxAmount(playerid, amount)
{
    return agPlayerData[playerid][agBoxCount] += amount;
}
stock AG_GetPlayerBoxAmount(playerid)
{
    return agPlayerData[playerid][agBoxCount];
}
stock AG_SetStage(e_APPLE_GARDEN_STAGE:stage)
{
    agGardenInfo[agGardenStage] = stage;
}
stock e_APPLE_GARDEN_STAGE:AG_GetStage()
{
    return agGardenInfo[agGardenStage];
}
stock AG_SetPlayerJobStatus(playerid, e_JOB_STATUS:status)
{
    agPlayerData[playerid][agJobStatus] = status;
}
stock e_JOB_STATUS:AG_GetPlayerJobStatus(playerid)
{
    return agPlayerData[playerid][agJobStatus];
}
stock AG_SetPlayerWorkSkin(playerid)
{
    SetPlayerSkin(playerid, (Player[playerid][pGender] == 1) ? (32) : (31));
}
stock AG_LoadUtility()
{
    AG_LoadMapIcons();
    AG_LoadPickups();
    AG_Load3DTexts();
    AG_LoadObjects();
    AG_LoadTrees();
    AG_LoadActors();
    AG_LoadTextDraws();
}
stock AG_LoadActors()
{
    agGardenInfo[agActor] = CreateActor(35, 114.4808, 1106.6694, 13.6094, 181.3492);
}
stock AG_LoadMapIcons()
{
    CreateDynamicMapIcon(110.9331, 1069.1171, 13.6094, 56, -1, 0, -1, -1, 300.0);
}
stock AG_LoadPickups()
{
    agGardenInfo[agPickupEntrance] = CreatePickup(19902, 1, 110.5167, 1106.6707, 13.6094-1.0, 0);
    agGardenInfo[agPickupExit] = CreatePickup(19902, 1, -2207.4255, 404.1646, 2166.2390-1.0, 1);
    agGardenInfo[agPickupClothes] = CreatePickup(1275, 1, -2200.8931, 405.8988, 2166.2390, 1); 

    CreatePickup(1239, 23, 116.0529, 1109.5237, 13.6094);
    CreatePickup(1559, 1, 107.7573, 1105.5297, 13.6094 - 0.5);

}
stock AG_Load3DTexts()
{
    agGardenInfo[ag3DText] = CreateDynamic3DTextLabel("{FFFFFF}Готов к использованию\nНажмите: {BEF4C3}'ALT'{FFFFFF} чтобы начать обработку",
        0xFFFFFFFF, 107.71578, 1106.37012, 13.53150, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);

    CreateDynamic3DTextLabel("'Яблочный Сад'\n{BEF4C3}Склад",
        0xFFFFFFFF, 116.0529, 1109.5237, 13.6094, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);

    CreateDynamic3DTextLabel("{NPC 'Mikel'\nПоговорить: {42AAFF}H",
        0xFFFFFFFF, 114.4808, 1106.6694, 13.6094+1, 15.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
}
stock AG_LoadTrees()
{
    agGardenInfo[agPlayerStage] = INVALID_PLAYER_ID;

    for(new iter, k, j; iter < MAX_AT_APPLE_TREE; iter++)
    {
        atTreeInfo[iter][atTreeXPosX] = 130.86191 - (k * 10.0);
        atTreeInfo[iter][atTreePosY] = 1086.60791 - (j * 7.0);
      
        atTreeInfo[iter][atArea] =
            CreateDynamicSphere(atTreeInfo[iter][atTreeXPosX], atTreeInfo[iter][atTreePosY], 13.0, 3.0, -1, -1, -1);

        CreateDynamicObject(738, 130.86191 - (k * 10.0), 1086.60791 - (j * 7.0), 12.5, 0.0, 0.0, 0.0, -1, -1, -1, 300.0);

        k++;

        if(k == 5) {
            j++;
            k = 0;
        }
    }
}
stock AG_LoadTextDraws()
{
    td_AppleGardenKeys[0] = TextDrawCreate(240.0556, 360.1596, !"LD_SPAC:white");
    TextDrawTextSize(td_AppleGardenKeys[0], 150.0000, 70.0000);
    TextDrawAlignment(td_AppleGardenKeys[0], 1);
    TextDrawColor(td_AppleGardenKeys[0], 606348543);
    TextDrawBackgroundColor(td_AppleGardenKeys[0], 255);
    TextDrawFont(td_AppleGardenKeys[0], 4);
    TextDrawSetProportional(td_AppleGardenKeys[0], 0);
    TextDrawSetShadow(td_AppleGardenKeys[0], 0);

    td_AppleGardenKeys[1] = TextDrawCreate(250.3885, 405.1024, !"LD_SPAC:white");
    TextDrawTextSize(td_AppleGardenKeys[1], 130.0000, 15.0000);
    TextDrawAlignment(td_AppleGardenKeys[1], 1);
    TextDrawColor(td_AppleGardenKeys[1], 404232447);
    TextDrawBackgroundColor(td_AppleGardenKeys[1], 255);
    TextDrawFont(td_AppleGardenKeys[1], 4);
    TextDrawSetProportional(td_AppleGardenKeys[1], 0);
    TextDrawSetShadow(td_AppleGardenKeys[1], 0);

    td_AppleGardenKeys[2] = TextDrawCreate(271.9781, 368.9795, !"PRESS:");
    TextDrawLetterSize(td_AppleGardenKeys[2], 0.3560, 2.2228);
    TextDrawAlignment(td_AppleGardenKeys[2], 1);
    TextDrawColor(td_AppleGardenKeys[2], -1);
    TextDrawSetOutline(td_AppleGardenKeys[2], 2);
    TextDrawBackgroundColor(td_AppleGardenKeys[2], 255);
    TextDrawFont(td_AppleGardenKeys[2], 2);
    TextDrawSetProportional(td_AppleGardenKeys[2], 1);
    TextDrawSetShadow(td_AppleGardenKeys[2], 0);

    td_AppleGardenKeys[3] = TextDrawCreate(327.0447, 359.2304, !"LD_BEAT:chit");
    TextDrawTextSize(td_AppleGardenKeys[3], 40.0098, 42.0000);
    TextDrawAlignment(td_AppleGardenKeys[3], 1);
    TextDrawColor(td_AppleGardenKeys[3], 1816627455);
    TextDrawBackgroundColor(td_AppleGardenKeys[3], 255);
    TextDrawFont(td_AppleGardenKeys[3], 4);
    TextDrawSetProportional(td_AppleGardenKeys[3], 0);
    TextDrawSetShadow(td_AppleGardenKeys[3], 0);

    td_AppleGardenKeys[4] = TextDrawCreate(226.8889, 343.2352, !"LD_BEAT:chit");
    TextDrawTextSize(td_AppleGardenKeys[4], 25.0000, 104.0000);
    TextDrawAlignment(td_AppleGardenKeys[4], 1);
    TextDrawColor(td_AppleGardenKeys[4], 606348543);
    TextDrawBackgroundColor(td_AppleGardenKeys[4], 255);
    TextDrawFont(td_AppleGardenKeys[4], 4);
    TextDrawSetProportional(td_AppleGardenKeys[4], 0);
    TextDrawSetShadow(td_AppleGardenKeys[4], 0);

    td_AppleGardenKeys[5] = TextDrawCreate(377.3775, 343.3376, !"LD_BEAT:chit");
    TextDrawTextSize(td_AppleGardenKeys[5], 26.0000, 104.0000);
    TextDrawAlignment(td_AppleGardenKeys[5], 1);
    TextDrawColor(td_AppleGardenKeys[5], 606348543);
    TextDrawBackgroundColor(td_AppleGardenKeys[5], 255);
    TextDrawFont(td_AppleGardenKeys[5], 4);
    TextDrawSetProportional(td_AppleGardenKeys[5], 0);
    TextDrawSetShadow(td_AppleGardenKeys[5], 0);

    td_AppleGardenInfo[0] = TextDrawCreate(538.9234, 225.4429, !"LD_SPAC:white");
    TextDrawTextSize(td_AppleGardenInfo[0], 90.0000, 46.0000);
    TextDrawAlignment(td_AppleGardenInfo[0], 1);
    TextDrawColor(td_AppleGardenInfo[0], 606348543);
    TextDrawBackgroundColor(td_AppleGardenInfo[0], 255);
    TextDrawFont(td_AppleGardenInfo[0], 4);
    TextDrawSetProportional(td_AppleGardenInfo[0], 0);
    TextDrawSetShadow(td_AppleGardenInfo[0], 0);

    td_AppleGardenInfo[1] = TextDrawCreate(619.8023, 214.3872, !"LD_BEAT:chit");
    TextDrawTextSize(td_AppleGardenInfo[1], 19.0000, 68.4797);
    TextDrawAlignment(td_AppleGardenInfo[1], 1);
    TextDrawColor(td_AppleGardenInfo[1], 606348543);
    TextDrawBackgroundColor(td_AppleGardenInfo[1], 255);
    TextDrawFont(td_AppleGardenInfo[1], 4);
    TextDrawSetProportional(td_AppleGardenInfo[1], 0);
    TextDrawSetShadow(td_AppleGardenInfo[1], 0);

    td_AppleGardenInfo[2] = TextDrawCreate(528.6035, 214.8829, !"LD_BEAT:chit");
    TextDrawTextSize(td_AppleGardenInfo[2], 20.0200, 67.8097);
    TextDrawAlignment(td_AppleGardenInfo[2], 1);
    TextDrawColor(td_AppleGardenInfo[2], 606348543);
    TextDrawBackgroundColor(td_AppleGardenInfo[2], 255);
    TextDrawFont(td_AppleGardenInfo[2], 4);
    TextDrawSetProportional(td_AppleGardenInfo[2], 0);
    TextDrawSetShadow(td_AppleGardenInfo[2], 0);

    td_AppleGardenInfo[3] = TextDrawCreate(540.9556, 230.5092, !"LD_SPAC:white");
    TextDrawTextSize(td_AppleGardenInfo[3], 86.0000, 14.0000);
    TextDrawAlignment(td_AppleGardenInfo[3], 1);
    TextDrawColor(td_AppleGardenInfo[3], 387389439);
    TextDrawBackgroundColor(td_AppleGardenInfo[3], 255);
    TextDrawFont(td_AppleGardenInfo[3], 4);
    TextDrawSetProportional(td_AppleGardenInfo[3], 0);
    TextDrawSetShadow(td_AppleGardenInfo[3], 0);

    td_AppleGardenInfo[4] = TextDrawCreate(540.9556, 251.3128, !"LD_SPAC:white");
    TextDrawTextSize(td_AppleGardenInfo[4], 86.0000, 14.0000);
    TextDrawAlignment(td_AppleGardenInfo[4], 1);
    TextDrawColor(td_AppleGardenInfo[4], 387389439);
    TextDrawBackgroundColor(td_AppleGardenInfo[4], 255);
    TextDrawFont(td_AppleGardenInfo[4], 4);
    TextDrawSetProportional(td_AppleGardenInfo[4], 0);
    TextDrawSetShadow(td_AppleGardenInfo[4], 0);

    td_AppleGardenInfo[5] = TextDrawCreate(545.3880, 231.7154, !"AMOUNT:");
    TextDrawLetterSize(td_AppleGardenInfo[5], 0.2503, 1.0070);
    TextDrawAlignment(td_AppleGardenInfo[5], 1);
    TextDrawColor(td_AppleGardenInfo[5], -1);
    TextDrawBackgroundColor(td_AppleGardenInfo[5], 255);
    TextDrawFont(td_AppleGardenInfo[5], 2);
    TextDrawSetProportional(td_AppleGardenInfo[5], 1);
    TextDrawSetShadow(td_AppleGardenInfo[5], 0);

    td_AppleGardenInfo[6] = TextDrawCreate(545.5879, 253.7191, !"MONEY:");
    TextDrawLetterSize(td_AppleGardenInfo[6], 0.2503, 1.0070);
    TextDrawAlignment(td_AppleGardenInfo[6], 1);
    TextDrawColor(td_AppleGardenInfo[6], -1);
    TextDrawBackgroundColor(td_AppleGardenInfo[6], 255);
    TextDrawFont(td_AppleGardenInfo[6], 2);
    TextDrawSetProportional(td_AppleGardenInfo[6], 1);
    TextDrawSetShadow(td_AppleGardenInfo[6], 0);
}
stock AG_LoadObjects()
{
    /*
        Раздевалка
    */

    CreateDynamicObject(18754, -1847.636108, 525.959290, 2164.702393, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 700.0); // 0
    CreateDynamicObject(18754, -2170.726807, 527.200745, 2164.702393, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 700.0); // 0
    CreateDynamicObject(2372, -2201.024170, 407.413818, 2165.179932, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124512, 405.813232, 2169.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2213.724121, 405.813232, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2394, -2201.624023, 404.513794, 2165.869873, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2372, -2201.024170, 404.713867, 2165.179932, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124023, 401.713867, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2194.724121, 414.013794, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2194.724121, 405.813232, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(6959, -2184.955322, 490.525909, 2171.790771, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 300.0); // 0
    CreateDynamicObject(18981, -2242.071289, 485.838715, 2172.024170, 0.000000, 90.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(18981, -2242.071289, 485.838715, 2179.327148, 0.000000, 90.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(18981, -2231.683105, 497.833954, 2179.327148, 0.000000, 90.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(6959, -2171.745850, 498.911987, 2171.790771, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 300.0); // 0
    CreateDynamicObject(2704, -2206.524170, 407.813843, 2166.829834, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2689, -2205.324219, 407.813843, 2166.829834, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124512, 405.813232, 2163.679932, 0.000000, 180.000000, 180.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2706, -2203.124023, 407.813843, 2166.829834, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124512, 405.813232, 2169.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124023, 401.713867, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.224121, 409.913818, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2382, -2201.924072, 407.213867, 2165.829834, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2394, -2201.624023, 404.513794, 2165.869873, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2372, -2201.024170, 404.713867, 2165.179932, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2372, -2201.024170, 407.413818, 2165.179932, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2213.724121, 405.813232, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2063, -2202.524170, 412.413818, 2166.129883, 0.000000, 0.000000, 180.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2200, -2208.524170, 413.213867, 2165.229980, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2165, -2202.524170, 413.513794, 2165.189941, 0.000000, 0.000000, 90.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124512, 414.013794, 2163.679932, 0.000000, 180.000000, 180.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.124023, 414.013794, 2169.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1806, -2200.424072, 413.813843, 2165.197998, 0.000000, 0.000000, 92.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2164, -2207.324219, 415.913818, 2165.229980, 0.000000, 0.000000, 0.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2213.724121, 414.013794, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(2000, -2200.624023, 415.413818, 2165.229980, 0.000000, 0.000000, 318.000000, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2194.724121, 405.813232, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2204.224121, 418.113770, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0
    CreateDynamicObject(1684, -2194.724121, 414.013794, 2166.729980, 0.000000, 0.000000, 179.994507, -1, 17, -1, STREAMER_OBJECT_SD, 100.0); // 0 

    new ao_s = CreateObject(16218, 143.00000, 1075.81250, 20.10940,   0.00000, 0.00000, 0.00000);
    SetObjectMaterial(ao_s, 6, 10756, "airportroads_sfse", "stones256128", -6447715); 

    ao_s = CreateObject(19325, 111.04497, 1024.02673, 18.00859,   0.00000, 0.00000, -90.00000);
    SetObjectMaterialText(ao_s, "ЯБЛОЧНЫЙ САД", 0, 90, "Calibri", 15, 1, 0xFF000000, 0x00000000, 1); 

    CreateDynamicObject(17011, 113.11682, 1107.82849, 12.02995,   0.00000, 0.00000, 180.00769);
    CreateDynamicObject(2649, 134.66470, 1091.51318, 14.04670,   0.00000, 270.00000, 90.00000);
    CreateDynamicObject(2649, 134.66464, 1092.45142, 16.93780,   0.00000, 90.00000, 90.00000);
    CreateDynamicObject(2649, 134.66859, 1091.17456, 18.97590,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 134.25220, 1085.67371, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1085.67224, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1077.79053, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 134.25220, 1077.79053, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1069.90430, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1062.01904, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1054.15674, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 135.01320, 1046.27844, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 134.25220, 1069.90430, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 134.25220, 1062.01904, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 134.25220, 1054.15674, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 134.25220, 1046.27844, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2649, 134.66859, 1040.70911, 18.97590,   0.00000, 0.00000, -90.00000);
    CreateDynamicObject(2649, 134.66460, 1039.48975, 16.93780,   0.00000, 90.00000, -90.00000);
    CreateDynamicObject(2649, 134.66470, 1040.45068, 14.04670,   0.00000, 270.00000, -90.00000);
    CreateDynamicObject(2653, 130.04060, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 122.15250, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 114.27380, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 106.41680, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 98.53010, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 90.69150, 1042.61951, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 125.64063, 1046.71338, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 125.64777, 1054.58948, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 125.64230, 1062.47498, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 125.69566, 1070.31165, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 125.71030, 1078.18164, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 125.75159, 1085.32581, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 130.02902, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 122.18890, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 114.33740, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 106.47140, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 98.59010, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 90.70510, 1089.25146, 18.76980,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2653, 115.95464, 1085.11316, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 115.92371, 1077.29321, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 115.89278, 1069.47278, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 115.89040, 1061.64075, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 115.92586, 1053.79224, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 115.94256, 1046.34497, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.71890, 1046.41846, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.67088, 1054.24390, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.68715, 1062.04956, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.70344, 1069.85522, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.71930, 1077.73938, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 105.73053, 1085.08350, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.17052, 1085.19067, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.16355, 1077.40784, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.14875, 1069.55408, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.16720, 1061.73926, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.11482, 1053.92957, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 95.11703, 1046.63660, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2649, 85.99380, 1040.45068, 14.04670,   0.00000, 270.00000, -90.00000);
    CreateDynamicObject(2649, 85.99380, 1039.48975, 16.93780,   0.00000, 90.00000, -90.00000);
    CreateDynamicObject(2649, 86.00570, 1040.70911, 18.97590,   0.00000, 0.00000, -90.00000);
    CreateDynamicObject(2653, 86.43970, 1046.29065, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64490, 1046.27698, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64490, 1054.14807, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 86.43970, 1054.16199, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64490, 1061.99976, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 86.43970, 1062.05066, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64490, 1069.88965, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 86.43970, 1069.93848, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64290, 1077.77905, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 86.43970, 1077.78699, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 86.43970, 1085.66772, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2653, 85.64490, 1085.66772, 18.76980,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2649, 86.00570, 1091.17456, 18.97590,   0.00000, 0.00000, 90.00000);
    CreateDynamicObject(2649, 85.99380, 1092.47839, 16.93780,   0.00000, 90.00000, 90.00000);
    CreateDynamicObject(2649, 85.99380, 1091.51318, 14.04670,   0.00000, 270.00000, 90.00000);
    CreateDynamicObject(2983, 107.71578, 1106.37012, 13.53150,   0.00000, 0.00000, 0.00000);
    CreateDynamicObject(2649, 108.51309, 1106.98596, 12.04380,   0.00000, 270.00000, 180.00000);
    CreateDynamicObject(2649, 106.93660, 1106.93799, 12.04380,   0.00000, 270.00000, 0.00000);
}

Когнитивно, как итог: не самая трудная система для общего обозрения, понимаю, но мне очень хочется учиться на допущенных ошибка в коде. Всех благодарю за уделённое время на данные текст. Ожидаю обоснованую конструктивную критику профиков :)
 

Вложения

Сверху Снизу