• 0
Keks

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

Вопросы

Здравствуйте, у меня возник вопрос на счёт создания и загрузки отдельных моделей объектов. Например я создаю объект 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}Закрыть");
    }

}

Поделиться сообщением


Ссылка на сообщение

10 ответов на этот вопрос

  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

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

 

Поделиться сообщением


Ссылка на сообщение
  • 0

Привет, я опять на счёт этой системы. Я как бы переставляю объекты, эти созданные, и под 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;
}

 

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
  • 0

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

Поделиться сообщением


Ссылка на сообщение
  • 0

@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 объекта в базе данных который я редактировал, так и должно же было быть? Это было редактирование.

Отредактировано пользователем Keks

Поделиться сообщением


Ссылка на сообщение
  • 0

@Keks 

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

fur_info[Modeles][m_x] = x;

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

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

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };
    • Garnik
      От Garnik
      ERRORS:
      : error 017: undefined symbol "HouseInfo"
      : error 017: undefined symbol "OWNABLEHOUSES"
      : error 029: invalid expression, assumed zero
      : fatal error 107: too many error messages on one line
      ===============================================================================================================
       
       
      ================================================================================================================
      CMD:addhouse(playerid,params[])
      {
              if(PI[playerid][pAdmin] < 10)return false;
              new string[650];
              new house_class, house_price;
              new Float:X, Float:Y, Float:Z, Float:A;
              if(sscanf(params, "ii", house_class,house_price))
              {
                      SendClientMessage(playerid, -1, "???????????: /addhouse [????? ??????] [???? ???????]");
                      SendClientMessage(playerid, -1, "??????: [1 - ??????-?????] [2 - ???????-?????] [3 - ???????-?????] [4 - ???????-?????]");
                      return 1;
              }
              if(house_class > 4 || house_class < 1)
              {
                      SendClientMessage(playerid, -1, "ID ????????? ?? 1 ?? 4");
                      return 1;
              }
              //
              GetPlayerPos(playerid,X,Y,Z);
              GetPlayerFacingAngle(playerid,A);
              HouseInfo[OWNABLEHOUSES][hEnter_X]=X;
              HouseInfo[OWNABLEHOUSES][hEnter_Y]=Y;
              HouseInfo[OWNABLEHOUSES][hEnter_Z]=Z;
              HouseInfo[OWNABLEHOUSES][hEnter_A]=A;
              HouseInfo[OWNABLEHOUSES][hKlass]=house_class;
              HouseInfo[OWNABLEHOUSES][hCost]=house_price;
              string="";
              strmid(HouseInfo[OWNABLEHOUSES][hOwner],"The State",0,strlen("The State"),28);
              format(string, 144, "?? ??????? ??????? ??? ????? {e7e7e7}%d {ffffff}????????? ???????: {e7e7e7}%d",OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hCost]);
              SendClientMessage(playerid,-1,string);
              //
              string="";
              format(string,1500,"INSERT INTO `houses`(`ID`,`Enter_X`, `Enter_Y`, `Enter_Z`, `Enter_A`,`Exit_X`, `Exit_Y`, `Exit_Z`, `Owner`, `Cost` , `Klass`, `Interior`, `Level`) VALUES ('%d','%.2f','%.2f','%.2f','%.2f','267.1','305','999.148','The State','%d','%d','2','1')",
              OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hEnter_X],HouseInfo[
              OWNABLEHOUSES][hEnter_Y],HouseInfo[OWNABLEHOUSES][hEnter_Z]
              ,HouseInfo[OWNABLEHOUSES][hEnter_A],HouseInfo[OWNABLEHOUSES]
              [hCost],HouseInfo[OWNABLEHOUSES][hKlass]);
              mysql_tquery(mysql, string);
              OWNABLEHOUSES++;
              return 1;
      }
       0
       Ответить
    • Garnik
      От Garnik
      ERRORS:
      : error 017: undefined symbol "HouseInfo"
      : error 017: undefined symbol "OWNABLEHOUSES"
      : error 029: invalid expression, assumed zero
      : fatal error 107: too many error messages on one line
      ===============================================================================================================
       
       
      ================================================================================================================
      CMD:addhouse(playerid,params[])
      {
              if(PI[playerid][pAdmin] < 10)return false;
              new string[650];
              new house_class, house_price;
              new Float:X, Float:Y, Float:Z, Float:A;
              if(sscanf(params, "ii", house_class,house_price))
              {
                      SendClientMessage(playerid, -1, "???????????: /addhouse [????? ??????] [???? ???????]");
                      SendClientMessage(playerid, -1, "??????: [1 - ??????-?????] [2 - ???????-?????] [3 - ???????-?????] [4 - ???????-?????]");
                      return 1;
              }
              if(house_class > 4 || house_class < 1)
              {
                      SendClientMessage(playerid, -1, "ID ????????? ?? 1 ?? 4");
                      return 1;
              }
              //
              GetPlayerPos(playerid,X,Y,Z);
              GetPlayerFacingAngle(playerid,A);
              HouseInfo[OWNABLEHOUSES][hEnter_X]=X;
              HouseInfo[OWNABLEHOUSES][hEnter_Y]=Y;
              HouseInfo[OWNABLEHOUSES][hEnter_Z]=Z;
              HouseInfo[OWNABLEHOUSES][hEnter_A]=A;
              HouseInfo[OWNABLEHOUSES][hKlass]=house_class;
              HouseInfo[OWNABLEHOUSES][hCost]=house_price;
              string="";
              strmid(HouseInfo[OWNABLEHOUSES][hOwner],"The State",0,strlen("The State"),28);
              format(string, 144, "?? ??????? ??????? ??? ????? {e7e7e7}%d {ffffff}????????? ???????: {e7e7e7}%d",OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hCost]);
              SendClientMessage(playerid,-1,string);
              //
              string="";
              format(string,1500,"INSERT INTO `houses`(`ID`,`Enter_X`, `Enter_Y`, `Enter_Z`, `Enter_A`,`Exit_X`, `Exit_Y`, `Exit_Z`, `Owner`, `Cost` , `Klass`, `Interior`, `Level`) VALUES ('%d','%.2f','%.2f','%.2f','%.2f','267.1','305','999.148','The State','%d','%d','2','1')",
              OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hEnter_X],HouseInfo[
              OWNABLEHOUSES][hEnter_Y],HouseInfo[OWNABLEHOUSES][hEnter_Z]
              ,HouseInfo[OWNABLEHOUSES][hEnter_A],HouseInfo[OWNABLEHOUSES]
              [hCost],HouseInfo[OWNABLEHOUSES][hKlass]);
              mysql_tquery(mysql, string);
              OWNABLEHOUSES++;
              return 1;
      }