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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

Найдено: 47 результатов

  1. Привет всем дорогие друзья. Сегодня я разжую вам урок по созданию шлагбаума. Давайте преступим. Вот полный код: Ко всем переменным new opengate; В public OnGameModeInit(): opengate = CreateObject(980,935.29998779297,-836.20001220703,96.5,0,0,0,300); В public OnPlayerCommandText: if(strcmp("/open", cmd, true) == 0) { new open[MAX_PLAYERS]; if(open[playerid] == 0) // Проверяем закрыты ли ворота { MoveObject(opengate,935.29998779297,-836.20001220703,96.5,10); // Открываем ворота open[playerid] = 1; // Устанавливаем значение открытых ворот } if(open[playerid] == 1) // Проверяем открыты ли ворота { MoveObject(opengate,935.29998779297,-831.90002441406,96.5,10); // Закрываем ворота open[playerid] = 0; // Устанавливаем значение закрытых ворот } return 1; } И так, давайте разжёвывать каждую строчку и слово в этом коде. Первое что мы рассмотрим это переменную new opengate; Создали мы ее для того что бы записать, прикрепить (как вам угодно) в нее объект А делаем мы это вот таким образом: opengate = CreateObject(980,935.29998779297,-836.20001220703,96.5,0,0,0,300); Функция CreateObject создает объект по заданным координатам Координаты к этой функции мы пишем в () таких вот скобках. Сами координаты состоят из 6 частей и разделяются запятыми всего частей кода 8, так как вы уже поняли, что координаты это 6 частей, а оставшиеся 2 это id создаваемого объекта и расстояние на котором его будет видно. Рассмотрим 6 частейCreateObject(id объекта,Координаты по оси X,Координаты по оси Y,Координаты по оси Z,Координаты по оси R-X,Координаты по оси R-Y,Координаты по оси R-Z, Расстояние видимости объекта); Кстати максимальное значение видимости объекта = 300 Так, ну что, объект мы записали в переменную, теперь когда мы будем использовать opengate то pawno разу будет знать что мы вызываем объект. Идем дальше Создаем команду для того что бы наш шлагбаум открывался и закрывался. if(strcmp("/open", cmd, true) == 0) { new open[MAX_PLAYERS]; if(open[playerid] == 0) // Проверяем закрыты ли ворота { MoveObject(opengate,935.29998779297,-836.20001220703,96.5,10); // Открываем ворота open[playerid] = 1; // Устанавливаем значение открытых ворот } if(open[playerid] == 1) // Проверяем открыты ли ворота { MoveObject(opengate,935.29998779297,-831.90002441406,96.5,10); // Закрываем ворота open[playerid] = 0; // Устанавливаем значение закрытых ворот } return 1; } Строка if(strcmp("/open", cmd, true) == 0)значит что если мы ввели в консоль вызываемую кнопкой F6 команду /open то она вызывает следующие действия. Строка new open[MAX_PLAYERS];переменная open присваивается для каждого игрока индивидуально. Ею мы будем смотреть закрыты ли наши двери или нет. Строка if(open[playerid] == 0) If в переводе с английского означает "Если" То естьЕсли(переменная open[id игрока который использует команду]== 0) { то делаем следующее действие. СтрокаMoveObject(opengate,935.29998779297,-836.20001220703,96.5,10); // Открываем воротаДвигает наш объект по заданным координата. А именно это делает функция MoveObject, после этой функции мы задаем координаты. Сейчас распишу вам полностью строку Двигаем объект(сам объект, помните мы в переменную opengate записали объект, вот сейчас мы его используем,Координаты по оси X,Координаты по оси Y,Координаты по оси Z,Скорость предвидения объекта,Координаты по оси R-X,Координаты по оси R-Y,Координаты по оси R-Z); В данном случаи мы не используем координаты R-X, R-Z, R-Y, но если вам надо то знайте что они ставятся только после скорости передвижения объекта и ни как до его. Дальше строкаopen[playerid] = 1; // Устанавливаем значение открытых воротпоказывает что наш шлагбаум открыт, и закроется только тогда, когда переменной open будет присвоено значение 0. дальше думаю все логично. Кстати строкаreturn1;возвращает действие обратно. Спасибо за внимание! Автор Romio2517
  2. Переменные: new car1; //Авто к которому мы будем "лепить" объект new object1; //Объект который будет прикреплён к авто. Далее в public OnGameModeInit() вставляем вот такие строки: object1 = CreateObject(1654,0.0,0.0,0.0,0.0,0.0,0.0); //1654-id объекта. Кординаты по нулям. car1 = AddStaticVehicle(466,2767.9844,-2506.7651,13.3423,64.6074,110,110); //Здесь наше авто, ставим свои кординаты где будет стоять авто и т.д. AttachObjectToVehicle(object1, car1, 0,0,0,0,0,0); //Здесь редактируем кординаты объекта Пояснение: • Создаем переменные одну для автомобиля другую для обьекта: new car1; new object1; • Прикрепляем переменную для обьекта к обьекту: object1 = CreateObject(1654,0.0,0.0,0.0,0.0,0.0,0.0); //1654-id объекта. Кординаты по нулям. • Прикрепляем переменную для транспорта к транспорту: object1 = CreateObject(1654,0.0,0.0,0.0,0.0,0.0,0.0); //1654-id объекта. Кординаты по нулям. • Ну и в конце концов прикрепляем сам обьект к транпорту: AttachObjectToVehicle(object1, car1, 0,0,0,0,0,0); //Здесь редактируем кординаты объекта Автор: GameLoad
  3. Всех приветствую форумчане. Нашёл на просторах полезный материал (не свой) по использованию функций gettime и getdate. Для начало опишу как использовать gettime(); gettime - функция отправляет запрос на сервер и возвращает время с серверной машины В Pawno существует 2 вида возвращения, сейчас я их опишу: 1) Вывод обычного времени которое мы привыкли видеть Для того чтобы вывести время на нужно создать несколько переменных: new hour,minute,second; И отправить запрос gettime gettime(hour,minute,second); // в наши переменные записали даные о времени Для вывода время в лог сервера делаем так: printf("Часов : %d",hour); // вывели часы printf("Минут : %d",minute); // вывели минуты printf("Секунд : %d",second); // вывели секунды printf("Полное время : %d:%d:%d",hour,minute,second); // вывели полное время если вы не поняли как вывести время в игру на сервер, то сделаем для примера простую команнду /time if(strcmp(cmdtext, "/time", true) == 0) { new hour,minute,second; new str[128]; gettime(hour,minute,second); format(str,sizeof(str),"Сейчас на сервере %d:%d:%d",hour,minute,second); return SendClientMessage(playerid, 0xFFFFFF,str); } 2) Вывод необычного времени UnixTime. Для начало скажу что такое Unix время - это число секунд с 31 декабря 1969 года на 1 января 1970 года, время с этого момента называют «эрой UNIX». Для чего можно использовать: unixtime хорошо использовать для бана на время, вывод сообщений в определённое время вплоть до секунды, и разные другие решения. Для получения unixtime создадим переменную и присвоим ей значение gettime(); new unixtime = gettime(); // unixtime - теперь это число секунд с 1 января 1970 года Пример использования: if(unixtime >= unxiunbantime) return unban(playerid); /*======Опишу подробно===== unixtime - время unix из gettime() unxiunbantime - это ваше время разбана в Unix времени (создаёте сами) unban(playerid) - функция, которую также создаёте сами для разбана игрока =======================*/ или для вывода сообщения в определённое время if(gettime() == 1304407099) return SendClientMessage(playerid,0xFFFFFF,"Сейчас ровно [03.05.2011 11:18:19]"); /*======Опишу подробно===== gettime() - время unix также можно использовать без задания переменной 1304407099 - это ваше время вывода сообщения( получить её можно с помощью с помощью дополнительных функций(не стандартных) или перемножением например: new timeformes = gettime()+(60*60*24); // - в этом случае мы получим число секунд через сутки =======================*/ Теперь опишу использование getdate(); getdate - функция для получения даты с сервера с помощью getdate можно получить день месяц и год или же число дней с начало года 1) Для начало рассмотрим получение дня, месяца и года, для этого также создадим 3 переменных new year, month,day; и запросим дату getdate(year, month, day); // тут по амриканскому стандарту первое идёт год потом месяц, день примеры вывода в лог сервера: printf("Год : %d",year); // вывели год printf("Месяц : %d",month); // вывели месяц printf("День : %d",day); // вывели день printf("Полное дата : %02d.%02d.%d",day,month,year); // вывели полную дату Также для примера команда /date if(strcmp(cmdtext, "/date", true) == 0) { new year, month,day; new str[128]; getdate(year, month, day); format(str,sizeof(str),"Сегодня %02d число %02d месяца %d года",day,month,year); //%02d - где 02 - означение вывод двухзначного числа return SendClientMessage(playerid, 0xFFFFFF,str); } 2) Для вывода числа дней создаим переменую и присвоим ей getdate(); new days = getdate(); Пример что получится: printf("с начало года прошло %d дней",days); Можно применить для подсчёта дней или для вывода сколько осталось дней например до оновго года) Пример сколько до новогода года: if(strcmp(cmdtext, "/newyear", true) == 0) { format(str,sizeof(str)," До нового года осталось - %d дней",365-getdate()); // выдаст число дней оставшихся до нового года return SendClientMessage(playerid, 0xFFFFFF,str); } Автор: Lik P.S: я предусмотрел, что этот урок может быть полезным каждым, поэтому, строго на меня не судить
  4. Так, как у нас нету этого урока, решил его выложить. Все источники и авторы указаны ниже. Данный урок есть на официальном сайте www.sa-mp.com Автор статьи: newbienoob Что нам понадобиться в этой статье: - Mysql plugin - Whirlpool Начнем: 1. Ко всем include: #include <a_samp> #include <a_mysql> 2. Ко всем define: #define host "localhost" //ваш хост mysql. По умолчанию localhost #define user "root" //имя пользователя mysql #define db "server" //название базы данных #define pass "" //Ваш пароль mysql #define dregister 6287 //диалог регистрации #define dlogin 6288 // диалог авторизации 3. К глобальным переменным: static mysql, //переменная будет использоваться для управления в базе Name[MAX_PLAYERS][24], //для хранения имени игрока. IP[MAX_PLAYERS][16] //для хранения игрока ip. ; native WP_Hash(buffer[], len, const str[]); enum PDATA { ID, //для хранения игрока ID из базы данных, поэтому мы можем использовать его в любом месте позже Password[129],//загрузка пароля игрока в этот varible из базы данных Admin, //загрузка игрока на уровне администратора из базы данных в этой переменной VIP, //загрузка уровня VIP игрока из базы данных в этой переменной Money, //загрузка денег игрока из базы данных в этой переменной Float:posX, //загрузка X позиции игрока из базы данных в этой переменной Float:posY, //загрузка Y позиции игрока из базы данных в этой переменной Float:posZ //загрузка Z позиции игрока из базы данных в этой переменной } new pInfo[MAX_PLAYERS][PDATA]; //Переменная для хранения всего, что перечислили выше 4. В public OnGameModeInit(): mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG); //включаем отладку, так мы можем выявить проблемы(если есть) mysql = mysql_connect(host, user, db, pass); //подключение сервера к базе данных. if(mysql_errno(mysql) != 0) print("Не удалось подключиться к базе данных!"); //ошибка о подключении к БД, проверьте правильно ли вы ввели свои данные 5. В public OnPlayerConnect(playedid): new query[128]; //запрос GetPlayerName(playerid, Name[playerid], 24); //Получение имени игрока GetPlayerIp(playerid, IP[playerid], 16); //Получение IP игрока mysql_format(mysql, query, sizeof(query),"SELECT `Password`, `ID` FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]); mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid); 6. В конце скрипта создаем public: forward OnAccountCheck(playerid); public OnAccountCheck(playerid) { new rows, fields; cache_get_data(rows, fields, mysql); if(rows) //если есть строка {//затем cache_get_field_content(0, "PASS", pInfo[playerid][Password], mysql, 129); //загружаем пароль игрока в pInfo[playerid][Password], используемый в регистрации pInfo[playerid][ID] = cache_get_field_content_int(0, "ID"); //загрузка ID игрока в pInfo[playerid][ID] printf("%s", pInfo[playerid][Password]); ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Авторизация", "Для того чтобы начать игру, необходимо авторизоваться", "Вход", "Выйти"); //Обнаружили аккаунт, показываем данный диалог } else //если аккаунта нет { ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "регистрация", "Для того, чтобы начать игру, Вам необходимо зарегистрироваться.", "регистрация", "Выйти"); //То показываем этот диалог регистрации аккаунта } return 1; } forward OnAccountLoad(playerid); forward OnAccountRegister(playerid); public OnAccountLoad(playerid) { pInfo[playerid][Admin] = cache_get_field_content_int(0, "Admin"); pInfo[playerid][VIP] = cache_get_field_content_int(0, "VIP"); pInfo[playerid][Money] = cache_get_field_content_int(0, "Money"); pInfo[playerid][posX] = cache_get_field_content_float(0, "PosX"); pInfo[playerid][posY] = cache_get_field_content_float(0, "PosY"); pInfo[playerid][posZ] = cache_get_field_content_float(0, "PosZ"); GivePlayerMoney(playerid, pInfo[playerid][Money]);//деньги SendClientMessage(playerid, -1, "Успешный вход!"); //Успешный вход в аккаунт return 1; } public OnAccountRegister(playerid) { pInfo[playerid][ID] = cache_insert_id(); //загружает ID игрока в переменную, после того, как он зарегистрировался. printf("New account registered. ID: %d", pInfo[playerid][ID]); return 1; } 7. В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]): switch(dialogid) { case dlogin: //диалоговое окно входа в систему { if(!response) return Kick(playerid); //если нажал выйти - кикает new hpass[129]; //для хэширования паролей new query[100]; // для форматирования нашего запроса WP_Hash(hpass, 129, inputtext); //хеширования inputtext if(!strcmp(hpass, pInfo[playerid][Password])) { mysql_format(mysql, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]); mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid); } else { ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Авторизация", "Чтобы начать игру необходимо вести пароль", "Вход", "Выйти"); } } case dregister: //диалог регистрации { if(!response) return Kick(playerid); //если нажали выйти, мы будем кикать их if(strlen(inputtext) < 6) return ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "Регистрация", "Для того, чтобы играть, Вам необходимо зарегистрироваться.\nВаш пароль должен быть не менее 6 символов!", "Регистрация", "Выйти"); //strlen проверяет длину строки, если игрок вводит свой пароль, который ниже, чем 6 символов, то выводим данное сообщение new query[300]; WP_Hash(pInfo[playerid][Password], 129, inputtext); mysql_format(mysql, query, sizeof(query), "INSERT INTO `players` (`Username`, `Password`, `IP`, `Admin`, `VIP`, `Money`, `PosX` ,`PosY`, `PosZ`) VALUES ('%e', '%s', '%s', 0, 0, 0, 0.0, 0.0, 0.0)", Name[playerid], pInfo[playerid][Password], IP[playerid]); mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid); } } 8. В public OnPlayerDisconnect(playerid, reason): new query[128], Float:pos[3]; //query[128] для форматирования нашего запроса и Float:pos[3] Для получения и сохранения позиции игрока GetPlayerPos(playerid, pos[0], pos[1], pos[2]); //добавление позиции игрока, когда они покидают сервер mysql_format(mysql, query, sizeof(query), "UPDATE `players` SET `Admin`=%d, `VIP`=%d, `Money`=%d, `posX`=%f, `posY`=%f, `posZ`=%f WHERE `ID`=%d",\ pInfo[playerid][Admin], pInfo[playerid][VIP], pInfo[playerid][Money], pos[0], pos[1], pos[2], pInfo[playerid][ID]); //Обновляем таблицу игроков mysql_tquery(mysql, query, "", ""); 9. В public OnPlayerSpawn(playerid): SetPlayerPos(playerid, pInfo[playerid][posX], pInfo[playerid][posY], pInfo[playerid][posZ]); //Установка позиции игрока к последнему сохранению позиций. Перевод комментариев может быть не точным, а также может отсутствовать совсем. Кто шарит по английски, смотрите оригинальную тему. Пишите свои поправки в тему, исправлю. Оригинальная статья: Нажимай, чтобы посмотреть
  5. И так. Есть диалоги следующих видов: DIALOG_STYLE_LIST DIALOG_STYLE_INPUT DIALOG_STYLE_MXGBOX DIALOG_STYLE_PASSWORD А теперь по подробнее. DIALOG_STYLE_LIST - вид диалога для так сказать вывода списка нужных вам функций/команд и т.д. Код диалога данного: CMD:dialog(playerid) { ShowPlayerDialog(playerid,555,DIALOG_STYLE_LIST,"Пример диалога","Содержимое списка 1\nСодержимое списка 2\nСодержимое списка 3","Кнопка 1","Кнопка 2"); return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 555) { if(response) { if(listitem == 0) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 1'"); if(listitem == 1) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 2'"); if(listitem == 2) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 3'"); } else { SendClientMessage(playerid,0x88AA88AA,"Вы нажали на 'Кнопка 2' либо Esc"); return 1; } } return 1; }
  6. Итераторы значительно повышают скорость перебора итераций в циклах(foreach отбрасывает лишние итерации). Код вывода лога:
  7. #Kot

    Работа с ProgressBar'ом

    Что такое BrogressBar? ProgressBar - это Индикатор процесса/выполнения. Это элемент графического интерфейса пользователя, представляющий собой прямоугольную (в большинстве случаев) панель для отображения индексации хода или выполнения какой либо задачи. Обычно бегунок индикатора процесса заполняется слева направо.
  8. Всем привет! Взялся я за мод Геймер и столкнулся с проблемой разделения пола (Скин не менялся на женском поле) И вот вырезал из Green Tech 2 строчки кода: Что нужно сделать: 1. Найти такие строчки (Могут различаться): Муж. PlayerInfo[playerid][pSex] = 1; SendClientMessage(playerid, COLOR_YELLOW2, "Принято, ты парень."); Жен. PlayerInfo[playerid][pSex] = 2; SendClientMessage(playerid, COLOR_YELLOW2, "Принято, ты девушка."); 2. После этих строчек нужно вставить эти: PlayerInfo[playerid][pChar] = 20; SetPlayerSkin(playerid, PlayerInfo[playerid][pChar]); Где число 20 - это скин, меняете на своё значение. Примечание: Это можно сделать как для муж. пола, так и для женского пола. Всё спс за внимание. Думаю урок полезен для новичков!
  9. Здравствуйте, уважаемые пользователи! Сегодня я вам покажу, как добавить объекты в SAMP MC под своим ID'ом. Нам понадобятся программы MED 0.21b, GTA3 Crazy Img, естественно SAMP MC и новый объект. Возьмем объект: Garaje by drygou (Надеюсь автор не против) И так, начнем: Открываем программу GTA3 IMG, в нем открываем файл, который находится в папке с CR "gta3.img" Жмем "добавить..(ins)" и выбираем файлы (объекта, .col, .dff, txd) Закрываем программу Заходим в программу MED 0.21b Жмем кнопку "Add.." В первую строку вводим любое название (ваша тема), во второй жмем "Обзор" и выбираем папку с GTA, в которой находится SAMP MC. и жмем "Окей" В левой части выбираете любой раздел (DATA/Maps/Arzamas) Дальше нажимаем на кнопку "New Item", которая ПОСЛЕ РАЗДЕЛОВ (пункт 7) В строке ID number пишем свой подходящий ID, в строке Model name и Texture Name, пишем название объекта (копируем название объекта с файла .dff, .col или .txd БЕЗ ТЕГА) и жмем "ОК". Автор урока: #Flexo Всем спасибо за просмотр, надеюсь данный урок вам помог!))
  10. И так увжаемые пользыватели форума , я выложу урок как сделать заморозку в инте,, чтоб игрок не падал под инт. Такая проблема возникает когда инт на стримере стойт вообщем начинаем. Первое в Паблики OnPlayerSpawn SetPlayerSpawn OnPlayerPickUpPickup добавим в начало Frez(playerid);// замораживает игрока при появление в инте. и в самый конец добавим сам сток и паблик который отвечает за разморозку и заморозку. stock Frez(playerid) { TogglePlayerControllable(playerid, 0);// замараживаем игрока SetTimerEx("unFrez",3000,0,"%d",playerid);// время через которое разморозим } forward unFrez(playerid); public unFrez(playerid) TogglePlayerControllable(playerid, 1);// разморозка Вот и все. Автор: Longer(Artem_Storn)
  11. 1. Регистируемся на бесплатном хостинге hostinger.ru (НЕ РЕКЛАМА) 2. Дальше жмем хостинг>Все аккаунты>Создать новый хостинг аккаунт (Смотрите скриншот)
  12. Показываю как сделать бан на время с использованием Unix Времени + MxINI Бан работает так банишь игрока /ban [1-сек,2-мин,3-часы,4-дни] [ид] [число времени] [причина] пример /ban 2 1 10 проверка Если человек забанен и он заходит на сервер то ему вылазиет диалог когда он был забанен,когда разбанят,причина и потом кикает. Если бан закончится то аккаунт который забанен будет лежать в папке banlist пока игрок которого забанили зайдет снова на сервер. Важно: создать папку в scriptfiles с названием banlist Скачать инклуды можно тут ИНКЛУД (http://rghost.ru/35622578) Инклуды кидать в папку pawno->include, если есть то заменить. Время перевода с Unix на нормальное настроенно на московское В начало мода вставляем если нету #include <MxINI> #include <mxdate> // Для диалогов id меняйте на ваши свободные #define DIALOGUNBAN 1 // id дилога для высвечивания даты Это в свободное место stock GetBan(playerid) { new PlayerNick[MAX_PLAYER_NAME],string[255]; GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME); format(string, sizeof(string), "banlist/%s.ini", PlayerNick); if(fexist(string)) { new OpenBan = ini_openFile(string); new bantime, unbantime, PlayerBan[MAX_PLAYER_NAME], reason[128]; ini_getInteger(OpenBan, "BanTime", bantime); ini_getInteger(OpenBan, "UnBanTime", unbantime); ini_getString(OpenBan, "PlayerBan", PlayerBan); ini_getString(OpenBan, "Reason", reason); ini_closeFile(OpenBan); if(gettime() >= unbantime) return UnBan(PlayerNick); else { format(string, sizeof(string), "\ Дата бана: %s\n\ Дата Разбана: %s\n\ Забанил: %s\n\ Причина бана: %s\n\ ", date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime), date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime), PlayerBan,reason); ShowPlayerDialog(playerid,DIALOGUNBAN,0,"Вы забанены",string,"Выйти",""); return Kick(playerid); } } else return true; } stock UnBan(playerid[]) { new string[64]; format(string, sizeof(string), "banlist/%s.ini", playerid); return fremove(string); } stock AddBan(player, playerid[], giveplayerid[], type = 1, chislo = 0, reason[]) { new totalban = 0; switch(type) { case 1: totalban = 60*chislo; // минуты case 2: totalban = 3600*chislo; // часы case 3: totalban = 86400*chislo; // сутки default: totalban = chislo; // секунды } new string[64]; format(string, sizeof(string), "banlist/%s.ini", playerid); new OpenBan = ini_createFile(string); if(OpenBan < 0) ini_openFile(string); ini_setInteger(OpenBan, "BanTime", gettime()); ini_setInteger(OpenBan, "UnBanTime", gettime()+totalban); ini_setString(OpenBan, "PlayerBan", giveplayerid); ini_setString(OpenBan, "Reason", reason); ini_closeFile(OpenBan); // Закрываем файл. ShowPlayerDialog(player,DIALOGUNBAN,0,"Вы забанены","{FF0000}Вы забанены","Выйти",""); return Kick(player); } Далее вставляем в начало паблика OnPlayerConnect GetBan(playerid); Далее создадим саму команду бана (оптимизируйте под себя её) сделал под GF if(strcmp(cmd, "/ban", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new type = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new chislo = strval(tmp); if(PlayerInfo[playerid][pAdmin] >= 4) { if(giveplayerid != INVALID_PLAYER_ID) { new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) idx++; new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME]; GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME); GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME); AddBan(giveplayerid, PlayerBan, PlayerNick, type, chislo, result); return true; }//not connected } return true; } Теперь создадим команду разбана ниже if(strcmp(cmd,"/unban",true)==0) { if(PlayerInfo[playerid][pAdmin] >= 8) { tmp = strtok(cmdtext,idx); if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GRAD1,"/unban [players nick]"); UnBan(tmp); } return true; } Автор:Lik Взято с павно портала
  13. Команда: else if(strcmp(cmd, "/uninvite", true) == 0) { new para1; new Leader; new Member; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "{DDA0DD} >> Введите{FFFFFF}: /uninvite [id] [причина]"); para1 = ReturnUser(tmp); Leader = PlayerInfo[playerid][pLeader]; Member = PlayerInfo[para1][pMember]; if(PlayerInfo[playerid][pLeader] >= 1) { if(IsPlayerConnected(para1)) { if(Leader == Member) { if(para1 != INVALID_PLAYER_ID) { new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "{DDA0DD} >> Введите{FFFFFF}: /uninvite [id] [причина]"); if(para1 == playerid)return SendClientMessage(playerid, COLOR_GREY, "{DB7093} [ошибка]: {D3D3D3} Это ваш ID"); if(PlayerInfo[para1][pLeader] >= 1)return SendClientMessage(playerid, COLOR_GREY, "{DB7093} [ошибка]: {D3D3D3} Это ID лидера"); GetPlayerName(para1, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "Вы выгнали %s Причина: {63B8FF}%s", giveplayer, (result)); SendClientMessage(playerid, 0x6495EDFF, string); format(string, sizeof(string), "%s Выгнал вас. Причина: {63B8FF}%s", sendername, (result)); SendClientMessage(para1, 0x6495EDFF, string); SendClientMessage(para1, COLOR_WHITE, "Теперь ты снова безработный..."); PlayerInfo[para1][pMember] = 0; PlayerInfo[para1][pLeader] = 0; PlayerInfo[para1][pRank] = 0; SetPlayerInterior(para1, 0); PlayerInfo[para1][pInt] = 0; SetPlayerArmorAC(para1,0); Delgun(para1); ResetPlayerWeapons(para1); SpawnPlayer(para1); OnPlayerUpdateRL(para1); } return true; } return true; } return true; } return true; } Для новичков которые не умеют делать пойдет.
  14. SNEEX

    Донат Система

    Хочу представить вашему вниманию систему доната,многие ищут. Приступим! добавляем команду: else if(strcmp(cmd, "/givedonate", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /givedonate [ид] [сумма]"); new playa; new money; playa = ReturnUser(tmp); tmp = strtok(cmdtext, idx); money = strval(tmp); if (PlayerInfo[playerid][pAdmin] >= 7) { if(IsPlayerConnected(playa)) { if(playa != INVALID_PLAYER_ID) { GetPlayerName(playa, sendername, sizeof(sendername)); format(string, sizeof(string), " %d доната игроку %s", money,sendername); SendClientMessage(playerid, COLOR_BLUE, string); PlayerInfo[playa][pDonatemoney] += money; format(string, sizeof(string), "Администратор выдал вам: %d доната", money); SendClientMessage(playa, COLOR_YELLOW, string); } } } else { SendClientMessage(playerid, COLOR_RED, "Вы не уполномочены использовать эту команду!"); } return 1; } else if(strcmp(cmd, "/donate", true) == 0) { new donate[70]; format(donate,70, "{ffffff}У вас {ff0000}%d{ffffff} Donate",PlayerInfo[playerid][pDonatemoney]); ShowPlayerDialog(playerid, 2984, DIALOG_STYLE_LIST, donate, "1.Уволиться[50]n2.Снять мут[50]n3.Снять варн[150]n{ff0000}Получить админку/Пополнить донатn{ff0000}Можно в скайпе {ffffff}dontexxx", "Ok", "Cancel"); } В public OnDialogResponse: case 2984: { if(response == 1) { switch(listitem) { case 0: { if(PlayerInfo[playerid][pDonatemoney]>=50) { if(PlayerInfo[playerid][pMember] > 0 || PlayerInfo[playerid][pLeader] > 0) { PlayerInfo[playerid][pMember] = 0; PlayerInfo[playerid][pRank] = 0; PlayerInfo[playerid][pLeader] = 0; PlayerInfo[playerid][pJob] = 0; SetPlayerArmourAC(playerid,0); SpawnPlayer(playerid); PlayerInfo[playerid][pDonatemoney]-=50; SendClientMessage(playerid,COLOR_BLUE,"Вы успешно уволились из организации"); } else {SendClientMessage(playerid,COLOR_BLUE,"Вы нигде не состоите");} } else {SendClientMessage(playerid,COLOR_BLUE,"У вас нет столько доната!");} } case 1: { if(PlayerInfo[playerid][pDonatemoney]>=50) { if(PlayerInfo[playerid][pMuted] > 0) { PlayerInfo[playerid][pMuted] = 0; PlayerInfo[playerid][pMuteTime] = 0; SendClientMessage(playerid,COLOR_BLUE,"Вы сняли с себя мут"); PlayerInfo[playerid][pDonatemoney]-=50; } else {SendClientMessage(playerid,COLOR_BLUE,"У вас нет бана чата!");} } else {SendClientMessage(playerid,COLOR_BLUE,"У вас нет столько доната!");} } case 2: { if(PlayerInfo[playerid][pDonatemoney]>=150) { if(PlayerInfo[playerid][pWarns] > 0) { PlayerInfo[playerid][pWarns] --; PlayerInfo[playerid][punWarnstime] = 0; PlayerInfo[playerid][punWarns] = 0; SendClientMessage(playerid,COLOR_BLUE,"Вы сняли с себя варн"); PlayerInfo[playerid][pDonatemoney]-=50; } else {SendClientMessage(playerid,COLOR_BLUE,"У вас нет варнов!");} } else {SendClientMessage(playerid,COLOR_BLUE,"У вас нет столько доната!");} } } } } else if(strcmp(cmd, "/moneytodonate", true) == 0) { SendClientMessage(playerid,COLOR_BLUE,"Команда /moneytodonate обменивает 1кк => 100Donate"); if(PlayerInfo[playerid][pCash] >= 1000000) { PlayerInfo[playerid][pCash] -= 1000000; PlayerInfo[playerid][pDonatemoney] += 100; SendClientMessage(playerid,COLOR_BLUE,"Вы обменяли 1кк на 100 очков доната"); } else { SendClientMessage(playerid,COLOR_BLUE,"У вас нету 1кк для обмена на 100 доната"); } } else if(strcmp(cmd, "/donate", true) == 0) { SendClientMessage(playerid,COLOR_BLUE,"Команда /moneytodonate обменивает 1кк => 100Donate"); new donate[70]; format(donate,70, "{ffffff}У вас {ff0000}%d{ffffff} Donate",PlayerInfo[playerid][pDonatemoney]); ShowPlayerDialog(playerid, 2984, DIALOG_STYLE_LIST, donate, "1.Уволиться[50]n2.", "Ok", "Cancel"); } Вот собственно и все.Будут ошибки кидайте помогу исправить.Кому помог + Автор: неизвестный. Автор переделки: Я.
  15. Всем привет, с вами Skorpionss (Руслан). В этом небольшом уроке я покажу как изменить скин при входе/регистрации на сервере. Примером нам послужит мод: Gamer. И так, приступим. 1. Ищем паблик:public SetPlayerSpawn(playerid) 2. Там у нас будет много всячины..., открываем поиск и вводим в него: [1. Вариант]: "спавн южный" [2. Вариант]: "if(PlayerInfo[playerid][pOrigin] " Далее ... 3. У вас появится код со спавном и т.д " Что мы делаем дальше? " После функции: " SetPlayerFacingAngle(playerid, 185.4226); " Вставляем функцию: " SetPlayerSkin(playerid, 24); " Поясняю : " 24 в фунции, это ID скина, меняете на свой " С вами был Руслан, если что не понятно? Пишите.
  16. Я думаю название говорит само за себя. В public OnGameModeInit(): SetTimer("HS",2000,true); // раз в 2 сек. будем менять название/можно поменять! Потом создаём новый паблик: public HS(){ switch(random(3)) { case 1:SendRconCommand("hostname 1 ваше название сервера"); case 2:SendRconCommand("hostname 2 ваше название сервера"); Ко всем forward добовляем это: forward HS(); Создаём паблик public Timer(){ new var = random(5); switch (var) { case 0: SendRconCommand("mapname твоё"); // тут название Карты case 1: SendRconCommand("mapname твоё2");// тут название Карты case 2: SendRconCommand("mapname твоё3");// тут название Карты case 3: SendRconCommand("mapname твоё4");// тут название Карты case 4: SendRconCommand("mapname твоё5");// тут название Карты } new rend = random(2); switch (rend ) { case 0: SendRconCommand("gamemodetext Первое Название Мода"); case 1: SendRconCommand("gamemodetext Второе Название Мода"); }} Автор:
  17. Сегодня я объясню как сделать разводной мост по таймеру . мост будет открывается раз в 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; } Автор: Банан
  18. Alexsis Prime

    Мигалка

    Вот и мигалка с моего мода, который я продаю. Это наверное последнее, что я выложу со своего мода, ну чтобы его покупали! if(strcmp(cmd, "/policelight", true) == 0) { //new member = PlayerInfo[playerid][pMember]; new leader = PlayerInfo[playerid][pLeader]; new car = GetPlayerVehicleID(playerid); if(PlayerInfo[playerid][pAdmin] > 0 || IsACop(playerid)) { if(IsPlayerConnected(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { new text[32]; text = strtok(cmdtext, idx); if(!strlen(text)) { SendClientMessage(playerid, COLOR_GRAD1, "Prime: /policelight [on/off]"); return 1; } if(strcmp(text,"on",true) == 0) { DestroyObject(police[car]); police[car] = CreateObject(18646,0,0,0,0,0,0,100.0); AttachObjectToVehicle(police[car], GetPlayerVehicleID(playerid), -0.4, -0.1, 0.87, 0.0, 0.0, 0.0); SendClientMessage(playerid, COLOR_GREEN2, "Prime: Вы установили полицейскую мигалку."); } else if(strcmp(text,"off",true) == 0) { DestroyObject(police[car]); SendClientMessage(playerid, COLOR_RED2, "Prime: Вы сняли полицейскую мигалку."); } } } return 1; } Напомню, что мой мод исключительно для SAMP. Работает с нуля, ну или не работает http://gsgames.ru/forum/public/style_emoticons/default/wink.gif
  19. Вот решил создать урок посвященный сексу с Женой/Мужем v0.2. Итак, давайте приступим. Откроем наш мод. Перейдем к концу мода. Вставляем следующий код: if(strcmp(cmd, "/propsesex", true) == 0||strcmp(cmd, "/prsex", true) == 0){if(IsPlayerConnected(playerid)){if(PlayerInfo[playerid][pMarried] > 1){if(!IsPlayerInAnyVehicle(playerid)){SendClientMessage(playerid, COLOR_GREY, "Сексом занимаются только в машинах.");return 1;}new Car = GetPlayerVehicleID(playerid);tmp = strtok(cmdtext, idx);if(!strlen(tmp)){SendClientMessage(playerid, COLOR_GRAD1, "Prime: /pr(opse)sex [playerid/PartOfName]");return 1;}//giveplayerid = strval(tmp);giveplayerid = ReturnUser(tmp);tmp = strtok(cmdtext, idx);if(IsPlayerConnected(giveplayerid)){if(giveplayerid != INVALID_PLAYER_ID){if (ProxDetectorS(8.0, playerid, giveplayerid)){if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "* Вы не можете заниматься сексом с собой."); return 1; }if(IsPlayerInAnyVehicle(playerid) && IsPlayerInVehicle(giveplayerid, Car) || PlayerInfo[playerid][pMarriedTo] == giveplayerid){GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));GetPlayerName(playerid, sendername, sizeof(sendername));if(PlayerInfo[playerid][pSex] == 1){format(string, sizeof(string), "* Вы занялись сексом с вашей женой.");SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);}if(PlayerInfo[playerid][pSex] == 2){format(string, sizeof(string), "* Вы занялись сексом с вашим мужем.");SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);}if(PlayerInfo[playerid][pSex] == 1){format(string, sizeof(string), " занялся сексом с женой.");Action(playerid, string);}else{format(string, sizeof(string), " занялась сексом с мужем.");Action(playerid, string);format(string, sizeof(string), " получает оргазм.", sendername);Action(playerid, string);}}else{SendClientMessage(playerid, COLOR_GREY, "Вы и другой игрок должны быть в одном автомобиле.");return 1;}}else{SendClientMessage(playerid, COLOR_GREY, "Этот игрок не рядом с вами!");return 1;}}}else{SendClientMessage(playerid, COLOR_GREY, "Игрок не в игре.");return 1;}}else{if(PlayerInfo[playerid][pSex] == 1){SendClientMessage(playerid, COLOR_GREY, "У вас нет жены!");}if(PlayerInfo[playerid][pSex] == 2){SendClientMessage(playerid, COLOR_GREY, "У вас нету мужа!");}}}//not connectedreturn 1;}Ко всем форвардам: forward Action(playerid, string[]);Ко всем пабликам: public Action(playerid, string[]){new sendername[MAX_PLAYER_NAME], action[256];GetPlayerName(playerid, sendername, sizeof(sendername));format(action, sizeof(action), "%s %s", sendername, string);ProxDetector(30.0, playerid, action, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);SetPlayerChatBubble(playerid, string, COLOR_PURPLE, 30.0, 10000);}[/font]Для этого в моде должны быть следующие значения: pMarried Бонус: Дрочка и Проверка по Полу if(strcmp(cmd, "/дрочить", true) == 0 || strcmp(cmd, "/lhjxbnm", true) == 0){if(PlayerInfo[playerid][pSex] == 1)if(Drochit[playerid]==0){ApplyAnimation(playerid,"PAULNMAC","wank_loop",4.1,1,0,0,1,0);format(string, sizeof(string), "начинает дрочить.");Action(playerid, string);Drochit[playerid] = 1;}elseif(PlayerInfo[playerid][pSex] == 1)if(Drochit[playerid]==1){format(string, sizeof(string), "перестаёт дрочить.");Action(playerid, string);ClearAnimations(playerid);Drochit[playerid] = 0;}elseif(PlayerInfo[playerid][pSex] >= 2){SendClientMessage(playerid, COLOR_GREY, "Вы не можите дрочить, вы женщина!");}return 1;} Ко всем new: new Drochit[MAX_PLAYERS]; Что сделать:
  20. Mr.Kiruha_Lamer

    Создание фракции

    Приветствую пользователи! Меня попроси сделать урок по созданию фракции! И так ,будет создавать фракцию : Увд Приступаем к установки : Добовляем к #define : #define COP 1 Если у Вас нет переменной сохранения лидерства или членства ,ставим в массив (enum pInfo) : pMember, pLeader, pRank, Далее делаем спавн для Увд : if (PlayerInfo[playerid][pMember] == 1|| PlayerInfo[playerid][pLeader] == 1)// При желании меням на свой id фракции { SetPlayerToTeamColor(playerid); // Устанавливаем цвет фракции(Безцветный) SetPlayerPos(playerid, 2510.9456,-2131.8569,23.4558); // Сам спавн(id игрока,ось X,ось Y,ось Z ,при желании можете поставить поворот) SetPlayerInterior(playerid,0); // id интерьера ,если спавн на улице ставим 0 SetPlayerVirtualWorld(playerid,0);// id мира ставим ,такой-же какой и id интерьера PlayerInfo[playerid][pInt] = 0; // Сохраняем интерьер в файл Если у Вас есть stock или public ShowStats то ставим следующее : else if(PlayerInfo[targetid][pMember] == 1 || PlayerInfo[targetid][pLeader] == 1) ttext = "УВД"; Далее делаем к статистике ранги игрока находящийся в УВД : else if(PlayerInfo[targetid][pMember] == 1 || PlayerInfo[targetid][pLeader] == 1) { if(PlayerInfo[targetid][pRank] == 1) rtext = "1 ранг"; else if(PlayerInfo[targetid][pRank] == 2) rtext = "2 ранг"; else if(PlayerInfo[targetid][pRank] == 3) rtext = "3 ранг"; else if(PlayerInfo[targetid][pRank] == 4) rtext = "4 ранг"; else if(PlayerInfo[targetid][pRank] == 5) rtext = "5 ранг"; else if(PlayerInfo[targetid][pRank] == 6) rtext = "6 ранг"; else rtext = "1 ранг"; } Если есть команда /invite то добавляем следующие : else if(PlayerInfo[playerid][pLeader] == 1) { PlayerInfo[para1][pTeam] = 5; gTeam[para1] = 5; ftext = "УВД"; ChosenSkin[para1] = 103; SetPlayerSkin(para1, 294/*Тут вписываем ваш скин*/); } Далее в команду /makeleader ,если она есть ,ищем : else if(level == 0) После неё добавляем : else if(level == 1) { PlayerInfo[para1][pChar] = 297/*Тут ваш скин*/; } Далее ищем следующее строку : (Примечание : у вас может быть другой максимальный id фракции) if(level > 1/*Максимальный id фракции*/ || level < 0) Изменяем на один больше ,должнополучится : if(level > 2/*Максимальный id фракции*/ || level < 0) При желании создаём чат фракции ,в команду (/r)adio добавляем : if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1) { else if(PlayerInfo[playerid][pRank] == 6) { format(string, sizeof(string), "6 ранг", GetPlayerNameEx(playerid), result); } else if(PlayerInfo[playerid][pRank] == 5) { format(string, sizeof(string), "5 ранг", GetPlayerNameEx(playerid), result); } else if(PlayerInfo[playerid][pRank] == 4) { format(string, sizeof(string), "4 ранг", GetPlayerNameEx(playerid), result); } else if(PlayerInfo[playerid][pRank] == 3) { format(string, sizeof(string), "3 ранг", GetPlayerNameEx(playerid), result); } else if(PlayerInfo[playerid][pRank] == 2) { format(string, sizeof(string), "2 ранг", GetPlayerNameEx(playerid), result); } else if(PlayerInfo[playerid][pRank] == 1) { format(string, sizeof(string), "1 ранг", GetPlayerNameEx(playerid), result); } else { format(string, sizeof(string), "** Рядовой %s: %s,", GetPlayerNameEx(playerid), result); } SendRadioMessage(1, -1, string); printf("%s", string); return 1; } Автор урока : Trateus
  21. Для начала вам нужно создать объекты открытых и закрытых ворот. Для этого используется функция CreateObject CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Закрытые ворота CreateObject(969, 2720.3772,-2508.3069,12.6,0, 0.0000, 90);//Открытые ворота К new new gate1; Теперь создадим объект ворот на сервере В public OnGameModeInit засуньте строчку с функцией CreateObject: gate1 = CreateObject(ид_объекта, x,y,z, поворот_x, поворот_y, поворот_z);// Укажите ваши данные о ЗАКРЫТЫХ воротаx Для простого примера я создам ворота public OnGameModeInit() { gate1 = CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Если у вас есть этот public то просто вставте эту строчку с созданием объекта return 1; } Так, ворота созданы, но теперь их надо заставить двигаться в public OnPlayerCommandText if(!strcmp(cmdtext, "/opengate", true)) { if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот { MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически } } K forward forward CloseGate1(); В конец мода public CloseGate1() { MoveDynamicObject(gate1, 2720.3772,-2409.7523,12.6, 2.0);//Двигаем ворота на позицию закрытых ворот return 1; } И так, ворота созданы и вы теперь можете их открыть командой /opengate Теперь делаем открытие ворот кнопкой. В public OnPlayerKeyStateChange if(newkeys & KEY_WALK) // На кнопку АЛЬТ (alt) { if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот { MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически } } Вот и всё!Ворота закрываються автоматически! Автор ~S1mple
  22. BroKlays

    Поворотники

    Сегодня я расскажу вам о создании поворотников 1)Для начала заведём переменную для объектов наших поворотников Ко всем new new Blink[MAX_VEHICLES][4]; // Обьекты для поворотников 2)Теперь сделаем конструкцию enum для поворотников enum VehControl { vLeftBlink, vRightBlink, } new VehInfo[MAX_VEHICLES][VehControl]; 3)Теперь надо сделать "убивание" поворотников на случай, если авто зафиксятВ public OnVehicleSpawn(vehicleid) DestroyObject(Blink[vehicleid][0]); DestroyObject(Blink[vehicleid][1]); VehInfo[vehicleid][vRightBlink] = 0; DestroyObject(Blink[vehicleid][2]); DestroyObject(Blink[vehicleid][3]); VehInfo[vehicleid][vLeftBlink] = 0; 4)Теперь делаем поворотники по нажатию клавиш Q и EВ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) if(newkeys&64) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(VehInfo[v][vRightBlink] == 0) { Blink[v][0] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0, 0.0,0.0,100.0);//правый передний Blink[v][1] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,100.0);//правый задний AttachObjectToVehicle(Blink[v][0], v, 0.9, 2.5, 0.1, 0.0, 0.0, 0.0);//правый передний AttachObjectToVehicle(Blink[v][1], v, 0.9, -2.7, 0.1, 0.0, 0.0, 0.0);//правый задний VehInfo[v][vRightBlink] = 1; } else if(VehInfo[v][vRightBlink] == 1) { DestroyObject(Blink[v][0]); DestroyObject(Blink[v][1]); VehInfo[v][vRightBlink] = 0; } } } if(newkeys&256) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(VehInfo[v][vLeftBlink] == 0) { Blink[v][2] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0);//левыый передний Blink[v][3] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0);//левыый задний AttachObjectToVehicle(Blink[v][2], v, -0.9, 2.5, 0.1, 0.0, 0.0, 0.0);//левыый передний AttachObjectToVehicle(Blink[v][3], v, -0.9, -2.7, 0.1, 0.0, 0.0, 0.0);//левыый задний VehInfo[v][vLeftBlink] = 1; } else if(VehInfo[v][vLeftBlink] == 1) { DestroyObject(Blink[v][2]); DestroyObject(Blink[v][3]); VehInfo[v][vLeftBlink] = 0; } } } Вот и всё.
×

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

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