Игровой мод Ray Of Game

   (0 reviews)
Sign in to follow this  
Followers 0

25 Screenshots

  • Основа мода: Adrenaline RP (Skrillax)
  • Командный процессор  Pawn.CMD
  • Версия MySQL R34
  • Строк в моде около 40к
  • Некоторые части мода разбиты на модули
  • Мод не использует дополнительное выделение памяти под стек

 

  • Система отеля
  • Система кредитования
  • Система взлома машин
  • Первоначальный сюжет
  • Вид от первого лица
  • Система остановок
  • Система динамической погоды с предсказаниями
  • Поиск игроков по GPS навигатору
  • Зеленые зоны
  • Система лобби
  • Система Admin Board
  • Панель читеров
  • Спойлер

    Переписан алгоритм загрузки мода

    Маппинг, текстдравы и прочее разбиты на модули

    Написана новая система мероприятий

    Переписана регистрация и авторизация

    Написана защита от MySQL инъекций

    Написано анимированное лого

    Переписана система выбора скина

    Переписана система покупки и продажи дома

    Диалоги покупки/продажи дома переписаны на текстдравы

    Исправлена рекурсия в OnPlayerClickTextDraw

    Интегрированы текстдравы в регистрацию

    Интегрированы текстдравы в авторизацию

    Добавлен превью логотип при коннекте

    Выход из дома переписан на текстдравы

    Команда /mm переписана на текстдравы + скольжение камеры

    Логирование /makeleader

    Логирование /makeadmin

    Логирование /givedonate

    Логирование /givemoney

    Логирование /giverank

    Логирование /givehelper

    Логирование /offadmin

    Новый интерьер при выборе скина

    Теперь если игрок снимает номер в отеле - он не может купить дом

    Исправлены все баги с проваливанием под текстуры без заморозки игрока

    Теперь отель полностью сохраняется

    Добавлен новый экстерьер отеля

    Теперь если игрок снимает номер в отеле - он будет появляться в отеле

    Новый интерьер мэрии

    В мэрию добавлен 3d текст с информацией о домах

    Дописан первоначальный сюжет

    Исправлены все баги с проваливанием под текстуры

    Убран новогодний маппинг

    Убраны пикапы с подарками

    Новый ретекстур мэрии

    Написана система остановок по штату

    В меню настроек добавлен новый пункт "Вид от 1 лица"

    Написана система поиска игрока по GPS

    Мод переведен на командный проссор Pawn.CMD v3.1.3

    Разгружен таймер Fresh

    Разгружен таймер OtherTimer

    Мод переведен на индивидуальные таймера

    Мелкий багофикс GPS системы

    Фикс срабатывания анимаций, теперь все работает с 1 раза

    Убрана музыка при входе на сервер

    Переписана система спидометра

    Убраны двойные двери в мэрии

    Написана система кредитов

    Новый интерьер банка

    Новый экстерьер банка

    Теперь сюжетную историю можно пропустить нажав на крестик в GPS в начале игры

    Написана динамическая смена системы погоды + команда для админов /rweather

    По штату расставлено около 300х сот машин для аренды

    Перемещены машины такси в другое место

    Написана система взлома авто со скиллами

     

     

Спойлер

Для администраторов добавлена админ панель на текстдравах с основной информацией (Admin Board)
- Ник администратора
- Лвл администратора
- Время на сервере
- Количество положительных ответов игрокам
- Количество Отрицательных ответов игрокам
- Количество забаненых игроков
- Количество замученых игроков
- Количество заварненых игроков
- Количество кикнутых игроков

Исправлен баг с падением сервера при продаже всех домов
Написана система оценки ответа администратора /pm
Написана система панели читеров, она так же входит в систему Admin Board
Теперь в админ панеле анти чит можно переключать с кика на вывод читеров в админ панель
Теперь администратор не может авторизоваться в админ панель 2 раза
Убрана система развозчиков хотдогов
Полностью вырезаны стандартные работы и устройство на них
Убран пустой пункт в казне в мэрии
Убран ненужный 3d text в мэрии "введите exit"
Исправлен баг с командой /me при бане чата
После отправления репорта игрока уведомляет о том, что его вопрос принят в обработку
Теперь что бы отправить жалобу надо ввести капчу

Спойлер

sa-mp-000.pngsa-mp-001.pngsa-mp-002.pngsa-mp-003.pngsa-mp-004.pngsa-mp-005.pngsa-mp-006.pngsa-mp-007.png

Обновление за 21.10.2017

Теперь после авторизации игрок попадает в лобби

Спойлер

sa-mp-017.pngsa-mp-018.pngsa-mp-019.pngsa-mp-022.png


 


 Report this file



Еще файлы RASTAMAN


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