Antoxa39

[Решение] Заводка двигателя

8 posts in this topic

И здрасте! Я начинающий скриптер,  и мне самому не помешали бы уроки) xD Но все же,я хочу вам дать готовый скрипт на заводку авто.
1. new engine, lights, alarm, doors, bonnet, boot, objective; // Ко всем переменным (массивам) (если сделать ее локальной, то будут ерроры)

2. Далее переходим в паблик OnPlayerStateChange. Вставляем туда это:

if(IsPlayerInAnyVehicle(playerid))
    {
        SendClientMessage(playerid,-1,"[СИСТЕМА]  Для того чтобы завести двигатель нажмите клавишу N.");
    }

3. Все,с этим пабликом закончили,идем далее! Переходим сюды OnPlayerKeyStateChange.
и вот это  все, туда!
  

  new t,b;
    t = true;
    b = false;
    new carid = GetPlayerVehicleID(playerid);
    if(newkeys & KEY_NO)
    {
        GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
        if(engine == b)
        {
              SetVehicleParamsEx(carid, t, lights, alarm, doors, bonnet, boot, objective);
        }
        else
        {
            SetVehicleParamsEx(carid, b, lights, alarm, doors, bonnet, boot, objective);
        }
    }

4. Ну вот и все!) Наш скрипт уже готов.

Edited by keyl
Причина: добавил форматирование

Заметка от _bogdan_ , создано

3.2. Код больше 10 строк необходимо брать в теги "Код" и "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Share this post


Link to post
Share on other sites

Добрый день, небольшая ошибка:

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        SendClientMessage(playerid,-1,"[СИСТЕМА]  Для того чтобы завести двигатель нажмите клавишу N.");
    }
    return true;
}

Так как у вас нет проверки на то, что игрок только что сел в машину, по сути вот она и есть.

Share this post


Link to post
Share on other sites
15 минут назад, Sleash`en сказал:

Добрый день, небольшая ошибка:


public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        SendClientMessage(playerid,-1,"[СИСТЕМА]  Для того чтобы завести двигатель нажмите клавишу N.");
    }
    return true;
}

Так как у вас нет проверки на то, что игрок только что сел в машину, по сути вот она и есть.

if(IsPlayerInAnyVehicle(playerid))
    {
        SendClientMessage(playerid,-1,"[СИСТЕМА]  Для того чтобы завести двигатель нажмите клавишу N.");
    }
это разве не проверка?

 

Share this post


Link to post
Share on other sites

@Antoxa39, просто нет смысла вызывать нативную функцию в callback, который предоставляет возможность проверить текущее местонахождение игрока без использования нативных функций :)

Share this post


Link to post
Share on other sites
1 минуту назад, Cawfee сказал:

@Antoxa39, просто нет смысла вызывать нативную функцию в callback, который предоставляет возможность проверить текущее местонахождение игрока без использования нативных функций :)

Извиняюсь,ведь я сам только изучаю павно) А так впринципе, как оцените? правильно или вообще плохо?)

Share this post


Link to post
Share on other sites

У вас стоит проверка на то, сидит ли игрок в любом виде авто, то есть:

1. Не учитывается то. за рулём он или нет, функция выдаёт "положительно" если игрок сидит в авто

2. Нет уточнений по времени и ситуации, но так как это паблик OnPlayerStateChange, то будет проверка при смене "статуса" на любой известный

А вообще код неплох, но ты видимо просто запутался в определённых функциях

P. S. Вместо true и false можно использовать 1 и 0 соответственно.

Share this post


Link to post
Share on other sites

@Antoxa39, ну, конкретно я бы учел следующие пункты:

  1. Использование глобальных переменных не есть хорошо в тех случаях, когда их можно попытаться избежать. Многие для упрощения выносят создание переменных-аргументов engine, lights, alarm, doors, bonnet, boot, objective в глобальную область памяти, хотя необходимости в этом нет (разве что лень автора исходного текста программы). То, что у вас возникают ошибки при попытках сделать эти переменными локальными, - не есть хорошо: проблему нужно разрешать, а не избегать ее, вынося создание указанных переменных в глобальную область видимости.
  2. Представим, что игрок нажал другую клавишу. В памяти будет выделено место для хранения переменных t, b и carid. Но зачем? По сути впустую выделяем место (и инициализируем переменные). Логичнее разместить их в более локальную область видимости, то есть внутри условной конструкции, предусматривающей нажатие клавиши KEY_NO.
  3. Переменные t и b имеют очень интересные и непонятные названия. Хорошо бы их переименовать.
  4. В принципе, вы можете обойтись какой-нибудь одной переменной: t или b. Соответственно, будет достаточно просто инвертировать значение этой переменной (из 0 делать 1 или из 1 делать 0 через оператор "НЕ", обозначающийся восклицательным знаком: '!').
  5. Если игрок не в автомобиле, тогда в carid будет INVALID_VEHICLE_ID, для которого будет осуществляться попытка получить состояние всех компонентов.
  6. Если игрок в автомобиле на пассажирском месте, нажатие клавиши N позволит изменить состояние двигателя на противоположное.

В результате, получилось бы что-нибудь такое:

Спойлер

public OnPlayerStateChange(playerid, newstate, oldstate) {
    if(newstate == PLAYER_STATE_DRIVER) {
        SendClientMessage(playerid,-1,"[СИСТЕМА]  Для того чтобы завести двигатель нажмите клавишу N.");
    }
    return true;
}

 


if (newkeys & KEY_NO) {
    new vehicleid = GetPlayerVehicleID(playerid);
    if (vehicleid != INVALID_VEHICLE_ID) {
        if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            new engine, lights, alarm, doors, bonnet, boot, objective;
            GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
            SetVehicleParamsEx(vehicleid, !engine, lights, alarm, doors, bonnet, boot, objective);  
        }
    }
}

 

 

Upd. Также пользователь @Sleash`en верно подметил про проверку на "игрок в автомобиле" и "игрок водитель". Я даже не обратил внимание на это 9_9

Edited by Cawfee

Share this post


Link to post
Share on other sites

@Cawfee, учту,я старался максимально коротко сделать)

@Sleash`en, ну спасибо за обьяснение) я пытался краткий скрипт двигателя. И да, я половину еще даже функций не знаю)

Edited by Cawfee

Заметка от Cawfee , создано

Для ответа пользователям используйте кнопку со значком собачки (@), а не кнопку "Цитата".

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • danya_white
      By danya_white


      Просмотр файла Игровой мод Renaissance RolePlay
      Доброго времени суток, хочу выставить на продажу игровой мод проекта Renaissance RP.
       
      Данный мод является не последний актуальный версии проекта, а версия ниже, многие актуальные систему отсутствуют, но они будут дополняться, со временем. Основные функции на проекте Renaissance RP присутствую в данном моде, это первая версия проекта, поэтому буду дополнять тему своими доработками, также есть TEST IP, реальному покупателю в личные сообщение на форуме, дам данные.
       
      Информация о моде:
      Версия MYSQL - R39-6
      Античит - Встроенный + SAMP-AC
      Стример - Streamer Plugin v2.9.4 by Incognito
      Командный процессор - Pawn CMD
      Основа мода - Brilliant RP
      Остальное Все плагины обновлены до последней версии
       
       
      Основные системы которые присутствуют в данном моде:
      - Система промокодов для семей (/family) - Система выборов - Динамичная система (/lmenu), возможность назначать транспорт, форму сотрудников - Система подразделений в гос.организациях - Система КАЗИНО - Система акксесуаров - Оптимизация игрового мода. - Риелторское агенство. - Квестовая линия (НАЧАЛО) p.s И еще многие другие системы, более подробно на тестовом сервере.
      Добавил danya_white Добавлено 26.10.2021 Категория Моды Автор danya  
    • danya_white
      By danya_white
      Доброго времени суток, хочу выставить на продажу игровой мод проекта Renaissance RP.
       
      Данный мод является не последний актуальный версии проекта, а версия ниже, многие актуальные систему отсутствуют, но они будут дополняться, со временем. Основные функции на проекте Renaissance RP присутствую в данном моде, это первая версия проекта, поэтому буду дополнять тему своими доработками, также есть TEST IP, реальному покупателю в личные сообщение на форуме, дам данные.
       
      Информация о моде:
      Версия MYSQL - R39-6
      Античит - Встроенный + SAMP-AC
      Стример - Streamer Plugin v2.9.4 by Incognito
      Командный процессор - Pawn CMD
      Основа мода - Brilliant RP
      Остальное Все плагины обновлены до последней версии
       
       
      Основные системы которые присутствуют в данном моде:
      - Система промокодов для семей (/family) - Система выборов - Динамичная система (/lmenu), возможность назначать транспорт, форму сотрудников - Система подразделений в гос.организациях - Система КАЗИНО - Система акксесуаров - Оптимизация игрового мода. - Риелторское агенство. - Квестовая линия (НАЧАЛО) p.s И еще многие другие системы, более подробно на тестовом сервере.
    • Kirill_Bess
      By Kirill_Bess
      Приветствую
      При запуске сервера на хостинге выдаёт ошибку [Unknown] 
      При запуске сервера через приложение samp-server.exe выдаёт ошибки плагинов,но я не знаю как из исправить подскажите пожалуйста
      Сразу спасибо за помощь
      Вот логи: