keyl

Добавление картинки в модпак (TXD-архив)

В теме 27 сообщений

В этой теме вы узнаете... 

Многие у меня лично, да и на форумах, спрашивали: "Как сделать логотип как на ГринТече?" (GreenTechRP - проект в CRMP). А сделать это очень просто, нужно всего лишь навсего добавить картинку в модпак (txd) и в моде уже использовать как стандартную картинку из стандартной библиотеки TXD, т.е. : название_библиотеки(txd):название_самого_тд


От вас потребуется:

  1. Фотошоп (здесь рекомендуется использовать AdobePhotoshopCS6, так как все примеры даны именно на нем)
  2. TXD WorkShop
  3. Тестовый мод <ИЛИ> ваш основной мод. 

От слов к действиям: 

Урок можно поделить на две части: работа в Фотошопе и работа в TXD WorkShop. 

Приступим к первой части. 

  1. Открываем Ваш графический редактор и создаете изображение. Для примера возьмем 600 на 600 точек. 
      Скриншот (открыть спойлер)

     

  2. Далее вы можете приступать к оформлению вашего изображения.
  3. После того как вы сделали свой шедевр, вам необходимо добавить альфа-канал. Для примера возьмем AdobePhotoshopCS6. Нажимаем "Выделение -> загрузить выделенную область". 
    ПРИМЕЧАНИЕ: если у текста есть обводка, то для нанесения альфа-канала необходимо сначала преобразовать его (текст) в смарт-объект. 
    После жмем "Выделение -> Сохранить выделенную область". Название может быть произвольным. 
    Далее нажимаем на "глаз" у альфа-канала, т.е. делаем его невидимым. 
  4. После вы можете сохранить свою работу в формате TGA (В случае с фотошоп кс6: "Файл -> Сохранить как - Формат targa (tga)")

На этом первая часть урока завершена. Мы на полпути у финиша. Переходим ко второй части урока, работе с TXD WorkShop. 

  1. Открываем TXD WorkShop и добавляем созданный в Фотошопе файл. 
  2. Выбираем: "Image -> Decompress ALL Image"
  3. Выбираем: "Image -> Compress ALL Image"
  4. Сохраняем готовый файл в директорию. Если хотите использовать с модпаком, то сохраняйте по пути: /путь к игре/multiplayer_browser_cr/custom/, если же вы хотите просто протестировать это ТОЛЬКО у себя на компьютере, сохраняйте по пути: /путь к игре/models/txd

Далее вы можете заходить на тестовый (Ipleomax) или другой сервер и пробовать добавлять. 

На этом все. 


Над темой работали: 

Автор теоретического материала (фотошоп): Первый

Корректор: @DEST

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST  проблемка, и так всегда, и через игру добавляется такой рисунок, делал так же вроде

  скрин (открыть спойлер)

 

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


Ссылка на сообщение
Поделиться на другие сайты

@Timur_Top проблема в некорректности самого рисунка? 

В фотошопе он был нормальным? 

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST В фш он был нормальным, и да, когда импортирую в воркшоп tga файл, вылазиет ошибка: floating point division by zero

Добавил alpha, в картинке текста нету, а изображение png было.

 

 

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


Ссылка на сообщение
Поделиться на другие сайты

@Timur_Top попробуйте обновить версию TXD Work Shop

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST Я добавил alpha и в название в конец а добавил, отображается только картинка

 

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


Ссылка на сообщение
Поделиться на другие сайты

@Timur_Top невидимым слоем alpha сделали? 

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST Не понял

 

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


Ссылка на сообщение
Поделиться на другие сайты
  В 12/23/2017 в 16:50, DEST сказал:

После того как вы сделали свой шедевр, вам необходимо добавить альфа-канал. Для примера возьмем AdobePhotoshopCS6. Нажимаем "Выделение -> загрузить выделенную область". 
ПРИМЕЧАНИЕ: если у текста есть обводка, то для нанесения альфа-канала необходимо сначала преобразовать его (текст) в смарт-объект. 
После жмем "Выделение -> Сохранить выделенную область". Название может быть произвольным. 
Далее нажимаем на "глаз" у альфа-канала, т.е. делаем его невидимым. 

Читать далее...  

 

Справа сбоку есть управление слоями в PhotoshopCS6

 

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST Фон нужно сделать невидимым?

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


Ссылка на сообщение
Поделиться на другие сайты

@DEST Возник такой вопрос, как найти теперь саму текстуру в TDEditor?

 

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


Ссылка на сообщение
Поделиться на другие сайты

@Nicinen подключаешь мод-пак, а точнее, эту библиотеку TXD, которую ты создал, и вводишь: "mp_name-modpack:image_name" по такому шаблону. Можешь её сразу кинуть в TXD в папке с игрой.

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


Ссылка на сообщение
Поделиться на другие сайты

Можно видео урок? не много не понятно как это все будет происходить 

к примеру у меня уже есть даже готовый фон и  иконка и сделал фш я загрузил в Txd изменил к примеру там фон итд и что дальше? как мне это сделать в Iplemax и залить к себе на сервер SAMP 

было подробней на видео примере вашем как до что 

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

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


Ссылка на сообщение
Поделиться на другие сайты

@Rafael_Rosse зачем делать урок по элементарной теме? В TDE добавляешь спрайт, растягиваешь до нужных размеров, сохраняешь, добавляешь в мод и в названии пишешь как теме описывается.

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/10/2019 в 13:31, SCRIPTMAN сказал:

@Rafael_Rosse зачем делать урок по элементарной теме? В TDE добавляешь спрайт, растягиваешь до нужных размеров, сохраняешь, добавляешь в мод и в названии пишешь как теме описывается.

Читать далее...  

ты хоть понял что сказал? у меня даже тд не нарисован я обычный фон (Слово удалено системой) куда запинаю? 

жду видео урока или тема без полезная и не понятная

у меня фон есть и иконка допустим фотошопе ну и что дальше? я сделал фон итд а текстдрав кто делать будет как это все хуякнуть 

итд 

и в мод куда потом залить итд  В МОД SAMP САМП GTA 

 

ДА И У МЕНЯ НЕТУ НОРМАЛЬНОГО ТДЕ КОТОРЫЙ С МОДЕЛЯМИ НАЙТИ НЕ МОГУ ИТД 

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

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

Не обязательно писать большими буквами(Caps) достаточно просто сделать предложение/слово жирным текстом

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


Ссылка на сообщение
Поделиться на другие сайты

@Rafael_Rosse TDEditor v2.3, в интернете введи. Бомбить на меня тут не надо, я всё доступно объяснил, иди лучше русский язык подтяни. Неужели трудно самому сделать TextDraw Sprite? Сделал, изменил на нужную позицию и размер, сохранил, добавил в мод, ввёл имя библиотеки и название картинки.

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/10/2019 в 17:57, SCRIPTMAN сказал:

@Rafael_Rosse TDEditor v2.3, в интернете введи. Бомбить на меня тут не надо, я всё доступно объяснил, иди лучше русский язык подтяни. Неужели трудно самому сделать TextDraw Sprite? Сделал, изменил на нужную позицию и размер, сохранил, добавил в мод, ввёл имя библиотеки и название картинки.

Читать далее...  

как сделать TextDraw Sprite как туда добавить чтобы я в тде спрайт нажал выбрал и у меня на экране появилась это моя картинка ? свою картинку обьяснишь поставлю лайки на все пост итд надеюсь теперь ясно выяснился? 

Отредактировано пользователем Rafael_Rosse
Причина: Дополнил текст

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


Ссылка на сообщение
Поделиться на другие сайты

И еще вопрос всем игрокам видно будет моя картинка? который я сделаю? 

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


Ссылка на сообщение
Поделиться на другие сайты

@Rafael_Rosse, только если все установят модпак.

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/11/2019 в 21:12, odosenok сказал:

@Rafael_Rosse, только если все установят модпак.

Читать далее...  

а как  без мод пака в сампе сделать

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


Ссылка на сообщение
Поделиться на другие сайты

@Rafael_Rosse, свою картинку - никак.

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/12/2019 в 07:02, odosenok сказал:

@Rafael_Rosse, свою картинку - никак.

Читать далее...  

как так  если вон даймонд рп  не реклама пример кристал как то сделали и когда скачиваю чистую где не будь гта их кристал не проподает в сампе 

hZPd-cSyq0k.jpg.8b32b9a3d247377d5ea7b0eef37a7a73.jpg

Отредактировано пользователем Rafael_Rosse
Причина: Дополнил текст

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


Ссылка на сообщение
Поделиться на другие сайты

@Rafael_Rosse Это не картинка

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

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/12/2019 в 00:04, Rafael_Rosse сказал:

а как  без мод пака в сампе сделать

Читать далее...  

Вот есть утилита, которая конвертирует картинку в TD, но естественно с потерей качества - https://forum.sa-mp.com/showthread.php?t=274064

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


Ссылка на сообщение
Поделиться на другие сайты
  В 4/12/2019 в 12:11, DEST сказал:

Вот есть утилита, которая конвертирует картинку в TD, но естественно с потерей качества - https://forum.sa-mp.com/showthread.php?t=274064

Читать далее...  

иё все  будут видеть игроки? без модпака? 

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

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

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

    • Dev_Persona
      От Dev_Persona
      Приветствую всех, у меня возник такой вопрос:
       
      - хочу изменить базовую регистрацию в админке в крмп, на Болле сложную то-есть, сейчас изначально пароль от админки может быть только из цифр, хотелось бы узнать как можно было бы сделать что бы можно было использовать и цифры и буквы, вот код:
       
      case DIALOG_ADMIN_REG:
         {
          if(!response) return FixKick(playerid);
       
          if(strval(inputtext) < 100000 || strval(inputtext) > 999999) return ShowPlayerDialog(playerid, DIALOG_ADMIN_REG, DIALOG_STYLE_INPUT, "{FF6347}"PROJECT_NAME" {ffffff}| Придумайте пароль", "{FFFFFF}Для того, чтобы продолжить дальше - придумайте и введите\n{FFFFFF}пароль от панели администратора в диалоговое поле ниже.\n\n{FFFFFF}Пароль должен быть из 6 цифр.\n", "Готово", "");
                   SetPlayerData(playerid, P_APASS, strval(inputtext));
       
                   UpdatePlayerDatabaseInt(playerid, "AdminPassword", GetPlayerData(playerid, P_APASS));
       
                   AdminAuthorization(playerid);
         }
    • Danny_Marcelo
      От Danny_Marcelo
      Всех приветствую. Сегодня я решил обновить систему мероприятий, т.к. на самом проекте Advance RP уже давно видоизменили систему, добавили нового функционала. Мы не должны стоять на месте и я решил тоже свою систему доработать. Вы можете использовать данную систему как аналог Advance RP или же доработать для своего проекта. Все в ваших руках как говорится.
       
      Что нового?
       
      Итак приступим:
      Находим свои переменные и вставляем:
       
      new settp = 0; // Флаг включения/выключения телепортации new Float:TeleportFloat[3]; // Координаты точки телепортации new TeleportInfo[2]; // Интерьер и виртуальный мир new Float:PlayerLastPos[MAX_PLAYERS][3]; // Последние координаты игрока new PlayerLastInt[MAX_PLAYERS]; // Последний интерьер игрока new PlayerLastVW[MAX_PLAYERS]; // Последний виртуальный мир игрока new PlayerWeapons[MAX_PLAYERS][13][2]; // Оружие игрока (слот и патроны) new PlayerUsedTP[MAX_PLAYERS]; // Флаг для отслеживания использования /tp  
      Далее идём в команды, мой случай на Pawn.CMD, но +/- везде одинаково, разве что меняется шапка
       
      CMD:settp(playerid, params[]) {     if (PlayerInfo[playerid][pAdmin] < 4) return 1;     new string[95];     if (settp == 0)     {         GetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);         TeleportInfo[0] = GetPlayerInterior(playerid);         TeleportInfo[1] = GetPlayerVirtualWorld(playerid);         settp = 1;         format(string, sizeof(string), "[A] %s[%d] установил точку телепорта для игроков. {00CC00}ТП включен.", PlayerInfo[playerid][pName], playerid);         SendAdminMessage(0x52B2B5FF, string);     }     else     {         format(string, sizeof(string), "[A] %s[%d] удалил точку телепорта для игроков. {FF6600}ТП отключен.", PlayerInfo[playerid][pName], playerid);         SendAdminMessage(0x52B2B5FF, string);         settp = 0;     }     return 1; } CMD:tp(playerid, params[]) {     if (settp == 0) return SendClientMessage(playerid, 0xCECECEFF, !"Функция отключена администратором.");     if (PlayerInfo[playerid][pJailed] >= 1) return SendClientMessage(playerid, 0xCECECEFF, !"Арестованным не разрешено покидать камеру.");     if (PlayerInfo[playerid][pRabota] != 0) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");     if (bolkam[playerid] == true) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");     GetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);     PlayerLastInt[playerid] = GetPlayerInterior(playerid);     PlayerLastVW[playerid] = GetPlayerVirtualWorld(playerid);     for (new i = 0; i < 13; i++)     {         GetPlayerWeaponData(playerid, i, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);     }     PlayerUsedTP[playerid] = 1;     ShowPlayerDialog(playerid, 22, DIALOG_STYLE_MSGBOX, !"{6699FF}Телепортация",         !"{FFFFFF}Вы уверены, что хотите попасть на место проведения мероприятия?\n{FFCD00}Ваше оружие будет изъято для хранения и возвращено позже.", !"Да", !"Нет");     return 1; }  
       
      CMD:back(playerid, params[]) {     if (!PlayerUsedTP[playerid])     {         return SendClientMessage(playerid, 0xCECECEFF, !"Эту функцию можно использовать после {FF9933}/tp, /go {CECECE}или по окончании {FF9933}мероприятий");     }     SetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);     SetPlayerInterior(playerid, PlayerLastInt[playerid]);     SetPlayerVirtualWorld(playerid, PlayerLastVW[playerid]);     ResetPlayerWeapons(playerid);     for (new i = 0; i < 13; i++)     {         if (PlayerWeapons[playerid][i][0] != 0)         {             GivePlayerWeapon(playerid, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);         }     }     PlayerUsedTP[playerid] = 0;     SendClientMessage(playerid, 0x3399FFFF, !"Вы вернулись туда, где были до телепортации");     return 1; } Ну и в OnDialogResponse:
      case 22: // Не забудьте проверить и при надобности изменить id диалога на вашу цифру или ID_NAME         {             if (response)             {                 SetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);                 SetPlayerInterior(playerid, TeleportInfo[0]);                 SetPlayerVirtualWorld(playerid, TeleportInfo[1]);                 ResetPlayerWeapons(playerid);                 SendClientMessage(playerid, 0x66CCFFFF, "Вы были доставлены на место проведения мероприятия");                 SendClientMessage(playerid, 0x66CCFFFF, "Чтобы вернуться обратно, введите {FF9900}/back");             }         } Скриншоты:
       
      Если игрок сидит в КПЗ и вводит /tp:

       
      При включенном /tp:

       
      При выключенном /tp:

       
      Сообщение администраторам:

       
      Если работаешь или лечишься в больнице:

       
      Текст после телепортации:

       
      При вводе /back 1 и более раз:

       
      P.S. Команду /tp на Advance можно нажимать бесконечно, по этому я не стал сюда пихать аналогичную проверку как в /back.
      Если что, не сложно будет добавить 1 строчку проверки. Просто имейте ввиду, что это не баг. Просто нужно же соответствовать названию темы "На 100% КОПИЯ"))
       
      Автор: Danny_Marcelo
      Размещая на другие порталы, обязательно указать автора
    • Wiggins
      От Wiggins
      Доброго времени суток, нуждаюсь в помощи. Если есть люди, которые шарят в pawno, нужна помощь. Короче, мод ART RP, там в донате есть строка "Уникальные аксессуары", когда на него нажмешь, открывается TextDraw менью, нужно переделать это на обычную менью (/mm например, там обычная менью), буду рад, если поможете, за ранее спасибо.

      Если не ошибаюсь, строка текстдрав аксессуаров начинается с 1416 до 1443.
      art4.pwn
    • Danny_Marcelo
      От Danny_Marcelo
      Приветствую всех. Сегодня я хочу поделиться системой создания объектов как на Advance RP. Пока нигде не встречал. Да, есть аналоги, порой весьма неплохие. Особенно скрипт SOE. Но тут именно конкретная копия проекта Advance RP. Администрация Advance RP старается максимально скрывать админ информацию главной админки, но благодаря ютуберам какая то информация всё таки просочилась в общий доступ. Благодаря этому мне и удалось воссоздать почти на 100% копию данной системы. Для начала распишу суть. К никам Andrey Ringo, Smart_Jakson и прочим спец.админам привязана команда /lego. Она даёт доступ к другим командам, которые используются для создания и редактирования объектов. Как я понял объекты находятся непосредственно в базе данных MariaDB, а не на сервере, создатель боится что если всем подряд давать команду, те могут положить сервер (случайно), как например ютубер MalFoy чуть этого не сделал:

      Ну в основном она привязана на каждом сервере индивидуально. К примеру на грине по мимо Ринго и Смарта еще и к главному администратору. На Блу аналогично.
      Ну что же, меньше слов, больше дела. Приступим:
      Перейдём к нашим define:
      //========================= [ Привязка к нику ] ================================ #define FullAccessOne                    !strcmp(PlayerInfo[playerid][pName], "Andrey_Ringo", false) #define FullAccessTwo                   !strcmp(PlayerInfo[playerid][pName], "Smart_Jakson", false) #define FullAccessThree                  !strcmp(PlayerInfo[playerid][pName], "Danny_Marcelo", false) #define MAX_LEGO_OBJECTS                 100 // Максимальное количество объектов К нашим переменным:
      //========================  [ LEGO ] =========================================== new LegoObjects[MAX_PLAYERS][MAX_LEGO_OBJECTS]; // Массив для хранения объектов new LegoObjectCount[MAX_PLAYERS]; // Счетчик объектов для каждого игрока new bool:LegoMode[MAX_PLAYERS]; // Режим LEGO new Float:LegoObjectOriginalPos[MAX_PLAYERS][MAX_LEGO_OBJECTS][6]; // [playerid][object_index][x, y, z, rotX, rotY, rotZ] new Float:ServerObjectOriginalPos[MAX_OBJECTS][6]; // [objectid][x, y, z, rotX, rotY, rotZ] new bool:ServerObjectMoved[MAX_OBJECTS]; // Флаг, указывающий, был ли объект перемещён enum {     EDIT_TYPE_NONE,     EDIT_TYPE_GLOBAL,     EDIT_TYPE_PLAYER }; new EditingObjectType[MAX_PLAYERS]; // Тип редактируемого объекта (серверный или игровой) new EditingObjectID[MAX_PLAYERS] = { -1, ... }; // ID редактируемого объекта // ============================================================================= В public OnPlayerConnect(playerid)
      LegoMode[playerid] = false;     LegoObjectCount[playerid] = 0;     EditingObjectID[playerid] = -1;     for(new i = 0; i < MAX_LEGO_OBJECTS; i++)     {         LegoObjects[playerid][i] = INVALID_OBJECT_ID;     } В public OnPlayerDisconnect(playerid, reason)
      for(new i = 0; i < LegoObjectCount[playerid]; i++)     {         if(IsValidObject(LegoObjects[playerid][i]))         {             DestroyObject(LegoObjects[playerid][i]);         }     }     LegoObjectCount[playerid] = 0;     EditingObjectID[playerid] = -1;     DestroyPlayerLogo(playerid); В OnDialogResponse:
      case 272: // Диалог подтверждения для серверных объектов, не забудьте заменить на свой         {             if(response) // Если игрок нажал "Да"             {                 EditObject(playerid, EditingObjectID[playerid]);                 SendClientMessage(playerid, 0xFFFF00AA, "[LEGO] Выберите объект для редактирования");             }         }
      После стандартных public
      public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ) {     if(type == SELECT_OBJECT_GLOBAL_OBJECT) // Если выбран серверный объект     {         ShowPlayerDialog(playerid, 272, DIALOG_STYLE_MSGBOX, !"{ED7A19}Предупреждение",         !"{FFFFFF}Это не LEGO объект. Его перемещение нежелательно.\n\         Вы всё-таки хотите передвинуть его?", !"Да", !"Нет"); // Не забудьте ID диалога заменить аналогично OnDialogResponse         EditingObjectID[playerid] = objectid;         EditingObjectType[playerid] = EDIT_TYPE_GLOBAL;     }     else if(type == SELECT_OBJECT_PLAYER_OBJECT) // Если выбран LEGO-объект     {         for(new i = 0; i < LegoObjectCount[playerid]; i++)         {             if(LegoObjects[playerid][i] == objectid)             {                 EditingObjectID[playerid] = i;                 EditingObjectType[playerid] = EDIT_TYPE_PLAYER;                 EditPlayerObject(playerid, LegoObjects[playerid][i]);                 new string[128];                 format(string, sizeof(string), "[LEGO] Редактирование объекта {3E8A33}%d", i + 1);                 SendClientMessage(playerid, 0xFFFF00AA, string);                 return 1;             }         }     }     return 1; } и еще один
      public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ) {     if(response == EDIT_RESPONSE_FINAL)     {         if(EditingObjectType[playerid] == EDIT_TYPE_GLOBAL) // Если это серверный объект         {             GetObjectPos(objectid, ServerObjectOriginalPos[objectid][0], ServerObjectOriginalPos[objectid][1], ServerObjectOriginalPos[objectid][2]);             GetObjectRot(objectid, ServerObjectOriginalPos[objectid][3], ServerObjectOriginalPos[objectid][4], ServerObjectOriginalPos[objectid][5]);             ServerObjectMoved[objectid] = true;             SetObjectPos(objectid, fX, fY, fZ);             SetObjectRot(objectid, fRotX, fRotY, fRotZ);             new string[110];             format(string, sizeof(string), "Позиция объекта сохранена {E5A938}(%d/100){66AF0B}. Используйте /moveobj для перемещения на исходное место", LegoObjectCount[playerid]);             SendClientMessage(playerid, 0x66AF0BFF, string);         }         else if(EditingObjectType[playerid] == EDIT_TYPE_PLAYER) // Если это LEGO объект         {             SetPlayerObjectPos(playerid, objectid, fX, fY, fZ);             SetPlayerObjectRot(playerid, objectid, fRotX, fRotY, fRotZ);         }     }     return 1; } Ну и наконец перейдем в наши команды. Я для примера буду использовать pawncmd:
      Команда для доступа к остальным командам редактирвоания:
      CMD:lego(playerid, params[]) {     if (!FullAccessOne && !FullAccessTwo && !FullAccessThree) return 1;     {         LegoMode[playerid] = !LegoMode[playerid];         if(LegoMode[playerid])         {             SendClientMessage(playerid, 0xFFFFFFFF, !"Режим {F7CB31}LEGO {FFFFFF}включён");             SendClientMessage(playerid, 0xFFFFFFFF, !"Команды: /newobj /dellast /delall /objedit /repeat");             SendClientMessage(playerid, 0xFF0000FF, !"Внимательно вводите id объекта! Неверный id может вызвать падение сервера!");         }         else         {             SendClientMessage(playerid, 0xFFFFFFFF, !"Режим {F7CB31}LEGO {FFFFFF}выключен");         }     }     return 1; } Команда для создания объектов:
      CMD:newobj(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, !"Включи режим LEGO: {F7CB31}/lego");         SendClientMessage(playerid, 0xE3871EFF, !"Внимательно вводите id объекта! Неверный id может вызвать падение сервера!");         if(LegoObjectCount[playerid] >= MAX_LEGO_OBJECTS) return SendClientMessage(playerid, 0xFF0000FF, "Достигнут лимит объектов");         new objectid;         if(sscanf(params, "d", objectid)) return SendClientMessage(playerid, 0xCECECEFF, !"Используйте: /newobj [id объекта]");         new Float:x, Float:y, Float:z;         GetPlayerPos(playerid, x, y, z);         LegoObjects[playerid][LegoObjectCount[playerid]] = CreatePlayerObject(playerid, objectid, x, y, z, 0.0, 0.0, 0.0, 300.0);         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][0] = x;         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][1] = y;         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][2] = z;         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][3] = 0.0;         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][4] = 0.0;         LegoObjectOriginalPos[playerid][LegoObjectCount[playerid]][5] = 0.0;         LegoObjectCount[playerid]++; // Увеличиваем счетчик объектов         new string[59];         format(string, sizeof(string), "[LEGO] Создан объект. Всего объектов: {35BD39}%d/%d", LegoObjectCount[playerid], MAX_LEGO_OBJECTS);         SendClientMessage(playerid, 0xFFFF00AA, string);     }     return 1; } Команда для редактирования объектов, включая серверных.
      CMD:objedit(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, !"Включи режим LEGO: {F7CB31}/lego");         SendClientMessage(playerid, 0xFFFF00AA, !"[LEGO] Выберите объект для редактирования");         SelectObject(playerid);     }     return 1; } Данная команда, вернёт передвинутые объекты вашего сервера в исходное состояние
      CMD:moveobj(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, !"Включи режим LEGO: {F7CB31}/lego");         new movedObjects = 0;         for(new i = 0; i < MAX_OBJECTS; i++)         {             if(ServerObjectMoved[i])             {                 SetObjectPos(i, ServerObjectOriginalPos[i][0], ServerObjectOriginalPos[i][1], ServerObjectOriginalPos[i][2]);                 SetObjectRot(i, ServerObjectOriginalPos[i][3], ServerObjectOriginalPos[i][4], ServerObjectOriginalPos[i][5]);                 ServerObjectMoved[i] = false;                 movedObjects++;             }         }         new string[92];         format(string, sizeof(string), "Стандартные объекты со смещённой позицией возвращены на свои места {E8AC32}(%d шт.)", movedObjects);         SendClientMessage(playerid, 0x78A82CFF, string);     }     return 1; } Эта команда удаляет последний созданный объект через /newobj
      CMD:dellast(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, "Включи режим LEGO: {F7CB31}/lego");         if(LegoObjectCount[playerid] == 0) return SendClientMessage(playerid, 0xCECECEFF, "Нет объектов для удаления.");         DestroyPlayerObject(playerid, LegoObjects[playerid][LegoObjectCount[playerid] - 1]);         LegoObjectCount[playerid]--;         new string[37];         format(string, sizeof(string), "[LEGO] Удалён объект {F74214}%d/100", LegoObjectCount[playerid]);         SendClientMessage(playerid, 0xFFFF00AA, string);     }     return 1; } Эта команда удалит все созданные вами объекты.
      CMD:delall(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, "Включи режим LEGO: {F7CB31}/lego");         if(LegoObjectCount[playerid] == 0) return SendClientMessage(playerid, 0xCECECEFF, "Нет объектов для удаления.");         for(new i = 0; i < LegoObjectCount[playerid]; i++)         {             DestroyPlayerObject(playerid, LegoObjects[playerid][i]);         }         LegoObjectCount[playerid] = 0;         SendClientMessage(playerid, 0xFFFF00AA, !"[LEGO] Все объекты удалены");     }     return 1; } Ну и эта команда повторит действие /newobj [id игрока]
      CMD:repeat(playerid, params[]) {     if(PlayerInfo[playerid][pAdmin] < 5) return 1;     {         if(!LegoMode[playerid]) return SendClientMessage(playerid, 0xFFFFFFFF, "Включи режим LEGO: {F7CB31}/lego");         if(LegoObjectCount[playerid] == 0) return SendClientMessage(playerid, 0xCECECEFF, "Нет объектов для повторения.");         new Float:x, Float:y, Float:z;         GetPlayerPos(playerid, x, y, z);         new lastObjectID = LegoObjects[playerid][LegoObjectCount[playerid] - 1];         new modelid = GetPlayerObjectModel(playerid, lastObjectID);         LegoObjects[playerid][LegoObjectCount[playerid]] = CreatePlayerObject(playerid, modelid, x, y, z, 0.0, 0.0, 0.0, 300.0);         LegoObjectCount[playerid]++;         new string[39];         format(string, sizeof(string), "[LEGO] Создан объект {35BD39}%d/%d", LegoObjectCount[playerid], MAX_LEGO_OBJECTS);         SendClientMessage(playerid, 0xFFFF00AA, string);     }     return 1; } Переменные
      enum pInfo {     pName[MAX_PLAYER_NAME+1],     pAdmin,  new PlayerInfo[MAX_PLAYERS][pInfo]; заменяйте на свои из вашего мода. Цвета я использовал как коды, чтобы у вас не было ошибок error 017: можете заменить на свои дефайны цвета.
      Система полностью тщательно протестирована, она полностью работает. 
      Скриншоты, как выглядит это всё:
       
       
      P.S. Если редактируете серверные объекты, то сразу имейте ввиду, что createobject и стандартные объекты карты GTA San Andreas не редактируются. А вот уже те, которые через inckude <streamer>, то есть CreateDynamicObject, они редактируются. Будьте осторожны при изменениях и добавлениях объектов. Не вбивайте рандомные числа в /newobj. ID объектов SAMP полно в интернете. 
      Спасибо за внимание!
    • hikkan
      От hikkan
      шапка темы.
      сервер лог:
      где-то здесь ругается:
      public: LoadBusinesses() {         new query[85], buffer[2];         new Cache: result, rows;         result = mysql_query(mysql, "SELECT b.*, IFNULL(a.name, 'None') AS owner_name FROM business b LEFT JOIN accounts_1101 a ON a.id=b.owner_id", true);         //result = mysql_query(mysql, "SELECT * FROM business", true);         rows = cache_num_rows();         if(rows > MAX_BUSINESS)         {                 rows = MAX_BUSINESS;                 print("[Business]: DB rows > MAX_BUSINESS");         }         for(new idx; idx < rows; idx ++)         {                 SetBusinessData(idx, B_SQL_ID,          cache_get_field_content_int(idx, "id"));                 SetBusinessData(idx, B_OWNER_ID,        cache_get_field_content_int(idx, "owner_id"));                 cache_get_field_content(idx, "name", g_business[idx][B_NAME], mysql, 30);                 SetBusinessData(idx, B_CITY,                    cache_get_field_content_int(idx, "city"));                 SetBusinessData(idx, B_ZONE,                    cache_get_field_content_int(idx, "zone"));                 SetBusinessData(idx, B_IMPROVEMENTS,    cache_get_field_content_int(idx, "improvements"));                 SetBusinessData(idx, B_PRODS,                   cache_get_field_content_int(idx, "products"));                 SetBusinessData(idx, B_PROD_PRICE,              cache_get_field_content_int(idx, "prod_price"));                 cache_get_field_content(idx, "balance", g_business[idx][B_BALANCE], mysql, 21);                 SetBusinessData(idx, B_RENT_DATE,               cache_get_field_content_int(idx, "rent_time"));                 SetBusinessData(idx, B_PRICE,                   cache_get_field_content_int(idx, "price"));                 SetBusinessData(idx, B_RENT_PRICE,              cache_get_field_content_int(idx, "rent_price"));                 SetBusinessData(idx, B_TYPE,                    cache_get_field_content_int(idx, "type"));                 SetBusinessData(idx, B_INTERIOR,                cache_get_field_content_int(idx, "interior"));                 SetBusinessData(idx, B_ENTER_PRICE,             cache_get_field_content_int(idx, "enter_price"));                 SetBusinessData(idx, B_ENTER_MUSIC,             cache_get_field_content_int(idx, "enter_music"));                 SetBusinessData(idx, B_LOCK_STATUS,             bool: cache_get_field_content_int(idx, "lock"));                 SetBusinessData(idx, B_POS_X,                   cache_get_field_content_float(idx, "x"));                 SetBusinessData(idx, B_POS_Y,                   cache_get_field_content_float(idx, "y"));                 SetBusinessData(idx, B_POS_Z,                   cache_get_field_content_float(idx, "z"));                 SetBusinessData(idx, B_EXIT_POS_X,              cache_get_field_content_float(idx, "exit_x"));                 SetBusinessData(idx, B_EXIT_POS_Y,              cache_get_field_content_float(idx, "exit_y"));                 SetBusinessData(idx, B_EXIT_POS_Z,              cache_get_field_content_float(idx, "exit_z"));                 SetBusinessData(idx, B_EXIT_ANGLE,              cache_get_field_content_float(idx, "exit_angle"));                 SetBusinessData(idx, B_EVICTION,                cache_get_field_content_int(idx, "eviction"));                 SetBusinessData(idx, B_ELECTRICITY,             cache_get_field_content_int(idx, "electricity"));                 SetBusinessData(idx, B_IZNOS,           cache_get_field_content_int(idx, "iznos"));                 SetBusinessData(idx, B_TIME_REPAIR_1,           cache_get_field_content_int(idx, "time_repair_1"));                 SetBusinessData(idx, B_TIME_REPAIR_2,           cache_get_field_content_int(idx, "time_repair_2"));                 SetBusinessData(idx, B_TYPEWETRIKI,             cache_get_field_content_int(idx, "typewetriki"));                 SetBusinessData(idx, B_GANG,            cache_get_field_content_int(idx, "gang"));                 //mysql_format(mysql, query, sizeof query, "UPDATE business SET id=%d WHERE id='%d'", idx, cache_get_field_content_int(idx, "id"));                 //mysql_query(mysql, query, false);                 zone_war_z[idx] = GangZoneCreate                 (                         GetBusinessData(idx, B_POS_X)-6,                         GetBusinessData(idx, B_POS_Y)-6,                         GetBusinessData(idx, B_POS_X)+6,                         GetBusinessData(idx, B_POS_Y)+6                 );                 // ----------------------------------------------------------------------------------                 zone_war_a[idx] = CreateDynamicRectangle                 (                         GetBusinessData(idx, B_POS_X)-6,                         GetBusinessData(idx, B_POS_Y)-6,                         GetBusinessData(idx, B_POS_X)+6,                         GetBusinessData(idx, B_POS_Y)+6                 );                 cache_get_field_content(idx, "owner_name", g_business[idx][B_OWNER_NAME], mysql, 21);                 // -------------------------                 SetBusinessData(idx, B_ORDER_ID, -1);                 SetBusinessData(idx, B_LABEL, CreateDynamic3DTextLabel(GetBusinessData(idx, B_NAME), 0xFFFF00FF, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z) + 1.0, 6.50));                 if(GetBusinessData(idx, B_CITY) == -1 || GetBusinessData(idx, B_ZONE) == -1)                 {                         buffer[0] = Get2DCity(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y));                         buffer[1] = Get2DZone(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y));                         SetBusinessData(idx, B_CITY, buffer[0]);                         SetBusinessData(idx, B_ZONE, buffer[1]);                         mysql_format(mysql, query, sizeof query, "UPDATE business SET city=%d,zone=%d WHERE id=%d", buffer[0], buffer[1], GetBusinessData(idx, B_SQL_ID));                         mysql_query(mysql, query, false);                 }                 if(IsBusinessOwned(idx) && !strcmp(GetBusinessData(idx, B_OWNER_NAME), "None", true))                 {                         SetBusinessData(idx, B_OWNER_ID, 0);                         mysql_format(mysql, query, sizeof query, "UPDATE business SET owner_id=0,improvements=0 WHERE id=%d", GetBusinessData(idx, B_SQL_ID));                         mysql_query(mysql, query, false);                 }                 if(!IsBusinessOwned(idx))                 {                         SetBusinessData(idx, B_PRODS,           0);                         SetBusinessData(idx, B_PROD_PRICE,      0);                         SetBusinessData(idx, B_LOCK_STATUS, false);                         SetBusinessData(idx, B_ENTER_MUSIC, 0);                         SetBusinessData(idx, B_ENTER_PRICE, 0);                         if(GetBusinessData(idx, B_IMPROVEMENTS) >= 6)                         {                                 mysql_format(mysql, query, sizeof query, "DELETE FROM business_gps WHERE bid=%d", idx);                                 mysql_query(mysql, query, false);                         }                 }                 CallLocalFunction("UpdateBusinessLabel", "i", idx);                 BusinessHealthPickupInit(idx); //Иконки для бизов                 if(GetBusinessData(idx, B_TYPE) == 1) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 40, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 2) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 49, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 3 || GetBusinessData(idx, B_TYPE) == 4) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 28, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 5) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 45, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 8) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 25, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 9) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 26, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 17 || GetBusinessData(idx, B_TYPE) == 26 || GetBusinessData(idx, B_TYPE) == 23) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 55, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 23) CreatePickup(1275, 25, GetBusinessData(idx, B_EXIT_POS_X), GetBusinessData(idx, B_EXIT_POS_Y), GetBusinessData(idx, B_EXIT_POS_Z), 0, PICKUP_ACTION_TYPE_SHIN, idx);                 if(GetBusinessData(idx, B_TYPE) == 24) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 38, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 25) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 39, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 27) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 18, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 30) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 46, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 31) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 10, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 11) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 6, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 12) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 52, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 32) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 21, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 29) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 34, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 39) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 5, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 23) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 62, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 16) CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 55, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 if(GetBusinessData(idx, B_TYPE) == 17 || GetBusinessData(idx, B_TYPE) == 18 || GetBusinessData(idx, B_TYPE) == 19 || GetBusinessData(idx, B_TYPE) == 20 || GetBusinessData(idx, B_TYPE) == 21 || GetBusinessData(idx, B_TYPE) == 23 || GetBusinessData(idx, B_TYPE) == 43)                 {                         if(GetBusinessData(idx, B_TYPE) == 20)                         {                                 CreatePickup(1083, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                                 CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 55, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                         }                         else if(GetBusinessData(idx, B_TYPE) == 21 || GetBusinessData(idx, B_TYPE) == 31) CreatePickup(18631, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                         else CreatePickup(1274, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                 }                 else if(GetBusinessData(idx, B_TYPE) == 37)                 {                         CreatePickup(1650, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                         CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 59, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                 }                 else if(GetBusinessData(idx, B_TYPE) == 44)                 {                         CreatePickup(1275, 25, GetBusinessData(idx, B_EXIT_POS_X), GetBusinessData(idx, B_EXIT_POS_Y), GetBusinessData(idx, B_EXIT_POS_Z), -1, PICKUP_ACTION_TYPE_TK_MENU, idx);                         CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 51, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                         CreatePickup(1274, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                         CreateDynamic3DTextLabel("Информация о\nтрудоустройствие",0xFFFFFFFF, GetBusinessData(idx, B_EXIT_POS_X), GetBusinessData(idx, B_EXIT_POS_Y), GetBusinessData(idx, B_EXIT_POS_Z) + 0.5,16.0);                 }                 else if(GetBusinessData(idx, B_TYPE) == 45)                 {                         CreateDynamicMapIcon(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 9, 0, 0, 0, -1, STREAMER_MAP_ICON_SD, MAPICON_LOCAL);                         CreatePickup(1274, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                 }                 else                 {                         CreatePickup(19132, 25, GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 0, PICKUP_ACTION_TYPE_BIZ_ENTER, idx);                 }                 biz_area[idx] = CreateDynamicSphere(GetBusinessData(idx, B_POS_X), GetBusinessData(idx, B_POS_Y), GetBusinessData(idx, B_POS_Z), 3.0, 0, 0, -1);         }         g_business_loaded = rows;         cache_delete(result);         for(new idx; idx < sizeof g_business_interiors; idx ++)         {                 CreatePickup(19132, 23, GetBusinessInteriorInfo(idx, BT_EXIT_POS_X), GetBusinessInteriorInfo(idx, BT_EXIT_POS_Y), GetBusinessInteriorInfo(idx, BT_EXIT_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_EXIT, idx);                 buffer[0] = -1;                 switch(idx)                 {                         case BUSINESS_INTERIOR_SHOP_24_7:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Список товаров",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );                                 CreatePickup(10270, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_SHOP_247, idx);                         }                         case BUSINESS_INTERIOR_ZAKUS:                         {                                 CreatePickup(10270, 23, -1852.6345,1277.0465,1115.8447, -1, -1, idx);                         }                         case BUSINESS_INTERIOR_APTEKA:                         {                             apteka_cp = CreateDynamicCP(-2279.0518,-1485.6300,1001.0000, 1.0);                         }                         case BUSINESS_INTERIOR_SHOP_GARDEN:                         {                                 CreatePickup(19134, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_GARDEN, idx);                                 CreateDynamicCP(-1038.3335,687.4626,1001.0000, 1.5);                         }                         case BUSINESS_INTERIOR_AVTOZAP:                         {                                 /*CreateDynamic3DTextLabel                                 (                                         "{1E90FF}Магазин автозапчастей",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );*/                                 CreatePickup(19134, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_AVTOZAP, idx);                                 CreateDynamicCP(1555.7836,-2400.7815,1001.0000, 1.0);                         }                         case BUSINESS_INTERIOR_PARIK:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Покупка аксессуаров",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );                                 CreatePickup(1276, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BARBER, idx);                         }                         case BUSINESS_INTERIOR_CLUB, BUSINESS_INTERIOR_CASINO:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Меню бара:\n\n"\                                         "{6699FF}1. Лимонад\n"\                                         "2. Пиво\n"\                                         "3. Вино\n"\                                         "4. Шампанское\n"\                                         "5. Водка\n"\                                         "6. Коньяк\n"\                                         "7. Виски\n"\                                         "8. Абсент\n"\                                         "{00CC66}9. Закуска\n"\                                         "10. Сигара",                                         0xFFFFFFCC,                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_X),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Z),                                         9.0                                 );                                 buffer[0] = CreateDynamicCP(GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), 1.0, _, _, _, 8.0);                         }                         case BUSINESS_INTERIOR_REALTOR_BIZ:                         {                                 g_business_realtor_label = CreateDynamic3DTextLabel                                 (                                         "Состояние бизнеса",                                         0xCCFF66FF,                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_X),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Z),                                         10.0                                 );                                 CreatePickup(1239, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1);                                 buffer[0] = CreateDynamicCP(GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) - 1.0, 1.2, _, _, _, 10.0);                                 CallLocalFunction("UpdateRealtorBizInfo", "");                         }                         case BUSINESS_INTERIOR_REALTOR_HOME:                         {                                 g_house_realtor_label = CreateDynamic3DTextLabel                                 (                                         "Состояние недвижимости",                                         0xCCFF66FF,                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_X),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_LABEL_POS_Z),                                         10.0                                 );                                 CreatePickup(1239, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1);                                 buffer[0] = CreateDynamicCP(GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), 0.7, _, _, _, 5.0);                                 CallLocalFunction("UpdateRealtorHomeInfo", "");                         }                         case BUSINESS_INTERIOR_CLOTHING_SHOP:                         {                                 CreatePickup(1275, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_CLOTHING, idx);                         }                         case BUSINESS_INTERIOR_HOTEL:                         {                                 CreatePickup(1277, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1);                                 CreateDynamic3DTextLabel("Услуги\n{FFFFFF}гост. комплекса", 0x3399FFFF, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8, 5.0);                                 buffer[0] = CreateDynamicCP(GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), 1.2, _, _, _, 20.0);                         }                         case BUSINESS_INTERIOR_CAR_MARKET:                         {                         //      CreatePickup(19134, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_CAR_MARK, idx);                         //      CreateDynamic3DTextLabel("Покупка\nтранспорта", 0xCC6600EE, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8, 5.0);                         }                         case BUSINESS_INTERIOR_CELL_SALON:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Сотовый\n"\                                         "салон\n"\                                         "{FFD83D}Введите /buy",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );                                 CreatePickup(19134, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_CELL_SALON, idx);                         }                         case BUSINESS_INTERIOR_CAR_TUNING:                         {                                 CreatePickup(19134, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_CAR_TUN, idx);                                 CreateDynamic3DTextLabel("Обслуживание\nтранспорта", 0xCC6600EE, GetBusinessInteriorInfo(idx, BT_LABEL_POS_X), GetBusinessInteriorInfo(idx, BT_LABEL_POS_Y), GetBusinessInteriorInfo(idx, BT_LABEL_POS_Z), 5.0);                         }                         case BUSINESS_INTERIOR_COMP_CLUB:                         {                             CreatePickup(1314, 23, 652.1079,-15.6575,1001.4328, -1, PICKUP_ACTION_TYPE_BIZ_PC_GAME, idx);                                 CreatePickup(1581, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_PC_CLUB, idx);                         }                         case BUSINESS_INTERIOR_TIR:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Покупка\n"\                                         "Оружия",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );                                 CreatePickup(1239, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_TIR, idx);                         }                         case BUSINESS_INTERIOR_BUY_GUN:                         {                                 CreateDynamic3DTextLabel                                 (                                         "Покупка\n"\                                         "Оружия",                                         0x00CC00EE,                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_X),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Y),                                         GetBusinessInteriorInfo(idx, BT_BUY_POS_Z) + 0.8,                                         8.0                                 );                                 CreatePickup(353, 23, GetBusinessInteriorInfo(idx, BT_BUY_POS_X), GetBusinessInteriorInfo(idx, BT_BUY_POS_Y), GetBusinessInteriorInfo(idx, BT_BUY_POS_Z), -1, PICKUP_ACTION_TYPE_BIZ_GUN, idx);                         }                 }                 SetBusinessInteriorInfo(idx, BT_BUY_CHECK_ID, buffer[0]);         }         BusinesGPSListInit();         printf("[Business]: Бизнесов загружено: %d", g_business_loaded); }