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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. dima47rus110

    Пробег Gamer

    Решил вырезать пробег для мода с основой Gamer Добавим к enum CarsInfo Float:cProbeg, Ко всем new new Text:Rhymed35[MAX_PLAYERS]; Далее в public OtherTimer new estr[32]; if(IsPlayerInAnyVehicle(i)) { format(estr,32,"~w~ЈPOЂE‚: ~g~~h~%.1f~r~ KM",CarInfo[GetPlayerVehicleID(i)][cProbeg]); TextDrawSetString(Rhymed35[i],estr); } public OnPlayerConnect(playerid) Rhymed35[playerid] = TextDrawCreate(495.000000, 370.000000," ");//ПРОБЕГ++++ 390 TextDrawFont(Rhymed35[playerid],2); TextDrawSetOutline(Rhymed35[playerid], 1); TextDrawLetterSize(Rhymed35[playerid], 0.45, 1.5); TextDrawColor(Rhymed35[playerid],225); TextDrawShowForPlayer(playerid, Rhymed35[playerid]); TextDrawSetProportional(Rhymed35[playerid],1); TextDrawBoxColor(Rhymed35[playerid], 80);//70 public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd,"/carpasport",true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /passcar [id]"); giveplayerid = ReturnUser(tmp); new veh = GetPlayerVehicleID(playerid); if(GetRealID(veh) == -1) return SendClientMessage(playerid, COLOR_GRAD2, "Вы должны быть в своём автомобиле"); if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Вы не в машине!"); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string),"\t{FFFFFF}Модель транспорта:%s\n\t{FFFFFF}Владелец:%s\n\t{FFFFFF}Пробег транспорта:%.1f",VehiclesName[GetVehicleModel(GetPlayerVehicleID(playerid))-400], sendername,CarInfo[veh][cProbeg]); ShowPlayerDialog(giveplayerid,499,DIALOG_STYLE_MSGBOX,"Технический талон транспорта.",string,"Посмотрел","Х");//Если диалог 499 присутствует,то замените на любой другой,которого нету(чтобы окно закрылось) return true; } } } К команде /savecar(по умолчанию) CarInfo[AllCars][cProbeg] = 0; public OnPlayerDisconnect(playerid, reason) TextDrawHideForPlayer(playerid,Rhymed35[playerid]); TextDrawDestroy(Rhymed35[playerid]); public OnPlayerStateChange(playerid, newstate, oldstate) if(oldstate-1 && newstate) TextDrawHideForPlayer(playerid,Rhymed35[playerid]); else if(newstate-1) TextDrawShowForPlayer(playerid,Rhymed35[playerid]); stock LoadCar() ini_getFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); stock SaveCar(car) ini_setFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); stock CreateCar(car) ini_setFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); И в конец мода forward Speeeeed(); public Speeeeed() { foreach(Player, playerid) { new Float:sp = GetPlayerSpeed(playerid),Float:ms; ms = (sp/1.4)/700;//1000 CarInfo[GetPlayerVehicleID(playerid)][cProbeg] += ms; } return 1; } У некоторых не обновлялся пробег,добавьте к таймерам(забыл про него) SetTimer("Speeeeed",6000, 1); Обязательно подключите инклуд "foreach",если не подключен Ко всем инклудам,если нету,то скачайте и закиньте в папку сервер/pawno/include/сюда include <foreach> Не знаю надо ли кому это,но решил вырезать,т.к. очень многие искали пробег Пробег не сохраняется после рестарта,кто знает как исправить отпишитесь пожалуйста! Скрины: http://radikall.com/image/V52V http://radikall.com/image/V52H http://radikall.com/image/V52b
  2. Создание банды. Команды посмотрите в самом скрипте. banda.zip
  3. Здравствуйте уважаемые пользователи gs-games. Не знаю есть эта тема или нет... У нас будет сохраняться админка, деньги и Email. Начнем. 1. В самом начале моде вставляем #include <mxINI> 2. Чуть ниже добавляем #define SCM SendClientMessage #define SPD ShowPlayerDialog #define DSI DIALOG_STYLE_INPUT #define DSM DIALOG_STYLE_MSGBOX 3. После этого ниже добавим new sendername[MAX_PLAYER_NAME]; 4. Теперь создадим enum pInfo А значит еще ниже добавляем enum pInfo { pMoney, pPassword[33], pAdmin, pSkin, pEmail[64], }; new Player[MAX_PLAYERS][pInfo]; 5. Дальше создадим простые правила.А значит ниже добавляем new Rules[][] = { {"1. Игровой процесс\n"}, {"Запрещено:\n"}, {"Использование любых программ скриптов читов и.т.п. дающие нечестное преймущество в игре.\n"}, {"Использование багов (Ошибок, Неисправностей мода).\n"}, {"Использовать ESC в целях ухода от погони/смерти.\n"}, {"Убивать игроков на спавне (Место возрождения, базы организаций).\n"}, {"Убивать игроков при помощи транспорта (Давить, Стрелять с водительского места).\n"}, {"Убийство/нанесение физического вреда игрокам без причины (ДМ - Death Match).\n"}, {"Злоупотребление игровыми возможностями для создания неудобств игрокам.\n\n"}, {"2. Ник в игре\n"}, {"(сменить ник можно через /mm » Сменить ник)\n"}, {"Ник должен состоять из Имени_Фамилии с заглавных букв.\n"}, {"Запрещено:\n"}, {"Запрещено использовать чужие (уже кем-то занятые) ники.\n"}, {"Запрещено использовать ники, содержащие нецензурные или оскорбительные слова.\n"}, {"Отправлять более одной заявки в час (Исключение: Просьба Администрации).\n"}, {"Если вам отказали в смене ника, Значит нельзя.\n"} }; И сразу после этого добавим new Rules_2[][] = { {"{FFFFFF}3. Чат\n"}, {"OOC (Out Of Charter) - это всё, что касается реального мира.\n"}, {"IC (In Charter) - это всё, что касается виртульного мира, то есть игры.\n"}, {"Запрещено:\n"}, {"Ругательство, оскорбления или нецензурная речь.\n"}, {"Угрозы игрокам (Не относящиеся к игровому процессу).\n"}, {"Писать сообщения в верхнем регистре (Caps Lock).\n"}, {"Писать в чат объявлений сообщения не относящихся к Role Play.\n"}, {"Писать одно и тоже сообщение слишком часто.\n"}, {"Обсуждать, критиковать действия администрации.\n"}, {"Реклама сторонних ресурсов.\n\n"}, {"{FFFFFF}4. Администрация сервера\n"}, {"Необходимо сообщать администрации о каких либо нарушениях из данных правил (/mm {FFFFFF}> Репорт).\n"}, {"Администрация самостоятельно выбирает штрафные санкции для каждого из случаев.\n"}, {"Запрещено препятствовать администрации в работе.\n"}, {"Решение администрации является окончательным и не подлежит обсуждению.\n\n"}, {"{FFFFFF}5. Торговля.\n"}, {"Запрещены любые денежные махинации.\n"}, {"Запрещена продажа / покупка чего либо, за реальные деньги.\n"}, {"Запрещен обмен внеигровых предметов в любой форме, на игровые.\n"}, {"Запрещен обмен чего либо между игровыми серверами.\n"}, {"Запрещена продажа / передача аккаунтов.\n"} }; 6. Далее переходим в public OnPlayerRequestClass(playerid, classid) Все что там есть стираем. И добавляем это { if(GetPVarInt(playerid, "Logged") == 1) return SpawnPlayer(playerid); SetPlayerInterior(playerid,0); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); GetPlayerName(playerid, sendername, sizeof(sendername)); new str[320], small[150]; switch(GetPVarInt(playerid, "Account")) { case 0: { format(small, sizeof(small), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт не зарегистрирован\nЧтобы начать игру нужно пройти регистрацию\n\n"); strcat(str, small); format(small, sizeof(small), "\t\t• Пароль должен состоять из Латинских букв\n\t\t• Длина пароля от 6 до 15 символов\n\nВаш логин: %s\nПридумайте свой пароль:",sendername); strcat(str, small); SPD(playerid, 1, DSI, "{FFFFFF}• Регистрация •", str, "Готово", "Отмена"); } case 1: { format(str, sizeof(str), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт зарегистрирован\nЧтобы начать игру нужно Авторизоваться\n\nВаш логин: %s\nВведите свой пароль:",sendername); SPD(playerid, 5, DSI, "{FFFFFF}• Авторизация •", str, "Войти", "Отмена"); } } return 1; } 7. Ищем public OnPlayerConnect(playerid) И вставляем туда { new string[42]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini", sendername); if(fexist(string)) SetPVarInt(playerid, "Account",1); else SetPVarInt(playerid, "Account",0); return 1; } 8. Идем в public OnPlayerDisconnect(playerid, reason) И вставим туда { if(GetPVarInt(playerid, "Logged") == 1) SavePlayer(playerid); return 1; } 9. Теперь переходим в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) И вставляем туда это { new string[128]; switch(dialogid) { case 1: { if(!response) return Kick(playerid); RegisterPlayer(playerid, inputtext); } case 2: { if(!response) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini",sendername); fremove(string); return true; } new Rules_2_str[1000]; format(Rules_2_str, sizeof(Rules_2_str), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",Rules_2[0],Rules_2[1],Rules_2[2],Rules_2[3],Rules_2[4],Rules_2[5],Rules_2[6],Rules_2[7],Rules_2[8],Rules_2[9],Rules_2[10],Rules_2[11],Rules_2[12],Rules_2[13],Rules_2[14],Rules_2[15],Rules_2[16],Rules_2[17],Rules_2[18],Rules_2[19],Rules_2[20],Rules_2[21]); SPD(playerid, 3, DSM, "{FFFFFF}• Правила сервера •", Rules_2_str, "Согласен", "Выйти"); } case 3: { if(!response) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini",sendername); fremove(string); return true; } SPD(playerid, 4, DSI, "{FFFFFF}• Электронная почта •", "{FFFFFF}Пожалуйста введите действующий адрес электронной почты.\nЕсли вы забудите пароль на него будет выслан новый", "Готово", ""); } case 4: { if(!response) return Kick(playerid); strmid(Player[playerid][pEmail],inputtext,0,strlen(inputtext),255); GetPlayerName(playerid, sendername, sizeof(sendername)); new str[186]; format(str, sizeof(str), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт зарегистрирован\nЧтобы начать игру нужно Авторизоваться\n\nВаш логин: %s\nВведите свой пароль:",sendername); SPD(playerid, 5, DSI, "{FFFFFF}• Авторизация •", str, "Войти", "Отмена"); } case 5: { if(!response) return Kick(playerid); LoginPlayer(playerid, inputtext); } } return 1; } stock RegisterPlayer(playerid, inputtext[]) { if(!IsPlayerConnected(playerid)) return true; new string[40]; GetPlayerName(playerid, sendername, sizeof(sendername)); Player[playerid][pMoney] = 500; Player[playerid][pAdmin] = 0; format(string,sizeof(string), "players/%s.ini", sendername); new accountFile = ini_createFile(string); if(accountFile < 0) { accountFile = ini_openFile(string); } if(accountFile >= 0) { strmid(Player[playerid][pPassword],inputtext,0,strlen(inputtext),255); ini_setString(accountFile,"Password",Player[playerid][pPassword]); ini_closeFile(accountFile); } new Rules_str[1000]; format(Rules_str, sizeof(Rules_str), "{FFFFFF}%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",Rules[0],Rules[1],Rules[2],Rules[3],Rules[4],Rules[5],Rules[6],Rules[7],Rules[8],Rules[9],Rules[10],Rules[11],Rules[12],Rules[13],Rules[14],Rules[15],Rules[16]); SPD(playerid, 2, DSM, "{FFFFFF}• Правила сервера •", Rules_str, "Согласен", "Выйти"); return 1; } stock LoginPlayer(playerid, inputtext[]) { new string[40],pass[32]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string), "players/%s.ini", sendername); new File = ini_openFile(string); ini_getString(File,"Password",pass,32); if(strcmp(pass, inputtext, true) != 0) { Kick(playerid); } else { ini_getInteger(File,"Money",Player[playerid][pMoney]); ini_getInteger(File,"Admin",Player[playerid][pAdmin]); ini_getInteger(File,"Skin",Player[playerid][pSkin]); ini_getString(File,"Email",Player[playerid][pEmail],64); SCM(playerid, -1, "Вы успешно авторизовались!"); SpawnPlayer(playerid); SetPVarInt(playerid, "Logged", 1); } return 1; } stock SavePlayer(playerid) { if(!IsPlayerConnected(playerid) && GetPVarInt(playerid, "Logged") == 0) return true; new string[40]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string), "players/%s.ini", sendername); new File = ini_openFile(string); ini_setInteger(File, "Money",Player[playerid][pMoney]); ini_setInteger(File,"Admin",Player[playerid][pAdmin]); ini_setInteger(File,"Skin",Player[playerid][pSkin]); ini_setString(File,"Email",Player[playerid][pEmail]); ini_closeFile(File); return 1; } И так на этом наш урок заканчивается. Спасибо за внимание. Скрин регистрации. http://rghost.ru/52319742
  4. Сегодня я объясню как сделать разводной мост по таймеру . мост будет открывается раз в 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; } Автор: Банан
  5. Хай пипл. Тут один (давно) интересовался, как сделать что бы было две модели авто, но с разными текстурами одновременно. И приводил пример эвакуатора с ОРМа. Ну собственно сам секрет. Используется покрасочная работа- файл с текстурой, которая заменяет только сам "корпус." Крч. Расскажу на примере того же самого эвакуатора (с ОРМ (думаю они не обидятся) ). Имеем 2 файла текстуры - towtruck1.txd & towtruck.txd . В одном все текстуры, а во втором только "корпус". Добавим в мод: new evrik; evrik = AddStaticVehicle(525,-374.4628,662.8626,12.0010,270.4307,3,3); ChangeVehiclePaintjob( evrik, 0 ); new evrik1; evrik1 = AddStaticVehicle(525,-374.3501,648.3397,12.1706,17.6243,3,3); ChangeVehiclePaintjob( evrik1, 1 ); Где ChangeVehiclePaintjob( evrik1, 1 ); ChangeVehiclePaintjob функция смены покраски. evrik1 - объявленная переменная (или хз как её). "1" - id покрасочной работы.
  6. Однако здравствуйте:) Хочу представить вам спидометр, который я делал для одного сервера, который потом меня кинул. Для работы используется инклуд foreach. Только для мода с основой GAMER. Огромное спасибо Red_Devils. Брал за основу его урок. Ко всем переменным: new PlayerText:Textdraw[8][MAX_PLAYERS]; Далее в OnPlayerConnect: PlayerTextDrawHide(playerid,Textdraw[0][playerid]); PlayerTextDrawHide(playerid,Textdraw[1][playerid]); PlayerTextDrawHide(playerid,Textdraw[2][playerid]); PlayerTextDrawHide(playerid,Textdraw[3][playerid]); PlayerTextDrawHide(playerid,Textdraw[4][playerid]);PlayerTextDrawHide(playerid,Textdraw[5][playerid]);PlayerTextDrawHide(playerid,Textdraw[6][playerid]);PlayerTextDrawHide(playerid,Textdraw[7][playerid]); Textdraw[0][playerid] = CreatePlayerTextDraw(playerid, 633.200073, 372.593444, "usebox"); PlayerTextDrawLetterSize(playerid, Textdraw[0][playerid], 0.000000, 6.818146); PlayerTextDrawTextSize(playerid, Textdraw[0][playerid], 452.400115, 0.000000); PlayerTextDrawAlignment(playerid, Textdraw[0][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[0][playerid], 0); PlayerTextDrawUseBox(playerid, Textdraw[0][playerid], true); PlayerTextDrawBoxColor(playerid, Textdraw[0][playerid], 102); PlayerTextDrawSetShadow(playerid, Textdraw[0][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[0][playerid], 0); PlayerTextDrawFont(playerid, Textdraw[0][playerid], 0); Textdraw[1][playerid] = CreatePlayerTextDraw(playerid, 472.799926, 386.773437, "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"); PlayerTextDrawLetterSize(playerid, Textdraw[1][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[1][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[1][playerid], -2139062017); PlayerTextDrawSetShadow(playerid, Textdraw[1][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[1][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[1][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[1][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[1][playerid], 1); Textdraw[2][playerid] = CreatePlayerTextDraw(playerid, 508.799987, 371.840179, "167KM/H"); PlayerTextDrawLetterSize(playerid, Textdraw[2][playerid], 0.356398, 1.420799); PlayerTextDrawAlignment(playerid, Textdraw[2][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[2][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[2][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[2][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[2][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[2][playerid], 2); PlayerTextDrawSetProportional(playerid, Textdraw[2][playerid], 1); Textdraw[3][playerid] = CreatePlayerTextDraw(playerid, 473.599792, 386.773498, "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"); PlayerTextDrawLetterSize(playerid, Textdraw[3][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[3][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[3][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[3][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[3][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[3][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[3][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[3][playerid], 1); Textdraw[4][playerid] = CreatePlayerTextDraw(playerid, 463.199920, 403.946655, "BENZIN:"); PlayerTextDrawLetterSize(playerid, Textdraw[4][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[4][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[4][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[4][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[4][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[4][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[4][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[4][playerid], 1); Textdraw[5][playerid] = CreatePlayerTextDraw(playerid, 463.200103, 420.373352, "DVERI:"); PlayerTextDrawLetterSize(playerid, Textdraw[5][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[5][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[5][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[5][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[5][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[5][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[5][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[5][playerid], 1); Textdraw[6][playerid] = CreatePlayerTextDraw(playerid, 611.199707, 404.693328, "E"); PlayerTextDrawLetterSize(playerid, Textdraw[6][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[6][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[6][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[6][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[6][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[6][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[6][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[6][playerid], 1); Textdraw[7][playerid] = CreatePlayerTextDraw(playerid, 611.999938, 421.866821, "L"); PlayerTextDrawLetterSize(playerid, Textdraw[7][playerid], 0.449999, 1.600000); PlayerTextDrawAlignment(playerid, Textdraw[7][playerid], 1); PlayerTextDrawColor(playerid, Textdraw[7][playerid], -1); PlayerTextDrawSetShadow(playerid, Textdraw[7][playerid], 0); PlayerTextDrawSetOutline(playerid, Textdraw[7][playerid], 1); PlayerTextDrawBackgroundColor(playerid, Textdraw[7][playerid], 51); PlayerTextDrawFont(playerid, Textdraw[7][playerid], 1); PlayerTextDrawSetProportional(playerid, Textdraw[7][playerid], 1); Далее в OnPlayerDisconnect: PlayerTextDrawDestroy(playerid,Textdraw[0][playerid]); PlayerTextDrawDestroy(playerid,Textdraw[1][playerid]); PlayerTextDrawDestroy(playerid,Textdraw[2][playerid]); PlayerTextDrawDestroy(playerid,Textdraw[3][playerid]); PlayerTextDrawDestroy(playerid,Textdraw[4][playerid]);PlayerTextDrawDestroy(playerid,Textdraw[5][playerid]);PlayerTextDrawDestroy(playerid,Textdraw[6][playerid]);PlayerTextDrawDestroy(playerid,Textdraw[7][playerid]); В конец мода: forward SpeedoUpdate(); public SpeedoUpdate() { foreach(Player,i) { if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i)) { new string[50],status[32],statusL[32],statusD[32],vehicleid = GetPlayerVehicleID(i); if(VehicleInfo[vehicleid][pEngineStatus] == 1) status = "~b~E";//Двигатель else status = "~r~E"; if(VehicleInfo[vehicleid][pLightsStatus] == 1) statusL = "~b~L";//Фары else statusL = "~r~L"; if(CarInfo[vehicleid][cLock] == 1) statusD = "~r~€AKP‘T‘"; else statusD = "~g~OTKP‘T‘"; PlayerTextDrawShow(i,Textdraw[0][i]); PlayerTextDrawShow(i,Textdraw[1][i]); PlayerTextDrawShow(i,Textdraw[2][i]); PlayerTextDrawShow(i,Textdraw[3][i]); PlayerTextDrawShow(i,Textdraw[4][i]);PlayerTextDrawShow(i,Textdraw[5][i]);PlayerTextDrawShow(i,Textdraw[6][i]);PlayerTextDrawShow(i,Textdraw[7][i]); format(string,sizeof(string),"~r~%d ~g~KM/H",GetPlayerSpeed(i));//Скорость PlayerTextDrawSetString(i,Textdraw[2][i],string); format(string,sizeof(string),"~w~ЂEH€…H: ~r~%d~g~‡.",Gas[vehicleid]);//Бензин PlayerTextDrawSetString(i,Textdraw[4][i],string); format(string,sizeof(string),"%s",status); PlayerTextDrawSetString(i,Textdraw[6][i],string); format(string,sizeof(string),"%s",statusL); PlayerTextDrawSetString(i,Textdraw[7][i],string); format(string,sizeof(string),"ѓBEP…:%s",statusD); PlayerTextDrawSetString(i,Textdraw[5][i],string); switch(SpeedVehicle(i)){ case 0..1: PlayerTextDrawSetString(i,Textdraw[3][i], "~w~"); case 2..10: PlayerTextDrawSetString(i,Textdraw[3][i], "~g~II"); case 11..20: PlayerTextDrawSetString(i,Textdraw[3][i], "~g~III"); case 21..30: PlayerTextDrawSetString(i,Textdraw[3][i], "~g~IIIII"); case 31..40: PlayerTextDrawSetString(i,Textdraw[3][i], "~y~IIIIIIII"); case 41..50: PlayerTextDrawSetString(i,Textdraw[3][i], "~y~IIIIIIIII"); case 51..60: PlayerTextDrawSetString(i,Textdraw[3][i], "~y~IIIIIIIIIIII"); case 61..70: PlayerTextDrawSetString(i,Textdraw[3][i], "~y~IIIIIIIIIIIIII"); case 71..80: PlayerTextDrawSetString(i,Textdraw[3][i], "~y~IIIIIIIIIIIIIIII"); case 81..90: PlayerTextDrawSetString(i,Textdraw[3][i], "~r~IIIIIIIIIIIIIIIIIII"); case 91..120: PlayerTextDrawSetString(i,Textdraw[3][i],"~r~IIIIIIIIIIIIIIIIIIIIII"); default: PlayerTextDrawSetString(i,Textdraw[3][i], "~r~IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII");} } if(!IsPlayerInAnyVehicle(i)) { PlayerTextDrawHide(i,Textdraw[0][i]); PlayerTextDrawHide(i,Textdraw[1][i]); PlayerTextDrawHide(i,Textdraw[2][i]); PlayerTextDrawHide(i,Textdraw[3][i]); PlayerTextDrawHide(i,Textdraw[4][i]);PlayerTextDrawHide(i,Textdraw[5][i]); PlayerTextDrawHide(i,Textdraw[6][i]);PlayerTextDrawHide(i,Textdraw[7][i]); } } return true; } Таймер в OnGameModeInit: SetTimer("SpeedoUpdate",100,1);//обновляется раз в секунду Если компилятор будет ругаться на "SpeedVehicle", то в конец мода добавьте: stock SpeedVehicle(playerid, bool:return_km=true) { new Float:x, Float:y, Float:z; if(IsPlayerInAnyVehicle(playerid)) { new veh = GetPlayerVehicleID(playerid); GetVehicleVelocity(veh, x, y, z); }else GetPlayerVelocity(playerid, x, y, z); return return_km?floatround(floatsqroot(x*x+y*y+z*z)*195):floatround(floatsqroot(x*x+y*y+z*z)*121); } Автор : Predator. P.S. В подборе цветов я не очень, так что сами измените:)
  7. Predator

    Speedcam

    Скрипт, который добавит на ваш сервер радары. Радары созданы в скрипте, что бы добавить свои, вам надо открыть файл speedcam.pwn и добавить свои. Автор: неизвестно Speedcam by cr-mp.ru.rar
  8. Predator

    Анти-мат

    Добрый вечер всем пользователям cr-mp.ru! Хочу представить вам анти-мат. Начнем! Ко всем new добавим: new BadWords[2][] = { "ваши запрещенные слова","ваши запрещенные слова" }; И в OnPlayerText: for(new w; w < sizeof(BadWords); w++) if(strfind(text,BadWords[w],true) != -1) return SendClientMessage(playerid,-1,"Не ругайтесь матом!") & 0; Автор: Amfy(во всяком случае он выложил данный урок и автора не указал)
  9. SkRiTeX

    cmd /setradar

    Здравствуйте дорогие пользователи GSG. Вот решил выложить cmd /setradar. Может кому понадобиться. В прошлый раз я выложил команду не полностью, исправляюсь. Поставить радар: if(!strcmp("/setradar", cmd, true)){new radarid = -1;for(new r; r<MAX_RADARS; r++){if(!RadarInfo[r][rActive]){radarid = r;break;}}if(radarid >= MAX_RADARS) return SendClientMessage(playerid, 0x27C400FF, ">>> Уже создано максимальное количество радаров.");if(PlayerRadars[playerid] >= MAX_PLAYER_RADARS) return SendClientMessage(playerid, 0x27C400FF, ">>> Ты создал уже создано максимальное количество радаров.");tmp = strtok(cmdtext, idx);if(!strlen(tmp)){SendClientMessage(playerid, 0x27C400FF, ">>> Использование >>> /setradar [ тип радара ]");SendClientMessage(playerid, 0xDEDEDEFF, "| 1: городской");SendClientMessage(playerid, 0xDEDEDEFF, "| 2: пригородный");SendClientMessage(playerid, 0xDEDEDEFF, "| 3: шоссейный");return 1;}new type[64];switch(strval(tmp)){case 1: RadarInfo[radarid][rSpeed] = 60, type = "Городской";case 2: RadarInfo[radarid][rSpeed] = 90, type = "Пригородный";case 3: RadarInfo[radarid][rSpeed] = 120, type = "Шоссейный";default: return SendClientMessage(playerid, 0x27C400FF, ">>> Неверный тип радара");}new Float:POS[4];GetPlayerPos(playerid, POS[0], POS[1], POS[2]);SetPlayerPos(playerid, POS[0]-0.5, POS[1]-0.5, POS[2]);GetPlayerFacingAngle(playerid, POS[3]);RadarInfo[radarid][rObject] = CreateDynamicObject(18880, POS[0], POS[1], POS[2]-2.5, 0.0, 0.0, POS[3]);RadarInfo[radarid][rActive] = true;RadarInfo[radarid][rPlayer] = playerid;RadarInfo[radarid][rPos][0] = POS[0];RadarInfo[radarid][rPos][1] = POS[1];RadarInfo[radarid][rPos][2] = POS[2];format(string, 128, ">>> Радар успешно создан | тип радара: {DEDEDE}%s", type);SendClientMessage(playerid, -1, string);PlayerRadars[playerid]++;return 1;} Удалить радар: if(!strcmp("/delradar", cmd, true)){new bool:radarid;for(new r; r<MAX_RADARS; r++){if(RadarInfo[r][rActive] && IsPlayerInRangeOfPoint(playerid, 3.0, RadarInfo[r][rPos][0], RadarInfo[r][rPos][1], RadarInfo[r][rPos][2])){if(RadarInfo[r][rPlayer] != playerid){SendClientMessage(playerid, 0x27C400FF, ">>> Данный радар был установлен не Вами.");}else{PlayerRadars[playerid]--;radarid = true;DestroyObject(RadarInfo[r][rObject]);RadarInfo[r][rPlayer] = INVALID_PLAYER_ID;RadarInfo[r][rActive] = false;}break;}}if(!radarid) SendClientMessage(playerid, 0x27C400FF, ">>> Поблизости нет радаров.");return 1;}
  10. TrollFace

    "Дернуть ручник"

    Идея моя понятна из самого названия темы. Все мы знаем, что по стандарту ручник - пробел. Так почему бы не сделать более высокий уровень РП при помощи обычного ProxDetectors ??? В коде - абсолютный минимум. На деле - довольно хорошая вещь. Приступим. Все знают, что за нажатие клавиш отвечает автовызываемая OnPlayerKeyStateChange Хорошо... А что с клавишей? Довольно просто. Ид пробела - 128. Что из этого следует? А следующий кусок кода: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[35], name[24]; GetPlayerName(playerid, name, MAX_PLAYER_NAME); if (newkeys == 128 && IsPlayerInVehicle(GetPlayerVehicleID(playerid))) { format(string, sizeof(string), "**%s дернул ручник.",name); ProxDetector(25.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } return 1; } Довольно просто, верно? Однако в то же время как-то повышает уровень РП. Я думаю, многие оценят. У кого нет ProxDetectors - отройте в паблике. P.S. ничего подобного в паблике не лицезрел, однако, опять же таки - все просто.
  11. Нашел на просторах интернета динамическую систему бизнесов. Проверено на моде GTRP и new.pwn. Для начала ко всем enum добавим: enum bInfo { bBusName[64], bOwner[MAX_PLAYER_NAME], bPrice, bLock, bInterior, bVirtWorld, bPick, Text3D:bText, Float:bX, Float:bY, Float:bZ }; new BusinessInfo[250][bInfo];//250 макс. кол-во бизнесов new AllBiz;//всего бизнесов new LString[128]; enum biInfo//информация берётся из bInts { biInt, Float:biX, Float:biY, Float:biZ, biName[15], } new bInts[][biInfo]= { {4,457.304748,-88.428497,999.554687,"Название бизнеса"},//4 это инт,дальше координаты появления в интерьере и название бизнеса {5,454.973937,-110.104995,1000.077209,"Своё название"}, {15,207.737991,-109.019996,1005.132812,"Своё название"}, {5,226.293991,-7.431529,1002.210937,"Своё название"}, {4,286.800994,-82.547599,1001.515625,"Своё название"}, {5,772.111999,-3.898649,1000.728820,"Своё название"}, {15,2215.454833,-1147.475585,1025.796875,"Своё название"}, {2,1204.809936,-11.586799,1000.921875,"Своё название"}, {17,493.390991,-22.722799,1000.679687,"Своё название"}}; Далее в конец мода: stock LoadBiz() { new ids[32],str[64]; new iniOpens = ini_openFile("biz.cfg"); ini_getInteger(iniOpens, "AllBiz", AllBiz); ini_closeFile(iniOpens); if(AllBiz != 0) { for(new biz = 1; biz <= AllBiz; biz++) { format(ids,sizeof(ids),"biz/%d.ini",biz); new inihOpen = ini_openFile(ids); ini_getString(inihOpen, "bBusName", str); format(BusinessInfo[biz][bBusName],24,"%s",str); ini_getString(inihOpen, "bOwner", str); format(BusinessInfo[biz][bOwner],24,"%s",str); ini_getInteger(inihOpen, "bPrice", BusinessInfo[biz][bPrice]); ini_getInteger(inihOpen, "bLock", BusinessInfo[biz][bLock]); ini_getInteger(inihOpen, "bInterior", BusinessInfo[biz][bInterior]); ini_getInteger(inihOpen, "bVirtWorld", BusinessInfo[biz][bVirtWorld]); ini_getFloat(inihOpen, "bX", BusinessInfo[biz][bX]); ini_getFloat(inihOpen, "bY", BusinessInfo[biz][bY]); ini_getFloat(inihOpen, "bZ", BusinessInfo[biz][bZ]); ini_closeFile(inihOpen); if(!strcmp(BusinessInfo[biz][bOwner],"Nones",true))//Если нет владельца { BusinessInfo[biz][bPick] = CreatePickup(1274, 23, BusinessInfo[biz][bX], BusinessInfo[biz][bY], BusinessInfo[biz][bZ], 0);//Создаём Пикап format(LString,128,"Бизнес\n%s\nЦена: $%d", BusinessInfo[biz][bBusName], BusinessInfo[biz][bPrice]);//Форматируем BusinessInfo[biz][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[biz][bX], BusinessInfo[biz][bY], BusinessInfo[biz][bZ] + 0.5, 10.0, 0, 0);//Создаём 3DText } else//Иначе { BusinessInfo[biz][bPick] = CreatePickup(1274, 23, BusinessInfo[biz][bX], BusinessInfo[biz][bY], BusinessInfo[biz][bZ],0);//Создаём Пикап format(LString, 128, "Бизнес\n%s\nВладелец: %s", BusinessInfo[biz][bBusName],BusinessInfo[biz][bOwner]);//Форматируем BusinessInfo[biz][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[biz][bX], BusinessInfo[biz][bY], BusinessInfo[biz][bZ] +0.5, 10.0, 0, 0);//Создаём 3DText } } printf("Бизнесов загружено: %d",AllBiz); } return 1; } stock UpdateBusiness(b) { DestroyPickup(BusinessInfo[b][bPick]);//Удаляем Пикап if(!strcmp(BusinessInfo[b][bOwner],"Nones",true))//Если нет владельца { BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ],0);//Создаём Пикап format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[b][bBusName], BusinessInfo[b][bPrice]);//Форматируем Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);//Обновляем 3DText } else//Иначе { BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], 0);//Создаём Пикап format(LString,128,"Бизнес\n%s\nВладелец: %s",BusinessInfo[b][bBusName],BusinessInfo[b][bOwner]);//Форматируем Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);//Обновляем 3DText } } stock SaveBusiness(biz) { new ids[32]; format(ids,sizeof(ids),"biz/%d.ini",biz); new inihOpen; inihOpen = ini_openFile(ids); if(inihOpen == -1 || inihOpen == -2) inihOpen = ini_createFile(ids); ini_setString(inihOpen, "bBusName", BusinessInfo[biz][bBusName]); ini_setString(inihOpen, "bOwner", BusinessInfo[biz][bOwner]); ini_setInteger(inihOpen, "bPrice", BusinessInfo[biz][bPrice]); ini_setInteger(inihOpen, "bLock", BusinessInfo[biz][bLock]); ini_setInteger(inihOpen, "bInterior", BusinessInfo[biz][bInterior]); ini_setInteger(inihOpen, "bVirtWorld", BusinessInfo[biz][bVirtWorld]); ini_setFloat(inihOpen, "bZ", BusinessInfo[biz][bZ]); ini_setFloat(inihOpen, "bX", BusinessInfo[biz][bX]); ini_setFloat(inihOpen, "bY", BusinessInfo[biz][bY]); ini_closeFile(inihOpen); return 1; } В OnGameModeInit: LoadBiz(); Далее добавим несколько команд, для этого в OnPlayerCommandText добавим: if(strcmp("/benter", cmdtext, true, 6) == 0) { for(new b = 1; b <= AllBiz; b++)//Для всех Бизнесов { if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue; if(strcmp(BusinessInfo[b][bOwner],GN(playerid), true) !=0 && BusinessInfo[b][bLock] == 1) return SendClientMessage(playerid,-1,"Бизнес закрыт.");//Если закрыт SetPlayerPos(playerid, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]);//Устанавливаем позицию игроку SetPlayerInterior(playerid, bInts[BusinessInfo[b][bInterior]][biInt]);//Устанавливаем интерьер игроку SetPlayerVirtualWorld(playerid, BusinessInfo[b][bVirtWorld]);//Устанавливаем виртуальный мир игроку } return true; } if(strcmp("/bexit", cmdtext, true, 5) == 0) { for(new b = 1; b <= AllBiz; b++)//Для всех Бизнесов { if(IsPlayerInRangeOfPoint(playerid, 5.0, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]) && GetPlayerVirtualWorld(playerid) == BusinessInfo[b][bVirtWorld])//Если в радиусе 5 метров от выхода((Координат входа)) { SetPlayerPos(playerid, BusinessInfo[b][bX],BusinessInfo[b][bY],BusinessInfo[b][bZ]);//Устанавливаем позицию игроку SetPlayerVirtualWorld(playerid,0);//Устанавливаем виртуальный мир игроку SetPlayerInterior(playerid,0);//Устанавливаем интерьер игроку } } return true; } if(strcmp("/buybus", cmdtext, true, 9) == 0) { for(new b = 1; b <= AllBiz; b++)//Для всех Бизнесов { if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue; if(PlayerInfo[playerid][pMoney] < BusinessInfo[b][bPrice]) return SendClientMessage(playerid,-1,"У вас не достаточно наличных средств, для покупки."); //Если не достаточно денег if(strcmp(BusinessInfo[b][bOwner], "Nones",true) != 0) return SendClientMessage(playerid,-1,"Бизнес не продаётся."); //Если есть Владелец strmid(BusinessInfo[b][bOwner], GN(playerid), 0, 24, 24);//Устанавливаем Владельца UpdateBusiness(b);//Обновляем SaveBusiness(b); //Сохраняем GivePlayerMoney(playerid,-BusinessInfo[b][bPrice]); //Отнимаем сумму SendClientMessage(playerid,-1,"Поздравляем с покупкой"); return true; } SendClientMessage(playerid,-1,"Подойдите к Бизнесу который желаете купить."); return true; } if(strcmp("/sellbus", cmdtext, true, 10) == 0) { for(new b = 1; b <= AllBiz; b++)//Для всех Бизнесов { if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue; if(!strcmp(BusinessInfo[b][bOwner], GN(playerid), true)) { strmid(BusinessInfo[b][bOwner], "Nones", 0, 5, 5);//Убираем владельца с Бизнеса UpdateBusiness(b);//Обновляем SaveBusiness(b);//Сохраняем GivePlayerMoney(playerid,BusinessInfo[b][bPrice]/2);//Даём игроку 1/2 стоимости Бизнеса SendClientMessage(playerid,-1,"Вы продали свой Бизнес государству. За 1/2 его стоимости."); return true; } } return true; } if(strcmp("/addbus", cmdtext, true, 13) == 0) { if(PlayerInfo[playerid][pAdministrator] == 10) { return ShowPlayerDialog(playerid,2000,DIALOG_STYLE_INPUT,"Название","Введите название:","Далее","Отмена");//Выводим Диалог } } Далее добавим диалоги, для этого в OnDialogResponse вставим: if(dialogid == 2000) { if(response)//Если продолжаем { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название", "Введите название:", "Далее","Отмена");//Если не введено - повторяем SetPVarString(playerid, "b_name", inputtext);//Записываем ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Отмена");//Показываем Диалог с Ценой } } if(dialogid == 2001) { if(response)//Если продолжаем { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость бизнеса:","Далее","Назад");//Если не введено - повторяем SetPVarInt(playerid, "b_price", strval(inputtext)); LString = ""; for(new i; i < sizeof(bInts); i++) { strcat(LString, bInts[i][biName]); strcat(LString, "\n"); } ShowPlayerDialog(playerid, 2002, DIALOG_STYLE_LIST, "Интерьер", LString, "Далее", "Назад");//Показываем Диалог с выбором Интерьера } else DeletePVar(playerid, "b_name"), ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название","Введите название:", "Далее", "Отмена");//Иначе } if(dialogid == 2002) { if(response)//Если продолжаем { SetPVarInt(playerid, "b_int", listitem); ShowPlayerDialog(playerid, 2003, DIALOG_STYLE_MSGBOX, "Подтверждение", "Вы действительно желаете создать Бизнес?", "V", "X");//Подтверждаем } else DeletePVar(playerid, "b_price"), ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Назад");//Иначе } if(dialogid == 2003) { if(response)//Если продолжаем { AllBiz++;//КОл-во Бизнесов плюсуем new inihOpen = ini_openFile("biz.cfg"); ini_setInteger(inihOpen, "AllBiz", AllBiz); ini_closeFile(inihOpen); new Float:x[3], str[64]; GetPlayerPos(playerid, x[0], x[1], x[2]);//Получаем позицию GetPVarString(playerid, "b_name", str, 64); BusinessInfo[AllBiz][bX] = x[0];//Присваиваем Координату X BusinessInfo[AllBiz][bY] = x[1];//Присваиваем Координату Y BusinessInfo[AllBiz][bZ] = x[2];//Присваиваем Координату Z BusinessInfo[AllBiz][bPrice] = GetPVarInt(playerid, "b_price");//Присваиваем Цену BusinessInfo[AllBiz][bInterior] = GetPVarInt(playerid, "b_int");//Присваиваем Интерьер BusinessInfo[AllBiz][bVirtWorld] = AllBiz;//Присваиваем Виртуальный Мир strmid(BusinessInfo[AllBiz][bBusName], str, 0, 32, 32);//Присваиваем Имя strmid(BusinessInfo[AllBiz][bOwner], "Nones", 0, 24, 24);//Присваиваем Владельца "Nones" SaveBusiness(AllBiz);//Сохраняем BusinessInfo[AllBiz][bPick] = CreatePickup(1274,23,x[0],x[1],x[2],0);//Создаём Пикап format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[AllBiz][bBusName], BusinessInfo[AllBiz][bPrice]);//Форматируем BusinessInfo[AllBiz][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, x[0], x[1], x[2] + 0.5, 10.0, 0, 0);//Создаём 3DText GameTextForPlayer(playerid, "~w~Бизнес ~g~Создан",100,1); DeletePVar(playerid, "b_price"); DeletePVar(playerid, "b_name"); DeletePVar(playerid, "b_int"); } else DeletePVar(playerid,"b_price"), DeletePVar(playerid, "b_name"), DeletePVar(playerid, "b_int");//Иначе } В папке scriptfiles создайте файл biz.cfg и впишите туда allbiz = 0. И создайте папку biz, туда они будут сохранятся. Автор: Лев Попов Автор переделки: Basis
  12. Может нужен кому нибудь. Переделал из /offadminka Изначального автора незнаю Варны можно снять обычной /unwarn if(strcmp(cmd, "/offwarn", true) == 0) { if(PlayerInfo[playerid][pAdmin] >= 4) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /offwarn [Ник] [Причина]"); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if (!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /offwarn [Ник] [Причина]"); format(string, sizeof(string), "%s.ini", tmp); if(fexist(string)) { format(string, sizeof(string), "%s.ini", tmp); new File = ini_openFile(string); ini_setInteger(File,"Warnings",1); ini_closeFile(File); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "[OFFWARN]Администратор %s выдал варн игроку %s, причина: %s",sendername,giveplayer,(result)); ABroadCast(COLOR_LIGHTRED,string,1); } return true; } else { SendClientMessage(playerid, COLOR_ORANGE, "Вам недоступна эта функция!"); } return true; } Значения: if(PlayerInfo[playerid][pAdmin] >= 4) 4 - Уровень администрирования, с которого можно выдавать предупреждение
  13. решил написать простой скрипт чтобы админ мог включить всем музыку приступим перейдём в OnPlayerCommandText и там вставляем команду if(strcmp(cmd,"/music", true) == 0) { if(PlayerInfo[playerid][pAdmin] >= 3) { ShowPlayerDialog(playerid,345,DIALOG_STYLE_INPUT,"Музыку всем","Введите ссылку на песенку","Вкл","отмена"); return true; } return 1; } C командой покончено теперь идём в OnDialogResponse и вставляем данный кейс case 345: { if(response) { new giveplayerid; if(!strval(inputtext)) return ShowPlayerDialog(playerid,345,DIALOG_STYLE_INPUT,"Музыку всем","Введите ссылку на песенку","Вкл","отмена"); SendClientMessageToAll(0xFF0000FF,"Администратор включил музыку всем"); PlayAudioStreamForPlayer(giveplayerid,inputtext); } return 1; } Подобного на форуме не видел.
  14. Драсте Нашёл на просторах этот замечательный скрипт который добавит на ваш сервер наверно самую известную тюрьму под названием "Алькатрас". Этот маппинг тюрьмы под названием "Алькатрас". Тюрьма находится на острове и связи с этим фактором, на территории тюрьмы присутствует свой собственный пирс и вертолетная площадка. На острове находится несколько строений, одно из них, это здание в котором и находятся заключенные. В работе так же присутствует интерьер тюрьмы. Особенностью тюрьмы, является возможность сбежать из нее... (Подсказка: канализация) Команды: /sm - телепортироватся к тюрьме /sm2 - телепортироватся в канализацию тюрьмы P.S: Автор скрипта не я. Автор: Buggy B 1382093176_alkatraz.zip
  15. Тема надобна для тех, кто не умеет импортировать базу данных на локальный хост (denwer). Следуйте инструкцией по скринам: 1. В адресную строку вписываем localhost 2. Жмем localhost/Tools/phpMyAdmin 3. Далее, заходим в Базы данных 4. Вводите имя вашей БД (любое) 5. База данных создана, заходим в неё и нажимаем ИМПОРТ 6. Выбираем файл, после того, как вы выбрали свою БД, нажимайте ОК Ваша база данных импортирована. Не забудьте прописать имя вашей базы данных в ГМ. Имя пользователя - root. Пароль отсутствует. Имя хоста "localhost"
  16. Собственно, решил написать более-менее толковый урок по вопросу, затронутому одним из пользователей данного портала. Итак, по теории. Как будем представлять себе весь этот процесс? Ну начнем с того, что есть автовызываемая функция, которая начнет работать тогда, когда автомобилю игрока будет нанесено повреждение. Это OnVehicleDamageStatusUpdate. Имеет она всего два параметра: vehicleid, playerid Собственно, первый отвечает за само авто, а второй - за игрока за рулем. Более подробно почитать об этой функции и посмотреть примеры можно тут. Что понадобится нам помимо этого? Ну непосредственно функции определения количества "жизни" автомобиля, функция выдачи их, а так же функция SetVehicleParamsEx, которой мы все это дело заставим встать на месте и заглохнуть. Итак, по практике. Ну во первых хочется отметить, что функция GetVehicleHealth возвращает значение в виде числа с плавающей точкой. Поэтому нам понадобится переменная типа Float. Создаем, и заносим данные в нее. public OnVehicleDamageStatusUpdate(vehicleid, playerid) { new Float:VehicleHealth; GetVehicleHealth(vehicleid, VehicleHealth);//получаем данные о состоянии авто } Далее следует сравнить полученное значение с цифрой, скажем, 350. После же этого мы выполним наши действия - заглушим авто и выведем игроку сообщение. Для справки: всего у авто 1000 "жизней". public OnVehicleDamageStatusUpdate(vehicleid, playerid) { new Float:VehicleHealth; GetVehicleHealth(vehicleid, VehicleHealth);//получаем данные о состоянии авто if (VehicleHealth< 350.0)//сравниваем { SetVehicleHealth(vehicleid, 350);//даем 350 жизни, чтобы авто не загорелось. SetVehicleParamsEx(vehicleid,false,false,false,false,false,false,false);//все параметры авто на ноль. SendClientMessage(playerid, -1, "Серьезная поломка. Авто заглохло.");//выводим сообщение } return 1; } Кстати хочется отметить, что данная функция может быть случайно вызвана несколько раз (например, если авто заглохло, но вы по инерции прокатились и стукнулись еще пару раз). Чтобы этого не произошло, стоит создать переменную типа bool, и сделать по ней проверку. В итоге выглядеть будет все следующим образом: public OnVehicleDamageStatusUpdate(vehicleid, playerid) { new Float:VehicleHealth; GetVehicleHealth(vehicleid, VehicleHealth);//получаем данные о состоянии авто if (VehicleHealth< 350.0)//сравниваем { SetVehicleHealth(vehicleid, 350);//даем 350 жизни, чтобы авто не загорелось. if(CrashStatus[vehicleid] == true) return 1;// не даем выполниться скрипту дважды SetVehicleParamsEx(vehicleid,false,false,false,false,false,false,false);//все параметры авто на ноль. SendClientMessage(playerid, -1, "Серьезная поломка. Авто заглохло.");//выводим сообщение CrashStatus[vehicleid]=true; } return 1; } В public OnVehicleSpawn обнулим ее: CrashStatus[vehicleid] = false; Ну а ко всем переменным естественно добавим: new bool:CrashStatus[MAX_VEHICLES]; З.Ы. Урок мой, копировать на другие порталы без моего разрешения запрещаю.
  17. В этом уроке мы переходим к разбору третьего стиля диалога: DIALOG_STYLE_LIST. Давайте рассмотрим данный стиль диалога на следующем примере. Допустим нам нужно командой, вызвать меню со списком оружия на выбор. Создаем простейшую команду и внутрь ее пишем функцию вызова диалога. Так как это будет список, нам нужно использовать \n – переход на новую строчку. Т.е. мы пишем название пункта \n название пункта и снова \n. if (strcmp("/weaponlist", cmdtext, true, 10) == 0) { ShowPlayerDialog(playerid,0,DSL,"Список оружия»,«Кольт\nКольт с глушителем\nПустынный орел", "Выбор", "Отмена"); return 1; }Диалог будет выглядеть следующим образом:Перед тем как написать функцию для этого диалогового окна, давайте посмотрим на следующую конструкцию приведенную ниже. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 0) { if(listitem == 1) //Если был выбран 1 пункт списка { //Выполнить этот код } if(listitem == 2) //Если был выбран 2 пункт списка { //Выполнить этот код } } return 1; }Вот так должен выглядеть код для данного стиля диалога. Тут мы проверяем значениеlistitem, т.е. пункта списка которого мы выберем в диалоге. listitem = 1 – это кольт, значит, в условную конструкцию listitem == 1 мы должны вписать функцию GivePlayerWeapon, чтобы дать оружие игроку. if(listitem == 1) //Если был выбран 1 пункт списка { GivePlayerWeapon(playerid,22,100); //Дать игроку кольт и 100 патронов }То же самое делаем и для остальных listitem. Вписываем ту же строчку, только вместо 22,пишем следующее: 23 – для кольта с глушителем, 24 – для пустынного орла (эти цифры, это ID модели этого оружия). ID модели смотрите на странице «ID оружия». Вообще, приведенный выше пример, очень схож с оператором switch, т.к. мы проверяем значение одного аргумента и в зависимости от этого значения выполняем действие. Тоесть, это все можно заменить на оператор switch, таким образом: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 0) { switch(listitem) { case 1: //Если был выбран 1 пункт списка { //Выполнить этот код } case 2: //Если был выбран 1 пункт списка { //Выполнить этот код } } } return 1; }Но все же, если вы хорошо не усвоите этот урок, лучше этим примером не пользоваться Автор Cloud
  18. Smolin

    Ретекстур объекта

    Доброго времени суток. В этом примере я расскажу, как сделать ретекстур объектов. Для начала скачиваем программу Map Editor Цель работы: Научиться пользоваться функцией SetObjectMaterial. Прямая ссылка на источник на wiki SetObjectMaterial Переходим к практике. Открываем Map Editor, ставите объект, куда захотите и какой хотите, в моем случае - киоск (ID: 4638). Помечено галочками - что собрался ретекстурить. Текстура в моем случае будет ID: 4442 (гараж). Жмем на киоск 2 раза и откроется окно: Видим Model Textures Где написано Material: ... - индексы у нас их 10, придется подбирать индекс/ы, я уже подобрал - 10 (Material: 10 split: 10 Tex: brusch). Открываем .txd объекта, у которого будем брать текстуру и копируем название текстуры. В моем случае - будет самая первая текстура (gar_wall1) объекта гаража (4442): Для того, чтобы открыть текстуры объекта, скачиваем эту программу TXD Workshop Теперь всё основное у нас есть. Переходим к заключению. Открываем ваш GM (gamemode) и переходим в паблик OnGameModeInit. В любое место этого коллбэка вставляем: new- переменная объекта (назвать можно по-разному) переменная = CreateDynamicObject(4638, -343.51, 433.54, 11.70, 0.00, 0.00, 0.00); - объект киоска SetDynamicObjectMaterial(вставляем переменную, индекс (в моем случае это 10-ый), ид объекта у которого брали текстуру (в моем случае - гараж), "название текстуры гаража (gen_garages)", "название текстуры (в моем случае (gar_wall1)", по умолчанию здесь оставляем значение - 0); Выходит у нас так: new kiosk; kiosk = CreateDynamicObject(4638, -343.51, 433.54, 11.70, 0.00, 0.00, 0.00); SetDynamicObjectMaterial(kiosk, 10, 4442, "gen_garages", "gar_wall1", 0); Наглядный пример работоспособности: На этом всё, Господа, советую почитать сабж от SHOROOP'a - Почему не стоит злоупотре######ть изменением материалов (нюансы SetObjectMaterial) (http://cr-mp.ru/forum/topic/15110-pochemu-ne-stoit-zloupotrebliat-izmeneniem-mat/) P.S: на крышу киоска не обращайте внимание - стоит мод - зима SHOROOP'a. Остальные вопросы, касающиеся этому сабжу - задавайте здесь.
  19. St1muL45

    [APP] Sprite Browser 2.0

    Sprite Browser 2.0 Программа создана для того, чтоб облегчить поиск ресурсов в архивах с расширением .txd. Незаменима в том случае если нужно найти TextDraw. Удобный интерфейс, вывод названия TextDraw под его изображением. Скачать с Яндекс.Диск
  20. citinez

    Mari El v 1.0

    Выкладываю старый Марий Эл (Взято с другого ресурса.)Пойдет для основы.Мод для КРМП 0.3е версии. (Могу перевести если хотите 2 мод на 0.3Б)В моде есть Регистрация, Админка.Админка через ТАБ.Команды:/цвет - выбрать цвет/админы - админы онлайн/аним - анимации/лс - личное сообщение/тюнинг - тюнинг машин/скин - выбор скина/передать - передать деньги/умерет - умереть ДМ Марий Эл.zip
  21. Rondek

    Радар

    Радар для ГИБДДшников Команды : /setradar /delradar https://yadi.sk/d/2MYqOUb-hPm9j
  22. 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) Делал на моде Тюмень Скрины: Сдачи опилок теперь нету , только бревна... (скрины новые решил не делать , если будут проблемы по данной теме , писать в вопросы и проблемы)
  23. Smolin

    Добавляем объект в игру

    На этот раз решил записать видео о том, как правильно добавить объект в игру, для примера я использовал пакет модификации gta_int.img. [media=Исправляем Failed to set for "] [/media] P.S: возможно, в следующей версии выложу урок по созданию пакета модфикации клиентской части.
  24. Всем привет , вот решил выложить скрипт мангала с огнем , и бутылку вина. Что представляет из себя скрипт. 1. Выдавать в руки бутылку пива (/pivo) 2. Выдавать в руки бутылку вина (/vino) 3. Ставить/убирать мангал (/mangal) Основа для скипта послужила FS Костер - by SHOROOP Автор скрипта - Vlad_Dredd. mangal.zip
  25. Доброго времени суток, сейчас я вам покажу как можно сделать "крякалку" на кнопку для автомобилей гос.служб, а так же на другие авто. Для того чтобы все работало нам понадобится: мод, стример и прямые руки. По теории это будет выглядеть так: Все начинается с проверки нажатой игроком кнопкой, далее привязываем к этой проверке еще одну проверку на нахождение игрока за рулем авто. Если проверка проходит успешной, то создаем цикл, где будем искать всех активных игроков. После того как прошелся цикл, делаем проверку на нахождение найденного игрока, с игроком который включил "крякалку", а далее уже будет проигрывать звук, создавать таймер и делать дополнительные проверки во избежания флуда звуком. По практике это будет выглядеть так: Для начала создадим глобальную беременную(ко всем new добавим) new zvonok[MAX_PLAYERS]; Далее идем уже к нажатию кнопки. Проверка на нажатую кнопку осуществляется в паблике OnPlayerKeyStateChange if(newkeys == ид кнопки && IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) //проверяем нажатую кнопку и если игрок находится за рулем { if(GetPlayerVehicleID(playerid) == ид авто) //ид авто - т.е. ид авто на котором будет работать крякалка { for(new i=0; i<MAX_PLAYERS; i++) //цикл для поиска игроков { if(ProxDetectorS(15.0, playerid, i))//если игрок находится рядом с найденным по циклу, то.. { if(zvonok[i] == 1) return 0; //проверка "Запущен ли звук или нет?" PlayAudioStreamForPlayer(i,"ссылка на звук");//запускаем звук SetTimer("zvon", 5000, false); //создадим таймер по которому будет отключатся звук (я задал отключение через 5 сек. настраивайте время сами) zvonok[i] = 1; //ставим переменную zvonok на 1 от флуда звуком } } } } Далее перейдем к таймеру: В конец мода вставим forward zvon(playerid); //сообщим о паблике public zvon(playerid) { zvonok[playerid] = 0; //ставим переменную zvonok на 0, от флуда StopAudioStreamForPlayer(playerid); //останавливаем звук return true; } На данный момент это пока лишь первая версия, со времен буду улучшать ее с вашей помощью. Есть небольшой косяк в том что, звук не будет изменять свою громкость в зависимости от дальности нахождения автомобиля в котором он проигрывается, но и это можно исправить. К сожалению при копировании слетела табуляция, я думаю вам не составит труда настроить ее. По коду все отлично, у меня error\warning не было! По поводу работоспособности не знаю, нет возможности проверить. Обо всех ошибках прошу сообщать в эту тему, чтобы не разводить срач на форуме и совместно решать все баги! Буду рад выслушать все подсказки по поводу доработки кода. Автор: Ryslik42 (на некоторых форумах SMETAHA) - т.е. Я При копировании на другие форумы, прошу сохранить авторство!!!
×

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

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