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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Всем снова здравствуйте с вами DreSiS! сегодня мы будем делать регистрацию на инклуде mxINI. Заранее благодарю вас за просмотр моего урока! 1.Масив и сохранение Все что вам нужно узнать с этого урока: mxINI - библиотека функций (используют вместо mysql, типо база данных только находятся в файлах а не в сети) new - переменная сохраняющийся в себе информацию, ------ new ------ str - string ( целое ) %s -строки цыфры, число или слово float - (вещественное) %d - 0.0, числа, к примеру целое равно 3, вы его перевели на флоат и получилось 3.0 или 3.00000 все что покачто знаю я и мне это помогает. -------------------- Диалоги DIALOG_STYLE_INPUT DIALOG_STYLE_LIST DIALOG_STYLE_WEAPON DIALOG_STYLE_REG как я помню) ---------------------------------------------------------------------- Спасибо тем кто поддержал меня и так же писали в коментарии что так что не так, ценю всех особенно EgasVegas выкладывать пытаюсь каждый день так что до завтра,ожидайте новый урок!
  2. Dresis

    Мод CR-MP с нуля [ Урок №1 ]

    Здравствуйте! и так это мой первый урок и не судите строго! скачать чистый сервер:http://www.gtasrv.ru/index_ru.html (не реклама) 1.Основное Заходим в pawno и нажимаем на new. потом наблюдаем это: // This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #include <a_samp> #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } #endif Удаляем: // This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else #endif Переходим в OnPlayerCommandText и удаляем следующее: if (strcmp("/mycommand", cmdtext, true, 10) == 0) { // Do something here return 1; } Нажимаем F5 и ожидаем ответа от pawno если у вас написало как у меня то все правильно! 2.Плагины Скачиваем данный архив(там находятся нужные плагины):https://yadi.sk/d/LAE8aw1C3TU4of(ссылка не моя) теперь открываем архив и переносим папку с файлами на роб.стол(куда хотите) делайте все как на скринах! 1. открываем папку Открываем plugins и переносим в нашу папку нашего сервера! Открываем папку "pawno" и заходим в папку "include". файл "a_mysql" переносим в (название вашего сервера/pawno/include/) Отлично! теперь выходим из папки "include" и "pawno" открываем папку "pawno" и переносим в папку вашего проекта(если нужно будет замена, заменяем!) теперь переносим папку "plugins" в папку вашего проекта с заменой! с папкой "streamer" делайте то же самое)) Отлично! 3.Первые изменения в моде Открываем ваш мод снова и видим изменяем "Blank Gamemode by your name here" на ваш текст(он будет отображаться в консоли) и видим в OnGameModeInit видем и изменяем Blank Script на свой текст(показывает название вашего мода в клиенте) 3.Настройки server.cfg открываем server.cfg и видим сначала у вас не будут таких настроек, просто некоторые функции перепишите от сюда (обязательно поменяйте rcon_password!) убираем все filterscripts забыл сказать что в строке gamemode0 поменяйте simple на название вашего мода вы помните мы добавили плагины? и так добавляем строку plugins в самый низ и добавляйте прописывайте плагины или спишите как у меня! должно получиться так: plugins streamer sscanf pawnregex mysql dc_cmd сохраняем server.cfg А продолжим мы в следующем уроке, ссылку на него я оставлю в ответах темы, следите за этой темой! вопросы тоже задаем! Всех уважаю
  3. Итак, всех посетителей темы приветствую. Я хорошенько прогуглил наличие подобной темы в интернете, и понял, что народ не понимает, а если и понимает, то не может самостоятельно продлить треки в нужную ему сторону. Единственное, что смог найти - платные предложения достроить/продать ПО. Предыстория, кто вообще ничего не понимает: [spoiler=Открыть] В игре присутсвуют файлы типа "tracks.dat". Что это такое ? Это явно описанная по координатам ломаная, по которой (и только по которой) может передвигаться поезд, и иной транспорт, имеющий на то такие флаги. Только назад и только вперед. Не более. Ок, разобрались. Что хотим далее ? Предположим, мы хотим закончить ЖД, и сомкнуть их в полную кольцевую. Что для этого потребуется? Первым делом, само собой, маппинг. Но даже после продолжения путей поезд по ним не поедет. Необходимо в файлы треков вставить те координаты, по которым поезд должен ехать. Одну за одной. Можно тупо делать /save каждые 10 шагов. Но зачем ? Я предлагаю решение проще. Решение проблемы по существу: Я не знаю, почему народ не допер до этого, но весь вопрос решается записью координат с определенным промежутком. Это буквально пара строчек кода. Вам потребуется пустой тестовый сервер, и включение моего скрипта либо в качестве ГМ, либо в качестве ФС. Все инструкции я приложил ниже. Скрипт использует стандартные библиотеки, и не требует дополнительного ПО. Инструкция: Для TrainsTracks скрипта и программы обработки: Скрипт Позволяет создавать ЖД-треки. Для старта введите /start и начинайте ехать по необходимым ЖД - путям. В конце путей введите /stop Данный скрипт не будет работать без специального конвертера Program2.exe Полученный после всех операций файлик tracks.txt переименовать в in.txt и поместить в папку с конвертером Program2.exe Запустить конвертер. Полученный файлик out.txt будет готовым к добавлению в tracks.dat Открыть файлик, скопировать строки, добавить куда нужно. Для программы просмотра путей: Данная вещь позволяет исключительно просматривать пути и редактировать их. Не самая удобная хрень. Открыть программу, на вкладке edit -- select maps указать путь до файла карты игры. Он отобразится впоследствии в программе. Работать. Итоги: В конце, естественно, ссылка на полный архив с софтом: https://yadi.sk/d/iczlDVQ2gpH1yw На разработку, тест, поиск проги для просмотров потрачено 2 часа. А сколько вопросов сразу отпадёт )) И сколько появится, как обычно ))) Кстати, в данном скрипте координаты подобраны так, что ехать лучше всего на любом мото на средней скорости. Ехать ровно по центру ЖД.
  4. Vladimir_Kulkov

    Nex-AC - Античит система

    Nex Anticheat (Nex-AC) - это комплексная защита, объединяющая в себе мощный античит и защиту от различных атак (флуда, DoS). Античит обнаруживает большинство популярных читов, моментально наказывая нечестного игрока. Анти-DoS сочетает в себе мощный гибко настраиваемый антифлуд, анти-DoS на сетевом уровне и множество защит от взломов, крашеров и т.д. Список основных античитов: [spoiler=Открой спойлер]* Анти-AirBreak (пешком/в авто) * Анти-телепорт (пешком/в/к себе/между транспортом) * Анти-телепорт пикапов * Анти-FlyHack (пешком/в авто) * Анти-SpeedHack (пешком/в авто) * Античит на здоровье (пешком/в авто) и броню * Античит на оружие/бесконечные/патроны * Античит на все спец. действия (в т.ч. и на jetpack) * Анти-GodMode от пуль (пешком/в авто) * Античит на невидимость * Античит на деньги * Античит на тюнинг * Анти-lagcomp-spoof * Анти-Паркур мод * Анти-Quick turn * Анти-Rapid fire * Анти-FakeSpawn * Анти-FakeKill * Анти-Pro Aim * Анти-Бег CJ * Анти-CarShot * Анти-CarJack * Анти-UnFreeze * Анти-AFK Ghost * Анти-Reconnect * Защита от фейк NPC * Защита от песочницы * Защита от высокого пинга * Защита от подмены диалогов * Защита от флуда сменой мест * Защита от флуда коннектами в один слот * Защита от взлома Rcon (брут/брутфорс) * Анти-флуд автовызываемыми функциями (полный их список ниже) * Анти-крашеры (полный их список ниже) * Анти-NOP'ы (полный их список ниже) * Защита от Dos Дополнительные возможности: * Настройка античита через файл Настройки находятся в отдельном файле (scriptfiles\nex-ac_settings.cfg) * Просмотр статистики Возможность просмотра статистики античита за время работы сервера с момента его запуска Выводится автоматически при его выключении, сохраняясь в лог сервера (server_log.txt) * Логирование самых важных действий По желанию можно включить debug-режим для логирования всех действий * Мультиязычность Возможность устанавливать любой из имеющихся языков. Также это упрощает перевод античита на другие языки Список пабликов, которые попадают под антифлуд: [spoiler=Открой спойлер]* OnDialogResponse * OnEnterExitModShop * OnPlayerClickMap * OnPlayerClickPlayer * OnPlayerClickTextDraw * OnPlayerCommandText * OnPlayerEnterVehicle * OnPlayerExitVehicle * OnPlayerPickUpPickup * OnPlayerRequestClass * OnPlayerSelectedMenuRow * OnPlayerStateChange * OnVehicleMod * OnVehiclePaintjob * OnVehicleRespray * OnVehicleDeath * OnPlayerText * OnPlayerEnterCheckpoint * OnPlayerLeaveCheckpoint * OnPlayerRequestSpawn * OnPlayerExitedMenu * OnPlayerEnterRaceCheckpoint * OnPlayerLeaveRaceCheckpoint * OnPlayerClickPlayerTextDraw * OnVehicleDamageStatusUpdate * OnPlayerSelectObject Анти-NOP'ы: [spoiler=Открой спойлер]* SpawnPlayer * SetPlayerPos * SetVehiclePos * SetPlayerAmmo * SetPlayerHealth * SetPlayerArmour * SetVehicleHealth * GivePlayerWeapon * SetPlayerInterior * PutPlayerInVehicle * ResetPlayerWeapons * SetPlayerArmedWeapon * SetPlayerSpecialAction * TogglePlayerSpectating * RemovePlayerFromVehicle Анти-Крашеры: [spoiler=Открой спойлер]* Невалидный тюнинг * Невалидное место в авто * Запрещённые символы в диалогах (удаляются) * Невалидные приаттаченные объекты * Weapon Crasher Функции: [spoiler=Открой спойлер]public OnCheatDetected(playerid, ip_address[], type, code) Вызывается, когда сработал один из античитов playerid - ID нарушителя ip_address[] - IP-адрес нарушителя type - тип нарушения (при 0 возвращает ID, при 1 - IP) code - Код (ID) античита EnableAntiCheat(acid, enable) Используйте для включения/отключения одного из античитов acid - ID античита enable - 1 для включения/0 для выключения EnableAntiCheatForPlayer(playerid, acid, enable) Используйте для включения/отключения одного из античитов для конкретного игрока playerid - ID игрока, которому необходимо включить/отключить античит acid - ID античита enable - 1 для включения/0 для выключения Добавленные в v1.3: IsAntiCheatEnabled(acid) Используйте для проверки включения/отключения одного из античитов acid - ID античита Возвращает 1 (true), если включён, или 0 (false), если выключен IsAntiCheatEnabledForPlayer(playerid, acid) Используйте для проверки включения/отключения одного из античитов для конкретного игрока playerid - ID игрока, у которого необходимо проверить включение/отключение античита acid - ID античита Возвращает 1 (true), если включён, или 0 (false), если выключен Добавленные в v1.8.8: AntiCheatGetHealth(playerid, &Float:health) Используйте для получения количества здоровья игрока playerid - ID игрока, у которого необходимо узнать количество здоровья &Float:health - Переменная для хранения здоровья, передаётся по ссылке AntiCheatGetArmour(playerid, &Float:armour) Используйте для получения количества брони игрока playerid - ID игрока, у которого необходимо узнать количество брони &Float:armour - Переменная для хранения брони, передаётся по ссылке AntiCheatGetVehicleHealth(vehicleid, &Float:health) Используйте для получения количества здоровья транспорта vehicleid - ID транспорта, у которого необходимо узнать количество здоровья &Float:health - Переменная для хранения здоровья, передаётся по ссылке AntiCheatGetWeaponData(playerid, slot, &weapons, &ammo) Используйте для получения оружия и патронов в определённом слоте у игрока playerid - ID игрока, у которого необходимо узнать оружие и патроны slot - Слот, в котором необходимо узнать оружие и патроны &weapons - Переменная для хранения оружия, передаётся по ссылке &ammo - Переменная для хранения количества патронов, передаётся по ссылке AntiCheatGetSpawnWeapon(playerid, &weapon1, &weapon1_ammo, &weapon2, &weapon2_ammo, &weapon3, &weapon3_ammo) Используйте для получения оружия и патронов при спавне у игрока playerid - ID игрока, у которого необходимо узнать оружие и патроны, выдаваемые при спавне &weapon1 - Переменная для хранения оружия 1, передаётся по ссылке &weapon1_ammo - Переменная для хранения количества патронов для оружия 1, передаётся по ссылке &weapon2 - Переменная для хранения оружия 2, передаётся по ссылке &weapon2_ammo - Переменная для хранения количества патронов для оружия 2, передаётся по ссылке &weapon3 - Переменная для хранения оружия 3, передаётся по ссылке &weapon3_ammo - Переменная для хранения количества патронов для оружия 3, передаётся по ссылке AntiCheatGetPos(playerid, &Float:x, &Float:y, &Float:z) Используйте для получения позиции игрока playerid - ID игрока, у которого необходимо узнать позицию &Float:x - Переменная для хранения координат по x, передаётся по ссылке &Float:y - Переменная для хранения координат по y, передаётся по ссылке &Float:z - Переменная для хранения координат по z, передаётся по ссылке AntiCheatGetSpeed(playerid, &Float:speed) Используйте для получения скорости игрока playerid - ID игрока, у которого необходимо узнать скорость &Float:speed - Переменная для хранения скорости, передаётся по ссылке AntiCheatGetVehicleVelocity(vehicleid, &Float:x, &Float:y, &Float:z) Используйте для получения скорости транспорта vehicleid - ID транспорта, у которого необходимо узнать скорость &Float:x - Переменная для хранения скорости по x, передаётся по ссылке &Float:y - Переменная для хранения скорости по y, передаётся по ссылке &Float:z - Переменная для хранения скорости по z, передаётся по ссылке AntiCheatGetAnimationIndex(playerid) Используйте для получения индекса (ID'а) текущей анимации игрока playerid - ID игрока, у которого необходимо узнать ID анимации Возвращает ID анимации или 0, если игрок не подключен AntiCheatGetDialog(playerid) Используйте для получения ID'а открытого диалога у игрока playerid - ID игрока, у которого необходимо узнать ID диалога Возвращает ID диалога или 0, если игрок не подключен AntiCheatGetMoney(playerid) Используйте для получения количества денег игрока playerid - ID игрока, у которого необходимо узнать количество денег Возвращает количество денег или 0, если игрок не подключен AntiCheatGetEnterVehicle(playerid) Используйте для получения ID'а транспорта, в которое пытался сесть игрок playerid - ID игрока, у которого необходимо узнать ID транспорта Возвращает ID транспорта или 0, если игрок не подключен AntiCheatGetVehicleID(playerid) Используйте для получения ID'а транспорта, в котором сидит игрок playerid - ID игрока, у которого необходимо узнать ID транспорта Возвращает ID транспорта или 0, если игрок не подключен AntiCheatGetWeapon(playerid) Используйте для получения ID'а текущего оружия у игрока playerid - ID игрока, у которого необходимо узнать ID оружия Возвращает ID оружия или 0, если игрок не подключен AntiCheatGetVehicleSeat(playerid) Используйте для получения места в транспорте, на котором сидит игрок playerid - ID игрока, у которого необходимо узнать место Возвращает номер места или 0, если игрок не подключен AntiCheatGetSpecialAction(playerid) Используйте для получения ID'а специального действия игрока playerid - ID игрока, у которого необходимо узнать ID специального действия Возвращает ID специального действия или 0, если игрок не подключен AntiCheatGetLastSpecialAction(playerid) Используйте для получения ID'а предыдущего специального действия игрока playerid - ID игрока, у которого необходимо узнать ID предыдущего специального действия Возвращает ID предыдущего специального действия или 0, если игрок не подключен AntiCheatGetLastShotWeapon(playerid) Используйте для получения ID'а последнего оружия, из которого стрелял игрок playerid - ID игрока, у которого необходимо узнать ID последнего оружия Возвращает ID последнего оружия или 0, если игрок не подключен AntiCheatGetLastPickup(playerid) Используйте для получения ID'а последнего подобранного игроком пикапа playerid - ID игрока, у которого необходимо узнать ID последнего подобранного пикапа Возвращает ID последнего подобранного пикапа или 0, если игрок не подключен AntiCheatGetLastUpdateTime(playerid) Используйте для получения времени последнего обновления игрока playerid - ID игрока, у которого необходимо узнать время последнего обновления Возвращает время последнего обновления или 0, если игрок не подключен AntiCheatGetLastReloadTime(playerid) Используйте для получения времени последней перезарядки (оружия) у игрока playerid - ID игрока, у которого необходимо узнать время последней перезарядки Возвращает время последней перезарядки или 0, если игрок не подключен AntiCheatGetLastEnteredVehTime(playerid) Используйте для получения времени последней попытки посадки в авто у игрока playerid - ID игрока, у которого необходимо узнать время последней попытки посадки Возвращает время последней попытки посадки или 0, если игрок не подключен AntiCheatGetLastShotTime(playerid) Используйте для получения времени последнего выстрела у игрока playerid - ID игрока, у которого необходимо узнать время последнего выстрела Возвращает время последнего выстрела или 0, если игрок не подключен AntiCheatGetLastSpawnTime(playerid) Используйте для получения времени последнего спавна у игрока playerid - ID игрока, у которого необходимо узнать время последнего спавна Возвращает время последнего спавна или 0, если игрок не подключен AntiCheatIntEnterExitsIsEnabled(playerid) Используйте для проверки включения/отключения маркеров входов/выходов в интерьеры для игрока playerid - ID игрока, у которого необходимо проверить включение/отключение маркеров Возвращает 1 (true), если включены, или 0 (false), если выключены AntiCheatStuntBonusIsEnabled(playerid) Используйте для проверки включения/отключения денежного бонуса за трюки для игрока playerid - ID игрока, у которого необходимо проверить включение/отключение денежного бонуса Возвращает 1 (true), если включён, или 0 (false), если выключен AntiCheatIsInModShop(playerid) Используйте для проверки: находится ли игрок в ModShop'е или нет playerid - ID игрока, у которого необходимо проверить, находится ли он в ModShop'е Возвращает 1 (true), если находится, или 0 (false), если не находится AntiCheatIsFrozen(playerid) Используйте для проверки: заморожен ли игрок или нет playerid - ID игрока, у которого необходимо проверить, заморожен ли он Возвращает 1 (true), если заморожен, или 0 (false), если не заморожен AntiCheatIsDead(playerid) Используйте для проверки: мёртв ли игрок или нет playerid - ID игрока, у которого необходимо проверить, мёртв ли он Возвращает 1 (true), если мёртв, или 0 (false), если не мёртв AntiCheatIsConnected(playerid) Используйте для проверки: находится ли игрок на сервере или нет playerid - ID игрока, у которого необходимо проверить, находится ли он на сервере Возвращает 1 (true), если находится, или 0 (false), если не находится Пример настройки OnCheatDetected у себя в моде Мультиязычность: Скрипт можно настроить на любой из имеющихся языков. Для этого просто скачайте по ссылке ниже интересующую вас локализацию, сохраните её в одну директорию с основной инклудой (nex_ac.inc) и перекомпилируйте свой скрипт. Доступные языки: * Русский (RU) (v1.0 - 1.9.32): http://rghost.ru/8PH5Lqr7V My-Files Pastebin * Белорусский (BY) (v1.0 - 1.9.32): http://rghost.ru/8GvxXGrYZ My-Files Pastebin * Английский (EN) (v1.0 - 1.9.32): * http://rghost.ru/6sfDqSzZW My-Files Pastebin * Solidfiles Pastebin (by KyleSmith) * Немецкий (DE) (v1.0 - 1.9.32): Solidfiles Pastebin (by Carper) * Голландский (NL) (v1.0 - 1.9.32): Solidfiles Jstylezzz.com Pastebin (by Jstylezzz) * Итальянский (IT) (v1.0 - 1.9.32): Solidfiles Pastebin (by J4Rr3x) * Испанский (ES) (v1.0 - 1.9.32): * Solidfiles Pastebin (by Alex Westbrook) * Solidfiles Pastebin (by JustBored) * Грузинский (GE) (v1.0 - 1.9.32): * http://rghost.ru/8g5XMCR5n Pastebin (by lashona) * RGHost Pastebin (by ArthourP) * Польский (PL) (v1.0 - 1.9.32): Solidfiles Pastebin (by wampiros6) * Сербский (RS) (v1.0 - 1.9.32): * Solidfiles Pastebin (by DeitY) * Solidfiles Pastebin (by Dragony92) * Португальский (PT/BR) (v1.0 - 1.9.32): Solidfiles Pastebin (by NicK_) * Персидский (Farsi) (FA) (v1.0 - 1.9.32): Solidfiles Pastebin (by M4D) * Украинский (UA) (v1.0 - 1.9.32): http://rghost.ru/6gn5PMxl2 Pastebin (by Valera_Kovshikov) * Индонезийский (ID) (v1.0 - 1.9.32): Solidfiles Pastebin (by RaefaldhiAmartya) * Хорватский (HR) (v1.0 - 1.9.32): Solidfiles Pastebin (by vannesenn) * Французский (FR) (v1.0 - 1.9.32): * Solidfiles Pastebin (by j3rry) * Solidfiles Pastebin (by vic1997) * Литовский (LT) (v1.0 - 1.9.32): Solidfiles Pastebin (by zaibaslr2) * Румынский (RO) (v1.0 - 1.9.32): Solidfiles Pastebin (by UnforgiveNNN) * Венгерский (HU) (v1.0 - 1.9.32): Solidfiles Pastebin (by Pedro.) * Финский (FI) (v1.0 - 1.9.32): My-Files Pastebin (by Ben_Lovejoy) * Латвийский (LV) (v1.0 - 1.9.32): http://rghost.ru/6FHgWwmwk Pastebin (by Rengar) * Болгарский (BG) (v1.0 - 1.9.32): MediaFire Pastebin (by bgedition) * Турецкий (TR) (v1.0 - 1.9.32): Solidfiles Pastebin (by Jensenn) * Словацкий (SK) (v1.0 - 1.9.32): MediaFire Pastebin (by Sanady) * Армянский (AM) (v1.0 - 1.9.32): Solidfiles Pastebin (by Grig) * Чешский (CZ) (v1.0 - 1.9.32): Solidfiles Pastebin (by SooBad) * Файлы .lang можно открыть даже стандартным блокнотом и легко редактировать Также рекомендуется проверить, не используются ли какие-либо другие античиты, во избежание конфликтов с ними. Скачать: Яндекс.Диск Установка: 1. Скачать версию античита, совместимую с версией вашего сервера 2. Скачать файл локализации (.lang) на нужном вам языке 3. Скопировать оба файла в папку "/pawno/include", которая находится в папке с сервером 4. В гейммоде и всех фильтрскриптах прописать сразу после "#include " следующее: "#include " Предупреждение! Если вы используете Streamer Plugin от Incognito, Timerfix plugin от Dan, foreach, sscanf или y_hooks, подключать их нужно перед nex-ac! Также имейте в виду, что фильтрскрипты должны иметь "#define FILTERSCRIPT" перед подключением античита 5. Скомпилировать изменённые вами скрипты Используете YSI и получайте ошибки при компиляции с этим античитом? Ознакомьтесь с несколькими советами (на английском) История версий: [spoiler=Открой спойлер]v1.0 * Первый релиз v1.1 Изменения: * Совместимость со Streamer Plugin'ом * Совместимость с y_hooks * Небольшая оптимизация Исправления: * Увеличение некоторых значений и дистанций с учётом пинга * Исправлена ошибка с поднятием схожего оружия на пикапах * Исправлена ошибка с киком при спавне и последующей установке игроку позиции/интерьера * Исправлена ошибка с киком при спавне и последующей установке игроку оружия (если использовались AddPlayerClass/Ex) * Исправлен краш CallRemoteFunction при вызове ShowPlayerDialog v1.2 Изменения: * Совместимость с y_dialog * Дополнительная совместимость с foreach Исправления: * Исправлен ряд багов с Anti-GodMode'ом * Исправлен баг с киком при длительной стрельбе из минигана * Исправлены вывод статистики и сообщений о кике * Подправлена белорусская локализация Теперь это доступно на GitHub! (по многочисленным просьбам) v1.3 Изменения: * Добавлен "#define USE_QUERY" (true по умолчанию) * Если ваш сервер под атакой брутфорса - для более полной защиты значение USE_QUERY можно изменить на false * Внимание! При значении false сервер не будет отображать информацию в сервер-браузере, поэтому используйте в крайних случаях! * Добавлены функции IsAntiCheatEnabled и IsAntiCheatEnabledForPlayer Исправления: * Исправлена загрузка настроек античитов из config-файла * Увеличены некоторые значения в пользу игроков с большим пингом * Защита Rcon (от брутфорса) теперь также динамически включается/отключается функцией EnableAntiCheat * Исправлены мелкие ошибки в античитах на патроны, RapidFire, SpeedHack в авто, Anti-GodMode пешком и в авто v1.4 Изменения: * Совместимость с Socket plugin'ом * Убраны некоторые анти-крашеры (которые исправлены в новой версии r2) * Улучшен античит на тюнинг: теперь обнаруживает бесплатный тюнинг в мастерских * Улучшен античит на каршот Исправления: * Подправлены некоторые значения в анти-флуде * Исправлено несколько багов в античите на оружие * Исправлен баг, когда все машины могли иметь сирену * Исправлен баг в анти-телепорте с киком при въезде в ModShop * Исправлен баг в анти-GodMode пешком с киком, если пули были рассинхронизированы v1.5 Изменения: * Улучшено взаимодействие с античитом через OnCheatDetected * Улучшен античит на Pro-Aim: теперь обнаруживает и Silent-Aim * Убрана ошибка при компиляции, если не была подключена локализация * Небольшая оптимизация Исправления: * Исправлена совместимость со Streamer Plugin'ом * Исправлена совместимость с foreach в последней YSI * Доработан Анти-GodMode пешком и Анти-GodMode в транспорте * Исправлен баг в Анти-FlyHack с киком за прыжки на велосипеде * Исправлено несколько ошибок в анти-невидимке v1.6 Изменения: * Улучшена совместимость с y_hooks в последней YSI * Улучшен Анти-Rapid fire: теперь ловит и быструю перезарядку * В целях безопасности добавлены несколько Анти-Aim крашеров * Добавлена проверка при компиляции на совместимость с версией сервера * OnCheatDetected теперь вызывается даже для тех античитов, которые не кикали по умолчанию * Анти-UnFreeze теперь по умолчанию отключен Исправления: * Исправлен баг в Анти-Тп в авто с посадкой в закрытое авто * Исправлена защита от взлома Rcon (из игры) * Исправлена функция EnableAntiCheat v1.7 Изменения: * Обновлен Анти-Тюнинг крашер * Дополнительная совместимость с sscanf * Улучшена совместимость с другими скриптами Исправления: * Исправлена совместимость со Стримером * Исправлены Анти-SpeedHack, Анти-Flood и Анти-Невидимка * Исправлен баг в античите на патроны с ResetPlayerWeapons v1.8 Изменения: * Улучшен античит на RapidFire: теперь ловит Auto +C * Небольшая оптимизация Исправления: * Исправлены ошибки, из-за которых не срабатывали некоторые античиты * Увеличена максимально допустимая скорость пешком * Исправлен баг в Anti-Invalid seat crasher * Исправлен античит на оружие и патроны v1.8.1 Изменения: * Переписан Анти-Диалог крашер (%) Исправления: * Исправлен баг в античите на патроны с киком за детонатор * Исправлен режим дебага v1.8.2 Исправления: * Исправлена функция EnableAntiCheatForPlayer * Исправлены баги с "#define AC_USE_" v1.8.3 Исправления: * Исправлен вывод сообщений о кике в некоторых локализациях v1.8.4 Изменения: * Небольшая оптимизация Исправления: * Увеличены некоторые значения из-за пинга * Исправлен баг в Анти-RapidFire с киком за стрельбу из пассажирского места * Исправлен баг в античите на патроны с киком за стрельбу из водительского места v1.8.5 Исправления: * Исправлены некоторые проверки на несуществующие модели машин * Из-за многочисленных жалоб поставил по умолчанию русский язык v1.8.6 Изменения: * Возвращены некоторые анти-крашеры (которые были "исправлены" в версии r2) v1.8.7 Исправления: * Исправлен баг в Анти-FlyHack (пешком) с киком за прыжок в воду v1.8.8 Изменения: * Улучшена читаемость кода * Мелкие исправления и улучшения * Добавлены дебаг-функции Исправления: * Исправлена совместимость с последними версиями Streamer Plugin'а и YSI v1.8.9 Исправления: * Подправлены некоторые настройки * Исправлены ошибки в защите на NOP GivePlayerWeapon и SetPlayerAmmo * Исправления функция SetVehicleHealth * Исправлена функция SetPlayerInterior v1.9 Изменения: * Мелкие улучшения * Добавлен hook функции LinkVehicleToInterior * Улучшен античит на патроны для Sawnoff Shotgun, 9mm, Uzi и Tec-9 * Добавлена поддержка filterscript'ов для защиты от подмены диалогов * Переписан Анти-AFK Ghost Исправления: * Исправлена функция RepairVehicle * Исправлен баг в Анти-GodMode (в машине) с выходом за пределы массива * Исправлен баг в Анти-Godmode (в машине) с ложным киком за стрельбу по колёсам * Исправлен баг с использованием SetPlayerArmedWeapon в OnPlayerTakeDamage * Исправлен баг в античите на патроны со стрельбой с водительского места * Исправлен баг с вычислением максимального места для 483 транспорта * Исправлен баг в Анти-Godmode (пешком) с киком при посадке в авто * Исправлены ошибки с использованием "STREAMER_ENABLE_TAGS" * Исправлен ряд ошибок в античите на пикапы v1.9.1 Изменения: Добавлена совместимость с Nexius's Update Checker'ом v1.9.2 Изменения: * Мелкие улучшения * Изменены некоторые значения в анти-флуде Исправления: * Исправлен баг с киком за выставление игроку интерьера, в котором он уже находился v1.9.3 Изменения: * Убрана проверка на расстояние при выходе из авто в античите на телепорт (из-за ложных срабатываний) v1.9.4 Изменения: * Изменено наказание за телепорт незанятого транспорта Исправления: * Исправлен баг в античите на телепорт * Исправлен баг в защите на NOP RemovePlayerFromVehicle * Исправлен античит на деньги v1.9.5 Исправления: * Исправлен баг в античите на телепорт с установкой интерьера до спавна * Исправлен hook OnPlayerClickPlayerTextDraw v1.9.6 Изменения: * Изменены некоторые значения в анти-флуде Исправления: * Исправлен баг в античите на невидимку со спавном во время слежки * Исправлен баг в античите на спидхак с использованием функции SetVehicleToRespawn * Исправлена совместимость со стримерскими checkpoint'ами * Исправлены мелкие ошибки v1.9.7 Изменения: * Изменены некоторые значения в анти-флуде * Функции EnableAntiCheat(ForPlayer) и IsAntiCheatEnabled(ForPlayer) можно вызывать из фильтрскриптов * Добавлена защита от обхода регистрации (идея взята у f0Re3t) * Переделана защита от высокого пинга Исправления: * Исправлен баг в Анти-SpeedHack'е с киком за быструю езду на поезде * Полностью исправлен баг с киком за смену интерьера v1.9.8 Изменения: * Функции AntiCheatGet* теперь вызываются из filterscript'ов * Ускорен вызов перехваченных функций из GameMode'а * Переписан античит на деньги Исправления: * Исправлен обход в античите на патроны для скорострельного оружия * Исправлен обход в анти-телепорте с возможностью телепортироваться после смены интерьера сервером * Исправлен баг в античите на оружие с киком при покупке оружия в амму-нации по неправильным ценам * Исправлен баг в защите от NOP'ов с киком за выдачу похожего оружия * Исправлены ошибки компиляции при подключении к filterscript'у v1.9.9 Исправления: * Исправлено несколько багов в античите на специальные действия * Исправлен баг в античите на оружие с киком при использовании ResetPlayerWeapons в OnPlayerDeath * Подправлены некоторые значения v1.9.10 Изменения: * Убран повторный кик при вылете игрока * Обновлен массив с допустимыми компонентами тюнинга для каждого транспорта (взят из fixes) * Добавлены внутренние проверки валидности аргументов для функций GivePlayerWeapon, SetPlayerArmedWeapon * Существенно улучшен режим дебага * Мелкие улучшения Исправления: * Исправлен баг в защите от NOP'ов с киком за попытку посадки на уже занятое место в транспорте * Исправлен античит на спидхак в транспорте (проверка максимально допустимой скорости) * Подправлен античит на rapid fire для дробовика (shotgun) Из-за многочисленных случаев с проблемами подключения античита, была добавлена версия, которая совместима с версией сервера 0.3.7 R1 v1.9.11 Исправления: * Исправлена функция SetPlayerArmedWeapon * Исправлена функция PutPlayerInVehicle * Мелкие исправления v1.9.12 Изменения: * Изменены некоторые значения в анти-флуде * Переписана система вызова некоторых подменённых функций Исправления: * Исправлен баг при попытке сесть в автобус пассажиром на место, больше 1 * Исправлен баг в защите от NOP'ов с неверным типом здоровья и брони при проверке * Исправлен античит на бесконечные патроны для снайперки * Подправлена функция PutPlayerInVehicle v1.9.13 Изменения: * Изменены некоторые значения в анти-флуде Исправления: * Исправлен баг в анти-телепорте в закрытый транспорт с киком при попытке посадки на пассажирское место v1.9.14 Изменения: * Улучшен античит на GodMode * Мелкие улучшения функций EnableAntiCheat и EnableAntiCheatForPlayer * Изменено наказание по умолчанию за починку авто читом (возвращается старое здоровье) * Убраны некоторые анти-weapon crasher'ы v1.9.15 Изменения: * Анти-паркур мод и анти-фейк NPC теперь по умолчанию отключены Исправления: * Исправлен баг в защите от NOP RemovePlayerFromVehicle v1.9.16 Исправления: * Подправлены функции SetPlayerPos, SetPlayerPosFindZ и SetVehiclePos v1.9.17 Изменения: * Добавлена проверка на валидность пикапа при его подборе * Увеличена минимальная дистанция обнаружения AirBreak'а пешком Исправления: * Исправлен античит на бег CJ с киком за приземление с парашютом (зажав клавишу 'S') * Подправлен анти-FlyHack с анимацией парашютиста v1.9.18 Изменения: * Debug режим теперь активен по умолчанию Исправления: * Исправлено ложное срабатывание анти-флуда при быстрой посадке и выходе из лодок * Подправлены минимальные значения 'fire rate' в анти-rapid fire для desert eagle * Исправлен ложный кик за NOP'ы, если игроку или его транспорту устанавливалось здоровье/броня пока он горел * Исправлен античит на бесконечные патроны для m4, mp5 и silenced pistol v1.9.19 Исправления: * Исправлен баг в анти-fakespawn с киком за выход из режима наблюдения при выходе наблюдаемого игрока * Исправлены античиты на здоровье (пешком/в авто) и броню v1.9.20 Изменения: * Небольшие улучшения в коде Исправления: * Исправлен баг в анти-телепорте пикапов с киком за телепорт на позицию пикапа * Исправлена функция RemovePlayerFromVehicle v1.9.21 Исправления: * Подправлена функция SetPlayerAmmo * Исправлен баг в анти-GodMode в транспорте с киком при стрельбе по колёсам транспорта * Исправлен античит на бесконечные патроны для AK-47 и m4 v1.9.22 Изменения: * Убрано исключение на выдачу гольф клюшки при выходе из 457 модели транспорта * Убрана проверка на дистанцию до машины при её enter'е (наблюдались ложные срабатывания) * Анти-реконнект теперь будет отключаться, если в настройках задана возможность входа более 1 аккаунта с 1 IP * При попытке флуда пабликами OnVehicleMod и OnVehicleRespray, они будут рассинхронизированы * Изменены некоторые значения в анти-флуде v1.9.23 Исправления: * Исправлено возвращение неправильных значений в некоторых пабликах * Исправлен баг, когда транспорт не сбрасывал значение его водителя после дисконнекта игрока * Исправлен баг с проверкой на пинг при коннекте v1.9.24 Изменения: * Уменьшена чувствительность анти-FlyHack'а в авто * Уменьшена чувствительность анти-AirBreak'а на малых дистанциях * Если стандартные маркеры входов/выходов включены (т.е. в моде не используется DisableInteriorEnterExits), то античит на телепорт на дальние дистанции автоматически отключается (во избежание ложных срабатываний при входе на крышу небоскрёба ЛС) Исправления: * Исправлен баг с киком за посадку в автобус (id 431 & 437) более одного пассажира * Исправлен баг с киком за быструю посадку в вагон поезда (id 570) v1.9.25 Изменения: * Уменьшена чувствительность анти-Speedhack'а * Мелкие улучшения Исправления: * Исправлен баг в античите на телепорт при смерти в интерьере * Исправлен баг в античите на быстрый спавн с использованием функции ForceClassSelection * Исправлен баг в анти-GodMode пешком с киком выходящего из авто игрока, если по нему в этот момент стреляют * Исправлена функция ResetPlayerWeapons v1.9.26 Изменения: * Переписан античит на телепорт в интерьеры * Добавлена дополнительная защита от Damage Helper * Добавлена защита от взрыва машин после телепорта в них с помощью читов * Мелкие исправления и улучшения Исправления: * Исправлены некоторые баги в античите на специальные действия * Подправлены минимальные цены на оружие в амму-нации для античита * Исправлена функция SpawnPlayer v1.9.27 Изменения: * Увеличена максимально допустимая скорость пешком * Изменены некоторые задержки, ожидающие применения функций сервера * Добавлена защита от перекраски транспорта, если стандартные автомастерские отключены * Увеличено количество варнингов для защиты от высокого пинга * Переписан античит на телепорт стримерских пикапов * Удалена функция AntiCheatGetClass * Мелкие исправления и улучшения Исправления: * Исправлен античит на деньги * Исправлен баг в защите от NOP GivePlayerWeapon * Исправлен обход анти-fakespawn, когда читер вызывал OnPlayerRequestSpawn перед спавном * Исправлены ложные срабатывания при длительной стрельбе из некоторого оружия * Исправлено обнуление некоторых переменных при спавне игрока * Исправлен анти-speedhack v1.9.28 Изменения: * Добавлена поддержка функции Streamer_UpdateEx * Добавлена совместимость с плагином Timerfix by Dan * Минимальная дистанция обнаружения для античита на телепорт в транспорте изменена с 15 до 25 метров * Снижена чувствительность анти-AirBreak пешком на малых дистанциях * Увеличено количество варнингов для античита на деньги Исправления: * Исправлен обход античита с моментальным телепортом после выхода из транспорта * Исправлен баг в античите на здоровье с киком при выпадении из велосипеда (при низких значениях здоровья оно восстанавливается игрой до 5) * Исправлен баг в античите на телепорт в авто с киком при телепорте в автомастерскую, когда в машине были пассажиры * Исправлен античит на бесконечные патроны для оружия Country Rifle * Мелкие исправления v1.9.29 Исправления: * Исправлен баг в анти-GodMode с киком жертвы при стрельбе в неё на больших дистанциях * Исправлен баг в античите на телепорт при выходе из транспорта с киком при телепорте игрой на поверхность, когда игрок проваливался под карту в машине * Исправлен обход античита на патроны, когда читер выдавал себе минусовое значение патронов, тем самым делая их бесконечными * Исправлен обход в античите на телепорт в транспорте, когда читер телепортировался в момент посадки в транспорт * Мелкие исправления и улучшения v1.9.30 Изменения: * Увеличена минимальная скорость для обнаружения FlyHack'а * Увеличено время ожидания применения функций в защите от NOP'ов Исправления: * Подправлены античиты на здоровье авто и анти-GodMode в транспорте * Исправлены баги в анти-телепорте при выходе из транспорта v1.9.31 Изменения: * Улучшено обнаружение FlyHack'ов пешком с разными анимациями * Возможность подключать локализацию самостоятельно до подключения античита * Уменьшена чувствительность анти-SpeedHack'а для танка (modelid 432) * Изменены настройки анти-флуда для паблика OnPlayerExitVehicle v1.9.32 Изменения: * Добавлена рассинхронизация OnTrailerUpdate после кика читера на время задержки (для версии сервера r2) * Добавлены исключающие проверки для NPC в некоторых пабликах Исправления: * Подправлены цены для некоторых тюнинг-компонентов в стандартных мастерских Баги: См. раздел Issues. Если вы нашли баг, пожалуйста, напишите о нём в этой теме. Благодарности: Magic_York, Roberto_York, TheHero, Nike_33, Vitalik_Gonsor, Mix_Rargard, Unisheld, f0Re3t - тестирование ZiGGi, Urukhay, Yashas, theYiin, RaefaldhiAmartya, PatchwerkQWER, kvann, rt-2 - советы по коду Carper - Немецкий перевод Jstylezzz - Голландский перевод J4Rr3x - Итальянский перевод Alex Westbrook, JustBored - Испанский перевод lashona, ArthourP - Грузинский перевод wampiros6 - Польский перевод DeitY, Dragony92 - Сербский перевод NicK_ - PT/BR перевод KyleSmith - Улучшенный Английский перевод M4D - Персидский (Farsi) перевод Valera_Kovshikov - Украинский перевод RaefaldhiAmartya - Индонезийский перевод vannesenn - Хорватский перевод j3rry, vic1997 - Французский перевод zaibaslr2 - Литовский перевод UnforgiveNNN - Румынский перевод Pedro. - Венгерский перевод Ben_Lovejoy - Финский перевод Rengar - Латвийский перевод bgedition - Болгарский перевод Jensenn - Турецкий перевод Sanady - Словацкий перевод Grig - Армянский перевод SooBad - Чешский перевод В скрипте также присутствуют материалы сторонних проектов с открытым исходным кодом. P.s. Этот античит я нашел в интернете, и я очень надеюсь, что он будет вам полезен. Удачи в использовании!
  5. MOP TTEX

    Мод с нуля

    Всем привет, с Вами @MOP TTEX. Сегодня я начинаю писать мод с нуля для форума. Пожалуйста, не пишите Ваши "спасибо/уже было/ниче нового не придумал?" - я буду все обновления скидывать сюда. Спасибо) Для начала создадим базу данных "server". В ней сделаем таблицу user. Содержимое: ID INT AUTO INCREMENT, Name VAR CHAR (24), Pass VAR CHAR (24), Skin INT, Sex INT. Теперь перейдем к самому моду. Создаем новый файл (CTRL + N) Кидаем это в начало: #include a_mysql #define MPN MAX_PLAYER_NAME//шоб дофига букв не писать #define SQL_HOST "localhost"//хост для бд #define SQL_USER "root"//логин бд #define SQL_DB "server"//имя бд #define SQL_PASS ""//пароль #define SERVER_NAME "CR-MP.RU RolePlay | All So Cool"// - для удобства название сервера в hostname #define SERVER_VERSION "0.0.1"// - для удобства версия сервера #define SERVER_MAP "Где-то в России..." // - для удобства карта сервера #define MP MAX_PLAYERS//шоб дофига букв не писать forward FindPlayer(i); forward LoadRegister(i); forward LoadLogin(i); forward Login(playerid); enum PDATE { pPass[64],//пароль pName[MPN],//имя pSex,//пол игрока pSkin,//Скин игрока }; enum { REG, REG1, REG2, LOG } new pDate[MAX_PLAYERS][PDATE];//массив с нашими данными аккаунта new mysql_connect_id;// переменная подключения к БД new PlayerLogged[MP];//проверка залогинился игрок или нет В OnGameModeInit mysql_connect_id = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);//собственно подключение к бд SetGameModeText(SERVER_VERSION);//ставим версию в мультиплеере new string[8+2+20] = "hostname %s";//ставим название в мультиплеере format(string, 30, string, SERVER_NAME);//ставим версию в мультиплеере В OnGameModeExit mysql_close(mysql_connect_id); В OnPlayerRequestClass if(PlayerLogged[playerid]) return SpawnPlayer(playerid);//если нажал F4 - спавним В OnPlayerConnect GetPlayerName(playerid, pDate[playerid][pName], MPN);//узнаем имя сразу при подключении PlayerLogged[playerid] = 0;//ставим логин на 0, то есть он не залогинен new string[31+24+7+5] = "SELECT * FROM `user` WHERE `Name` = '%s'";//форматируем запрос << есть ли аккаунт с таким именем >> format(string, 68, string, pDate[playerid][pName]);//как и выше mysql_tquery(mysql_connect_id, string, "FindPlayer", "i", playerid);//собсна отправляем запросчег Создаем дополнительные паблики public Login(playerid) { new rows, fields; cache_get_data(rows, fields); if(!rows) { SendClientMessage(playerid, 0x33aa33aa, "Ошибка!"); Kick(playerid); return 1; } pDate[playerid][pSex] = cache_get_field_content_int(0, "Sex", mysql_connect_id); pDate[playerid][pSkin] = cache_get_field_content_int(0, "Skin", mysql_connect_id); PlayerLogged[playerid] = 1; SpawnPlayer(playerid); return 1; } stock SPS(playerid, man, woman) { switch(pDate[playerid][pSex]) { case 1: { pDate[playerid][pSkin] = man; SetPlayerSkin(playerid, man); } case 2: { pDate[playerid][pSkin] = woman; SetPlayerSkin(playerid, woman); } } return 1; } public FindPlayer(i) { new rows, fields; cache_get_data(rows, fields); if(!rows) { SetTimerEx("LoadRegister", 2500, false, "i", i);// если аккаунта нет - выводим регистрацию через 2.5 секунды (хз зачем :) ) return 1; } cache_get_field_content(0, "Pass", pDate[i][pPass], mysql_connect_id, 64);//унаем какой пароль SetTimerEx("LoadLogin", 2500, false, "i", i);//аккаунт есть - выводим логин return 1; } public LoadRegister(i) { ShowPlayerDialog(i, REG, DIALOG_STYLE_INPUT, "Регистрация", "\tДобро пожаловать на "SERVER_NAME"\n\n{33aa33}Ваш аккаунт не зарегистрирован...\nВведите свой пароль в окошко ниже:", ">>", ""); return 1; } public LoadLogin(i) { ShowPlayerDialog(i, LOG, DIALOG_STYLE_INPUT, "Авторизация", "\tДобро пожаловать на "SERVER_NAME"\n\n{33aa33}Ваш аккаунт зарегистрирован...\nВведите свой пароль в окошко ниже:", ">>", ""); return 1; } И наконец в OnDialogResponse new string[512];//по возможности можете увеличить switch(dialogid) { case REG: { if(!response) return Kick(playerid);//отказался? пшел вон! if(strlen(inputtext) < 6) return LoadRegister(playerid);//если меньше 6 символов format(pDate[playerid][pPass], (64), "%s", (inputtext)); ShowPlayerDialog(playerid, REG1, DIALOG_STYLE_LIST, "Выберите пол:", "- Мужской\n- Женский", ">>", ""); return 1; } case REG1: { if(!response) return Kick(playerid);//опять отказался? опять пшел вон :) ! pDate[playerid][pSex] = listitem+1;//устанавливаем пол SPS(playerid, 14, 13);//ставим скин PlayerLogged[playerid] = 1;//даем логин SpawnPlayer(playerid);//спавним format(string, 177, "INSERT INTO `user` (`Name`, `Pass`, `Sex`, `Skin`) VALUES ('%s', '%s', '%d', '%d')", pDate[playerid][pName], pDate[playerid][pPass], pDate[playerid][pSex], pDate[playerid][pSex]); mysql_tquery(mysql_connect_id, string);//добавляем аккаунт в БД return 1; } case LOG: { if(!response) return Kick(playerid);//отказался? пшел вон! if(strlen(inputtext) < 6) return LoadLogin(playerid);//если меньше 6 символов if(strcmp(pDate[playerid][pPass], (inputtext))) return LoadLogin(playerid);//если неверный format(string, 128, "SELECT * FROM `user` WHERE `Name` = '%s'", pDate[playerid][pName]); mysql_tquery(mysql_connect_id, string, "Login", "i", playerid); return 1; } } Все. К сожалению скриншотов нет - не у себя дома -> нет криминалки. Надеюсь, кому то пригодится) Автор: MOP TTEX Увидел, что в этом нуждается ChillyWilly, решил делать для всего форума)
  6. Reyn

    Handling Editor 0.3.7

    Всем привет пользователи форума cr-mp.ru в данном уроке я напишу "Как подключить Handling Editor к чистому серверу CRMP 0.3.7" Примечание: Данная тема актуально только тем, кто создает сервер в CRMP 0.3.7 для 0.3e она не подходит. И так! Для начала нам нужно скачать чистый сервер 0.3.7 2.4 версии, скачать можно тут *тык*(Версия сервера для Windows) или *тык*(Версия сервера для Linux) Распаковываем сервер в любую вам удобную папку и скачиваем теперь сам Handling Editor 1.4 *тык* Открываем архив с Handling Editor`om у нас много папок, но нужны только 2 файла и 1 папка: mp_handling.inc кидаем по пути pawno>includes handling_editor.pwn кидаем в filterscripts Открываем папку bin в ней будут 3 файла Их нужно перенести в папку plugins, но в чистой версии сервера её нет и её нужно создать с названием "plugins" и все с папки bin перекинуть именно туда. Теперь открываем pawno.exe и нажимаем в меню File>Open заходим в папку filterscripts и открываем handling_editor.pwn и делаем компиляцию "F6" Теперь открываем server.cfg в нём прописываем строку plugins делаем отступ и пишем mp_handling(Для Windows) mp_handling.so(Для Linux) Теперь ищем строку filterscripts в которой прописываем handling_editor Должно получиться так: Сохраняем и запускаем сервер, теперь после того как вы спавнитесь у вас выходит надпись с командой Usage: /heditor Это означает что Handling Edtor у вас полностью работает! Желаю удачи в дальнейшей доработке Handling`a Советую посмотреть документацию *тык* Автор создания данной статьи: Я(Reyn)
  7. Maks_Pilipenko

    Пишем мод с 0 (Урок 1)

    Кратко о том что мы будем делать. Данные уроки будут посвящены написанию игрового мода crmp с new.pwn. Мод будет жанра РП, написан на файловой системе с использованием инклуда mxINI. Краткий план разработки на ближайшее время: Основа Мода. - Система Регистрации - Загрузка сохранения аккаунта. - Система Домов - Система Бизнесов - Система Транспорта - Система Банка. Это план на написание основы. После этого мод начнет заполнятся фракциями, работами и т.п. Данный урок, будет посвящен началу разработки, и написанию системы регистрации, и загрузки сохранения аккаунта. Пожалуй начнём. Действие Первое. Нужные файлы, и настройка сервера: Качаем последнюю версию сервера sa-mp с офф. сайта. Распаковываем сервер в любую удобную для вас папку. Открываем server.cfg, и меняем rcon_password changename, на свой пароль, из строки filterscripts, убираем все FS которые включены. Меняем gamemode, на new. Качаем последнюю версию инклуда mxINI. Открываем папку pawno, в папке с вашим сервером, папку include, и ложем инклуд mxINI, в эту папку. Заходи в папку gamemodes, и удаляем все моды которые там есть ( для удобства ). Заходим в папку pawno, и открываем программу pawno.exe. Слева, в углу, нажимаем на кнопку new. Пред вами то, что в ближайшее время, будет нашим модом. Нажимаем F5, и нам предлагают выбрать папку, и имя будущего мода. Выбираем папку gamemodes, в папке с вашим сервером, и имя файла задаём new . Пробуем запустить мод, зайдя в папку с сервером, и запустим файл samp-server.exe . Если сервер запустился, мы всё сделали правильно, настройка сервера закончена. Действие второе. Удаление лишнего из мода: Открываем наш мод. Первое что бросается нам в глаза, это #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } #endif Вот это нам не нужно. Удаляем. Находим паблик public OnGameModeInit() { // Don't use these lines if it's a filterscript SetGameModeText("Blank Script"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } И после него, вставляем main() { print("\n----------------------------------"); print(" Название вашего мода, у меня будет cr-mp.ru"); print("----------------------------------\n"); } В самом начале мода, мы можем видеть такую строку. #include <a_samp> Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд: #include <mxINI> Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно. Находим строку SetGameModeText("Blank Script"); Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё. SetGameModeText("cr-mp.ru Mode"); Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации. Действие Третье. Сохранение аккаунта. Переходим к созданию того, чем мы будет пользоваться постоянно. Это данные о аккаунте. После строки с добавлением нашего инклуда, создаём масив, с информацией о игроке. enum pInfo { pPass[64],// Масив с паролем } new Player[MAX_PLAYERS][pInfo]; Теперь мы можем записать пароль, определённого игрока, чем мы сейчас и займёмся. Опускаемся в самый конец мода, и создаём там, вот это: stock SavePlayer(playerid) { new string[64];// Масив с путём для файла new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string, sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения iniFile = ini_openFile(string);// Открываем файл по тому пути который указали. ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл ini_closeFile(iniFile);// Закрываем файл } Нажимаем F5, и мод компилируется. Если ошибок нет, то вы сделали всё правильно. Теперь нам надо зайти в папку с сервером, открыть папку scriptfiles, и в ней добавить папку players. Сохранение готово. Действие Четвёртое. Создание регистрации и загрузки игрока. Для создания регистрации, надо узнать, есть ли игрок с таким именем на сервере, для начала нужно после объявления нашего инклуда, вставить следующее: new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет Далее ищем паблик OnPlayerConnect. И в него добавляем: new playername[MAX_PLAYER_NAME];// Масив для имени игрока new string[128];// Путь до папки с именем игрока GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока format(string,sizeof(string),"players/%s.ini", playername);// Путь к файлу с аккаунтом if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие. { PAccount[playerid] = 1;// Аккаунт есть } else// Если файла с именем нет, то выполняется это действие. { PAccount[playerid] = 0;// Аккаунта нет } Теперь ищем паблик, OnPlayerRequestClass, он покажет нам диалог с логином, или регистрацией, в него добавляем. if(PAccount[playerid] == 1)// Если аккаунт есть { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста. } else// Если аккаунта нет { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста. } Диалоги мы показали, но теперь надо заставить его работать. Для этого нам надо сделать функцию загрузки и регистрации игрока. Этим мы и займёмся. В конец мода, вставляем. forward OnPlayerRegister(playerid, password[]); public OnPlayerRegister(playerid, password[])// Паблик регистрации { if(IsPlayerConnected(playerid)) { new string[64];// Масив с путём для файла new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players if(iniFile < 0)// Если Файла нет { iniFile = ini_openFile(string);// Открываем } if(iniFile >= 0)// Если файл есть { strmid(Player[playerid][pPass],password,0,strlen(password),255);// Присваиваем масиву pPass, значение password[] ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл ini_closeFile(iniFile);// Закрываем файл ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. } } return 1; } Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем. forward OnPlayerLogin(playerid,password[]); public OnPlayerLogin(playerid,password[]) { if(IsPlayerConnected(playerid))// Проверка на подключение игрока { new string[64];// Масив с путём для файла new pass[64];// Масив с паролем new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки new iniFile = ini_openFile(string);// Открываем файл ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк { ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль ini_closeFile(iniFile);// Закрываем файл } else// Если пароль не верен.. { ini_closeFile(iniFile);// Закрываем файл ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. return 1; } SendClientMessage(playerid,0xFF00000,"Добро пожаловать на наш сервер");// Выводим игрок сообщение SpawnPlayer(playerid);// Спавним игрока } return 1; } Функция регистрации есть, логина есть, осталось заставить их работать, для этого находим паблик OnDialogResponse и вставляем в него: if(dialogid == 1)// Ид диалога Для Логина { if(response)// Если игрок нажал первую кнопку входа { if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога OnPlayerLogin(playerid,pass);// Запускаем паблик входа } else// Если игрок нажал Esc, вернём ему диалог { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. } } if(dialogid == 2)// Ид диалога для регистрации { if(response)// Если игрок нажал первую кнопку { if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации } else// Если игрок нажал Esc, вернём ему диалог { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. } } Конец первой части. Полезные ссылки: mxINI - mxINI.inc Автор урока: Vovan228
  8. Всем привет дорогие пользователи портала CR-MP Хочу выложить урок по открытию окон в автомобиле! На данном портале не нашел,так вот выкладываю я! Сразу скажу,что урок рабочий, к самого в моде стоит данная система! И так начнем: Создаем команду открытия окон: CMD:okno(playerid,params[]) { if(GetPlayerState(playerid) != 2) return SendClientMessage(playerid,-1,"Ты не на водительском месте."); if(IsNoWindowsCar(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_SYSTEM, "На этом транспортном средство нельзя открыть окна!"); if(sscanf(params, "d", params[0])) { SendClientMessage(playerid,-1,"/window [id окна]"); SendClientMessage(playerid,-1,"1 - водительское | 2 - пассажирское(перед) | 3 - зад(левое) | 4 - зад(правое)"); return 1; } if(params[0] > 4 || params[0] < 1) return SendClientMessage(playerid,-1,"1 - водительское | 2 - пассажирское(перед) | 3 - зад(левое) | 4 - зад(правое)"); new driver, passenger, backleft, backright; GetVehicleParamsCarWindows(GetPlayerVehicleID(playerid), driver, passenger, backleft, backright); switch(params[0]) { case 1: driver = !driver ? (1) : (0); case 2: passenger = !passenger ? (1) : (0); case 3: backleft = !backleft ? (1) : (0); case 4: backright = !backright ? (1) : (0); } SetVehicleParamsCarWindows(GetPlayerVehicleID(playerid), driver, passenger, backleft, backright); return 1; } Ну или такую команду if(!strcmp(cmd, "/okno", true)) { if(GetPlayerState(playerid) != 2) return SendClientMessage(playerid,-1,"Ты не на водительском месте."); if(IsNoWindowsCar(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, -1, "На этом транспортном средство нельзя открыть окна!"); if(sscanf(params, "d", params[0])) { SendClientMessage(playerid,-1,"/window [id окна]"); SendClientMessage(playerid,-1,"1 - водительское | 2 - пассажирское(перед) | 3 - зад(левое) | 4 - зад(правое)"); return 1; } if(params[0] > 4 || params[0] < 1) return SendClientMessage(playerid,-1,"1 - водительское | 2 - пассажирское(перед) | 3 - зад(левое) | 4 - зад(правое)"); new driver, passenger, backleft, backright; GetVehicleParamsCarWindows(GetPlayerVehicleID(playerid), driver, passenger, backleft, backright); switch(params[0]) { case 1: driver = !driver ? (1) : (0); case 2: passenger = !passenger ? (1) : (0); case 3: backleft = !backleft ? (1) : (0); case 4: backright = !backright ? (1) : (0); } SetVehicleParamsCarWindows(GetPlayerVehicleID(playerid), driver, passenger, backleft, backright); return 1; } okno - Замените на свою команду! Ну и в конец мода вставляем: stock IsNoWindowsCar(vehicleid) { new car = GetVehicleModel(vehicleid); switch(car) { case 481, 510, 509,424,448,457,461,462,463,464,465,468,471,501,521,522,523,530,531,539,568,571,572,581,586,594: return true; } return false; } Если где то в id авто есть ошибки,если вместо авто есть мото то измените! Ну вот и все! Пользуйтесь на здоровье! Думаю для RP серверов подойдет))) Автор урока: Неизвестен. Слил данный урок: Marvellous (Я)
  9. Сегодня я объясню как сделать разводной мост по таймеру . мост будет открывается раз в 25 минут! Подойдет для любого мода даже самп но там придется менять объект и координаты! И так начинаем , ко всем new new mostik[2]; дальше мы в public OnGameModeInit добавим таймер который будет открывать мост каждые 25 минут SetTimer("OpenMostik", 1000*60*25, true ) ;// если хотите через 30 или больше минут то меняйте 25 заменим объекты моста id 2168 заменяем на это mostik[0] = CreateObject(2168,2747.3437500,-1142.8994141,21.6000004,0.0000000,0.0000000,179.9945068); mostik[1] = CreateObject(2168,2747.2998047,-1262.0000000,21.6000004,0.0000000,0.0000000,0.0000000); дальше добавляем в конец мода forward OpenMostik(); public OpenMostik() { MoveObject(mostik[0],2747.3999023,-1142.8000488,22.1000004,0.015,45.7489014,0.0000000,179.9945068);// объекты закрытого моста MoveObject(mostik[1],2747.3999023,-1262.0000000,22.1000004,0.015,45.7441406,0.0000000,0.0000000);// объекты закрытого моста SetTimerEx("CloseGate",80*1000,0,"i",mostik[0]);// где 80*100 то 8 секунд открывается мост!можете увеличить SetTimerEx("CloseGate",80*1000,0,"i",mostik[1]);// где 80*100 то 8 секунд открывается мост!можете увеличить return 1; } и еще один паблик в конец мода! forward CloseGate(gate); public CloseGate(gate) { if(gate == mostik[0]) return MoveObject(mostik[0], 2747.3437500,-1142.8994141,21.6000003,0.015,0.0000000,0.0000000,179.994506); //object(barrierturn)(8)// открытые кординаты моста if(gate == mostik[1]) return MoveObject(mostik[1], 2747.2998047,-1262.0000000,21.6000003,0.015,0.0000000,0.0000000,0.0000000); //object(barrierturn)(8)//открытые кординаты моста return 1; } Вот собственно и все!если кому надо проверить работу способность вот команда! if (strcmp("/mostik", cmdtext, true, 10) == 0) { OpenMostik(); return true; } Автор: Банан
  10. Alonso

    MySQL 39-6

    Вроде не видел тут такого. Автор: я (Alonso) Создать подключение к БД MySQL: new mysql_connect_id; public OnGameModeInit() { mysql_connect(host, user, database, password); return 1; } Где host - IP Адрес хостинга, если с локальной сети - 127.0.0.1 user - Имя пользователя, для ЛС - root database - Имя базы данных password - Пароль от базы данных, на ЛС - пустое поле (ничего, даже пробелов). Добавить строку в таблицу: f(query_string, "INSERT INTO `table` (`new`) VALUES ('%s')", new2); mysql_tquery(mysql_connect_id, query_string); table - название таблицы, в которой создаем строку new - название столбца (переменная в таблице) %s - здесь может быть и другой (оператор) ... не знаю как его назвать (%d, %f) new2 - название переменной, значение которой вводим в таблицу Проверить, имеется ли строка, с данным значением: f(query_string, "SELECT * FROM `table` WHERE `new` = '%s'", new2); mysql_tquery(mysql_connect_id, query_string, "public", "i", playerid); table - название таблицы, в которой создаем строку new - название столбца (переменная в таблице) %s - здесь может быть и другой (оператор) ... не знаю как его назвать (%d, %f) new2 - название переменной, значение которой вводим в таблицу public - паблик, в котором будет результат поиска public public(playerid) { new rows, fields; cache_get_data(rows, fields); if(!rows) return 1; - если строки с таким значением нет - если строка с таким значением есть return 1; } Сохраняем что либо/меняем значения в таблице: 1) f(query_string, "UPDATE `table` SET `new` = '%d' WHERE 1", new1); mysql_tquery(mysql_connect_id, query_string); 2) f(query_string, "UPDATE `table` SET `new` = '%d' WHERE `new1` = '%d'", new2, new3); mysql_tquery(mysql_connect_id, query_string); 1) table - название таблицы, в которой создаем строку new - название столбца (переменная в таблице) %d - здесь может быть и другой (оператор) ... не знаю как его назвать (%s, %f) new1 - название переменной, значение которой вводим в таблицу 2) table - название таблицы, в которой создаем строку new - название столбца (переменная в таблице) new1 - название столбца, куда сохранять (получается, где new1 == new3) %d - здесь может быть и другой (оператор) ... не знаю как его назвать (%s, %f) new2 - название переменной, значение которой вводим в таблицу
  11. Всем привет:) Я последнее время вижу очень много вопросов:"как подключить бд mysql?".. И я решил поделиться с вами своими знаниями :) Итак,начнем. Для начала скачиваем программу "DENWER",устанавливаем. Запускаем Start Denwer,ждем,пока denwer загрузится,и закроется окно. После того,как окно закрылось,заходим на сайт "localhost". Листаем в самый низ,и жмем на строчку "phpMyAdmin - администратирование СУБД MySQL". Далее у нас открывается панель управление базами данных MySQL. В верхних вкладках нажимаем "База данных",далее под строчкой "Создать базу данных"есть 2 строчки,заполняем только первую,пишем свое название,например "TESTBD",потом нажимаем создать. В левой колонке,где написано "Недавние таблицы"ищем свою базу данных "TESTBD",нажимаем на нее. Далее в верхних вкладках нажимаем "Импорт",там жмем "Выбрать файл"и выбираем нашу базу данных с расширением ".SQL",и в листаем в самый низ,там есть кнопочка "OK",нажимаем ее,и все,наша бд залита на хостинг,теперь остается самое легкое,подключаем базу данных в моде. Открываем "Pawno",выбираем наш мод(расписывать не буду,как нужно открывать мод,думаю все знают,если кто-то не знает,пишите в комментарии). В поиске пишем "SQL",ищете до тех пор,пока не найдете вот такие строки: #define SQL_HOST "" - тут пишем название хостинга,если локальный хостинг,то пишем "localhost". #define SQL_USER "" - тут пишем логин,если локальный хостинг,то пишем "root". #define SQL_PASS "" - тут пароль,если локальный хостинг,то оставляем пустые кавычки "". #define SQL_DB "" - тут название бд,тут пишем свое название бд,которое регистрировали на localhost. Если же вы хотите подключить базу данных на свой хостинг,к примеру "Ice-Host.ru",то процедура та же самая,только тут уже нам не понадобится Denwer и localhost!!! Заходите на свой хостинг,открываете панель управления MySQL,там все так же,как и на localhost!!! В моде прописываете свои данные от хостинга!!! P.S.Если что-то забыл - пишите в комментарии:) Я постарался объяснить все предельно просто,и точно. Автор:Jeazy
  12. Сервер не загружается стоит надпись "Unknown" Решение проблемы убираем Unknown: Если Linux - заходите в server.cfg в строке plugins должны стоять названия плагинов с .so, если у вас стоит допустим streamer - нужно заменить на streamer.so Пример: streamer.so dc_cmd.so sscanf.so mysql.so Если Windows - название плагинов должно быть прописано без .so Пример: streamer dc_cmd sscanf mysql Автор урока: Я
  13. Demons_Queens

    Создание команды с 0.

    Всем привет , нет так я давно научился программированию.Так вот , хотел бы научить ещё кого-то программированию , а точнее создание команд на DC_CMD + SSCANF. Начнём с простой команды , например: /hp выдать себе ХП. CMD:hp(playerid) // Мы будем использовать только id игрока. { if(PlayerInfo[playerid][pAdmin] < 1); // "playerid"-ид игрока "pAdmin"- проверка на админа"< 1" Проверка админа на его ранг.Если у администратора меньше ранг то , какой-либо команды он не сможет её использовать. SetPlayerHealth(playerid,100); // SetPlayerHealth = функция выдачи игроку ХП. "Playerid"-id игрока "100" урвоень ХП получается SetPlayerHealth(ид игрока,100 уровень хп) как-то так) return 1; // Прекращение работы команды } Вот и написана самая простая команда. Теперь немного по сложнее с выбором id's пример команды: /sp [id] - зареспавнить игрока по id's CMD:sp(playerid,params[]) // playerid id игрока - парамс - параметры команды. { if(PlayerInfo[playerid][pAdmin] < 1); // Мы уже знаем , что это. if(sscanf(params, "d", params[0])) return SCM(playerid, COLOR_WHITE, "Введите: /sp [id]"); // И так. params это параметр команды , "d" это id кого-то игрока , если мы введём просто /sp нам выдаст сообщение "Введите: /sp id" А если мы укажем ид то будет работать команда. SpawnPlayer(params[0]); // SpawnPlayer - спавним игрока , params[0] это id игрока , то есть мы ввели /sp id(params[0]) игрока , и мы игрока заспавнили его.. return 1; } Позже ещё уроков по созданию команд напишу т.к мало времени , вроде понятно объяснил :) Всем добро и позитива. P.S Если есть на форуме похожие уроки , простите не заметил тогда :3
  14. Vladimir_Kulkov

    spawn по уровню

    Приветствую всех. Выкладываю свой урок по спавну по определенному уровню. Приступим. В enum pInfo добавим pLevel После этого идем в public OnPlayerSpawn(playerid) Добавим туда сам спавн и проверку на уровень. If(PlayerInfo[playerid][pLevel] = 1)//Проверка на уровень { SetPlayerPos(playerid, x, y, z);//Координаты спавна SetPlayerInterior(playerid, ид интерьера, по умолчанию 0); SetPlayerVirtualWorld(playerid, ид вирт.мира); SetPlayerFacingAngle(playerid, угол поворота(т.е куда смотрит игрок); return 1; } На этом все если что-то забыл отпишите добавлю. Автор: Я(Vladimir_Kulkov) , или же вудик При размещении на другой портал указывать автора. P.s. писал с телефона. Модераторы возьмите под "код"
  15. SCRIPTMAN

    Выдача админки

    Привет народ! Сейчас лето, куча свободного времени, пожалуй помимо тренировок я смогу уделять время скриптингу, так как я пишу мод с нуля, решил с вами поделиться одной простенькой командой, а именно выдачей админки игроку, команда простенькая, но согласитесь - нужная. Сама команда: CMD:makeadmin(playerid, params[]) { new string[90]; if(Player[playerid][pAdmin] < 6) return ESCM; if(sscanf(params, "iii", params[0], params[1], params[2])) return SCM(playerid, COLOR_WHITE, "Введите: /makeadmin [id] [AdminRank [AdminSkin]"); if(!IsPlayerConnected(params[0])) return ISCM; if(Login[params[0]] == false) return LSCM; if(params[2] < 0 || params[2] > 299) return SCM(playerid, COLOR_WHITE, "Скин администратора должен быть от 0 до 299!"); if(params[1] < 0 || params[1] > 6) return SCM(playerid, COLOR_WHITE, "Уровень админки должен быть от 0 до 6!"); Player[params[0]][pAdmin] = params[1]; Player[params[0]][pSkin] = params[2]; f("Вы выдали %s %d уровень администратора. ID скина: %d. Испытательный срок: 3 дня.", GN(params[0]), params[1], params[2]); SCM(playerid, COLOR_NATIVE, string); f("Создатель %s выдал вам %d уровень администратора. ID скина: %d. Испытательный срок: 3 дня.", GN(playerid), params[1], params[2]); SCM(params[0], COLOR_NATIVE, string); return true; } Да, я вставил её из своего мода, сейчас буду объяснять, что заменить. Я добавил к этой команде ещё и выдачу скина, честно говоря команду на работоспособность не проверял, но, думаю будет работать. В общем, начнём. "ESCM" - это у меня сокращённый дефайн, что игрок не уполномочен использовать эту команду. "ISCM" - это у меня сокращённый дефайн, что игрок оффлайн - заменяете. "LSCM" - это у меня сокращённый дефайн, что игрок не авторизован - заменяете. "GN" - это у меня никнейм игрока, заменяете на своё. Кстати, возможно вам нужно будет заменить "if(Login[params[0]] == false)" - проверка, авторизован ли игрок. "f(" - сокращённый формат. "SCM" - сокращённый "SendClientMessage". Кстати, возможно "pAdmin", "pSkin", "Player[][]" вам тоже придётся заменить на свои, кто не понял, что значит "Player[][]" - это примерно: "Player[player][pAdmin]". Ну, а кому лень заменять на своё, то вот: #define ESCM SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать данную команду!") #define ISCM SCM(playerid, COLOR_GREY, "Игрок оффлайн!") #define LSCM SCM(playerid, COLOR_GREY, "Игрок не авторизован!") #define f( format(string, sizeof(string), #define GN(%1) Player[%1][pName] #define SCM SendClientMessage На этом всё, не видел данную команду на форуме, да и не смотрел. P.S: Администрация, простите, если не туда написал тему, забыл уже :) Автор: Shapik
  16. Привет друзья! Хорошо писать уроки я не умею, так что, придётся вам понимать мои непонятные слова Давайте же начнём! 1. Создание основных функций а) Для начала в "enum pInfo" создадим массив pAdmin. Пример: enum pInfo { Ваш массив пример pSave, pName, pLeader, pAdmin } P.S Всё что у меня вы видите выше, добавлять не нужно, кроме "pAdmin" б) Создадим остальные функции, что касается сохранения. Там, где у вас регистрация аккаунта нужно добавить: ini_setInteger(File, "Admin", Player[playerid][pAdmin]); Там, где у вас авторизация нужно добавить: iniGetInt(File, "Admin", Player[playerid][pAdmin]); Там, где у вас начисляются все скажем так данные, ну вы поняли , нужно вставить: Player[playerid][pAdmin] = 0; Это там, где у вас к примеру: Player[playerid][pLevel] = 1; Ну или какой у вас там выдаётся уровень после регистрации. Туда нужно вставить как раз-то это: Player[playerid][pAdmin] = 0; Там, где у вас происходит сохранение аккаунта, у меня это stock SavePlayer(playerid), туда нужно добавить вот это: ini_setInteger(File, "Admin", Player[playerid][pAdmin]); Ну в принципе всё, ах да, ещё. Если кто-то хочет, чтобы указывался пароль из имя.cfg, ну вы поняли. Нужно добавить. 2. Создание ввода админ пароля для каждого игрока отдельно, ну вы поняли а) Создадим в "enum pInfo" массив pAkey б) Остальные функции, что касается сохранения. Там, где у вас регистрация аккаунта, добавьте туда: ini_setInteger(File, "Admin Pass", Player[playerid][pAkey]); Там, где у вас происходит регистрация аккаунта, добавьте: iniGetInt(File, "Admin Pass", Player[playerid][pAkey]); Там, где у вас сохранение данных аккаунта игрока, добавьте: ini_setInteger(File, "Admin Pass", Player[playerid][pAkey]); У меня это stock SavePlayer(playerid) Ну вот и всё. Вот вам в помощь диалог проверки админ пароля: 3. Диалог для админ пароля: case 17: { if(response) { if(!strlen(inputtext)) return SPD(playerid, 17, DSI, "{DFB3CA}Админ авторизация", "{FFFFFF}Для админ авторизации, пожалуйста введите админ-пароль:", "Далее", "Выход"); for(new i = strlen(inputtext); i != 0; --i) switch(inputtext[i]) { case 'А'..'Я', 'а'..'я': return SPD(playerid, 17, DSI, "{DFB3CA}Ошибка!", "{BEBEBE}Админ-пароль не должен состоять из русских символов\nПожалуйста, смените расскладку клавиатуры и введите админ-пароль повторно:", "Далее", "Выход"); } if(strlen(inputtext) < 6 || strlen(inputtext) > 20) return SPD(playerid, 17, DSI, "{DFB3CA}Ошибка!", "{BEBEBE}Длина админ-пароля должна быть от {FFFF00}6-ти {BEBEBE}до {FFFF00}20-ти {BEBEBE}символов\nВведите свой админ-пароль повторно:", "Далее", "Выход"); if(strval(inputtext) == Player[playerid][pAkey]) { Dostup[playerid] = true; SCM(playerid, COLOR_GREEN, "Вы успешно авторизовались!"); } else { SCM(playerid, COLOR_RED, "Пароль введён не верно!"); SPD(playerid, 17, DSI, "{DFB3CA}Админ авторизация", "{FFFFFF}Для админ авторизации, пожалуйста введите админ-пароль:", "Далее", "Выход"); } } } Но, чтобы было без ошибок. Добавьте: new bool: Dostup[MAX_PLAYERS]; Ещё, я создавал такой сток. "stock Clear(playerid)", создайте и вы. и добавьте туда: Dostup[playerid] = false; Теперь, в OnPlayerConnect, добавьте: Clear(playerid); Я повторюсь, что 3 пункт это диалог с админ авторизацией, вы конечно же можете написать свой, я просто предложил. Ах, да, ещё добавьте: Но! Если у вас 17 диалог занят, замените #define adm if(Player[playerid][pAdmin] > 0 && Dostup[playerid] == false) return SPD(playerid, 17, DSI, "{A600FF}Админ авторизация", "{FFFFFF}Для админ авторизации, пожалуйста введите админ-пароль:", "Далее", "Выход"); Я видел, писали, что есть такой урок на форуме, но хоть убейте, искал, нету его там и поиском пользовался и смотрел. Если у вас будут какие-то исправления/дополнения пишите, не стесняйтесь. Всем спасибо, кто прочитал, а может и взял эту систему. Буду рад любой критике, ведь критика делает нас лучше Автор: LADA(То есть я)
  17. Для этого нам понадобится iPLEOMAX's TextDraw Editor TXD Workshop 5.0 Данные программы можно найти на форуме,воспользовавшись поиском. И так начнём. Открываем TXD Workshop 5.0 Жмём Open TXD и выбираем(в нашем случае) hud.txd
  18. Lil__Jonson

    Местный чат

    Здравствуйте! Сегодня я покажу как сделать местный чат, и админ чат через символы ! и # Начнем: Идем в Public OnPlayerText И вставляем: //============================================================================== // Местный Чат //============================================================================== if(text[0] == '!') { new Float:P[3]; GetPlayerPos(playerid,P[0],P[1],P[2]); strdel(text,0,1); format(string,sizeof(string),"{MChat} %s (ID:%d): {AFAFAF}%s",PlayerInfo[playerid][pName],playerid,text[1]); for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) || !IsPlayerInRangeOfPoint(i,30.0,P[0],P[1],P[2])) continue; SendClientMessage(i,0xFFFFFFAA,string); continue; } return 0; } Туда же вставляем: //========================================================================== // Administration Chat //========================================================================== if(text[0] == '#' && GetPVarInt(playerid,"Level") >= 1) { format(string,sizeof(string),"Админ Чат: %s: %s",PlayerInfo[playerid][pName],text[1]); MessageToAdmins(green,string); return false; } MessageToAdmins(color,const string[]) { for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) == 1) if(GetPVarInt(i,"Level") >= 1) SendClientMessage(i, color, string); return true; } Вот и все) Вырезал со своего мода.
  19. Дорогие пользователи портала CR-MP Как мне и сказали что бы я продолжал этим заниматься,значит займусь тщательно! Обещать не буду что в день буду от 50 скриптов или же мануалов выкладывать! Но до 10-15 думаю смогу!(ибо учусь и программированию и пользователям добро делаю) И так что будет в данном уроке? А в данном уроке я решил вам рассказать(научить) делать мигающий логотип И так начнем: Первое что мы делаем это добавляем переменную в new вставляем new Text:HelpDraw; После где у вас находится forward вставляем forward OtherTimer(); После создаем паблик в самом конце мода public OtherTimer() { for(new i = 0; i < MAX_PLAYERS; i++) { new Colors[] = { 0x659EC7FF , 0x00ff0099, 0x5E5A80FF, 0x157DECFF , 0x9E7BFFFF , 0xF778A1FF , 0x43C6DBFF , 0xC9BE62FF , 0xFBB117FF, 0xC11B17FF, 0xFBBBB9FF }; TextDrawHideForPlayer(i,HelpDraw); TextDrawColor(HelpDraw,Colors[random(sizeof(Colors))]); TextDrawShowForPlayer(i,HelpDraw); SetTimer("TextdrawColorChange", 100, 0); } } Потом идем в public OnPlayerDisconnect и вставляем следующее TextDrawHideForPlayer(playerid, HelpDraw); Потом идем в следующий public OnGameModeInit() HelpDraw = TextDrawCreate(567.378906,1.166667,"Marvellous"); TextDrawAlignment(HelpDraw,0); TextDrawBackgroundColor(HelpDraw,0x00000066); TextDrawFont(HelpDraw,3); TextDrawLetterSize(HelpDraw,0.299999,1.300000); TextDrawColor(HelpDraw,0xffffffff); TextDrawSetOutline(HelpDraw,1); TextDrawSetProportional(HelpDraw,1); И ниже вставляем следующее SetTimer("OtherTimer", 1000, 1); Ну вот и все,думаю у вас не возникнут вопросы по данному уроку! И еще да я знаю что будет нагружать сервер из-за таймера,но я не заставляю его ставить! Это решение ваше и всех пользователей,я всего лишь поделился! Копировать на другие порталы строго запрещено! Автор урока: Я fakeN Плагиат В следующий раз указывай настоящего автора!
  20. Дорогие пользователи портала CR-MP Недавно попробовал прикрепить к персонажу какой либо объект(и получилось) Теперь хочу сделать данный урок! На данном портале я его не нашел,значит выложу вам его я! И так думаю начнем! Данная функция позволяет нам прикрепить что либо к персонажу SetPlayerAttachedObject Теперь будет пример: SetPlayerAttachedObject(playerid,2, 19064, 2, 0.13, 0.0, 0.0, 0.0, 90.0, 90.0); Теперь рассмотрим каждое значения playerid-это ид игрока 2-это индекс для объекта. 19064-это ид объекта 2-это часть тела. 0.13, 0.0, 0.0, 0.0, 90.0, 90.0-это координаты размещения объекта(X,Y,Z). Теперь покажу как удалить объект с вашего персонажа RemovePlayerAttachedObject Теперь давайте сделаем пример всего что будет происходить! Что мы делаем первое,это саму команду,в которой при одевание объекта будут сниматься деньги if(strcmp(cmdtext, "/odet", true)==0) { SetPlayerAttachedObject(playerid,2, 19064, 2, 0.13, 0.0, 0.0, 0.0, 90.0, 90.0); GivePlayerMoney(playerid,-1000); //Стоимость 1000 SendClientMessage(playerid,0xF60000AA,"Вы купили объект"); return 1; } Теперь создадим команду что бы снять данный объект if(strcmp(cmdtext, "/sodet", true)==0) { for(new i=0; i<MAX_PLAYER_ATTACHED_OBJECTS; i++) { if(IsPlayerAttachedObjectSlotUsed(playerid, i)) RemovePlayerAttachedObject(playerid, i); SendClientMessage(playerid,0xF60000AA,"Вы удалили объект"); } return 1; } Вот и все на данный урок! Думаю у вас не возникнут ни каких либо вопросов! И да еще можно сделать что бы только Админ мог одевать данные вещи! Для этого делаем следующее if(strcmp(cmdtext, "/buy", true)==0) { if(pData[playerid][pAdmin] < 6) return true; SetPlayerAttachedObject(playerid,2, 19064, 2, 0.13, 0.0, 0.0, 0.0, 90.0, 90.0); GivePlayerMoney(playerid,-1000); //Стоимость 1000 SendClientMessage(playerid,0xF60000AA,"Вы купили объект"); return 1; } pData - заменяете под свое! Ну вот и все,вот такой маленький урок! Думаю кому то пригодиться может быть! Копировать на другие порталы строго запрещено! Автор урока: Я
  21. Доброй ночи,а кому то день! Много кто задается вопросом,как запустить мод на своем компьютере/ноутбуке! Но мало кто находит ответы! Так же на данном портале я не нашел данного урока! Вот я вам и расскажу как же можно легко запустить свой мод! И так начнем! Что нам для этого понадобится: 1) Сам роутер 2) Компьютер/ноутбук 3) Любо браузер 4) Сам мод 5) Ну и конечно же руки :) 1) Первое что мы будем делать,это пройдем по первой ссылке http://192.168.1.1 если у кого то не сработает,то переходим по этой http://192.168.0.1 2) Далее если все в порядке то у вас должно появиться окошко для ввода логина и пароля! Если вы не изменяли логин или пароль,то по стандарту идет Логин: admin Пароль: admin или password ,у некоторых роутеров есть на задней стенке все данные! 3) После как вы зайдете в свой личный кабинет,выберите вкладку "Перенаправление портов"(port forwarding) далее у вас должно появится что то типо данной странице
  22. Урок для новичков по поводу видеонаблюдение Приступим:
  23. Smolin

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

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

    Работа с ProgressBar'ом

    Что такое BrogressBar? ProgressBar - это Индикатор процесса/выполнения. Это элемент графического интерфейса пользователя, представляющий собой прямоугольную (в большинстве случаев) панель для отображения индексации хода или выполнения какой либо задачи. Обычно бегунок индикатора процесса заполняется слева направо.
×

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

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