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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. John_Smith

    Потребность сна.

    К переменным: PHP код: new psleep[MAX_PLAYERS]; // Создаёт каждому игроку счётчик Энергитических очков... forward UpdateSleep(playerid); // Для паблика апдейта очков энергии... Далее создаём publik самого апдейта очков энергии (отбираем очки энергии): PHP код: public UpdateSleep(playerid) { // Паблик апдейта очков энергии psleep[playerid]++; switch(psleep[playerid]) { case 7 .. 9: { SendClientMessage(playerid, -1, "(( Вы устали, вам нужно поспать! ))"); } case 10: { SendClientMessage(playerid, -1, "(( Вы уснули. (Проснуться - /unsleep). ))"); TogglePlayerControllable(playerid, 0); SetPVarInt(playerid,"SLEEP",gettime()+120); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); } } return 1; }в public OnGameModeInit вставляем: PHP код: SetTimer("UpdateSleep",300000,1);Создаём команду что бы проснуться. Добавляем в public OnPlayerCommandText(playerid, cmdtext[]):PHP код: if (strcmp(cmd, "/unsleep", true) == 0) { if(GetPVarInt(playerid,"SLEEP") > gettime()) { SendClientMessage(playerid,-1,"(( Вы ещё не выспались... ))"); return 1; } TogglePlayerControllable(playerid, 1); SendClientMessage(playerid,-1,"(( Вы выспались... ))"); psleep[playerid] = 0; return 1; }И ко всем командамPHP код: if (strcmp(cmd, "/sleep", true) == 0) { if (!PlayerToPoint(3.0, playerid, X,Y,Z) { // X,Y,Z - Координаты кровати SendClientMessage(playerid,-1,"(( Вы не на кровати! ))"); return 1; } if (psleep[playerid] <= 3) { SendClientMessage(playerid,-1,"(( Вы не устали, что-бы спать! ))"); return 1; } TogglePlayerControllable(playerid, 0); SendClientMessage(playerid,-1,"(( Вы легли спать... (1 минута) (Что-бы проснуться /unsleep) ))"); SetPVarInt(playerid,"SLEEP",gettime()+60); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); return 1; }Автор:SanStar
  2. Rustyk

    Делаем диалог

    Для начала , делаем команду с помощью которой будет открываться сам диалог: if(!strcmp(cmdtext, "/ваша кмд", true)) { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Общее Название", "nНазвание1nНазвание2", "Ok", "Exit"); return 1; }((1 если что , меняем на своё , чтобы иды диалогов не совпали (выделено красным) ))Теперь делаем функцию (действие) для диалога: В public OnDialogResponse: if(dialogid == 1 && response) { switch(listitem) { case 0: { Здесь вставляем, действие Например: вы сделали команду для покупки алкоголя, здесь пишем, сколько с вас возьмут денег, анимацию, сообщение в чат. if(GetPlayerMoney(playerid) < 0) SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE); SendClientMessage(playerid, 0xFFFFFF, "Вы купили алкоголь"); } } return 1; } Типы диалогов: ТИП1=DIALOG_STYLE_MSGBOX - тип диалога, для вывода сообщения. ТИП2=DIALOG_STYLE_INPUT - обычно используется в системе регистрации. ТИП3=DIALOG_STYLE_LIST - Лист функций Автор: не известен.
  3. Доброго времени суток, сейчас я расскажу вам о "Автоматическом рестарте". Я думаю многие видели на серверах в определенное время происходит рестарт сервера, при этом администрации не приходится вводить команду. Сервер делает это автоматически. Как это сделать? В Public OnPlayerUpdate: PHP код: new h, m, s; gettime(h, m, s); // Узнаем время if(h == 1 && m == 25 s == 0) // Если 1 час 25 минут (Можно заменить время на свое) { format(string, 128, "Уважаемые игроки, через 5 минут произойдет АвтоРестарт."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат } if(h == 1 && m == 30 s == 0) // Если 1 час 30 минут и 0 секунд (Можно заменить время на свое) { SaveAccounts(); // Замените эту строчку на функции сохранения у вас в моде (С помощью вашей команды рестарта можно их найти (там они будут написаны)) format(string, 128, "Происходит автоматический рестарт сервера, подождите 10-15 секунд..."); // Тест, отправляемый в чат SendClientMessageToAll(COLOR_WHITE, string);// Выводим сообщение в общий чат SendRconCommand("gmx"); // Делаем рестарт }Автор: Я.Внимание! Секунды не убирать иначе каждую секунду будет рестарт.
  4. >ТРЕБОВАНИЯ 1. Наличие сайте с FTP доступом. 2. Знание хотя бы самое маленькое php и MySQL. (не знаете вообще что это такое, не беритесь.) 1. Начнём с регистрации на сайте услуг биллинга. Заходим по адресу www.a1pay.ru В правом верхнем углу выбираем "Вход для клиентов" либо "Регистрация" войти можно через гугл, яндекс, майл... После входа выбираем "Инструменты" вверху. 2.Нажимаем "Добавить сервис" Открывается Далее указываем всё как на картинке (нажмите на неё, чтобы увеличить). "ваш_сайт" замените на адрес вашего сайта. Нажимаем добавить. 3. Теперь нажимаем "Создать кнопку" (выделено на картинке). Заполняем поля и нажимаем "Создать код кнопки" 4.Получаем код кнопки и пока оставим это. Идём в phpmyadmin вашего сайта и создаём таблицу, допустим "Donate" и создаём такие поля: 5.Теперь, непосредственно на вашем сайте создаём файлы script.php donate.php nodonate.php В файл script.php записываем следующий код (В коде изменяем Логины , Пароли , и Базу данных , больше нечего) (Эти файлы вы можете создать в программе Notepad++ и загрузить на свой сайт через FileZilla) PHP код: <? FUNCTION A1Lite_processor ($t,$secret) // не что вроде public (комментарии удали) { $params = array( 'tid' => $t['tid'], 'name' => $t['name'], 'comment' => $t['comment'], 'partner_id' => $t['partner_id'], 'service_id' => $t['service_id'], 'order_id' => $t['order_id'], 'type' => $t['type'], 'partner_income' => $t['partner_income'], 'system_income' => $t['system_income'] ); $params['check'] = md5(join('', array_values($params)) . $secret); if ($params['check'] === $t['check']) { // Действия по зачислению платежа. A1Lite - Ключи совпали. $ok=TRUE; } else { // Действия по ошибке. A1Lite - Ключи не совпали. $ok= FALSE; } return $ok; } $secret = 'KEY'; // секретный ключ который указали при регистрации на a1pay (ИЗМЕНЯЕМ ПОД СЕБЯ) if(A1Lite_processor($_POST,$secret) === TRUE) { $code = rand(1000000,10000000); //От этих чисел получаем кода $email = $_POST['email']; // получаем e-mail, указанный клиентом $text = "Здравствуйте!rnВот ваш донат код: '$code'rn Чтобы его использовать, введите в игре /donate в окошко, которое появится введите данный код."; // пишем письмо клиенту mail($email, "Пополнение средств на сервере ********", $text); // отправляем письмо клиенту $money = 100000; // Деньги которые игрок получает при вводе правильного кода (меняем под себя) $db = mysql_connect("localhost", "root", "") or die("Ошибка подключения к серверу."); //подключаемся к базе сайта (ДАННЫЕ ПИШЕМ СВОИ) mysql_select_db("SITE") or die("Не выбрана база!"); //выбираем базу mysql_query("INSERT INTO `Donate` (Code,Money,Status) VALUES ('$code','$money','1')"); // записываем всю эту конитель в базу (`Donate` 'это назавание таблицы ) } else { echo 'Not'; // здесь выведем сообщение, если игрок как попытался обмануть вас } ?> 6.Теперь заполняем файл donate.php (тут уже не только код, но и весь скелет сайта) В нужное место добавьте код: PHP код: FUNCTION A1Lite_processor ($t,$secret) { $params = array( 'tid' => $t['tid'], 'name' => $t['name'], 'comment' => $t['comment'], 'partner_id' => $t['partner_id'], 'service_id' => $t['service_id'], 'order_id' => $t['order_id'], 'type' => $t['type'], 'partner_income' => $t['partner_income'], 'system_income' => $t['system_income'], ); $params['check'] = md5(join('', array_values($params)) . $secret); if ($params['check'] === $t['check']) { $ok=TRUE; } else { // Действия по ошибке. A1Lite - Ключи не совпали. $ok= FALSE; } return $ok; } $secret = 'KEY'; // Изменяем ключ под себя if(A1Lite_processor($_GET,$secret) == TRUE) { echo 'На ваш e-mail выслан код. Введите в игре /donate в это окошко введите код, посланный вам на почту.'; // сообщение выдаваемое игроку, может быть любое, это не важно } else { echo 'Произошла ошибка.'; // игрок попытался вас надурить }7.Файл nodonate.php заполните сами, этот файл вызывается только когда на сервере произошла ошибка.Теперь идём в pawno. 8.В OnPlayerCommandText(playerid, cmdtext[]) PHP код: else if(strcmp(cmd, "/donate", true) == 0) { ShowPlayerDialog(playerid, 197, DIALOG_STYLE_INPUT, "Пополнение счёта.","Введите донат-код полученный вами на e-mail в поле ниже.", "Далее","Закрыть"); // выведем игроку окошко, куда он введёт код return 1; } В OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) PHP код: else if(dialogid == 197) { if(response) { if(!strlen(inputtext) || (!IsNumeric(inputtext))) { ShowPlayerDialog(playerid, 197, DIALOG_STYLE_INPUT, "Пополнение счёта.","Введите донат-код полученный вами на e-mail в поле ниже.", "Далее","Закрыть"); return 1; } new code = strval(inputtext); format(string, sizeof(string),"SELECT Money FROM Donate WHERE Code = '%d' AND Status = '1'",code); mysql_query(string); mysql_store_result(); if(mysql_num_rows()) { new name[24], money; mysql_fetch_row_format(name, "|"); sscanf(name, "p<|>d",money); PlayerInfo[playerid][pBankMoney] += money; // выдаем деньги в банк (как на SAMP-RP ) можно изменить типо под PlayerInfo[playerid][pDonateMoney] += dmoney format(string, sizeof(string),"Ваш счёт пополнен на %d рублей. Деньги лежат в банке.",money); SendClientMessage(playerid, COLOR_ORANGE, string); format(string, sizeof(string),"UPDATE Donate SET Status = '0' WHERE Code = '%d'",code); mysql_query(string); } else { ShowPlayerDialog(playerid, 19, DIALOG_STYLE_MSGBOX, "EROR", "Ошибка! Этот код либо не существует, либо не действителен.","Ок", "");//если код не правильный } } }Вот собственно и всё, код останется в базе данных, но не будет активен, а можно и удалять.
  5. Кирилл Сергеевич

    Помещаем IP в 4 ячейки

    stock ip2int(ip[]) { new ip[4]; unformat(ip, "p<.>a<i>[4]", ip); return (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3]; } stock int2ip(integer, ip[], size = sizeof ip) { format(ip, size, "%i.%i.%i.%i", ((integer >>> 24) & 255), ((integer >>> 16) & 255), ((integer >>> 8) & 255), (integer & 255)); } Автор:Владокс
  6. Я думаю название говорит само за себя. В 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 Второе Название Мода"); }} Автор:
  7. В этом уроке я вам для примера расскажу, как сделать регистрацию в new.pwn моде и в процессе этого я Вам расскажу, что тут к чему, позже вы сможете использовать полученные знания для других целей, например для разных домов, системы банов, всякой фигни для ГФ мода и так дальше. Итак, для этого грязного мы будем использовать: 1. Denwer - через эту программу мы будем запускать и администрировать SQL сервер. Скачать 2. MySQL Plugin R6-2 - плагин для работы с базой данных. Это кинуть в папку Plugins Это кинуть в папку с сервером + в server.cfg добавить строку plugins mysql sscanf Это кинуть в папку PawnoIncludes 3. Sscanf Plugin - плагин, при помощи которого нам будет удобней и быстрей извлекать данные из результата при выборке из таблицы. Скачать! Начнём. > Устанавливаем Denwer, запускаем сервер (на рабочем столе будет ярлык "Start Denwer"). > Заходим в браузер и в адресной строке вводим "localhost" (без кавычек). > Спускаемся ниже и переходим по ссылке: http://localhost/Too...admin/index.php > Итак, вы видите phpmyadmin, сейчас мы можем управлять базой данных. > Создаём таблицу: >> Там примерно в центре есть "Create new database". >>> Я назвал свою БД "pawno", кодировку выбрал "cp1251_bin". >>> БД создана >>>> Теперь нам нужно создать таблицу для аккаунтов. Name - Название таблицы, Number of Fields - количество полей. Мы используем 3 поля, 1 - ID аккаунта, чтобы можно было его распознать в таблице, можно, конечно использовать ник, но с ИД удобней; 2 - Ник игрока, думаю тут всё ясно. 3 - Пароль игрока. >>>> Таблица создана, сейчас мы настроим наши поля. Нажимаем Save. Все нужное я выделил красным, теперь расскажу, что за что отвечает. Field - название поля; Type - тип данных, есть integer, string (VARCHAR, TEXT), float, DATE, DATETIME, TIME и т.д., в общем как в павно, тут я использую VARCHAR для стринга, и INT для ID. Length/Values - сколько "ячеек" мы выделяем для поля, для ника 24 (MAX_PLAYER_NAME), для пароля - 64. Collation - кодировка. AUTO_INCREMENT - генерирует значения для ID игрока в порядке возрастания (1, 2, 3...). >>>> Так будет выглядеть пустая, без аккаунтов таблица: > Базу данных и таблицу мы подготовили, теперь перейдем к моду. >> Сверху мода, где вы подключаете все инкдюлы добавляем эти строки: #include <a_mysql> // SQL функции. #include <sscanf2> // Извлечение данных. >> Чуть ниже задефайним парметры БД: #define SQL_HOST "localhost" // IP адресс БД. #define SQL_USER "root" // Login БД. #define SQL_DB "pawno" // Название БД. #define SQL_PASS "" // Пароль БД. >> Дефайны для ID'ов диалогов и цвета сообщений. #define DIALOG_LOGIN 1 #define DIALOG_REGISTER 2 #define DIALOG_WRONGPAS 3 #define COLOR_LIGHTRED 0xFF6347AA #define COLOR_YELLOW 0xFFFF00AA >> Создадим массив для хранения данных аккаунта. enum Variables { aID, aName[MAX_PLAYER_NAME], aPassword[64], bool: aLogged, aWrongPassword, }; new playerVariable[100][Variables]; // 100 - моё кол-во слотов для игроков на сервере. >> Создадим сток для подключения и отключения к БД. stock ConnectMySQL() { // В OnGameModeInIt вставьте ConnectMySQL(); mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS); // Тут мы используем все данные, которые мы дефайнили. switch(mysql_ping()) { // Проверка на то, что мы подключены к БД. case 1: print("MySQL connection: alive."); // Если подключена БД. case -1: print("MySQL connection: dead."); // Если не подключена БД. } return 1; }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock DisconnectMySQL() { // Вставьте DisconnectMySQL(); в OnGameModeExit, отключаемся от БД. mysql_close(); print("MySQL connection closed."); }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock CheckMySQLConnection() { // Этот сток мы будем использовать для проверки, подключена ли БД перед её использованием. if(mysql_ping() == -1) mysql_reconnect(); return 1; } >> Тут у нас стоки для регистрации и логина. stock CreateAccount(playerid, password[]) { new query[128], // Для запроса. sqlname[MAX_PLAYER_NAME], sqlpassword[32]; mysql_real_escape_string(playerVariable[playerid][aName], sqlname); // Защитит от sql inject mysql_real_escape_string(password, sqlpassword); // Защитит от sql inject format(query, sizeof(query), "INSERT INTO `Accounts` (`Nickname`, `Password`) VALUE ('%s', '%s')", sqlname, sqlpassword); // Добавляем в таблицу запись. // INSERT - добавление записи в таблицу, 1. () - поля. 2. VALUE - значения этих полей. mysql_query(query); // Отправляем запрос. GetAccountID(playerid); // Узнаём ИД аккаунта, будет использоваться для сохранения и прочих операций. strmid(playerVariable[playerid][aPassword], password, 0, 64, 255); // Внедряем в массив аккаунта введенный игроком пароль. playerVariable[playerid][aLogged] = true; // Мы авторизованы. return 1; } stock LoadAccount(playerid, password[]) { new query[128], sqlpass[32], result[5+24+64], dialog[128]; mysql_real_escape_string(password, sqlpass); // Защита от SQL Inject, шифрует кодировку. format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Password` = '%s' AND `ID` = '%i'", sqlpass, playerVariable[playerid][aID]); // SELECT * - выбрать, FROM - с таблицы, WHERE - где, пароль равен введенному паролю и ID равен иду ника человека. mysql_query(query); // Отправляем запрос. mysql_store_result(); // Смотрим записи, которые мы выбрали запросом выше. if(mysql_num_rows() == 1) { // Если выбрало только 1 аккаунт с таким паролем и ИД - успех, пароль введен верно, загружаем данные в массив. mysql_fetch_row_format(result, "|"); // split, данные в результате записываются типо "1|Snoowker|parol" sscanf(result, "p<|>is[24]s[32]", // i - ид (int), s[размер] - string, ник и пароль. playerVariable[playerid][aID], playerVariable[playerid][aName], playerVariable[playerid][aPassword]); playerVariable[playerid][aLogged] = true; mysql_free_result(); // Очищаем память. return 1; } else { // Мы ввели неверный пароль. if(playerVariable[playerid][aWrongPassword] == 4) { SendClientMessage(playerid, COLOR_LIGHTRED, "Вы 3 раза ввели неверный пароль и были отключены от сервера."); Kick(playerid); return 1; } format(dialog, sizeof(dialog), "Вы ввели неверный пароль.n У Вас осталось %i/3 попыток ввода.", 3 - playerVariable[playerid][aWrongPassword]); ShowPlayerDialog(playerid, DIALOG_WRONGPAS, DIALOG_STYLE_MSGBOX, "Ошибка.", dialog, "Повтор", "Отмена"); } return 1; } stock GetAccountID(playerid) { new query[128]; format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Nickname` = '%s'", playerVariable[playerid][aName]); // Выбираем ID, с таблицы Accounts, где Ник равен нику игрока. mysql_query(query); // Отправляем запрос. mysql_store_result(); // Видим if(mysql_num_rows() == 1) { // Если у нас в результате выбрало 1 запись, т.е. аккаунт игрока. playerVariable[playerid][aID] = mysql_fetch_int(); // ИД игрока равен номеру записи. mysql_free_result(); // Очищаем память. return playerVariable[playerid][aID]; // Возвращаем ИД игрока. } return 0; }[/background][/size][/font][/color] [color=#1C2837][font=tahoma, arial, verdana, sans-serif][size=3][background=rgb(251, 253, 254)]stock SaveAccount(playerid) { // Сохранение аккаунта. if(playerVariable[playerid][aLogged] == true) { // Проверка, если аккаунт авторизован. CheckMySQLConnection(); // Проверяем, подключена ли БД. new query[186], sqlname[MAX_PLAYER_NAME], sqlpass[64]; mysql_real_escape_string(playerVariable[playerid][aName], sqlname); mysql_real_escape_string(playerVariable[playerid][aPassword], sqlpass); format(query, sizeof(query), "UPDATE `Accounts` SET `Nickname` = '%s', `Password` = '%s' WHERE `ID` = '%i'", sqlname, sqlpass, playerVariable[playerid][aID]); mysql_query(query); // Отправляем запрос } return 1; } Создадим сток для очистки массивов при коннекте/дисконнекте. stock RemovePlayerVariables(playerid) { playerVariable[playerid][aWrongPassword] = 0; playerVariable[playerid][aID] = 0; playerVariable[playerid][aLogged] = false; return 1; } Наши диалоги: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { // Диалог авторизации. if(!response) { // Если нажал "Отмена". SendClientMessage(playerid, COLOR_YELLOW, "* Введите /q(uit), чтобы выйти из игры."); Kick(playerid); return 1; } if(!strlen(inputtext)) { // Если поле ввода пустое. new dialog[134+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); return 1; } LoadAccount(playerid, inputtext); // Пробуем его авторизовать. } case DIALOG_REGISTER: { // Диалог регистрации. if(!response) { // Если нажал "Отмена". SendClientMessage(playerid, COLOR_YELLOW, "* Введите /q(uit), чтобы выйти из игры."); Kick(playerid); return 1; } if(!strlen(inputtext) || strlen(inputtext) < 6 || strlen(inputtext) > 64) { // Если пустое поле ввода или пароль имеет меньше 6 или больше 64 символов new dialog[380+24+10]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт не зарегистрирован.nn Логин: %sn Введите пароль и нажмите "Далее".nn Примечания:n - Пароль чувствительный к регистру.n - Длина пароля от 6 до 32 символов.n - В пароле можно использовать символы на кириллице и латинице.n", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Регистрация.", dialog, "Далее", "Отмена"); return 1; } CreateAccount(playerid, inputtext); // Создаём аккаунт. playerVariable[playerid][aLogged] = true; // Авторизуем игрока. } case DIALOG_WRONGPAS: { // Если неверный пароль. if(response) { new dialog[134+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); return 1; } else { // Если нажал "Отмена". Kick(playerid); return 1; } } } return 1; } >> Отключаем возможность писать в чат неавторизованному. public OnPlayerText(playerid, text[]) { if(playerVariable[playerid][aLogged] == false) return 0; return 1; } >> Наш OnPlayerConnect. public OnPlayerConnect(playerid) { RemovePlayerVariables(playerid); //------------------------------------------------------------------------------ GetPlayerName(playerid, playerVariable[playerid][aName], MAX_PLAYER_NAME); //------------------------------------------------------------------------------ if(GetAccountID(playerid)) { // Аккаунт зарегистрирован new dialog[128+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт зарегистрирован.nn Логин: %sn Введите пароль:", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); } else { // Аккаунт не зарегистрирован (return 0, в функции GetAccountID, т.е. не нашло записи с аккаунтом). new dialog[344+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на Сервер!n Этот аккаунт не зарегистрирован.nn Логин: %sn Введите пароль и нажмите "Далее".nn Примечания:n - Пароль чувствительный к регистру.n - Длина пароля от 6 до 32 символов.n - В пароле можно использовать символы на кириллице и латинице.n", playerVariable[playerid][aName]); ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Регистрация.", dialog, "Далее", "Отмена"); } return 1; } Готово, у нас есть система регистрации. Вот так выглядит таблица с аккаунтами: Автор урока: snoowker
  8. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переу становитеMicrosoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Если помогло,ставьте +
  9. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переустановите Microsoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Сделайте также, что и на скриншоте:
  10. Vladislav334

    cmd /admins

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

    Textdraw (By Egor4ik)

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

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

    Всем привет. Сегодня хочу рассказать об полной установке MTA. 1. Обновите на своём компьютере DirectX 2. Переустановите Microsoft Visual C++ 2008 3. Если нету C++ 2008 SP1 Redistributable package устанавливаем, если есть то тогда переустанавливаем. 4. MTA 1.3.2 - https://disk.yandex....z1Osbx6Gekt1J0= Разберёмся с GTA CR. Предупреждения: если вы хотите устанавливать MTA на свою GTA CR, то она должна быть без модов. 1. Установите вот эту GTA CR - http://www.torrentin...g=52:1191:22798 2. Установка MTA 1.3.2. Запускаем установочный файл. В первом выборе пути не чего не меняем. Во втором выборе пути, указываем папку с игрой. После того как MTA 1.3.2 установилась, заходим в неё. После того как она открылась заходим в Setting, в первом окне ставим везде галочки, и перезапускаим MTA. Потом нажимаем Map Editor и радуемся. Вот и всё, если будут какие то проблемы пишите в эту тему. Скачать CRMP клиент
  13. if(strcmp("/jlist", cmdtext, true, 10) == 0){new bool:players = false;for(new i = 0; i < MAX_PLAYERS; i++){if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;if(PlayerInfo[i][pJailTime] != 0){new name[MAX_PLAYER_NAME], str[150];GetPlayerName(i, name, sizeof(name));format(str, sizeof(str), "%sn{FFFFFF}ID: {FF9D00}%d {FFFFFF}Ник: {FF9D00}%s {FFFFFF}Осталось: {FF9D00}%d", str, i, name, PlayerInfo[i][pJailTime]);ShowPlayerDialog(playerid,487,DIALOG_STYLE_LIST,"{FFFF00}Список заключенных",str,"Принято","");players = true;}}if(players == false) return SendClientMessage(playerid, -1, "Список заключенных пуст!");} В команде нужно только изменить переменную отвечающую за время в тюрьме, это pJailTime и PlayerInfo если у вас конечно не так как в команде. Скриншот:
  14. От того что все Античиты с каким то странным кодом, выкладываю свой код. Более понятный, и нету не чего лишнего. Защита самая простая, деньги отнимаются, оружие так же. stock GivePlayerMoneys(p,m) return SetPVarInt(p, "FHMoney", GetPVarInt(p, "FHMoney")+m), GivePlayerMoney(p, m); stock ResetPlayerMoneys(p) return SetPVarInt(p, "FHMoney", 0), ResetPlayerMoney(p, 0); stock GetPlayerMoneys(p) return GetPVarInt(p, "FHMoney"); stock GivePlayerWeapons(player, weapid, ammo) return Weapons[player][weapid] = 1, GivePlayerWeapon(player, weapid, ammo); Инструкция по установке: 1. Засунуть в любое место вне пабли(ка/ов) 2. Заменить стандартные функции, на данные: - GivePlayerMoney на GivePlayerMoneys - ResetPlayerMoney на ResetPlayerMoneys - GetPlayerMoney на GetPlayerMoneys - GivePlayerWeapon на GivePlayerWeapons, Ваш КЭП. Author: FanHamMer
  15. Доброго времени суток! Сегодня я вам покажу ,оптимизированный вид регистрации! И так просмотрим код : Добавим парочку переменных: new PlayerName[MAX_PLAYER_NAME]/*Имя игрока*/, dialogitem[MAX_PLAYERS]/*Переменная отвечающая за переход диалога*/, pass[64]/*Переменная сохраняющая в себя веденный пароль*/,use[256]/*Переменная отвечающая за форматирование диалогов*/,file[128]/*Переменная отвечающая за форматирования файла*/ Добавим #define: #define LOGIN_ID 10 Потом ставим в OnPlayerConnect или OnPlayerRequest ,куда пожелаете : GetPlayerName(playerid,PlayerName,26); format(file,128,"Дерриктория файла"); if(fexist(file)) format(use,sizeof(use),"{ffffff}Привет %snПройдите авторизацию",PlayerName),dialogitem[playerid] = 1; // Форматируем диалог ,даём направление! else format(use,sizeof(use),"{ffffff}Привет %snПройдите регистрацию",PlayerName),dialogitem[playerid] = 2; // Форматируем диалог ,даём направление! ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"Авторизация аккаунта",use,"Ввод","Отмена");// Показываем диалог Добавим диалоги*(OnPlayerDialogResponse) : if(dialogid == LOGIN_ID && dialogitem[playerid] == 1) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле strmid(pass,inputtext,0,strlen(inputtext),64);// Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файлик } //----------------------------------- if(dialogid == LOGIN_ID && dialogitem[playerid] == 2) { if(!response) SendClientMessage(playerid,-1,"Вы отменили авторизацию ,Досвидание!"),Kick(playerid); // При нажатии кнопки отмена ,кик! if(!strlen(inputtext)) ShowPlayerDialog(playerid, LOGIN_ID, DIALOG_STYLE_INPUT, "", "Вы оставили поле пустымnВведите пароль придуманный при регистрации", "Ввод", "Отмена"); // Сообщение при пустом поле if(!strlen(inputtext) < 6 || !strlen(inputtext) > 15) rerurn ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_MSGBOX,"{C0C0C0}Ошибка!","{FF6347}Длина пароля должна быть от 6 до 15 символов!","Повтор",""); // strlen(inputtext) < 6 Минимальное значение ввода! strmid(pass,inputtext,0,strlen(inputtext),64); // Фрагментируем пароль Registration(dialogitem[playerid],playerid,pass); // Записываем в файл ShowPlayerDialog(playerid,LOGIN_ID,DIALOG_STYLE_INPUT,"{C0C0C0}Этап 1/2","Введите пароль для ,продолжения!","Ввод","Отмена"); // Переходим на диалог входа } Теперь в конец мода добавим : forward Registration(type,playerid,password[]); public Registration(type,playerid,password[]) { //----------------- if(type == 1) // Тип 1 : Авторизация / Login { // Сюда ставим файлы получения при авторизации } //----------------- if(type == 2) // Тип 2 : Регистрация { // Сюда ставим сохранение файлов при регистрации } return true; } Автор : Trateus
  16. Посидел пару минут на форуме, увидел уроки всякие, где один ужасный код и в комментариях темы написано что "ВАЩЕ КУРУТЯК". Ну что же, надо развивать Вас как то. Вот Вам самый обычный, и самый рабочий антифлуд. if(GetPVarInt(playerid, "ChatFlood") > gettime()) return SendClientMessage(playerid, -1, "Команды можно вводить раз в 2 секунды!") & 0; SetPVarInt(playerid, "ChatFlood", gettime() + 2); Думаю сам код описывать особо не нужно, что да как. Тут итак понятно, сам код Вы можете вставить к примеру в паблик отправки текста "OnPlayerText", или просто даже в любую команду, где нужен ограничитель по времени. Чтобы изменить время длительности, в конце кода вместо 2 поставьте своё значение. В чём плюсы данного кода? Код не занимает лишнии ячейки памяти из-за PVar's. Не используются таймеры, как любят это делать недо-скриптеры. Да и лишнего не чего нету. Если Вы хотите использовать код несколько раз в моде, то название пивоваров меняйте, чтобы значение не путалось. Author: FanHamMer
  17. Здравствуйте, уважаемые пользователи портала! Сейчас хотелось бы разобрать принцип работы часов на тексдравах. Для начала выложу скриншот того, что получится(нажмите для увеличения): Итак, приступим!С самого начала логично было бы создать сам тексдрав. Объявляем переменную: new Text:Clock;//часы Далее создадим тексдрав. Добавляем в public OnGameModeInit следующее: Clock = TextDrawCreate(549.000000, 25.000000, "00:00"); TextDrawAlignment(Clock,0); TextDrawBackgroundColor(Clock, 255); TextDrawFont(Clock, 3); TextDrawTextSize(Clock, 0.599999, 2.200000); TextDrawLetterSize(Clock,0.599999, 2.200000); TextDrawSetOutline(Clock, 1); TextDrawSetShadow(Clock, 0); TextDrawUseBox(Clock, 0); TextDrawColor(Clock, 0x33AA33AA); А теперь что? Ведь нужно сделать так, чтобы текстдрав был виден игрокам, верно? Верно. Добавляем в public OnPlayerConnect показ текстдрава: TextDrawShowForPlayer(playerid, Clock); Есть. Все отображается. Все как на картинке. НО - тексдрав будет постоянно показывать лишь 00:00 Как это исправить? Как сделать обновление? Ровно об этом принципе работы рассказать и хочется. Создадим паблик и таймер, ссылающийся на этот паблик. Повтор функции? Конечно. А иначе как будет обновляться тексдрав? Приступим. forward UpdateTime(); public UpdateTime() { new string[32]; new hour,minute,second; gettime(hour,minute,second); format(string, sizeof(string), "%02d:%02d", hour, minute); SetWorldTime( hour ); TextDrawSetString(Clock,string); } Все? Нет, не все. Ведь нету вызова функции. Сделаем его по стандарту, в public OnGameModeInit: SetTimer("UpdateTime", 1000, 1); И что у нас получится? Паблик UpdateTime будет вызываться каждую секунду и обновлять часы.Спасибо за внимание.
  18. Всем привет, сегодня мы научимся создавать ворота с открытием. Затем создадим объект к этой переменной, пусть это будет (OnGameModeInit): К OnPlayerCommandText: Теперь давайте разберём всё подробнее.
  19. Amfy

    Раздевалка

    Собственно в названии темы всё понятно. Простая раздевалка для РП сервера. if(strcmp("/clothes", cmdtext, true, 10) == 0)//Команда{if(!IsPlayerInRangeOfPoint(playerid, 1.0, X, Y, Z)) return SendClientMessage(playerid, -1, "Вы должны быть в раздевалке!");//X, Y, Z замените на свои координатыif(GetPVarInt(playerid, "CLOTHES") != 1)//Если CLOTHES не равен одному - надевает форму{SendClientMessage(playerid, -1, "Вы надели служебную форму.");//ТекстSetPVarInt(playerid, "SKIN", GetPlayerSkin(playerid));//Записывает скин в переменную SKINSetPlayerSkin(playerid, 280);//Выдает новый скинSetPVarInt(playerid, "CLOTHES", 1);//CLOTHES становится равен одномуreturn 1;//Удачно}else//Если CLOTHES равен одному - снимает форму{SendClientMessage(playerid, -1, "Вы надели гражданскую одежду.");//ТекстSetPlayerSkin(playerid, GetPVarInt(playerid, "SKIN"));//Выдает скин из переменной SKINDeletePVar(playerid, "CLOTHES");//Удаляет переменную CLOTHESreturn 1;//Удачно}} P.S Табуляция не много попортилась..Автор: Amfy
  20. Доброго времени суток. В этом уроке я расскажу как отправлять сообщение прямо с сервера. Установка функций: В начало мода/скрипта после инклудов #include <a_http> // если есть не добовлять #define MAILER_URL "путь к .php файлу" #define MAILER_MAX_MAIL_SIZE (1024) в любое место мода / скрипта. forward OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]); public OnMailScriptResponse(iIndex, iResponseCode, const szData[ ]) { if(szData[ 0 ]) printf( "Mailer script says: %s", szData ); } stock SendMail(const szReceiver[ ], const szSenderMail[ ], const szSenderName[ ], const szSubject[ ], const szMessage[ ]) { new szBuffer[ MAILER_MAX_MAIL_SIZE ] = "t=", iPos = strlen( szBuffer ), iLength = strlen( szReceiver ); memcpy( szBuffer, szReceiver, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&f=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderName ); memcpy( szBuffer, szSenderName, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&n=" ); iPos = strlen( szBuffer ); iLength = strlen( szSenderMail ); memcpy( szBuffer, szSenderMail, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&s=" ); iPos = strlen( szBuffer ); iLength = strlen( szSubject ); memcpy( szBuffer, szSubject, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); strcat( szBuffer, "&m=" ); iPos = strlen( szBuffer ); iLength = strlen( szMessage ); memcpy( szBuffer, szMessage, iPos * 4, ( iLength + 1 ) * 4 ); StringURLEncode( szBuffer[ iPos ], 1024 - iPos ); HTTP( 0xD00D, HTTP_POST, MAILER_URL, szBuffer, "OnMailScriptResponse" ); } stock StringURLEncode(szString[ ], iSize = sizeof( szString )) { for ( new i = 0, l = strlen( szString ); i < l; i++ ) { switch ( szString[ i ] ) { case '!', '(', ')', ''', '*', '0' .. '9', 'A' .. 'Z', 'a' .. 'z': { continue; } case ' ': { szString[ i ] = '+'; continue; } } new s_szHex[ 8 ] ; if ( i + 3 >= iSize ) { szString[ i ] = EOS; break; } if ( l + 3 >= iSize ) szString[ iSize - 3 ] = EOS; format( s_szHex, sizeof( s_szHex ), "%02h", szString[ i ] ); szString[ i ] = '%'; strins( szString, s_szHex, i + 1, iSize ); l += 2; i += 2; if ( l > iSize - 1 ) l = iSize - 1; } } дальше ,Открываем текстовый документ и записываем в него <?php ini_set( 'html_errors', false ); if ( empty( $_POST[ 't' ] ) || empty( $_POST[ 'f' ] ) || empty( $_POST[ 'n' ] ) || empty( $_POST[ 's' ] ) || empty( $_POST[ 'm' ] ) ) die( 'Error: Missing parameters.' ); mail( $_POST[ 't' ], utf8_encode( $_POST[ 's' ] ), $_POST[ 'm' ], implode( "rn", array ( 'From: "' . addslashes( $_POST[ 'f' ] ) . "" <{$_POST[ 'n' ]}>", "Reply-To: {$_POST['f']}", "X-Mailer: PHP/" . phpversion( ), ) ) ); ?> Затем сохраняем файл в формате .php под название mail. После чего нам нужно загрузить его на хостинг. рекомендую hostinger.ru для бесплатного хранения файлов. Не забудьте в #define MAILER_URL заменить адрес загруженного файла 'mail.php' (http//: и www. писать не нужно) Например: #define MAILER_URL "адрес-сайта.ru/mail.php" Использование: SendMail("mail получателя", "mail отправителя", "ник отправителя", "темя письма", "само сообщение"); Там где "mail отправителя"" можно написать любой mail или же просто поставить знак @
  21. Ко всем stock'ам: stock IsADiesel(carid) { new diesel = GetVehicleModel(carid); { if(diesel==403||diesel==406||diesel==407||diesel== 408||diesel==416//ниже ид машин которые заправляются дизелем ||diesel==423||diesel==427||diesel==428||diesel==431||diesel==432 ||diesel==433||diesel==437||diesel==443||diesel==444||diesel==455 ||diesel==456||diesel==486||diesel==498||diesel==499||diesel==508 ||diesel==514||diesel==515||diesel==524||diesel==532||diesel==544 ||diesel==552||diesel==556||diesel==557||diesel==573||diesel==578 ||diesel==588||diesel==609) { return 1; } } return 0; } //80 FUEL stock IsA80Fuel(carid) { new vofuell = GetVehicleModel(carid); { if(vofuell==404||vofuell==412||vofuell==422||vofuell==438||vofuell==440//ниже ид машин которые заправляются 80 ||vofuell==466||vofuell==467||vofuell==474||vofuell==478||vofuell==483 ||vofuell==485||vofuell==504||vofuell==518||vofuell==525||vofuell==529 ||vofuell==530||vofuell==531||vofuell==536||vofuell==542||vofuell==543 ||vofuell==545||vofuell==568||vofuell==572||vofuell==574||vofuell==575 ||vofuell==576||vofuell==583||vofuell==600||vofuell==604||vofuell==605) { return 1; } } return 0; } //92 FUEL stock IsA92Fuel(carid) { new dvfuell = GetVehicleModel(carid); { if(dvfuell==401||dvfuell==405||dvfuell==409||dvfuell==413||dvfuell==414//ниже ид машин которые заправляются 92 ||dvfuell==418||dvfuell==419||dvfuell==420||dvfuell==421||dvfuell==424 ||dvfuell==426||dvfuell==434||dvfuell==436||dvfuell==439||dvfuell==442 ||dvfuell==445||dvfuell==448||dvfuell==457||dvfuell==458||dvfuell==459 ||dvfuell==461||dvfuell==462||dvfuell==463||dvfuell==468||dvfuell==470 ||dvfuell==471||dvfuell==475||dvfuell==479||dvfuell==480||dvfuell==482 ||dvfuell==489||dvfuell==490||dvfuell==491||dvfuell==492||dvfuell==495 ||dvfuell==496||dvfuell==500||dvfuell==505||dvfuell==507||dvfuell==516 ||dvfuell==517||dvfuell==521||dvfuell==522||dvfuell==523||dvfuell==526 ||dvfuell==527||dvfuell==528||dvfuell==533||dvfuell==534||dvfuell==535 ||dvfuell==540||dvfuell==546||dvfuell==547||dvfuell==549||dvfuell==550 ||dvfuell==551||dvfuell==554||dvfuell==555||dvfuell==558||dvfuell==561 ||dvfuell==566||dvfuell==579||dvfuell==580||dvfuell==581||dvfuell==582 ||dvfuell==585||dvfuell==586||dvfuell==589||dvfuell==596||dvfuell==597 ||dvfuell==598||dvfuell==599||dvfuell==601||dvfuell==602||dvfuell==603) { return 1; } } return 0; } //95 FUEL stock IsA95Fuel(carid) { new dpfuell = GetVehicleModel(carid); { if(dpfuell==400||dpfuell==402||dpfuell==411||dpfuell==415||dpfuell==429||dpfuell==451//ниже ид машин которые естественно заправляются дизелем95 ||dpfuell==477||dpfuell==494||dpfuell==502||dpfuell==503||dpfuell==506 ||dpfuell==541||dpfuell==559||dpfuell==560||dpfuell==562||dpfuell==565||dpfuell==567 ||dpfuell==587) { return 1; } } return 0; } В OnPlayerDialogResponse: if(dialogid == 380) { if(response) { if(listitem == 0) { if(IsPlayerConnected(playerid)) { new vehicle = GetPlayerVehicleID(playerid); if(SBizzInfo[8][sbProducts] == 0)//8 бизнесс у меня заправка { GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1); return 1; } if(IsADiesel(vehicle)) { if(SBizzInfo[8][sbLocked] == 0)//8 бизнесс у меня заправка { if(IsAtGasStation(playerid)) { GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~ n~~n~~n~A‹¦OMO—…‡’ €AЊPA‹‡•E¦C•,ЊOѓO„ѓ…¦E ЊO„A‡Y†C¦A...",2000,3); TogglePlayerControllable(playerid, 0); SetTimer("Fillup",RefuelWait,0); Refueling[playerid] = 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Заправочная станция закрыта"); return 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Ваш автомобиль не подходит под данную категорию"); SendClientMessage(playerid, COLOR_LIGHTRED, "Посмотреть категорию своего автомобиля (/ifuel)"); return 1; } } return 1; } /// else if(listitem == 1) { if(IsPlayerConnected(playerid)) { new vehicle = GetPlayerVehicleID(playerid); if(SBizzInfo[8][sbProducts] == 0)//8 бизнесс у меня заправка { GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1); return 1; } if(IsA80Fuel(vehicle)) { if(SBizzInfo[8][sbLocked] == 0)//8 бизнесс у меня заправка { if(IsAtGasStation(playerid)) { GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~ n~~n~~n~A‹¦OMO—…‡’ €AЊPA‹‡•E¦C•,ЊOѓO„ѓ…¦E ЊO„A‡Y†C¦A...",2000,3); TogglePlayerControllable(playerid, 0); SetTimer("Fillup",RefuelWait,0); Refueling[playerid] = 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Заправочная станция закрыта"); return 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Ваш автомобиль не подходит под данную категорию"); SendClientMessage(playerid, COLOR_LIGHTRED, "Посмотреть категорию своего автомобиля (/ifuel)"); return 1; } } return 1; } /// else if(listitem == 2) { if(IsPlayerConnected(playerid)) { new vehicle = GetPlayerVehicleID(playerid); if(SBizzInfo[8][sbProducts] == 0)//8 бизнесс у меня заправка { GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1); return 1; } if(IsA92Fuel(vehicle)) { if(SBizzInfo[8][sbLocked] == 0)//8 бизнесс у меня заправка { if(IsAtGasStation(playerid)) { GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~ n~~n~~n~A‹¦OMO—…‡’ €AЊPA‹‡•E¦C•,ЊOѓO„ѓ…¦E ЊO„A‡Y†C¦A...",2000,3); TogglePlayerControllable(playerid, 0); SetTimer("Fillup",RefuelWait,0); Refueling[playerid] = 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Заправочная станция закрыта"); return 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Ваш автомобиль не подходит под данную категорию"); SendClientMessage(playerid, COLOR_LIGHTRED, "Посмотреть категорию своего автомобиля (/ifuel)"); return 1; } } return 1; } /// else if(listitem == 3) { if(IsPlayerConnected(playerid)) { new vehicle = GetPlayerVehicleID(playerid); if(SBizzInfo[8][sbProducts] == 0)//8 бизнесс у меня заправка { GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1); return 1; } if(IsA95Fuel(vehicle)) { if(SBizzInfo[8][sbLocked] == 0)//8 бизнесс у меня заправка { if(IsAtGasStation(playerid)) { GameTextForPlayer(playerid,"~w~~n~~n~~n~~n~~n~~n~~ n~~n~~n~A‹¦OMO—…‡’ €AЊPA‹‡•E¦C•,ЊOѓO„ѓ…¦E ЊO„A‡Y†C¦A...",2000,3); TogglePlayerControllable(playerid, 0); SetTimer("Fillup",RefuelWait,0); Refueling[playerid] = 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Заправочная станция закрыта"); return 1; } } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Ваш автомобиль не подходит под данную категорию"); SendClientMessage(playerid, COLOR_LIGHTRED, "Посмотреть категорию своего автомобиля (/ifuel)"); return 1; } } return 1; } /// } } В OnPlayerCommandText: if(strcmp(cmd, "/ifuel", true) == 0) { if(IsPlayerConnected(playerid)) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { new carid; carid = gLastCar[playerid]; new toplivo[32]; if(IsADiesel(carid)) { toplivo = "Дизельный двигатель"; } else if(IsA80Fuel(carid)) { toplivo = "Топливо 80"; } else if(IsA92Fuel(carid)) { toplivo = "Топливо 92"; } else if(IsA95Fuel(carid)) { toplivo = "Топливо 95"; } format(string, sizeof(string), "** Вид топлива: %s", toplivo); SendClientMessage(playerid, COLOR_GREY, string); } else { SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в автомобиле"); return 1; } } return 1; }[/size][/font][/color] [color=#000000][font=Verdana, Arial, Tahoma, Calibri, Geneva, sans-serif][size=3]if(strcmp(cmd, "/fill", true) == 0) { if(IsPlayerConnected(playerid)) { if(IsAtGasStation(playerid))//если игрок на бензоправке, то даем ему диалог { ShowPlayerDialog(playerid,380,DIALOG_STYLE_LIST,"Выбор бензина","Дизельное топливо\n80 Бензин\n92 Бензин\n95 Бензин","Ок","Отмена"); } } return 1; } Автор не я,взято с другого портала.
  22. #Jack.Black

    TextDraw (State99)

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

    Spawn новичков

    И так в этой теме я расскажу как поменять spawn новичков в SAMP. Думаю для новичков будет полезно. Находим паблик: SetPlayerSpawn или OnPlayerSpawn Вставляем туда: else if(PlayerInfo[playerid][pLevel] >= 1 && PlayerInfo[playerid][pLevel] <= 3) // Если у игрока более 1-го и менее 3-го уровня то он будет появляться тут: { SetPlayerPos(playerid,1657.7761,-1842.0952,13.5463);// Координаты: 1.зайдите в игру. 2.Найдите то место где хотите чтобы появлялись игроки. 3. Прописываем /save. 4.Идем Мои документыGTA San Andreas User FilesSAMP в нем есть файл savedpositions.txt. В нем находятся координаты которые вы сохранили. Копируем их и вставляем сюда. SetPlayerFacingAngle(playerid, 37.0911);// Направление куда будет смотреть игрок SetPlayerInterior(playerid,0);// Интерьер в котором появиться игрок 0 - это улица SetPlayerVirtualWorld(playerid, 0);// Виртуальный мир } Объясню более понятно что копировать из savedpositions.txt: AddPlayerClass(96,1154.0748,-1770.1941,16.5938,3.7851,0,0,0,0,0,0); - там будет примерно так. 96 - это одежда/скин в которой будет появляться игрок. 1154.0748,-1770.1941,16.5938 - это то самое местоположение где будет появляться игрок. 3.7851 - это поворот головы, ну то есть куда будет смотреть игрок. Автор-Я
  24. Начнем! 1. Ко всем переменным new Text: Online;//Переменная текстдрава new online;//Человек онлайн 2. К forward' ам: forward Online(); 3. В public OnPlayerConnect TextDrawShowForPlayer(playerid,Online);//Показываем текстдрав online++;//При коннекте к значению переменной прибавляем единицу Online();//Вызываем паблик, который изменит текстдрав 4. В public OnPlayerDisconnect online--;//Убираем единицу Online();//Вызываем паблик, который изменит текстдрав 5. В public OnGameModeInit Online = TextDrawCreate(25.000000, 434.000000, "Online");//Сам текстдрав TextDrawLetterSize(Online,0.3,1.3);//размер шрифта TextDrawFont(Online,3);//стиль шрифта TextDrawColor(Online,COLOR_WHITE);//цвет TextDrawSetOutline(Online,1); 6. Создаем новый public public Online()//Будет менять текстдрав { new string[32]; format(string, 32, "Online %d", online); TextDrawSetString(Online,string); for (new i=0; i < MAX_PLAYERS; i++) TextDrawShowForPlayer(i,Online); return 1; } Скриншот: При желании можно поменять цвет, размер, позицию и текст! Как это работает: Игрок заходит на сервер, значение переменной становится на единицу больше. Значение переменной равнозначно количеству игроков онлайн, так как при коннекте она прибавляется на 1, а при дисконнекте убавляется на 1. Также при коннекте сделан вызов паблика Online, в результате которого это все и работает. Сам паблик только меняет текст Textdraw' а и показывает его игрокам. Принцип работы, думаю, описан! Автор: Max_Mister
×

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

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