Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 8 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя
Показано с 31 по 40 из 75
  1. #31
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Если ты действительно объясняешь другим возможные негативные последствия, то вряд ли на сервере произойдёт что-то неожиданное.
    Главное, чтобы те, кому ты предлагаешь менять стандартные константы, полностью осознавали, на что идут, а не слепо гнались за оптимизацией.
    Я изначально рассказал всем логику составления этого макроса. И про "неожиданное" я тебе уже говорил.

    А на остальное уже не буду отвечать, ибо пора прекращать эту полемику, которая начинает перерастать в недопонимания и стрелометание. Как я уже сказал выше, я свою точку зрения по поводу этого вопроса озвучил. Ты озвучил свою. У каждого своя голова на плечах, так что пусть каждый сам и решает - готов ли он взять на себя ТАКУЮ "ответственность" и помнить СТОЛЬКО новой информации.
    А за то, о чём ты просил не распространяться, прости :( Запамятовал
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    78
    Репутация:
    15 ±
    Я правильно считаю?
    PHP код:
    new query_string[85-12+MAX_PLAYER_NAME+32+64];
    format(query_stringsizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`, `email`) VALUES ('%s', '%s', '%s')"pInfo[playerid][pName], passwordemail);
    // максимальная длина password - 32
    // максимальная длина email - 64 
    Или объясните на этом примере как высчитывались значения?
    PHP код:
    stock SaveAccount(playerid)
    {
        new 
    query_string[(21)+(16+11)+(20+MAX_PLAYER_NAME)+(16+32)] = "UPDATE `accounts` SET";

        
    format(query_stringsizeof(query_string), "%s `player_name` = '%s',"query_stringpInfo[playerid][pName]);
        
    format(query_stringsizeof(query_string), "%s `password` = '%s'"query_stringpInfo[playerid][pPassword]);

        
    format(query_stringsizeof(query_string), "%s WHERE `id` = '%d'"query_stringpInfo[playerid][pID]);
        
    mysql_function_query(mysql_connect_idquery_stringfalse"""");
        return 
    1;

    Последний раз редактировалось Redsan; 21.06.2016 в 02:44.

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    PHP код:
    UPDATE `accountsSET //(21)
    %`player_name` = '%s'//(20+MAX_PLAYER_NAME)
    %`password` = '%s' //(16+32)
    %s WHERE `id` = '%d' //(16+11) 
    Например (16+11). Первое число это "длина" текста в кавычках, а второе - что выведут %s и %d.

    Тот код можно оформить и так:

    PHP код:
    stock SaveAccount(playerid)
    {
        static const 
    str[] = "UPDATE `accounts` SET `player_name` = '%s', `password` = '%s' WHERE `id` = '%d'";
        new 
    string[sizeof str+MAX_PLAYERS_NAME+32+11-2*3];
        
    format(stringsizeof stringstr
            
    pInfo[playerid][pName], 
            
    pInfo[playerid][pPassword],
            
    pInfo[playerid][pID]
        );
        
    mysql_function_query(mysql_connect_idstringfalse"""");
        return 
    1;

    Последний раз редактировалось m1n1vv; 22.06.2016 в 14:41.

  5. Пользователь сказал cпасибо:
    Redsan (22.06.2016)
  6. #34
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Redsan Посмотреть сообщение
    Я правильно считаю?
    PHP код:
    new query_string[85-12+MAX_PLAYER_NAME+32+64];
    format(query_stringsizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`, `email`) VALUES ('%s', '%s', '%s')"pInfo[playerid][pName], passwordemail);
    // максимальная длина password - 32
    // максимальная длина email - 64 
    PHP код:
    const MAX_PLAYER_PASSWORD 32;
    const 
    MAX_PLAYER_EMAIL 64;
    enum pInfo
    {
        
    pName[MAX_PLAYER_NAME 1],
        
    pPassword[MAX_PLAYER_PASSWORD 1],
        
    pEmail[MAX_PLAYER_EMAIL 1],
        
    // ...
    }; 
    PHP код:
    new fmt_str[] = "INSERT INTO `accounts` (`player_name`, `password`, `email`) VALUES ('%s', '%s', '%s')";
    new 
    query[sizeof(fmt_str) + (-2+MAX_PLAYER_NAME) + (-2+MAX_PLAYER_PASSWORD) + (-2+MAX_PLAYER_EMAIL)];
    format(querysizeof(query), fmt_strpInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pEmail]);
    // А вообще здесь следовало бы использовать mysql_format. Только не спрашивайте, почему. 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    Redsan (22.06.2016)
  8. #35
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    PHP код:
    const MAX_PLAYER_PASSWORD 32;
    const 
    MAX_PLAYER_EMAIL 64
    PHP код:
    enum MAX_LENGHT
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64

    Удобней в чтении кода
    Последний раз редактировалось m1n1vv; 23.06.2016 в 02:04.

  9. Пользователь сказал cпасибо:
    Nexius_Tailer (23.06.2016)
  10. #36
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    enum MAX_LENGHT
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64

    Удобней в чтении кода
    Удобнее в плане большего расхода пространства на экране или засорения глобального пространства имён лишним идентификатором MAX_LENGHT (не говоря уже об опечатке в названии)?
    Вообще "enum" - это сокращение от "enumeration", что переводится как "перечисление". Оператор enum предназначен для перечисления констант, значения которых зависят друг от друга (я бы написал "следуют" друг за другом, но в Pawn для элементов перечисления можно сделать не только инкремент, но и декремент или даже битовый сдвиг).
    В вашем же примере значения MAX_PLAYER_PASSWORD и MAX_PLAYER_EMAIL никак не зависят друг от друга, поэтому непонятно, в чём вообще смысл об их объявления в enum.
    Да, это допустимый стиль с точки зрения корректности синтаксиса, но, ИМХО, чтобы считать его "удобным", нужно обладать довольно извращённым чувством удобства.
    С таким же успехом можно объявлять константы так:
    PHP код:
    enum {MAX_PLAYER_PASSWORD 32};
    enum {MAX_PLAYER_EMAIL 64}; 
    Но почему-то так никто не делает. По очевидным причинам.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  11. #37
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Да, это допустимый стиль с точки зрения корректности синтаксиса, но, ИМХО, чтобы считать его "удобным", нужно обладать довольно извращённым чувством удобства.
    С таким же успехом можно объявлять константы так:
    PHP код:
    enum {MAX_PLAYER_PASSWORD 32};
    enum {MAX_PLAYER_EMAIL 64}; 
    Но почему-то так никто не делает. По очевидным причинам.
    Почему это извращённым чувством удобства? К примеру имеем мы кучу дефайнов, большинство которых начинаются с "MAX_". Максимальным может быть не только размер, но и количество чего-либо. Поэтому довольно удобное и наглядное разграничивание.
    Да и вообще, если уж говорить о том, чем кто пользуется, то это не const, а:
    PHP код:
    #define 
    Тем не менее другие варианты тоже существуют и имеют место быть. Кому как удобнее?
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Почему это извращённым чувством удобства? К примеру имеем мы кучу дефайнов, большинство которых начинаются с "MAX_". Максимальным может быть не только размер, но и количество чего-либо.
    Потому что прочитайте полностью предыдущий пост.
    MAX_PLAYER_PASSWORD и MAX_PLAYER_EMAIL как-то зависят друг от друга? Нет. Обе константы обозначают максимальные длины строк - и на этом всё. Можно спокойно изменить MAX_PLAYER_PASSWORD - на значении MAX_PLAYER_EMAIL это никак не отразится.


    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Поэтому довольно удобное и наглядное разграничивание.
    PHP код:
    const MAX_HOUSES 300;

    const 
    MAX_PLAYER_PASSWORD 32;
    const 
    MAX_PLAYER_EMAIL 64;

    new const 
    Float:fishing_spots[][3] =
    {
        
    // ...
    }; 
    Пустые строки. Довольно древний лайфхак - и тоже весьма наглядное разграничивание.
    Если же взять тот пример с enum - всё равно ж придётся ставить пустые строки до и после перечисления.

    Попробую предугадать ответ:
    А я не буду ставить пустые строки - с enum разграничение и так уже есть.
    Хорошо, допустим:
    PHP код:
    const MAX_HOUSES 300;
    enum
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64
    };
    new const 
    Float:fishing_spots[][3] = 
    Будь там полностью пустые строки, разделение было бы очевидным, но в таком виде границы перечисления становятся более "размытыми".


    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Да и вообще, если уж говорить о том, чем кто пользуется, то это не const, а:
    PHP код:
    #define 
    Так я ничего и не говорил против #define, речь была конкретно о бессмысленности enum для не зависящих друг от друга констант.
    На самом деле в модах куда чаще объявляют константы с помощью #define (вернее, это уже не константы, а макросы), но единственное их преимущество перед объявлением через const - возможность использования с оператором стрингизации:
    PHP код:
    #define MAX_AD_MESSAGE 80
    // ...
    CMD:ad(playeridparams[])
    {
        
    // ...
        
    if (strlen(params) > 80)
            return 
    SendClientMessage(playerid, -1"ОШИБКА: Текст сообщения должен быть не длиннее " #MAX_AD_MESSAGE " символов.");
        // ...

    Если объявить MAX_AD_MESSAGE с помощью const, такой трюк не прокатит.


    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Тем не менее другие варианты тоже существуют и имеют место быть. Кому как удобнее?
    Целью моего поста было лишь донести нецелесообразность использования конкретных вариантов, а не навязать использование только одного.
    Стиль кодинга следует с самого начала хорошо продумывать - иначе вместо кода можно получить кучу едва работающих, прибитых друг к другу гвоздями костылей и заплаток, которую невозможно структурировать, не переписав всё с нуля. И пока найдёшь в этой куче то, что нужно (допустим, константу, название которой забыл), вспомнишь столько непристойных слов, что на целый словарь хватит.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  13. #39
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Хорошо, допустим:
    PHP код:
    const MAX_HOUSES 300;
    enum
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64
    };
    new const 
    Float:fishing_spots[][3] = 
    Будь там полностью пустые строки, разделение было бы очевидным, но в таком виде границы перечисления становятся более "размытыми".
    Да нет, всё отлично
    PHP код:
    enum MAX_COUNT
    {
        
    MAX_HOUSES 300,
        
    MAX_BUSINESS 250,
        
    MAX_FLATS 100
    }

    enum MAX_LENGHT
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64

    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  14. #40
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Да нет, всё отлично
    PHP код:
    enum MAX_COUNT
    {
        
    MAX_HOUSES 300,
        
    MAX_BUSINESS 250,
        
    MAX_FLATS 100
    }

    enum MAX_LENGHT
    {
        
    MAX_PLAYER_PASSWORD 32,
        
    MAX_PLAYER_EMAIL 64

    Я тоже люблю мороженое с рыбой в одном рожке, ведь это все еда.

    Не вижу смысла в использовании оператора enum для такого извращения, да и код выглядит как-то не очень красиво. И вообще КТО ТАК ДЕЛАЕТ?!

 

 
Страница 4 из 8 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя

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

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

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

Ваши права

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