Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'Crmp'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Информационный раздел
    • Новости портала
    • Техническая поддержка
    • Приватный форум
  • CRMP 0.3е
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Дополнительные скрипты
    • Мануалы/Уроки
    • Модификации
    • Поиск
    • Архив Вопросов/Проблем/Ошибок
    • Файловый архив
    • Другое
  • SAMP/CRMP 0.3.7
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Плагины
    • Поиск
    • Документация
  • Другое
    • Флейм

Поиск результатов в...

Поиск результатов, которые содержат...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Найдено: 2,041 результат

  1. Доброго времени суток! Сегодня я вам покажу ,оптимизированный вид регистрации! И так просмотрим код : Добавим парочку переменных: new PlayerName[MAX_PLAYER_NAME]/*Имя игрока*/, dialogitem[MAX_PLAYERS]/*Переменная отвечающая за переход диалога*/, pass[64]/*Переменная сохраняющая в себя веденный пароль*/,use[256]/*Переменная отвечающая за форматирование диалогов*/,file[128]/*Переменная отвечающая за форматирования файла*/ Добавим #define: #define LOGIN_ID 10 Потом ставим в OnPlayerConnect или OnPlayerRequest ,куда пожелаете : GetPlayerName(playerid,PlayerName,26); format(file,128,"Дерриктория файла"); if(fexist(file)) format(use,sizeof(use),"{ffffff}Привет %snПройдите авторизацию",PlayerName),dialogitem[playerid] = 1; // Форматируем диалог ,даём направление! else format(use,sizeof(use),"{ffffff}Привет %snПройдите регистрацию",PlayerName),dialogitem[playerid] = 2; // Форматируем диалог ,даём направление! ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"Авторизация аккаунта",use,"Ввод","Отмена");// Показываем диалог Добавим диалоги*(OnPlayerDialogResponse) : if(dialogid == LOGIN_ID && dialogitem[playerid] == 1) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле strmid(pass,inputtext,0,strlen(inputtext),64);// Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файлик } //----------------------------------- if(dialogid == LOGIN_ID && dialogitem[playerid] == 2) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле if(!strlen(inputtext) < 6 || !strlen(inputtext) > 15) rerurn ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_MSGBOX,"{C0C0C0}Ошибка!","{FF6347}Длина пароля должна быть от 6 до 15 символов!","Повтор",""); // strlen(inputtext) < 6 Минимальное значение ввода! strmid(pass,inputtext,0,strlen(inputtext),64); // Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файл ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"{C0C0C0}Этап 1/2","Введите пароль для ,продолжения!","Ввод","Отмена"); // Переходим на диалог входа } Теперь в конец мода добавим : forward Registration(type,playerid,password[]); public Registration(type,playerid,password[]) { //----------------- if(type == 1) // Тип 1 : Авторизация / Login { // Сюда ставим файлы получения при авторизации } //----------------- if(type == 2) // Тип 2 : Регистрация { // Сюда ставим сохранение файлов при регистрации } return true; } Автор : Trateus
  2. Всем привет, сегодня мы научимся создавать ворота с открытием. Затем создадим объект к этой переменной, пусть это будет (OnGameModeInit): К OnPlayerCommandText: Теперь давайте разберём всё подробнее.
  3. Steven_Johnson

    Автосалон около АЗС

    CreateObject(1416, 2357.07, -1792.87, 22.02, 0.00, 0.00, -180.00);CreateObject(1416, 2356.69, -1793.93, 22.01, 0.00, 0.00, 91.00);CreateObject(1416, 2356.71, -1795.34, 21.99, 0.00, 0.00, 91.00);CreateObject(1416, 2356.74, -1796.78, 21.97, 0.00, 0.00, 91.00);CreateObject(1416, 2356.76, -1798.20, 21.97, 0.00, 0.00, 91.00);CreateObject(1079, 2359.13, -1798.38, 24.49, 0.00, 0.00, 176.00);CreateObject(1078, 2359.16, -1796.15, 25.92, 0.00, 0.00, 178.00);CreateObject(1073, 2359.16, -1793.28, 24.56, 0.00, 0.00, 178.00);CreateObject(1416, 2358.47, -1792.89, 22.00, 0.00, 0.00, -181.00);CreateObject(1416, 2357.07, -1799.25, 21.97, 0.00, 0.00, 1.00);CreateObject(1416, 2358.48, -1799.23, 21.95, 0.00, 0.00, 1.00);CreateObject(1744, 2356.52, -1794.27, 22.89, 0.00, 0.00, -180.00);CreateObject(1738, 2356.83, -1794.27, 22.63, 0.00, 0.00, -178.00);CreateObject(1744, 2356.57, -1796.04, 22.87, 0.00, 0.00, -178.00);CreateObject(1738, 2356.91, -1796.04, 22.59, 0.00, 0.00, -178.00);CreateObject(1744, 2356.63, -1797.71, 22.85, 0.00, 0.00, -178.00);CreateObject(1738, 2356.94, -1797.67, 22.59, 0.00, 0.00, -178.00);CreateObject(1663, 2357.62, -1797.51, 21.87, 0.00, 0.00, -91.00);CreateObject(1663, 2357.58, -1795.94, 21.87, 0.00, 0.00, -98.00);CreateObject(1663, 2357.61, -1794.16, 21.87, 0.00, 0.00, -98.00);CreateObject(1739, 2359.20, -1796.94, 23.65, 0.00, 0.00, 0.00);CreateObject(1739, 2359.20, -1795.26, 23.65, 0.00, 0.00, 0.00);CreateObject(1739, 2359.20, -1795.26, 24.64, 0.00, 0.00, 0.00);CreateObject(1739, 2359.20, -1796.94, 24.63, 0.00, 0.00, 0.00);CreateObject(8734, 2338.42, -1781.34, 18.50, 0.00, 0.00, 0.00);CreateObject(2904, 2331.79, -1793.93, 21.44, -65.00, 0.00, 0.00);CreateObject(2904, 2334.26, -1793.92, 21.44, -65.00, 0.00, 0.00);CreateObject(994, 2338.67, -1793.24, 22.69, 0.00, 0.00, 0.00);CreateObject(994, 2342.54, -1793.24, 22.66, 0.00, 0.00, 0.00);CreateObject(994, 2346.17, -1789.59, 22.67, 0.00, 0.00, 90.00);CreateObject(994, 2346.19, -1783.44, 22.68, 0.00, 0.00, 90.00);CreateObject(994, 2346.17, -1777.29, 22.68, 0.00, 0.00, 90.00);CreateObject(994, 2346.08, -1774.30, 22.72, 0.00, 0.00, 91.00);CreateObject(8734, 2352.53, -1838.86, 18.52, 0.00, 0.00, 0.00);CreateObject(2904, 2356.61, -1827.02, 21.47, 66.00, 0.00, 0.00);CreateObject(2904, 2354.26, -1827.06, 21.49, 67.00, 0.00, 0.00);CreateObject(994, 2349.87, -1828.84, 22.71, 0.00, 0.00, 0.00);CreateObject(994, 2346.24, -1828.87, 22.70, 0.00, 0.00, 0.00);CreateObject(994, 2343.75, -1831.37, 22.67, 0.00, 0.00, 90.00);CreateObject(994, 2343.77, -1837.54, 22.67, 0.00, 0.00, 90.00);CreateObject(994, 2342.70, -1843.71, 22.64, 0.00, 0.00, -89.00);CreateObject(2118, 2359.77, -1834.47, 28.25, 0.00, 0.00, 0.00);CreateObject(2118, 2359.76, -1839.64, 28.27, 0.00, 0.00, 0.00);CreateObject(2118, 2359.76, -1844.44, 28.29, 0.00, 0.00, 0.00);CreateObject(994, 2356.08, -1800.99, 27.28, 0.00, 0.00, 0.00);CreateObject(994, 2353.58, -1803.52, 27.28, 0.00, 0.00, 90.00);CreateObject(994, 2352.51, -1808.49, 27.27, 0.00, 0.00, -90.00);CreateObject(3095, 2334.17, -1781.17, 26.50, 0.00, 0.00, 0.00);CreateObject(3095, 2343.17, -1781.17, 26.49, 0.00, 0.00, 0.00);CreateObject(3095, 2351.77, -1781.19, 26.52, 0.00, 0.00, 0.00);CreateObject(3095, 2354.97, -1781.16, 26.51, 0.00, 0.00, 0.00);CreateObject(3095, 2334.36, -1775.36, 26.48, 0.00, 0.00, 0.00);CreateObject(3095, 2342.74, -1775.42, 26.50, 0.00, 0.00, 0.00);CreateObject(3095, 2350.50, -1775.48, 26.53, 0.00, 0.00, 0.00);CreateObject(3095, 2355.24, -1775.41, 26.55, 0.00, 0.00, 0.00);CreateObject(1656, 2345.12, -1785.95, 26.60, 0.00, 0.00, 0.00);CreateObject(1656, 2346.28, -1785.94, 26.60, 0.00, 0.00, 0.00);CreateObject(1656, 2345.11, -1785.77, 26.72, 0.00, 0.00, 0.00);CreateObject(1656, 2346.29, -1785.77, 26.72, 0.00, 0.00, 0.00);CreateObject(1656, 2345.10, -1785.74, 26.85, 0.00, 0.00, 0.00);CreateObject(1656, 2346.30, -1785.72, 26.85, 0.00, 0.00, 0.00);CreateObject(1930, 2333.86, -1781.60, 29.01, 0.00, 0.00, 89.00);CreateObject(1930, 2341.81, -1781.67, 28.98, 0.00, 0.00, -90.00);CreateObject(1932, 2345.78, -1781.66, 28.52, 0.00, 0.00, 0.00);CreateObject(1930, 2347.19, -1777.65, 29.00, 0.00, 0.00, 0.00);CreateObject(1930, 2347.18, -1775.00, 29.00, 0.00, 0.00, 0.00);CreateObject(1746, 2332.79, -1776.69, 27.39, 0.00, 0.00, -179.00);CreateObject(1433, 2333.88, -1776.66, 27.23, 0.00, 0.00, 0.00);CreateObject(1746, 2335.08, -1776.61, 27.53, 0.00, 0.00, 0.00);CreateObject(1416, 2344.78, -1772.84, 27.59, 0.00, 0.00, -89.00);CreateObject(1416, 2344.80, -1774.26, 27.61, 0.00, 0.00, -89.00);CreateObject(1416, 2344.83, -1775.68, 27.61, 0.00, 0.00, -88.00);CreateObject(1416, 2344.89, -1777.11, 27.59, 0.00, 0.00, -89.00);CreateObject(1416, 2344.91, -1778.53, 27.57, 0.00, 0.00, -89.00);CreateObject(1416, 2344.80, -1771.61, 27.57, 0.00, 0.00, -89.00);CreateObject(1416, 2345.86, -1773.55, 27.59, 0.00, 0.00, 0.00);CreateObject(1416, 2345.91, -1775.97, 27.57, 0.00, 0.00, 2.00);CreateObject(1744, 2344.84, -1777.82, 28.47, 0.00, 0.00, -178.00);CreateObject(1738, 2345.11, -1777.80, 28.21, 0.00, 0.00, -178.00);CreateObject(1663, 2345.85, -1778.48, 27.47, 0.00, 0.00, -91.00);CreateObject(1663, 2344.16, -1778.94, 27.47, 0.00, 0.00, 135.00);CreateObject(1663, 2346.19, -1774.77, 27.50, 0.00, 0.00, -84.00);CreateObject(1744, 2344.69, -1774.56, 28.49, 0.00, 0.00, -178.00);CreateObject(1738, 2345.00, -1774.49, 28.23, 0.00, 0.00, -178.00);CreateObject(1663, 2344.07, -1774.82, 27.47, 0.00, 0.00, -244.00);CreateObject(1663, 2345.85, -1772.23, 27.49, 0.00, 0.00, -91.00);CreateObject(1663, 2343.86, -1772.68, 27.47, 0.00, 0.00, 142.00);CreateObject(1738, 2345.00, -1772.23, 28.19, 0.00, 0.00, -178.00);CreateObject(1744, 2344.62, -1772.31, 28.47, 0.00, 0.00, -181.00);CreateObject(10009, 2352.57, -1771.90, 27.10, 0.00, 0.00, 0.00);CreateObject(3095, 2355.24, -1775.41, 26.55, 0.00, 0.00, 0.00);CreateObject(10012, 2355.04, -1771.74, 27.50, 0.00, 0.00, 0.00);
  4. Steven_Johnson

    Банк в Г.Южном

    Вот ещё моя работа за сегодня,теперь это банк который находится в г.Южном! CreateObject(967, 2381.04, -1890.88, 20.92, 0.00, 0.00, 91.00);CreateObject(966, 2379.35, -1890.64, 20.92, 0.00, 0.00, -2.00);CreateObject(967, 2370.71, -1890.73, 20.91, 0.00, 0.00, -271.00);CreateObject(968, 2379.28, -1890.56, 21.84, 0.00, 0.00, 0.00);CreateObject(1746, 2385.17, -1905.69, 22.14, 0.00, 0.00, 0.00);CreateObject(1746, 2385.16, -1908.22, 22.14, 0.00, 0.00, 0.00);CreateObject(1361, 2385.33, -1909.99, 22.40, 0.00, 0.00, 0.00);CreateObject(1739, 2378.37, -1904.39, 23.26, 0.00, 0.00, 90.00);CreateObject(1746, 2385.00, 2886.00, -1911.00, 0.00, 0.00, 0.00);CreateObject(1746, 2385.00, 2378.00, -1911.00, 0.00, 0.00, 0.00);CreateObject(2082, 2378.00, 164.00, -1913.00, 0.00, 0.00, 0.00);CreateObject(1746, 2385.25, -1911.84, 22.14, 0.00, 0.00, 0.00);CreateObject(1746, 2385.27, -1914.37, 22.14, 0.00, 0.00, 0.00);CreateObject(1361, 2385.53, -1916.37, 22.38, 0.00, 0.00, 0.00);CreateObject(2082, 2378.95, -1913.32, 21.66, 0.00, 0.00, -91.00);CreateObject(2081, 2377.04, -1913.32, 21.67, 0.00, 0.00, 0.00);CreateObject(1744, 2377.50, -1913.36, 22.75, 0.00, 0.00, 84.00);CreateObject(1742, 2377.53, -1913.76, 22.11, 0.00, 0.00, 91.00);CreateObject(2081, 2375.11, -1913.32, 21.67, 0.00, 0.00, 0.00);CreateObject(1744, 2375.54, -1913.30, 22.75, 0.00, 0.00, 84.00);CreateObject(1742, 2375.61, -1913.82, 22.11, 0.00, 0.00, 91.00);CreateObject(2081, 2373.19, -1913.31, 21.67, 0.00, 0.00, 0.00);CreateObject(1744, 2373.61, -1913.31, 22.75, 0.00, 0.00, 91.00);CreateObject(1742, 2373.66, -1913.90, 22.11, 0.00, 0.00, 91.00);CreateObject(2082, 2371.32, -1914.33, 21.67, 0.00, 0.00, 0.00);CreateObject(1749, 2366.34, -1913.05, 22.16, 0.00, 0.00, 0.00);CreateObject(1663, 2365.52, -1913.04, 22.07, 0.00, 0.00, 84.00);CreateObject(1663, 2367.31, -1913.03, 22.09, 0.00, 0.00, -113.00);CreateObject(1744, 2366.63, -1913.95, 22.94, 0.00, 0.00, -40.00);CreateObject(1743, 2366.57, -1912.03, 22.88, 0.00, 0.00, 0.00);CreateObject(2031, 2380.36, -1904.19, 22.86, 0.00, 0.00, -90.00);CreateObject(2031, 2383.10, -1904.17, 22.86, 0.00, 0.00, 91.00);CreateObject(1749, 2366.16, -1909.77, 22.14, 0.00, 0.00, 0.00);CreateObject(1663, 2365.30, -1909.87, 22.07, 0.00, 0.00, 91.00);CreateObject(1663, 2367.12, -1909.78, 22.09, 0.00, 0.00, -98.00);CreateObject(1743, 2366.30, -1908.74, 22.85, 0.00, 0.00, 0.00);CreateObject(1744, 2366.48, -1910.64, 22.91, 0.00, 0.00, -55.00);CreateObject(1749, 2366.10, -1906.19, 22.14, 0.00, 0.00, 0.00);CreateObject(1663, 2367.04, -1906.18, 22.07, 0.00, 0.00, -91.00);CreateObject(1663, 2365.24, -1906.13, 22.07, 0.00, 0.00, 91.00);CreateObject(1743, 2366.25, -1905.15, 22.86, 0.00, 0.00, 0.00);CreateObject(1744, 2366.43, -1907.14, 22.92, 0.00, 0.00, -55.00);
  5. Steven_Johnson

    Парковка в г.Южном

    Здравствуйте уважаемые пользователи GSG! Вот я выложил свой маппинг как Парковка она находится в Южном напротив АЗС! Думаю вам понравится RemoveBuildingForPlayer(playerid, 4443, 2267.0901, -1737.3300, 22.9640, 0.25);CreateObject(4861, 2245.41, -1707.82, 26.98, 0.00, 0.00, 90.00);CreateObject(4442, 2233.77, -1722.44, 19.27, 0.00, 0.00, 0.00);CreateObject(4442, 2239.38, -1722.52, 19.29, 0.00, 0.00, 0.00);CreateObject(4442, 2246.86, -1716.57, 19.27, 0.00, 0.00, 0.00);CreateObject(4442, 2233.92, -1715.99, 19.29, 0.00, 0.00, 0.00);CreateObject(3508, 2222.80, -1706.57, 20.40, 0.00, 0.00, 0.00);CreateObject(3508, 2229.29, -1698.55, 20.39, 0.00, 0.00, 0.00);CreateObject(4442, 2236.24, -1711.83, 19.32, 0.00, 0.00, 0.00);CreateObject(4442, 2220.53, -1706.05, 19.28, 0.00, 0.00, 91.00);CreateObject(4442, 2226.36, -1706.28, 19.30, 0.00, 0.00, 91.00);CreateObject(4442, 2241.08, -1693.27, 19.31, 0.00, 0.00, 0.00);CreateObject(4442, 2240.12, -1699.23, 19.31, 0.00, 0.00, 0.00);CreateObject(2013, 2250.22, -1729.56, 22.55, 0.00, 0.00, -90.00);CreateObject(1746, 2249.86, -1728.07, 22.18, 0.00, 0.00, 182.00);CreateObject(1746, 2253.96, -1727.21, 22.18, 0.00, 0.00, 88.00);CreateObject(1749, 2252.97, -1731.77, 22.26, 0.00, 0.00, -91.00);CreateObject(1663, 2252.98, -1730.74, 22.22, 0.00, 0.00, 0.00);CreateObject(1744, 2252.86, -1731.62, 23.04, 0.00, 0.00, -86.00);CreateObject(967, 2238.58, -1726.68, 20.96, 0.00, 0.00, -91.00);CreateObject(996, 2242.41, -1726.32, 21.44, 0.00, 0.00, 0.00);CreateObject(983, 2237.75, -1722.38, 21.67, 0.00, 0.00, 0.00);CreateObject(983, 2233.93, -1722.41, 21.72, 0.00, 0.00, 0.00);CreateObject(983, 2229.97, -1722.45, 21.72, 0.00, 0.00, 0.00);CreateObject(983, 2226.66, -1722.49, 21.79, 0.00, 0.00, 0.00);CreateObject(983, 2222.73, -1722.46, 21.75, 0.00, 0.00, 0.00);CreateObject(983, 2219.17, -1722.40, 21.79, 0.00, 0.00, 0.00);CreateObject(983, 2248.80, -1719.12, 21.69, 0.00, 0.00, 91.00);CreateObject(983, 2248.85, -1723.37, 21.72, 0.00, 0.00, 91.00);CreateObject(983, 2248.25, -1715.06, 21.73, 0.00, 0.00, 91.00);CreateObject(983, 2249.14, -1693.78, 21.73, 0.00, 0.00, -91.00);CreateObject(983, 2249.29, -1698.13, 21.73, 0.00, 0.00, -91.00);
  6. Это таже работа что и предыдущая только с добавление кабинета директора CreateObject(3643, 2697.78, -2457.86, 19.68, 0.00, 0.00, 0.00);CreateObject(1930, 2702.91, -2448.99, 22.89, 0.00, 0.00, 91.00);CreateObject(1930, 2710.79, -2448.85, 22.88, 0.00, 0.00, 91.00);CreateObject(1948, 2714.81, -2448.76, 22.11, 0.00, 0.00, -86.00);CreateObject(1930, 2714.66, -2443.32, 22.87, 0.00, 0.00, 2.00);CreateObject(1930, 2714.51, -2435.41, 22.89, 0.00, 0.00, 0.00);CreateObject(1739, 2698.84, -2442.58, 23.31, 0.00, 0.00, -180.00);CreateObject(1364, 2713.77, -2440.43, 21.65, 0.00, 0.00, -89.00);CreateObject(1746, 2713.83, -2437.21, 21.21, 0.00, 0.00, 0.00);CreateObject(1746, 2713.79, -2434.69, 21.17, 0.00, 0.00, 0.00);CreateObject(1361, 2713.74, -2432.90, 21.61, 0.00, 0.00, 0.00);CreateObject(1361, 2713.75, -2431.23, 21.61, 0.00, 0.00, 0.00);CreateObject(2082, 2704.68, -2443.51, 20.89, 0.00, 0.00, 91.00);CreateObject(3055, 2697.85, -2446.47, 21.67, 0.00, 0.00, 91.00);CreateObject(2081, 2706.56, -2443.47, 20.89, 0.00, 0.00, -178.00);CreateObject(1744, 2706.13, -2443.50, 21.99, 0.00, 0.00, -91.00);CreateObject(1742, 2706.03, -2443.22, 21.35, 0.00, 0.00, -91.00);CreateObject(2081, 2708.48, -2443.46, 20.89, 0.00, 0.00, -178.00);CreateObject(1744, 2708.02, -2443.47, 21.97, 0.00, 0.00, -91.00);CreateObject(1742, 2708.00, -2442.93, 21.35, 0.00, 0.00, -91.00);CreateObject(2082, 2710.31, -2442.38, 20.89, 0.00, 0.00, -178.00);CreateObject(2081, 2710.37, -2440.43, 20.89, 0.00, 0.00, -89.00);CreateObject(1744, 2710.32, -2440.89, 21.97, 0.00, 0.00, 0.00);CreateObject(1930, 2714.45, -2433.32, 22.91, 0.00, 0.00, 1.00);CreateObject(3055, 2701.02, -2437.26, 22.61, 0.00, 0.00, -2.00);CreateObject(1948, 2706.45, -2437.44, 22.11, 0.00, 0.00, 0.00);CreateObject(3055, 2706.52, -2433.57, 22.29, 0.00, 0.00, 88.00);CreateObject(2963, 2703.44, -2429.42, 22.89, 0.00, 0.00, 91.00);CreateObject(1746, 2706.11, -2430.75, 21.39, 0.00, 0.00, 0.00);CreateObject(1746, 2706.07, -2433.27, 21.39, 0.00, 0.00, -2.00);CreateObject(1746, 2699.54, -2430.14, 21.39, 0.00, 0.00, 90.00);CreateObject(1749, 2701.45, -2433.73, 21.35, 0.00, 0.00, 2.00);CreateObject(2941, 2701.66, -2432.95, 22.18, 0.00, 0.00, 91.00);CreateObject(1743, 2701.71, -2434.76, 22.06, 0.00, 0.00, 0.00);CreateObject(1744, 2701.35, -2433.86, 22.12, 0.00, 0.00, 0.00);CreateObject(1742, 2700.64, -2433.80, 21.33, 0.00, 0.00, 0.00);
  7. Доброго времени суток. Данный материал прежде всего предназначен для RP/RPG-серверов, однако если будет использоваться где-то еще - спорить не буду. Итак, небольшое вступление. На некоторых серверах существуют правила для ника игрока. Самый яркий пример - РП-сервера, где ник обычно требуют в формате %name%_%surname%. Более того, кое-где существует запрет на регистрацию с ником, имя в котором указано в уменьшительно-ласкательной или иной, отличной от официальной, формы (Sasha вместо Alexander и так далее). При достаточно большом количестве игроков уследить за подобными случаями становится все сложнее. Но, как говорится, "кто ищет - тот всегда найдет!" Перед скриптом ставились следующие задачи: Хранить где-то базу некорректных ников. Это показалось проще, чем вести базу корректных. Иметь удобные инструменты для добавления, удаления и проверки наличия записи. Не допускать игрока к серверу в случае совпадения имени с базой и отключать от сервера в случае добавления новой записи в базу. Первую задачу решено было решить, используя SQLite. Создавать что-то на файлах показалось мне не слишком удобным в реализации, а на MySQL такую ерунду делать не хотелось. Хотя можно и ее использовать, но зачем, если, по сути, нам нужна только одна колонка в БД? Вторая решилась еще тривиальнее - три команды-три запроса к базе. Еще один запрос - в момент подключения. Но - обо всем по порядку. Итак, для начала необходимо подключить нужные библиотеки. В нашем случае - a_samp и a_sampdb. #include <a_samp> #include <a_sampdb> Для удобства забьем имя файла с базой как директиву препроцессора. #define db_name "WrongNicks.db" Далее - создаем переменную типа DB для хранения указателя на открытую базу и переменную типа DBResult для хранения возвращаемых из базы результатов. new DB:NicksDB; new DBResult:Result; Начнем с загрузки самой базы. Я использовал код в отдельном ФС, однако ничто не мешает зашить его в гейммод. Первоначально с помощью команды db_open открываем файл, имя которого забито в db_name. Или создаем, если он не был создан: NicksDB = db_open(db_name); Далее - делаем запрос в базу. Необходимо, если таблицы Nicks не существует - создать ее с одной колонкой NICK типа varchar - символьной строки. Делается это простым запросом: db_query(NicksDB,"CREATE TABLE IF NOT EXISTS Nicks (NICK varchar)"); Проверять отдельно, есть ли таблица в файле и есть ли файл вообще, нет необходимости, как нет необходимости и в дальнейших действиях при загрузке ГМ или ФС. Конечный код в случае ФС будет выглядеть так: public OnFilterScriptInit() { NicksDB = db_open(db_name); db_query(NicksDB,"CREATE TABLE IF NOT EXISTS Nicks (NICK varchar)"); return 1; } После выгрузки ГМ или ФС базу нужно корректно закрыть. Тут все еще проще - db_close(). public OnFilterScriptExit () { db_close(NicksDB); return 1; } Далее я решил начать с реализации проверки на наличие ника в базе и, соответственно, запрещению доступа к серверу, если ник в базе есть. Алгоритм действий таков: Получаем ник игрока. Это достаточно просто, есть стандартная функция GetPlayerName(), описывать ее я смысла не вижу. Выделение из ника имени и фамилии. Обычно разделителем выступает нижняя черта - ее проверять и будем. Берем с SA:MP Wiki функцию split: stock split(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)) { if(strsrc[i] == delimiter || i == strlen(strsrc)) { len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; } Создаем двумерный массив для хранения имени и фамилии и записываем в его элементы отдельно имя и отдельно фамилию, полученные после работы split(). Запрос в базу на наличие ника. Проверка организована просто - в базу посылается запрос, в ответе проверяем, сколько строк вернула база. Если не ноль - значит, записи есть и ник запрещен, а значит - игрока нужно кикнуть. Если ноль - записи нет, ник разрешен, ничего с игроком делать не нужно. Берем OnPlayerConnect и производим все необходимые действия по алгоритму: public OnPlayerConnect (playerid) { new Nick[MAX_PLAYER_NAME];//Получение ника GetPlayerName (playerid, Nick, MAX_PLAYER_NAME); new Name[2][24];//Получение имени и "остатков" split (Nick, Name, '_'); new query [512];//Отсылка запроса к БД format (query, sizeof(query), "SELECT * FROM Nicks WHERE NICK LIKE '%s'", Name[0]); Result = db_query (NicksDB, query);//и прием результата запроса. if (db_num_rows(Result))//Если строк результата больше, чем ноль - запись есть! { new Response[144]; SendClientMessage (playerid, 0xdc143cFF, "Вы были кикнуты сервером. Причина: В нике указано неполное имя."); Kick(playerid); format (Response, sizeof(Response), "Игрок %s кикнут сервером. Причина: В нике указано неполное имя.", Nick); SendClientMessageToAll (0xdc143cFF, Response); } return 1; } Хочу обратить внимание на сам запрос в БД: SELECT * FROM Nicks WHERE NICK LIKE '%s'Оператор LIKE здесь используется как оператор нестрогого сравнения - то есть регистр символов может не совпадать. Однако с русскими символами в строке такой запрос не пройдет, что в MySQL, что в SQLite придется городить костыли. У меня не используются ники с русскими символами, поэтому меня такой запрос вполне устраивает в текущем виде. Ну и осталось, собственно, только организовать удобство работы с такой базой. Поскольку бросать идею не хотелось, а использовать для такого порыва покодить какие-то сторонние тулзы вроде командных процессоров было откровенно лень - все построено на стандартной функции OnPlayerCommandText и ненавистной многими strtok: strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } Однако, конечно, если захотите использовать другой командный процессор - пожалуйста, перетаскивайте. Начнем с команды добавления записи в базу и одновременной проверки игроков на свежедобавленное имя. Алгоритм прост - из строки cmdtext получаем необходимый параметр и делаем запрос к базе, после чего циклом проверяем все имена игроков, полученные split(). Далее код с комментариями, который, конечно, нужно пихнуть в OnPlayerCommandText, в котором уже объявлены нужные переменные для strtok: //Для strtok new cmd[256], tmp[256], idx; cmd = strtok(cmdtext, idx); if (!strcmp ("/addnick", cmd, true)) { if (!IsPlayerAdmin(playerid)) //Если игрок не RCon - доступ к функции не даем. { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) //Если параметр пустой - выводим сообщение об ошибке. { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /addnick [Имя]"); return 1; } new query[512]; //Делаем запрос в базу. format (query, sizeof(query), "INSERT INTO Nicks (NICK) VALUES ('%s')", tmp); db_query (NicksDB, query); SendClientMessage (playerid, 0xdc143cFF, "Ник добавлен в базу данных."); //..и оповещаем об этом пользователя. new TempNick[MAX_PLAYER_NAME]; //Готовим переменную под ник. for (new pid=0; pid<MAX_PLAYERS; pid++) //Для всех игроков { if (IsPlayerConnected(pid)) //Если проверяемый подключен - { GetPlayerName (pid, TempNick, MAX_PLAYER_NAME); //получаем его ник полностью if (!strcmp (TempNick, tmp, true, strlen(tmp))) //и проверяем на соответствие с новой записью - вне зависимости от регистра и только количество символов, которое было в новой записи! { //Если условия соблюдены - выбрасываем игрока с сервера. Войти обратно ему не даст код в OnPlayerConnect. new Response[144]; SendClientMessage (pid, 0xdc143cFF, "Вы были кикнуты сервером. Причина: В нике указано неполное имя."); Kick(pid); format (Response, sizeof(Response), "Игрок %s кикнут сервером. Причина: В нике указано неполное имя.", TempNick); SendClientMessageToAll (0xdc143cFF, Response); } } } return 1; } Похожая ситуация - с удалением записи. Даже если похожей записи нет - запрос ничего лишнего не удалит, поэтому на проверку наличия в базе можно не заморачиваться. if (!strcmp ("/removenick", cmd, true)) { if (!IsPlayerAdmin(playerid)) { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /removenick [Имя]"); return 1; } new query[512]; format (query, sizeof(query), "DELETE FROM Nicks WHERE NICK LIKE '%s'", tmp); //Запрос на удаление строк с похожим значением. db_query (NicksDB, query); SendClientMessage (playerid, 0xdc143cFF, "Ник удален из базы данных."); return 1; } В конкретном случае вместо строгого сравнения в запросе опять используется оператор LIKE. Ну, и функция проверки на наличие записи. Тут все аналогично проверке в OnPlayerConnect - если запрос вернет более нуля строк как результат, значит, запись есть. В противном случае - нет. if (!strcmp ("/checknick", cmd, true)) { if (!IsPlayerAdmin(playerid)) { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /checknick [Имя]"); return 1; } new query[512]; format (query, sizeof(query), "SELECT * FROM Nicks WHERE NICK LIKE '%s'", tmp); Result = db_query (NicksDB, query); if (db_num_rows(Result)) SendClientMessage (playerid, 0xdc143cFF, "Данное имя есть в базе данных запрещенных имен."); else SendClientMessage (playerid, 0xdc143cFF, "Данного имени в базе запрещенных имен нет."); return 1; } На этом все! Система работоспособна и готова к наполнению невалидными никами. #define FILTERSCRIPT #define db_name "WrongNicks.db" #include <a_samp> #include <a_sampdb> new DB:NicksDB; new DBResult:Result; public OnFilterScriptInit() { NicksDB = db_open(db_name); db_query(NicksDB,"CREATE TABLE IF NOT EXISTS Nicks (NICK varchar)"); return 1; } public OnFilterScriptExit () { db_close(NicksDB); return 1; } public OnPlayerConnect (playerid) { new Nick[MAX_PLAYER_NAME]; GetPlayerName (playerid, Nick, MAX_PLAYER_NAME); new Name[2][24]; split (Nick, Name, '_'); new query [512]; format (query, sizeof(query), "SELECT * FROM Nicks WHERE NICK LIKE '%s'", Name[0]); Result = db_query (NicksDB, query); if (db_num_rows(Result)) { new Response[144]; SendClientMessage (playerid, 0xdc143cFF, "Вы были кикнуты сервером. Причина: В нике указано неполное имя."); Kick(playerid); format (Response, sizeof(Response), "Игрок %s кикнут сервером. Причина: В нике указано неполное имя.", Nick); SendClientMessageToAll (0xdc143cFF, Response); } return 1; } public OnPlayerCommandText (playerid, cmdtext[]) { new cmd[256], tmp[256], idx; cmd = strtok(cmdtext, idx); if (!strcmp ("/addnick", cmd, true)) { if (!IsPlayerAdmin(playerid)) { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /addnick [Имя]"); return 1; } new query[512]; format (query, sizeof(query), "INSERT INTO Nicks (NICK) VALUES ('%s')", tmp); db_query (NicksDB, query); SendClientMessage (playerid, 0xdc143cFF, "Ник добавлен в базу данных."); new TempNick[MAX_PLAYER_NAME]; for (new pid=0; pid<MAX_PLAYERS; pid++) { if (IsPlayerConnected(pid)) { GetPlayerName (pid, TempNick, MAX_PLAYER_NAME); if (!strcmp (TempNick, tmp, true, strlen(tmp))) { new Response[144]; SendClientMessage (pid, 0xdc143cFF, "Вы были кикнуты сервером. Причина: В нике указано неполное имя."); Kick(pid); format (Response, sizeof(Response), "Игрок %s кикнут сервером. Причина: В нике указано неполное имя.", TempNick); SendClientMessageToAll (0xdc143cFF, Response); } } } return 1; } if (!strcmp ("/removenick", cmd, true)) { if (!IsPlayerAdmin(playerid)) { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /removenick [Имя]"); return 1; } new query[512]; format (query, sizeof(query), "DELETE FROM Nicks WHERE NICK LIKE '%s'", tmp); db_query (NicksDB, query); SendClientMessage (playerid, 0xdc143cFF, "Ник удален из базы данных."); return 1; } if (!strcmp ("/checknick", cmd, true)) { if (!IsPlayerAdmin(playerid)) { SendClientMessage (playerid, 0xdc143cFF, "Вы не обладаете необходимыми правами доступа."); return 1; } tmp = strtok(cmdtext, idx); if (!strlen(tmp)) { SendClientMessage (playerid, 0xdc143cFF, "Синтаксис команды: /checknick [Имя]"); return 1; } new query[512]; format (query, sizeof(query), "SELECT * FROM Nicks WHERE NICK LIKE '%s'", tmp); Result = db_query (NicksDB, query); if (db_num_rows(Result)) SendClientMessage (playerid, 0xdc143cFF, "Данное имя есть в базе данных запрещенных имен."); else SendClientMessage (playerid, 0xdc143cFF, "Данного имени в базе запрещенных имен нет."); return 1; } return 0; } //Разделение stock split(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)) { if(strsrc[i] == delimiter || i == strlen(strsrc)) { len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; } strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } Исходник также доступен на пастбине. Данное решение, возможно, не является суперсовершенным и суперфункциональным, но то, чего я хотел - я добился. Все работает, и работает как надо. Вопросы и пожелания принимаются ниже.
  8. Steven_Johnson

    Автосалон около УВД

    Вот моя вторая работа,думаю вам понравится! CreateObject(3643, 2697.78, -2457.86, 19.68, 0.00, 0.00, 0.00);CreateObject(1930, 2702.85, -2444.34, 22.89, 0.00, 0.00, 91.00);CreateObject(1930, 2710.77, -2444.20, 22.88, 0.00, 0.00, 91.00);CreateObject(1948, 2714.68, -2444.13, 22.11, 0.00, 0.00, -86.00);CreateObject(1930, 2714.43, -2438.64, 22.87, 0.00, 0.00, 2.00);CreateObject(1930, 2714.32, -2433.37, 22.89, 0.00, 0.00, 0.00);CreateObject(1739, 2698.84, -2442.58, 23.31, 0.00, 0.00, -180.00);CreateObject(1364, 2713.77, -2440.43, 21.65, 0.00, 0.00, -89.00);CreateObject(1746, 2713.83, -2437.21, 21.21, 0.00, 0.00, 0.00);CreateObject(1746, 2713.79, -2434.69, 21.17, 0.00, 0.00, 0.00);CreateObject(1361, 2713.74, -2432.90, 21.61, 0.00, 0.00, 0.00);CreateObject(1361, 2713.75, -2431.23, 21.61, 0.00, 0.00, 0.00);CreateObject(2082, 2704.11, -2438.41, 20.89, 0.00, 0.00, 91.00);CreateObject(10250, 2698.56, -2432.03, 20.89, 0.00, 0.00, 90.00);CreateObject(10250, 2698.58, -2434.88, 20.89, 0.00, 0.00, 91.00);CreateObject(10250, 2698.60, -2437.71, 20.89, 0.00, 0.00, 91.00);CreateObject(3055, 2697.85, -2446.47, 21.67, 0.00, 0.00, 91.00);CreateObject(2081, 2706.07, -2438.46, 20.89, 0.00, 0.00, -178.00);CreateObject(1744, 2705.64, -2438.46, 21.99, 0.00, 0.00, -91.00);CreateObject(1742, 2705.56, -2437.98, 21.35, 0.00, 0.00, -91.00);CreateObject(2081, 2708.00, -2438.44, 20.89, 0.00, 0.00, -178.00);CreateObject(1744, 2707.56, -2438.58, 21.97, 0.00, 0.00, -91.00);CreateObject(1742, 2707.48, -2437.79, 21.35, 0.00, 0.00, -91.00);CreateObject(2082, 2709.87, -2437.33, 20.89, 0.00, 0.00, -178.00);CreateObject(2081, 2709.92, -2435.41, 20.89, 0.00, 0.00, -89.00);CreateObject(1744, 2709.93, -2435.86, 21.97, 0.00, 0.00, 0.00);CreateObject(10009, 2700.96, -2443.76, 20.89, 0.00, 0.00, 178.00);CreateObject(10009, 2705.78, -2429.99, 20.89, 0.00, 0.00, 0.00);
  9. Steven_Johnson

    Spawn г.Южный

    Здравствуйте уважаемые пользователи GSG!Вот решил выложить свой первый маппинг сюда,строго не судите!Это моя первая работа! RemoveBuildingForPlayer(playerid, 2028, 2505.1399, -2123.4299, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2505.1299, -2119.9800, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2509.5400, -2123.5500, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2508.8401, -2123.5601, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2507.3000, -2118.6799, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2511.3101, -2118.7800, 22.8600, 0.25);RemoveBuildingForPlayer(playerid, 2028, 2513.5400, -2123.5100, 22.8600, 0.25);CreateObject(4442, 2512.76, -2136.73, 19.27, 0.00, 0.00, 0.00);CreateObject(4442, 2513.13, -2132.28, 19.27, 0.00, 0.00, 0.00);CreateObject(4442, 2512.93, -2127.52, 19.27, 0.00, 0.00, 0.00);CreateObject(4442, 2512.77, -2122.53, 19.27, 0.00, 0.00, 0.00);CreateObject(983, 2525.68, -2137.30, 21.70, 0.00, 0.00, 91.00);CreateObject(983, 2525.63, -2139.81, 21.68, 0.00, 0.00, 90.00);CreateObject(983, 2525.64, -2134.41, 21.68, 0.00, 0.00, -89.00);CreateObject(983, 2525.64, -2130.74, 21.68, 0.00, 0.00, 90.00);CreateObject(10120, 2509.41, -2122.92, 23.02, 0.00, 0.00, 91.00);CreateObject(10120, 2504.98, -2119.85, 22.82, 0.00, 0.00, 91.00);CreateObject(2886, 2514.35, -2136.47, 23.48, 0.00, 0.00, 0.00);CreateObject(2942, 2503.72, -2136.13, 23.05, 0.00, 0.00, 271.00);CreateObject(3039, 2507.43, -2138.18, 20.96, 0.00, 0.00, 0.00);CreateObject(3039, 2511.87, -2138.10, 20.98, 0.00, 0.00, 0.00);CreateObject(3041, 2516.25, -2135.06, 20.97, 0.00, 0.00, 91.00);CreateObject(3041, 2516.12, -2121.01, 20.97, 0.00, 0.00, 91.00);CreateObject(1760, 2528.02, -2118.06, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2526.38, -2118.13, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2524.44, -2118.09, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2522.71, -2118.17, 21.25, 0.00, 0.00, 0.00);CreateObject(1760, 2520.80, -2118.52, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2519.10, -2118.45, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2517.11, -2118.57, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2527.72, -2115.57, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2525.76, -2115.61, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2523.64, -2115.86, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2521.16, -2115.95, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2518.63, -2116.14, 20.96, 0.00, 0.00, 0.00);CreateObject(1760, 2516.20, -2115.97, 21.09, 0.00, 0.00, 0.00);
  10. Здравствуйте, уважаемые пользователи портала! Сейчас хотелось бы разобрать принцип работы часов на тексдравах. Для начала выложу скриншот того, что получится(нажмите для увеличения): Итак, приступим!С самого начала логично было бы создать сам тексдрав. Объявляем переменную: new Text:Clock;//часы Далее создадим тексдрав. Добавляем в public OnGameModeInit следующее: Clock = TextDrawCreate(549.000000, 25.000000, "00:00"); TextDrawAlignment(Clock,0); TextDrawBackgroundColor(Clock, 255); TextDrawFont(Clock, 3); TextDrawTextSize(Clock, 0.599999, 2.200000); TextDrawLetterSize(Clock,0.599999, 2.200000); TextDrawSetOutline(Clock, 1); TextDrawSetShadow(Clock, 0); TextDrawUseBox(Clock, 0); TextDrawColor(Clock, 0x33AA33AA); А теперь что? Ведь нужно сделать так, чтобы текстдрав был виден игрокам, верно? Верно. Добавляем в public OnPlayerConnect показ текстдрава: TextDrawShowForPlayer(playerid, Clock); Есть. Все отображается. Все как на картинке. НО - тексдрав будет постоянно показывать лишь 00:00 Как это исправить? Как сделать обновление? Ровно об этом принципе работы рассказать и хочется. Создадим паблик и таймер, ссылающийся на этот паблик. Повтор функции? Конечно. А иначе как будет обновляться тексдрав? Приступим. forward UpdateTime(); public UpdateTime() { new string[32]; new hour,minute,second; gettime(hour,minute,second); format(string, sizeof(string), "%02d:%02d", hour, minute); SetWorldTime( hour ); TextDrawSetString(Clock,string); } Все? Нет, не все. Ведь нету вызова функции. Сделаем его по стандарту, в public OnGameModeInit: SetTimer("UpdateTime", 1000, 1); И что у нас получится? Паблик UpdateTime будет вызываться каждую секунду и обновлять часы.Спасибо за внимание.
  11. Эта кмд создана чтобы писать xD else if(strcmp(cmdtext,"/piss",true) == 0) { if(GetPlayerState(playerid)!=PLAYER_STATE_ONFOOT) return true; giveplayerid= GetClosestPlayer(playerid); if(PlayerInfo[playerid][pSex] == 1) //чтобы девочки немогли этого делать xD { SetPlayerSpecialAction(playerid,68); //Вроде как анимация [img=http://gsgames.ru/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif] SetPlayerDrunkLevel(playerid, 0); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "%s справляет нужду", sendername); //пишем в чат на расстоянние 10 ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); //Цвет пурпурный //SetPlayerAttachedObject(playerid, 1, 322, 1, -0.403834, 0.239940, 0.038157, 279.414489, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000 ); } return true;Вставить в OnGameModeText
  12. #Pawno

    Деревня в южном

    Карта давольно сделано качетсвено , работа давности по времени точно не помню сколько занимала. Вообщем вот фотки:
  13. Amfy

    Раздевалка

    Собственно в названии темы всё понятно. Простая раздевалка для РП сервера. if(strcmp("/clothes", cmdtext, true, 10) == 0)//Команда{if(!IsPlayerInRangeOfPoint(playerid, 1.0, X, Y, Z)) return SendClientMessage(playerid, -1, "Вы должны быть в раздевалке!");//X, Y, Z замените на свои координатыif(GetPVarInt(playerid, "CLOTHES") != 1)//Если CLOTHES не равен одному - надевает форму{SendClientMessage(playerid, -1, "Вы надели служебную форму.");//ТекстSetPVarInt(playerid, "SKIN", GetPlayerSkin(playerid));//Записывает скин в переменную SKINSetPlayerSkin(playerid, 280);//Выдает новый скинSetPVarInt(playerid, "CLOTHES", 1);//CLOTHES становится равен одномуreturn 1;//Удачно}else//Если CLOTHES равен одному - снимает форму{SendClientMessage(playerid, -1, "Вы надели гражданскую одежду.");//ТекстSetPlayerSkin(playerid, GetPVarInt(playerid, "SKIN"));//Выдает скин из переменной SKINDeletePVar(playerid, "CLOTHES");//Удаляет переменную CLOTHESreturn 1;//Удачно}} P.S Табуляция не много попортилась..Автор: Amfy
  14. Сегодня я объясню как сделать разводной мост по таймеру . мост будет открывается раз в 25 минут! Подойдет для любого мода даже самп но там придется менять объект и координаты! И так начинаем , ко всем new new mostik[2]; дальше мы в public OnGameModeInit добавим таймер который будет открывать мост каждые 25 минут SetTimer("OpenMostik", 1000*60*25, true ) ;// если хотите через 30 или больше минут то меняйте 25 заменим объекты моста id 2168 заменяем на это mostik[0] = CreateObject(2168,2747.3437500,-1142.8994141,21.6000004,0.0000000,0.0000000,179.9945068); mostik[1] = CreateObject(2168,2747.2998047,-1262.0000000,21.6000004,0.0000000,0.0000000,0.0000000); дальше добавляем в конец мода forward OpenMostik(); public OpenMostik() { MoveObject(mostik[0],2747.3999023,-1142.8000488,22.1000004,0.015,45.7489014,0.0000000,179.9945068);// объекты закрытого моста MoveObject(mostik[1],2747.3999023,-1262.0000000,22.1000004,0.015,45.7441406,0.0000000,0.0000000);// объекты закрытого моста SetTimerEx("CloseGate",80*1000,0,"i",mostik[0]);// где 80*100 то 8 секунд открывается мост!можете увеличить SetTimerEx("CloseGate",80*1000,0,"i",mostik[1]);// где 80*100 то 8 секунд открывается мост!можете увеличить return 1; } и еще один паблик в конец мода! forward CloseGate(gate); public CloseGate(gate) { if(gate == mostik[0]) return MoveObject(mostik[0], 2747.3437500,-1142.8994141,21.6000003,0.015,0.0000000,0.0000000,179.994506); //object(barrierturn)(8)// открытые кординаты моста if(gate == mostik[1]) return MoveObject(mostik[1], 2747.2998047,-1262.0000000,21.6000003,0.015,0.0000000,0.0000000,0.0000000); //object(barrierturn)(8)//открытые кординаты моста return 1; } Вот собственно и все!если кому надо проверить работу способность вот команда! if (strcmp("/mostik", cmdtext, true, 10) == 0) { OpenMostik(); return true; } Автор: Банан
  15. Max_Maslov

    /me /do /try [zcmd] [sscafn2]

    Прощу прощение за команду /me, забыл ProxDetector. Итак теперь для того что бы команды работали нужны: [zcmd] и [sscafn]. - Как использовать командный процессор zcmd + sscafn! Ко всем define, если нет: #define COLOR_PURPLE 0xC2A2DAAA В любое свободное место пишем:/me CMD:me(playerid, params[]) { new string[64]; if(sscanf(params, "s[128]", params[0])) return SendClientMessage(playerid, COLOR_GREY, "Введите: /me [действие]"); format(string, sizeof(string), "* %s %s", Name(playerid), params[0]); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return true; } CMD:do(playerid, params[]) { new string[64]; if(sscanf(params, "s[128]", params[0])) return SendClientMessage(playerid, COLOR_GREY, "Введите: /do [действие]"); format(string, sizeof(string), "* %s ((%s))", Name(playerid), params[0]); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return true; } /try CMD:try(playerid, params[]) { new string[64]; if(sscanf(params, "s[128]", params[0])) return SendClientMessage(playerid, COLOR_GREY, "Введите: /try [действие]"); new temptryrand = random(2); if(temptryrand == 1) { format(string, sizeof(string), "* %s %s {00ff00}| Удачно", Name(playerid), params[0]); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return true; } else { format(string, sizeof(string), "* %s %s {ff7518}| Неудачно", Name(playerid), params[0]); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } return true; } В конец мода: stock Name(playerid) { new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); return PlayerName; } stock ProxDetector(Float:radi, playerid, string[], col1, col2, col3, col4, col5) { if(IsPlayerConnected(playerid)) { new Float:posx, Float:posy, Float:posz; new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(playerid, oldposx, oldposy, oldposz); for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)) { GetPlayerPos(i, posx, posy, posz); tempposx = (oldposx -posx); tempposy = (oldposy -posy); tempposz = (oldposz -posz); if(((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16))) SendClientMessage(i, col1, string); else if(((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8))) SendClientMessage(i, col2, string); else if(((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4))) SendClientMessage(i, col3, string); else if(((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2))) SendClientMessage(i, col4, string); else if(((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) SendClientMessage(i, col5, string); } } } } return true; }
  16. meL

    Банк г.Южный

    Здравствуйте уважаемые пользователи CR-MP.RU. Решил сделать свой первый мапинг в CRMP. Взялся за инт банка, так как почти на всех серверах он пустой :) Если что-то не так, жду критики, все таки первая работа. Минусы работы: - Компьютер на столе падает (предлагайте варианты, заменю). - Окна над входными дверками разбиваются. Ну, а плюсы находите сами :) Скриншоты (тыкаем на картинку, чтобы увеличить):
  17. Max_Maslov

    /me [zcmd] [sscafn2]

    Ко все define, у кого нет: #define COLOR_PURPLE 0xC2A2DAAA CMD:me(playerid, params[]) { new string[64]; if(sscanf(params, "s[128]", params[0])) return SendClientMessage(playerid, COLOR_GREY, "Введите: /me [действие]"); format(string, sizeof(string), "* %s %s", Name(playerid), params[0]); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return true; } В конец мода: stock Name(playerid) { new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); return PlayerName; }
  18. else if(strcmp(cmd, "/kick", true) == 0) { if(dostup[playerid] != true)return true; { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "{DDA0DD} >> Введите{FFFFFF}: /kick [ИД] [причина]"); giveplayerid = ReturnUser(tmp); if (PlayerInfo[playerid][pLevel] >= 2 && PlayerInfo[playerid][pAdmin] >= 1) { if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx { idx++; } new offset = idx; new result[64]; while ((idx { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /kick [ИД] [причина]"); new year, month,day; getdate(year, month, day); PlayerInfo[giveplayerid][pRp] -=5; format(string, sizeof(string), "Администратор %s кикнул %s. Причина: %s", sendername,giveplayer, (result)); SendClientMessageToAll(COLOR_LIGHTRED, string); Kick(giveplayerid); return true; } } } else { SendClientMessage(playerid, COLOR_GREY, "{DB7093} [ERROR]: {D3D3D3} Игрок не найден!"); } } return true;
  19. #Jack.Black

    RP Имя

    В public OnPlayerConnect(playerid) if(!IsRPNick(playerid)) { SendClientMessage(playerid,CINFO,"У Вас Non-RP ник. Вы должны сменить его на вид: Имя_Фамилия"); SendClientMessage(playerid,CINFO,"Имя_Фамилия должны быть на латинице!"); SendClientMessage(playerid,CINFO,"Пример: Jack_Black"); Kick(playerid); return 1; } В конец мода: stock IsRPNick(playerid) { new plname[MAX_PLAYER_NAME]; GetPlayerName(playerid, plname, MAX_PLAYER_NAME); for(new i=0;i<strlen(plname);i++) { if( !((plname[i]>='a'&&plname[i]<='z') || (plname[i]>='A'&&plname[i]<='Z') || plname[i]=='_')) { return 0; // недопустимые символы в нике } } new d = strfind(plname, "_"); if( d==-1 ) return 0; // нет _ в нике if(strfind(plname, "_", false, d+1) != -1) return 0; // больше одного _ в нике new name[10]; strmid(name, plname, 0, d, sizeof name); new surname[10]; strmid(surname, plname, d+1, strlen(plname), sizeof surname); if(strlen(name)<3 || strlen(name)>9) return 0; // неверная длина имени if(strlen(surname)<3 || strlen(surname)>9) return 0; // неверная длина фамилии if(!(name[0]>='A' && name[0]<='Z')) return 0; // первая буква имени не заглавная if(!(surname[0]>='A' && surname[0]<='Z')) return 0; // первая буква фамилии не заглавная for(new i=1;i<strlen(name);i++) { if(!(name[i]>='a'&&name[i]<='z')) return 0; // неверные буквы в имени } for(new i=1;i<strlen(surname);i++) { if(!(surname[i]>='a'&&surname[i]<='z'))return 0; // неверные буквы в фамилии } return 1;// ok }
  20. Доброго времени суток. В этом уроке я расскажу как отправлять сообщение прямо с сервера. Установка функций: В начало мода/скрипта после инклудов #include <a_http> // если есть не добовлять #define MAILER_URL "путь к .php файлу" #define MAILER_MAX_MAIL_SIZE (1024) в любое место мода / скрипта. forward OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]); public OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]) { if(szData[ 0 ]) printf( "Mailer script says: %s", szData ); } stock SendMail(const szReceiver[ ], const szSenderMail[ ], const szSenderName[ ], const szSubject[ ], const szMessage[ ]) { new szBuffer[ MAILER_MAX_MAIL_SIZE ] = "t=", iPos = strlen( szBuffer ), iLength = strlen( szReceiver ); memcpy( szBuffer, szReceiver, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&f=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderName ); memcpy( szBuffer, szSenderName, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&n=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderMail ); memcpy( szBuffer, szSenderMail, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&s=" ); iPos = strlen( szBuffer ); iLength = strlen( szSubject ); memcpy( szBuffer, szSubject, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&m=" ); iPos = strlen( szBuffer ); iLength = strlen( szMessage ); memcpy( szBuffer, szMessage, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); HTTP( 0xD00D, HTTP_POST, MAILER_URL, szBuffer, "OnMailScriptResponse" ); } stock StringURLEncode(szString[ ], iSize = sizeof( szString )) { for ( new i = 0, l = strlen( szString ); i < l; i++ ) { switch ( szString[ i ] ) { case '!', '(', ')', ''', '*', '0' .. '9', 'A' .. 'Z', 'a' .. 'z': { continue; } case ' ': { szString[ i ] = '+'; continue; } } new s_szHex[ 8 ] ; if ( i + 3 >= iSize ) { szString[ i ] = EOS; break; } if ( l + 3 >= iSize ) szString[ iSize - 3 ] = EOS; format( s_szHex, sizeof( s_szHex ), "%02h", szString[ i ] ); szString[ i ] = '%'; strins( szString, s_szHex, i + 1, iSize ); l += 2; i += 2; if ( l > iSize - 1 ) l = iSize - 1; } } дальше ,Открываем текстовый документ и записываем в него <?php ini_set( 'html_errors', false ); if ( empty( $_POST[ 't' ] ) || empty( $_POST[ 'f' ] ) || empty( $_POST[ 'n' ] ) || empty( $_POST[ 's' ] ) || empty( $_POST[ 'm' ] ) ) die( 'Error: Missing parameters.' ); mail( $_POST[ 't' ], utf8_encode( $_POST[ 's' ] ), $_POST[ 'm' ], implode( "rn", array ( 'From: "' . addslashes( $_POST[ 'f' ] ) . "" <{$_POST[ 'n' ]}>", "Reply-To: {$_POST['f']}", "X-Mailer: PHP/" . phpversion( ), ) ) ); ?> Затем сохраняем файл в формате .php под название mail. После чего нам нужно загрузить его на хостинг. рекомендую hostinger.ru для бесплатного хранения файлов. Не забудьте в #define MAILER_URL заменить адрес загруженного файла 'mail.php' (http//: и www. писать не нужно) Например: #define MAILER_URL "адрес-сайта.ru/mail.php" Использование: SendMail("mail получателя", "mail отправителя", "ник отправителя", "темя письма", "само сообщение"); Там где "mail отправителя"" можно написать любой mail или же просто поставить знак @
  21. Всем доброго времени суток. Сегодня я попробую помочь людям которые не понимают этот командный процессор. ZCMD - это быстрый и простой командный процессор сделанный Zeex поэтому я научу Вас, ребята, которые не знают как с ним работать. sscanf - является строкой расщепления рутинной сделанный Y_Less. Что нам нужно? 1) Нам необходим include ZCMD. Скачать - http://rghost.ru/48159848 2) Нам необходим include Sscanf. Скачать - http://rghost.ru/48159900 Ok, Вы скачали? Good. Теперь идем в папку pawno, открываем папку include и вставляем туда то, что Вы скачали. Шаг №1. Если Вы используете Windows Server, то Вам необходим plugins sscanf.dll - есть в архиве. Ok, Вы скачали? Good. Теперь идём в папку с Вашим сервером, открываем папку plugins и вставляем туда то, что скачали. Потом нажимаем стрелочку "Назад" и находим файл server.cfg и в самый конец вставляем строку: plugins sscanf. Если Вы используете Linux Server, то тогда Вам необходим plugins sscanf.so - есть в архиве. Ok, Вы скачали? Good. Теперь идём в папку с Вашим сервером, открываем папку plugins и вставляем туда то, что скачали. Потом нажимаем стрелочку "Назад" и находим файл server.cfg и в самый конец вставляем строку: plugins sscanf.so. Шаг №2. Использование. Последний шаг. Итак, все нужные файлы мы скачали. Перейдем к их использованию. Открываем свой мод, и в самое начало мода вставляем (ко всем include): #include <sscanf2> #include <zcmd> Ok, Вставили? Good. Идем дальше, команды не нужно делать в: public OnPlayerCommandText(playerid, cmdtext[]) Команды, мы будем делать не в начале, не в середине, а в конце мода! И вообще, если Вы решили перейти на ZCMD, отключите его, в местo: return 1; поставьте: return 0; Так он нам больше не понадобится. Итак, давайте начнем делать основную команду, вставляем в конец мода: CMD:pawno(playerid, params[]) { // Здесь будет наш код. return 1; } Что такое playerid? И params[]? playerid - это игрок который будет использовать нашу команду, а params[] - это действие, которое будет выполняться при вводе команды. Давайте попробуем добавить сообщение в команду? Итак: CMD:pawno(playerid, params[]) { SendClientMessage(playerid, 0xFFFFFFF, "Пацаны, у меня команда работает! Yeah!"); return 1; } Компилируем... Good. Заходим, тестим. Отлично! Примечание: я добавил цвет "0xFFFFFFF" по умолчанию, можно добавить туда цвет какой вы хотите. Теперь, давайте использовать sscanf, команда будет посложнее... CMD:heal(playerid, params[]) { if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, 0xFFFFFFF, "Используй: /heal [id/name]"); if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xFFFFFFF, "Игрок не найден!"); SetPlayerHealth(params[0], 100); return 1; } "u" - спецификатор, который выступает за Ник / ID игрока. А также, sscanf будет проверять, если отправитель использует не правильное использование команды, выведет сообщение: Используй: /heal [id/name] Другие спецификаторы: i, d - используются при целых числах. !IsPlayerConnected - проверка на подключение игрока, если игрока нет на сервере, то Вам выведет сообщение: Игрок не найден! SetPlayerHealth - и собственно самa функция выдачи здоровья, 100 - это кол-во жизней. Компилируем... Good. Заходим, тестим. Отлично! На этом я думаю закончить свой урок. Всем спасибо за внимание. Автор урока: lovely
  22. #Jack.Black

    TextDraw (State99)

    Стандартный TextDraw название сервера State99 В начало мода new Text:gStateText; В public OnGameModeInit() gStateText = TextDrawCreate(88.000000, 426.000000, "State 99"); TextDrawAlignment(gStateText, 2); TextDrawBackgroundColor(gStateText, 255); TextDrawFont(gStateText, 2); TextDrawLetterSize(gStateText, 0.450000, 1.800000); TextDrawColor(gStateText, 0xFFFFFFff); TextDrawSetOutline(gStateText, 1); TextDrawSetProportional(gStateText, 1); В public OnPlayerConnect(playerid) TextDrawShowForPlayer(playerid,gStateText);
  23. #Jack.Black

    Железный мост г.Южный

    Убрал Железный мост в г.Южный (Все пытались там проехать :D ) + поставил лого CR Смотрится отлично ) RemoveBuildingForPlayer(playerid, 5308, 2494.1499, -1175.0300, 0.0000, 0.25);RemoveBuildingForPlayer(playerid, 5312, 2494.1499, -1175.0300, 0.0000, 0.25);RemoveBuildingForPlayer(playerid, 5307, 2496.6101, -1182.1300, 0.0010, 0.25);RemoveBuildingForPlayer(playerid, 5311, 2496.6101, -1182.1300, 0.0010, 0.25);RemoveBuildingForPlayer(playerid, 5307, 2490.6299, -1182.1300, 0.0010, 0.25);RemoveBuildingForPlayer(playerid, 5311, 2490.6299, -1182.1300, 0.0010, 0.25);RemoveBuildingForPlayer(playerid, 5310, 2490.6299, -1182.1300, 23.1655, 0.25);RemoveBuildingForPlayer(playerid, 5310, 2496.6101, -1182.1300, 23.1655, 0.25);RemoveBuildingForPlayer(playerid, 5309, 2493.8101, -1182.1300, 23.1655, 0.25);CreateDynamicObject(8564, 2493.72, -1341.44, 31.90, 0.00, 0.00, 90.00);
  24. #Jack.Black

    (new) Заправка г.Южный

    CreateDynamicObject(4871, 2217.00, -1822.71, 19.13, 0.00, 0.00, 0.00);CreateDynamicObject(1676, 2243.22, -1781.76, 22.54, 0.00, 0.00, 0.00);CreateDynamicObject(1676, 2247.80, -1781.76, 22.54, 0.00, 0.00, 0.00);CreateDynamicObject(1676, 2247.80, -1788.08, 22.54, 0.00, 0.00, 0.00);CreateDynamicObject(1676, 2243.22, -1788.08, 22.54, 0.00, 0.00, 0.00);CreateDynamicObject(1684, 2211.89, -1801.47, 22.55, 0.00, 0.00, 180.00);CreateDynamicObject(2934, 2243.79, -1810.93, 22.39, 0.00, 0.00, 45.00);CreateDynamicObject(1415, 2266.20, -1795.86, 21.08, 0.00, 0.00, 180.00);CreateDynamicObject(8719, 2199.85, -1796.91, 20.77, 0.00, 0.00, 135225.00);CreateDynamicObject(973, 2201.77, -1799.72, 21.61, 0.00, 0.00, 0.00);CreateDynamicObject(973, 2197.05, -1795.05, 21.61, 0.00, 0.00, 270.00);CreateDynamicObject(973, 2211.11, -1799.72, 21.61, 0.00, 0.00, 0.00);CreateDynamicObject(973, 2226.36, -1806.47, 21.61, 0.00, 0.00, 0.00);CreateDynamicObject(973, 2235.66, -1806.47, 21.61, 0.00, 0.00, 0.00);CreateDynamicObject(973, 2219.63, -1803.43, 21.61, 0.00, 0.00, -56.00);CreateDynamicObject(1716, 2221.81, -1806.31, 20.95, 3.14, 0.00, 3.14);CreateDynamicObject(973, 2256.98, -1802.84, 21.61, 0.00, 0.00, 52.00);CreateDynamicObject(973, 2259.96, -1799.00, 21.61, 0.00, 0.00, 52.00);CreateDynamicObject(973, 2249.66, -1806.24, 21.61, 0.00, 0.00, 0.00);CreateDynamicObject(2934, 2265.64, -1800.86, 22.39, 0.00, 0.00, 45.00);CreateDynamicObject(970, 2264.96, -1784.58, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2268.04, -1784.58, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2261.35, -1783.16, 21.48, 0.00, 0.00, -44.00);CreateDynamicObject(970, 2258.36, -1780.28, 21.48, 0.00, 0.00, -44.00);CreateDynamicObject(970, 2256.61, -1778.59, 21.48, 0.00, 0.00, -44.00);CreateDynamicObject(970, 2253.95, -1775.45, 21.48, 0.00, 0.00, -56.00);CreateDynamicObject(970, 2247.47, -1771.72, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2243.32, -1771.72, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2239.22, -1771.72, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2237.94, -1771.73, 21.48, 0.00, 0.00, 0.00);CreateDynamicObject(970, 2230.19, -1774.07, 21.48, 0.00, 0.00, 36.00);CreateDynamicObject(970, 2229.12, -1774.84, 21.48, 0.00, 0.00, 36.00);CreateDynamicObject(970, 2222.96, -1770.70, 21.48, 0.00, 0.00, 94.00);CreateDynamicObject(970, 2223.20, -1773.59, 21.48, 0.00, 0.00, 94.00);CreateDynamicObject(970, 2225.39, -1775.88, 21.48, 0.00, 0.00, -6.00);CreateDynamicObject(970, 2233.89, -1772.29, 21.48, 0.00, 0.00, 16.00);CreateDynamicObject(970, 2251.26, -1772.89, 21.48, 0.00, 0.00, -34.00);
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.