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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Условные конструкции позволяют Вам посмотреть, удовлетворяют ли данные условиям, а затем в зависимости от результата выполнить код. Для того, чтобы работать с условными конструкциями, сначала нужно выучить операторы сравнения, с помощью которых ставится условие для определенной конструкции. В приведенной ниже таблице приведены все условные операторы и их применение. If – это условный оператор, в скобках перед оператором пишется условие. После скобок точка с запятой не ставится. В фигурных скобках пишется код, если условие выполнится, если условие не выполнится, код также не выполнится. Else – это также условный оператор, но он выполняет свои функции только в том случае если условие в if не выполнилось. Тоесть, оператор if можно назвать как оператор «если», а еlse как оператор «иначе». Давайте поставим простейшее условие: Например, у нас есть две переменные с разными значениями. new samp = 12; new pawn = 8;Теперь поставим такое условие: Если переменная samp равна переменной pawn, то даемигроку денег, если не равна, то отнимаем у игрока деньги. if (samp == pawn) //если samp равно pawno { GivePlayerMoney(playerid,1000); //даем игроку 1000$ }else{ GivePlayerMoney(playerid,-1000); //отбираем у игрока 1000$ }Условия могут быть как одноуровневыми, так и многоуровневыми. Одноуровневое условие,это обычное условие (которое приведено выше), а многоуровневое, это то условие (которое приведено ниже), внутри которого есть еще одно или несколько вложенных условий. При построении многоуровневых условий, пишите код лесенкой, чтобы потом не запутаться в большом количестве условий, пишется это так: if(IsPlayerConnected(playerid)) //если игрок подключен к серверу { if (samp == pawn) //если samp равно pawno { GivePlayerMoney(playerid,1000); //даем игроку 1000$ }else{ GivePlayerMoney(playerid,-1000); //отбираем у игрока 1000$ } }else{ //если игрок не подключен к серверу //выполнить другой код } Автор Cloud
  2. Devin Coleman

    Урок №5 – Массивы

    Массив – это виртуальная таблица, т.е большое место для хранения большого количества данных. Массивы бывают одномерный, двумертными и трехмерными. Запомните, что в массиве вы не можете использовать последнюю строку или столбец. Одномерный массив – это один столбец, разбитый на указанное в квадратных скобках количество ячеек. Одномерный массив объявляется следующим образом: new pawn[5] = {347,782,632,437,721}; //одномерный массив целочисленного типаПоскольку массив эта виртуальная таблица, сейчас я научу вас обращаться к определеннойячейке данной таблицы и получать из нее данные или наоборот записывать в нее данные. Массив, как и любая переменная тоже может быть: целочисленным, вещественным, логическим и строковым. Последние два мне встречать не доводилось. new Float:pawn[5] = {347.24,782.35,632.67,437.32,721.73}; //одномерный массив вещественного типаИтак, чтобы обратиться к ячейке со значением 782, вы пишете ссылку на нее. Ссылка будетвыглядеть следующим образом: //в квадратных скобках пишем номер ячейки к которой обращаемся pawn[1]Не забываем, что отсчет ячеек начинается с 0, поэтому в квадратных скобках стоит единица.Теперь мы можем делать все что угодно с данным значением, например прибавим к ему любую цифру или прибавим значение из любой другой ячейки: pawn[1] += 2.4; //значение в ячейке pawn1 станет 784.9 pawn[1] += pawn[0]; //значение в ячейке pawn1 станет 1129.59Двумерный массив – это виртуальная таблица, состоящая из множества строк и столбцов.Первая цифра указывает количество строк, вторая цифра количество столбцов. Столбец и строка 0 тоже учитывается. Объявляется двумерный массив следующим образом: new pawn[3] = { //двумерный массив целочисленного типа {347,782,632}, {437,721,572}, {168,472,828} }Чтобы обратиться к определенной ячейке, например к ячейке со значением 828, нам нужнонаписать такую ссылку: //в квадратных скобках пишем номер ячейки к которой обращаемся pawn[2][2]Тоесть в скобках мы указываем 2 строка, 2 столбец где находится эта ячейка. Если мы хотимобратиться к ячейке с цифрой 437, мы указывает в скобках 1 строка, 0 столбец. А дальше мы можем делать со значением ячейки все что угодно. С Трехмерными массивами я не разу не встречался, но думаю в новом издании учебника я смогу объяснить вам как с ним работать, хотя вам я думаю врятли он будет нужен. Кроме обычных массивов есть массив enum. Эта хранилище переменных, т.е. данный массив хранит не какие-либо значения, а сами переменные. По другому его можно назвать массив переменных. Массив объявляется таким образом: enum pawn { pMoney, pAdmin }Чтобы обратится к переменной, нужно создать еще одну переменную, которая поможет намс этой задачей: new samp[MAX_PLAYERS][pawn];С MAX_PLAYERS в названии переменной мы уже знакомы, а во вторых скобках указываетсяназвание массива. Итак, чтобы обратиться к переменной из массива, мы пишем такую строчку: samp[playerid][pMoney];Теперь вы можете изменять значение переменной в массиве, как вам вздумается, напримерприбавим к значению переменой pMoney 100. samp[playerid][pMoney] += 100; Автор Cloud
  3. Devin Coleman

    Урок №4 Математика в Pawn

    Переменные целочисленного и вещественного типа, могут принимать различные числовые значения. Со значениями переменных можно проводить различные математические операции. Для этого есть операторы: сложения, вычитания, деления и умножения, которые приведены ниже: В привиденных выше примерах, указаны имена 3 переменных. При сложениизначений переменных, переменная pawn – это первое слагаемое, переменная samp – это второе слагаемое. Переменная result – это сумма слагаемых. Допустим у нас уже есть эти переменные, для переменных pawn и samp мы уже присвоили значения, а в переменной result будет сумма слагаемых. new pawn = 25; new samp = 5; new result;Вот примеры математических операций по приведенной выше таблице, тут все просто: result = pawn += samp; //переменная result = 30 result = pawn -= samp; //переменная result = 20 result = pawn *= samp; //переменная result = 110 result = pawn /= samp; //переменная result = 5Прошу обратить внимание. Если вы пытаетесь сложить, вычесть, делить или умножитьцелое число и десятичное число, переменная с результатом должна быть вещественного типа. new Float:pawn = 25.9; new samp = 5; new Float:result;Также прошу обратить внимание, на то что, переменная с результам должна быть всегдавпереди, т.е. мы не можем сначала сложить, а потом только поставить знак равно и переменную result. pawn += samp = result; //это неправильно, result должен быть впередиТут все очень просто, поэтому переходим к следующему уроку. Автор Cloud
  4. Инкремент прибивляет к значению переменной единицу. Декремент отнимает единицу от значения переменной. Допустим у нас есть одна переменная c значением по умолчанию = 25. new pawn = 25;Чтобы отнять от значения переменной единицу, мы пишем следующее: pawn--; //pawn равен 24Чтобы прибавить единицу к значению переменной, мы пишем следующее: pawn++; //pawn равен 26Когда мы прибавляем к значению переменной единицу при помощи инкремента, такимобразом мы инкрементируем переменную. Когда мы отнимает от значения переменной единицу при помощи декремента, таким образом мы декрементируем переменную. Запомните это! К переменной можно прибавить и отнять единицу не только с помощью инкремента и декремента. Но об этом в следующем уроке. Автор Cloud
  5. Devin Coleman

    Урок №2 Константы

    Урок №2 - Константы Константы – это неизменяемые переменные. Константа объявляется следующим образом: #define PAWN 25Таким образом, мы создали простую константу. Константы очень удобно использовать длязамены сложных параметров, таких как color, в котором указывается HEX-код цвета в виде «0xAFAFAFAA», гораздо удобнее написать COLOR_GREY, вместо этого сложного кода. #define COLOR_GREY 0xAFAFAFAA //серый #define COLOR_GREEN 0x33AA33AA //зеленый #define COLOR_RED 0xAA3333AA //красный #define COLOR_YELLOW 0xFFFF00AA //желтый #define COLOR_WHITE 0xFFFFFFAA //белый #define COLOR_BLUE 0x0000BBAA //синий #define COLOR_ORANGE 0xFF9900AA //оранжевыйВ стандартном инклуде a_samp уже есть много стандартных констант, которые можноиспользовать в скрипте. Ниже приведены константы лимитов сервера. Данные константы обычно используются в циклах for. #define MAX_PLAYER_NAME 24 //лимит символов игрока #define MAX_PLAYERS 500 //лимит игроков на сервере #define MAX_VEHICLES 2000 //лимит транспорта на сервере #define MAX_OBJECTS 400 //лимит объектов на сервере #define MAX_MENUS 128 //лимит меню на сервере #define MAX_3DTEXT_GLOBAL 1024 //лимит глобальных 3D текстов на сервере #define MAX_3DTEXT_PLAYER 1024 //лимит 3D текстов для игрока на сервере #define MAX_PICKUPS 2048 //лимит пикаповНиже я привел пример использования одной из констант. Этот скрипт будет простовыполняться для всех игроков. Пример использования: for(new i=0; i<MAX_PLAYERS; i++) { //выполнить код }А следующие ниже приведенные константы используются в функции OnPlayerState. Этоконстанты состояний игрока. Они используются в условиях, если параметр newstate равен одному из эти значений (0-9). #define PLAYER_STATE_NONE 0 // #define PLAYER_STATE_ONFOOT 1 //игрок ест #define PLAYER_STATE_DRIVER 2 //игрок управляет машиной #define PLAYER_STATE_PASSENGER 3 //игрок сидит в машине как пассажир #define PLAYER_STATE_EXIT_VEHICLE 4 //игрок выходит из машины #define PLAYER_STATE_ENTER_VEHICLE_DRIVER 5 //игрок входит в машину как водитель #define PLAYER_STATE_ENTER_VEHICLE_PASSENGER 6 //игрок входит в машину как пассажир #define PLAYER_STATE_WASTED 7 //игрок в розыске #define PLAYER_STATE_SPAWNED 8 //игрок появился в точке возрождения #define PLAYER_STATE_SPECTATING 9 //игрок спектаторНиже я привел простой пример использования одной из констант. Этот скрипт должен бытьвнутри функции OnPlayerState. Я поставил условие, если игрок не управляет машиной, выполнить код. Пример использования: if(newstate != PLAYER_STATE_DRIVER) //если игрок не управляет машиной { //выполнить код }Чтобы не запоминать id каждого оружия в инклуде есть константы оружия. Вместо цифр выможете использовать имена оружия, которые показаны в константах. Если вы хотите дать игроку какое-либо оружие, функцией GivePlayerWeapon мы пишем обычно такую строчку: GivePlayerWeapon(playerid,22,100);Если вы не помните id оружия, вы можете написать так: GivePlayerWeapon(playerid,WEAPON_COLT45,100);Ниже приведены константы всего оружия: #define WEAPON_BRASSKNUCKLE 1 #define WEAPON_GOLFCLUB 2 #define WEAPON_NITESTICK 3 #define WEAPON_KNIFE 4 #define WEAPON_BAT 5 #define WEAPON_SHOVEL 6 #define WEAPON_POOLSTICK 7 #define WEAPON_KATANA 8 #define WEAPON_CHAINSAW 9 #define WEAPON_DILDO 10 #define WEAPON_DILDO2 11 #define WEAPON_VIBRATOR 12 #define WEAPON_VIBRATOR2 13 #define WEAPON_FLOWER 14 #define WEAPON_CANE 15 #define WEAPON_GRENADE 16 #define WEAPON_TEARGAS 17 #define WEAPON_MOLTOV 18 #define WEAPON_COLT45 22 #define WEAPON_SILENCED 23 #define WEAPON_DEAGLE 24 #define WEAPON_SHOTGUN 25 #define WEAPON_SAWEDOFF 26 #define WEAPON_SHOTGSPA 27 #define WEAPON_UZI 28 #define WEAPON_MP5 29 #define WEAPON_AK47 30 #define WEAPON_M4 31 #define WEAPON_TEC9 32 #define WEAPON_RIFLE 33 #define WEAPON_SNIPER 34 #define WEAPON_ROCKETLAUNCHER 35 #define WEAPON_HEATSEEKER 36 #define WEAPON_FLAMETHROWER 37 #define WEAPON_MINIGUN 38 #define WEAPON_SATCHEL 39 #define WEAPON_BOMB 40 #define WEAPON_SPRAYCAN 41 #define WEAPON_FIREEXTINGUISHER 42 #define WEAPON_CAMERA 43 #define WEAPON_PARACHUTE 46 #define WEAPON_VEHICLE 49 #define WEAPON_DROWN 53 #define WEAPON_COLLISION 54Константы очень удобно использоваться, чтобы вынести в начало скрипта, все частоиспользуемые значения переменных или параметров функций. Например, во многих скриптах часто используется такая константа. #define MAX_POINTS 25 new massive[MAX_POINTS][3] = {Она обычна, используется для массивов и указывает количество строк в массиве, какпоказано на примере выше. Также можно встретить в некоторых скриптах такие константы: #define ACCOUNT “%s.ini”Они предназначены для систем регистрации, т.е. показывают путь до файла, в которыйпроизводится запись. Так что у констант широкое применение. Теперь переходим к следующему уроку. Автор Cloud
  6. Devin Coleman

    Урок №1 - переменные

    Урок №1 - Переменные Переменные – это места где вы можете хранить данные. Имена переменных чувствительны к регистру, поэтому переменные Pawn и PAWN, разные переменные. Переменные могут быть разных типов. Целочисленный тип переменной может хранить в себе только целые числа. Вы не можете использовать десятичные числа с нулем на конце (1.0, 2.0 и т.д.) так как это все равно считается технически не целым числом. Чтобы объявить (создать) целочисленную переменную, нужно написать: new pawn;Таким образом мы создали целочисленную переменную с именем Pawn. При созданииновой переменной ей можно присвоить значение по умолчанию. Чтобы присвоить значение переменной pawn, нужно написать следующее: new pawn = 25;Переменная вещественного типа может хранить в себе только десятичные числа.Объявляется она следующим образом: new Float:pawn = 25.3;Таким образом мы создали вещественную переменную и присвоили ей значение.Переменная логического типа может принимать только два значения: истина (true) – эквивалентна 1 и ложь (false) – эквивалентна 0. По умолчанию данный тип переменной принимает значение false. Объявляется переменная следующим образом: new bool:pawn = true;Таким образом мы создали логическую переменную и присвоили ее значение true.Также переменные могут быть глобальными и локальными. Глобальные переменные объявляются в начале скрипта и они доступны всему скрипту, т. е. обратиться к переменной можно из любой автовызываемой функции. Локальные переменные объявляются в теле автовызываемой функции и они доступны только в внутри этой функции, из другой функции скрипта, ее вызвать нельзя. new pawn; // это глобальная переменная public OnGameModeInit() { new samp; // это локальная переменная return 1; }Строка – это место для хранения букв или символов. Строки должны быть помещены вмассив, так как каждая ячейка может содержать букву. Чтобы объявить строковую переменную, нужно написать следущее: new pawn[5] = “samp”;Таким образом мы создали строковую переменную и присвоили ей значение «samp». Числов квадратных скобках означает количество ячеек выделенное для строки. Почему 5 ячеек, когда слово состоит из 4 букв, потому что вы должны указать экстра-ячейку для идентификатора строки – 0. Тоесть цифра в квадратных скобках всегда больше значения переменной на единицу. Переменные могут быть предназначены как для всех игроков, так и для конкретного игрока. Если мы хотим сделать переменную индивидуальной для каждого игрока, то мы пишем так, пишу для всех типов переменных: new pawn[MAX_PLAYERS] = 25; //переменная целочисленного типа для каждого игрока new Float:pawn[MAX_PLAYERS] = 25.4; //переменная вещественного типа для каждого игрока new bool:pawn[MAX_PLAYERS] = true; //переменная логического типа для каждого игрокаMAX_PLAYERS означает, что переменная будет использоваться для всех игроков, т.е. длякаждого игрока у переменной свое значение. Если точнее, то у разных игроков разные значения этой переменной. new pawn[MAX_VEHICLES] = 25; //переменная целочисленного типа для каждого транспорта new Float:pawn[MAX_VEHICLES] = 25.4; //переменная вещественного типа для каждого транспорта new bool:pawn[MAX_VEHICLES] = true; //переменная логического типа для каждого транспортаMAX_VEHICLES означает, что переменная будет использоваться для всего транспорта, т.е.для каждого транспорта у переменной свое значение. Чтобы обратиться к такой переменной нужно написать следующее, пишу пример для обоих вариантов: pawn[playerid] = 5; // устанавливаем значение переменной для игрока на 5 pawn[vehicleid] = 5; // устанавливаем значение переменной для транспорта на 5Автор Cloud
  7. ByMeR_OK

    Античит на оружие

    Сейчас я расскажу как создать эффективный анти-чит на оружие. Начнем. Для начало добавим массивчики. new Weapons[MAX_PLAYERS][47];Теперь в OnPlayerConnect for(new i=0;i<47;i++) Weapons[playerid][i]=0;//обнулениеДальше в OnPlayerStateChange добавляем следующие чтоб анти-чит не сработал при посадке например в самолет. if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) { new model = GetVehicleModel(GetPlayerVehicleID(playerid)); switch(model) { case 592,577,511,512,520,593,553,476,519,460,513,548,425,417,487,488,497,563,447,469: Weapons[playerid][46]= 1; case 457: Weapons[playerid][2]= 1; case 596,597,598,599: Weapons[playerid][25]= 1; } }Теперь проверка можете поставить ее под таймер ну или как вам удобно. new weap = GetPlayerWeapon(playerid); if(weap != 0 && !Weapons[playerid][weap] && weap != 40) { //Действие например кик Kick(playerid); }Теперь макрос выдачи оружия. stock GiveWeapon(player,weapid,ammo); { Weapons[player][weapid]= 1; GivePlayerWeapon(player,weapid,ammo); return ; }Теперь нужно заменить все GivePlayerWeapon на GiveWeapon можете делать вручную а можете поставить макрос. #define GivePlayerWeapon GiveWeaponВсе урок окончен.
  8. ByMeR_OK

    Анти побег из тюрьмы

    Всем привет! Вот простая как бы проверка , для того чтобы игрок не сбежал из тюрьмы Что она делает: Если игрок сидит в КПЗ , и будет читерить , то есть сбежит из клетки то через некоторое время его вернет в клетку. Чтобы поставить ее ко всем forward добавьте : forward UpdateJailZone();Затем в public OnGameModeInit добавьте таймер: SetTimer("UpdateJailZone",5000,1);//Он сработает через 5 секундИ затем куда-нибудь в конец мода добавьте следующий паблик: public UpdateJailZone() { for(new i; i < GetMaxPlayers(); i++) { if(IsPlayerConnected(i)) { if(PlayerInfo[i][pJailed] == 1)//Вот тут идет проверка на то если игрок сидит в КПЗ { if(!IsPlayerInRangeOfPoint(6.0, i, 264.6288,77.5742,1001.0391))//Тут идет проверка если игрок не находится в заданных координатах { new string[128]; new name[MAX_PLAYER_NAME]; GetPlayerName(i, name, sizeof(name)); SetPlayerInterior(i, 6);//И если его там нет , то его телепортирует в 6 интерьер , то есть клетка кпз SetPlayerPos(i,264.6288,77.5742,1001.0391);//И в телепортирует в эти координаты , измените если у вас другие SendClientMessage(i,COLOR_RED,"* Я че то не понял , у тебя срок , куда пошёл , а ну назад!"); format(string, 256, "*Сервер: %s попытался сбежать из КПЗ , проверьте его!",name);//Ну понятно , сообщение для администраторов ABroadCast(COLOR_YELLOW,string,1); } } } } return 1; }Вот и все! Удачи
  9. ByMeR_OK

    RussianNicks v0.2

    Плагин позволяет использовать русские никнеймы. Поддерживаемые версии: SA:MP Server 0.3c SA:MP Server 0.3c R2 RussianNicks.zip
  10. 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 включить в машине
  11. 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
  12. 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); } } }
  13. 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
  14. 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
  15. Здравствуйте сегодня я вам покажу как зделать вот такой 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
  16. Краткое руководство по настройке плагина от Инкогнито: 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
  17. 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; }
  18. 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; }
  19. 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; }
  20. 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; }
  21. 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; } Всё урок закончен.
  22. 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);
  23. Итак в этом уроке я хочу научить ставить ворота в любом месте, у меня на сервере они установлены у донатных домов. Для начала создадим: 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; }
  24. 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
  25. 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; }
×

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

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