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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Доброго времени суток! Попросили меня сделать такую системку, ну мне не сложно, вся суть, что чтобы получить права нужно сначала сдать экзамен и практику в автошколе, а ВУ уже получить у полицейского. Сделал под Gamer, кому нужно будет, под свой мод заточите. В enum pInfo добавим строчку pLicDostup, Далее, в OnPlayerRegister добавляем это ко всем строчкам такого типа: format(var, 32, "LicDostup=%d\n",PlayerInfo[playerid][pLicDostup]);fwrite(hFile,var);//Доступ к получению прав Ко всем командам добавим:
  2. Всем доброго времени суток. Данный туториал создан в помощь новичкам кто пишет мод . Итак приступим... Ко всем new: PHP код: new BurgerEnter;// Глобальная переменная. new BurgerExit;// Глобальная переменная. В public OnGameModeInit() Вставляем следующее: PHP код: BurgerEnter = CreatePickup(19132, 23, -2336.8601, -166.7870, 35.5547, -1);// Координаты пикапа на улице. BurgerExit = CreatePickup(19132, 23, 362.8931, -75.1895, 1001.5078, -1);// Координаты пикапа в интерьере. 19132 - это модель пикапа. 23 - тип пикапа (менять не нужно) дальше идут координаты x, y, z. -1 - пикап будет показан для всех виртуальных миров. Дальше идём в public OnPlayerPickUpPickup(playerid, pickupid) Как только игрок встаёт на пикап его отправляет по координатам, задаёт ему поворот угла и телепортирует в интерьер. Смотрим всё ниже. PHP код: if(pickupid == BurgerEnter) { SetPlayerPos(playerid, 364.0044, -73.9694, 1001.5078);// Координаты игрока при входе в инт. SetPlayerFacingAngle(playerid, 315.0000);// Угол поворота игрока. SetPlayerInterior(playerid, 10);// 10 - id интерьера. } if(pickupid == BurgerExit) { SetPlayerPos(playerid, -2334.6167, -166.7845, 35.5547);// Координаты игрока при выходе на улицу. SetPlayerFacingAngle(playerid, 270.0000);// Угол поворота игрока. SetPlayerInterior(playerid, 0);// 0 - выход на улицу. } Автор: Forbidden and Dizzel Понравилось??Ставь ++
  3. Всех приветствую. Один человечек попросил меня выложить свою работу сюда Спидометр в стиле СССР. Все переменные спидометра меняйте под себя.
  4. Так, как у нас нету этого урока, решил его выложить. Все источники и авторы указаны ниже. Данный урок есть на официальном сайте www.sa-mp.com Автор статьи: newbienoob Что нам понадобиться в этой статье: - Mysql plugin - Whirlpool Начнем: 1. Ко всем include: #include <a_samp> #include <a_mysql> 2. Ко всем define: #define host "localhost" //ваш хост mysql. По умолчанию localhost #define user "root" //имя пользователя mysql #define db "server" //название базы данных #define pass "" //Ваш пароль mysql #define dregister 6287 //диалог регистрации #define dlogin 6288 // диалог авторизации 3. К глобальным переменным: static mysql, //переменная будет использоваться для управления в базе Name[MAX_PLAYERS][24], //для хранения имени игрока. IP[MAX_PLAYERS][16] //для хранения игрока ip. ; native WP_Hash(buffer[], len, const str[]); enum PDATA { ID, //для хранения игрока ID из базы данных, поэтому мы можем использовать его в любом месте позже Password[129],//загрузка пароля игрока в этот varible из базы данных Admin, //загрузка игрока на уровне администратора из базы данных в этой переменной VIP, //загрузка уровня VIP игрока из базы данных в этой переменной Money, //загрузка денег игрока из базы данных в этой переменной Float:posX, //загрузка X позиции игрока из базы данных в этой переменной Float:posY, //загрузка Y позиции игрока из базы данных в этой переменной Float:posZ //загрузка Z позиции игрока из базы данных в этой переменной } new pInfo[MAX_PLAYERS][PDATA]; //Переменная для хранения всего, что перечислили выше 4. В public OnGameModeInit(): mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG); //включаем отладку, так мы можем выявить проблемы(если есть) mysql = mysql_connect(host, user, db, pass); //подключение сервера к базе данных. if(mysql_errno(mysql) != 0) print("Не удалось подключиться к базе данных!"); //ошибка о подключении к БД, проверьте правильно ли вы ввели свои данные 5. В public OnPlayerConnect(playedid): new query[128]; //запрос GetPlayerName(playerid, Name[playerid], 24); //Получение имени игрока GetPlayerIp(playerid, IP[playerid], 16); //Получение IP игрока mysql_format(mysql, query, sizeof(query),"SELECT `Password`, `ID` FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]); mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid); 6. В конце скрипта создаем public: forward OnAccountCheck(playerid); public OnAccountCheck(playerid) { new rows, fields; cache_get_data(rows, fields, mysql); if(rows) //если есть строка {//затем cache_get_field_content(0, "PASS", pInfo[playerid][Password], mysql, 129); //загружаем пароль игрока в pInfo[playerid][Password], используемый в регистрации pInfo[playerid][ID] = cache_get_field_content_int(0, "ID"); //загрузка ID игрока в pInfo[playerid][ID] printf("%s", pInfo[playerid][Password]); ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Авторизация", "Для того чтобы начать игру, необходимо авторизоваться", "Вход", "Выйти"); //Обнаружили аккаунт, показываем данный диалог } else //если аккаунта нет { ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "регистрация", "Для того, чтобы начать игру, Вам необходимо зарегистрироваться.", "регистрация", "Выйти"); //То показываем этот диалог регистрации аккаунта } return 1; } forward OnAccountLoad(playerid); forward OnAccountRegister(playerid); public OnAccountLoad(playerid) { pInfo[playerid][Admin] = cache_get_field_content_int(0, "Admin"); pInfo[playerid][VIP] = cache_get_field_content_int(0, "VIP"); pInfo[playerid][Money] = cache_get_field_content_int(0, "Money"); pInfo[playerid][posX] = cache_get_field_content_float(0, "PosX"); pInfo[playerid][posY] = cache_get_field_content_float(0, "PosY"); pInfo[playerid][posZ] = cache_get_field_content_float(0, "PosZ"); GivePlayerMoney(playerid, pInfo[playerid][Money]);//деньги SendClientMessage(playerid, -1, "Успешный вход!"); //Успешный вход в аккаунт return 1; } public OnAccountRegister(playerid) { pInfo[playerid][ID] = cache_insert_id(); //загружает ID игрока в переменную, после того, как он зарегистрировался. printf("New account registered. ID: %d", pInfo[playerid][ID]); return 1; } 7. В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]): switch(dialogid) { case dlogin: //диалоговое окно входа в систему { if(!response) return Kick(playerid); //если нажал выйти - кикает new hpass[129]; //для хэширования паролей new query[100]; // для форматирования нашего запроса WP_Hash(hpass, 129, inputtext); //хеширования inputtext if(!strcmp(hpass, pInfo[playerid][Password])) { mysql_format(mysql, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]); mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid); } else { ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Авторизация", "Чтобы начать игру необходимо вести пароль", "Вход", "Выйти"); } } case dregister: //диалог регистрации { if(!response) return Kick(playerid); //если нажали выйти, мы будем кикать их if(strlen(inputtext) < 6) return ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "Регистрация", "Для того, чтобы играть, Вам необходимо зарегистрироваться.\nВаш пароль должен быть не менее 6 символов!", "Регистрация", "Выйти"); //strlen проверяет длину строки, если игрок вводит свой пароль, который ниже, чем 6 символов, то выводим данное сообщение new query[300]; WP_Hash(pInfo[playerid][Password], 129, inputtext); mysql_format(mysql, query, sizeof(query), "INSERT INTO `players` (`Username`, `Password`, `IP`, `Admin`, `VIP`, `Money`, `PosX` ,`PosY`, `PosZ`) VALUES ('%e', '%s', '%s', 0, 0, 0, 0.0, 0.0, 0.0)", Name[playerid], pInfo[playerid][Password], IP[playerid]); mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid); } } 8. В public OnPlayerDisconnect(playerid, reason): new query[128], Float:pos[3]; //query[128] для форматирования нашего запроса и Float:pos[3] Для получения и сохранения позиции игрока GetPlayerPos(playerid, pos[0], pos[1], pos[2]); //добавление позиции игрока, когда они покидают сервер mysql_format(mysql, query, sizeof(query), "UPDATE `players` SET `Admin`=%d, `VIP`=%d, `Money`=%d, `posX`=%f, `posY`=%f, `posZ`=%f WHERE `ID`=%d",\ pInfo[playerid][Admin], pInfo[playerid][VIP], pInfo[playerid][Money], pos[0], pos[1], pos[2], pInfo[playerid][ID]); //Обновляем таблицу игроков mysql_tquery(mysql, query, "", ""); 9. В public OnPlayerSpawn(playerid): SetPlayerPos(playerid, pInfo[playerid][posX], pInfo[playerid][posY], pInfo[playerid][posZ]); //Установка позиции игрока к последнему сохранению позиций. Перевод комментариев может быть не точным, а также может отсутствовать совсем. Кто шарит по английски, смотрите оригинальную тему. Пишите свои поправки в тему, исправлю. Оригинальная статья: Нажимай, чтобы посмотреть
  5. Здравствуйте уважаемые пользователи cr-mp.ru! Хочу предоставить вам систему викторин,которую я вырезал из одного мода. Каждые 5 минут(как я наблюдал)в чат выводится сообщение,если отвечаете правильно,вам дают денежный приз. P.S.Данная система очень интересна,советую взять ее себе на сервер и при необходимости изменить под свой проект. Приступим! Ко всем define добавим: #define vTimer 1 // Таймер в минутах #define vMaxN 100 // Максимальное число #define vMaxP 2000 // Максимальный приз new Viktorina = -5415614561541; В OnGameModeInit добавим сам таймер,через какое время будет новая викторина SetTimer("StartViktorina",vTimer * 300000,true); В OnPlayerText добавим OnPlayerText if(strval(text) == Viktorina) { new str[256],name[24],prize; GetPlayerName(playerid,name,sizeof name); prize = random(vMaxP); format(str,sizeof str,"{FFA500}Викторина: {ffffff}Игрок {FFA500}%s[id: %d]{ffffff} угадал! Ответ был: {FFA500}%d{ffffff}. Он получает: {00ff00}%d$",name,playerid,Viktorina,prize); SendClientMessageToAll(1,str); Give_Money(playerid,prize); Viktorina = -5415614561541; } И в конец мода добавим forward StartViktorina(); public StartViktorina() { new str[128],a,b; a = random(vMaxN); b = random(vMaxN); Viktorina = a + b; format(str,sizeof str,"{FFA500}Викторина: {ffffff}Сколько будет {FFA500}%d{ffffff} + {FFA500}%d{ffffff} ? {BEBEBE}(ответ пишем в чате)",a,b); SendClientMessageToAll(1,str); return 1; } P.S.Извините что скрины не могу выложить.Но система очень интересная.Деньги выдаются рандомно,но не очень много(будет полезно для рп серверов.) Автор неизвестно Всем добра!
  6. Все когдато сталкивались с дм-щиками! Так вот ,я сделал так чтобы это было давольно проще! Описание : При стрельбе в админа ,стрелявшего кикает с сервера! Для включения и отключения ,довольно ввести команду /on Ко всем new: new AntiStrike[MAX_PLAYERS]; Вставим команду для тех у кого стоит переменная padmin if(strcmp(cmd, "/on", true) == 0) { if(PlayerInfo[playerid][pAdmin] > 0 && AntiStrike[playerid] == 0) { AntiStrike[playerid] = 1; GivePlayerWeapon(playerid, 5, 999); SendClientMessage(playerid, -1, "Вы актевировали анти стрельбу по админу"); } else if(PlayerInfo[playerid][pAdmin] > 0 && AntiStrike[playerid] == 1) { AntiStrike[playerid] = 0; ResetPlayerWeapons(playerid); SendClientMessage(playerid, -1, "Вы деактевировали анти стрельбу по админу"); } return 1; } Вставим команду для тех у кого не стоит переменная padmin, активация по RCON if(strcmp(cmd, "/on", true) == 0) { if(IsPlayerAdmin(playerid) && AntiStrike[playerid] == 0) { AntiStrike[playerid] = 1; GivePlayerWeapon(playerid, 5, 999); SendClientMessage(playerid, -1, "Вы актевировали анти стрельбу по админу"); } else if(IsPlayerAdmin(playerid) && AntiStrike[playerid] == 1) { AntiStrike[playerid] = 0; ResetPlayerWeapons(playerid); SendClientMessage(playerid, -1, "Вы деактевировали анти стрельбу по админу"); } return 1; } Теперь восприятие от пули Для тех у кого стоит переменная padmin public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid) { if(issuerid != INVALID_PLAYER_ID && AntiStrike[issuerid] == 1 && weaponid == 5 && PlayerInfo[issuerid][pAdmin]) { new allString[128], banName[MAX_PLAYER_NAME], adminName[MAX_PLAYER_NAME]; GetPlayerName(playerid, banName, sizeof (banName)); GetPlayerName(issuerid, adminName, sizeof (adminName)); format(allString, sizeof(allString), "%s забанил %s,причина стрельба по админу!", banName, adminName); SendClientMessageToAll(-1, allString); Kick(playerid); } return true; } Теперь восприятие от пули Для тех у кого не стоит переменная padmin public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid) { if(issuerid != INVALID_PLAYER_ID && AntiStrike[issuerid] == 1 && weaponid == 5 && IsPlayerAdmin(issuerid)) { new allString[128], banName[MAX_PLAYER_NAME], adminName[MAX_PLAYER_NAME]; GetPlayerName(playerid, banName, sizeof (banName)); GetPlayerName(issuerid, adminName, sizeof (adminName)); format(allString, sizeof(allString), "%s забанил %s,причина стрельба по админу!", banName, adminName); SendClientMessageToAll(-1, allString); Kick(playerid); } return true; } На этом все :)Автор скрипта : Frost (Я) Автор перевода : Kazaluka
  7. Выкладываю скрипт военного билета, знаю он уже есть, но не полный. (В этом добавлена кмд showbil и без вб в гос.службы принять человека невозможно). Начнем: В enum pInfo добавить: pArmBil, В public OnPlayerConnect добавить: PlayerInfo[playerid][pArmBil] = 0; Теперь добавим в public OnPlayerRegister format(var, 64, "ArmBil=%d\n",PlayerInfo[playerid][pArmBil]);fwrite(hFile, var); Еще добавим в public OnPlayerUpdate вот это: format(var, 64, "ArmBil=%d\n",PlayerInfo[playerid][pArmBil]);fwrite(hFile, var); В public OnPlayerLogin добавим if( strcmp( key , "ArmBil" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pArmBil] = strval( val ); } И добавляем 2 команды в public OnPlayerCommandText if(strcmp(cmd, "/givebil", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, "/givebil [id игрока]"); return 1; } giveplayerid = ReturnUser(tmp); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); format(string, sizeof(string), "Вы выдали %s военный билет.",giveplayer); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); format(string, sizeof(string), "Вам выдали военный билет."); SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string); PlayerInfo[giveplayerid][pArmBil] = 1; return 1; } } else { SendClientMessage(playerid, COLOR_GREY, "Игрок оффлайн."); return 1; } } return 1; } И туда же вторую команду в public OnPlayerCommandText добавляем вот это if(strcmp(cmd, "/showbil", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_ISPOLZUY,"* ИНФО: /showbil [ид игрока]"); new target = strval(tmp); new texts1[120]; if(!IsPlayerConnected(target)) return SendClientMessage(playerid, COLOR_GREY, "* Этот игрок оффлайн"); if(GetDistanceBetweenPlayers(playerid,target) > 2) return SendClientMessage(playerid, COLOR_GREY, "* Нет ни кого рядом"); if(PlayerInfo[playerid][pArmBil]) { texts1 = "Военная Служба Пройдена"; } else { texts1 = "Военная Служба Не Пройдена"; } GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(target, giveplayer, sizeof(giveplayer)); format(string, sizeof(string), "Военный Билет %s: %s",sendername, texts1); ShowPlayerDialog(target,7588,DIALOG_STYLE_MSGBOX,"Военный Билет",string,"Ок","Ок"); format(string, sizeof(string), "* %s показывает свой военный билет %s", sendername,giveplayer); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } return 1; } Автор: Fedya На этом всё, надеюсь вам пригодится (особенно новичкам)!
  8. Сегодня мы научимся делать вип аккаунты по времени, с автоматическим удалением по истечению времени. Перейдем в самый вверх вашего мода и впишем туда этот код: #include <a_samp> //стандартный инклуд #include <dc_cmd> //командный процесор #include <mxdate> //время и т д #include <a_mysql> //для работы с бд #include <sscanf> // #define MYSQL_HOST "localhost" // IP адресс БД. #define MYSQL_USER "ЛОГИН" // Login БД. #define MYSQL_DB "БД" // Название БД. #define MYSQL_PASS "Пароль" // Пароль БД. Теперь необходимо установить подключение к базе при включении мода, перейдем в OnGameModeInit и впишем туда этот код: mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);//устанавливаем подключение switch(mysql_ping()) { case 1: print("Соединение установлено"); // Если подключена БД. case -1: print("Нет соединения с БД"); // Если не подключена БД. } Теперь если все будет нормально то в консоли появится инфа о том что соединение установлено. Сейчас сделаем отключение от базы при выключении/перезагрузке мода, перейдем в OnGameModeExit и впишем: mysql_close(); Теперь нужно сделать проверку, переходим в OnPlayerConnect и вписываем: new query[100],name[24],string[240]sqlname[24],days;// GetPlayerName(playerid,name,sizeof(name));//узнаем имя mysql_real_escape_string(name,sqlname); format(query,sizeof(query),"SELECT * FROM `Donate` WHERE `Name` = '%s'",sqlname); mysql_query(query);//отправляем запрос mysql_store_result();//получаем ответ if(mysql_fetch_row(query) && mysql_num_rows() == 1)//если есть поле с именем игрока { mysql_get_field("Days", string); days=strval(string);//получаем время на которое выдан аккаунт if(gettime() >= days) //если срок закончился { SendClientMessage(playerid,0xFFFFFFFF,"Действие вашего VIP аккаунта закончилось"); format(string,sizeof(string),"DELETE FROM `Donate` WHERE `Name`='%s'",name); mysql_query(string);//удаляем его из бд //PlayerInfo[playerid][pDonate]=0; сюда впишите вашу випку } else//если действие аккаунта еще не закончилось { //PlayerInfo[playerid][pDonate]=1; ваша випка format(string,sizeof(string),"Действие вашего VIP аккаунта закончится %s ",date("%dd.%mm.%yyyy в %hh:%ii:%ss",days)); SendClientMessage(playerid,0xFFFFFFFF,string);//выведем информацию о том когда закончится действие аккаунта } } mysql_free_result();//очищаем Теперь построим команду для выдачи випки. Внимание команда построена на процессоре dc_cmd CMD:donate(playerid, params[]) { if(GetPVarInt(playerid,"Admin") < 5) return 1; new string[144]; if(!strlen(params[0])|| !strlen(params[1])) return SendClientMessage(playerid,0xFFFFFFFF,"{0099FF}Используйте: {FFFFFF}/donate {99D938}[playerid] [Day] ");//если параметры не указанны DonatePlayer(params[0],params[1]);//если указанны то дадим випку и занесем в бд format(string,sizeof(string),"Вам выдан Вип аккаунт на %d дней",params[1]); SendClientMessage(params[0],0xFFFFFFFF,string);//покажем сообщение игроку которому выдали //ваша випка PlayerInfo[params[0]][pDonate]=1; return true; } Теперь сделаем функцию выдачи випки, перейдем в низ вашего мода и напишем следующий код: stock DonatePlayer(playerid,days) { new query[256],name[24]; GetPlayerName(playerid,name,sizeof(name));//узнаем имя format(query, sizeof(query), "INSERT INTO `Donate` (`Name`, `Days`) VALUE ('%s','%d')",name,gettime()+86400*days);//gettime()вернет время в секундах, 86400 секунд в одних сутках, days количество дней на которое будет установлен вип аккаунт mysql_query(query);//отправим запрос return true; } Все include клик Теперь нужно создать таблицу в нашей бд: Создаем таблицу с именем Donate, делаем 2 столбца Name и Days. В первом укажем значение string(24), а во втором int(11). Автор:Last. чуть-чуть переделал я.(Vlad_Andreev)
  9. При вызове функции ShowTextDrawMost снизу под деньгами покажет TextDraw в виде разведенного моста. Время на которое будет показан TextDraw нужно указывать свое при вызове функции, по умолчанию - 5 секунд.У меня - 2 минуты. TextDraw показывается всем игрокам онлайн, а после - удаляется. Ко всем переменным: new PlayerText:Most[MAX_PLAYERS][2]; В OnPlayerConnect: Most[playerid][0] = CreatePlayerTextDraw(playerid,513.000000,119.000000,"MOSTUI:sb_0"); PlayerTextDrawBackgroundColor(playerid,Most[playerid][0],255); PlayerTextDrawFont(playerid,Most[playerid][0],4); PlayerTextDrawLetterSize(playerid,Most[playerid][0],0.500000,1.000000); PlayerTextDrawColor(playerid,Most[playerid][0],-1); PlayerTextDrawSetOutline(playerid,Most[playerid][0],0); PlayerTextDrawSetProportional(playerid,Most[playerid][0],1); PlayerTextDrawSetShadow(playerid,Most[playerid][0],1); PlayerTextDrawUseBox(playerid,Most[playerid][0],1); PlayerTextDrawBoxColor(playerid,Most[playerid][0],255); PlayerTextDrawTextSize(playerid,Most[playerid][0],79.000000,74.000000); ////////////////// Most[playerid][1] = CreatePlayerTextDraw(playerid,499.000000,112.000000, "_"); PlayerTextDrawBackgroundColor(playerid,Most[playerid][1],255); PlayerTextDrawFont(playerid,Most[playerid][1],1); PlayerTextDrawLetterSize(playerid,Most[playerid][1],0.500000, 6.599999); PlayerTextDrawColor(playerid,Most[playerid][1],70); PlayerTextDrawSetOutline(playerid,Most[playerid][1],0); PlayerTextDrawSetProportional(playerid,Most[playerid][1],1); PlayerTextDrawSetShadow(playerid,Most[playerid][1],1); PlayerTextDrawUseBox(playerid,Most[playerid][1],1); PlayerTextDrawBoxColor(playerid,Most[playerid][1],40); PlayerTextDrawTextSize(playerid,Most[playerid][1],607.000000, 0.000000); В конец мода: stock ShowTextDrawMost(time = 5) { for(new i = GetMaxPlayers(); i != -1; i--) { if(!IsPlayerConnected(i)) continue; PlayerTextDrawShow(i,Most[i][0]); PlayerTextDrawShow(i,Most[i][1]); SetTimerEx("HideTextDrawMost",time*1000,false,"i",i); } return 1; } forward HideTextDrawMost(playerid); public HideTextDrawMost(playerid) { PlayerTextDrawHide(playerid,Most[playerid][0]); PlayerTextDrawHide(playerid,Most[playerid][1]); return 1; } Теперь в команду разведения моста, вставим строчку, чтобы вызвать textdraw. ShowTextDrawMost(5);//5 - время в секундах на которое будет показан TextDraw
  10. Max_Eitzen

    TextDraw спидометра.

    Нашёл у себя свой первый проект, который я делал в iPLEOMAX. Делал его для одного сервера, ну да ладно. В общем, как всегда выкладываю pwn и itd, чтобы вы могли изменить его под себя. Полоски сбоку, которые указывают на уровень топлива в транспорте, на скриншоте стоят криво, на деле всё ровно. TD_NEWSPEED.pwn TD_NEWSPEED.zip
  11. Max_Eitzen

    TextDraw спидометра.

    Доброго времени суток всем. Когда-то давно ползал по одному из форумов samp и нашел тему о продаже текстдрава, скачал картинку, хотел сделать подобный себе на сервер, но всё руки не доходили.. И вот, от страдая от безделья решил замутить что-то. Попытался скопировать, переведя на русский язык, но т.к. я рукожоп, получилось немного криво. В общем, оценивайте. Кому нужно будет, подгоняйте под себя. Функционал не делал, здесь только TD. - оригинал из САМП - оригинал от меня Выкладываю так же исходник iTD, кто захочет может что-то изменить/добавить. TD_kek_speed.pwn kek_speed.zip
  12. Aleksandr_Fedosov

    Ручные ворота

    Доброго времени суток Уважаемые форумчане я хочу вам рассказать про то как сделать ручные ворота Поясню ручные ворота - ворота, которые открываются/закрываются когда хотите вы без таймеров и комманд Буду делать на примере полиции г.Южный Ну что ж приступим: 1.Ко всем new new GateCop; Но т.к. вы добавляете первые ворота вам надо будет добавить ниже переменной ворот вот эту строку new GateMove = 0; При добавлении дальше вы будете делать так после new GateCop писать например new GatePPS и все Переходим дальше: 2.В public OnPlayerKeyStateChange добавим if(newkeys == 65536 && !IsPlayerInAnyVehicle(playerid) || newkeys == 2 && IsPlayerInAnyVehicle(playerid)) { if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1)//ID фракции пишем свой if(IsPlayerInRangeOfPoint( playerid, 15.0, 2579.8472, -2435.3928, 23.5669))//координаты закрытых ворот { if(GateMove == 0) { MoveObject(GateCop, 2579.8472, -2435.3928, 17.9227, 2.0);//координаты открытых GateMove = 1; } else if(GateMove == 1) { MoveObject(GateCop, 2579.8472, -2435.3928, 23.5669, 2.0);//координаты закрытых GateMove = 0; } } } 3.В public OnGameModeInit добавим: GateCop = CreateObject(980, 2579.85, -2435.39, 23.57, 0.00, 0.00, 90.00);//закрытые На этом все проверял на модах: Omsk RP Revival и new.pwn При желании можно заменить проверку pLeader pMember на pDonateRank если это будет VIP дом и pAdmin дом админа. Также можно сделать ворота по нику Добавив в public OnPlayerKeyStateChange заместо проверки по лидерке вот это new szName[32]; GetPlayerName(playerid,szName,32); if(!strcmp(szName,"Ваш ник",true)) Автор вырезки: Aleksandr_Tanaev Спасибо за внимание
  13. Predator

    Логотип сервера

    Приветствую всех пользователей, Представляю вашему вниманию логотип сервера. Приступим! Ко всем переменным добавим: new Text:Textdraw0; new Text:Textdraw1; Далее В OnGameModeinit: Textdraw0 = TextDrawCreate(509.667083, 421.452026, "cr-mp.ru"); TextDrawLetterSize(Textdraw0, 0.452666, 2.043852); TextDrawTextSize(Textdraw0, -23.666669, 97.066665); TextDrawAlignment(Textdraw0, 1); TextDrawColor(Textdraw0, -65281); TextDrawSetShadow(Textdraw0, 0); TextDrawSetOutline(Textdraw0, 1); TextDrawBackgroundColor(Textdraw0, -2147483393); TextDrawFont(Textdraw0, 3); TextDrawSetProportional(Textdraw0, 1); Textdraw1 = TextDrawCreate(507.666625, 422.537109, "usebox"); TextDrawLetterSize(Textdraw1, 0.000000, 1.987859); TextDrawTextSize(Textdraw1, 633.000183, 0.000000); TextDrawAlignment(Textdraw1, 1); TextDrawColor(Textdraw1, 0); TextDrawUseBox(Textdraw1, true); TextDrawBoxColor(Textdraw1, -1061109505); TextDrawSetShadow(Textdraw1, 0); TextDrawSetOutline(Textdraw1, 0); TextDrawFont(Textdraw1, 0); И В onplayerconnect: TextDrawShowForPlayer(playerid,Textdraw0); TextDrawShowForPlayer(playerid,Textdraw1); Автор: TheSelton Тема закрыта! Нет активности!
  14. Выкладываю скрипт системы достижения.При выполнении достижения - вам даётся определенное кол-во денег и выполняется достижение. Начнем: В enum pInfo добавить: pDostig, pDostigg, pDostiggg, pDostigggg В public OnPlayerConnect: PlayerInfo[playerid][pDostig] = 0; PlayerInfo[playerid][pDostigg] = 0; PlayerInfo[playerid][pDostiggg] = 0; PlayerInfo[playerid][pDostigggg] = 0; В public OnPlayerUpdate, ну или в любой таймер. ( желательно секундный ): if(PlayerInfo[playerid][pDostig] == 0) { if(PlayerInfo[playerid][pDostig] == 1) return 1; if(PlayerInfo[playerid][pDrugs] > 99) SendClientMessage(playerid, -1, "Ты выполнил(а) достижение {0080FF}№1{FFFFFF}. Приз: {0080FF}1OOOO$"), PlayerInfo[playerid][pDostig] = 1, GivePlayerMoney(playerid, 10000); } if(PlayerInfo[playerid][pDostigg] == 0) { if(PlayerInfo[playerid][pDostigg] == 1) return 1; if(PlayerInfo[playerid][pMats] > 9999) SendClientMessage(playerid, -1, "Ты выполнил(а) достижение {0080FF}№2{FFFFFF}. Приз: {0080FF}55OO$"), PlayerInfo[playerid][pDostigg] = 1, GivePlayerMoney(playerid, 5500); } if(PlayerInfo[playerid][pDostiggg] == 0) { if(PlayerInfo[playerid][pDostiggg] == 1) return 1; if(PlayerInfo[playerid][pLevel] > 2) SendClientMessage(playerid, -1, "Ты выполнил(а) достижение {0080FF}№3{FFFFFF}. Приз: {0080FF}1OOOO$"), PlayerInfo[playerid][pDostiggg] = 1, GivePlayerMoney(playerid, 10000); } if(PlayerInfo[playerid][pDostigggg] == 0) { if(PlayerInfo[playerid][pDostigggg] == 1) return 1; if(PlayerInfo[playerid][pMoney] > 499999) SendClientMessage(playerid, -1, "Ты выполнил(а) достижение {0080FF}№4{FFFFFF}. Приз: {0080FF}3O.OOO$"), PlayerInfo[playerid][pDostigggg] = 1, GivePlayerMoney(playerid, 30000); } В public OnPlayerRegister format(var, 64, "Dostig=%d\n",PlayerInfo[playerid][pDostig]);fwrite(hFile, var); format(var, 64, "Dostigg=%d\n",PlayerInfo[playerid][pDostigg]);fwrite(hFile, var); format(var, 64, "Dostiggg=%d\n",PlayerInfo[playerid][pDostiggg]);fwrite(hFile, var); format(var, 64, "Dostigggg=%d\n",PlayerInfo[playerid][pDostigggg]);fwrite(hFile, var); Добавим в public OnPlayerUpdate вот это: format(var, 64, "Dostig=%d\n",PlayerInfo[playerid][pDostig]);fwrite(hFile, var); format(var, 64, "Dostigg=%d\n",PlayerInfo[playerid][pDostigg]);fwrite(hFile, var); format(var, 64, "Dostiggg=%d\n",PlayerInfo[playerid][pDostiggg]);fwrite(hFile, var); format(var, 64, "Dostigggg=%d\n",PlayerInfo[playerid][pDostigggg]);fwrite(hFile, var); В public OnPlayerLogin добавим: if( strcmp( key , "Dostig" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDostig] = strval( val ); } if( strcmp( key , "Dostigg" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDostigg] = strval( val ); } if( strcmp( key , "Dostiggg" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDostiggg] = strval( val ); } if( strcmp( key , "Dostigggg" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDostiggg] = strval( val ); } В public OnPlayerCommandText: else if(strcmp(cmd, "/dostig", true) == 0) return ShowPlayerDostigDialog(playerid); Ко всем стокам/пабликам: stock ShowPlayerDostigDialog(playerid) { new text[50], text2[50], text3[50], text4[50]; switch(PlayerInfo[playerid][pDostig]) { case 0: { text = "{FF3300}Не выполнено"; } case 1: { text = "{33AA33}Выполнено"; } } switch(PlayerInfo[playerid][pDostigg]) { case 0: { text2 = "{FF3300}Не выполнено"; } case 1: { text2 = "{33AA33}Выполнено"; } } switch(PlayerInfo[playerid][pDostiggg]) { case 0: { text3 = "{FF3300}Не выполнено"; } case 1: { text3 = "{33AA33}Выполнено"; } } switch(PlayerInfo[playerid][pDostigggg]) { case 0: { text4 = "{FF3300}Не выполнено"; } case 1: { text4 = "{33AA33}Выполнено"; } } new string[1024], s[1024]; format(s, sizeof(s), "{C3C3C3}1. %s{C3C3C3}. Тебе нужно иметь более {FF3300}1OO{C3C3C3} грамм наркотиков при себе, чтобы выполнить это достижение. Приз: {33AA33}1OOOO${C3C3C3}\n\n", text); strcat(string, s); format(s, sizeof(s), "{C3C3C3}2. %s{C3C3C3}. Тебе нужно иметь более {FF3300}1OOOO{C3C3C3} материалов, чтобы выполнить это достижение. Приз: {33AA33}55OO${C3C3C3}\n\n", text2); strcat(string, s); format(s, sizeof(s), "{C3C3C3}3. %s{C3C3C3}. Тебе нужно получить {FF3300}3{C3C3C3} уровень, чтобы выполнить это достижение. Приз: {33AA33}1OOOO${C3C3C3}\n\n", text3); strcat(string, s); format(s, sizeof(s), "{C3C3C3}4. %s{C3C3C3}. Тебе нужно получить {FF3300}5OOOOO{C3C3C3} денег, чтобы выполнить это достижение. Приз: {33AA33}3OOOO$", text4); strcat(string, s); ShowDialog(playerid, DOST_ID, DIALOG_STYLE_MSGBOX, " ", string, "Назад","Закрыть"); return 1; }
  15. artem.sholohoff

    GPS

    Ко всем new new CP[MAX_PLAYERS]; В public OnPlayerConnect(playerid) CP[playerid] = 0; Ко всем #define, места вы можете добавить по своему, я указал диалог только для одного места! #define GPS_NAMES "[1] Важные места\n[2] Отключить GPS" Потом сама команда if(strcmp(cmd, "/gps", true) == 0) { if(IsPlayerConnected(playerid)) { ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_LIST, "- GPS -", GPS_NAMES, "Выбрать", "Отмена"); return 1; } } ко всем диалогам if(dialogid == 10000) { if(response) { switch (listitem) { case 0: ShowPlayerDialog (playerid, 10001, DIALOG_STYLE_LIST, " Важные места", "[1] Автошкола\n", "Выбрать", "<< Назад"); case 1: { DisablePlayerCheckpoint(playerid); CP[playerid] = 0; SendClientMessage(playerid, COLOR_WHITE, "::: GPS навигатор отключен! ::: "); } } } else { return 1; } } else if(dialogid == 10001) { if(response) { switch (listitem) { case 0: DynamicGPSMarker(playerid, -2041.6616,-66.7263,35.1752); } } else ShowPlayerDialog(playerid, 10000, DIALOG_STYLE_LIST, "- GPS -", GPS_NAMES, "Выбрать", "Отмена"); return 1; } в конец мода stock DynamicGPSMarker(playerid, Float:x, Float:y, Float:z, Float:size = 5.0) { SendClientMessage(playerid,COLOR_LIGHTBLUE,"GPS активирован, ваша цель отмечена на карте маркером"); SetPlayerCheckpoint(playerid, x,y,z,size); CP[playerid] = 10; return true; } Открываем GPS Выбираем место Ваша точка указана на карте Отключаем GPS Автор системы Scooter
  16. В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) надо только вставить : if(newkeys & KEY_SPRINT && newkeys & KEY_JUMP && GetPlayerState(playerid) != 2) { ClearAnimations(playerid); ApplyAnimation(playerid, "GYMNASIUM", "gym_jog_falloff",4.1,0,1,1,0,0); } GYMNASIUM", "gym_jog_falloff это анимация , ее можна сменить на свою , у меня он падает , делайте как хотите Автор : kucklovod1998
  17. artem.sholohoff

    Система голода

    Здравствуйте! Приступим: Ко всем new: new FirstSpawn[MAX_PLAYERS]; new Float:spenHealth[MAX_PLAYERS]; К forward: forward NeedHP(playerid); К define: #define hp_time 100000 // время ставите своё #define hp_loss 3 В конец мода: public NeedHP(playerid) { new Float:health; GetPlayerHealth(playerid, health); if(spenHealth[playerid] >= health) { SendClientMessage(playerid,COLOR_RED,"Вы проголодались, Вам нужно поесть что-нибудь!"); SetPlayerHealth(playerid,health-hp_loss); spenHealth[playerid] = health; } else { spenHealth[playerid] = health; } } В OnPlayerSpawn: FirstSpawn[playerid] += 1; new Float:health; GetPlayerHealth(playerid, health); spenHealth[playerid] = health; if(FirstSpawn[playerid] == 1) SetTimerEx("NeedHP",hp_time,1,"i",playerid); Автор: Dimoxa Batler
  18. Институт есть в Арзамасе. Автор: Artem_Bandit то есть я. Можно сделать лучше. В команду /invite проставить проверку на получение аттестата. В public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd, "/testrp", true) == 0) { if(PlayerToPoint(10.0, playerid,Радиус свой)) ShowPlayerDialog(playerid, 2324, DIALOG_STYLE_LIST, "Ваши действия если вас остановит Сотрудник Полиции", "1)Избить\n2)Предоставить права\n3)Сказать:В чем дело\n4)Уехать с место КПК", "Выбрать", "Отмена");//2324 ?????? ?? ???? return 1; } if(strcmp(cmd, "/testmt", true) == 0) { if(PlayerToPoint(10.0, playerid,Радиус свой)) if(PlayerInfo[giveplayerid][pTest] != 1) return SendClientMessage(playerid, -1, "?? ?? ???????? ???????? ?? RolePlay"); ShowPlayerDialog(playerid, 7324, DIALOG_STYLE_LIST, "54X78", "1)8732\n2)4212\n3)4216\n4)2153", "???????", "??????");//2324 ?????? ?? ???? return 1; } В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  19. #Bazuka

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

    Параметры вставляйте свои. Го GO!!! Думаю расписывать нечего не нужно там всё понятно по диалогом Автор: by Artem_Bandit то есть я В public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd, "/donate", true) == 0) { if(IsPlayerConnected(playerid)) { new co[40]; format(co,sizeof(co),"|Счёт| %d ДО",PlayerlogInfo[playerid][lRezerv]); ShowPlayerDialog(playerid,9000,DIALOG_STYLE_LIST,co,"Купить VIP[150]ДО\nКупить респект's[1]ДО\nКупить деньги[100]ДО\nПередать ДО\nКупить слот[70]ДО\nКупить level[45]ДО\nКупить военный билет[50]ДО\nСнять Warn's[20]ДО\nКупить медицинскую карту[20]ДО\nСнять розыск[15]ДО\nКупить Neon[100]ДО\n[ТС]Купить номер[100]\nКупить категорию B[60]ДО\nОБМЕН $ на ДО","Далее","Отмена"); } return 1; } Далее идет в диалоги,наш диалог 9000 вы можете заменить на свой В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) //============================================================================== if(dialogid == 9000)//админ доступ { if(response) { if(listitem == 0) { new ice[256]; format(ice, sizeof ice, "Вы уверены что хотите купить VIP за {57ff00}150 ДО"); return ShowPlayerDialog(playerid, 9001, DIALOG_STYLE_MSGBOX, "Покупка VIP", ice, "Отмена", "Купить"); } if(listitem == 1) { ShowPlayerDialog(playerid,9002,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}2 ДО = 2 респектам,{7fffd4} за респекты можно купить левле\nВведи колличество ДО которые хочешь потратить на респект's","Ок","Отмена"); } if(listitem == 2) { ShowPlayerDialog(playerid,9003,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}100 ДО = $100000,{7fffd4}\nВведи колличество ДО которые хочешь потратить на игровые деньги","Ок","Отмена"); } if(listitem == 3) { ShowPlayerDialog(playerid,9004,DIALOG_STYLE_INPUT,"Платёжная система","Введите ID игрока,которому хочешь передать ДО","Ок","Отмена"); return 1; } if(listitem == 4) { new ice[256]; format(ice, sizeof ice, "Вы уверены,что хотите купить 1 слот для бизнеса? {57ff00}За 70 ДО"); return ShowPlayerDialog(playerid, 9007, DIALOG_STYLE_MSGBOX, "Покупка слотов бизнеса", ice, "НЕТ", "Купить"); } if(listitem == 5) { if(PlayerlogInfo[playerid][lRezerv] <= 44) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО");//Если у человека нехватает донат монет то выводим ему сообщение PlayerInfo[playerid][pLevel]++;//Даём +1 к уровню игрока PlayerlogInfo[playerid][lRezerv]-= 45; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам выдали + level"); } if(listitem == 6) { if(PlayerlogInfo[playerid][lRezerv] <= 49) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО");//Если у человека нехватает донат монет то выводим ему сообщение PlayerInfo[playerid][pArmBil] = 1;//Даём +1 к уровню игрока PlayerlogInfo[playerid][lRezerv]-= 50; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам выдали военный билет"); } if(listitem == 7) { if(PlayerlogInfo[playerid][lRezerv] <= 19) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО");//Если у человека нехватает донат монет то выводим ему сообщение PlayerInfo[playerid][pWarns] -= 1;//Даём +1 к уровню игрока PlayerlogInfo[playerid][lRezerv]-= 20; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам сняли один Warn"); } if(listitem == 8) { if(PlayerlogInfo[playerid][lRezerv] <= 19) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО");//Если у человека нехватает донат монет то выводим ему сообщение PlayerInfo[playerid][pMedCard] = 1;//Даём +1 к уровню игрока PlayerlogInfo[playerid][lRezerv]-= 20; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам выдали медицинскую карту"); } if(listitem == 9) { if(PlayerlogInfo[playerid][lRezerv] <= 19) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО");//Если у человека нехватает донат монет то выводим ему сообщение WantedPoints[playerid] = 0; WantedLevel[playerid] = 0; ClearCrime(playerid); PlayerInfo[playerid][pWantedLevel] = 0; SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWantedLevel]); PlayerlogInfo[playerid][lRezerv]-= 20; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам сняли все звезды"); } if(listitem == 10) { SendClientMessage(playerid, COLOR_ORANGERED, "GPS: Покупка {ff0000}Neon показан на карте,езжайте на место за покупкой Neon"); SetPlayerCheckpoint(playerid, 2152.4531,-1852.2424,18.8309,8); CP[playerid] = 0; } if(listitem == 11) { if(PlayerlogInfo[playerid][lRezerv] <= 99) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО"); OnPlayerCommandText(playerid, "/donatenomer"); PlayerlogInfo[playerid][lRezerv]-= 100; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам выдали номер"); } if(listitem == 12) { if(PlayerlogInfo[playerid][lRezerv] <= 59) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}ДО"); PlayerInfo[playerid][pCarLic] = 1; PlayerlogInfo[playerid][lRezerv]-= 60; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вам выдали {FF0000}Категорию B"); } if(listitem == 13) { if(PlayerInfo[playerid][pCash] <= 99999) return SendClientMessage(playerid, COLOR_LIGHTRED,"{57ff00}У вас недостаточно {FF0000}Денег"); PlayerlogInfo[playerid][lRezerv] = 5; PlayerInfo[playerid][pCash]-= 100000; SendClientMessage(playerid, COLOR_LIGHTRED,"Спасибо за покупку,вы обменяли игровую валюту на ДО"); } } return 1; } //============================================================================== if(dialogid == 9001) { if(!response){ if(PlayerlogInfo[playerid][lRezerv] >= 150) { if(PlayerInfo[playerid][pDonateRank] <= 4) { PlayerlogInfo[playerid][lRezerv]-= 150; new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); PlayerInfo[playerid][pDonateRank] = 5; SendClientMessage(playerid, COLOR_GREEN, "Спасибо за покупку!"); if(PlayerInfo[playerid][pVaip] >= 30) { new hour,minuite,second; gettime(hour,minuite,second); new year, month,day; getdate(year, month, day); new ipplayer[32]; GetPlayerIp(playerid,ipplayer,sizeof(ipplayer)); if(!strcmp(PlayerlogInfo[playerid][lDonatper],"none",false)) { format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-150{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка VIP",day,month,year,hour,minuite,second,ipplayer); Savelogplayer(logid,playerid); } else { format(PlayerlogInfo[playerid][lDonatper10] ,512, PlayerlogInfo[playerid][lDonatper9]); format(PlayerlogInfo[playerid][lDonatper9] ,512, PlayerlogInfo[playerid][lDonatper8]); format(PlayerlogInfo[playerid][lDonatper8] ,512, PlayerlogInfo[playerid][lDonatper7]); format(PlayerlogInfo[playerid][lDonatper7] ,512, PlayerlogInfo[playerid][lDonatper6]); format(PlayerlogInfo[playerid][lDonatper6] ,512, PlayerlogInfo[playerid][lDonatper5]); format(PlayerlogInfo[playerid][lDonatper5] ,512, PlayerlogInfo[playerid][lDonatper4]); format(PlayerlogInfo[playerid][lDonatper4] ,512, PlayerlogInfo[playerid][lDonatper3]); format(PlayerlogInfo[playerid][lDonatper3] ,512, PlayerlogInfo[playerid][lDonatper2]); format(PlayerlogInfo[playerid][lDonatper2] ,512, PlayerlogInfo[playerid][lDonatper]); format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-150{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка VIP.",day,month,year,hour,minuite,second,ipplayer); Savelogplayer(logid,playerid); } } }else{SendClientMessage(playerid, COLOR_RED, "У вас уже есть VIP!");} }else{SendClientMessage(playerid, COLOR_RED, "У вас не достаточно денег для покупки!");} } return true; } //============================================================================== if(dialogid == 9002){ if(response){ if(!strlen(inputtext))return ShowPlayerDialog(playerid,9002,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}2 ДО = 2 респектам,{7fffd4} за респекты можно купить левле\nВВеди колличество ДО которые хочешь потратить на респект's","Ок","Отмена"); if(strlen(inputtext) == 0)return ShowPlayerDialog(playerid,9002,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}2 ДО = 2 респектам,{7fffd4} за респекты можно купить левле\nВВеди колличество ДО которые хочешь потратить на респект's","Ок","Отмена"); respectforplayer[playerid] = strval(inputtext); new ice[256]; format(ice, sizeof ice, "Вы уверены что хотите купить %d респект's\nЗа %d ДО\nС вас будет списано %d ДО",respectforplayer[playerid]*2,respectforplayer[playerid],respectforplayer[playerid]); return ShowPlayerDialog(playerid, 9906, DIALOG_STYLE_MSGBOX, "Покупка респектов", ice, "НЕТ", "ДА"); } return true; } //============================================================================== if(dialogid == 9003){ if(response){ if(!strlen(inputtext))return ShowPlayerDialog(playerid,9003,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}1 ДО = $100000,{7fffd4}\nВВеди колличество ДО которые хочешь потратить на игровые деньги","Ок","Отмена"); if(strlen(inputtext) == 0)return ShowPlayerDialog(playerid,9003,DIALOG_STYLE_INPUT,"Платёжная система","{ff00ae}1 ДО = $100000,{7fffd4}\nВВеди колличество ДО которые хочешь потратить на игровые деньги","Ок","Отмена"); respectforplayer[playerid] = strval(inputtext); new ice[256]; format(ice, sizeof ice, "Вы уверены что хотите купить $%d\nЗа %d ДО\nС вас будет списано %d ДО",respectforplayer[playerid]*100000,respectforplayer[playerid],respectforplayer[playerid]); return ShowPlayerDialog(playerid, 9912, DIALOG_STYLE_MSGBOX, "Покупка денег", ice, "НЕТ", "ДА"); } return true; } //============================================================================== if(dialogid == 9004){ if(response){ if(!strlen(inputtext)) return ShowPlayerDialog(playerid,9004,DIALOG_STYLE_INPUT,"Платёжная система","ВВеди ид игрока которому хочешь передать ДО","Ок","Отмена"); ShowPlayerDialog(playerid,9005,DIALOG_STYLE_INPUT,"Платёжная система","ВВеди количество ДО которые хочешь передать","Ок","Отмена"); playeridooooo[playerid] = strval(inputtext); } return true; } //============================================================================== if(dialogid == 9005){ if(response){ if(!strlen(inputtext)) return ShowPlayerDialog(playerid,9005,DIALOG_STYLE_INPUT,"Платёжная система","ВВеди количество ДО которые хочешь передать","Ок","Отмена"); new ice[256]; moneyplayeridooooo[playerid] = strval(inputtext); format(ice, sizeof ice, "Вы уверены что хотите перевести [%d] ДО, на [%d]",strval(inputtext),playeridooooo[playerid]); return ShowPlayerDialog(playerid, 9006, DIALOG_STYLE_MSGBOX, "Перевод ДО", ice, "НЕТ", "ДА"); } return true; } if(dialogid == 9006) { if(!response) { if(moneyplayeridooooo[playerid] >= 1) { if(PlayerlogInfo[playerid][lRezerv] >= moneyplayeridooooo[playerid]) { new getplayerid = playeridooooo[playerid]; if(zagruzka[getplayerid] == 0){OnPlayerCommandText(playerid,"/перезагрузка");return 1;} if(PlayerInfo[playerid][pVaip] >= 30) { new sendernamer[MAX_PLAYER_NAME]; new giveplayer[MAX_PLAYER_NAME]; GetPlayerName(getplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendernamer, sizeof(sendernamer)); if(playeridooooo[playerid] == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Игрок не найден!"); { new hour,minuite,second; gettime(hour,minuite,second); new year, month,day; getdate(year, month, day); new ipplayer[32]; GetPlayerIp(playerid,ipplayer,sizeof(ipplayer)); if(!strcmp(PlayerlogInfo[playerid][lDonatper],"none",false)) { format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-%d{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Перевод денег.На: %s",moneyplayeridooooo[playerid],day,month,year,hour,minuite,second,ipplayer,giveplayer); } else { format(PlayerlogInfo[playerid][lDonatper10] ,512, PlayerlogInfo[playerid][lDonatper9]); format(PlayerlogInfo[playerid][lDonatper9] ,512, PlayerlogInfo[playerid][lDonatper8]); format(PlayerlogInfo[playerid][lDonatper8] ,512, PlayerlogInfo[playerid][lDonatper7]); format(PlayerlogInfo[playerid][lDonatper7] ,512, PlayerlogInfo[playerid][lDonatper6]); format(PlayerlogInfo[playerid][lDonatper6] ,512, PlayerlogInfo[playerid][lDonatper5]); format(PlayerlogInfo[playerid][lDonatper5] ,512, PlayerlogInfo[playerid][lDonatper4]); format(PlayerlogInfo[playerid][lDonatper4] ,512, PlayerlogInfo[playerid][lDonatper3]); format(PlayerlogInfo[playerid][lDonatper3] ,512, PlayerlogInfo[playerid][lDonatper2]); format(PlayerlogInfo[playerid][lDonatper2] ,512, PlayerlogInfo[playerid][lDonatper]); format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-%d{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Перевод денег.На: %s",moneyplayeridooooo[playerid],day,month,year,hour,minuite,second,ipplayer,giveplayer); } if(PlayerInfo[getplayerid][pVaip] >= 30) { new ipplayers[32]; GetPlayerIp(getplayerid,ipplayers,sizeof(ipplayers)); if(!strcmp(PlayerlogInfo[getplayerid][lDonatper],"none",false)) { format(PlayerlogInfo[getplayerid][lDonatper] ,512, "{00ff00}+%d{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Перевод денег.От: %s",moneyplayeridooooo[playerid],day,month,year,hour,minuite,second,ipplayer,sendernamer); } else { format(PlayerlogInfo[getplayerid][lDonatper10] ,512, PlayerlogInfo[getplayerid][lDonatper9]); format(PlayerlogInfo[getplayerid][lDonatper9] ,512, PlayerlogInfo[getplayerid][lDonatper8]); format(PlayerlogInfo[getplayerid][lDonatper8] ,512, PlayerlogInfo[getplayerid][lDonatper7]); format(PlayerlogInfo[getplayerid][lDonatper7] ,512, PlayerlogInfo[getplayerid][lDonatper6]); format(PlayerlogInfo[getplayerid][lDonatper6] ,512, PlayerlogInfo[getplayerid][lDonatper5]); format(PlayerlogInfo[getplayerid][lDonatper5] ,512, PlayerlogInfo[getplayerid][lDonatper4]); format(PlayerlogInfo[getplayerid][lDonatper4] ,512, PlayerlogInfo[getplayerid][lDonatper3]); format(PlayerlogInfo[getplayerid][lDonatper3] ,512, PlayerlogInfo[getplayerid][lDonatper2]); format(PlayerlogInfo[getplayerid][lDonatper2] ,512, PlayerlogInfo[getplayerid][lDonatper]); format(PlayerlogInfo[getplayerid][lDonatper] ,512, "{00ff00}+%d{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Перевод денег.От: %s",moneyplayeridooooo[playerid],day,month,year,hour,minuite,second,ipplayer,sendernamer); } PlayerlogInfo[playerid][lRezerv]-= moneyplayeridooooo[playerid]; PlayerlogInfo[getplayerid][lRezerv]+= moneyplayeridooooo[playerid]; new tuce[256]; format(tuce, sizeof(tuce), "На ваш счёт было зачислино:%d ДО!",moneyplayeridooooo[playerid]); SendClientMessage(getplayerid, COLOR_BLUE, tuce); format(tuce, sizeof(tuce), "С вашего счёта было списано:%d ДО!",moneyplayeridooooo[playerid]); SendClientMessage(playerid, COLOR_BLUE, tuce); new logid2 = PlayerInfo[getplayerid][pLogsistembyan]; Savelogplayer(logid2,getplayerid); new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); return true; } } } SendClientMessage(playerid, COLOR_RED, "Ошибка! Данные аккаунта не найдены, и/или ида такого нету!"); return true; }else{SendClientMessage(playerid, COLOR_RED, "У вас нет такой суммы ДО!");} }else{SendClientMessage(playerid, COLOR_RED, "0 нельзя!");} } return true; } //============================================================================== if(dialogid == 9007){ if(!response){ if(PlayerlogInfo[playerid][lRezerv] >= 70) { if(PlayerInfo[playerid][pSlots] <= 8) { PlayerlogInfo[playerid][lRezerv]-= 70; new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); PlayerInfo[playerid][pSlots]++; SendClientMessage(playerid, COLOR_GREEN, "Спасибо за покупку!"); if(PlayerInfo[playerid][pVaip] >= 30) { new hour,minuite,second; gettime(hour,minuite,second); new year, month,day; getdate(year, month, day); new ipplayer[32]; GetPlayerIp(playerid,ipplayer,sizeof(ipplayer)); if(!strcmp(PlayerlogInfo[playerid][lDonatper],"none",false)) { format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-30{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка слота для бизнеса",day,month,year,hour,minuite,second,ipplayer); Savelogplayer(logid,playerid); } else { format(PlayerlogInfo[playerid][lDonatper10] ,512, PlayerlogInfo[playerid][lDonatper9]); format(PlayerlogInfo[playerid][lDonatper9] ,512, PlayerlogInfo[playerid][lDonatper8]); format(PlayerlogInfo[playerid][lDonatper8] ,512, PlayerlogInfo[playerid][lDonatper7]); format(PlayerlogInfo[playerid][lDonatper7] ,512, PlayerlogInfo[playerid][lDonatper6]); format(PlayerlogInfo[playerid][lDonatper6] ,512, PlayerlogInfo[playerid][lDonatper5]); format(PlayerlogInfo[playerid][lDonatper5] ,512, PlayerlogInfo[playerid][lDonatper4]); format(PlayerlogInfo[playerid][lDonatper4] ,512, PlayerlogInfo[playerid][lDonatper3]); format(PlayerlogInfo[playerid][lDonatper3] ,512, PlayerlogInfo[playerid][lDonatper2]); format(PlayerlogInfo[playerid][lDonatper2] ,512, PlayerlogInfo[playerid][lDonatper]); format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-30{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка слота для бизнеса",day,month,year,hour,minuite,second,ipplayer); Savelogplayer(logid,playerid); } } }else{SendClientMessage(playerid, COLOR_RED, "У вас уже 10 слотов, больше нельзя!");} }else{SendClientMessage(playerid, COLOR_RED, "У вас не достаточно денег для покупки!");} } return true; } if(dialogid == 9906){ if(!response){ if(respectforplayer[playerid] >= 2) { if(PlayerlogInfo[playerid][lRezerv] >= respectforplayer[playerid]) { new str[64]; PlayerInfo[playerid][pExp] += respectforplayer[playerid]*2; PlayerlogInfo[playerid][lRezerv] -= respectforplayer[playerid]; format(str, sizeof(str), "С вас было списано: [%d] ДО", respectforplayer[playerid]); SendClientMessage(playerid, COLOR_GREEN, str); if(PlayerInfo[playerid][pVaip] >= 30) { new hour,minuite,second; gettime(hour,minuite,second); new year, month,day; getdate(year, month, day); new ipplayer[32]; GetPlayerIp(playerid,ipplayer,sizeof(ipplayer)); if(!strcmp(PlayerlogInfo[playerid][lDonatper],"none",false)) { format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-[%d]{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка респектов.",respectforplayer[playerid],day,month,year,hour,minuite,second,ipplayer); new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); } else { format(PlayerlogInfo[playerid][lDonatper10] ,512, PlayerlogInfo[playerid][lDonatper9]); format(PlayerlogInfo[playerid][lDonatper9] ,512, PlayerlogInfo[playerid][lDonatper8]); format(PlayerlogInfo[playerid][lDonatper8] ,512, PlayerlogInfo[playerid][lDonatper7]); format(PlayerlogInfo[playerid][lDonatper7] ,512, PlayerlogInfo[playerid][lDonatper6]); format(PlayerlogInfo[playerid][lDonatper6] ,512, PlayerlogInfo[playerid][lDonatper5]); format(PlayerlogInfo[playerid][lDonatper5] ,512, PlayerlogInfo[playerid][lDonatper4]); format(PlayerlogInfo[playerid][lDonatper4] ,512, PlayerlogInfo[playerid][lDonatper3]); format(PlayerlogInfo[playerid][lDonatper3] ,512, PlayerlogInfo[playerid][lDonatper2]); format(PlayerlogInfo[playerid][lDonatper2] ,512, PlayerlogInfo[playerid][lDonatper]); format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-%d{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка респектов.",respectforplayer[playerid],day,month,year,hour,minuite,second,ipplayer); new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); } } return true; }else{SendClientMessage(playerid, COLOR_RED, "У вас не достаточно денег для покупки!");} }else{SendClientMessage(playerid, COLOR_RED, "0 нельзя!");} } return true; } if(dialogid == 9912){ if(!response){ if(respectforplayer[playerid] >= 100) { if(PlayerlogInfo[playerid][lRezerv] >= respectforplayer[playerid]) { new str[64]; PlayerlogInfo[playerid][lRezerv] -= respectforplayer[playerid]; GiveMoney(playerid, respectforplayer[playerid]*100000); format(str, sizeof(str), "С вас было списано: [%d] ДО", respectforplayer[playerid]); SendClientMessage(playerid, COLOR_GREEN, str); if(PlayerInfo[playerid][pVaip] >= 30) { new hour,minuite,second; gettime(hour,minuite,second); new year, month,day; getdate(year, month, day); new ipplayer[32]; GetPlayerIp(playerid,ipplayer,sizeof(ipplayer)); if(!strcmp(PlayerlogInfo[playerid][lDonatper],"none",false)) { format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-[%d]{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка игровых денег.",respectforplayer[playerid],day,month,year,hour,minuite,second,ipplayer); new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); } else { format(PlayerlogInfo[playerid][lDonatper10] ,512, PlayerlogInfo[playerid][lDonatper9]); format(PlayerlogInfo[playerid][lDonatper9] ,512, PlayerlogInfo[playerid][lDonatper8]); format(PlayerlogInfo[playerid][lDonatper8] ,512, PlayerlogInfo[playerid][lDonatper7]); format(PlayerlogInfo[playerid][lDonatper7] ,512, PlayerlogInfo[playerid][lDonatper6]); format(PlayerlogInfo[playerid][lDonatper6] ,512, PlayerlogInfo[playerid][lDonatper5]); format(PlayerlogInfo[playerid][lDonatper5] ,512, PlayerlogInfo[playerid][lDonatper4]); format(PlayerlogInfo[playerid][lDonatper4] ,512, PlayerlogInfo[playerid][lDonatper3]); format(PlayerlogInfo[playerid][lDonatper3] ,512, PlayerlogInfo[playerid][lDonatper2]); format(PlayerlogInfo[playerid][lDonatper2] ,512, PlayerlogInfo[playerid][lDonatper]); format(PlayerlogInfo[playerid][lDonatper] ,512, "{ff0005}-[%d]{75ff0e}ДО{cadaba}Число:{78c42d}%d{cadaba}Месяц:{78c42d}%d{cadaba}Год:{78c42d}%d{cadaba}Время(мск):{78c42d}%d{cadaba}:{78c42d}%d{cadaba}:{78c42d}%d{cadaba},IP({063103}%s{cadaba}){00ffc6}Покупка игровых денег.",respectforplayer[playerid],day,month,year,hour,minuite,second,ipplayer); new logid = PlayerInfo[playerid][pLogsistembyan]; Savelogplayer(logid,playerid); } } return true; }else{SendClientMessage(playerid, COLOR_RED, "У вас не достаточно денег для покупки!");} }else{SendClientMessage(playerid, COLOR_RED, "0 нельзя!");} } return true; }
  20. Здравствуйте форумчане выкладываю мануал который может быть полезен для каждого проекта Для начала создадим define и enum #define GARAGE_X 2315.6699//координаты появления в гаражей по оси X#define GARAGE_Y -198.7284//координаты появления в гаражей по оси Y #define GARAGE_Z 2.0088//координаты появления в гаражей по оси Z #define GARAGE_A 180.0000//координаты появления в гаражей по оси A #define GARAGE_INT 15//интерьер в гараже,можете не менять enum gInfo { gOwner[32],//владелец gPrice,//цена gLock,//открыть или закрыт Float:gX,//координаты пикапа по оси X Float:gY,//координаты пикапа по оси Y Float:gZ,//координаты пикапа по оси Z Float:gA//координаты пикапа по оси A }; new Garage[200][gInfo];//200 максимальное кол-во гаражей new AllGarage;//всего гаражей new Text3D:Text3DCar[200];//3д текст над гаражами далее в конце мода создадим 2 стока(загрузки и сохранение гаражей) stock LoadGarage(){ new ids[32],str[64]; new iniOpens = ini_openFile("garage/garage.cfg"); ini_getInteger(iniOpens, "AllGarage", AllGarage); ini_closeFile(iniOpens); if(AllGarage != 0) { for(new garage = 1; garage <= AllGarage; garage++) { format(ids,sizeof(ids),"garage/%d.ini",garage); new inigOpen = ini_openFile(ids); ini_getFloat(inigOpen, "gX", Garage[garage][gX]); ini_getFloat(inigOpen, "gY", Garage[garage][gY]); ini_getFloat(inigOpen, "gZ", Garage[garage][gZ]); ini_getFloat(inigOpen, "gA", Garage[garage][gA]); ini_getString(inigOpen, "gOwner", str); format(Garage[garage][gOwner],24,"%s",str); ini_getInteger(inigOpen, "gPrice", Garage[garage][gPrice]); ini_getInteger(inigOpen, "gLock", Garage[garage][gLock]); ini_closeFile(inigOpen); if(!strcmp("None", Garage[garage][gOwner], true)) { format(str,sizeof(str),"Гараж номер %d]\nПродаётся цена %d]",garage,Garage[garage][gPrice]); CreatePickup(1274, 1, Garage[garage][gX], Garage[garage][gY], Garage[garage][gZ]); } else { format(str,sizeof(str),"Гараж номер %d]\nВладелец %s]",garage,Garage[garage][gOwner]); CreatePickup(1239, 1, Garage[garage][gX], Garage[garage][gY], Garage[garage][gZ]); } Text3DCar[garage] = CreateDynamic3DTextLabel(str, 0xCE9A00FF, Garage[garage][gX], Garage[garage][gY], Garage[garage][gZ],15.0); } } return 1; } stock SaveGarage(garage) { new ids[32]; format(ids,sizeof(ids),"garage/%d.ini",garage); new iniggOpen; iniggOpen = ini_openFile(ids); if(iniggOpen == -1 || iniggOpen == -2) iniggOpen = ini_createFile(ids); ini_setFloat(iniggOpen, "gZ", Garage[garage][gZ]); ini_setFloat(iniggOpen, "gX", Garage[garage][gX]); ini_setFloat(iniggOpen, "gY", Garage[garage][gY]); ini_setFloat(iniggOpen, "gA", Garage[garage][gA]); ini_setString(iniggOpen, "gOwner", Garage[garage][gOwner]); ini_setInteger(iniggOpen, "gPrice", Garage[garage][gPrice]); ini_setInteger(iniggOpen, "gLock", Garage[garage][gLock]); ini_closeFile(iniggOpen); return 1; } теперь в public OnGameModeInit() LoadGarage();//загрузка гаражей ну и осталось только команды,в public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd,"/ga",true)==0){ new temp[256]; temp = strcharsplit(cmdtext, idx); if(!strlen(temp)) return SendClientMessage(playerid,COLOR_WHITE," Используйте: /ga [buy(купить) sell(продать) lock(закрыть) enter(войти) exit(выйти)"); if(strcmp(temp,"buy",true)==0) { for(new gar = 1; gar <= AllGarage;gar++) { if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ])) { if(!strcmp("None", Garage[gar][gOwner], true)) { if(GetPlayerMoney(playerid) > Garage[gar][gPrice]) { strmid(Garage[gar][gOwner], GN(playerid), 0, strlen(GN(playerid)), 255); GivePlayerMoney(playerid,-Garage[gar][gPrice]); format(temp,sizeof(temp),"Гараж номер:[%d]\nВладелец:[%s]",gar,Garage[gar][gOwner]); UpdateDynamic3DTextLabelText(Text3DCar[gar], 0xCE9A00FF, temp); SaveGarage(gar); return SendClientMessage(playerid,COLOR_WHITE," Вы успешно купили гараж"); } else return SendClientMessage(playerid,COLOR_WHITE," У вас нету денег на покупку"); } else return SendClientMessage(playerid,COLOR_WHITE," Гараж уже кем то куплен"); } } } else if(strcmp(temp,"sell",true)==0) { for(new gar = 1; gar <= AllGarage;gar++) { if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ])) { if(!strcmp(GN(playerid), Garage[gar][gOwner], true)) { strmid(Garage[gar][gOwner], "None", 0, strlen("None"), 255); GivePlayerMoney(playerid,Garage[gar][gPrice]/2); Garage[gar][gLock] = 1; SaveGarage(gar); format(temp,sizeof(temp),"Гараж номер:[%d]\nПродаеться Цена:[%d$]",gar,Garage[gar][gPrice]); UpdateDynamic3DTextLabelText(Text3DCar[gar], 0xCE9A00FF, temp); return SendClientMessage(playerid,COLOR_WHITE," Вы успешно продали свой гараж"); } else return SendClientMessage(playerid,COLOR_WHITE," Гараж не принадледит вам"); } } } else if(strcmp(temp,"lock",true)==0) { for(new gar = 1; gar <= AllGarage;gar++) { if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]) || (IsPlayerInRangeOfPoint(playerid, 20.0,GARAGE_X,GARAGE_Y,GARAGE_Z) && gar == GetPlayerVirtualWorld(playerid))) { if(!strcmp(GN(playerid), Garage[gar][gOwner], true)) { if(Garage[gar][gLock] == 1) { Garage[gar][gLock] = 0; SaveGarage(gar); return SendClientMessage(playerid,COLOR_WHITE," Гараж открыт"); } else { Garage[gar][gLock] = 1; SaveGarage(gar); return SendClientMessage(playerid,COLOR_WHITE," Гараж закрыт"); } } else return SendClientMessage(playerid,COLOR_WHITE," Гараж не принадлежит вам"); } } } else if(strcmp(temp,"enter",true)==0) { for(new gar = 1; gar <= AllGarage;gar++) { if(IsPlayerInRangeOfPoint(playerid, 2.5,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ])) { if(Garage[gar][gLock] == 1) return SendClientMessage(playerid,COLOR_WHITE," Гараж закрыт"); if(IsPlayerInAnyVehicle(playerid)) { new carid = GetPlayerVehicleID(playerid); SetVehiclePos(carid, GARAGE_X,GARAGE_Y,GARAGE_Z+1.0); SetPlayerPos(playerid,GARAGE_X,GARAGE_Y,GARAGE_Z+1.0); LinkVehicleToInterior(carid, GARAGE_INT); SetVehicleVirtualWorld(carid, gar); SetVehicleZAngle(carid, GARAGE_A); SetPlayerInterior(playerid,GARAGE_INT); SetPlayerVirtualWorld(playerid,gar); PutPlayerInVehicle(playerid,carid,0); } else { SetPlayerPos(playerid,GARAGE_X,GARAGE_Y,GARAGE_Z+1.0); SetPlayerInterior(playerid,GARAGE_INT); SetPlayerVirtualWorld(playerid,gar); } break; } } } else if(strcmp(temp,"exit",true)==0) { if(GetPlayerVirtualWorld(playerid) == 0) return SendClientMessage(playerid,COLOR_WHITE," Вы не находитесь в гараже "); for(new gar = 1; gar <= AllGarage;gar++) { if(IsPlayerInRangeOfPoint(playerid, 20.0,GARAGE_X,GARAGE_Y,GARAGE_Z) && gar == GetPlayerVirtualWorld(playerid)) { if(IsPlayerInAnyVehicle(playerid)) { new carid = GetPlayerVehicleID(playerid); LinkVehicleToInterior(carid, 0); SetVehicleVirtualWorld(carid, 0); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); SetVehiclePos(carid, Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+5.0); SetVehicleZAngle(carid, Garage[gar][gA]); SetPlayerPos(playerid,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+1.0); PutPlayerInVehicle(playerid,carid,0); } else { SetPlayerPos(playerid,Garage[gar][gX],Garage[gar][gY],Garage[gar][gZ]+1.0); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); } break; } } } return true; } if(strcmp(cmd,"/newga",true)==0) { if(Player[playerid][pAdmin] <= 4) return SendClientMessage(playerid, -1, "У вас нет прав на использование этой команды!"); tmp = strcharsplit(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /newga [Сумма]"); new money = strval(tmp); tmp = strcharsplit(cmdtext, idx); AllGarage++; new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid, X,Y,Z); format(Garage[AllGarage][gOwner],24,"None"); Garage[AllGarage][gPrice] = money; Garage[AllGarage][gLock] = 1; Garage[AllGarage][gX] = X; Garage[AllGarage][gY] = Y; Garage[AllGarage][gZ] = Z; Garage[AllGarage][gA] = 90; if(!strcmp("None", Garage[AllGarage][gOwner], true)) { format(string,sizeof(string),"Гараж номер %d\nПродаеться цена %d]",AllGarage,Garage[AllGarage][gPrice]); CreatePickup(1274, 1, Garage[AllGarage][gX], Garage[AllGarage][gY], Garage[AllGarage][gZ]); } Text3DCar[AllGarage] = CreateDynamic3DTextLabel(string, 0xCE9A00FF, Garage[AllGarage][gX], Garage[AllGarage][gY], Garage[AllGarage][gZ],10.0); SaveGarage(AllGarage); return 1; } поясню по командам,чтобы создать гараж введите /newga цена,все действия с гаражом проходят через команду /ga то есть если мы хотим купить гараж вводим /ga buy и т.д. Координаты появления в гараже меняйте на свои,так как они поставлены под мой маппинг гаража Осталось только в папке scriptfiles создать папку и в папке файлик,ссылку я оставлю ниже garage.rar Автор вырезки : Basis
  21. Доброго времени суток господа! Сейчас будем делать систему, которая показывает в паспорте прописку человека (можете подогнать под себя, например в статистику и т.д.). В начало мода добавляем: forward GetZonaName ( Float: x, Float: y ); forward GetCityName ( Float: x, Float: y ); enum SAZONE_MAIN { SAZONE_NAME[128], Float:SAZONE_AREA[6] }; new gSAZonesCity[][SAZONE_MAIN] = { {"Los Santos", {44.60, -2892.90, -242.90, 2997.00, -768.00, 900.00}}, {"Whetstone", {-2997.40, -2892.90, -242.90, -1213.90, -1115.50, 900.00}} }; new gSAZones[][SAZONE_MAIN] = { // название ( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax) {"The Big Ear", {-410.00, 1403.30, -3.00, -137.90, 1681.20, 200.00}}, {"Yellow Bell Station", {1377.40, 2600.40, -21.90, 1492.40, 2687.30, 78.00}} }; Далее добавим паблики: // районы public GetZonaName ( Float: x, Float: y ) { for ( new i = 0; i != sizeof ( gSAZones ); i++ ) { if ( x >= gSAZones[i][SAZONE_AREA][0] && x <= gSAZones[i][SAZONE_AREA][3] && y >= gSAZones[i][SAZONE_AREA][1] && y <= gSAZones[i][SAZONE_AREA][4]) { return i; } } return 1; } // города public GetCityName ( Float: x, Float: y) { for ( new i = 0; i != sizeof ( gSAZonesCity ); i++ ) { if ( x >= gSAZonesCity[i][SAZONE_AREA][0] && x <= gSAZonesCity[i][SAZONE_AREA][3] && y >= gSAZonesCity[i][SAZONE_AREA][1] && y <= gSAZonesCity[i][SAZONE_AREA][4] ) { return i; } } return 1; } Теперь добавляем в /showpass: if ( PlayerInfo[playerid][pPhousekey] != 999) { new Float: x, Float: y; new h = PlayerInfo[playerid][pPhousekey]; // Заменяем на свой HouseInfo при необходимости ( есть ли дом у игрока ) x = HouseInfo[h][hEntrancex]; // Заменяем на свой HouseInfo при необходимости ( координаты входа в дом по оси X ) y = HouseInfo[h][hEntrancey]; // Заменяем на свой HouseInfo при необходимости ( координаты входа в дом по оси Y ) new ids = GetCityName ( x, y ); new id = GetZonaName ( x, y ); format ( string, sizeof ( string), "Место прописки: г. %s, р-он %s, д. %d", gSAZonesCity[ids][SAZONE_NAME], gSAZones[id][SAZONE_NAME], PlayerInfo[playerid][pPhousekey] ); // Добавляем свое вместо PlayerInfo[playerid][pPhousekey] SendClientMessage ( giveplayerid, COLOR_YELLOW2, string ); } Автор: lonin P.S: координаты менять на свои!!!
  22. Суть заключается в том что игроку присылается сообщение,вы приглашены во фракцию,и игрок может отказаться или принять приглашение Ко всем new добавим: new pInvite[MAX_PLAYERS]; в public OnPlayerConnect(playerid) добавим: pInvite[playerid] = 999; Заменяем свою команду /invite на эту: if(strcmp(cmd, "/invite", true) == 0) { if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "ИСПОЛЬЗОВАНИЕ: /invite [id_игрока/ЧастьИмени]"); new para1; new ftext[20]; para1 = ReturnUser(tmp); if (PlayerInfo[playerid][pLeader] == 0) return SendClientMessage(playerid, COLOR_GRAD1, "Вы не лидер !"); if(IsPlayerConnected(para1)) { if(para1 != INVALID_PLAYER_ID) { if (PlayerInfo[para1][pMember] != 0) return SendClientMessage(playerid, COLOR_GREY, "Этот игрок состоит во фракции!"); if(PlayerInfo[playerid][pLeader] == 1) { ftext = "Ваше название фракции"; } else if(PlayerInfo[playerid][pLeader] == 2) { ftext = "Ваше название фракции и т.д."; } GetPlayerName(para1, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "[Администрация]: Вы были приглашены в %s, Лидером %s", ftext, sendername); SendClientMessage(para1, COLOR_WHITE, string); SendClientMessage(para1, COLOR_WHITE, "Введите /accept team чтобы принять приглашение"); SendClientMessage(para1, COLOR_WHITE, "Введите /cancel team чтобы отвергнуть приглашение"); format(string, sizeof(string), "Вы пригласили игрока %s в %s.", giveplayer,ftext); SendClientMessage(playerid, COLOR_WHITE, string); pInvite[para1] = playerid; } } } return 1; } Внимание если у вас не стандартная команда то добавьте pInvite[para1] = playerid; Код который отправляет на респавн убрать а также убрать смену скина,если у вас больше фракций чем в стандартном ГФ(да полюбому больше) то добавляем в команду /invite так else if(PlayerInfo[playerid][pLeader] == ID фраки) { ftext = "Название"; } в команду /accept добавить else if(strcmp(x_job,"team",true) == 0) { if(pInvite[playerid] < 999) { if(IsPlayerConnected(pInvite[playerid])) { if (gTeam[playerid]==TEAM_GREEN && PlayerInfo[playerid][pMember] == 0 && PlayerInfo[playerid][pFMember] == 255) { if(PlayerInfo[pInvite[playerid]][pLeader] == 1) { PlayerInfo[playerid][pTeam] = 2; gTeam[playerid] = 2; ChosenSkin[playerid] = 280; SetPlayerSkin(playerid, 280); } else if(PlayerInfo[pInvite[playerid]][pLeader] == 2) { PlayerInfo[playerid][pTeam] = 2; gTeam[playerid] = 2; ChosenSkin[playerid] = 286; SetPlayerSkin(playerid, 286); } PlayerInfo[playerid][pMember] = PlayerInfo[pInvite[playerid]][pLeader]; PlayerInfo[playerid][pRank] = 1; SetPlayerInterior(playerid,0); new rand = random(sizeof(gInviteSpawns)); SetPlayerPos(playerid, gInviteSpawns[rand][0], gInviteSpawns[rand][1], gInviteSpawns[rand][2]); // Warp the player SetPlayerFacingAngle(playerid, gInviteSpawns[rand][3]); SetPlayerCameraPos(playerid,gInviteSpawns[rand][0] + 3, gInviteSpawns[rand][1], gInviteSpawns[rand][2]); SetPlayerCameraLookAt(playerid,gInviteSpawns[rand][0], gInviteSpawns[rand][1], gInviteSpawns[rand][2]); TogglePlayerControllable(playerid, 0); SelectChar[playerid] = 255; SelectCharID[playerid] = PlayerInfo[playerid][pMember]; SelectCharPlace[playerid] = 1; PlayerInfo[playerid][pModel] = ChosenSkin[playerid]; PlayerInfo[playerid][pChar] = ChosenSkin[playerid]; new str[64]; GetPlayerName(pInvite[playerid], sendername, sizeof(sendername)); format(str,sizeof(str),"* %s принял ваше приглашение!",sendername); SendClientMessage(pInvite[playerid], COLOR_WHITE, str); SendClientMessage(playerid, COLOR_LIGHTRED, "Используйте next для выбора скина."); SendClientMessage(playerid, COLOR_LIGHTRED, "Если вы нашли скин, который хотите использовать введите done."); pInvite[playerid] = 999; return 1; } else { SendClientMessage(playerid, COLOR_GREY, "Вы состоите во фракции"); return 1; } } return 1; } else { SendClientMessage(playerid, COLOR_GREY, "Никто вас не приглашал вступить в Фракцию/Банду/Мафию"); return 1; } } в команду /cancel добавить: else if(strcmp(x_job,"team",true) == 0) { pInvite[playerid] = 999; new str[64]; GetPlayerName(pInvite[playerid], sendername, sizeof(sendername)); format(str,sizeof(str),"* %s не принял ваше приглашение!",sendername); SendClientMessage(pInvite[playerid], COLOR_WHITE, str); } Автор: Сергей68
  23. Vlad_Miroshnicov

    Команда /bag ZCMD

    Здравствуйте всем С вами Я Vlad_Andreev. Сегодня я хочу показать вам свою команду /bag. Ну так начнём) Данная команда предназначена для #include Команда CMD:bag(playerid,params[])//Команда можете заменить на своё { new string[100];//переменная if(IsPlayerConnected(playerid))//Зашли вы на сервер или нет { if(sscanf(params,"s[128]", params[0])) return SendClientMessage(playerid, 0xFF0000AA, "Используй Команду /bag [Текст].");//Проверка { format(string, sizeof(string), "[ID:%d] %s Заметил Баг: %s",playerid, sendername(playerid), params[0]);//Пишите Администрации что вы нашли баг SendClientMessage(playerid, COLOR_LIGHTBLUE, string);//цвет SendClientMessage(playerid, COLOR_RED, "Спасибо вам за оказанную услугу сервера, Администрация, её обязательно рассмотрят. Ожидайте ответа.");//функция после того как вы напишите что нашли баг log("bag", string);//Название текстового документа куда будут поступать от пользователя текст } } return 1; } Функция Сохранения+Дата время log(filename[],string[]) { new year, month,day; new hour,minuite,second; new stringer[100]; new str[500]; gettime(hour,minuite,second); getdate(year, month, day); format(stringer,sizeof(stringer), "Files/Logs/%s.log",filename);//Поток куда будут сохранятся new File:file = fopen(stringer, io_append); format(str,sizeof(str), "[LOG/BAG]: %s [%i/%i/%i][%i:%i:%i]\r\n",string,day,month,year,hour,minuite,second);//Дата время минуты секунды и т д for(new io=0; io { fputchar(file, str[io], false); } fclose(file); } Автор данной команды я Vlad_Andreev Ссылка чтобы скачать куда будут сохраняться ТЕКСТ, закинуть в scriptfiles
  24. #Bazuka

    Спидометр

    К new. new Text:Textdraw0[MAX_PLAYERS]; new Text:Textdraw1[MAX_PLAYERS]; new Text:Textdraw2[MAX_PLAYERS]; new Text:Textdraw3[MAX_PLAYERS]; new Text:Textdraw4[MAX_PLAYERS]; new Text:Textdraw5[MAX_PLAYERS]; В public OnPlayerStateChange(playerid, newstate, oldstate) OnPlayerStateChange']if(oldstate == PLAYER_STATE_DRIVER) { TextDrawHideForPlayer(playerid, Textdraw0[playerid]); TextDrawHideForPlayer(playerid, Textdraw1[playerid]); TextDrawHideForPlayer(playerid, Textdraw2[playerid]); TextDrawHideForPlayer(playerid, Textdraw3[playerid]); TextDrawHideForPlayer(playerid, Textdraw4[playerid]); TextDrawHideForPlayer(playerid, Textdraw5[playerid]); } Ко всем forward forward LoadTextdraws(); В public OnGameModeInit() LoadTextdraws(); В конец мода.
  25. #Bazuka

    Спидометр

    Первая моя работа с чего.то начинают люди вот потом будет очень подробно расписано о диалогах и с чем их будет Pawno осознаю уже Спидометр первый,думаю пойдет Автор: Лично я
×

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

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