Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 23
  1. #1
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±

    Завод двигателя исходя из здоровье транспорта

    Описание:

    Функция, которая позволяет завести двигатель исходя из здоровья транспорта. Чем больше здоровья транспорта, тем больше шансов завести её.


    Функция:

    PHP код:
    forward OnVehicleEngineStarts(vehicleidplayerid);
    public 
    OnVehicleEngineStarts(vehicleidplayerid)
    {
        if(!
    vehicleid)
            return 
    0;
        new 
    Float:health;
        
    GetVehicleHealth(vehicleidhealth);
        new 
    percent floatround(health)/10;
        if(
    25 >= percent)
            return 
    SendClientMessage(playerid, -1, !"{CD0000}\
                Двигатель вышел из строя, вызовите механика!"
    );
        new 
    g_en_lightsg_en_alarmg_en_doors
        
    g_en_bonnetg_en_bootg_en_objective;
        
    GetVehicleParamsEx(vehicleidg_en_lightsg_en_lights
        
    g_en_alarmg_en_doorsg_en_bonnetg_en_bootg_en_objective);
        return (
    random(100) > percent) ?
            (
    SendClientMessage(playerid, -1, !"{CD0000}Не удалось завести \
                двигатель, повторите попытку!"
    )) :
            (
    SetVehicleParamsEx(vehicleidVEHICLE_PARAM_ONg_en_lightsg_en_alarmg_en_doors
                
    g_en_bonnetg_en_bootg_en_objective));



    Пример использование:

    PHP код:
    CMD:en(playerid)
    {
        
    //всякие проверки...
        
    new vehicleid GetPlayerVehicleID(playerid);
        
    SetTimerEx("OnVehicleEngineStarts"30000"ii"vehicleidplayerid);
        
    SendClientMessage(playerid, -1, !"{3498db}Зажигание двигателя в \
            процессе, ждите!"
    );
        return 
    1;



    Автор: Я
    Последний раз редактировалось Geebrox; 12.11.2016 в 02:20.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  2. Пользователь сказал cпасибо:
    VVWVV (11.11.2016)
  3. #2
    Аватар для Saibot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.08.2016
    Сообщений
    58
    Репутация:
    24 ±
    PHP код:
     return (random(100) >= percent) ?
            (
    SetVehicleParamsEx(vehicleid1lightsalarmdoors
                
    bonnetbootobjective);) :
            (
    SendClientMessage(playerid, -1, !"{CD0000}Не удалось завести \
            двигатель, повторите попытку!"
    )); 
    То, что во втором операнде поставь в первый, ибо у тебя больше шансов будет не завести двигатель, когда будет больше здоровья нежели меньше.
    Последний раз редактировалось Saibot; 11.11.2016 в 00:32.

  4. Пользователь сказал cпасибо:
    Geebrox (11.11.2016)
  5. #3
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    по мне
    PHP код:
    new lightsalarmdoorsbonnetbootobjective
    лучше объявить глобально, они много где используются и легче один раз глобально чем во всех пабликах локально

  6. #4
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Saibot Посмотреть сообщение
    То, что во втором операнде поставь в первый, ибо у тебя больше шансов будет не завести двигатель, когда будет больше здоровья нежели меньше.
    да да, точно. Просто я изменил код прямо на форуме, то есть изменил логику работы чуть-чуть и забыл изменить return. Исправил!


    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    по мне
    PHP код:
    new lightsalarmdoorsbonnetbootobjective
    лучше объявить глобально, они много где используются и легче один раз глобально чем во всех пабликах локально
    Че этим хочешь сказать? А может они уже объявлены? У всех свои переменные. И да я изменил название переменных, вдруг они уже объявлены. А глобальные я не буду создавать, кто даст гарантии, что именно из за этой функций будут использовать только созданные для него глобальные переменные? Логику включим, не?
    Последний раз редактировалось Geebrox; 11.11.2016 в 18:51.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  7. #5
    Аватар для KrutoyKrosch
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.02.2016
    Сообщений
    301
    Репутация:
    7 ±
    Если кто то будет ставить эту функцию, то следующая будет 100% управление дверями/капотом/багажником/дверями. И придется каждый раз их объявлять, лучше уж создать один раз глобально, от этого ничего не изменится...

  8. #6
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от KrutoyKrosch Посмотреть сообщение
    Если кто то будет ставить эту функцию, то следующая будет 100% управление дверями/капотом/багажником/дверями. И придется каждый раз их объявлять, лучше уж создать один раз глобально, от этого ничего не изменится...
    Многое изменится, я не хочу что бы мои скрипты каким-либо образом мешали "работать" основному коду юзера. А если эти переменные уже созданы как глобальные? Потом что? Каждый новичок будет стучать мне вопросом: "Я поставил твой код и вылезла эта ошибка"?
    Не вижу смысла продолжать дискуссию на эту тему о переменных!
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  9. #7
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Реализация хорошая. Но, тем не менее, можно сделать проверку на существование т/с в игре.

  10. Пользователь сказал cпасибо:
    Geebrox (11.11.2016)
  11. #8
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Реализация хорошая. Но, тем не менее, можно сделать проверку на существование т/с в игре.
    Добавил

  12. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Реализация хорошая. Но, тем не менее, можно сделать проверку на существование т/с в игре.
    - Некорректное название функции (OnVehicleEngineStarts подходит для события (запуск двигателя), которое уже произошло).
    - Некорректные возвращаемые значения (всё вперемешку, 1, SendClientMessage, SetVehicleParamsEx).
    - Разный стиль в одной функции (смысла запихивать проверку в return нет, ерунда с отступами).
    - Непонятно с какой целью скомкан код.
    - 1 вместо VEHICLE_PARAM_ON.
    - Может быть лишний вызов GetVehicleParamsEx, ибо условие random(100) > percent расположено ниже.

    Цитата Сообщение от Geebrox Посмотреть сообщение
    Добавил
    Это делается не так.

    Более адекватная версия:
    PHP код:
    forward TryToStartVehicleEngine(vehicleidplayerid);
    public 
    TryToStartVehicleEngine(vehicleidplayerid)
    {
        new 
    Float:health;
        if (!
    GetVehicleHealth(vehicleidhealth)) {
            return 
    0;
        }

        new 
    percent floatround(health)/10;
        if (
    percent <= 25) {
            
    SendClientMessage(playerid, -1,
                !
    "{CD0000}Двигатель вышел из строя, вызовите механика!");
            return 
    0;
        }

        if (
    percent random(100)) {
            
    SendClientMessage(playerid, -1,
                !
    "{CD0000}Не удалось завести двигатель, повторите попытку!");
            return 
    0;
        }

        new 
    g_en_lightsg_en_alarmg_en_doorsg_en_bonnetg_en_boot,
            
    g_en_objective;
        
    GetVehicleParamsEx(vehicleidg_en_lightsg_en_lights,
            
    g_en_alarmg_en_doorsg_en_bonnetg_en_bootg_en_objective);
        
    SetVehicleParamsEx(vehicleidVEHICLE_PARAMS_ONg_en_lights,
            
    g_en_alarmg_en_doorsg_en_bonnetg_en_bootg_en_objective);
        return 
    1;

    Но, на самом деле, в программировании принято разделять логику и представление, это значит, что SendClientMessage лучше вынести в команду и возвращать код ошибки.
    Последний раз редактировалось ziggi; 12.11.2016 в 00:49.

  13. 2 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (12.11.2016) VVWVV (12.11.2016)
  14. #10
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    - Некорректное название функции (OnVehicleEngineStarts подходит для события (запуск двигателя), которое уже произошло).
    - Некорректные возвращаемые значения (всё вперемешку, 1, SendClientMessage, SetVehicleParamsEx).
    - Разный стиль в одной функции (смысла запихивать проверку в return нет, ерунда с отступами).
    - Непонятно с какой целью скомкан код.
    - 1 вместо VEHICLE_PARAM_ON.
    - Может быть лишний вызов GetVehicleParamsEx, ибо условие random(100) > percent расположено ниже.
    • Признаюсь что не дружу с английским (учу), и упрекать в этом как то странно, если хочу поставлю вообще StartEngine, название функции не играет ни малейшую роль при выполнение кода;
    • Пожалуйста, прочитайте вики, все функции, которых я использовал возвращают 1 при успешном выполнение и 0 при не удаче;
    • Не вижу разных стилей, если не видите смысла это не значит, что использование этого метода запрещена. Равносилен обычной проверки, так что опять упрекаете не в нужном месте;
    • Код никак не скомкан все ясно и понятно;
    • Учту;
    • Как и в вашем коде может быть лишний вызов GetVehicleHealth;



    Цитата Сообщение от ziggi Посмотреть сообщение
    Это делается не так.
    PHP код:
     new Float:health
        if (!
    GetVehicleHealth(vehicleidhealth)) { 
            return 
    0
        } 
    • Это равносилен моей проверки, я думаю ничем не отличается, кроме того, что может быть лишний вызов GetVehicleHealth;




    P.S. Мое мнение о вашем посте: Выглядит так как будто хотели "понтанутся" указывая на незначительные почти не заметные различие кода, это лично мое мнение и изменять я его не собираюсь (можете на это не обращать внимание)
    Последний раз редактировалось Geebrox; 12.11.2016 в 01:54.
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •