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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. >ТРЕБОВАНИЯ 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", "Ошибка! Этот код либо не существует, либо не действителен.","Ок", "");//если код не правильный } } }Вот собственно и всё, код останется в базе данных, но не будет активен, а можно и удалять.
  2. 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
  3. Кирилл Сергеевич

    Помещаем 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)); } Автор:Владокс
  4. Многие новички,делающие сервер в первый раз сталкиваются с проблемой создания бонуса.Вот пример такого готового решения: 1)Ко всем new добавить: new bonus; 2)Создаём pick up.Для этого в коллбэк public OnGameModeInit добавляем это: bonus = CreatePickup(ID пикапа,тип пикапа,X,Y,Z, ID виртуального мира пикапа);// Координаты X,Y,Z сменить на свои. 3)Следующим шагом будет добавление самой функции бонуса: if(pickupid == название пикапа) // В нашем случае "bonus" { if(PlayerInfo[playerid][pLevel] >= 3) // Это проверка на то что-бы игрок не получил бонус два раза. { SendClientMessage(playerid, COLOR_PURPLE, "Этот бонус только для новичков 1 лвл."); return 1; } SendClientMessage(playerid,0xFFFF00AA,"Вы получили свой бонус!"); SendClientMessage(playerid, COLOR_WHITE, "3.000.000$."); SendClientMessage(playerid, COLOR_WHITE, "3 LVL."); SendClientMessage(playerid, COLOR_WHITE, "Все лицензии."); PlayerInfo[playerid][pLevel] = 3; // Где 3 это уровень, если хотите уровень больше или меньше меняйте 3 на ваш уровень. GivePlayerMoney(playerid, 3000000); // 3000000 - это количество денег, которое выдаст вам. PlayerInfo[playerid][pCarLic] = 1; // Лицензия на вождение. PlayerInfo[playerid][pFlyLic] = 1; // Лицензия на воздушный транспорт. PlayerInfo[playerid][pMotoLic] = 1; // Лицензия на мотовождения. PlayerInfo[playerid][pBoatLic] = 1; // Лицензия на водное вождение. PlayerInfo[playerid][pFishLic] = 1; // Лицензия на рыбалку. PlayerInfo[playerid][pGunLic] = 1; // Лицензия на оружие. } 4)И последним нашим действием будет создания 3D текста для бонуса: для этого в public OnGameModeInit добавим следующее: Create3DTextLabel("Название 3D Текста",0x008080FF ,X ,Y, Z); // Где X,Y,Z там ваша координата. Ну вот и всё.Как видите ничего сложного .Данная функция прекрасно работает на сrmp.Авто:ERL Если подобная тема существует,извиняюсь,но на данном портале не видел похожего
  5. Я думаю название говорит само за себя. В 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 Второе Название Мода"); }} Автор:
  6. В этом уроке я вам для примера расскажу, как сделать регистрацию в 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
  7. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переу становитеMicrosoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Если помогло,ставьте +
  8. У некоторых возникают проблемы с МТА 1.3 на GTA Криминальную Россию. Так вот, полазив по просторам интернета, вот какое решение я нашёл: Если нету МТА, то скачайте здесь Обновите DirectX, переустановите Microsoft Visual C++ 2008 Попробуйте установить C++ 2008 SP1 Redistributable package. Сделайте также, что и на скриншоте:
  9. 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; }
  10. 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); Скрины
  11. 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 клиент
  12. Многие просят вырезать систему авто с мода gamer. Сегодня решил попробовать вырезать. Вырезал не так что попадется, а компилировал как скрипт. Так что думаю ничего не упустил. В коде есть закомментированные строки, их нужно включить когда вошьете авторынок в свой мод. Если не включите, не пойми что у вас там случиться. Если возникнут проблемы при компиляции пишите в данную тему. Автор вырезки: Amfy auto.pwn
  13. if(strcmp("/jlist", cmdtext, true, 10) == 0){new bool:players = false;for(new i = 0; i < MAX_PLAYERS; i++){if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;if(PlayerInfo[i][pJailTime] != 0){new name[MAX_PLAYER_NAME], str[150];GetPlayerName(i, name, sizeof(name));format(str, sizeof(str), "%sn{FFFFFF}ID: {FF9D00}%d {FFFFFF}Ник: {FF9D00}%s {FFFFFF}Осталось: {FF9D00}%d", str, i, name, PlayerInfo[i][pJailTime]);ShowPlayerDialog(playerid,487,DIALOG_STYLE_LIST,"{FFFF00}Список заключенных",str,"Принято","");players = true;}}if(players == false) return SendClientMessage(playerid, -1, "Список заключенных пуст!");} В команде нужно только изменить переменную отвечающую за время в тюрьме, это pJailTime и PlayerInfo если у вас конечно не так как в команде. Скриншот:
  14. FVCKFISH

    Работа дровосека

    Ко всем new new francjobodej,francdrevlog;new francdrev1,francdrev2,francdrev3;new franclesorub[MAX_PLAYERS];new francderevo[MAX_PLAYERS];new francbrevnozp[MAX_PLAYERS]; public OnPlayerPickUpPickup(playerid, pickupid) добавляем : if(pickupid == francjobodej){if(PlayerInfo[playerid][pMember] != 0 || PlayerInfo[playerid][pLeader] != 0) return true;if(franclesorub[playerid] == 0) ShowPlayerDialog(playerid,125,DIALOG_STYLE_MSGBOX,"Раздевалка лесорубов","Хотите начать?","Да","Нет");else ShowPlayerDialog(playerid,126,DIALOG_STYLE_MSGBOX,"Раздевалка лесорубов","Хотите завершить работу?","Да","Нет");}if(pickupid == francdrev1){if(franclesorub[playerid] == 1){if(francderevo[playerid] == 0){francderevo[playerid] = 1;ApplyAnimation(playerid, "CARRY", "liftup", 4.0, 0, 0, 0, 1, 1);SetTimerEx("ClearAnimText2", 1000, false, "d", playerid);SetPlayerAttachedObject(playerid, 4, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.476124, 0.468181, 0.470769);return true;}else{SendClientMessage(playerid,COLOR_GREY,"У вас уже есть брёвна!");}}else{SendClientMessage(playerid,COLOR_GREY,"Вы не можете взять брёвна, для начала работы переоденьтесь в одежду {00FFFF}лесоруба.");}}if(pickupid == francdrev2){if(franclesorub[playerid] == 1){if(francderevo[playerid] == 0){francderevo[playerid] = 1;ApplyAnimation(playerid, "CARRY", "liftup", 4.0, 0, 0, 0, 1, 1);SetTimerEx("ClearAnimText2", 1000, false, "d", playerid);SetPlayerAttachedObject(playerid, 4, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.476124, 0.468181, 0.470769);return true;}else{SendClientMessage(playerid,COLOR_GREY,"У вас уже есть брёвна!");}}else{SendClientMessage(playerid,COLOR_GREY,"Вы не можете взять брёвна, для начала работы переоденьтесь в одежду {00FFFF}лесоруба.");}}if(pickupid == francdrev3){if(franclesorub[playerid] == 1){if(francderevo[playerid] == 0){francderevo[playerid] = 1;ApplyAnimation(playerid, "CARRY", "liftup", 4.0, 0, 0, 0, 1, 1);SetTimerEx("ClearAnimText2", 1000, false, "d", playerid);SetPlayerAttachedObject(playerid, 4, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.876124, 0.868181, 0.870769);return true;}else{SendClientMessage(playerid,COLOR_GREY,"У вас уже есть бревна!");}}else{SendClientMessage(playerid,COLOR_GREY,"Вы не можете взять бревна, для начала работы переоденьтесь в одежду {00FFFF}лесоруба.");}}if(pickupid == francdrevlog){if(francderevo[playerid] == 0){SendClientMessage(playerid,COLOR_GREY,"У вас нет брёвен!");return true;}else{if(francderevo[playerid] == 1){francderevo[playerid] = 0;RemovePlayerAttachedObject(playerid, 4);ApplyAnimation(playerid,"CARRY","putdwn",4.1,0,1,1,1,1);SendClientMessage(playerid,COLOR_WHITE,"Вы принесли брёвна");SetTimerEx("ClearAnimText", 1400, false, "d", playerid);francbrevnozp[playerid]++;}}} Дальше в public OnGameModeInit добавляем: francdrevlog = CreatePickup(3798,23,2736,-1621.80005,22.6);francjobodej = CreatePickup(1275,23,2750.69995,-1585.30005,22.3);francdrev1 = CreatePickup(19197,23,2751.8999,-1572.90002,20.9);francdrev2 = CreatePickup(19197,23,2741.8999,-1563.30005,20.6);francdrev3 = CreatePickup(19197,23,2725.30005,-1569.90002,22.4); Теперь для начала и завершения работы добавляем в OnDialogResponse if(dialogid == 125){if(response){SetPlayerSkin(playerid,16);franclesorub[playerid] = 1;SendClientMessage(playerid,COLOR_WHITE,"Вы начали рабочий день лесоруба. {A41C1C}Отправляйтесь за брёвнами!");return true;}else{return true;}}if(dialogid == 126){if(response){new strings[256];new string[256];new stri[256];francderevo[playerid] = 0;franclesorub[playerid] = 0;RemovePlayerAttachedObject(playerid, 4);ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 1);if(PlayerInfo[playerid][pMember] >= 1 || PlayerInfo[playerid][pLeader] >= 1){SetPlayerSkin(playerid,PlayerInfo[playerid][pChar]);}if(PlayerInfo[playerid][pMember] == 0 || PlayerInfo[playerid][pLeader] == 0){SetPlayerSkin(playerid,PlayerInfo[playerid][pChar]);}format(string, sizeof(string), "Вы закончили работу. Ваш заработок: {00FF00}$%d", francbrevnozp[playerid]*50);SendClientMessage(playerid, COLOR_WHITE, string);format(stri, sizeof(stri), "Вы принесли {A41C1C}%d{FFFFFF}свзок брёвен ",francbrevnozp[playerid]);PlayerInfo[playerid][pCash] +=francbrevnozp[playerid]*50;SendClientMessage(playerid, COLOR_WHITE, stri);francbrevnozp[playerid] = 0;GivePlayerMoney(playerid, 100);format(strings, sizeof(strings), "~r~Pay", francbrevnozp[playerid]*50);GameTextForPlayer(playerid,strings,3000,1);return true;}else{}} маппинг для лесоруба(склад и раздевалка) CreateObject(4214,2749.6001000,-1586.3000500,22.3000000,0.0000000,0.0000000,355.0000000); //object(lanitewin3_lan) (1)CreateObject(9160,2743.8999000,-1622.0000000,22.5000000,0.0000000,0.0000000,184.9990000); //object(lodaseroad143) (1) Делал на моде Тюмень Скрины: Сдачи опилок теперь нету , только бревна... (скрины новые решил не делать , если будут проблемы по данной теме , писать в вопросы и проблемы)
  15. TrollFace

    Система больницы.

    Здравствуйте, дорогие пользователи портала! Видел очень много уроков по системе "больничных коек", но ни один из них толковым не был. Итак, начнем! Писаться будет на MxINI, так же в помощь будет взят inc и pl CRP поэтому, у кого нет, пишем: #include <MxINI>//в начало мода, подключит инклуд для записи в файл#include <CRP>//русификатор текстдравов и еще много чегоТак же через server.cfg необходимо подключить плагин CRP. Далее. Нам ведь нужно куда-то записывать значение оставшегося времени? Верно. Поэтому в enum pInfo добавим pBolTime,pBolТам, где у вас в моде расположено сохранение аккаунтов, добавляем строчку: ini_setInteger(iniFile,"BolTime", PlayerInfo[i][pBolTime]);//вместо i может быть playerid и т.п.Это запись в файл новой переменной. Идем далее - разберемся с выгрузкой. Там, где у Вас в моде расположена загрузка аккаунта из файла, добавляем следующее: ini_getInteger(iniFile,"BolTime", PlayerInfo[playerid][pBolTime]);Это загрузка переменной при входе игрока. Смысл очень прост: если переменная больше нуля, то "сажаем" игрока в больницу на время, равное этой переменной. Теперь, пожалуй, создадим текстдрав оставшегося времени: 1. Объявим переменную: new Text:Bol[MAX_PLAYERS];2. Создадим сам текстдрав в OnPlayerConnect: Bol[playerid] = TextDrawCreate(273.000000, 423.000000, "Ostalos: %d");//текстдрав с координатамиTextDrawAlignment(Bol[playerid], 2);TextDrawBackgroundColor(Bol[playerid], 255);TextDrawFont(Bol[playerid], 3);//обводкаTextDrawLetterSize(Bol[playerid], 0.639999, 2.000000);//размерTextDrawColor(Bol[playerid], -65281);//цветTextDrawSetOutline(Bol[playerid], 1);TextDrawSetProportional(Bol[playerid], 1);Идем далее. Сделаем так, что игрок будет "посажен" при смерти. В этом нам поможет public OnPlayerDeath. Вставляем код следующего вида: PlayerInfo[playerid][pBol] = 1;PlayerInfo[playerid][pBolTime] = 180;//время, в секундах, сколько игроку лежать в больниеSetPlayerPos(playerid, x, y, z);//изменение позиции, координаты ставим своиSendClientMessage(playerid, COLOR_RED, "Вы попали в больницу.");//выводим сообщениеTextDrawShowForPlayer(playerid, Bol[playerid]);//показываем текстдравИтак. Теперь переходим к самой главной части - секундный каллбэк. Вo многих модах он называется SetPlayerUnjail. Вставляем туда следующее(после цикла на всех игроков): new string4[64];if(PlayerInfo[i][pBol] >= 1){if(PlayerInfo[i][pBolTime] >= 1)//если время еще осталось, то:{PlayerInfo[i][pBolTime] = PlayerInfo[i][pBolTime] - 1;//отнимем 1 секундуformat(string4, sizeof(string4), "Осталось: %d", PlayerInfo[i][pBolTime]);//отформатируем текстдравTextDrawSetString(Bol[i], string4);//обновим текстдрав}else if(PlayerInfo[i][pBolTime] <= 0)//если время прошло{SendClientMessage(i,COLOR_DARK,"Вас выписали из больницы");//отправим сообщениеSetPlayerPos(i, -1705.599609375, -2806.69921875, 13.89);//изменим координаты, делайте своиSetPlayerInterior(i,0);TextDrawHideForPlayer(i, Bol[i]);//скроем текстдрав}}А как быть с тем, если игрок перезайдет? В public OnPlayerSpawn( или же SetPlayerSpawn ): if(PlayerInfo[playerid][pBolTime] >= 1){SendClientMessage(playerid,COLOR_LIGHTBLUE,"Вы находитесь в больнице");TextDrawShowForPlayer(playerid, Bol[playerid]);//покажем текстдравSetPlayerPos(playerid,-1817.8000488281,-2858.3999023438,13.89);// свои координатыPlayerInfo[playerid][pBol] = 1;return 1;}И еще - скрины: Удачи.
  16. Посидел пару минут на форуме, увидел уроки всякие, где один ужасный код и в комментариях темы написано что "ВАЩЕ КУРУТЯК". Ну что же, надо развивать Вас как то. Вот Вам самый обычный, и самый рабочий антифлуд. if(GetPVarInt(playerid, "ChatFlood") > gettime()) return SendClientMessage(playerid, -1, "Команды можно вводить раз в 2 секунды!") & 0; SetPVarInt(playerid, "ChatFlood", gettime() + 2); Думаю сам код описывать особо не нужно, что да как. Тут итак понятно, сам код Вы можете вставить к примеру в паблик отправки текста "OnPlayerText", или просто даже в любую команду, где нужен ограничитель по времени. Чтобы изменить время длительности, в конце кода вместо 2 поставьте своё значение. В чём плюсы данного кода? Код не занимает лишнии ячейки памяти из-за PVar's. Не используются таймеры, как любят это делать недо-скриптеры. Да и лишнего не чего нету. Если Вы хотите использовать код несколько раз в моде, то название пивоваров меняйте, чтобы значение не путалось. Author: FanHamMer
  17. От того что все Античиты с каким то странным кодом, выкладываю свой код. Более понятный, и нету не чего лишнего. Защита самая простая, деньги отнимаются, оружие так же. 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
  18. Доброго времени суток! Сегодня я вам покажу ,оптимизированный вид регистрации! И так просмотрим код : Добавим парочку переменных: 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
  19. Всем привет, сегодня мы научимся создавать ворота с открытием. Затем создадим объект к этой переменной, пусть это будет (OnGameModeInit): К OnPlayerCommandText: Теперь давайте разберём всё подробнее.
  20. Здравствуйте, уважаемые пользователи портала! Сейчас хотелось бы разобрать принцип работы часов на тексдравах. Для начала выложу скриншот того, что получится(нажмите для увеличения): Итак, приступим!С самого начала логично было бы создать сам тексдрав. Объявляем переменную: new Text:Clock;//часы Далее создадим тексдрав. Добавляем в public OnGameModeInit следующее: Clock = TextDrawCreate(549.000000, 25.000000, "00:00"); TextDrawAlignment(Clock,0); TextDrawBackgroundColor(Clock, 255); TextDrawFont(Clock, 3); TextDrawTextSize(Clock, 0.599999, 2.200000); TextDrawLetterSize(Clock,0.599999, 2.200000); TextDrawSetOutline(Clock, 1); TextDrawSetShadow(Clock, 0); TextDrawUseBox(Clock, 0); TextDrawColor(Clock, 0x33AA33AA); А теперь что? Ведь нужно сделать так, чтобы текстдрав был виден игрокам, верно? Верно. Добавляем в public OnPlayerConnect показ текстдрава: TextDrawShowForPlayer(playerid, Clock); Есть. Все отображается. Все как на картинке. НО - тексдрав будет постоянно показывать лишь 00:00 Как это исправить? Как сделать обновление? Ровно об этом принципе работы рассказать и хочется. Создадим паблик и таймер, ссылающийся на этот паблик. Повтор функции? Конечно. А иначе как будет обновляться тексдрав? Приступим. forward UpdateTime(); public UpdateTime() { new string[32]; new hour,minute,second; gettime(hour,minute,second); format(string, sizeof(string), "%02d:%02d", hour, minute); SetWorldTime( hour ); TextDrawSetString(Clock,string); } Все? Нет, не все. Ведь нету вызова функции. Сделаем его по стандарту, в public OnGameModeInit: SetTimer("UpdateTime", 1000, 1); И что у нас получится? Паблик UpdateTime будет вызываться каждую секунду и обновлять часы.Спасибо за внимание.
  21. 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
  22. Сегодня я объясню как сделать разводной мост по таймеру . мост будет открывается раз в 25 минут! Подойдет для любого мода даже самп но там придется менять объект и координаты! И так начинаем , ко всем new new mostik[2]; дальше мы в public OnGameModeInit добавим таймер который будет открывать мост каждые 25 минут SetTimer("OpenMostik", 1000*60*25, true ) ;// если хотите через 30 или больше минут то меняйте 25 заменим объекты моста id 2168 заменяем на это mostik[0] = CreateObject(2168,2747.3437500,-1142.8994141,21.6000004,0.0000000,0.0000000,179.9945068); mostik[1] = CreateObject(2168,2747.2998047,-1262.0000000,21.6000004,0.0000000,0.0000000,0.0000000); дальше добавляем в конец мода forward OpenMostik(); public OpenMostik() { MoveObject(mostik[0],2747.3999023,-1142.8000488,22.1000004,0.015,45.7489014,0.0000000,179.9945068);// объекты закрытого моста MoveObject(mostik[1],2747.3999023,-1262.0000000,22.1000004,0.015,45.7441406,0.0000000,0.0000000);// объекты закрытого моста SetTimerEx("CloseGate",80*1000,0,"i",mostik[0]);// где 80*100 то 8 секунд открывается мост!можете увеличить SetTimerEx("CloseGate",80*1000,0,"i",mostik[1]);// где 80*100 то 8 секунд открывается мост!можете увеличить return 1; } и еще один паблик в конец мода! forward CloseGate(gate); public CloseGate(gate) { if(gate == mostik[0]) return MoveObject(mostik[0], 2747.3437500,-1142.8994141,21.6000003,0.015,0.0000000,0.0000000,179.994506); //object(barrierturn)(8)// открытые кординаты моста if(gate == mostik[1]) return MoveObject(mostik[1], 2747.2998047,-1262.0000000,21.6000003,0.015,0.0000000,0.0000000,0.0000000); //object(barrierturn)(8)//открытые кординаты моста return 1; } Вот собственно и все!если кому надо проверить работу способность вот команда! if (strcmp("/mostik", cmdtext, true, 10) == 0) { OpenMostik(); return true; } Автор: Банан
  23. Доброго времени суток. В этом уроке я расскажу как отправлять сообщение прямо с сервера. Установка функций: В начало мода/скрипта после инклудов #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 или же просто поставить знак @
  24. #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);
×

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

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