Korochansky

Разрабатываю IDE для скриптеров серверов SAMP

30 posts in this topic

Здравствуйте. Я заметил что нет нормальных полноценных IDE для Pawn, большинство IDE какие-то багованнные, выскакивают разнообразные ошибки, в "Extreme Studio" к примеру. А в Pawno работать не удобно и в нём довольно скудный функционал. Ну вот.

 

Вот, сейчас я разрабатываю IDE которое называется "Spawn"(Samp pawn), которое потом будет много раз тестироваться, чтобы минимизировать самые разные ошибки если они будут. Когда будет закончена основа IDE, программа будет разрабатывать по предпочтениям пользователей/скриптеров, чтобы они хотели увидеть в программе, а там я уже буду решать реально ли требуется это программе или нет.

Главная цель программы по максимуму упростить разработку серверов SAMP.

Также программа будет как для Windows так и для Linux.

Распространяться будет по лицензии GPL с закрытым исходным кодом. 

 

Я немного опишу что можно будет делать в в программе, что уже реализовано и что хочу сделать:

 - Уже закончена работа над графической частью с которой взаимодействует пользователь(Меню, панель инструментов, диалог настроек, редактор и т. д.)

- Реализована подсветка синтаксиса Pawn

- Файлы будут открываться в вкладках редактора

- Реализована "Карта документа (Document map)" в правой стороне редактора с которой можно взаимодействовать(прямо как Sublime Text)(В настройках можно будет скрыть)

- Автоматическое закрытие скобок -> {}() ""

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

- Будет реализованы подсказки вызова(Call Tips) и авто-дополнение кода.

- Реализована настройка подсветки языка и настройка шрифта

- Live templates(Живые шаблоны)

- Поддержка компиляторов от SAMP Team, Zeex и модификацией Zeex(которая на удивление очень быстро компилирует исходники) и конечно же переключение между ними

И многое другое. 

 

Есть сообщество Spawn, там можно найти так называемую статью "Roadmap"(или Карта разработки) которая регулярно обновляется, там так же отмечается что уже закончено.

Сообщество: https://vk.com/spawnsoftware

Share this post


Link to post
Share on other sites

6254244f2470c_.png.8633c8922edc605a1b26444d261d5ba2.png@DEST Лови скриншот :) 

Edited by Daniil Korochansky
Причина: Добавил скриншот

Share this post


Link to post
Share on other sites
35 минут назад, Daniil Korochansky сказал:

6254244f2470c_.png.8633c8922edc605a1b26444d261d5ba2.png@DEST Лови скриншот :) 

Баганулось немного, исправлю, новый скриншот опубликую

Share this post


Link to post
Share on other sites

@DEST Лови ещё один :) Доделал карту. Теперь она реально как  в Sublime Text62546722d951d_.png.40bf43fd0c624aa08df6f0d2968efe60.png

Edited by Daniil Korochansky
Причина: Небольшие поправки в тексте

Share this post


Link to post
Share on other sites

Разочарован в отсутствии опен сурса

Edited by user408337

Share this post


Link to post
Share on other sites

@user408337 Это временно. Да, пока идёт разработка программы исходники будут закрыты даже когда будут выходить первые версии. Как только работа над программой будет закончена, исходники буду опубликованы в мой GitHub репозиторий. Но лицензия не измениться(GPL).

Edited by Daniil Korochansky
Причина: Поправился в тексте

Share this post


Link to post
Share on other sites

Неплохо :bravo:, желаю удачи в разработке! :)

А на чем кстати пишете? На каком ЯП? 

Share this post


Link to post
Share on other sites

@DEST 

7 часов назад, DEST сказал:

Неплохо :bravo:, желаю удачи в разработке! :)

А на чем кстати пишете? На каком ЯП? 

Python

Share this post


Link to post
Share on other sites

Я решил пока убрать Document Map из за ресурсоёмкости и багованности.

Для решения проблем с Document Map потребуется много времени что совсем замедлит разработку, поэтому я решил оставить работу над Document Map на какое-то время.

В первой версии программы, Document Map скорее всего не будет.

Share this post


Link to post
Share on other sites

Голосуем за то что хотите увидеть в Spawn'e и что не хотите. Просто нужно ответить на мои опросы. PS. Опросы не ограничены по времени.

Опросы: https://vk.com/makespawnbetter

625562b6cb39c_.png.fe3ebbbace930151b2fa08ab5be7bab5.png

Share this post


Link to post
Share on other sites

@DEST Добавил обозначение изменённых строк;)

status1.png.6a64059cceb4bbf25a78413678ada4a0.png

Share this post


Link to post
Share on other sites

Перешёл с Python на C++. Программа теперь на ЯП C++

Share this post


Link to post
Share on other sites

Хочу редактор-компилятор pawn для андроид) а на ПК пока Vs code или notepad++ устраивает. В любом случае успехов в разработке)

Share this post


Link to post
Share on other sites

@Danich, зачем? Прежде всего это огромная нагрузка на глаза и, к тому же, горы не свернете, работая с мобильных устройств (или не с мобильных, если у вас ОС Android установлена в каком-нибудь умном холодильнике :bk:). 

Share this post


Link to post
Share on other sites

Писать какие-нибудь скрипты в телефоне с автозаполнением удобно почему не)) я щас пишу на форум с телефона, и меня устраивает) некоторые скрипты просты в написании (да большинство), но на них все равно требуется время, и если это время можно было заполнить например в дороге, без тяжеловесного портативного или не сидя дома за компом - то это было бы что-то новое, что самп с павном ещё не видал) но это только моё желание)) возможно это можно реализовать если заморочиться. Ещё лучше если заморочился бы какой-нибудь другой программист) 

Сократить потраченное время у людей- то для чего программирование было придумано мне кажеца)) но в любом случае по поводу темы данного поста - удачи со sPawn. + За опенсорс))

Share this post


Link to post
Share on other sites

@Danich Как по мне Pawno-редактор на устройство телефон Android, не лучшая идея. 1.Ты не сможешь так быстро писать код, как на ПК. 2. Ты не сможешь быстро решить ошибки в написании кода, и протестировать его. 3. Автозаполнение не так сильно решает в написании скрипта.

Share this post


Link to post
Share on other sites

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

Share this post


Link to post
Share on other sites
В 18.04.2022 в 20:53, Danich сказал:

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

;)

Share this post


Link to post
Share on other sites
В 18.04.2022 в 20:53, Danich сказал:

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

Я разрабатываю такую IDE которая позволит ускорить разработку серверов за счёт встроенных инструментов, особых функции и фишек "Spawn" в отличии от других IDE для Pawn. Я думаю такой среды разработки очень не хватает.

Share this post


Link to post
Share on other sites

Поменял все иконки. А также исправил баги и вернул карту документа.

Безымянный.png

Share this post


Link to post
Share on other sites

Добавлены возможности закомментирования и раскомментирования строк, а также скрытие и раскрытие фрагментов кода в скобках. Приложил GIF файл для наглядности.

Анимация2.gif

Edited by Daniil Korochansky
Причина: Забыл уточнить

Share this post


Link to post
Share on other sites

Выглядит хорошо желаю удачи в разработке.

Share this post


Link to post
Share on other sites

Разрабатываю собственную IDE для Pawn. Главная цель ускорить и облегчить написание собственного SAMP сервера.
Будет неплохо если расскажите о проблемах и рутине при написании серверов SAMP.

А также интересно, что ускорило бы написание сервера?

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

Объединил прежнюю тему с новой.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Wiggins
      By Wiggins
      Доброго времени суток, нуждаюсь в помощи. Если есть люди, которые шарят в pawno, нужна помощь. Короче, мод ART RP, там в донате есть строка "Уникальные аксессуары", когда на него нажмешь, открывается TextDraw менью, нужно переделать это на обычную менью (/mm например, там обычная менью), буду рад, если поможете, за ранее спасибо.

      Если не ошибаюсь, строка текстдрав аксессуаров начинается с 1416 до 1443.
      art4.pwn
    • Danny_Marcelo
      By 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 полно в интернете. 
      Спасибо за внимание!
    • Sliver
      By Sliver


      Скачать файл СЛИВ МОДА ETERNITY RP (2025)
      СЛИВ МОДА ETERNTY SAMP 2025! (НОВЫЙ)Слив мода Eternity SAMP. Почему же решил слить - Расскажу вам немного о владельце Артема Петрова. Решил кинуть на деньги не тех людей. Так же это чудо кидала Павно, заражённый скриптеру. По этому сливаем мод. Вам по установке писать сюда  помогу и расскажу как установить. Всем приятного использования!Данный мод продается на другой площадке и то какой то левый) ( ну лучше бесплатно чем платно )
      + бонус стиль етернити рп
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ПРОЧИТАЙТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      БАЗА ДАННЫХ ПОДКЛЮЧАЕТСЯ ЧЕРЕЗ ИНКЛУДЫ И SETTINGS.INI! 
      НЕ В САМОМ МОДЕ А В ИНКЛУДЕ И В SETTINGS.INI
      config cfg думаю ума хватит вам написать самим
      2024 : был выклан сюда мною этот мод мой бывший ник SliverShokc к сожалению потерял доступ к аккаунту
      Добавил Sliver Добавлено 19.03.2025 Категория Моды Автор By Sliver  
    • Sliver
      By Sliver
      СЛИВ МОДА ETERNTY SAMP 2025! (НОВЫЙ)Слив мода Eternity SAMP. Почему же решил слить - Расскажу вам немного о владельце Артема Петрова. Решил кинуть на деньги не тех людей. Так же это чудо кидала Павно, заражённый скриптеру. По этому сливаем мод. Вам по установке писать сюда  помогу и расскажу как установить. Всем приятного использования!Данный мод продается на другой площадке и то какой то левый) ( ну лучше бесплатно чем платно )
      + бонус стиль етернити рп
      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ПРОЧИТАЙТЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      БАЗА ДАННЫХ ПОДКЛЮЧАЕТСЯ ЧЕРЕЗ ИНКЛУДЫ И SETTINGS.INI! 
      НЕ В САМОМ МОДЕ А В ИНКЛУДЕ И В SETTINGS.INI
      config cfg думаю ума хватит вам написать самим
      2024 : был выклан сюда мною этот мод мой бывший ник SliverShokc к сожалению потерял доступ к аккаунту
    • hikkan
      By 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); }