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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Всем здравствуйте. Ко public OnPlayerConnect // if(!IsRPNick(playerid)) { SendClientMessage(playerid,0xFF0000FF,"[Сервер]: Извините, но у Вас никнейм, который не подходит формату RP Имени. "); SendClientMessage(playerid,0xFF0000FF,"[Сервер]: Измените ваш никнейм в клиенте CR:MP на RP имя и попробуйте зайти еще раз."); SendClientMessage(playerid,0xFF0000FF,"[Сервер]: Если этого сообщение повторно не будет, значит вы ввели все верно!"); SendClientMessage(playerid,0xFF0000FF,"[Подсказка]:Пример RP имени: Ivan_Ivanov."); Kick(playerid); return true; } ко stock stock IsRPNick(playerid) { new plname[MAX_PLAYER_NAME]; GetPlayerName(playerid, plname, MAX_PLAYER_NAME); for(new i=0;i<strlen(plname);i++) { if( !((plname[i]>='a'&&plname[i]<='z') || (plname[i]>='A'&&plname[i]<='Z') || plname[i]=='_')) { return false; // недопустимые символы в нике } } new d = strfind(plname, "_"); if( d==-1 ) return false; // нет_ в нике if(strfind(plname, "_", false, d+1) != -1) return false; // больше одного _ в нике new name[10]; strmid(name, plname, 0, d, sizeof name); new surname[10]; strmid(surname, plname, d+1, strlen(plname), sizeof surname); if(strlen(name)<3 || strlen(name)>9) return false; // неверная длина имени if(strlen(surname)<3 || strlen(surname)>9) return false; // неверная длина фамилии if(!(name[0]>='A' && name[0]<='Z')) return false; // первая буква в имени не заглавная if(!(surname[0]>='A' && surname[0]<='Z')) return false; // первая буква в фамилии не заглавная for(new i=1;i<strlen(name);i++) { if(!(name[i]>='a'&&name[i]<='z')) return false; // неверные буквы в имени } for(new i=1;i<strlen(surname);i++) { if(!(surname[i]>='a'&&surname[i]<='z'))return false; // неверные буквы в фамилии } return true;// ok } P.S Вырезал с геймера новичкам пригодится.
  2. [media=Видеокамеру] [/media]Кто - то помнит? :D
  3. И так увжаемые пользыватели форума , я выложу урок как сделать заморозку в инте,, чтоб игрок не падал под инт. Такая проблема возникает когда инт на стримере стойт вообщем начинаем. Первое в Паблики OnPlayerSpawn SetPlayerSpawn OnPlayerPickUpPickup добавим в начало Frez(playerid);// замораживает игрока при появление в инте. и в самый конец добавим сам сток и паблик который отвечает за разморозку и заморозку. stock Frez(playerid) { TogglePlayerControllable(playerid, 0);// замараживаем игрока SetTimerEx("unFrez",3000,0,"%d",playerid);// время через которое разморозим } forward unFrez(playerid); public unFrez(playerid) TogglePlayerControllable(playerid, 1);// разморозка Вот и все. Автор: Longer(Artem_Storn)
  4. Приветствую.Данный код подойдёт совершенно для любого мода, если конечно правильно его вставить Ко всем new добавить: new bool:Offer[MAX_PLAYERS] = false; В public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd, "/givemygun", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,-1,"ИНФО: /givemygun [ID]"); new ID = strval(tmp); if(ID == playerid) return SendClientMessage(playerid,-1,"Вы не можете передать оружие самому себе!"); if(!IsPlayerConnected(ID)) return SendClientMessage(playerid,-1,"Игрок оффлайн!"); if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid,-1,"У вас нет оружия в руках!"); new Float:pos[3]; GetPlayerPos(ID, pos[0], pos[1], pos[2]); if(!IsPlayerInRangeOfPoint(playerid, 1.2, pos[0], pos[1], pos[2])) return SendClientMessage(playerid,-1,"Вы далеко от этого игрока!"); new nickplayer1[MAX_PLAYER_NAME], nickplayer2[MAX_PLAYER_NAME], sg[90]; GetPlayerName(playerid, nickplayer1, sizeof(nickplayer1)); GetPlayerName(ID, nickplayer2, sizeof(nickplayer2)); SetPVarInt(ID, "Gun", GetPlayerWeapon(playerid)); SetPVarInt(ID, "Ammo", GetPlayerAmmo(playerid)); SetPVarInt(ID, "IDplayer", playerid); SetPVarString(ID, "Nick1", nickplayer1); SetPVarString(ID, "Nick2", nickplayer2); format(sg, 70, "Вы предложили %s оружие которое у вас в руках.", nickplayer2); SendClientMessage(playerid, -1, sg); format(sg, 90, "%s предлагает вам оружие. Клавиша: Y - согласиться, N - отказаться.", nickplayer1); SendClientMessage(ID, -1, sg); Offer[ID] = true; return 1; } В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) if(newkeys == KEY_YES) { if(Offer[playerid] == true) { new getnick1[MAX_PLAYER_NAME], getnick2[MAX_PLAYER_NAME], sg[45]; GetPVarString(playerid, "Nick1", getnick1, sizeof(getnick1)); GetPVarString(playerid, "Nick2", getnick2, sizeof(getnick2)); format(sg, sizeof(sg), "Вы передали оружие %s", getnick2); SendClientMessage(GetPVarInt(playerid, "IDplayer"), -1, sg); format(sg, sizeof(sg), "Вы взяли оружие у %s", getnick1); SendClientMessage(playerid, -1, sg); RemovePlayerWeapon(GetPVarInt(playerid, "IDplayer"), GetPVarInt(playerid, "Gun")); GivePlayerWeapon(playerid, GetPVarInt(playerid, "Gun"), GetPVarInt(playerid, "Ammo")); DeletePVar(playerid, "Gun"); DeletePVar(playerid, "Ammo"); DeletePVar(playerid, "IDplayer"); DeletePVar(playerid, "Nick1"); DeletePVar(playerid, "Nick2"); Offer[playerid] = false; return 1; } } if(newkeys == KEY_NO) { if(Offer[playerid] == true) { new getnick1[MAX_PLAYER_NAME], getnick2[MAX_PLAYER_NAME], sg[60]; GetPVarString(playerid, "Nick1", getnick1, sizeof(getnick1)); GetPVarString(playerid, "Nick2", getnick2, sizeof(getnick2)); format(sg, sizeof(sg), "%s отказался принимать ваше оружие", getnick2); SendClientMessage(GetPVarInt(playerid, "IDplayer"), -1, sg); format(sg, sizeof(sg), "Вы отказались принимать оружие от %s", getnick1); SendClientMessage(playerid, -1, sg); DeletePVar(playerid, "Gun"); DeletePVar(playerid, "Ammo"); DeletePVar(playerid, "IDplayer"); DeletePVar(playerid, "Nick1"); DeletePVar(playerid, "Nick2"); Offer[playerid] = false; return 1; } } Если у вас ошибка error 017: undefined symbol "RemovePlayerWeapon", то добавьте в конец мода следующий код.
  5. Dmitriy Toporov

    Потребность сна

    1.В начале мода ко всем new добавляем: new psleep[MAX_PLAYERS]; // переменная отвечающая за сессию игрока 2.Создаём forward для будущего паблика (требует таймер): forward UpdateSleep(playerid); // наш форвард (для паблика) 3.Создаём наш public, вне других public'oв: public UpdateSleep(playerid) { // паблик упдейта потребностей if(psleep[playerid] == 0) { psleep[playerid] = 1; return 1; } if(psleep[playerid] == 1) { psleep[playerid] = 2; return 1; } if(psleep[playerid] == 2) { psleep[playerid] = 3; return 1; } if(psleep[playerid] == 3) { psleep[playerid] = 4; return 1; } if(psleep[playerid] == 4) { psleep[playerid] = 5; return 1; } if(psleep[playerid] == 5) { psleep[playerid] = 6; return 1; } if(psleep[playerid] == 6) { psleep[playerid] = 7; return 1; } if(psleep[playerid] == 7) { SendClientMessage(playerid, -1, "Внимание! У вас мало сил, вы очень устали! Вам нужно поспать!"); psleep[playerid] = 8; return 1; } if(psleep[playerid] == 8) { SendClientMessage(playerid, -1, "Внимание! У вас мало сил, вы очень устали! Вам нужно поспать!"); psleep[playerid] = 9; return 1; } if(psleep[playerid] == 9) { SendClientMessage(playerid, -1, "Внимание! У вас мало сил, вы очень устали! Вам нужно поспать!"); psleep[playerid] = 10; return 1; } if(psleep[playerid] == 10) { SendClientMessage(playerid, -1, "От усталости вы упали и уснули."); psleep[playerid] = 0; return 1; } return 1; } 4.В public OnGameModeInit вставляем наш таймер: SetTimer("UpdateSleep",300000,1); // Каждые пять минут добавляет 1 пункт усталости 5.Создаём места для сна: if (strcmp(cmd, "/sleep", true) == 0) { if (!PlayerToPoint(3.0, playerid, X,Y,Z )) { // вместо X,Y,Z вставляем координаты "кровати" SendClientMessage(playerid,-1,"Вы не на кровати!"); return 1; } if (psleep[playerid] <= 3) { // условие, если кол-во очков сна меньше или равно 3, то игрок не будет спать! SendClientMessage(playerid,-1,"Вы недавно спали, приходите позже!"); return 1; } SendClientMessage(playerid,-1,"Вы поспали Можете идти"); psleep[playerid] = 0; // сброс кол-ва очков усталости return 1; } Автор :
  6. Здравствуйте уважаемые пользователи GSG! Сегодня я решил вырезать команду на ПТС(Паспорт Транспортного средства) Для новичков думаю самое то! Вот сама команда. if(strcmp(cmd, "/tehpass", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "[Подсказка]: /tehpass [id]"); giveplayerid = ReturnUser(tmp); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { if (ProxDetectorS(8.0, playerid, giveplayerid)) { new str[128],sctring[2000]; new carid = GetPlayerVehicleID(playerid); format(str,sizeof(str),"{33CCFF}Зарегестрировано на: {ffffff}%s\n",CarInfo[GetRealID(carid)][cOwner]); strcat(sctring,str); format(str,sizeof(str),"{33CCFF}Марка транспорта: {ffffff}%s\n",VehiclesName[CarInfo[GetRealID(carid)][cMod]-400]); strcat(sctring,str); format(str,sizeof(str),"{33CCFF}Гос. рег. знак: {ffffff}%s\n",CarInfo[GetRealID(carid)][cNumber]); strcat(sctring,str); new lol[256]; format(lol,sizeof(lol),"[ПТС] Паспорт транспортного средства"); ShowPlayerDialog(giveplayerid,4567,DIALOG_STYLE_MSGBOX,lol,sctring,"Ок","Отмена"); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "Игрок %s: Показал свой Тех.Паспорт от Авто.", sendername); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); format(string,sizeof(string), "Показал свой Тех.Паспорт от Авто"); SetPlayerChatBubble(playerid,string,COLOR_PURPLE,30.0,10000); return true; } } } } P.S.Взято из мода GreenTech 7.5.2 Но пришлось переделывать под свой мод.Так как там были другие значения. Автор неизвестен Авторы мода Red_Devils, Vlad_Dredd, мапинг: Artem_Stetham
  7. И так многим интересно как сделать так чтобы где игрок вышел из игры,там же при входе он и появится. На эту тему я решил поискать немного информации,нашёл не плохой урок,от Extazy. Смотрите. И так первое что вам нужно добавить 3 переменных которые будут записываться в аккаунт пользователя. (!)Если у вас нет регистрации,ничего не выйдет! (!)Этот мануал написан для ГФ модов,но оптимизировать можно под что угодно,главное чтобы была регистрация. И так находим конструкцию enum pInfo в своём моде,и в конец добавляем Float:pCordX, Float:pCordY, Float:pCordZ, Далее в OnPlayerRegister добавляем строку format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var); Поясняю: Тут мы делаем чтобы при создании аккаунта в него добавились нужные нам переменные. Далее в OnPlayerUpdate добавляем аналогичный код format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordX]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordY]);fwrite(hFile, var); format(var, 32, "CordinataX=%.1f\n",PlayerInfo[playerid][pCordZ]);fwrite(hFile, var); Поясняю: Тут мы делаем чтобы переменные записывались в аккаунт И в OnPlayerLogin добавляем if( strcmp( key , "CordinataX" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordX] = strval( val ); } if( strcmp( key , "CordinataY" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordY] = strval( val ); } if( strcmp( key , "CordinataZ" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCordZ] = strval( val ); } Поясняю: Тут мы извлекаем значение переменных из файла Далее в OnGameModeInit добавляем бесконечный таймер,который будет получать позиции игроков SetTimer("SavePlayerPos",1000,1); Далее создадим сам паблик public SavePlayerPos() { new Float:x,Float:y,Float:z; //используем цикл for(new i = 0;i , MAX_PLAYERS;i++) { GetPlayerPos(i,px,py,pz);//Получаем позицию игрока PlayerInfo[i][pCordX] = px;//записываем x PlayerInfo[i][pCordY] = py;//записываем y PlayerInfo[i][pCordZ] = pz;//записываем z } } И не забудьте добавить форвард,в начало кода Ну и наконец при спавне игрока,устанавливаем ему эти координаты. Это ставим в OnPlayerSpawn forward SavePlayerPos(); x = PlayerInfo[i][pCordX]; y = PlayerInfo[i][pCordY]; z = PlayerInfo[i][pCordZ]; SetPlayerPos(playerid, x,y,z);//Установим координаты из переменной SetPlayerFacingAngle(playerid, 360.0); В принципе можно убрать все спавны фракциям,и добавить условия только зарегистрирован или нет,и если нет то ставить другую позицию. Но это уже нюансы. Автор: Extazy.
  8. Доброй ночи. Итак, сегодня мы рассмотрим простейшую ситуацию, которая поможет нам ответить на несколько вопросов: - в какой коллбэк и почему уходит любое сообщение, написанное в чат; - почему со строкой можно работать абсолютно так же, как и с массивом. Разберем ситуацию на примере. Бывают такие случаи, когда игрок по ошибке забыл переключить раскладку клавиатуры на английскую и при попытке ввода команды получает что-то вроде ".ксщт дщпшт зфыыцщкв" вместо "/rcon login password". Это, конечно, происходит исключительно по невнимательности, но - не есть хорошо. Как можно предусмотреть такую ситуацию? Ответ прост и просится сам - первым символом ошибочного сообщения будет точка, вторым - любой другой, кроме точки. Это очевидно - точка в русской раскладке и слэш - в английской находятся на одной и той же кнопке. Само собой разумеется, что можно эту ситуацию проконтролировать. Но как? Первоначально - проследим путь отправленной строки в чат. Клиент парсит введенную строку и проверяет первый символ. Это слэш? Отлично, строка отправится в OnPlayerCommandText и будет обрабатываться уже этой функцией. Не слэш? Значит, строка командой не является и ее нужно отправить в другой коллбэк - OnPlayerText. В этом и заключается разница между строкой-командой и строкой-текстом для клиента. Итак, коллбэк для отслеживания подобных опечаток мы определили, это OnPlayerText (playerid, text[]). Но как отследить, какие первые два символа в переданной строке text[]? Конечно, можно воспользоваться функцией работы с текстом strcmp и отследить эту самую точку, подобрав нужные параметры. Но это - изобретение велосипеда с квадратными колесами. Каждая строка (не только в Pawn, во многих других ЯП) - является массивом символов, каждый элемент этого массива хранит в себе ASCII-код нужного символа. Соответственно, если строка - массив, то и работать в ней можно абсолютно так же. Прямо в начале тела коллбэка проверяем первые два символа - text[0] и text[1]. Значение text[0] соответствует точке, а значение text[1] - нет? Наш случай! Выводим игроку сообщение об опечатке и, дабы текст не синхронизировался с остальными игроками, вернем false как результат обработки строки. public OnPlayerText(playerid, text[]) { if (text[0] == '.' && text[1] != '.') //Можно и по-другому. ASCII-код точки - 46, сравниваем напрямую: if (text[0] == 46 && text[1] != 46) { SendClientMessage (playerid, -1, "Проверьте раскладку клавиатуры."); return false; } //Остальной код обработки коллбэка будет уже для каждого свой. } Результат работы будет выглядеть примерно так. Пусть решение вышло в три строки кода, но оно является хорошим примером, на котором можно разобрать как разницу между командой и текстом, так и методы работы со строкой как с массивом. Решение авторское, перепост разрешен только с моего согласия и указания меня как автора.
  9. PROMO_4ka!™

    Смайлы, действия

    Всем привет. Выкладываю замену смайликов на действия. И так, начнем Ко всем new new string[32+MAX_PLAYER_NAME]; new sendername[MAX_PLAYER_NAME]; В public OnPlayerText(playerid, text[]) добавляем if(!strcmp(text,"xD",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s смеётся", sendername); ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,"xDD",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s ржет", sendername); ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0); ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,"xDDD",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s валяется от смеха", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0);//анимация смеха ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,"(",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s грустит", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,"чВ",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s валяется от смеха", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0);//анимация смеха ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,")",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s улыбается", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,":D",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s хохочет во весь голос", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0);//анимация смеха ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } if(!strcmp(text,"xD",true))//команду можно поменять как захочется { GetPlayerName(playerid,sendername,sizeof(sendername)); format(string, sizeof(string), "%s хохочет во весь голос", sendername);// вы можете изменять как вам захочется, тоись %s смеется или как либо ApplyAnimation(playerid, "RAPPING", "Laugh_01", 4.0, 0, 0, 0, 0, 0);//анимация смеха ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); return 0; } На этом все, думая вещь полезна! Автор: Hawkins
  10. Здравствуйте хочу представить вам мою работу.Простенький урок,думаю он пригодиться новичку. И так добавим ко всем forward forward Reklama(); Добавим в public OnGameModeInit() SetTimer("Reklama",90000,1); // Это время,можете заменить на свое. И создаем паблик. public Reklama() { SendClientMessageToAll(0x66ff00AA, "Лучший форум GSGAMES.RU/forum"); SendClientMessageToAll(0x66ff00AA, "Наш сайт GSGAMES.RU"); SendClientMessageToAll(0x66ff00AA, "Ждем вас!"); }
  11. Всем привет. Выкладываю урок по созданию ворот, которые будут открываться по кнопке. Для этого используется функция CreateObject Я для примера возьму ворота в Доках: CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Закрытые ворота CreateObject(969, 2720.3772,-2508.3069,12.6,0, 0.0000, 90);//Открытые ворота После этого вам нужно создать переменную., которая будет хранить в себе порядковый ID ворот. Ко всем new new gate1; Теперь создадим объект ворот на сервере В public OnGameModeInit засуньте строчку с функцией CreateObject gate1 = CreateObject(ид_объекта, x,y,z, поворот_x, поворот_y, поворот_z);// Укажите ваши данные о ЗАКРЫТЫХ воротаx Для простого примера я создам ворота в доках (координаты открытых и закрытых ворот смотрите выше) public OnGameModeInit() { gate1 = CreateObject(969, 2720.3772,-2409.7523,12.6,0, 0.0000, 90);//Если у вас есть этот public то просто вставте эту строчку с созданием объекта return 1; } Ворота созданы, но теперь их надо заставить двигаться в public OnPlayerCommandText if(!strcmp(cmdtext, "/opengate", true)) { if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот { MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически } } Теперь создадим public чтоб ворота закрылись самостоятельно Ко всем foward forward CloseGate1(); В конец мода public CloseGate1() { MoveDynamicObject(gate1, 2720.3772,-2409.7523,12.6, 2.0);//Двигаем ворота на позицию закрытых ворот return 1; } Ворота созданы и вы теперь можете их открыть командой /opengate Теперь делаем открытие ворот кнопкой. В public OnPlayerKeyStateChange if(newkeys & KEY_WALK) // На кнопку АЛЬТ (alt) { if(IsPlayerInRangeOfPoint(playerid, 10, 2720.3772,-2409.7523,12.6))// Укажите координаты закрытых ворот, 10 - это радиус, где будет действовать открытие ворот { MoveDynamicObject(gate1,2720.3772, -2401.2523, 12.6, 2.0);//Двигаем ворота на позицию открытых ворот SetTimer("CloseGate1", 7000, false);//Создадим таймер что ворота закрылись автоматически } } На этом урок окончен. Всем спасибо за внимание! Помогал мне (автор): valuch
  12. Многие сталкивались с такой проблемой , что при создании модов с 0 у игроков в табе , в чате или на карте обозначаются ники разными цветами Решением этого , мне помогла одна унылая строчка :) В OnPlayerSpawn добавляем SetPlayerColor(playerid, 0xFFFFFFFF); //белый цвет , можно изменить на свой при желании :) Можно так-же это добавить в OnPlayerConnect , чтобы при коннекте не было цветных ников игроков в TAB'е Думаю многим это не помешает , многие это знали , но многие и нет :)
  13. Для того , чтобы "РП" чат работал , нам потребуется: Руки и паблик "OnPlayerText" В OnPlayerText вставляем следующее: new string[256]; new sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof string,"%s говорит: %s",sendername,text); new Float:xpos,Float:ypos,Float:zpos; GetPlayerPos(playerid,xpos,ypos,zpos); for(new i=0;i<MAX_PLAYERS;i++){ if(IsPlayerInRangeOfPoint(i,35,xpos,ypos,zpos)) SendClientMessage(i,0xFFFFFFFF,string); //на расстоянии "35" ваш текст будет видно , а также отсылаемые сообщения белого цвета return false;
  14. Komaroff 71

    Пулемёт на танке

    Добрый вечер,господа. Как-то раз видел вопрос,связанный с аттачем рабочего минигана к танку(или БТР,но не суть) Вот пример такого готового решения: В начале мода добавим: #define MAX_MINIGUNS 10 //количество танков #undef MAX_PLAYERS #define MAX_PLAYERS 100 //кол-во слотов new mgun[MAX_MINIGUNS] ,minigunnum = 0 ,vehhasminigun[MAX_VEHICLES] ,laser[MAX_PLAYERS]; #define PUB:%1(%2) forward %1(%2); public %1(%2) После этого добавим функцию в любое место(удобней в конец мода): GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance) { new Float:a; GetPlayerPos(playerid, x, y, a); GetPlayerFacingAngle(playerid, a); if (GetPlayerVehicleID(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), a); } x += (distance * floatsin(-a, degrees)); y += (distance * floatcos(-a, degrees)); } В public OnGameModeInit(): for(new i = 0; i < MAX_VEHICLES; ++i) vehhasminigun[i] = 0; SetTimer("check", 5000, 1); SetTimer("loop", 500, 1); Теперь в конце мода создадим ещё несколько функций: PUB:check( ) { for( new i = 0; i < MAX_VEHICLES; ++i ) { new model = GetVehicleModel( i ); if( model == 432 ) { if( vehhasminigun[ i ] == 0 ) { vehhasminigun[ i ] = 1; mgun[ minigunnum ] = CreateObject( 2985, 0, 0, 0, 0, 0, 0 ); AttachObjectToVehicle( mgun[ minigunnum ], i, 0.74, 3.37, -0.25, 0.00, 0.00, 89.47 ); minigunnum ++; } } } return 1; } PUB:loop( ) { for( new i = 0; i < MAX_PLAYERS; ++i ) { if( IsPlayerConnected( i ) ) { new vehicleid = GetPlayerVehicleID( i ); new model = GetVehicleModel( vehicleid ); if( model == 432 ) { new keys ,ud ,lr; GetPlayerKeys( i, keys, ud, lr ); if( keys & 128 ) { SetPlayerAttachedObject( i, 0, 18695, 1, 0.379999, 1.799999, -2.700000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000 ); laser[ i ] = CreateObject( 19084, 0.75, 3.84, 0.86, 0.00, 0.00, 92.61 ); AttachObjectToVehicle( laser[ i ], vehicleid, 0.73, 4.18, 0.86, 0.00, 0.00, 88.03 ); PlayerPlaySound( i, 1135, 0.0, 0.0, 0.0 ); SetTimerEx( "destroy", 250, 0, "i", i ); new Float:x ,Float:y ,Float:z ,Float:x2 ,Float:y2; GetPlayerPos( i, x2, y2, z ); #pragma unused x2 #pragma unused y2 GetXYInFrontOfPlayer(i, x, y, 5.0); for( new u = 0; u < MAX_PLAYERS; ++u) { if( IsPlayerInRangeOfPoint(u, 6.0, x, y, z ) && u != i) { new Float:hp; GetPlayerHealth( u, hp ); SetPlayerHealth( u, hp - 5 ); PlayerPlaySound( u, 1135, 0.0, 0.0, 0.0 ); if( hp < 1 ) CallLocalFunction( "OnPlayerDeath", "ddd", u, i, 38 ); } } } } } } return 1; } PUB:destroy(i) { RemovePlayerAttachedObject( i, 0 ); DestroyObject( laser[ i ] ); return 1; }
  15. Здраствуйте уважаемые пользователи gs-games. К вашему вниманию представляю Volkswagen Passat Модель красится. Есть повреждения Замена: sentinel В SAMP\CRMP не лагает. Автор : неизвестен (кто знает скажите, исправлю) Есть небольшой косяк с багажником, но он легко исправим!
  16. Здравствуйте Уважаемые Пользователи GSG!Я хочу предложить одну команду(на мой взгляд полезную) Что же она делает?! -Вы вводите команду(/ваша кмд замените на свою кмд),вводите команду и рядом координаты! И вас автоматически тпхает на те координаты.Может кому пригодится. Вот сама кмд! if(strcmp(cmd, "/ваша кмд", true) == 0) { new PosX[255]; new PosY[255]; new PosZ[255]; PosX = strtok(cmdtext, idx); PosY = strtok(cmdtext, idx); PosZ = strtok(cmdtext, idx); if(!strlen(PosX)) { SendClientMessage(playerid,COLOR_WHITE," Не ввел X координату. Использование: /tpme X Y Z"); return 1; } if(!strlen(PosY)) { SendClientMessage(playerid,COLOR_WHITE," Не ввел Y координату. Использование: /tpme X Y Z"); return 1; } if(!strlen(PosZ)) { SendClientMessage(playerid,COLOR_WHITE," Не ввел Z координату. Использование: /tpme X Y Z"); return 1; } SetPlayerPos(playerid,strval(PosX),strval(PosY),strval(PosZ)); return 1; }
  17. Здраствуйте уважаемые пользователи gs-games. К вашему вниманию представляю Лада Приора Автор стока: Иван Караев Автор Переделки: Александр Кобзев Переделка разрешена, указывайте авторов при изменении авто! Замена: premier В SAMP\CRMP не лагает. Хоть я и не любитель "тазов", но мод мне понравился. Очень хорошо идет с enb модом!
  18. Ryslik42

    Анти-Мат

    Доброго времени суток уважаемые пользователи форума. Представляю вам скрипт "Анти-Мат" Суть скрипта скрывать нецензурные слова. Автор: BRICS Для того чтобы работал скрипт нужно создать файл BadWords.cfg, в него записываем слова которые вы не хотите видеть. Файл ExeptionWords.cfg используется для слов исключений. ЯндексДиск Если ссылка нерабочая, напишите в ЛС исправлю.
  19. При вводе этой команды, на вашем плече появится попугай) Ко всем new добавим: new popugay[MAX_PLAYERS]; В OnPlayerCommandText: if(strcmp(cmd, "/попугай", true) == 0) { tmp = strtok(cmdtext,idx); giveplayerid = ReturnUser(tmp); if(!strlen(tmp) && PlayerInfo[playerid][pAdmin] > 1) return SendClientMessage(playerid,COLOR_WHITE,"Информация: /попугай [ид]"); giveplayerid = ReturnUser(tmp); if(popugay[giveplayerid] == 0) { SetPlayerAttachedObject(giveplayerid, 7, 19078, 1, 0.329150, -0.072101, 0.156082, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000 ); SendClientMessage(giveplayerid,COLOR_LIGHTBLUE,"[Сервер]: Держи попугайчика!"); popugay[giveplayerid] = 1; } else { RemovePlayerAttachedObject(giveplayerid, 7); DestroyPlayerObject(giveplayerid, 19078); SendClientMessage(giveplayerid,COLOR_LIGHTBLUE,"[Сервер]: Отдай мне!"); popugay[giveplayerid] = 0; } return 1; } Вот и все, может кто-то возьмёт себе :)
  20. Здравствуйте уважаемые пользователи форума. Хотел бы предоставить вам спидометр который я делал для мода Gamer. Вроде простенький, не знал что можно туда добавить и сделал такой. Кому нужно будет можете брать для себя.
  21. Пока самая кач-венная что есть в сети! Ваз 2190 Гранта (исправлены лок оси) Автор авто:Вадим Гусаров Автор первой доработки : Серажутдин Олимов Автор финальной доработки :Константин Плотников Особенности -3д дно -Нормальная подкрылка -Подкрыльники -Правильно протекстуренные фары вечилайтом -Правильно протекстуренные фары (задние) -Брызговики -Штамповка R15 -Сглаженный двигатель Исправлено много багов
  22. Dsplay

    BMW X5

    BMW X5 Автор : неизвестен Автор дороботки : Игорь Бабиков. Хорошая модель,заменяет landstal.
  23. Здравствуйте, я часто сталкивался с тем, что люди спрашивают как заменить "Server Unknown Command" на свой текст, решение довольно простое: 1) Ищем у себя в моде public OnPlayerCommandText 2) И туда в самый низ паблика, ставим вместо return 0; вот это: return SendClientMessage(playerid,-1,"Такой команды нет!"); Может кому нибудь понадобится, взято с форумов.
  24. Здравствуйте, ув.пользователи. Сегодня хотелось бы разобрать способ защиты от накрутки денег на Вашем игровом сервере. Теория: Как вы знаете, функция GivePlayerMoney существует для выдачи определенного количества денег. Разберем ее работу подробнее. Данная функция добавляет/отнимает числа от самого текстдрава денег. А функция же GetPlayerMoney возвращает данное значение. Исход из этого: байты могут быть заменены при помощи обычных программ, таких как ArtMoney и т.п. Что с этим можно сделать? Заменить байт на ПК пользователя труда не составит, а вот изменить переменную в процессе на сервере (удаленно) практически нереально. Я думаю, понятно, к чему я клоню. Практика: Создадим массив, который будет хранить кол-во денег отдельно для каждого игрока: new realmoney[MAX_PLAYERS]; Далее создадим функцию, по которой значение из GetPlayerMoney будет сверяться с переменной realmoney. В случае несоответствия - обнуление и кик: stock GiveMoneyAntiCheat(playerid, money) { if(GetPlayerMoney(playerid) > realmoney[playerid])//сверяем данные { //если чит, то: ResetPlayerMoney(playerid);// обнуляем GivePlayerMoney(playerid, realmoney[playerid]);//возвращаем SendClientMessage(playerid, 0xBBBBBBAA, "Вы были кикнуты за попытку накрутки денег."); Kick(playerid);//кикаем return 1; } else { //иначе выдаем все по стандарту: GivePlayerMoney(playerid, money); realmoney[playerid] = GetPlayerMoney(playerid); } return 1; } При дисконнекте игрока проверим деньги. Для этого в OnPlayerDisconnect достаточно поставить проверку и вызвать функцию: if(GetPlayerMoney(playerid) > realmoney[playerid]) { GiveMoneyAntiCheat(playerid, PlayerInfo[playerid][pMoney]); } Естественно, теперь все GivePlayerMoney нужно заменить на GiveMoneyAntiCheat. Спасибо.
  25. 1. Для начала создадим диалоги. В Public OnDialogResponse: if(dialogid==5100) { if(response==1) { if(listitem == 0)// { SetPlayerSkin(playerid,280);// 280 ид рабочего скина SendClientMessage(playerid,COLOR_GREY,"Вы переоделись в рабочую одежду"); skrit[playerid] = 1; } else if(listitem == 1)//Гражданский { new rando = random(2); if(PlayerInfo[playerid][pSex] == 1)//Если пэд. мужчина то скины 185 170 46 { if(rando == 0) { SetPlayerSkin(playerid,185); } else if(rando == 1) { SetPlayerSkin(playerid,170); } else if(rando == 2) { SetPlayerSkin(playerid,46); } } else if(PlayerInfo[playerid][pSex] == 2)//Если пэд. женщина то скины 12 233 211 { if(rando == 0) { SetPlayerSkin(playerid,12); } else if(rando == 1) { SetPlayerSkin(playerid,233); } else if(rando == 2) { SetPlayerSkin(playerid,211); } } SendClientMessage(playerid,COLOR_GREY,"Вы оделись в Гражданку"); skrit[playerid] = 4; } else if(listitem == 4)//Номер строчки в файле с аккаунтом в которой указывается ид скина пэда { SetPlayerSkin(playerid,PlayerInfo[playerid][pChar]); SendClientMessage(playerid,COLOR_GREY,"Вы вернули себе свою одежду"); skrit[playerid] = 0; } } } 2. Далее нужно создать комманду которая будет вызывать наш диалог. В Public OnPlayerCommandText: if(strcmp(cmd, "/razdevpolic", true) == 0)// Комманду можете поменять на свою. Фантазии не хватило сократить) { if(PlayerToPoint(7.0,playerid,1554.4327,-1679.6113,6.2188,276.4227))//Координаты на которых будет работать комманда (если отойти от неё комманда не заработает) { if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1)//Здесь указывается какая фракция может использовать комманду { ShowPlayerDialog(playerid,5100,DIALOG_STYLE_LIST,"Одежда","Полиция\nГражданский\nВернуть свой","Ок","Отмена"); } } else { SendClientMessage(playerid,COLOR_GREY, "Вы не в раздевалке"); } return 1; } 3. Ну и создадим 3dText (если хотите можете сделать через пикап). Ко всем 3DText-ам: Create3DTextLabel(" Раздевалка: /razdevpolic ",0xFFFFFFFF,1554.4327,-1679.6113,6.2188,276.4227); AddStaticPickup(1242, 24, 1554.4327,-1679.6113,6.2188,276.4227); //пикапчик в виде броника Автор : HuKuTJKeEe
×

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

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