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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

Найдено: 1,779 результатов

  1. ByMeR_OK

    RussianNicks v0.2

    Плагин позволяет использовать русские никнеймы. Поддерживаемые версии: SA:MP Server 0.3c SA:MP Server 0.3c R2 RussianNicks.zip
  2. ByMeR_OK

    Античит на Fly Hack

    Автор: Hawkins В public OnPlayerUpdate(playerid) Вставляем этот код if(!IsPlayerInAnyVehicle(playerid)) { new animlib[30], animname[30];//переменные GetAnimationName(GetPlayerAnimationIndex(playerid), animlib, sizeof(animlib), animname, sizeof(animname));//проверка на анимацию new Float:posx, Float:posy, Float:posz;//переменные GetPlayerPos(playerid, posx, posy, posz);//проверка на координаты if(posz >= 2)//Если posz равен либо больше 2 метров, то.... { if(strcmp(animlib, "SWIM", true) == 0 && strcmp(animname, "SWIM_crawl", true) == 0)//проверяем на анимацию, если все верно то.... { new plname[MAX_PLAYER_NAME];//переменная new string[256];//string GetPlayerName(playerid, plname, sizeof(plname));//узнаем имя игрока format(string,sizeof(string),"%s был кикнут. Причина: Fly Hack",plname);//имя мы бьем через format SendClientMessageToAll(0xFFFFFFFF, string);//показываем всем игрокам Kick(playerid);//кикаем игрока } } } Внимание: античит не срабатывает, если Fly включить в машине
  3. ByMeR_OK

    Античит на healcar

    Приветствую всех блаблабла... решил написать готовое решение про античит на починку автомобиля где нибудь выше я лично всегда в инклуд их пишу... new VehicleHealth[i] = 1000.0;в public OnGameModeInit() for(new i=1;i<MAX_VEHICLES;i++) VehicleHealth[i] = 1000.0;если у вас не имеется посекундного келбака добавляем туда же ( OnGameModeInit ) SetTimer("Checkhpcar", 1000, true);далее #define PNSCS 9 new Float:PnSC[ PNSCS ][ 3 ] = { {720.2800,-457.2757,16.3359}, {-1421.1030,2584.5122,55.8433}, {-99.8468,1118.1559,19.7417}, {2063.5869,-1831.5231,13.5469}, {-2425.7590,1021.3259,50.3977}, {1974.2336,2162.3240,11.0703}, {487.1933,-1738.4077,11.1189}, {1025.2147,-1024.2096,32.1016}, {-1904.1440,283.5843,41.0469} }; stock IsPlayerAtPnSpray( playerid ) { if( !GetPlayerInterior( playerid ) ) return false; for(new i = 0; i < PNSCS; i++) { if(IsPlayerInRangeOfPoint( playerid , 15.0, PnSC[i][0], PnSC[i][1], PnSC[i][2] )) { return true; } } return false; } forward Checkhpcar(); public Checkhpcar() { new vehhl, vehid, str[MAX_PLAYER_NAME]; for(new i;i<MAX_GetMaxPlayers();i++) { vehid = GetPlayerVehicleID(i); if( !vehid ) { continue; } GetVehicleHealth(vehid, vehhl); if( VehicleHealth[vehid] >= vehhl ) { VehicleHealth[vehid] = vehhl; continue; } if( !IsPlayerAtPnSpray(i) ) { GetPlayerName(i, str,sizeof str); format(str, sizeof(str), "[Античит]%s повысил машине здоровье(Было %f, Стало %f)", str,VehicleHealth[vehid],vehhl); SendClientMessageToAll( COLOR_GREY, str );//ну тут ставим что хотим SetVehicleHealth(vehid, VehicleHealth[vehid] ); //я решил ставить машине столько хп сколько и было } VehicleHealth[vehid] = vehhl; }далее в public OnVehicleSpawn(vehicleid) VehicleHealth[vehicleid] = 1000.0;если в механиком пополняете хп или так далее у вас в моде где то используется VehicleHealth[ТУТ ид авто типо] = 1000.0;функция для определения координат пейнспрейАвтор урока TAP04eGG
  4. ByMeR_OK

    Anti NOP RemovePlayerFromVehicle

    В конец мода. public AntiRemovePlayerFromVehicle(playerid) { new playeridname[MAX_PLAYER_NAME]; new strings[64]; GetPlayerName(playerid,playeridname, sizeof(playeridname)); if (GetPlayerState(playerid) == 2)//В авто { format(strings, sizeof(strings), "%s кикнут. Причина: NOP RemovePlayerFromVehicle (Sobeit)",playeridname); SendClientMessageToAll(COLOR_LIGHTRED, strings); Kick(playerid);// Так как может быть и баг(10% случаев) то просто кикаем, а не баним } }Сразу после каждой функции в вашем моде RemovePlayerFromVehicle SetTimerEx("AntiRemovePlayerFromVehicle" , 2800, false, "i", playerid);//Это таймер на проверку на позицию читера в авто 2800 примерно дается на вылет чела из авто, если он всё еще там, то выполняем действие В функции собейта есть NOP RemovePlayerFromVehicle это дает человеку то что его не выкидывает из авто. Урок сам по себе легкий, и не состовляет труда вставить его в мод, Автор: Misha. Если вы сам читер то. public AntiRemovePlayerFromVehicle(playerid) { new playeridname[MAX_PLAYER_NAME]; new strings[64]; GetPlayerName(playerid,playeridname, sizeof(playeridname)); if (GetPlayerState(playerid) == 2)//IN CAR { if (PlayerInfo[playerid][pAdmin] >= 1) { SendClientMessageToAll(COLOR_YELLOW,"На этом сервере админы читеры"); } else { format(strings, sizeof(strings), "%s кикнут. Причина: NOP RemovePlayerFromVehicle (Sobeit)",playeridname); SendClientMessageToAll(COLOR_LIGHTRED, strings); Kick(playerid); } } }
  5. ByMeR_OK

    Анти NOP PutPlayerInVehicle

    Это поможет избавится от читеров которые включили NOP NopPutPlayerInVehicle то есть не посадишь их в авто Для начала в любое место мы засунем callback forward AntiNopPutPlayerInVehicle(playerid); public AntiNopPutPlayerInVehicle(playerid) { new name[MAX_PLAYER_NAME],string[128]; GetPlayerName(playerid,name,MAX_PLAYER_NAME); if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) { format(string,sizeof string,"%s кикнут. Причина: NOP PutPlayerInVehicle",name); SendClientMessageToAll(0xAFAFAFAA, string); Kick(playerid); } }Для удобства вот функция меняете PutPlayerInVehicle на PutPlayerInVehicleEx stock PutPlayerInVehicleEx(playerid,vehicleid,mesto) { PutPlayerInVehicle(playerid,vehicleid,mesto); SetTimerEx("AntiNopPutPlayerInVehicle" , 350, false, "i", playerid); } Автор: TAP04eGG
  6. ByMeR_OK

    Анти NOP SetPlayerPos

    Это решение поможет ещё чуть сильнее усложнить жизнь читерам, а именно палить NOP SetPlayerPos. Куда нибудь в конец мода копируем: forward AntiNOPSetPlayerPos(playerid, Float:x, Float:y, Float:z); public AntiNOPSetPlayerPos(playerid, Float:x, Float:y, Float:z) { new string[128]; if(!IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z)) { format(string, sizeof(string), "%s[%d] кикнут. Причина: NOP SetPlayerPos", PlayerName(playerid), playerid); return SendClientMessageToAll(0xFF0000AA, string); } return 1; }Ну и сама функция (Заменить все SetPlayerPos у себя в моде, на SetPlayerPosAC): stock SetPlayerPosAC(playerid, Float:x, Float:y, Float:z) { SetPlayerPos(playerid, x, y, z); SetTimerEx("AntiNOPSetPlayerPos", 500, false, "ifff", playerid, x, y, z); // Где 500, это время в миллисекундах когда будет производиться проверка на нахождение игрока. // Если у вас кикает всех подряд, увеличивайте это время return 1; }Если у кого нету функции PlayerName: stock PlayerName(playerid) { new Name[MAX_PLAYER_NAME]; GetPlayerName(playerid, Name, sizeof(Name)); return Name; } Автор: eFFect
  7. Здравствуйте сегодня я вам покажу как зделать вот такой TextDraw LvL, Respect Начнем: В начало мода, где все "new" добавляем это: new Text:InfoTextDraw; После чего ищем "public OnPlayerDisconnect" и добавляем это: TextDrawHideForPlayer(playerid, InfoTextDraw);(Добавлять его нужно в самом начале) Далее ищем "public OtherTimer()" и после "if(IsPlayerConnected(i))" добавляем if(gPlayerLogged[i] == 1) { TextDrawHideForPlayer(i, InfoTextDraw); format(string,sizeof(string),"LVL: %d~n~Respect: %d/%d",PlayerInfo[i][pLevel],PlayerInfo[i][pExp],levelexp); InfoTextDraw = TextDrawCreate(502.000000,3.000000,string); TextDrawAlignment(InfoTextDraw,0); TextDrawBackgroundColor(InfoTextDraw,0x000000ff); TextDrawFont(InfoTextDraw,1); TextDrawLetterSize(InfoTextDraw,0.399999,1.000000); TextDrawColor(InfoTextDraw,0xffffffff); TextDrawSetOutline(InfoTextDraw,1); TextDrawSetProportional(InfoTextDraw,1); TextDrawSetShadow(InfoTextDraw,1); TextDrawShowForPlayer(i, InfoTextDraw); } Автор урока: аkion
  8. Краткое руководство по настройке плагина от Инкогнито: 1. Скачаем архив с плагинами и инклюдом. 2. Помещаем папку plugins в папку с вашим сервером 3. Помещаем инклюд streamer.inc в папку с павно, с помощью котрого идет компиляция вашего мода. 4. Открываем ваш мод и в самое начало кода (шапку) вставляем 3 строки. Дефайны упрощают работу с стримером, вам не нужно будет переименовывать функции для добавления новых объектов. #include <streamer> #define CreateObject CreateDynamicObject #define MoveObject MoveDynamicObject 5. Нажимаем клавишу F5, происходит компилирование мода. 6. Приступаем к редактированию server.cfg для подключения плагина во время запуска сервера. Если вы используете оперативную систему поколения linux, то вам нужно ввести в конец вашего server.cfg строку plugins streamer.soЕсли же вы используете оперативную систему поколения windows, то в server.cfg достаточно ввести plugins streamer Лимиты:Стример позволяет использовать до 399 объектов вокруг игрока Автор: Elfuego streamer.rar
  9. if(strcmp(cmd, "/home", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pPhousekey] != 255) { SetPlayerCheckpoint(playerid,HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancex], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancey], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancez], 4.0); GameTextForPlayer(playerid, "~w~Waypoint set ~r~Home", 5000, 1); gPlayerCheckpointStatus[playerid] = CHECKPOINT_HOME; } else { GameTextForPlayer(playerid, "~w~You are homeless", 5000, 1); } } return 1; }
  10. Lexa

    Заснуть дома

    Ко все new new spit[MAX_PLAYERS]; new Ustalost[MAX_PLAYERS];ко всем forward forward IsAtSleepPlace(playerid);Ко всем командам: if(!strcmp(cmdtext, "/sleep", true)) // { if(IsPlayerConnected(playerid)) { if(gPlayerLogged[playerid] == 0) { SendClientMessage(playerid, COLOR_GREY, " Сначала нужно залогиниться !"); return 1; } for(new i = 0; i < sizeof(HouseInfo); i++) { if(!PlayerToPoint(50, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]) && HouseInfo[i][hWorld] == GetPlayerVirtualWorld(playerid) && !IsAtSleepPlace(playerid) && !IsPlayerInAnyVehicle(playerid)) { SendClientMessage(playerid,COLOR_GREY,"Здесь нельзя поспать (Можно в домах,некоторых помойках,под некоторыми мостами,в мотелях,переходах,подворотнях)"); return 1; } } if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { SendClientMessage(playerid,COLOR_GREY,"За рулём спать собрался чтоли? А ну иди на пассажирское место!"); return 1; } if(spit[playerid] != 1) { SendClientMessage(playerid,COLOR_GREY,"Вы легли поспать,ваш сон будет примерно 3 минуты"); SendActionMessage(playerid,30.0,"лёг спать"); SetPlayerCameraPos(playerid, 2000,-2000,2000); SetPlayerCameraLookAt(playerid, 2000,-2000,2000); SetTimerEx("prosnutsa", 180000, false, "i", playerid); ApplyAnimation(playerid,"CRACK","crckidle2",4.1,0,1,1,1,1); spit[playerid] = 1; Ustalost[playerid] = 0; } else { SendClientMessage(playerid, COLOR_GREY, " Вы уже спите !"); return 1; } } return 1; }Далее,где enum hInfoдобавляем: hWorld,Далее добавим паблик,лучше в самый конец мода public IsAtSleepPlace(playerid) { if(IsPlayerConnected(playerid)) { if(PlayerToPoint(6.0,playerid,861.8582,-1380.4661,15.7779) || PlayerToPoint(6.0,playerid,1075.9895,-1826.3264,14.0319)) { return 1; } else if(PlayerToPoint(6.0,playerid,1191.6880,-1736.3153,13.6672) || PlayerToPoint(6.0,playerid,2111.8286,-1994.2130,13.3239)) { return 1; } else if(PlayerToPoint(6.0,playerid,2139.1306,-2036.4802,8.3623) || PlayerToPoint(8.0,playerid,1938.4232,-1985.6976,13.1402)) { return 1; } else if(PlayerToPoint(5.0,playerid,1937.2020,-1968.5782,13.0773) || PlayerToPoint(8.0,playerid,1884.7308,-1945.0990,13.1423)) { return 1; } else if(PlayerToPoint(6.0,playerid,1864.4152,-1967.8810,13.1388) || PlayerToPoint(10.0,playerid,1689.5800,-1975.1376,8.8253)) { return 1; } else if(PlayerToPoint(8.0,playerid,1764.8883,-1931.1603,13.1615) || PlayerToPoint(6.0,playerid,1721.4628,-1473.6381,13.1436)) { return 1; } else if(PlayerToPoint(8.0,playerid,2113.7390,920.1079,10.5255) || PlayerToPoint(6.0,playerid,-1327.7218,2678.8723,50.0625)) { return 1; } else if(PlayerToPoint(8.0,playerid,656.4265,-559.8610,16.5015) || PlayerToPoint(6.0,playerid,656.3797,-570.4138,16.5015)) { return 1; } else if(PlayerToPoint(8.0,playerid,1605.4766,-1515.3605,13.1733) || PlayerToPoint(6.0,playerid,1315.5934,-864.4917,39.1719) || PlayerToPoint(6,playerid,1521.2664,-1016.6686,23.9486)) { return 1; } else if(PlayerToPoint(8.0,playerid,860.2096,-970.2845,35.5127) || PlayerToPoint(6.0,playerid,-39.5028,-2493.9001,36.2409)) { return 1; } else if(PlayerToPoint(8.0,playerid,-33.4615,-2490.5251,36.2427) || PlayerToPoint(6.0,playerid,-27.3743,-2487.0615,36.2436)) { return 1; } else if(PlayerToPoint(8.0,playerid,-18.1828,-2493.8157,36.2308) || PlayerToPoint(6.0,playerid,-16.8900,-2496.3503,36.2479)) { return 1; } else if(PlayerToPoint(8.0,playerid,-14.7589,-2500.5281,36.2456) || PlayerToPoint(6.0,playerid,-4.5188,-2520.3516,36.2498)) { return 1; } else if(PlayerToPoint(8.0,playerid,-9.7642,-2523.4021,36.2500) || PlayerToPoint(6.0,playerid,-13.3824,-2525.3677,36.2537)) { return 1; } else if(PlayerToPoint(8.0,playerid,-17.9037,-2527.8225,36.2526) || PlayerToPoint(6.0,playerid,24.3956,-2646.8835,40.0578)) { return 1; } else if(PlayerToPoint(8.0,playerid,-267.7636,-1632.8037,4.7641) || PlayerToPoint(6.0,playerid,-607.5358,-1075.1150,23.1155) || PlayerToPoint(20.0,playerid,274.9913,1956.8008,17.6406)) { return 1; } else if(PlayerToPoint(8.0,playerid,-601.1035,-1066.0096,22.9978) || PlayerToPoint(6.0,playerid,-594.9907,-1057.6005,22.9655)) { return 1; } else if(PlayerToPoint(8.0,playerid,-588.9382,-1049.1849,22.9331) || PlayerToPoint(6.0,playerid,-582.3942,-1041.1062,23.1991)) { return 1; } else if(PlayerToPoint(8.0,playerid,-576.9140,-1033.4305,23.3980) || PlayerToPoint(6.0,playerid,-89.4542,1229.1079,19.3180) || PlayerToPoint(6.0,playerid,-47.8544,1309.4165,11.6390)) { return 1; } } return 0; }
  11. Lexa

    Проверка на алкоголь

    Вот команда для законников: if(strcmp(cmd,"/bh",true)==0) { if(IsPlayerConnected(playerid)) { new leader = PlayerInfo[playerid][pLeader]; new member = PlayerInfo[playerid][pMember]; if(member==1 || member==2 || member==3 || leader==1 || leader==2 || leader==3)// проверка на фракцию. { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GREY, "*Используйте: /bh [ид игрока]"); return 1; } giveplayerid = ReturnUser(tmp); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { if (ProxDetectorS(8.0, playerid, giveplayerid)) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); new text1[20]; if(GetPlayerDrunkLevel(giveplayerid) > 0) { text1 = "| Пьян."; } else { text1 = "| Трезв."; } format(string, sizeof(string), "|__________ %s Проверен на алкоголь__________|", giveplayer); SendClientMessage(playerid, COLOR_WHITE, string); format(string, sizeof(string), "%s.", text1); SendClientMessage(playerid, COLOR_GREY, string); format(string, sizeof(string), "* %s Проверил на алкоголь %s", sendername ,giveplayer); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } else { SendClientMessage(playerid, COLOR_RED, "** Игрок далеко от вас!"); return 1; } } } else { SendClientMessage(playerid, COLOR_RED, "** Этот игрок не в игре !"); return 1; } } else { SendClientMessage(playerid, COLOR_RED, "** Вы не законник!"); return 1; } } return 1; }
  12. ByMeR_OK

    Создание Кафе в диалогах

    Сначало добавляим ко всем new: new kafe;Потом добавляем в public OnGameModeInit() вот это: kafe = CreatePickup(1239,1274,1949.8828,-1984.9989,13.5469);// место нахождение пикапа кафе.Потом идём в public OnDialogResponse и добавим туда: if(dialogid == 534)// заместо 1 можно поставить любую другую цифру { if(response) { if(listitem == 0) { SetPlayerHealth(playerid,100); GivePlayerMoney(playerid,-500); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); } if(listitem == 1) { SetPlayerHealth(playerid,100); GivePlayerMoney(playerid,-600); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); } if(listitem == 2) { SetPlayerHealth(playerid,100); GivePlayerMoney(playerid,-450); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); } if(listitem == 3) { SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_BEER); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); GivePlayerMoney(playerid,-320); } if(listitem == 4) { SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_WINE); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); GivePlayerMoney(playerid,-1000); } if(listitem == 5) { SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DRINK_SPRUNK); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); GivePlayerMoney(playerid,-200); } if(listitem == 6) { SetPlayerSpecialAction(playerid,SPECIAL_ACTION_SMOKE_CIGGY); PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0); GivePlayerMoney(playerid,-750); } } return 1; }Потом идём в public OnPlayerPickUpPickup добавляем туда вот это: if(pickupid == kafe)// можно использовать любую другую цифру. { ShowPlayerDialog(playerid,534, DIALOG_STYLE_LIST, "Кафе", "Пелемени ($500)\nCалатик ($600)\nШашлык ($450)\nПиво ($320)\nВино ($1000)\nСпранк ($200)\nСигареты ($750)", "Купить", "Отмена"); } return 1; }
  13. Gross95

    Смена спавна

    Для начала нужно найти эти строки например спавн якудзы } if (PlayerInfo[playerid][pMember] == 6 || PlayerInfo[playerid][pLeader] == 6)//Yakuza spawn { SetPlayerToTeamColor(playerid); SetPlayerInterior(playerid,0);Это интерьер в котором будут спавнутся если 0 то на улице SetPlayerPos(playerid,2795.361,-2572.560,11.233);это координаты спавна PlayerInfo[playerid][pInt] = 0; return 1; } Всё урок закончен.
  14. ByMeR_OK

    SpeedHack

    В начало мода вставьте: forward Anticheat(); в любое место в моде вставить: public Anticheat() { for(new i = 0; i < GetMaxPlayers(); i++) // Цикл, проверяем всех игроков онлайн { if(IsPlayerConnected(i)) // проверяем подключен ли { if(GetSpeedKM(i) > 260) //Максимальная скорость { SendClientMessage(i, COLOR_LIGHTRED, "Вы кикнуты, причина Speedhack"); // пишем месег Kick(i); // кикаем его } } return 1; } stock GetSpeedKM(playerid) // проверяет скорость { new Float:PosX, Float:PosY, Float:PosZ, Float:PlayerSpeedDistance; GetVehicleVelocity(GetPlayerVehicleID(playerid), PosX, PosY, PosZ); PlayerSpeedDistance = floatmul(floatsqroot(floatadd(floatadd(floatpower( PosX, 2), floatpower(PosY, 2)), floatpower(PosZ, 2))), 170.0); new spe = floatround(PlayerSpeedDistance * 1); return spe; } в public OnGameModeInit SetTimer("Anticheat",2000,1);
  15. Итак в этом уроке я хочу научить ставить ворота в любом месте, у меня на сервере они установлены у донатных домов. Для начала создадим: new vorota[25]; new timer[25]; forward Luisclose(); Задать можно любое число так как сдесь мы указываем количество ворот на сервере.Далее нам нужно создать сам обьект в закрытом состоянии, а тоесть ворота, . Для этого будет легче возпользоваться MTA. У меня получилось так: vorota[1] = CreateObject(2990,1281.4332275391,-614.78466796875,105.92295074463,0,0,206); Далее мы направляемся в public OnPlayerCommandText и там прописываем команду к воротам, надпись при открытии. Указываем номер ворот, и таймер, вообщем то таймер можно всегда указывать 1. И координаты открытых ворот. if (strcmp(cmdtext, "/Luisopenh", true) == 0) { MoveObject(vorota[1],1272.2739257813,-618.95599365234,106.35810852051, 2.0); timer[1] = SetTimer("LuisClose", 10000, 0); SendClientMessage(playerid,0x15AAEAAA,"* Ворота Luisa открыты"); return 1; } Далее направляемся в самый конец мода и ставим паблик, при этом не забываем указать координаты снова закрытых ворот: public LuisClose() { MoveObject(vorota[1], 1281.4332275391,-614.78466796875,105.92295074463, 3.0); KillTimer(vorota[1]); return 1; }
  16. ByMeR_OK

    Система Квартир

    Сегодня я расскажу как зделать систему квартир на сервере ищем в моде enum pInfoи выше вставляем enum fInfo { fOwned, fOwner[MAX_PLAYER_NAME], Float:fEntrancex, Float:fEntrancey, Float:fEntrancez, Float:fExitx, Float:fExity, Float:fExitz, fInt, fVirtWorld, fValue, fLock, fRent, fRentabil, fTakings, fDate, fLevel }; new FlatsInfo[27][fInfo]; new FlatPickup[sizeof(FlatsInfo)]; new Text3D: Flat3D[sizeof(FlatsInfo)]; new flathouse1[2]; new flathouse2[2]; new flathouse3[2];Потом идём в public SetPlayerSpawn и ищем там new house = PlayerInfo[playerid][pPhousekey];после этого вставляем new flat = PlayerInfo[playerid][pFlatKey];в этомже паблике немного ниже вставляем if(flat != 255) { if(SpawnChange[playerid]) //If 1, then you get to your house, else spawn somewhere else { SetPlayerToTeamColor(playerid); SetPlayerInterior(playerid,FlatsInfo[flat][fInt]); SetPlayerPos(playerid, FlatsInfo[flat][fExitx], FlatsInfo[flat][fExity],FlatsInfo[flat][fExitz]); // Warp the player SetPlayerVirtualWorld(playerid,flat+9999); return 1; } }теперь создадим stock stock UpdateFlat(idx) { new text[600]; if(FlatsInfo[idx][fOwned] == 0) { format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nЦена: {7CFC00}%d{FFFFFF}\nУровень: {7CFC00}%d{FFFFFF}\n\nЧтобы купить квартиру, введите {7CFC00}/buyflat{FFFFFF}",idx,FlatsInfo[idx][fValue],FlatsInfo[idx][fLevel]); Update3DTextLabelText(Flat3D[idx], 0xFFFFFFFF, text); DestroyPickup(FlatPickup[idx]); FlatPickup[idx] = CreatePickup(1273, 23, FlatsInfo[idx][fEntrancex], FlatsInfo[idx][fEntrancey], FlatsInfo[idx][fEntrancez], FlatsInfo[idx][fVirtWorld]); } else if(FlatsInfo[idx][fOwned] == 1) { format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s",idx,FlatsInfo[idx][fOwner]); Update3DTextLabelText(Flat3D[idx], 0xFFFFFFFF, text); DestroyPickup(FlatPickup[idx]); FlatPickup[idx] = CreatePickup(1272, 23, FlatsInfo[idx][fEntrancex], FlatsInfo[idx][fEntrancey], FlatsInfo[idx][fEntrancez], FlatsInfo[idx][fVirtWorld]); } }теперь ищем public LoadPropertyи после встовляем public LoadFlats() { new arrCoords[17][64]; new strFromFile2[256]; new File: file = fopen("flats.cfg", io_read); if (file) { new idx; while (idx < sizeof(FlatsInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, ','); FlatsInfo[idx][fOwned] = strval(arrCoords[0]); strmid(FlatsInfo[idx][fOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255); FlatsInfo[idx][fEntrancex] = floatstr(arrCoords[2]); FlatsInfo[idx][fEntrancey] = floatstr(arrCoords[3]); FlatsInfo[idx][fEntrancez] = floatstr(arrCoords[4]); FlatsInfo[idx][fExitx] = floatstr(arrCoords[5]); FlatsInfo[idx][fExity] = floatstr(arrCoords[6]); FlatsInfo[idx][fExitz] = floatstr(arrCoords[7]); FlatsInfo[idx][fInt] = strval(arrCoords[8]); FlatsInfo[idx][fVirtWorld] = strval(arrCoords[9]); FlatsInfo[idx][fValue] = strval(arrCoords[10]); FlatsInfo[idx][fLock] = strval(arrCoords[11]); FlatsInfo[idx][fRent] = strval(arrCoords[12]); FlatsInfo[idx][fRentabil] = strval(arrCoords[13]); FlatsInfo[idx][fTakings] = strval(arrCoords[14]); FlatsInfo[idx][fDate] = strval(arrCoords[15]); FlatsInfo[idx][fLevel] = strval(arrCoords[16]); printf("Квартира: [%d] | Владелец: [%s]",idx,FlatsInfo[idx][fOwner]); idx++; } fclose(file); } return 1; }После,в public OnGameModeInit после всех машин и т.д вы увидите вот такую надпись Дом продаётсяу всех по разному,ну что в этом духе,ну так вот после этого встовляем for(new f = 0; f < sizeof(FlatsInfo); f++) { new text[600]; if(FlatsInfo[f][fOwned] == 0) { format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nЦена: {7CFC00}%d{FFFFFF}\nУровень: {7CFC00}%d{FFFFFF}\n\nЧтобы купить квартиру, введите {7CFC00}/buyflat{FFFFFF}",f,FlatsInfo[f][fValue],FlatsInfo[f][fLevel]); Flat3D[f] = Create3DTextLabel(text,0xFFFFFFFF,FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez]+1,10,FlatsInfo[f][fVirtWorld],1); FlatPickup[f] = CreatePickup(1272, 23, FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez], FlatsInfo[f][fVirtWorld]); pickups++; } else if(FlatsInfo[f][fOwned] == 1) { format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s",f,FlatsInfo[f][fOwner]); Flat3D[f] = Create3DTextLabel(text,0xFFFFFFFF,FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez]+1,10,FlatsInfo[f][fVirtWorld],1); FlatPickup[f] = CreatePickup(1272, 23, FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez], FlatsInfo[f][fVirtWorld]); pickups++; } }в public DateProp добавить сразу после } for(new h = 0; h < sizeof(FlatsInfo); h++) { if (strcmp(playername, FlatsInfo[h][fOwner], true) == 0) { FlatsInfo[h][fDate] = curdate; OnPropUpdate(); } }потом идём в public OnPropUpdate()и в конце будет Sbizz.cfg или Bizz.cfg у всех по разному,после этого встовляем idx = 0; while (idx < sizeof(FlatsInfo)) { new coordsstring[256]; format(coordsstring, sizeof(coordsstring), "%d,%s,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", FlatsInfo[idx][fOwned], FlatsInfo[idx][fOwner], FlatsInfo[idx][fEntrancex], FlatsInfo[idx][fEntrancey], FlatsInfo[idx][fEntrancez], FlatsInfo[idx][fExitx], FlatsInfo[idx][fExity], FlatsInfo[idx][fExitz], FlatsInfo[idx][fInt], FlatsInfo[idx][fVirtWorld], FlatsInfo[idx][fValue], FlatsInfo[idx][fLock], FlatsInfo[idx][fRent], FlatsInfo[idx][fRentabil], FlatsInfo[idx][fTakings], FlatsInfo[idx][fDate], FlatsInfo[idx][fLevel]); if(idx == 0) { file2 = fopen("flats.cfg", io_write); } else { file2 = fopen("flats.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); }Далее добавим команды в public OnPlayerCommandText: if(strcmp(cmd, "/flat", true) == 0) { GetPlayerName(playerid, playername, sizeof(playername)); if(PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0) { ShowPlayerDialog(playerid,50,DIALOG_STYLE_LIST,"Квартира"," - Открыть/Закрыть\n - Продать","Далее","Выход"); } else { SendClientMessage(playerid,COLOR_GREY, "Ошибка: У вас нет квартиры."); return 1; } } if(strcmp(cmd, "/sellflat", true) == 0) { if(IsPlayerConnected(playerid)) { GetPlayerName(playerid, playername, sizeof(playername)); if(PlayerInfo[playerid][pFlatKey] == 255) { SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас нет квартиры."); return 1; } if(PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0) { new flat = PlayerInfo[playerid][pFlatKey]; FlatsInfo[flat][fLock] = 1; FlatsInfo[flat][fOwned] = 0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(FlatsInfo[flat][fOwner], "-", 0, strlen("-"), 255); GivePlayerMoney(playerid,FlatsInfo[flat][fValue]); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); format(string, sizeof(string), "~w~Congratulations~n~ You have sold your property for ~n~~g~$%d", FlatsInfo[flat][fValue]); GameTextForPlayer(playerid, string, 10000, 3); PlayerInfo[playerid][pFlatKey] = 255; //OnPlayerSave(playerid); UpdateFlat(flat); return 1; } else { SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас нет квартиры."); return 1; } } return 1; } if(strcmp(cmd, "/buyflat", true) == 0) { if(IsPlayerConnected(playerid)) { new Float:oldposx, Float:oldposy, Float:oldposz; GetPlayerName(playerid, playername, sizeof(playername)); GetPlayerPos(playerid, oldposx, oldposy, oldposz); for(new h = 0; h < sizeof(FlatsInfo); h++) { if(PlayerToPoint(2.0, playerid, FlatsInfo[h][fEntrancex], FlatsInfo[h][fEntrancey], FlatsInfo[h][fEntrancez]) && FlatsInfo[h][fOwned] == 0 && GetPlayerVirtualWorld(playerid) == FlatsInfo[h][fVirtWorld]) { if(PlayerInfo[playerid][pLevel] < FlatsInfo[h][fLevel]) { format(string, sizeof(string), "Ошибка: Вам нужен %d уровень, чтобы купить эту квартиру.", FlatsInfo[h][fLevel]); SendClientMessage(playerid, COLOR_GRAD5, string); return 1; } if((PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0) || (PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0)) { SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас уже есть дом / квартира."); return 1; } if(GetPlayerMoney(playerid) > FlatsInfo[h][fValue]) { PlayerInfo[playerid][pFlatKey] = h; FlatsInfo[h][fOwned] = 1; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(FlatsInfo[h][fOwner], sendername, 0, strlen(sendername), 255); GivePlayerMoney(playerid,-FlatsInfo[h][fValue]); PlayerPlayMusic(playerid); SetPlayerInterior(playerid,FlatsInfo[h][fInt]); SetPlayerVirtualWorld(playerid,h+9999); SetPlayerPos(playerid,FlatsInfo[h][fExitx],FlatsInfo[h][fExity],FlatsInfo[h][fExitz]); GameTextForPlayer(playerid, "~w~Welcome Flat~n~You can exit at any time by moving to this door and typing /exit", 5000, 3); PlayerInfo[playerid][pInt] = FlatsInfo[h][fInt]; SendClientMessage(playerid, COLOR_WHITE, "Вы купили квартиру!"); SendClientMessage(playerid, COLOR_WHITE, "Используйте /flat для управления ею!"); DateProp(playerid); //OnPlayerSave(playerid); UpdateFlat(h); return 1; } else { SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас не хватает денег!"); return 1; } } } } return 1; }После ищем команду /enter и встовляем в неё for(new i = 0; i < sizeof(FlatsInfo); i++) { if (PlayerToPoint(3, playerid,FlatsInfo[i][fEntrancex], FlatsInfo[i][fEntrancey], FlatsInfo[i][fEntrancez]) && GetPlayerVirtualWorld(playerid) == FlatsInfo[i][fVirtWorld]) { //printf("Found House :%d",i); if(PlayerInfo[playerid][pFlatKey] == i || FlatsInfo[i][fLock] == 0) { SetPlayerVirtualWorld(playerid,i+9999); SetPlayerInterior(playerid,FlatsInfo[i][fInt]); SetPlayerPos(playerid,FlatsInfo[i][fExitx],FlatsInfo[i][fExity],FlatsInfo[i][fExitz]); GameTextForPlayer(playerid, "~w~Welcome Kvartira", 5000, 1); PlayerInfo[playerid][pInt] = FlatsInfo[i][fInt]; } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); } } }После ищем команду /exit и встовляем туда for(new i = 0; i < sizeof(FlatsInfo); i++) { if(GetPlayerVirtualWorld(playerid) == i+9999) { if (PlayerToPoint(3, playerid,FlatsInfo[i][fExitx], FlatsInfo[i][fExity], FlatsInfo[i][fExitz])) { SetPlayerInterior(playerid,3); SetPlayerVirtualWorld(playerid,FlatsInfo[i][fVirtWorld]); SetPlayerPos(playerid,FlatsInfo[i][fEntrancex],FlatsInfo[i][fEntrancey],FlatsInfo[i][fEntrancez]); } } }Потом в public OnDialogResponse добавим if(dialogid == 50) { if(response) { if(listitem == 0) { for(new i = 0; i < sizeof(FlatsInfo); i++) { if ((PlayerToPoint(3, playerid,FlatsInfo[i][fEntrancex], FlatsInfo[i][fEntrancey], FlatsInfo[i][fEntrancez]) && GetPlayerVirtualWorld(playerid) == FlatsInfo[i][fVirtWorld]) || (PlayerToPoint(3, playerid,FlatsInfo[i][fExitx], FlatsInfo[i][fExity], FlatsInfo[i][fExitz]) && GetPlayerVirtualWorld(playerid) == i+9999)) { if(PlayerInfo[playerid][pFlatKey] == i) { if(FlatsInfo[i][fLock] == 1) { FlatsInfo[i][fLock] = 0; SendClientMessage(playerid, COLOR_WHITE, "Квартира открыта"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); return 1; } if(FlatsInfo[i][fLock] == 0) { FlatsInfo[i][fLock] = 1; SendClientMessage(playerid, COLOR_WHITE, "Квартира закрыта"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); return 1; } } else { SendClientMessage(playerid, COLOR_GREY, "Это не ваша квартира."); return 1; } } } } else if(listitem == 1) { OnPlayerCommandText(playerid, "/sellflat"); } } else { return 1; } }Потом в public OnPlayerPickUpPickup(playerid, pickupid) добавить if(pickupid == flathouse1[0]) // Квартирный Дом напротив Репортеров (Вход) { SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484); SetPlayerInterior(playerid, 3); PlayerInfo[playerid][pInt] = 3; SetPlayerVirtualWorld(playerid,1); } else if(pickupid == flathouse1[1]) // Квартирный Дом напротив Репортеров (Выход) { SetPlayerPos(playerid, -1966.0192,434.3174,35.1719); SetPlayerInterior(playerid, 0); PlayerInfo[playerid][pInt] = 0; SetPlayerVirtualWorld(playerid,0); } else if(pickupid == flathouse2[0]) // Квартирный Дом напротив Небоскрёпа ЛС (Вход) { SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484); SetPlayerInterior(playerid, 3); PlayerInfo[playerid][pInt] = 3; SetPlayerVirtualWorld(playerid,2); } else if(pickupid == flathouse2[1]) // Квартирный Дом напротив Небоскрёпа ЛС (Выход) { SetPlayerPos(playerid, 329.7834,-1513.7047,36.0391); SetPlayerInterior(playerid, 0); PlayerInfo[playerid][pInt] = 0; SetPlayerVirtualWorld(playerid,0); } else if(pickupid == flathouse3[0]) // Квартирный Дом у Банка ЛС (Вход) { SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484); SetPlayerInterior(playerid, 3); PlayerInfo[playerid][pInt] = 3; SetPlayerVirtualWorld(playerid,3); } else if(pickupid == flathouse3[1]) // Квартирный Дом у Банка ЛС (Выход) { SetPlayerPos(playerid, 1378.8137,-1088.7667,27.0466); SetPlayerInterior(playerid, 0); PlayerInfo[playerid][pInt] = 0; SetPlayerVirtualWorld(playerid,0); }Потом добавим пикапы: flathouse1[0] = CreatePickup(1318, 2, -1962.0586,434.1953,35.1719, 0); pickups++; // Квартирный Дом напротив Репортеров (Вход) flathouse1[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 1); pickups++; // Квартирный Дом напротив Репортеров (Выход) flathouse2[0] = CreatePickup(1318, 2, 328.1443,-1512.3280,36.0325, 0); pickups++; // Квартирный Дом напротив Небоскрёпа ЛС (Вход) flathouse2[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 2); pickups++; // Квартирный Дом напротив Небоскрёпа ЛС (Выход) flathouse3[0] = CreatePickup(1318, 2, 1382.1489,-1088.8043,28.2124, 0); pickups++; // Квартирный Дом у Банка ЛС (Вход) flathouse3[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 3); pickups++; // Квартирный Дом у Банка ЛС (Выход)Чуть не забыл ко всем форвардам добавить forward LoadFlats();и в Public OnGameModeInit добавить LoadFlats();После в enum pInfo добавить pFlatKey,Потом в public OnPlayerRegister(playerid, password[]) dini_IntSet(string, "Flatkey", PlayerInfo[playerid][pFlatKey]);После в public OnPlayerLogin PlayerInfo[playerid][pFlatKey] = dini_Int(string2,"Flatkey");немного ниже в этомже паблике добавить PlayerInfo[playerid][pFlatKey] = 255;и под конец в public OnPlayerConnect добавить PlayerInfo[playerid][pFlatKey] = 255;вот и всё ))Автор Вырезки: Mr_Dave Вырезано из мода Diamond_City Может кому пригодится И вот сам файл с квартирками =) flats.cfg
  17. ByMeR_OK

    Ограбления банка

    Сейчас расскажу как создать ограбление банка. P.S. автор не я, я лишь это сделал по просьбе. Начнем: 1. Добавь цвет: #define COLOR_ME 0xC2A2DAAA2.Затем переменные: new redver; new hrandver; new vzlomvopros; new vzlomvopror; new bankpasword; new sig; new banksistem; new elektrosignal; new Lom[MAX_PLAYERS]; new chitpaword[MAX_PLAYERS]; new BankRobbed[MAX_PLAYERS]; new BankProbel; new Rcr; new Stopenrob[MAX_PLAYERS]; new stopanim[MAX_PLAYERS];3.Далее добавляем в магазин новый товар(в /buy" тоже не забудьте!): else if (item == 19 && GetPlayerMoney(playerid) >= 5000) { Lom[playerid] = 1; GivePlayerMoney(playerid, - 5000); SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы купили набор для взлома ячейки банка"); SendClientMessage(playerid, COLOR_WHITE, "*Подсказка: теперь ты можешь /grabbank!"); SavePlayer(playerid); } //------------------------------------------------------------------------------ else if (item == 20 && GetPlayerMoney(playerid) >= 3000) { chitpaword[playerid] = 1; GivePlayerMoney(playerid, - 3000); SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы купили устройство подбора паролей"); SendClientMessage(playerid, COLOR_WHITE, "*Подсказка: не разглошается!"); SavePlayer(playerid); } else if(item != 0 && item != 21) { SendClientMessage(playerid,COLOR_RED,"** У Вас не хватает денег для этого!"); }4.Потом добавляем 4 команды: if(strcmp(cmdtext,"/vzlomr",true) == 0) { if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1||PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2||PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==7||PlayerInfo[playerid][pLeader]==7) { SetTimer("rehclose",120000,false); MoveObject(redver,1435.1789550781,-1009.7760009766,10.696892738342,8.0);//10.696892738342 return 1; } if(PlayerToPoint(10.0, playerid,1435.5254,-1007.5117,9.0600)) { if(chitpaword[playerid] == 1) { vzlomvopros = SetTimerEx("timervzlomr",10,true,"d",playerid); ApplyAnimation(playerid,"GANGS","hndshkda",4.1,0,1,1,1,1); SetTimerEx("stopamin",30000,false,"d",playerid); //vzlomvopros = SetTimer("timervzlomr",10,true); } } else { SendClientMessage(playerid, COLOR_LIGHTBLUE, "* У вас нет устройства для взло электронного замка!!!"); } return 1; } //================================================= if(strcmp(cmdtext,"/vzloms",true) == 0) { SetTimer("bankclose",30000,false); if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1||PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2||PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==7||PlayerInfo[playerid][pLeader]==7) { MoveObject(hrandver,1412.7796630859,-1014.91796875,1.3489612340927,0.1);//1.3489612340927 return 1; } if(banksistem == 0) { SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Тут сильная система защиты от взлома, ее нужно отключить!!"); return 1; } if(PlayerToPoint(10.0, playerid,1413.3344,-1013.9662,0.7805)) { if(chitpaword[playerid] != 1) { SendClientMessage(playerid, COLOR_LIGHTBLUE, "* У вас нет устройства для взло электронного замка!!!"); return 1; } vzlomvopror = SetTimerEx("timervzloms",10,true,"d",playerid); ApplyAnimation(playerid,"GANGS","hndshkda",4.1,0,1,1,1,1); SetTimerEx("stopamin",120000,false,"d",playerid); //vzlomvopror = SetTimer("timervzloms",10,true); } //MoveObject(hrandver,1412.7796630859,-1014.91796875,1.3489612340927,1.0);//1.3489612340927 return 1; } //================================================= if(strcmp(cmdtext,"/elektro",true) == 0) { if(PlayerToPoint(10.0, playerid,1419.6614,-1012.0810,8.0611)) { if(banksistem == 0) { SetTimerEx("zvezda",1000,false,"d",playerid); banksistem = 1; elektrosignal = SetTimer("elektrosig",120000,false); SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Система защиты от влома хранилища отключуна!"); // SetPlayerCriminal(playerid,255, "Отключение системы защиты! Сработала сигнализяция!!! "); //WantedPoints[playerid] += 2; WantedPoints[playerid]+=2; SetPlayerCriminal(playerid,255, "Отключение системы защиты! Сработала сигнализяция!!! "); ProxDetector(30.0, playerid, string,COLOR_ME,COLOR_ME,COLOR_ME,COLOR_ME,COLOR_ME); sig = SetTimer("banksignal",30000,true); ApplyAnimation(playerid,"CAR_CHAT","car_talkm_out",4.1,0,1,1,1,1); SetTimerEx("stopamin",6000,false,"d",playerid); format(string, sizeof(string), "Сигнализация: Всем оставаться на своих местах, ближайшие патрули закона уже выехали!!!"); ProxDetector(5.0, playerid, string,COLOR_ME,COLOR_ME,COLOR_ME,COLOR_ME,COLOR_ME); } } return 1; } //================================================= { if(BankProbel == 0) { BankProbel = 1; if(BankRobbed[playerid] == 0) { if(PlayerInfo[playerid][pLevel] >= 3) { if(PlayerToPoint(10.0, playerid,1402.6705,-1010.2061,0.6685)) { if(Lom[playerid] == 1) { if(PlayerInfo[playerid][pMember]==1||PlayerInfo[playerid][pLeader]==1||PlayerInfo[playerid][pMember]==2||PlayerInfo[playerid][pLeader]==2||PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==3||PlayerInfo[playerid][pLeader]==3||PlayerInfo[playerid][pMember]==4||PlayerInfo[playerid][pLeader]==4||PlayerInfo[playerid][pMember]==7||PlayerInfo[playerid][pLeader]==7||PlayerInfo[playerid][pMember]==11||PlayerInfo[playerid][pLeader]==11) { SendClientMessage(playerid, COLOR_WHITE, " Cовсеть не позволяет вам совершить преступрение! !"); BankProbel = 0; return 1; } if(PlayerInfo[playerid][pMember]==0&&PlayerInfo[playerid][pLeader]==0) { SendClientMessage(playerid, COLOR_WHITE, "Грабить могут только банды!"); BankProbel = 0; return 1; } if(IsACop(playerid) < 2) { SendClientMessage(playerid, COLOR_WHITE, "Запрещенно грабить если на сервере меньше двух законнпиков!!!"); BankProbel = 0; return 1; } //SetTimer("StopGrab",10000,false); SetTimerEx("StopGrab",2000,0,"d",playerid); ApplyAnimation(playerid,"ROB_BANK","CAT_Safe_Rob",4.1,1,1,1,1,1); TogglePlayerControllable(playerid,0); Stopenrob[playerid] = 1; if(Rcr == 0) { Rcr = 1; } else { SendClientMessage(playerid, COLOR_WHITE, " Банк уже грабят!!!"); BankProbel = 0; } } else { SendClientMessage(playerid, COLOR_WHITE, " Вы не можете ломать банк руками, вам нужен лом"); BankProbel = 0; } } else { SendClientMessage(playerid, COLOR_WHITE, " Вы находитесь не в банке"); BankProbel = 0; } } else { SendClientMessage(playerid, COLOR_WHITE, " У вас должен быть уровень 3!"); BankProbel = 0; } } else { SendClientMessage(playerid, COLOR_WHITE, " Вы не можете грабить банк так часто, подождите часок"); BankProbel = 0; } } return 1; }
  18. Gross95

    Команда /whels

    Сейчас я раскаду вам как зделать свой тюн я зделал эту команду из того что на крмп нету тюнов дажэ неона не видел но в этой команде есть 1 - не сохраняются колёса Сначало вставляем это enum gGarageGInfo { gModel, Float:gHP, gMod0, gMod1, gMod2, gMod3, gMod4, gMod5, gMod6, gMod7, gMod8, gMod9 }; new GarageGInfo[2222][gGarageGInfo]; enum cInfo { cModel, Float:cLocationx, Float:cLocationy, Float:cLocationz, Float:cAngle, cColorOne, cColorTwo, cOwner[MAX_PLAYER_NAME], cDescription[MAX_PLAYER_NAME], cValue, cLicense, cOwned, cLock, cNumbercar, cTeh, cWheel, cSpoiler, cPaintJob, cHood, cRoof, cSideskirt, cLamps, cNitro, cExhaust, cStereo, cHydraulics, cFrontbumper, cRearbumper, cVentright, cVentleft, cDate, }; не обращайте внимания на второй ENUM вырезал из мода где сохранялся тюнинг дальше в public OnPlayerCommandText(playerid, cmdtext[]) вставляем } if (strcmp(cmd, "/whels", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerToPoint(4.0, playerid, 2157.818,-1838.433,20.469)) { //меняйте на свои tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD1, "Вводите: /whels [1-13]! "); return 1; } new wh = strval(tmp); if(wh==0 || wh>13) { SendClientMessage(playerid, COLOR_GRAD1, "Вводите: /whels [1-13]! "); return 1; } if(!IsPlayerInAnyVehicle(playerid)) { SendClientMessage(playerid, COLOR_GRAD1, " Приедте на машине, чтобы было куда ставить колёса!"); return 1; } new v = GetPlayerVehicleID(playerid); if( IsAPlane(v) || IsABoat(v)) { return 1; } AddVehicleComponent(v, wh+1072); new componentid = wh+1072; new vehicleid = v; if(GarageGInfo[vehicleid][gMod0]==0) { GarageGInfo[vehicleid][gMod0]=componentid; } else if(GarageGInfo[vehicleid][gMod1]==0) { GarageGInfo[vehicleid][gMod1]=componentid; } else if(GarageGInfo[vehicleid][gMod2]==0) { GarageGInfo[vehicleid][gMod2]=componentid; } else if(GarageGInfo[vehicleid][gMod3]==0) { GarageGInfo[vehicleid][gMod3]=componentid; } else if(GarageGInfo[vehicleid][gMod4]==0) { GarageGInfo[vehicleid][gMod4]=componentid; } else if(GarageGInfo[vehicleid][gMod5]==0) { GarageGInfo[vehicleid][gMod5]=componentid; } else if(GarageGInfo[vehicleid][gMod6]==0) { GarageGInfo[vehicleid][gMod6]=componentid; } else if(GarageGInfo[vehicleid][gMod7]==0) { GarageGInfo[vehicleid][gMod7]=componentid; } else if(GarageGInfo[vehicleid][gMod8]==0) { GarageGInfo[vehicleid][gMod8]=componentid; } else if(GarageGInfo[vehicleid][gMod9]==0) { GarageGInfo[vehicleid][gMod9]=componentid; } } else { SendClientMessage(playerid, COLOR_GRAD1, " Вы не в Авто мастерской! "); return 1; } } return 1; }команда готова комплитируем мод
  19. Здравствуйте дорогие пользователи сайта! Итак, начнём. 1)Для начала мы скачаем МТА, пройдя по ссылке. 2)Установим, думаю, с установкой не у кого проблем не будет 3)Запустим МТА и выберем режим Map Editor 4)Жмём Skip Tutorial (когда загрузится карта) 5)Летим в нужное место, с помощбю кнопок "W, A, S, D" 6)Когда долетели, жмите "F" и в нижнем левом углу у вас должен быть значок коробки. 7)Жмём на коробку 8)Перед вами появится весь перечень объектов GTA, проще знать ID объектов или их названия на Английском языке 9)Итак, мы нашли объект, щёлкаем по нему два раза. 10)Теперь ставим его в нужное место и снова кликаем (для того, чтобы поставить) 11)Если вам нужно сделать копию объекта, то на карте два раза щёлкнем по объекту и нажмём на кнопку "С" 12)Перетаскивать объект можно, удерживая "левую кнопку мыши" 13)Теперь, когда мы добавили всё, что нужно, ищем кнопку "Save as" (она должна быть в левом верхнем углу, в виде дискетки) 14)Теперь идём в папку с МТА: MTA San Andreas -> server -> mods -> deathmatch -> resources Дальше там будут паки и архивы, но чтобы найти все наши объекты, мы должны увидеть папку с названием, под которым вы сохранили добавленные объекты.15)Ищем в папке файл с расширением .map 16)Открываем его с помощью блокнота и копируем всё, что там есть 17)Идём на сайти вставляем наш текст, скопированный ранее, жмём Convert и получаем код для PAWNO 18)Открываем PAWNO и ищем public OnGameModeInit() , после вставляем в конец всех CreateObject наш полученный код! 19)Компилим и проверяем!
  20. Итак, в этом уроке вы научитесь делать карты в MTA. Для начала скачаем саму MTA и установим: http://zebra.og-serv...mtasa-1.0.5.exe В установке MTA нет ничего сложного. После установки запускаем её и ждём окончания загрузки. Может выскочить окошко, что нужно обновление, отказываемся. Слева видим пункты меню и тыкаем на "Map Editor". Ждём когда загрузится. После загрузки появится окошко с предложением обучения. Нажимаем "Skip" (то есть пропустить). Начнём работу. Управляем камерой мышкой + кнопки W, A, S, D. Чтобы быстро лететь, удерживая пробел и кнопки полёта. Чтобы медленно лететь Alt и кнопки полёта. Устанавливаем камеру на какое-нибудь положение и нажимаем кнопку F. Сверху по-середине и слева внизу появились кнопки. Чтобы поставить объект, кликаем мышкой на кнопку и рисунком коробки. Мы переключимся в режим выбирания объекта. Слева список объектов. Всех объектов! Так дело не пойдёт, вверху открываем список категорий и выбираем нужную. Чтобы посмотреть на объект, кликаем один раз по названию объекта. Чтобы его выбрать - два раза. Если вы передумали ставить объект, внизу есть кнопка "Canel". А теперь, попробуем поставить какой-нибудь объект. Кликаем два раза на название и видем, что мышка взяла объект, как собачка свою косточку и таскает за собой. Мышкой точное положение объекта врядли с первого раза поставишь. Так вот, выбираем примерное положение на кликаем левой кнопкой мыши один раз. Теперь можно двигать объект клавишами-стрелками. Чтобы быстро его двигать пробел + стрелки. Чтобы медленно Alt + стрелки. Чтобы повернуть объект, Ctrl + стрелки влево-вправо. Чтобы изменить другой угол Ctrl + стрелки вверх вниз. А вот чтобы изменить высоту, в MTA сочитания клавиш нет, так что кликаем два раза на объект и сами подбираем нужную высоту (координата Z). Чтобы клонировать объект Ctrl + клик по объекту. Чтобы удалить - клавиша Delete. После установки первого объекта, ставим второй. Опять открываем список, выбираем нужный объект, подгоняем координаты. Может вы поставили такой маленький объект, что курсор его не видет? Нажимаем на клавишу E (русск. "у"). Выключается так же. Теперь как ставить тачки. Ответ: почти так же, как и объекты, просто выбираем другой пунк в меню (который внизу слева) на которой нарисована машина. И так же выбираем категорию, потом так же ставим. Мышкой ставить тачку проще, чем объект. Но координату угла Y советую не менять, так как в сампе её нету. Чтобы перейти в режим теста, нажмите на клавишу F5. После того, как вы на грув (я так думаю ) поставили объекты и транспорт, сохраняем нашу первую созданную карту. Для этого переходим в фиксированное положение камеры и нажимаем на верхней панели кнопку с дискетой. Набираем название, сохраняем. А теперь самое интересное. Конвентирование объектов в самп. Заходим в папку с МТА в папки: \server\mods\deathmatch\resources\"название вашей сохранённой карты". Теперь открываем файл с расширением ".map", который там находится, блокнотом. Выделяем всё (Ctrl+a) и копируем (Ctrl+C). Заходим на сайт http://www.convertffs.com/ и в "Paste here" вставляем то что вы скопировали из файла map. Настройки input установятся автоматически, а вот Output надо немножко поднастроить. Это зависит от стримера. Если никого нет - CreateObject. Для машин AddStaticVehicle. Потом нажимаем на кнопку "Convert" и получившийся код вставляем в мод/фильтскрипт (паблик OnGameModeInit). Вот и весь урок. Желаю удачи в создании карт! Автор урока -EvgeN 1137. Если будут вопросы - задавайте сюда.
  21. Пишите какие уроки хотите увидеть в этом разделе и в течении 2 двух дней, тот манипуал который вы описали появится здесь... И самое главное всё подробно описывайте, если не будет подробного описания. То ваше сообщение не будет приниматься....
  22. ByMeR_OK

    Иконки для TDM сервера

    Чтобы показывало иконкой в правой стороне экрана что игрок подключается к серверу, то добавляйте в начало мода вот это: #define ICON_CONNECT 200 и ещё в public OnPlayerConnect(playerid) вот это: SendDeathMessage(INVALID_PLAYER_ID, playerid, ICON_CONNECT); Чтобы показывало в правой стороне экрана что игрок выходит с сервера, то добавляйте в начало мода вот это: #define ICON_DISCONNECT 201и в public OnPlayerDisconnect(playerid) вот это: SendDeathMessage(killerid, playerid, reason); Чтобы показывало иконкой в правой стороне экрана что игрок убил кого то или сам умер, то добавляйте в public OnPlayerDeath(playerid, killerid, reason) SendDeathMessage(killerid, playerid, reason); На этом урок закончился http://forum.gs-games.ru/public/style_emoticons/default/mellow.gif Автор урока: [D]em[O]n
  23. C помощью этой мини функции вы сможете узнать ID любой клавиши доступной в SAMP. Достаточно зайди в игру и нажать на нужную вам клавишу. Паблик OnPlayerKeyStateChange new str[30]; format(str,sizeof(str),"%d - newkeys, %d - oldkeys",newkeys,oldkeys); SendClientMessage(playerid,COLOR,str); Автор: E1edge
  24. XuPypg

    Система материалов

    Данная система похожа на систему из САМП-РП. Версия:v.1.2 объясню подробнее:законники должны на авианосце привезти материалы на склад в зону 51...там есть пекапы по которым банды могут воровать материалы...в общак банд можно так же воровать маты теперь...когда подходишь к пекапу набираешь команду /materials get - взять 1к матов садишься в свой фургон (обязательно в фургон от банды) вводишь /materials put положить маты в фургон...команда /unloding разгрузить маты у себя на базе(не доработано еще) (скажу сразу будет обновляться) Если заметили ошибку или хотите предложить что либо пишите(отзывы очень важны) Ко всем new добавим new mats1; new mats2; new colmats; new matscar1; new matscar2; new objakgro; new objakbal; new objakcor; new objakvag; new objakrif; new furgon[5]; new matso;в пабликpublic OnPlayerPickUpPickup вставляем else if(pickupid == mats1) { new l = PlayerInfo[playerid][pLeader]; new m = PlayerInfo[playerid][pMember]; if(l==14 || l==1 ||l==2||l==3||l==8||l==12||l==20 || l==15 || l==16 || l==17 || l==18 || m==14 || m==15 || m==16 || m==17 || m==18|| m==1 ||m==2||m==3||m==8||m==12||m==20) { if(colmats < 20) { SendClientMessage(playerid, COLOR_RED, "На складе нет материалов"); } else { PlayerInfo[playerid][pMats]+=20; SendClientMessage(playerid, COLOR_LIGHTBLUE, "Вы взяли несколько комплектов"); colmats=colmats-20; } } else { SendClientMessage(playerid, COLOR_GREEN, "Вы не состоите в преступных группировках или вы не законник"); } return 1; } else if(pickupid == mats2) { new l = PlayerInfo[playerid][pLeader]; new m = PlayerInfo[playerid][pMember]; if(l==14 || l==1 ||l==2||l==3||l==8||l==12||l==20 || l==15 || l==16 || l==17 || l==18 || m==14 || m==15 || m==16 || m==17 || m==18|| m==1 ||m==2||m==3||m==8||m==12||m==20) { if(colmats < 20) { SendClientMessage(playerid, COLOR_RED, "На складе нет материалов"); } else { PlayerInfo[playerid][pMats]+=20; SendClientMessage(playerid, COLOR_LIGHTBLUE, "Вы взяли несколько комплектов"); colmats=colmats-20; } } else { SendClientMessage(playerid, COLOR_GREEN, "Вы не состоите в преступных группировках или вы не законник"); } return 1; }в пабликpublic OnGameModeInit() пикапы и авиносцы objakgro = CreatePickup(1239,2,2505.8123,-1694.6447,13.5579); objakcor = CreatePickup(1239,2,1663.2285,-2113.6067,13.5469); objakbal = CreatePickup(1239,2,2644.9167,-2033.7373,13.5540); objakrif = CreatePickup(1239,2,2184.0181,-1812.2617,13.5469); objakvag = CreatePickup(1239,2,2767.7549,-1616.6736,10.9219); mats1 = CreatePickup(1239,2,129.8493,1875.6160,17.8359); mats2 = CreatePickup(1239,2,124.8786,1876.2286,17.8359); matscar1 = AddStaticVehicleEx(548,-1287.83801270,447.79321289,9.08756161,0.00000000,-1,-1,30000); //Cargobob matscar2 = AddStaticVehicleEx(470,-1349.24914551,456.36822510,7.29751158,0.00000000,-1,-1,30000); //Patriot CreatePickup(1239,2,275.2503,1829.7740,17.6406); Create3DTextLabel("/materials",0xBFF600FF,275.2503,1829.7740,17.6406,20.0,0); furgon[3]=AddStaticVehicleEx(418,2649.13476562,-2009.16430664,13.49035358,268.69067383,85,85,30000); furgon[2]=AddStaticVehicleEx(418,2505.81274414,-1672.85095215,13.26896763,67.48950195,16,16,30000); furgon[4]=AddStaticVehicleEx(418,2187.64599609,-1797.88012695,13.11032677,49.62463379,108,108,30000); furgon[1]=AddStaticVehicleEx(418,2771.26904297,-1609.55798340,10.67187500,272.66064453,6,6,30000); furgon[0]=AddStaticVehicleEx(418,1694.37329102,-2118.54394531,13.52521706,326.25524902,2,2,30000);в паблик public CarEnter(playerid,carid) if(carid >= matscar1 && carid <= matscar2) { if(PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3||PlayerInfo[playerid][pMember] == 1|| PlayerInfo[playerid][pLeader] == 1||PlayerInfo[playerid][pMember] == 2|| PlayerInfo[playerid][pLeader] == 2||PlayerInfo[playerid][pMember] == 8|| PlayerInfo[playerid][pLeader] == 8||PlayerInfo[playerid][pMember] == 12|| PlayerInfo[playerid][pLeader] == 12||PlayerInfo[playerid][pMember] == 20|| PlayerInfo[playerid][pLeader] == 20)//фракции ставим свои...это законники { ShowPlayerDialog(playerid,5551,DIALOG_STYLE_MSGBOX,"Система материалов","{FF0000}Вы хотете отвезти материалы на военную базу?","Да","Отмена"); } else { SendClientMessage(playerid,COLOR_LIGHTRED2,"Вы законник!"); RemovePlayerFromVehicle(playerid); } }в public OnDialogResponseвставляем if(dialogid == 5551) { if(response) { SetPlayerCheckpoint(playerid,136.7081,1875.6571,22.4375,5.0); } }в public OnPlayerEnterCheckpointвставляем if(PlayerToPoint(2.0, playerid,136.7081,1875.6571,22.4375)) { colmats+=5000; DisablePlayerCheckpoint(playerid); }в public OnPlayerCommandTextвставляем if(strcmp(cmd,"/materials",true)==0) { if(IsPlayerConnected(playerid)) { new l = PlayerInfo[playerid][pLeader]; new m = PlayerInfo[playerid][pMember]; new ran = PlayerInfo[playerid][pRank]; if(l==14|| l==15 || l==16 || l==17 || l==18 || (m==14&&ran>=4) || (m==15&&ran>=4) || (m==16&&ran>=4) || (m==17&&ran>=4) || (m==18&&ran>=4)) { new x_nr[256]; x_nr = strtok(cmdtext, idx); if(!strlen(x_nr)) { SendClientMessage(playerid, COLOR_WHITE, " Используйте: /materials [name]"); SendClientMessage(playerid, COLOR_WHITE, "Доступные названия: Get, Put."); return 1; } if(strcmp(x_nr,"get",true) == 0) { if(PlayerToPoint(3.0,playerid,275.2503,1829.7740,17.6406)) { if( matso >= 1000) { SendClientMessage(playerid, COLOR_GREY, "У вас уже есть на руках большой комплект материалов!"); } else { matso = 1000; SendClientMessage(playerid, COLOR_GREY, "Вы взяли один большой комплект материалов!"); SendClientMessage(playerid, COLOR_GREY, "Отнесите его в ваш фургон и отвезите на базу!"); ApplyAnimation(playerid,"CARRY","crry_prtial",4.0,1,0,0,1,1,1); SetPlayerAttachedObject(playerid, 1 , 2060, 1,0.11,0.36,0.0,0.0,90.0); ApplyAnimation(playerid,"CARRY","crry_prtial",4.0,1,0,0,1,1,1); } } } else if(strcmp(x_nr,"put",true) == 0) { new caridi = GetPlayerVehicleID(playerid); if(caridi == furgon[0] || caridi == furgon[1]|| caridi == furgon[2]|| caridi == furgon[3]|| caridi == furgon[4]) { if(mater[caridi] > 3000) { SendClientMessage(playerid,COLOR_GREY,"Больше 3-х больших комплектов материалов возить нельзя!"); return 1; } else { if (matso==1000) { mater[caridi] += 1000; matso-=1000; SendClientMessage(playerid, COLOR_GREY, "Вы положили большой комплект материалов фургон!"); if(IsPlayerAttachedObjectSlotUsed(playerid,1)) RemovePlayerAttachedObject(playerid,1); } } } else { SendClientMessage(playerid, COLOR_GREY, "Вы должны сидеть в фургоне чтоб положить комплект материалов!"); } } } else { SendClientMessage(playerid,COLOR_GREY,"Вы не состоите в преступных группировках либо у вас маленький ранг"); return 1; } } return 1; } if(strcmp(cmd, "/unloding", true) == 0) { if(IsPlayerConnected(playerid)) { new l = PlayerInfo[playerid][pLeader]; new m = PlayerInfo[playerid][pMember]; new ran = PlayerInfo[playerid][pRank]; new caridi = GetPlayerVehicleID(playerid); if(l==14|| (m==14&&ran>=4)) { format(string, sizeof(string), "*Вы положили в общак банды Grove Street %d материалов.",mater[caridi]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); objakgro+=mater[caridi]; } else if(l==15||m==15&&ran>=4) { format(string, sizeof(string), "*Вы положили в общак банды El Coronas %d материалов.",mater[caridi]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); objakcor+=mater[caridi]; } else if(l==16||m==16&&ran>=4) { format(string, sizeof(string), "*Вы положили в общак банды Ballas gang %d материалов.",mater[caridi]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); objakbal+=mater[caridi]; } else if(l==17||m==17&&ran>=4) { format(string, sizeof(string), "*Вы положили в общак банды Rifa gang %d материалов.",mater[caridi]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); objakrif+=mater[caridi]; } else if(l==18||m==18&&ran>=4) { format(string, sizeof(string), "*Вы положили в общак банды Vagos gang %d материалов.",mater[caridi]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); objakvag+=mater[caridi]; } } return 1; } Автор: 9GYAR
  25. XuPypg

    Ограничитель скорости

    Всем привет! Вот выкладываю урок по созданию ограничителя скорости И так мы начинаем В начало мода добавляем #define MAX_SPEEDO 0.6 // Максимально допустимая скорость. #define SLOW_FACTOR 0.9 // На сколько будет сбавляться скорость при превышении порога. forward Timer(); new Limiter[MAX_PLAYERS]; new limtimer;В public OnPlayerConnect добавляем Limiter[playerid] = 0;В public OnPlayerCommandText добавляем if (strcmp("/limiter", cmdtext, true) == 0) { for(new i=0;i<MAX_PLAYERS;i++) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(Limiter[playerid] == 0) { SendClientMessage(playerid,0xAA3333AA,"Ограничитель скорости включен."); SendClientMessage(playerid,0xAA3333AA,"Что бы выключить используйте /offlimiter."); limtimer = SetTimer("Timer",1000,1); Limiter[playerid] = 1; } else { SendClientMessage(playerid ,COL OR_G REY, "Огр анич ител ь скорости уже включен."); } return 1; } SendClientMessage(playerid, COLOR_GRAD2, " Вы не в машине!"); return 1; } } if (strcmp("/offlimiter", cmdtext, true) == 0) { if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(Limiter[playerid] == 1) { KillTimer(limtimer); SendClientMessage(playerid,0xAA3333AA,"Ограничитель скорости выключен."); Limiter[playerid] = 0; return 1; } else { SendClientMessage(playerid,COL OR_G REY, "Огр анич ител ь скорости не включен."); return 1; } } SendClientMessage(playerid, COLOR_GRAD2, "Вы не в машине!"); return 1; }В public OnPlayerStateChange добавляем if(newstate == PLAYER_STATE_ONFOOT) {Ниже добавляем KillTimer(limtimer); Limiter[playerid] = 0;Создаем новый паблик в конец мода public Timer() { new Float:x,Float:y,Float:z,veh; for(new i; i<MAX_PLAYERS; i++) { veh=GetPlayerVehicleID(i); GetVehicleVelocity(veh,x,y,z); if((x > MAX_SPEEDO || x < -MAX_SPEEDO) || (y > MAX_SPEEDO || y < -MAX_SPEEDO)) { SetVehicleVelocity(veh,x*SLOW_FACTOR,y*SLOW_FACTOR,z); } } } На этом наш урок законченВсем спасибо за внимание Автор урока: KaspeR Ставим плюсиГ
×

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

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