1 Screenshot

Хранение данных (версия MySQL): R41-3.

Командный процессор: Pawn.CMD.

Количество строк в моде (без маппинга): 66679.
Анти-чит: Nexius-AC v1.9.53.

Под доработку взята версия Aurora за декабрь 2018.

Автор данного мода: oscar_floyd.
Автор данной доработки: glvde. (я).

На доработку мода ушло около одного месяца.

Что было сделано:

Спойлер

~ Исправлен баг с покупкой любого VIP.
~ Исправлен вид диалогов во всём моде.
~ Добавлен Perfomance Tuning в GPS (6 - 8).
~ Сделана проверка на команду /mp.
Раньше один игрок мог вводить эту команду несколько раз, тем самым занимая места на МП.
~ Исправлено пропадение интерьера во время регистрации.
~ Изменены цвета всех текстдравов.
~ Расставлены автомобили в организациях.
~ Дописана система VIP.
~ Исправлен баг с VIP-AFK.
~ Дописана база данных.
~ Исправлен баг с новым репортом.
~ Новая система "Настройка VIP-системы"
Теперь настройка всех восьми уровней V.I.P будет динамичная, тобишь из игры.
Все параметры сохраняются в базу, перезапуск сервера необязателен.
~ Исправлен баг в гонке вооружений.
~ Добавлена альтернативная команда /lpanel.
Лидерское меню можно теперь вызывать двумя командами - /lmenu и /lpanel.
Сделано для удобности.
~ Исправлено открытие инвентаря.
При повторном открытии инвентаря, он сразу пропадал.
~ Обновлён анти-чит Nexius-AC с версии 1.9.41 до 1.9.52.
~ Исправлен баг с Т/С.
* Не заводились некоторые мопеды, мотоциклы и машины.
~ Добавлено несколько NOP-защит, а именно:
* SpawnPlayer (спавн игрока).
* SetPlayerPos (перемещение игрока по карте).
* SetPlayerHealth (изменение ХП игроку).
* SetVehicleHealth (изменение ХП Т/С).
* GivePlayerWeapon (выдача оружия игроку).
* SetPlayerInterior (перемещение игрока в интерьер).
* PutPlayerInVehicle (помещение игрока в Т/С).
* ResetPlayerWeapons (удаление всех оружий игроку).
* SetPlayerSpecialAction (присваивание игроку спец.действий).
* TogglePlayerSpectating (перемещение игрока в наблюдение).
* RemovePlayerFromVehicle (удаление игрока из машины).
~ Оптимизирован код в системе лидеров.
~ Переписано 10 команд для администраторов.
~ Доработана система нового репорта.
~ Доделана система "Анти-ТК" (copy by Diamond 80%).
~ Исправлена система заморозки каптов для банд.
~ Написана система поединков для семей (20%).
~ Исправлен баг с активным предложением при вводе /repair.
~ Теперь нельзя взять лейку, если Вы уже ухаживаете за деревом (работа "Яблочный сад").
~ Исправлена команда /fmute.
~ Исправлен баг с системой навыка угона (/theftprogress).
~ Исправлен баг с покупкой VIP-привилегии.
~ Исправлен баг с покупкой "Анти-БХоп" (/donate).
~ Исправлен баг с покупкой "Мобильный банк" (/donate).
~ Теперь в спортзале можно изучить стили боя в разном порядке.
~ При надписи "Вы уронили ящик" теперь ящик пропадает из рук. Раньше не пропадал. (работа "Оружейный завод").
~ Исправлен баг с гаражом. Теперь машины появляются в нужном виртуальном мире.
~ Исправлен баг с выдачей премии в бандах (/gpay).
~ Исправлен режим "Sport" в машине. Теперь она не будет взлетать.
~ Исправлен баг с командой /lock. Иногда писалось, что личный Т/С находится далеко.
~ Добавлен экстрьер стройки напротив вокзала СФ.
~ Облегчена настройка мода под себя.
Теперь стоит изменить значения дефайнов (FullServName, NameServer, NameSite и HostName) и всё изменится сразу.
~ Подключение к базе теперь легче. Достаточно ввести данные в дефайны SqlHost, SqlUser, SqlPass и SqlBase.
~ Исправлен баг с пропадением курсора в текстдравах.
~ Добавлен интерьер в СТО. Раньше машина просто падала вниз.
~ Исправлен баг с /srace, теперь нельзя предложить гонку самому себе.
~ Исправлено высвечивание логотипа "SERVER TEST" когда статус сервера стоит "Основной".
~ Запрещена выдача Minigun через команду.
~ Исправлен баг с /capture, теперь всё работает нормально.
~ Исправлен баг с /apanel, теперь панель высвечивается.
~ Исправлен баг с названием ранга при авторизации в админ-панель.
~ Подправлен текст в /apanel.
~ Исправлен баг с /givekey, теперь нельзя выдать пропуск самому себе.
~ В /db теперь высвечивается администратор.
~ Исправлен баг с выдачей розыска, теперь нельзя выдать розыск самому себе.
~ Исправлены команды /gotocar и /getherecar.
~ Исправлен баг с командой /gsinfo. Теперь нельзя будет посмотреть информацию о не валидном ID.
~ Исправлен баг с командой /sethp, раньше можно было уровень ХП вывести в минус.
~ Исправлен текст в команде /atipster, теперь всё нормально и верно показывает.
~ Исправил баг с /jail, теперь нельзя посадить в тюрьму самого себя.
~ Исправлен баг с новым репортом для администраторов, раньше писалось "* Не нужен тебе репорт".
~ Исправлен баг с командой /demote для ФБР.
~ Написана система /cars (copy Arizona).
~ Исправлен баг с /key, теперь всё работает нормально.
~ Исправлен баг с командой /taxispcar, всё работает нормально.
~ Уменьшен радиус использования команды /house.
~ Сделана система тех.паспорта в /cars.
~ Исправлено отображение кнопок в системе /cars.
~ Доработана функция "Найти авто" в системе /cars.
~ Убрана команда /admka на выдачу админ-прав.
~ Добавлен пункт "Магазин оружия" в /gps - Нелегальные организации.
~ Исправлен тир в магазине оружия SF и LV. В тире не было коробок на которых должны появляться бутылки.
~ Исправлен баг с тиром.
Первые две бутылки появлялись, потом нет.
~ Исправлены ошибки с базой данных.
~ Переписан запрос для диалога "Самые щедрые", теперь там будут появляться те, кто пожертвовал больше 10 тыс. баксов.
~ Доработана система /cars. Добавлена система сигнализации.
~ Исправлена команда перезагрузки банлиста (/reloadbans).
~ Исправлена команда блокировки IP-адреса (/rban).
~ Написана динамическая система изменения стартового бонуса (/apanel - Настройка стартового бонуса), перезапуск не нужен.
Замена стартового значения денег и уровня через базу больше не работает, только через мод.
~ Написана система бумбокса (copy Arizona).
~ Написана команда /update с информацией об обновлении.
~ Исправлен баг с командой /alogin. Раньше можно было авторизироваться бесконечное кол-во раз.
~ Исправлен баг с командой /djlogin. Раньше можно было авторизироваться бесконечное кол-во раз.~ Начата разработка панели для зназначения на должностные посты.
~ Исправлен пункт "Режим езды" в меню /cars.
~ Исправлен баг в меню "Стартовый бонус", пункт "Количество денег".
~ Исправлено отображение "PERFOMANCE" в /cars.
~ Написана команда /carpass для показа тех. паспорта машины.
~ Установлена связка Nexius-AC + rakcheat (by f0R3st).
* Добавлена защита от EnterVehicleCrasher.
* Исправлен баг, когда игрока могло кикнуть за быструю смену позиции при полете на гидре.
* Исправлен баг, когда игрока могло посчитать за читеры при серфинге на поезде.
* Исправлен баг, когда при серфе на авто игрока могло кикнуть если бы водитель ушел в афк.
* Исправлена ошибка, когда при отключении 53 кода античита, пассажира авто могло словить за читы.
* Исправлен баг когда серфящего игрока могло словить по 53 коду.
* Добавлен дополнительный метод обнаружения FlyHack у игрока (пока что с ног).
* Добавлен античит который проверяет количество отправляемых пакетов от игрока к серверу (таким образом это может детектить различного рода читы, которые основаны на отправке большого количества пакетов серверу в единицу времени).
* Возвращены удаленные особенности nex-ac - поддержка различных вещей из одиночной игры.
* Удалены проверки фильтрации синхронизации, которые не имели смысловой нагрузки.
* Пофикшен Ultra Invisible.
* Улучшены алгоритмы для защиты синхронизации от невалидных значений (нан, инфинити и пр.).
* Некоторые исправления с анти-флудом пакетами.

 

Обзор на мод (by Huntwill):


Дополнительные скриншоты:

 

При перезаливе этой версии и доработок на сторонние ресурсы, убедительная просьба: указывать автора доработки - glvde.!

Не исключаю, что есть ещё баги.
Спасибо за внимание.

 

Не забывайте вступать в мою группу, а так же беседу, где все спойлеры по поводу обновлений - vk.link/way_dev

UPD: Студия, которой разрабатывался данный игровой мод, закрывает дальнейшую поддержку обновлений доработки на портале Pawno-Rus.


 Report this file



Еще файлы 𝙡𝙖𝙨𝙩 𝙚𝙢𝙥𝙚𝙧𝙤𝙧.


User Feedback

  • Similar Content

    • MetaLife Online
      By MetaLife Online
      Привествую! писал код. проверил работу, в БД отправилось информация криво 
      потом добавил к P_NICK[MAX_PLAYER_NAME] для того чтобы все было окей. Но после этого данные вообще не отпровляються и не показываеться %s. пару раз удалял и не помогло не чего 
      enum PLAYER_INFO {     P_ID,     P_NICK[MAX_PLAYER_NAME],     P_PASS,     P_GENDER,     P_SKIN,     P_LVL, };  

    • Danny_Marcelo
      By 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
      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