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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

Найдено: 2,041 результат

  1. Всем привет Вот вырезал из своего мода, может кому надо. Варны можно снять обычной /unwarn if(strcmp(cmd, "/awarn", true) == 0) { if (PlayerInfo[playerid][pAdmin] >= 7) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /awarn [id] [причина]"); if (dostup[playerid] != 1) return ShowPlayerDialog(playerid,2934,DIALOG_STYLE_INPUT,"Доступ администратора","Введите пароль от административной панели","Ок","Отмена"); giveplayerid = ReturnUser(tmp); if (PlayerInfo[playerid][pAdmin] >= 7) { if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /awarn [id] [причина]"); PlayerInfo[giveplayerid][pWarns] += 1; PlayerInfo[giveplayerid][pAdmin] -=1; if(PlayerInfo[giveplayerid][pWarns] >= 3) { new ip[256]; new year, month,day; getdate(year, month, day); format(string, sizeof(string), "{ff4f30}Администратор %s был снят с администрирования админом %s [%d/3] предупреждений.", giveplayer,sendername,PlayerInfo[giveplayerid][pWarns]); SendClientMessageToAll(COLOR_LIGHTRED, string); format(string, sizeof(string), "Вы были сняты с должности администратора!"); SendClientMessage(giveplayerid, COLOR_LIGHTRED, string); GetPlayerIp(giveplayerid,ip,sizeof(ip)); PlayerInfo[giveplayerid][pAdmin] = 0; PlayerInfo[giveplayerid][pHelper] = 0; format(string, sizeof(string), "- Ник: [%s] IP: [%s]",giveplayer,ip); ABroadCast(COLOR_LIGHTRED,string,1); return 1; } format(string, sizeof(string), "{ff4f30}Администратор %s получил предупреждение от %s [%d/3]. Причина: %s", giveplayer,sendername,PlayerInfo[giveplayerid][pWarns], (result)); SendClientMessageToAll(COLOR_LIGHTRED,string); format(string, sizeof(string), "Внимание! Вы получили предупреждение! После 3-х предупреждений вы будете сняты с должности!"); SendClientMessage(giveplayerid, COLOR_LIGHTRED, string); return 1; } } } else { SendClientMessage(playerid, COLOR_GREY, "[Ошибка] Игрок не найден!"); } } return 1; } Значения: if (PlayerInfo[playerid][pAdmin] >= 7) 7 - Уровень администрирования, с которого можно выдавать предупреждение ------------------------------------------------------------------------------------------------------------ PlayerInfo[giveplayerid][pAdmin] -=1; -=1 - На сколько раз уровень администрирования понизится при предупреждении -------------------------------------------------------------------------------------------------------------- PlayerInfo[giveplayerid][pAdmin] = 0; 0 - Уровень администрирования после максимального количества предупреждений Думаю, разберетесь, т.к. я все подробно расписал. Если будут ошибки при компилировании или что то еще, пишите в тему, постараюсь ответить всем.
  2. Здравствуйте уважаемые пользователи Gs-Games. Сегодня я расскажу вам как создать пикап с бонусом. Начнем. 1. Сначала откроем наш мод. 2. Переходим в переменные new. И создадим там новою переменную. new FFF; 3. Далее перейдем в public OnGameModeInit И вставим туда. FFF = CreatePickup(ID пикапа,тип пикапа,X,Y,Z, ID виртуального мира пикапа);// Координаты X,Y,Z сменить на свои. Теперь когда мы создали пикап, наша задача сделать так, чтобы когда мы наступили на этот пикап нам выдавался бонус. 4. Идем далее в OnPlayerPickUpPickup Добавим следующее if(pickupid == FFF) // Это наше название пикапа, то есть когда мы записывали в переменной FFF значит и название будет FFF. { if(PlayerInfo[playerid][pLevel] >= 3) // Это проверка на то что-бы игрок не получил бонус два раза. { SendClientMessage(playerid, COLOR_PURPLE, "Этот бонус только для новичков 1 лвл."); return 1; } SendClientMessage(playerid,0xFFFF00AA,"Вы получили свой бонус!"); SendClientMessage(playerid, COLOR_WHITE, "2.000.000Р."); SendClientMessage(playerid, COLOR_WHITE, "3 LVL."); SendClientMessage(playerid, COLOR_WHITE, "Все лицензии."); PlayerInfo[playerid][pLevel] = 3; // Где 3 это уровень, если хотите уровень больше или меньше меняйте 3 на ваш уровень. GivePlayerMoney(playerid, 2000000); // 3000000 - это количество денег, которое выдаст вам. PlayerInfo[playerid][pCarLic] = 1; // Лицензия на вождение. PlayerInfo[playerid][pFlyLic] = 1; // Лицензия на воздушный транспорт. PlayerInfo[playerid][pMotoLic] = 1; // Лицензия на мотовождения. PlayerInfo[playerid][pBoatLic] = 1; // Лицензия на водное вождение. PlayerInfo[playerid][pGunLic] = 1; // Лицензия на оружие. } Ну все не чего сложного. Наш урок на этом заканчивается. Спасибо за внимание.
  3. Доброго времени суток. Для собственных нужд необходима была отправка в чат сообщений длиной более 128 символов, без обрыва строки на середине и с корректным переносом. Имеющиеся реализации не устроили - перенос был оформлен не совсем корректно, да и выглядеть будет некошерно. Реализовал собственное решение, полностью совместимое с синтаксисом стандартных SendClientMessage/SendClientMessageToAll. forward SendClientMessageEx (playerid, color, const message[]); forward SendClientMessageToAllEx (color, const message[]); public SendClientMessageEx (playerid, color, const message[]) { new length = strlen(message); new outstr[128]; new trim; if (length > 127) { for (new i = 127; i>=0; i--) { trim = i; if (message[i] == ' ') break; } if (trim < 64) trim = 127; strmid (outstr, message, 0, trim, 128); SendClientMessage (playerid, color, outstr); strmid (outstr, message, trim, length, 128); SendClientMessage (playerid, color, outstr); } else SendClientMessage (playerid, color, message); return 1; } public SendClientMessageToAllEx (color, const message[]) { new length = strlen(message); new outstr[128]; new trim; if (length > 127) { for (new i = 127; i>=0; i--) { trim = i; if (message[i] == ' ') break; } if (trim < 64) trim = 127; strmid (outstr, message, 0, trim, 128); SendClientMessageToAll (color, outstr); strmid (outstr, message, trim, length, 128); SendClientMessageToAll (color, outstr); } else SendClientMessageToAll (color, message); return 1; }Для наглядности - скриншот. Не стоит обращать внимания на то, что он снят на адаптации мультиплеера - функции будут корректно работать, даже если использовать 0.3a-ветку SA:MP.
  4. Вы используйте команду /canal [1-10000] для выбора нужной вам частоты. После выбора частоты вы автоматический подключаетесь к выбранному вами каналу и можете активно вести общение с помощью команды /rс [текст]. Также другой или иной игрок может подключиться к вашей частоте. Ко всем forward: forward SendRcanalMessage(canal, color, string[]); Ко всем new: new Rcanal[MAX_PLAYERS]; В public OnPlayerConnect добавляем: Rcanal[playerid] = 0; В конец мода: public SendRcanalMessage(canal, color, string[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(Rcanal[i] == canal) { SendClientMessage(i, color, string); } } } }В public OnPlayerCommandText добавляем команды:if(strcmp(cmd, "/rс", true) == 0) { if(!IsPlayerConnected(playerid)) return 1; if(PlayerInfo[playerid][pMuted] == 1) return SendClientMessage(playerid, -1, "Вы не можете писать, у вас молчанка"); if(Rcanal[playerid] < 1) return SendClientMessage(playerid, -1, "Вы не на частоте. Подключитесь, используя /canal (номер канала от 0 по 10000)"); GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, -1, "Используйте: /rc [текст]"); format(string, sizeof(string), "(%d) %s: %s", Rcanal[playerid], sendername, result); SendRcanalMessage(Rcanal[playerid], TEAM_CYAN_COLOR, string); return 1; } if(strcmp(cmd, "/canal", true) == 0) { if(!IsPlayerConnected(playerid)) return 1; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Используйте: /canal [номер канала[(1-10000)]"); new canal; canal = strval(tmp); if(canal > 10000|| canal < 1) return SendClientMessage(playerid, -1, "Номер канала от 1 по 10000!"); Rcanal[playerid] = canal; format(string, sizeof(string), "Вы подключились к частоте номер %d", canal); SendClientMessage(playerid, COLOR_LIGHTBLUE,string); } Автор: NOD32
  5. jaD^

    Интерьер военкомата [Connected RP]

    Собственно слив интерьеров с CRP. Интерьеры делал я, не все стоят, но теперь и не будут.
  6. arsenvk2000

    Anti Doss

    В этой версии: - Анти PizDos Bot - Анти DedaVanya - Анти CaypDos - Анти RakSamp - Анти FakeKill - Анти Test1 - Анти Lagger - Анти Pinger - Анти Краш (Если вас крашунли то вас кикнет и вы отвисните) - Анти Флуд в чат (Баг исправлен) - Анти Флуд OnPlayerClick (Таймер флуда в 30 секунд) - Анти Флуд SendMessageClient - Анти Флуд смены мест - Автоматическая очистка чата через каждые 16 минут - Автоматический рестарт сервера в 4:00 (По МСК) - Анти Краш тюнингом - Анти Краш %s в диалог. (На всякий случай) - Анти Краш посадка игрока на 5 место в машине - Анти Флуд Connect СКРИПТ не мой! Автор представил себя по имени Ildar Вообще анти-досс толковый и действующий 100%.Проверено. Ссылка на скачивание:http://rghost.ru/52186130 Пароль для скачивания: GSG
  7. Доброго времени суток. Когда-то этот тутор здесь был, но время его не пощадило. В сегодняшнем уроке предлагаю немного разобрать сразу две темы - использование директив препроцессора (а конкретно - макросов) и использование таймеров. Ну и, конечно, не на абстрактном примере, а сразу в написании чего-либо полезного. Например - для запрета DM в определенных зонах. Начнем с директив препроцессора. Собственно, препроцессор - служебный программный инструмент, осуществляющий конвертацию кода программы в промежуточный для последующей компиляции в бинарный файл. Директива препроцессора - строка в исходном коде вида #КлючевоеСловоПрепроцессора, определяющая дальнейшее поведение препроцессора и использование им неких служебных функций. Макрос (#define) - определенная директива препроцессора, позволяющая при компиляции кода использовать замену исходного выражения на некоторое другое. Это крайне удобно, когда необходимо часто использовать какое-либо достаточно объемное выражение, но нет желания оборачивать его в отдельную функцию. Яркий пример - нахождение большего из двух чисел: #define max(a,b) ((a) > (b) ? (a) : (b))Перейдем к таймерам.AMX-машина может вызывать определенные функции в объявленные программистом периоды времени. Какой из функций языка Pawn будет вызван такой таймер - зависит уже от функции: Если вызываемая функция не имеет параметров - используется функция SetTimer: SetTimer (funcname[], interval, bool:repeating)Где funcname - имя вызываемой функции, interval - время следующего запуска функции в миллисекундах, repeating - повторять ли запуск функции или нет. Если вызываемая функция имеет параметры - используется функция SetTimerEx: SetTimerEx (funcname[], interval, repeating, const format[], {Float,_}:...)Первые три параметра - аналогичны SetTimer. Далее идет строка, в которой задаются типы передаваемых переменных, после нее - все необходимые для передачи вызываемой функции параметры. Обе эти функции возвращают целочисленный ID созданного таймера. Прибить такой таймер можно вызовом функции KillTimer. Наверное, на этом с теорией можно покончить и перейти к практике. Итак, поставим перед собой задачу: написать скрипт, отслеживающий нажатие игроком определенных кнопок, если он находится в определенной зоне. Если игрок в зоне и нажимает на эти кнопки - увеличить счетчик на единицу, если счетчик больше двух и четырех - вывести определенные сообщения, если больше пяти - закрыть соединение. Подключим библиотеку a_samp, более нам ничего не нужно. И сразу же объявим следующий макрос: #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))Данный макрос помогает обернуть достаточно длинное выражение, которое, по сути, означает лишь одно - проверку на нажатие кнопки. Если будет необходимо, в следующих уроках я могу разобрать, как работает обработчик нажатия клавиш OnPlayerKeyStateChange. Далее - объявим необходимые для работы переменные. Во-первых - отдельную структуру для хранения зон, состоящую из четырех чисел с плавающей точкой - трех координат и радиуса зоны. Также нужны массивы для счетчика нажатий и для всех зон. new DM_Counter[MAX_PLAYERS]; enum DM_Checker { Float:X, Float:Y, Float:Z, Float:Radius } new NoDM_Zones[][DM_Checker] = { {2549.0840,-2204.8350,21.9583,45.0},// 8 БИТ {175.3027,784.5325,12.0010,27.0},//Перекрёсток {2130.7192,-2182.4277,21.9545,40.0},//Автошкола Южный {2745.0464,-2294.7100,17.6124,40.0},//ШтрафСтоянка {1908.3670654297,-2233.1806640625,10.894914627075,45.0},//Мэрия {2343.427734375,-1809.4577636719,22.09578704834,60.0},//АвтоСалон {2509.3679199219,-2126.5373535156,23.105073928833,20.0}//Респаун новичков };Координаты и радиусы приведены для примера. Во время старта скрипта нам нужно запустить таймер сброса счетчика. Для этого необходима отдельная функция, которая будет доступна из любого места вызова, то есть - с публичным доступом, или public. Ее и объявим. Алгоритм простой - пробег по всему массиву DM_Counter, если в ячейке массива не ноль - обнулить. forward DM_Counter_reset(); public DM_Counter_reset () { for (new i=0; i<MAX_PLAYERS; i++) { if (DM_Counter[i]!=0) SendClientMessage (i, 0x00FF0000, "Счётчик попыток DM сброшен."); DM_Counter[i]=0; } }Важно поднять прототип функции (forward DM_Counter_reset) выше места вызова самой функции и других функций, из которых она может быть вызвана.Запускаем таймер при старте бинарника (для примера - OnFilterScriptInit) public OnFilterScriptInit () { SetTimer("DM_Counter_reset", 10*1000, true); return 1; }Очень важно очистить данные перед подключением игрока. Не забудем это сделать в OnPlayerConnect. public OnPlayerConnect(playerid) { DM_Counter[playerid]=0; return 1; }Подготовка завершена. Отслеживание нажатия кнопок проходит в автовызываемой функции (коллбэке) OnPlayerKeyStateChange. Его мы и будем рассматривать. Для начала - переберем все возможные условия, которые нам нужны. Это: Нажатие ЛКМ (KEY_FIRE); Нажатие ЛКМ вместе с ПКМ (KEY_FIRE | KEY_HANDBRAKE); Нажатие ПКМ и F (KEY_SECONDARY_ATTACK | KEY_HANDBRAKE). Если такие клавиши нажаты - проверяем все зоны на присутствие в них игрока. Сделаем это с помощью IsPlayerInRangeOfPoint и пробежим циклом по всем зонам. Если игрок в зоне - завершаем цикл, увеличиваем счетчик предупреждений на единицу. Больше пяти? Закрываем соединение. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(PRESSED (KEY_FIRE) || PRESSED (KEY_FIRE | KEY_HANDBRAKE) || PRESSED (KEY_SECONDARY_ATTACK | KEY_HANDBRAKE)) { for(new i=0;i<sizeof(NoDM_Zones);i++) { if(IsPlayerInRangeOfPoint(playerid,NoDM_Zones[i][Radius],NoDM_Zones[i][X],NoDM_Zones[i][Y],NoDM_Zones[i][Z])) { if (DM_Counter[playerid] == 5) { new name[MAX_PLAYER_NAME], string[64+MAX_PLAYER_NAME]; GetPlayerName(playerid, name, sizeof(name)); format(string, sizeof(string), "Игрок %s был кикнут сервером. Причина: DM в зеленой зоне", name); SendClientMessageToAll(0xAA3333FF, string); Kick (playerid); } else { DM_Counter[playerid] = DM_Counter[playerid]+1; if (DM_Counter[playerid]>=2) SendClientMessage (playerid, 0xFFFF0000, "DM в зеленой зоне запрещен!"); if (DM_Counter[playerid]>=4) SendClientMessage (playerid, 0xFFFF0000, "При дальнейших попытках DM Вы будете наказаны."); } } } } return 1; } <
  8. #Pawno

    Salute

    Доброго времени суток уважемые форумчани. Я хотел бы выложить скрипт Салютов , данный скрипт я переделал из исходников. Что сделано: Скрипт полностью на русском. Скрипт в данной версий пока на Rcon доступе. При запуске салютов будет лететь верх похожие на салют фонарики. При создание заряда появляется коробка похожая с салютами. Создание объектов и удаление на динамике. Скрипт использует такие инклуды как: Sscafan streamer dcmd Версия скрипта 1.0 , в ближайшие дни сделаю 1.1 версию. Если у вас есть пожелание что то в этот фс добавить пишите . Чтоб просмотреть команды fs: /fwhelp
  9. Frozen Man

    Fancy RP из SA:MP

    Уважаемые жители игрового портала "GSG" представляю вам новый игровой мод Fancy-rp.ru. Мод разрабатывался долгое время, переводился из SA:MP переведены все фракции, есть места где крашит думаю вы сами исправите. Есть автомастерская в Gopкар там вы можете затюининговать авто, бизнес АЗС можно создать из игры, так-же дома/авто передвигаются. Есть ферма полностью функционирует, если вы желаете можете перевести грибы до конца.Не забудьте поставить streamer. Я буду очень рад если кто-то продолжит данный проект, просьба название не брать так как оно принадлежит нам по праву. У проекта был форум fancy-rp.ru но форум закрыт так как теперь у нас проект под названием "Connected RolePlay" ============================================================================== Спсисок организаций:Полиция УВД Южного ФБР Авианосец МЧС LCN Yakuza Мэрия Байкеры SF News Полиция УВД Батырёва Инструкторы Гопники The Vagos Русская мафия Солнцевская LS News The Aztecas Вандалы Армия: Зона 51 LV News Полиция УВД Арзамас МЧС Лос Сантос P.S Названия меняйте сами. ============================================================================== Переводили мод: Maxim_Plotnikov/Gerasimov Maxim_Yakovskiy Fancy RP из SAMP.zip
  10. tatarin032000

    Интерьер для дома.

    Специально для паблика сделал интерьр. Думаю вам понравиться! Так-же координаты у двери: X - 2202.0002 Y - 2323.4146 Z - 20.9200
  11. Aleksey_Dolgov

    Падающий снег.

    Здраствуйте уважаемые пользователи Gs-Games. К вашему вниманию. Были скрипты Падающего снега. Но выглядело не очень. Я Сделал другой выход. Чтобы добавить снег в мод, нужно В public OnGameModeInit добавить: for(new x=-3000; x < 3000; x+=100) for(new y=-3000; y < 3000; y+=100) CreateDynamicObject(18864, x, y, 0.0, 0.0, 0.0, 0.0); Спасибо за внимание.
  12. tatarin032000

    Inspiring Game RolePlay

    Предоставляю вам игровой мод "Inspiring Game RolePlay"! Не плохой мод,когда-то давно делал его.Онлайн нас сколько я помню +10-15 Всем все нравилось,думаю и вам понравиться! Все что есть в этом моде,увы не помню. Моя переделка: Tommy_Vercetty. Подробности в скайп: tatarin032000 Основа: Gamer,только сдерживайтесь,не надо писать "Фу,фу"и так потом,не нужно оффтопа. Прошу если не нравиться - проигнорируйте! Не большое описание Все действия происходят в Арзамасе,а так-же немного в Лыткарино,Эдово. Все фракции были переделаны,мафии сделаны во дворах с интерьером. Система рыбалки,то есть в 3-ех местах есть место для ловли рыбы,то есть пирс.Ловите рыбы,далее сдаете их и получаете свои деньги. Настроен GPS все координаты верны,так-же можно найти в нем пирс и так далее. Система авторизации была срезана с "Soft Rp" и немного переделана,а так-же красивые ТД спидометра. Сохраняющий тюнинг в Эдово,специальный гараж въезд командой. Несколько коперативов гаражей думаю понравиться. Не плохой маппинг. Динамическая система бизнеса,а так-же к ним отличные интерьеры.
  13. Nikits

    Пост и трасса к мосту

    Прошу строго не судить, это моя одна из первых работ.
  14. Здравствуйте ув. пользователи сайта gs-games , сегодня я вам расскажу о оптимизации игровых модов. Посмотрим как будет выгледеть обычная команда: if(strcmp(cmd,"/tskill",true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pTskill] > 1000){ PlayerInfo[playerid][pTskill] = 1000; } if(PlayerInfo[playerid][pTskill] < 0){ PlayerInfo[playerid][pTskill] = 0; } format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); SendClientMessage(playerid,COLOR_BLUE,string); return 1; } return 1; } Теперь посмотрите команду более оптимизированую: CMD:tskill(playerid, params[]) { if(!IsPlayerConnected(playerid)) return true; if(PlayerInfo[playerid][pTskill]>999) return PlayerInfo[playerid][pTskill]=1000; if(PlayerInfo[playerid][pTskill]<0) return PlayerInfo[playerid][pTskill]=0; format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); SendClientMessage(playerid,COLOR_BLUE,string); return true; } 1) Комманды станут короче и более оптимизированы. Диалоги: Диалог до оптимизации: if(dialogid == 99) { olololo=1; } if(dialogid == 88) { olololo=2; } После switch(dialogid) { case 99: olololo=1; case 88: olololo=2; return true; } Чем же это оптимизирует? А тем, что при сравнении сервер тоже использует память, и в итоге если этих диалогов будет не 2 как в примере, а 20000. То при поиске диалога сервер просто-напросто повиснет, а в случае со свичем он просто ищет диалог. То-есть он не проверяет каждую возможность, а просто берет число и ищет кейс с ним. На этом наш урок закончен Автор урока : [Ega29]
  15. TrollFace

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

    Идея моя понятна из самого названия темы. Все мы знаем, что по стандарту ручник - пробел. Так почему бы не сделать более высокий уровень РП при помощи обычного ProxDetectors ??? В коде - абсолютный минимум. На деле - довольно хорошая вещь. Приступим. Все знают, что за нажатие клавиш отвечает автовызываемая OnPlayerKeyStateChange Хорошо... А что с клавишей? Довольно просто. Ид пробела - 128. Что из этого следует? А следующий кусок кода: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[35], name[24]; GetPlayerName(playerid, name, MAX_PLAYER_NAME); if (newkeys == 128 && IsPlayerInVehicle(GetPlayerVehicleID(playerid))) { format(string, sizeof(string), "**%s дернул ручник.",name); ProxDetector(25.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } return 1; } Довольно просто, верно? Однако в то же время как-то повышает уровень РП. Я думаю, многие оценят. У кого нет ProxDetectors - отройте в паблике. P.S. ничего подобного в паблике не лицезрел, однако, опять же таки - все просто.
  16. Добрый День Форумчане... Вот решил выложить интерьер который не понадобился в моем моде... Он хорошо подойдет для Respawna или же Гостиницы... Вообщем смотрим фото: CreateDynamicObject(19450, 2516.09, -2134.89, 10.91, 0.00, 0.00, 0.00); CreateDynamicObject(19450, 2516.09, -2125.29, 10.91, 0.00, 0.00, 0.00); CreateDynamicObject(19450, 2520.79, -2139.73, 10.91, 0.00, 0.00, 90.00); CreateDynamicObject(19450, 2530.29, -2139.72, 10.91, 0.00, 0.00, 90.00); CreateDynamicObject(19450, 2535.11, -2136.44, 10.91, 0.00, 0.00, 0.00); CreateDynamicObject(19450, 2535.17, -2122.50, 10.91, 0.00, 0.00, 0.00); CreateDynamicObject(19450, 2520.97, -2120.59, 10.91, 0.00, 0.00, 90.00); CreateDynamicObject(19450, 2530.57, -2120.59, 10.91, 0.00, 0.00, 90.00); CreateDynamicObject(19378, 2528.53, -2135.27, 9.11, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2518.92, -2135.22, 9.11, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2518.94, -2124.80, 9.11, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2528.52, -2124.82, 9.11, 0.00, -90.00, 90.00); CreateDynamicObject(19377, 2530.27, -2135.39, 12.57, 0.00, -90.00, 90.00); CreateDynamicObject(19377, 2530.29, -2124.91, 12.57, 0.00, -90.00, 90.00); CreateDynamicObject(19377, 2520.58, -2135.35, 12.57, 0.00, -90.00, 90.00); CreateDynamicObject(19377, 2520.75, -2124.89, 12.57, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.34, -2136.65, 9.24, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.34, -2126.17, 9.24, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.65, -2126.07, 9.42, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.66, -2136.52, 9.42, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.89, -2136.50, 9.60, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2529.89, -2126.03, 9.60, 0.00, -90.00, 90.00); CreateDynamicObject(18755, 2537.07, -2129.47, 11.36, 0.00, 0.00, 0.00); CreateDynamicObject(18756, 2537.05, -2129.42, 11.36, 0.00, 0.00, 0.00); CreateDynamicObject(18757, 2537.07, -2129.40, 11.36, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2535.05, -2134.26, 9.50, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2535.04, -2138.31, 9.50, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2535.13, -2126.47, 9.50, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2535.12, -2122.87, 9.50, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2530.87, -2139.66, 9.50, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2525.19, -2139.68, 9.50, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2525.20, -2120.70, 9.50, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2531.09, -2120.68, 9.50, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2521.68, -2120.68, 9.18, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2521.82, -2139.69, 9.18, 0.00, 0.00, 0.00); CreateDynamicObject(1504, 2518.11, -2139.68, 9.18, 0.00, 0.00, 0.00); CreateDynamicObject(19404, 2517.60, -2123.78, 10.91, 0.00, 0.00, -90.00); CreateDynamicObject(19450, 2519.13, -2119.03, 10.91, 0.00, 0.00, 0.00); CreateDynamicObject(19466, 2517.74, -2123.72, 12.01, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2519.20, -2122.78, 9.18, 0.00, 0.00, 90.00); CreateDynamicObject(1504, 2519.08, -2122.80, 9.18, 0.00, 0.00, 90.00); CreateDynamicObject(1749, 2517.57, -2123.19, 9.66, 0.00, 0.00, -90.00); CreateDynamicObject(1744, 2517.56, -2123.11, 10.44, 0.00, 0.00, -90.00); CreateDynamicObject(1742, 2517.57, -2121.90, 9.77, 0.00, 0.00, -90.00); CreateDynamicObject(1746, 2516.67, -2137.51, 9.66, 0.00, 0.00, -180.00); CreateDynamicObject(1746, 2516.71, -2133.82, 9.66, 0.00, 0.00, -180.00); CreateDynamicObject(19174, 2516.19, -2133.78, 11.29, 0.00, 0.00, 90.00); CreateDynamicObject(19175, 2516.15, -2125.59, 11.29, 0.00, 0.00, 90.00); CreateDynamicObject(19173, 2516.20, -2137.65, 11.29, 0.00, 0.00, 90.00); CreateDynamicObject(1536, 2516.16, -2131.24, 9.19, 0.00, 0.00, 90.00); CreateDynamicObject(1536, 2516.12, -2128.30, 9.19, 0.00, 0.00, 270.00); CreateDynamicObject(19378, 2518.92, -2135.22, 9.05, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2518.94, -2124.80, 9.05, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2528.52, -2124.82, 9.08, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2528.53, -2135.27, 9.04, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2539.50, -2125.57, 9.60, 0.00, -90.00, 90.00); CreateDynamicObject(19378, 2539.51, -2136.05, 9.60, 0.00, -90.00, 90.00);
  17. Этот скрипт позволит вам приглашать игрока на дуэль Выбрать оружие и ставку P.S.Координаты меняйте на свои! И так приступаем... Открываем new.pwn удаляем оттуда все и вставляем это: new StartingDuel[MAX_PLAYERS]; new CountDuelTimer[MAX_PLAYERS]; new WeaponDuel = 24; new MoneyDuel = 1000; new bool:DuelPlaceVisit = false; new Float:duelspawn[12][3] = { {-1129.8909,1057.5424,1346.4141}, {-1103.7913,1086.7838,1341.9036}, {-1082.0232,1043.7269,1343.7159}, {-1053.5138,1023.3488,1343.1503}, {-1048.3635,1058.6753,1343.9337}, {-1060.6057,1092.9423,1342.9473}, {-1036.6921,1088.7567,1343.1466}, {-1015.7525,1069.8811,1344.1016}, {-1020.4619,1034.2771,1342.4492}, {-992.12230,1036.9589,1341.8861}, {-973.94290,1061.5148,1345.6714}, {-992.10420,1090.4716,1342.8617} }; forward DuelStarting(playerid); //============================================================================== public OnPlayerConnect(playerid) { PlayerInDuel[playerid] = 0; GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } //============================================================================== public OnPlayerDisconnect(playerid, reason) { KillTimer(CountDuelTimer[playerid]); for(new i=0; i<MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(PlayerInDuel[i] == 1) { PlayerInDuel[i] = 0; DuelPlaceVisit = false; SendClientMessage(i, -1, "Твой противник покинул дуэль!"); OnPlayerSpawn(i); } } } return 1; } //============================================================================== public OnPlayerSpawn(playerid) { return 1; } //============================================================================== public OnPlayerCommandText(playerid, cmdtext[]) { new string[1024], cmd[256], tmp[256], giveplayerid, idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/duel", true) == 0) { if(PlayerInDuel[playerid] == 1) return SendClientMessage(playerid, -1, "Ты уже участвуешь в дуэли."); if(DuelPlaceVisit) return SendClientMessage(playerid, -1, "Подождите пока место для дуэли освободится."); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); WeaponDuel = strval(tmp); if(WeaponDuel < 0 || WeaponDuel > 42) return SendClientMessage(playerid, -1, "Ты ввёл не верный id оружия. Используй id от 0 до 42"); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); MoneyDuel = strval(tmp); if(MoneyDuel < 1 || MoneyDuel > 100000) return SendClientMessage(playerid, -1, "Ты ввёл не верную сумму ставки. Используй сумму от 1$ до 100000$"); if(MoneyDuel > GetPlayerMoney(playerid)) return SendClientMessage(playerid, -1, "Тебе не хватает на ставку. Укажи другую сумму!"); if(MoneyDuel > GetPlayerMoney(giveplayerid)) return SendClientMessage(playerid, -1, "Твоему противнику не хватает на ставку. Укажи другую сумму!"); if(IsPlayerConnected(giveplayerid)) { new Float:POS[3]; GetPlayerPos(giveplayerid, POS[0], POS[1], POS[2]); if(playerid == giveplayerid) return SendClientMessage(playerid, -1, "Ты не можешь применить это действие к самому себе."); if(!IsPlayerInRangeOfPoint(playerid, 5, POS[0], POS[1], POS[2])) return SendClientMessage(playerid, -1, "Ты находишься слишком далеко от этого игрока."); if(PlayerInDuel[giveplayerid] == 1) return SendClientMessage(playerid, -1, "Этот игрок уже участвует в дуэли."); GetDuelCreate[giveplayerid] = playerid; format(string, sizeof(string), "Ты успешно пригласил игрока {9DDAF2}%s{FFFFFF} на дуэль! Дождись ответа.", pNick(giveplayerid)); SendClientMessage(playerid, -1, string); format(string, sizeof(string), "Игрок %s приглашает тебя на дуэль.\n\nОружие: %d\nСтавка: %d$", pNick(playerid), WeaponDuel, MoneyDuel); ShowPlayerDialog(giveplayerid, DUEL_ID, DIALOG_STYLE_MSGBOX, "Приглашение на дуэль", string, "Да", "Нет"); } else { SendClientMessage(playerid, -1, "Игрок с указанным тобой id не найден!"); } return 1; } return 0; } //============================================================================== public DuelStarting(playerid) { new string[256]; StartingDuel[playerid] -= 1; format(string, sizeof(string), "~y~STARTING: ~w~%d", StartingDuel[playerid]); GameTextForPlayer(playerid, string, 999, 3); SetPlayerHealth(playerid, 100); if(StartingDuel[playerid] == 0) { GameTextForPlayer(playerid, "~g~DUEL START", 3000, 3); TogglePlayerControllable(playerid, true); KillTimer(CountDuelTimer[playerid]); } return 1; } //============================================================================== public OnPlayerDeath(playerid, killerid, reason) { if(PlayerInDuel[killerid] == 1 && PlayerInDuel[playerid] == 1) { new string[256]; DuelPlaceVisit = false; PlayerInDuel[killerid] = 0; PlayerInDuel[playerid] = 0; GetDuelCreate[killerid] = INVALID_PLAYER_ID; GetDuelCreate[playerid] = INVALID_PLAYER_ID; GivePlayerMoney(killerid, MoneyDuel); GivePlayerMoney(playerid, -MoneyDuel); format(string, sizeof(string), "~g~+%d$", MoneyDuel); GameTextForPlayer(killerid, string, 1000, 1); format(string, sizeof(string), "~r~-%d$", MoneyDuel); GameTextForPlayer(playerid, string, 1000, 1); format(string, sizeof(string), ">>> В дуэли между игроками {FFFFFF}%s{00FF00} и {FFFFFF}%s{00FF00} победил игрок {FFFFFF}%s", pNick(killerid), pNick(playerid), pNick(killerid)); SendClientMessageToAll(0x00FF00FF, string); SetTimerEx("OnPlayerSpawn", 1000, false, "i", killerid); return 1; } return 1; } //============================================================================== public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new string[1024]; new dueledid = GetDuelCreate[playerid]; if(dialogid == DUEL_ID) { if(response) { if(PlayerInDuel[playerid] == 1) { SendClientMessage(playerid, -1, "Ты уже участвуешь в дуэли."); SendClientMessage(dueledid, -1, "При соглашении на участие в дуэли произошла ошибка!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(PlayerInDuel[dueledid] == 1) { SendClientMessage(playerid, -1, "Игрок, отославший тебе приглашение, уже участвует в дуэли."); SendClientMessage(dueledid, -1, "При соглашении на участие в дуэли произошла ошибка!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(DuelPlaceVisit) { SendClientMessage(playerid, -1, "Подожди пока место для дуэли освободится."); SendClientMessage(dueledid, -1, "Подожди пока место для дуэли освободится."); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(IsPlayerConnected(dueledid)) { PlayerInDuel[playerid] = 1; PlayerInDuel[dueledid] = 1; DuelPlaceVisit = true; new rand1 = random(sizeof(duelspawn)); SetPlayerPos(playerid, duelspawn[rand1][0], duelspawn[rand1][1], duelspawn[rand1][2]); new rand2 = random(sizeof(duelspawn)); SetPlayerPos(dueledid, duelspawn[rand2][0], duelspawn[rand2][1], duelspawn[rand2][2]); SetCameraBehindPlayer(playerid); SetCameraBehindPlayer(dueledid); SetPlayerInterior(playerid, 10); SetPlayerInterior(dueledid, 10); SetPlayerHealth(dueledid, 100); SetPlayerHealth(playerid, 100); SetPlayerVirtualWorld(playerid, DUEL_MIR); SetPlayerVirtualWorld(dueledid, DUEL_MIR); TogglePlayerControllable(playerid, false); TogglePlayerControllable(dueledid, false); StartingDuel[playerid] = 6; StartingDuel[dueledid] = 6; CountDuelTimer[playerid] = SetTimerEx("DuelStarting", 1000, true, "i", playerid); CountDuelTimer[dueledid] = SetTimerEx("DuelStarting", 1000, true, "i", dueledid); ResetPlayerWeapons(playerid); ResetPlayerWeapons(dueledid); GivePlayerWeapon(playerid, WeaponDuel, 99999); GivePlayerWeapon(dueledid, WeaponDuel, 99999); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } else { SendClientMessage(playerid, -1, "Игрок, отославший тебе приглашение, отсоеденился!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } } else { format(string, sizeof(string), "Ты отказался на участие в дуэли с игроком {9DDAF2}%s", pNick(dueledid)); SendClientMessage(playerid, -1, string); format(string, sizeof(string), "Игрок {9DDAF2}%s{FFFFFF} отказался на участие в дуэли с тобой!", pNick(playerid)); SendClientMessage(GetDuelCreate[playerid], -1, string); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } return 1; } return 1; } //============================================================================== stock pNick(playerid) { new nick[MAX_PLAYER_NAME]; GetPlayerName(playerid, nick, MAX_PLAYER_NAME); return nick; } //============================================================================== strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } Вот и всё! Если будут ошибки пишите
  18. Здраствуйте уважаемые пользователи форума. Хочу вам предоставить свой урок КПП на мосту. Я делал его для своего сервера что бы серверу придать больше РП. Пост Расположен на начале моста со стороны Южного. Этот пост могут открывать только 2 фракции. Когда сотрудников ПО нету на сервере пост открыт. Скрин как это выглядит:
  19. 1. Забыли скомпилировать мод Заходи в папку gamemodes и открывай .pwn файл и нажимай клавишу F5 2.Мод не до конца скомпилировался, или amx. файл поврежден Проверяем размер amx. файла, если 0 кб, значит ошибка компиляции. Проблема в исходном коде, или ошибка запуска компилятора. Запускайте pawncc.exe от имени администратора. 3.У вас нету в моде "точки входа" (функция main) Открываем мод и добавляем в любое место: ( не в stock и не public естественно ) main(){} 4.У вас не установлена программы на компьютере NET Framework или Microsoft Visual C++ Гуглим то и другое, качаем. 5.Не прописаны в server.cfg плагины (нужно проверить используются в моде они или нет для начала) Заходим в папку с сервером и находим файл server.cfg и если у вас нету строки plugins, то добавляем в конце plugins Имя плагина Если у вас стоит Linux то после имя плагина должно быть написано так Имя плагина.so И мой способ: 6).Качаем Streamer: https://code.google.com/p/samp-streamer-plugin/downloads/detail?name=streamer_plugin_v2_6_1_r84.zip&can=2&q= Заменяем всё в папке с модом. И компилируйте мод. И Запускаем мод. (Лично мне это помогло!)
  20. Представляю скрипт "Механическая коробка передач" Так же в этом скрипте есть спидометр. Функция такая же как и на green tech RP. Переключение передачи на Y. Скрин (из SAMP): Ссылка: http://rghost.ru/51316650 Автор: Неизвестно.
×

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

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