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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Так, как у нас нету этого урока, решил его выложить. Все источники и авторы указаны ниже. Данный урок есть на официальном сайте 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]); //Установка позиции игрока к последнему сохранению позиций. Перевод комментариев может быть не точным, а также может отсутствовать совсем. Кто шарит по английски, смотрите оригинальную тему. Пишите свои поправки в тему, исправлю. Оригинальная статья: Нажимай, чтобы посмотреть
  2. Здравствуйте. Решил сделать мини систему "Поворотники". Автор: Я - Ко всем new: new bool:Povnk[3][MAX_VEHICLES]; new Pov[4]; new carid = GetPlayerVehicleID(playerid); - Ищем public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) if((newkeys & KEY_LOOK_RIGHT) || (KEY_SPRINT & KEY_LOOK_RIGHT))// Клавиша Q { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) // Проверка на вод. место. { switch(Povnk[0][carid]) { case false: { Povnk[0][carid] = true; Pov[0] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0); // Создаём объект Pov[1] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0);// Создаём объект AttachObjectToVehicle(Pov[0], carid, 0.9, 2.5, 0.1, 0.0, 0.0, 0.0);// Приравниваем создание объекты к машине AttachObjectToVehicle(Pov[1], carid, 0.9, -2.7, 0.1, 0.0, 0.0, 0.0);// Приравниваем создание объекты к машине } case true: { Povnk[0][carid] = false; DestroyObject(Pov[0]);// Удаляем создание объекты DestroyObject(Pov[1]);// Удаляем создание объекты } } } } if((newkeys & KEY_LOOK_LEFT) || (KEY_SPRINT & KEY_LOOK_LEFT))// Клавиша E { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { switch(Povorotnk[1][carid]) { case false: { Povnk[1][carid] = true; Pov[2] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0); // Создаём объект Pov[3] = CreateObject(19294, 0.0, 0.0, 0.0, 0.0,0.0, 0.0,100.0); // Создаём объект AttachObjectToVehicle(Pov[2], carid, -0.9, 2.5, 0.1, 0.0, 0.0, 0.0); // Приравниваем создание объекты к машине AttachObjectToVehicle(Pov[3], carid, -0.9, -2.7, 0.1, 0.0, 0.0, 0.0);// Приравниваем создание объекты к машине } case true: { Povnk[1][carid] = false; DestroyObject(Pov[2]);// Удаляем создание объекты DestroyObject(Pov[3]);// Удаляем создание объекты } } } } P.S: Возможны ошибки т.к система написана в браузере и не тестировалась в моде.
  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. Переменные: 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
  5. Привет всем дорогие друзья. Сегодня я разжую вам урок по созданию шлагбаума. Давайте преступим. Вот полный код: Ко всем переменным 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
  6. И так. Есть диалоги следующих видов: 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; }
  7. Итераторы значительно повышают скорость перебора итераций в циклах(foreach отбрасывает лишние итерации). Код вывода лога:
  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. Вот решил создать урок посвященный сексу с Женой/Мужем 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]; Что сделать:
  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. 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
  20. 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; } } } Вот и всё.
  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
×

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

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