Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±

    Способ сохранения

    Привет. Хорошо отдохнул от павн . Теперь нужно пройтись по возможным ошибкам прошлого.
    Что лучше, использовать state или вызывать сток с нужным именем?
    PHP код:
    state save:money;
    SaveAccount(playerid); 
    PHP код:
    SavePlayerMoney(playerid); 
    Сохранения в таймерах и циклах не использую.
    Последний раз редактировалось m1n1vv; 14.11.2018 в 13:46.

  2. #2
    Аватар для Alpano
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.02.2017
    Сообщений
    123
    Репутация:
    16 ±
    я так понимаю первый вариант это что-то вроде
    PHP код:
    stock SavePlayerInt(playerid,const IntNameEx[],valve){
        new 
    query[72];
        
    format(querysizeof query"UPDATE `accounts` SET `%s`='%d' WHERE `id`='%i'",IntNameEx,valve,Player[playerid][pSQLID]);
        
    db_free_result(db_query(users_base,query));
        return 
    true;

    ? Если так то первое.
    Ибо второй вариант создаст огромное количество однотипных функций, лишний код имхо.
    Стабильность на высоте.
    MyProject:
    DriftEmpire©

    Ленивые всё делают быстро, чтобы поскорее избавиться от работы.
    И делают качественно, чтобы потом не переделывать.

  3. #3
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Alpano Посмотреть сообщение
    я так понимаю первый вариант это что-то вроде
    PHP код:
    stock SavePlayerInt(playerid,const IntNameEx[],valve){
        new 
    query[72];
        
    format(querysizeof query"UPDATE `accounts` SET `%s`='%d' WHERE `id`='%i'",IntNameEx,valve,Player[playerid][pSQLID]);
        
    db_free_result(db_query(users_base,query));
        return 
    true;

    ? Если так то первое.
    Ибо второй вариант создаст огромное количество однотипных функций, лишний код имхо.
    Стабильность на высоте.
    Не то

    PHP код:
    public SaveAccount(playerid) <save:money>
    {
        static const
            
    str[] = "UPDATE `accounts` SET `pMoney` = '%d' WHERE `pID` = '%d'";

        new 
            
    string[sizeof str 11 11 2*2];

        
    format(stringsizeof stringstr
            
    pInfo[playerid][pMoney], 
            
    pInfo[playerid][pID]
        );
        
        return 
    mysql_function_query(mysql_connect_idstringfalse"""");


  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Для начала немного о том, как работают функции, к которым прикручен state. Возьмём такой пример:
    1. MyFunc() <mystate:st1>
    2. {
    3. print("st1");
    4. }
    5.  
    6. MyFunc() <mystate:st2>
    7. {
    8. print("st2");
    9. }
    10.  
    11. MyFunc() <>
    12. {
    13. print("default state");
    14. }

    После компиляции получается код, аналогичный следующему:
    1. enum
    2. {
    3. MYSTATE_DEFAULT,
    4. MYSTATE_ST1,
    5. MYSTATE_ST2
    6. };
    7. new mystate = MYSTATE_DEFAULT;
    8.  
    9. MyFunc()
    10. {
    11. switch (mystate)
    12. {
    13. case MYSTATE_ST1:
    14. {
    15. print("st1");
    16. }
    17. case MYSTATE_ST2:
    18. {
    19. print("st2");
    20. }
    21. default:
    22. {
    23. print("default state");
    24. }
    25. }
    26. }

    Т.е. вместо нескольких функций генерируется одна общая функция со switch в самом начале, и перед выполнением действий из MyFunc()<mystate:st1>, MyFunc()<mystate:st2> и MyFunc()<> интерпретатору нужно сначала пройти через switch, чтобы определить, какой вариант действий выполнять.
    По сути state - это просто синтаксический сахар.

    Теперь к вашему примеру:
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    state save:Money;
    SaveAccount(playerid); 
    PHP код:
    SavePlayerMoney(playerid); 
    Ок, т.е. вам нужно сохранить деньги игрока и вы знаете, что выполниться должны именно действия по сохранению кол-ва денег. Но интерпретатор не сможет об этом знать заранее и будет каждый раз выполнять switch, прежде чем понять, что да, нужно сохранить именно деньги. Так зачем создавать эту лишнюю нагрузку со switch, если можно просто сделать отдельную функцию для сохранения денег и вызывать её сразу, без всяких state? В плане исходного кода получится всё те же несколько функций, только без указания state в заголовке и с разными названиями.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. Пользователь сказал cпасибо:
    m1n1vv (14.11.2018)
  6. #5
    Аватар для Alpano
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.02.2017
    Сообщений
    123
    Репутация:
    16 ±
    А, ну тогда это по сути эдентичные функции. Разве что у второго варианта функция вызывается на прямую, у первого же идет предварительное изменение переменной.
    А так, не рассматирваешь вариант предложенный мной?
    Универсальная функция, и использовать элементарно.
    PHP код:
    SavePlayerInt(playerid,"level",Player[playerid][pLevel]); 
    Разве что перевести с SQLite на MySQL...
    MyProject:
    DriftEmpire©

    Ленивые всё делают быстро, чтобы поскорее избавиться от работы.
    И делают качественно, чтобы потом не переделывать.

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Alpano Посмотреть сообщение
    А, ну тогда это по сути эдентичные функции. Разве что у второго варианта функция вызывается на прямую, у первого же идет предварительное изменение переменной.
    А так, не рассматирваешь вариант предложенный мной?
    Универсальная функция, и использовать элементарно.
    PHP код:
    SavePlayerInt(playerid,"level",Player[playerid][pLevel]); 
    Разве что перевести с SQLite на MySQL...
    В твоем варианте не предусмотрено сохранение оружия и патрон

 

 

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

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

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

Ваши права

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