Sign in to follow this  
Followers 0
Keks

Загрузка/создание объектов.

Рекомендованные сообщения



Не найдено.

11 posts in this topic

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

//Загрузка
publics LoadFurniture()
{
    new rows, fields, id = 0;
    cache_get_data(rows, fields);
    if(rows)
    {
        for(new i; i < rows; i++)
        {
            fur_info[i][m_id] = cache_get_field_content_int(i, "mID", connect_mysql);
            fur_info[i][m_model] = cache_get_field_content_int(i, "mmodel", connect_mysql);
            fur_info[i][m_x] = cache_get_field_content_float(i, "mx", connect_mysql);
            fur_info[i][m_y] = cache_get_field_content_float(i, "my", connect_mysql);
            fur_info[i][m_z] = cache_get_field_content_float(i, "mz", connect_mysql);
            fur_info[i][m_rootx] = cache_get_field_content_float(i, "mrootx", connect_mysql);
            fur_info[i][m_rooty] = cache_get_field_content_float(i, "mrooty", connect_mysql);
            fur_info[i][m_rootz] = cache_get_field_content_float(i, "mrootz", connect_mysql);
            fur_info[i][m_virtual] = cache_get_field_content_int(i, "mvirtualWorld", connect_mysql);
            fur_info[i][m_int] = cache_get_field_content_int(i, "mint", connect_mysql);
            fur_info[i][m_id] = CreateDynamicObject(fur_info[i][m_model],\
            fur_info[i][m_x], fur_info[i][m_y], fur_info[i][m_z], fur_info[i][m_rootx],\
            fur_info[i][m_rooty], fur_info[i][m_rootz],fur_info[i][m_virtual], fur_info[i][m_int]);
            if(fur_info[i][m_model] == 19916) GetDynamicObjectPos(fur_info[i][m_id], f_x_x, f_x_y, f_x_z); //1
            if(fur_info[i][m_model] == 2332) GetDynamicObjectPos(fur_info[i][m_id], f_s_x, f_s_y, f_s_z); //2
            id++;
        }
        printf("- Успешно загружена мебель. Всего мебели %d", id);
    }
    return true;
}

//создание из игры с сохранением
stock Furniture_Mysql(i)
{
    static fmt_str[] =
    "\
        INSERT INTO `furniture`\
        (`mID`, `mmodel`, `mx`, `my`, `mz`, `mrootx`, `mrooty`, `mrootz`, `mvirtualWorld`, `mint`)\
         VALUES ('%i', '%i', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i')\
    ";
    new string[sizeof(fmt_str)-2+6-2+6-2+10-2+10-2+10-2+10-2+10-2+10-2+4-2+4];
    mysql_format(connect_mysql, string, sizeof(string), fmt_str,
    i,\
    fur_info[i][m_model],\
    fur_info[i][m_x],\
    fur_info[i][m_y],\
    fur_info[i][m_z],\
    fur_info[i][m_rootx],\
    fur_info[i][m_rooty],\
    fur_info[i][m_rootz],\
    fur_info[i][m_virtual],\
    fur_info[i][m_int]);
    mysql_function_query(connect_mysql, string, false, "", "");
    if(fur_info[i][m_model] == 19916) GetDynamicObjectPos(i, f_x_x, f_x_y, f_x_z); //1
    if(fur_info[i][m_model] == 2332) GetDynamicObjectPos(i, f_s_x, f_s_y, f_s_z); //1
      return true;
}

//И при нажатии F что должно происходить
if(newkeys == 16)
{
    if(IsPlayerInRangeOfPoint(playerid, 1.5, f_x_x, f_x_y, f_x_z))
    {
        new i = GetPVarInt(playerid, "PlayerHouse");
        static const fmt_str[] =
        "\
            Предмет\tШтук\n\
            текст\t%d/1\
        ";
        new string[sizeof(fmt_str)-2+1];
        format(string, sizeof(string), fmt_str,
        house_info[i][hprod][0]);
        SPD(playerid,298,5,"{FFFFFF}Тест",string,"{FFFFFF}Выбрать","{FFFFFF}Закрыть");
    }

}

Share this post


Link to post
Share on other sites

@Keks если переменной присваивать новое значение, то оно перезапишет старое. Поэтому, вам необходимо f_s_x, f_s_y, f_s_z создать массивами. 

Share this post


Link to post
Share on other sites

@DEST Я просто не очень в этом, а какой объём для массива брать и как перезаписывать? Если через цикл, то на сколько объектов, я просто не могу понять немного.

Share this post


Link to post
Share on other sites

@Keks в PAWN нет возможности выделять массив динамически, поэтому нужно сразу указать максимально допустимое число объектов. 

И все-таки объясните концепцию работы Вашей системы, быть может мы найдем более элегантное решение. 

Share this post


Link to post
Share on other sites

Получил разъяснение концепции и часть кода в Л/С от автора. Если вкратце, то вот: 

48 минут назад, Keks сказал:

так, что бы для каждой модели которую я выделяю сохранились координаты для работы системы которая работает при нажатии F...

@Keks В любом случае здесь нужен будет цикл. Поэтому, я думаю, что вы можете сделать примерно так: 

Спойлер

if(newkeys == 16)
{
    for(new j; j < sizeof(fur_info); j++) 
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, fur_info[i][m_x], fur_info[i][m_y], fur_info[i][m_z]) || GetPlayerInterior(playerid) != fur_info[i][m_int] || GetPlayerVirtualWorld(playerid) != fur_info[i][m_virtual])) continue; 
        new i = GetPVarInt(playerid, "PlayerHouse");
        static const fmt_str[] =
          "\
                Предмет\tШтук\n\
                текст\t%d/1\
            ";
        new string[sizeof(fmt_str)-2+1];
        format(string, sizeof(string), fmt_str,
               house_info[i][hprod][0]);
        SPD(playerid,298,5,"{FFFFFF}Тест",string,"{FFFFFF}Выбрать","{FFFFFF}Закрыть");
        break;
    }
}

И тогда эти строки можно удалить: 

23 часа назад, Keks сказал:

if(fur_info[m_model] == 19916) GetDynamicObjectPos(fur_info[m_id], f_x_x, f_x_y, f_x_z); //1             if(fur_info[m_model] == 2332) GetDynamicObjectPos(fur_info[m_id], f_s_x, f_s_y, f_s_z); //2

 

23 часа назад, Keks сказал:

    if(fur_info[m_model] == 19916) GetDynamicObjectPos(i, f_x_x, f_x_y, f_x_z); //1     if(fur_info[m_model] == 2332) GetDynamicObjectPos(i, f_s_x, f_s_y, f_s_z); //1

 

Это одна из реализаций нативным методом, т.е. не прибегая к сторонним библиотекам. 

Здесь же вы могли бы воспользоваться динамическими зонами, если интересно, можете прочитать, по-моему даже на форуме где-то мануал был. 

Share this post


Link to post
Share on other sites

@DEST Огромное спасибо за помощь!

Share this post


Link to post
Share on other sites

@Keks А, и я еще забыл, что если хотите, чтобы этот код работал только на определенные типы объектов, то добавьте проверку в цикл, туда же, где и проверка на координаты инт и вирт. мир: 

fur_info[i][m_model] != id_объекта

 

Share this post


Link to post
Share on other sites

Привет, я опять на счёт этой системы. Я как бы переставляю объекты, эти созданные, и под id объекта присваиваю новые координаты ему fur_info[m_x],fur_info[m_y],fur_info[m_z] и т.д., и и на новом месте работает функционал например холодильника, и на старом от куда убрал. Как обнулить старую  fur_info[m_x],fur_info[m_y],fur_info[m_z]?

Не могу понять.

 

В общем, сначало я проверяю на наличия такого объекта через базу данных

Спойлер

public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
{
    SetPVarInt(playerid,"ModelID", modelid);
    SetPVarInt(playerid, "Model", objectid);
    static fmt_str[] = "SELECT * FROM `furniture` WHERE `mID` = '%d'";
    new string[sizeof(fmt_str)-2+6];
    mysql_format(connect_mysql, string, sizeof(string), fmt_str,  objectid);
    return mysql_function_query(connect_mysql, string, true, "CheckFurniture", "d", playerid);
}

 

 

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

Спойлер

 


publics CheckFurniture(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(rows) 
    {
        CancelEdit(playerid);
        SPD(playerid,96,2,"{FFFFFF}Управление мебелью",
        "\
            Изменить позицию\n\
            Удалить","{FFFFFF}Выбрать","{FFFFFF}Закрыть\
        ");
    }
    else
    {
        DeletePVar(playerid, "Model");
        DeletePVar(playerid,"ModelID");
        SelectObject(playerid);
    }
    return true;
}

//========================

case 96:
        {
            if(response)
            {
                switch(listitem)
                {
                    case 0:
                    {
                        static fmt_str[] = "DELETE FROM `furniture` WHERE `mID` = '%d'";
                        new string[sizeof(fmt_str)-2+6];
                        mysql_format(connect_mysql, string, sizeof(string), fmt_str,
                            GetPVarInt(playerid, "Model"));
                        mysql_function_query(connect_mysql, string, false, "", "");
                        fur_info[GetPVarInt(playerid, "Model")][m_x] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_y] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_z] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rootx] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rooty] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rootz] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_virtual] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_int] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_model] = EOS;
                        EditDynamicObject(playerid, GetPVarInt(playerid, "Model"));
                    }
                    case 1:
                    {
                        static fmt_str[] = "DELETE FROM `furniture` WHERE `mID` = '%d'";
                        new string[sizeof(fmt_str)-2+6];
                        mysql_format(connect_mysql, string, sizeof(string), fmt_str,
                            GetPVarInt(playerid, "Model"));
                        mysql_function_query(connect_mysql, string, false, "", "");
                        DestroyDynamicObject(GetPVarInt(playerid, "Model"));
                        fur_info[GetPVarInt(playerid, "Model")][m_x] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_y] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_z] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rootx] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rooty] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_rootz] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_virtual] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_int] = EOS;
                        fur_info[GetPVarInt(playerid, "Model")][m_model] = EOS;
                        DeletePVar(playerid, "Model");
                        DeletePVar(playerid,"ModelID");
                        SelectObject(playerid);
                    }
                }
            }
            else
            {
                DeletePVar(playerid, "Model");
                DeletePVar(playerid,"ModelID");
                SelectObject(playerid);
            }

        }

 

И само сохранение новой позиции, самого объекта.

Спойлер

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
    if(!IsValidDynamicObject(objectid)) return true;
     MoveDynamicObject(objectid,x, y, z, 10, rx, ry, rz);
    if(response == EDIT_RESPONSE_FINAL)
    {
        new Modeles = GetPVarInt(playerid, "Model");
        DestroyDynamicObject(Modeles);
        fur_info[Modeles][m_x] = x;
        fur_info[Modeles][m_y] = y;
        fur_info[Modeles][m_z] = z;
        fur_info[Modeles][m_rootx] = rx;
        fur_info[Modeles][m_rooty] = ry;
        fur_info[Modeles][m_rootz] = rz;
        fur_info[Modeles][m_virtual] = GetPlayerVirtualWorld(playerid);
        fur_info[Modeles][m_int] = GetPlayerInterior(playerid);
        fur_info[Modeles][m_model] = GetPVarInt(playerid,"ModelID");
        Furniture_Mysql(Modeles);
        DeletePVar(playerid, "ModelID");
        DeletePVar(playerid, "Model");
        return CancelEdit(playerid);
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
        new Modeles = GetPVarInt(playerid, "Model");
        DestroyDynamicObject(Modeles);
        Modeles -= 1;
        DeletePVar(playerid, "ModelID");
        DeletePVar(playerid, "Model");
        return CancelEdit(playerid);
    }
    return true;
}

//========================

stock Furniture_Mysql(i)
{
       static fmt_str[] =
    "\
        INSERT INTO `furniture`\
        (`mID`, `mmodel`, `mx`, `my`, `mz`, `mrootx`, `mrooty`, `mrootz`, `mvirtualWorld`, `mint`)\
         VALUES ('%i', '%i', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i')\
    ";
    new string[sizeof(fmt_str)-2+6-2+6-2+10-2+10-2+10-2+10-2+10-2+10-2+4-2+4];
    mysql_format(connect_mysql, string, sizeof(string), fmt_str,
    i,\
    fur_info[i][m_model],\
    fur_info[i][m_x],\
    fur_info[i][m_y],\
    fur_info[i][m_z],\
    fur_info[i][m_rootx],\
    fur_info[i][m_rooty],\
    fur_info[i][m_rootz],\
    fur_info[i][m_virtual],\
    fur_info[i][m_int]);
    mysql_function_query(connect_mysql, string, false, "", "");
    i = CreateDynamicObject(fur_info[i][m_model],\
    fur_info[i][m_x], fur_info[i][m_y], fur_info[i][m_z], fur_info[i][m_rootx],\
    fur_info[i][m_rooty], fur_info[i][m_rootz],fur_info[i][m_virtual], fur_info[i][m_int]);
      return true;
}

 

Заметка от odosenok , создано

Объединил сообщения. Но обратите внимание на пункт правил 3.6.

Заметка от odosenok , создано

Если выкладываемый Вами код слишком большой (как в данном случае), используйте тег "Код" совместно с тегом "Спойлер", чтобы сообщение выглядело эстетично. Как это сделать?

Заметка от odosenok , создано

При выкладывании кода, пожалуйста, указывайте синтаксис в правом нижнем углу окна вставки кода. Соответственно, если выкладываете код pawn, то указывайте синтаксис языков Си (поскольку pawn - си-подобный язык).

Share this post


Link to post
Share on other sites

@Keks Выведите в консоль в любом месте вашей системы значение пвара Model и после скиньте логи сервера. 

Share this post


Link to post
Share on other sites

@DEST 

Спойлер

----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3.7-R2, (C)2005-2015 SA-MP Team

[11:44:05] filterscripts = ""  (string)
[11:44:05] 
[11:44:05] Server Plugins
[11:44:05] --------------
[11:44:05]  Loading plugin: crashdetect.so
[11:44:05]   CrashDetect v4.15.1 is OK.
[11:44:05]   Loaded.
[11:44:05]  Loading plugin: dc_cmd.so
[11:44:05]   Daniel's CMD plugin v2.8
[11:44:05]     (c) 2014 Daniel_Cortez
[11:44:05]     www.pro-pawn.ru
[11:44:05]   Loaded.
[11:44:05]  Loading plugin: sscanf.so
[11:44:05] 

[11:44:05]  ===============================

[11:44:05]       sscanf plugin loaded.     

[11:44:05]          Version:  2.8.1        

[11:44:05]    (c) 2012 Alex "Y_Less" Cole  

[11:44:05]  ===============================

[11:44:05]   Loaded.
[11:44:05]  Loading plugin: streamer.so
[11:44:05] 

*** Streamer Plugin v2.7.8 by Incognito loaded ***

[11:44:05]   Loaded.
[11:44:05]  Loading plugin: mysql.so
[11:44:06]  >> plugin.mysql: R39-2 successfully loaded.
[11:44:06]   Loaded.
[11:44:06]  Loaded 5 plugins.

[11:44:06] 
[11:44:06] Filterscripts
[11:44:06] ---------------
[11:44:06]   Loaded 0 filterscripts.

[11:44:06] Number of vehicle models: 90
[11:44:06] - Успешно загружена мебель. Всего мебели 9
[11:44:32] [connection] incoming connection: 88.200.137.154:56785 id: 0
[11:44:56] 3043 //значение PVar

Вывело id объекта в базе данных который я редактировал, так и должно же было быть? Это было редактирование.

Edited by Keks

Share this post


Link to post
Share on other sites

@Keks 

В 04.08.2018 в 20:06, Keks сказал:

fur_info[Modeles][m_x] = x;

В обращении к массиву в первых квадратных скобочках должен быть номер строки, к которой обращаемся, а не ID объекта.

Взгляните на свою загрузку объектов и поймете о чем я. 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • F0urdeuces
      By F0urdeuces
      Всем привет , как сделать чтобы в парковку только мог человек с определяемой фракцией
      if (newkeys & KEY_HORN && IsPlayerInAnyVehicle(playerid)) { new carid = GetPlayerVehicleID(playerid); if(ParkingEntered[playerid] == -1) { for(new i;i<MAX_PARKING;i++) { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z])) { ShowPlayerDialogEx(playerid, 1981, DIALOG_STYLE_LIST, !"{BDBAB5}Выберите этаж!", "{FFFFFF}1.\n2.", "Принять", "Отмена"); } if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return true; } } } else { new i = ParkingEntered[playerid]; if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return true; } else { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pVExit_x],parking[i][pVExit_y],parking[i][pVExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered [playerid] = -1; return true; } } } } else if(PRESSED(KEY_WALK) && !IsPlayerInAnyVehicle(playerid)) { new carid = GetPlayerVehicleID(playerid); if(ParkingEntered[playerid] == -1) { for(new i;i<MAX_PARKING;i++) { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z])) { ShowPlayerDialogEx(playerid, 1981, DIALOG_STYLE_LIST, !"{BDBAB5}Выберите этаж!", "{FFFFFF}1.\n2.", "Принять", "Отмена"); } if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return true; } } } else { new i = ParkingEntered[playerid]; if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return true; } else { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pVExit_x],parking[i][pVExit_y],parking[i][pVExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered [playerid] = -1; return true; } } } } else if(PRESSED(KEY_WALK) && !IsPlayerInAnyVehicle(playerid)) { new carid = GetPlayerVehicleID(playerid); if(ParkingEntered[playerid] == -1) { for(new i;i<MAX_PARKING;i++) { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z])) { ShowPlayerDialogEx(playerid, 1981, DIALOG_STYLE_LIST, !"{BDBAB5}Выберите этаж!", "{FFFFFF}1.\n2.", "Принять", "Отмена"); } if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return 1; } } } else { new i = ParkingEntered[playerid]; if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pExit_x],parking[i][pExit_y],parking[i][pExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered[playerid] = -1; return 1; } else { if(IsPlayerInRangeOfPoint(playerid, 3, parking[i][pVExit_x],parking[i][pVExit_y],parking[i][pVExit_z])) { if(GetPlayerState(playerid) == 2) { J_SetVehiclePos(carid,parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); SetVehicleZAngle(carid,parking[i][pEnter_a]); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); } else { J_SetPlayerPosFreeze(playerid, parking[i][pEnter_x],parking[i][pEnter_y],parking[i][pEnter_z]); J_SetPlayerFacingAngle(playerid, parking[i][pEnter_a]); } SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); ParkingEntered [playerid] = -1; return 1; } } } } enum parkinginfo { Float:pEnter_x, Float:pEnter_y, Float:pEnter_z, Float:pEnter_a, pVWorld, Float:pExit_x, Float:pExit_y, Float:pExit_z, Float:pExit_a, Float:pVExit_x, Float:pVExit_y, Float:pVExit_z, Float:pVExit_a, }; //pEnter_x pEnter_y pEnter_z (Точки с которых заезжает в паркинг, pEnter_a поворот перса/автомобиля) //pExit_x pExit_y pExit_z ((pExit_a поворот перса/автомобиля)Точки с которых выезжает из паркинга на точки pEnter_x pEnter_y pEnter_z) //pVWorld (Вирт.Мир авто/игрока) //pVExit_x, pVExit_y, pVExit_z, pVExit_a тоже самое что и pEnter_x pEnter_y pEnter_z, только на второй этаж new parking[MAX_PARKING][parkinginfo] = { {774.6982,1651.0575,12.0073,357.5273, 1, 1017.3782,1005.9407,998.4375, 271.0465, 2496.8066,2343.3479,1502.3184,87.2872}, {1814.3567, -1877.0453, 13.5781, 3.1156, 2, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-78.3442,1180.6338,19.4433,178.3271, 3, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2811.5740,1235.1237,10.4653,88.9500, 5, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2650.6873,1181.1444,10.8203,91.8699, 6, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1790.0857,418.0161,19.9621,86.8489, 7, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1504.7184,-1325.3362,13.7060,271.2840, 8, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1436.8799,-1578.2943,13.2682,1.1519, 9, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1637.1638,-1684.8743,13.2173,93.0377, 10, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1403.2896,-1652.7843,13.1607,271.2161, 11, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1283.7948,-1349.4983,13.1657,3.1795, 12, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1175.3805,-1308.6919,13.6326,269.0903, 13, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {340.4299,-1618.8706,32.7566,179.5325, 14, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {611.8994,-1348.3763,13.4575,279.0285, 15, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {167.3457,-183.4712,1.3028,269.8813, 16, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-1991.2229,235.8233,28.6959,91.8888, 18, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2099.6377,-52.8561,35.0399,181.8297, 19, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2079.7205,-54.8950,34.9738,0.5623, 20, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2153.8198,277.4999,35.0464,181.6078, 21, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2443.9368,523.5727,29.9163,181.6118, 22, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-1967.0040,548.9451,34.8768,90.3882, 23, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2565.8049,556.1598,14.1902,269.6837, 24, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2627.1423,627.0738,14.1298,181.6917, 25, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2730.2429,75.1695,4.0616,271.5603, 26, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-1994.6035,-1032.1533,31.8478,359.2426, 27, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1613.7208,1721.5741,10.5646,265.7845, 28, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2201.0083,2411.4814,10.4901,177.4481, 29, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2255.9700,-1135.6167,26.4331,246.4052, 30, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2248.2683,-1726.0171,13.2362,268.7718, 31, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2773.5608,-1649.4165,11.4144,270.2876, 32, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2123.9248,-2295.5845,30.3705,142.9485, 33, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2443.9199,105.2780,34.8502,258.0834, 34, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1446.2391,2816.8208,10.5487,271.3440, 35, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {946.8265,1660.0414,8.3660,268.2236, 36, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {-2456.6633,2292.8625,4.7045,1.0456, 37, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1156.6422,-1627.2762,13.6746,0.0072, 38, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {2758.7075,-2365.7222,13.6328,93.9539, 38, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872}, {1798.8214,-1442.1119,13.4887,1.6389, 39, 1017.3782,1005.9407,998.4375, 271.0465,2496.8066,2343.3479,1502.3184,87.2872} };