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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переу становитеMicrosoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Если помогло,ставьте +
  2. Amfy

    Tipster (Жучок)

    Описание: Данный скрипт позволит прицепить жучок к игроку и отслеживать данного игрока по этому самому жучку. При попытке прикрепить жучка, срабатывает рандом, т.е у вас может не получиться прикрепить жучок. В случае если рандом будет на вашей стороне, запускается таймер для вас на 1 секунду, если в течении этой секунды, игрок на которого вы пытается прицепить жучка не сменит свою позицию, то жучок будет успешно прикреплен. Если же в течении этой секунды игрок сменит свою позицию, у вас не получиться прикрепить на него жучок и ему будет написано мол на него пытались прикрепить жучок но, не напишет кто пытался. Далее.. если всё же жучок прикреплен успешно, у вас на радаре будет обновляется его месторасположение. Команды: /tipster [iD] - прикрепить жучок к указанному игроку. /tipsteroff - прекратить слежение за игроком. [spoiler=Скриншоты:] Скачать: RGHost: http://rghost.ru/48430383 Пароль: gsg P.S Тестил сам с собой, поэтому все тексты на скриншоте пишуться мне. После теста впилил проверку на то, что нельзя нацепить жучка на себя. P.S Для обновления используется public OnPlayerUpdate, это не есть хорошо. Вообщем, если у вас в моде есть секундный таймер, код из public OnPlayerUpdate вставьте в секундный таймер. Автор: Amfy
  3. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переустановите Microsoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Сделайте также, что и на скриншоте:
  4. Vladislav334

    cmd /admins

    Здраствуйте,вот команда /admins если ошибки пишите исправлю! if (strcmp(cmd, "/admins", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid, COLOR_GRAD1, "{ffffff}-."); SendClientMessage(playerid, COLOR_GREY, "{6699FF} Администрация {FFFFFF}Online"); for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(PlayerInfo[i][pAdmin] >= 0) { GetPlayerName(i, sendername, sizeof(sendername)); format(string, 256, "{6699FF}Администратор[%d]: {FFFFFF} %s {6699FF} [id: %d]",PlayerInfo[i][pAdmin], sendername, i); SendClientMessage(playerid, COLOR_GREY, string); } } } } return 1; }
  5. Egorcik

    Textdraw (By Egor4ik)

    Вот TextDraw делал себе но теперь он мне недао вот держите Ко всем new: new Text:Textdraw94; new Text:Textdraw93; В public OnPlayerConnect(playerid) TextDrawShowForPlayer(playerid,Textdraw94); TextDrawShowForPlayer(playerid,Textdraw93); В public OnGameModeInit() Textdraw94 = TextDrawCreate(500.000000, 8.000000, "Sailent RP"); TextDrawBackgroundColor(Textdraw94, -16776961); TextDrawFont(Textdraw94, 1); TextDrawLetterSize(Textdraw94, 0.800000, 1.700000); TextDrawColor(Textdraw94, -65281); TextDrawSetOutline(Textdraw94, 0); TextDrawSetProportional(Textdraw94, 1); TextDrawSetShadow(Textdraw94, 1); Textdraw93 = TextDrawCreate(0.000000, 424.000000, "Vk.Com/Sailentcrmp"); TextDrawBackgroundColor(Textdraw93, -16776961); TextDrawFont(Textdraw93, 1); TextDrawLetterSize(Textdraw93, 0.800000, 1.700000); TextDrawColor(Textdraw93, -65281); TextDrawSetOutline(Textdraw93, 0); TextDrawSetProportional(Textdraw93, 1); TextDrawSetShadow(Textdraw93, 1); Скрины
  6. ART 

    Respawn г.Южный [2] and Club 8-Bit

    Здравствуйте ув. юзеры портала GSG. Автора незнаю. Весь сабж указан в названии темы. См.Скриншоты ниже. Объекты: CreateDynamicObject(982,2532.3000500,-2169.6999500,21.6500000,0.0000000,0.0000000,90.0000000); //object(fenceshit) (3)CreateDynamicObject(982,2567.5000000,-2169.8000500,21.6500000,0.0000000,0.0000000,90.0000000); //object(fenceshit) (4)CreateDynamicObject(982,2554.6999500,-2169.6999500,21.6500000,0.0000000,0.0000000,90.0000000); //object(fenceshit) (5)CreateDynamicObject(984,2580.3000500,-2176.1999500,21.6100000,0.0000000,0.0000000,0.0000000); //object(fenceshit2) (10)CreateDynamicObject(984,2579.8999000,-2197.6001000,21.6500000,0.0000000,0.0000000,0.0000000); //object(fenceshit2) (11)CreateDynamicObject(982,2519.5000000,-2182.5000000,21.6500000,0.0000000,0.0000000,0.0000000); //object(fenceshit) (6)CreateDynamicObject(984,2519.5000000,-2200.1001000,21.6000000,0.0000000,0.0000000,0.0000000); //object(fenceshit2) (14)CreateDynamicObject(983,2522.6999500,-2206.5000000,21.6500000,0.0000000,0.0000000,90.0000000); //object(fenceshit3) (7)CreateDynamicObject(983,2576.6999500,-2204.0000000,21.7000000,0.0000000,0.0000000,90.0000000); //object(fenceshit3) (8)CreateDynamicObject(970,2518.6001000,-2130.8000500,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (1)CreateDynamicObject(970,2518.6001000,-2134.8999000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (2)CreateDynamicObject(970,2516.5000000,-2137.0000000,21.5000000,0.0000000,0.0000000,0.0000000); //object(fencesmallb) (3)CreateDynamicObject(970,2518.6001000,-2122.6001000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (4)CreateDynamicObject(970,2518.6001000,-2118.5000000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (5)CreateDynamicObject(970,2516.5000000,-2116.3999000,21.5000000,0.0000000,0.0000000,0.0000000); //object(fencesmallb) (6)CreateDynamicObject(970,2514.5000000,-2118.5000000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (7)CreateDynamicObject(3508,2523.3999000,-2125.3999000,21.0000000,0.0000000,0.0000000,237.7500000); //object(vgsn_nitree_g02) (1)CreateDynamicObject(970,2518.6001000,-2114.3999000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (8)CreateDynamicObject(1223,2518.8999000,-2124.8999000,21.0000000,0.0000000,0.0000000,0.0000000); //object(lampost_coast) (1)CreateDynamicObject(1223,2518.8999000,-2128.4299300,21.0000000,0.0000000,0.0000000,0.0000000); //object(lampost_coast) (2)CreateDynamicObject(1215,2518.6001000,-2111.6999500,21.5000000,0.0000000,0.0000000,0.0000000); //object(bollardlight) (1)CreateDynamicObject(970,2521.3000500,-2111.6999500,21.5000000,0.0000000,0.0000000,0.0000000); //object(fencesmallb) (10)CreateDynamicObject(970,2525.3999000,-2111.6999500,21.5000000,0.0000000,0.0000000,0.0000000); //object(fencesmallb) (11)CreateDynamicObject(1215,2528.1999500,-2111.6999500,21.5000000,0.0000000,0.0000000,0.0000000); //object(bollardlight) (2)CreateDynamicObject(970,2528.1999500,-2114.3999000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (12)CreateDynamicObject(970,2528.1999500,-2118.5000000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (13)CreateDynamicObject(970,2528.1999500,-2122.6001000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (14)CreateDynamicObject(970,2528.1999500,-2126.6999500,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (15)CreateDynamicObject(970,2528.1999500,-2130.8000500,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (16)CreateDynamicObject(970,2528.1999500,-2134.8999000,21.5000000,0.0000000,0.0000000,90.0000000); //object(fencesmallb) (17)CreateDynamicObject(869,2516.3999000,-2130.6001000,21.4000000,0.0000000,0.0000000,0.0000000); //object(veg_pflowerswee) (1)CreateDynamicObject(869,2516.5000000,-2133.6001000,21.4000000,0.0000000,0.0000000,0.0000000); //object(veg_pflowerswee) (2)CreateDynamicObject(869,2516.5000000,-2135.0000000,21.4000000,0.0000000,0.0000000,180.0000000); //object(veg_pflowerswee) (3)CreateDynamicObject(869,2516.5000000,-2132.0000000,21.4000000,0.0000000,0.0000000,180.0000000); //object(veg_pflowerswee) (4)CreateDynamicObject(869,2516.5000000,-2123.3000500,21.4000000,0.0000000,0.0000000,180.0000000); //object(veg_pflowerswee) (5)CreateDynamicObject(869,2516.5000000,-2119.8999000,21.4000000,0.0000000,0.0000000,180.0000000); //object(veg_pflowerswee) (6)CreateDynamicObject(869,2516.6999500,-2118.5000000,21.4000000,0.0000000,0.0000000,276.0000000); //object(veg_pflowerswee) (7)CreateDynamicObject(869,2516.5000000,-2121.0000000,21.4000000,0.0000000,0.0000000,0.0000000); //object(veg_pflowerswee) (8)CreateDynamicObject(966,2520.8999000,-2136.8000500,21.0000000,0.0000000,0.0000000,180.0000000); //object(bar_gatebar01) (1)CreateDynamicObject(967,2519.6001000,-2136.3000500,21.0000000,0.0000000,0.0000000,270.0000000); //object(bar_gatebox01) (1)CreateDynamicObject(968,2520.8999000,-2136.8000500,21.8000000,0.0000000,0.0000000,180.0000000); //object(barrierturn) (1)
  7. artem13038

    Как установить MTA?

    Всем привет. Сегодня хочу рассказать об полной установке MTA. 1. Обновите на своём компьютере DirectX 2. Переустановите Microsoft Visual C++ 2008 3. Если нету C++ 2008 SP1 Redistributable package устанавливаем, если есть то тогда переустанавливаем. 4. MTA 1.3.2 - https://disk.yandex....z1Osbx6Gekt1J0= Разберёмся с GTA CR. Предупреждения: если вы хотите устанавливать MTA на свою GTA CR, то она должна быть без модов. 1. Установите вот эту GTA CR - http://www.torrentin...g=52:1191:22798 2. Установка MTA 1.3.2. Запускаем установочный файл. В первом выборе пути не чего не меняем. Во втором выборе пути, указываем папку с игрой. После того как MTA 1.3.2 установилась, заходим в неё. После того как она открылась заходим в Setting, в первом окне ставим везде галочки, и перезапускаим MTA. Потом нажимаем Map Editor и радуемся. Вот и всё, если будут какие то проблемы пишите в эту тему. Скачать CRMP клиент
  8. Tourer V

    Интерьер маленькой квартирки

    Cделал интерьер маленькой квартирки,в ней присутствует одна комната и кухня.Прошу строго не судить. CreateDynamicObject(19407, 2449.84, -2080.79, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19453, 2447.22, -2086.45, 22.66, 0.00, 0.00, -33.00); CreateDynamicObject(19453, 2445.13, -2069.75, 22.66, 0.00, 0.00, 88.00); CreateDynamicObject(19453, 2436.75, -2069.45, 22.66, 0.00, 0.00, 88.00); CreateDynamicObject(19453, 2436.60, -2076.67, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19453, 2440.95, -2088.45, 22.66, 0.00, 0.00, -92.00); CreateDynamicObject(19453, 2436.61, -2086.16, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19407, 2449.86, -2074.41, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19361, 2449.85, -2077.58, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19361, 2449.86, -2071.34, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19361, 2436.60, -2070.39, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19376, 2444.73, -2074.44, 20.90, 0.00, 90.00, -2.00); CreateDynamicObject(19376, 2434.26, -2074.07, 20.90, 0.00, 90.00, -2.00); CreateDynamicObject(19376, 2444.42, -2084.05, 20.90, 0.00, 90.00, -2.00); CreateDynamicObject(19376, 2433.96, -2083.69, 20.90, 0.00, 90.00, -2.00); CreateDynamicObject(19377, 2434.33, -2073.89, 24.27, 0.00, -90.00, -3.00); CreateDynamicObject(19377, 2433.98, -2083.51, 24.27, 0.00, -90.00, -3.00); CreateDynamicObject(19377, 2444.45, -2083.94, 24.27, 0.00, -90.00, -3.00); CreateDynamicObject(19377, 2444.71, -2074.52, 24.27, 0.00, -90.00, -1.00); CreateDynamicObject(1535, 2437.16, -2088.26, 20.98, 0.00, 0.00, -2.00); CreateDynamicObject(19453, 2444.93, -2077.76, 22.66, 0.00, 0.00, -91.00); CreateDynamicObject(19390, 2440.20, -2076.03, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19361, 2440.20, -2073.01, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19361, 2440.19, -2069.96, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19390, 2440.20, -2079.25, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(19453, 2440.21, -2085.56, 22.66, 0.00, 0.00, 0.00); CreateDynamicObject(10200, 2445.31, -2078.19, 20.89, 0.00, 0.00, 0.00); CreateDynamicObject(10200, 2447.19, -2078.19, 20.89, 0.00, 0.00, 0.00); CreateDynamicObject(10200, 2448.10, -2078.19, 20.89, 0.00, 0.00, 0.00); CreateDynamicObject(10200, 2444.40, -2078.19, 20.89, 0.00, 0.00, 0.00); CreateDynamicObject(10200, 2443.49, -2078.19, 20.89, 0.00, 0.00, 0.00); CreateDynamicObject(10210, 2447.90, -2077.94, 21.92, 0.00, 0.00, 0.00); CreateDynamicObject(10206, 2446.24, -2078.30, 20.95, 0.00, 0.00, 0.00); CreateDynamicObject(19453, 2445.03, -2083.71, 22.66, 0.00, 0.00, -92.00); CreateDynamicObject(10226, 2449.01, -2082.96, 23.68, 0.00, 0.00, -120.00); CreateDynamicObject(10193, 2443.26, -2082.50, 21.36, 0.00, 0.00, -90.00); CreateDynamicObject(1741, 2442.22, -2083.23, 21.50, 0.00, 0.00, -71.00); CreateDynamicObject(1741, 2442.12, -2082.46, 21.50, 0.00, 0.00, -90.00); CreateDynamicObject(1741, 2444.49, -2082.00, 21.50, 0.00, 0.00, 98.00); CreateDynamicObject(1741, 2444.53, -2082.86, 21.50, 0.00, 0.00, 98.00); CreateDynamicObject(10166, 2449.60, -2080.73, 21.48, 0.00, 0.00, 0.00); CreateDynamicObject(10203, 2444.97, -2077.61, 22.28, 0.00, 0.00, 0.00); CreateDynamicObject(10182, 2440.78, -2073.50, 21.26, 0.00, 0.00, 90.00); CreateDynamicObject(10178, 2440.71, -2070.60, 22.22, 0.00, 0.00, 0.00); CreateDynamicObject(1746, 2444.06, -2070.28, 21.40, 0.00, 0.00, 90.00); CreateDynamicObject(1742, 2441.96, -2073.53, 21.44, 0.00, 0.00, -185.00); CreateDynamicObject(1724, 2448.30, -2072.82, 21.67, 0.00, 0.00, 90.00); CreateDynamicObject(1739, 2447.03, -2069.95, 23.24, 0.00, 0.00, 90.00); CreateDynamicObject(19174, 2440.29, -2073.50, 23.22, 0.00, 0.00, 90.00); CreateDynamicObject(1724, 2448.32, -2071.48, 21.67, 0.00, 0.00, 90.00); CreateDynamicObject(10166, 2449.56, -2074.53, 21.48, 0.00, 0.00, 0.00); CreateDynamicObject(19172, 2436.69, -2081.01, 23.22, 0.00, 0.00, 90.00); CreateDynamicObject(19173, 2436.68, -2078.58, 23.22, 0.00, 0.00, 90.00); CreateDynamicObject(19159, 2443.61, -2075.40, 24.00, 0.00, 0.00, 90.00); CreateDynamicObject(1502, 2440.18, -2075.25, 20.93, 0.00, 0.00, -90.00); Скриншоты.
  9. Доброго времени суток. Данный материал прежде всего предназначен для 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; } Исходник также доступен на пастбине. Данное решение, возможно, не является суперсовершенным и суперфункциональным, но то, чего я хотел - я добился. Все работает, и работает как надо. Вопросы и пожелания принимаются ниже.
  10. Tourer V

    Интерьер гаража.

    Этот интерьер я нашёл на компьютере.Кому нужен забирайте. CreateDynamicObject(2019, 2593.56, -2015.17, 16.12, 0.00, 0.00, 0.00); CreateDynamicObject(19456, 2602.48, -1892.79, 17.47, 0.00, 0.00, -90.00); CreateDynamicObject(19456, 2602.24, -1888.26, 17.47, 0.00, 0.00, -90.00); CreateDynamicObject(19456, 2597.99, -1888.29, 17.47, 0.00, 0.00, 0.00); CreateDynamicObject(19447, 2604.32, -1891.74, 16.03, 0.00, 90.00, 0.00); CreateDynamicObject(19447, 2600.85, -1890.53, 16.03, 0.00, 90.00, 0.00); CreateDynamicObject(19447, 2597.36, -1889.60, 16.03, 0.00, 90.00, 0.00); CreateDynamicObject(19380, 2602.44, -1891.98, 19.19, 0.00, 90.00, 0.00); Скриншоты:
  11. Думаю смысл системы понятен из названии темы. Но, я всё же объясню. Описание: Игрок устанавливает противотанковую мину и когда танк наезжает на эту мину, происходит взрыв.
  12. Здравствуйте, уважаемые пользователи портала! Решил выложить русскоязычный скрипт. Смысл его очень прост: сделать необходимый поворот камеры, при том не затратив особых усилий. В управлении он так же довольно прост: достаточно просто зайти в игру и ввести /cameditor. Автор не я, просто нашел данный скрипт на просторах интернета и решил поделиться с вами. Удачи. camers.pwn
  13. if(strcmp("/jlist", cmdtext, true, 10) == 0){new bool:players = false;for(new i = 0; i < MAX_PLAYERS; i++){if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;if(PlayerInfo[i][pJailTime] != 0){new name[MAX_PLAYER_NAME], str[150];GetPlayerName(i, name, sizeof(name));format(str, sizeof(str), "%sn{FFFFFF}ID: {FF9D00}%d {FFFFFF}Ник: {FF9D00}%s {FFFFFF}Осталось: {FF9D00}%d", str, i, name, PlayerInfo[i][pJailTime]);ShowPlayerDialog(playerid,487,DIALOG_STYLE_LIST,"{FFFF00}Список заключенных",str,"Принято","");players = true;}}if(players == false) return SendClientMessage(playerid, -1, "Список заключенных пуст!");} В команде нужно только изменить переменную отвечающую за время в тюрьме, это pJailTime и PlayerInfo если у вас конечно не так как в команде. Скриншот:
  14. Amfy

    Russian Text Fix

    Описание: Плагин исправляющий русский текст на сервере в функциях.Поддержка всех русских букв А-Я а-я. native GameTextForAll(const string[],time,style);native GameTextForPlayer(playerid,const string[],time,style);native Menu:CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0);native AddMenuItem(Menu:menuid, column, const menutext[]);native SetMenuColumnHeader(Menu:menuid, column, const columnheader[]);native Text:TextDrawCreate(Float:x, Float:y, text[]);native TextDrawSetString(Text:text, string[]); Необходим этот руссификаторПочему в плагине эта функция, ведь ее можно и в Pawn реализовать?Да потому что в плагине работает все быстрее, чем стандартные средства реализации и вам не надо думать об оптимизации, за вас все сделали. Использование: #include <crp>...public OnPlayerConnect(playerid){GameTextForPlayer(playerid, "~g~????? ?????????? ?? ??????!", 5000, 3);}... Natives: // По умолчанию все стандартные функции заменены на использование с этим фиксомnative ConvertRusToPwn(const text[], dest[], size = sizeof dest); CRP.zipCRP2.zipАвтор: Fro1sha
  15. От того что все Античиты с каким то странным кодом, выкладываю свой код. Более понятный, и нету не чего лишнего. Защита самая простая, деньги отнимаются, оружие так же. stock GivePlayerMoneys(p,m) return SetPVarInt(p, "FHMoney", GetPVarInt(p, "FHMoney")+m), GivePlayerMoney(p, m); stock ResetPlayerMoneys(p) return SetPVarInt(p, "FHMoney", 0), ResetPlayerMoney(p, 0); stock GetPlayerMoneys(p) return GetPVarInt(p, "FHMoney"); stock GivePlayerWeapons(player, weapid, ammo) return Weapons[player][weapid] = 1, GivePlayerWeapon(player, weapid, ammo); Инструкция по установке: 1. Засунуть в любое место вне пабли(ка/ов) 2. Заменить стандартные функции, на данные: - GivePlayerMoney на GivePlayerMoneys - ResetPlayerMoney на ResetPlayerMoneys - GetPlayerMoney на GetPlayerMoneys - GivePlayerWeapon на GivePlayerWeapons, Ваш КЭП. Author: FanHamMer
  16. Доброго времени суток! Сегодня я вам покажу ,оптимизированный вид регистрации! И так просмотрим код : Добавим парочку переменных: 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
  17. Посидел пару минут на форуме, увидел уроки всякие, где один ужасный код и в комментариях темы написано что "ВАЩЕ КУРУТЯК". Ну что же, надо развивать Вас как то. Вот Вам самый обычный, и самый рабочий антифлуд. if(GetPVarInt(playerid, "ChatFlood") > gettime()) return SendClientMessage(playerid, -1, "Команды можно вводить раз в 2 секунды!") & 0; SetPVarInt(playerid, "ChatFlood", gettime() + 2); Думаю сам код описывать особо не нужно, что да как. Тут итак понятно, сам код Вы можете вставить к примеру в паблик отправки текста "OnPlayerText", или просто даже в любую команду, где нужен ограничитель по времени. Чтобы изменить время длительности, в конце кода вместо 2 поставьте своё значение. В чём плюсы данного кода? Код не занимает лишнии ячейки памяти из-за PVar's. Не используются таймеры, как любят это делать недо-скриптеры. Да и лишнего не чего нету. Если Вы хотите использовать код несколько раз в моде, то название пивоваров меняйте, чтобы значение не путалось. Author: FanHamMer
  18. #Pawno

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

    Карта давольно сделано качетсвено , работа давности по времени точно не помню сколько занимала. Вообщем вот фотки:
  19. Всем привет, дело было вечером, дело было не чего. От такой скукоты сделал калькулятор, просто и со вкусом. Понятно что он не кому не нужен к чертям, хотя бы пусть новички посмотрят как выглядит работоспособный код. Я не пытался изобретать велосипед. Команда: /calc Видео: http-~~-//youtu.be/xkLe89NRzGs Pastebin: http://pastebin.com/rYRGz9AQ (Табуляция испортилась) Author: FanHamMer P.S. На самом деле история другая, но так как она не связана с данным форумом, не буду оглашать.
  20. Здравствуйте, уважаемые пользователи портала! Сейчас хотелось бы разобрать принцип работы часов на тексдравах. Для начала выложу скриншот того, что получится(нажмите для увеличения): Итак, приступим!С самого начала логично было бы создать сам тексдрав. Объявляем переменную: 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 будет вызываться каждую секунду и обновлять часы.Спасибо за внимание.
  21. 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);
  22. Всем привет, сегодня мы научимся создавать ворота с открытием. Затем создадим объект к этой переменной, пусть это будет (OnGameModeInit): К OnPlayerCommandText: Теперь давайте разберём всё подробнее.
  23. Чех

    PawnBook v5

    Всем привет,решил поделиться книгой по изучению pawn Это пятое, последнее издание, первого и до сих пор единственного полноценного (250 ст.) учебника посвященного pawn скриптингу на русском языке. Изменения в пятом издании: - Переписаны многие уроки, часть оставлена как есть. - Все найденные ошибки и недочеты исправлены. - Учебник переоформлен. - Учебник разделен на IV раздела: введение, основы, функции, ресурсы. - Количество уроков: 50. Автор учебника: Cloud Рекомендую с данным учебником ознакомится как начинающим, так и опытным скриптерам! Ссылка: http://webfile.ru/6610224 Пароль: gs-g
  24. 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
  25. Доброго времени суток. В этом уроке я расскажу как отправлять сообщение прямо с сервера. Установка функций: В начало мода/скрипта после инклудов #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 или же просто поставить знак @
×

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

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