Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама



**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Redsan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    59
    Репутация:
    14 ±

    Помощь с проверкой на количество загруженных систем

    Имеется несколько систем которые при запуске/перезагрузке сервера загружаются из базы данных mysql:
    PHP код:
    mysql_function_query(MySQL"SELECT * FROM `houses`"true"LoadHouses","");
    mysql_function_query(MySQL"SELECT * FROM `vehicles`"true"LoadVehicles","");
    mysql_function_query(MySQL"SELECT * FROM `zone`"true"LoadZone",""); 
    При подключении игрока к серверу имеется проверка на статус загрузки сервера:
    PHP код:
    /*
     server_access_status = 0; // Загрузка сервера, mysql системы не загружены, kick игрока
     server_access_status = 1; // Сервер загружен, mysql системы загружены, игрок может входить
     server_access_status = 2; // Перезагрузка сервера, mysql системы не загружены, kick игрока
    */
    switch(server_access_status)
    {
        case 
    0:
        {
            
    SendClientMessage(playerid, -1,"Происходит загрузка сервера");
            return 
    Kick(playerid);
        }
        case 
    2:
        {
            
    SendClientMessage(playerid, -1,"Происходит перезагрузка сервера");
            return 
    Kick(playerid);
        }

    Необходимо менять статус загрузки сервера после загрузки всех mysql систем.
    Как лучше всего осуществлять данную проверку, с учётом того что скорость загрузки систем может изменяться?
    Последний раз редактировалось Redsan; 16.10.2016 в 02:46.

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

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    59
    Репутация:
    14 ±
    Пробовал делать последовательную загрузку, но тогда скорость загрузки увеличивалась в ~2 раза.

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    2,751
    Репутация:
    1085 ±
    Так а что нужно-то?
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    59
    Репутация:
    14 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так а что нужно-то?
    Чтобы после загрузки всех систем, менялась глобальная переменная server_access_status на разрешающую вход на сервер.

    Вот решение, но мне кажется это не самый оптимальный вариант:
    PHP код:
    #define MYSQL_SYSTEMS    (3) // Количество mysql систем

    new mysql_systems_loaded 0;


    // Паблик с загрузкой системы 1
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1;

    // Паблик с загрузкой системы 2
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1;

    // Паблик с загрузкой системы 3
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1
    Последний раз редактировалось Redsan; 16.10.2016 в 14:35.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    639
    Репутация:
    511 ±
    PHP код:
    new gSystemsLoadedgSystemsCount;

    stock SystemLoad(table[], callback[])
    {
        
    gSystemsCount++;
        
    mysql_function_query(MySQL"SELECT * FROM `%s`"truecallback"s"table);
    }

    stock CheckInitStatus()
    {
        if (++
    gSystemsLoaded >= gSystemsCount) {
            
    server_access_status 1;
        }
    }

    stock ResetInitStatus()
    {
        
    gSystemsLoaded 0;
        
    gSystemsCount 0;
        
    server_access_status 2;

    Загружать так:
    PHP код:
    SystemLoad("houses""LoadHouses");
    SystemLoad("vehicles""LoadVehicles");
    SystemLoad("zone""LoadZone"); 
    И в конце каждой функции с загрузкой просто добавь CheckInitStatus();. А в OnGameModeExit добавь ResetInitStatus();

    Но я не вижу в этом смысла, ведь гораздо проще и логичнее для загрузки использовать не потоковые запросы (обычный mysql_query).
    Последний раз редактировалось ziggi; 16.10.2016 в 14:53.

  6. Пользователь сказал cпасибо:
    Redsan (16.10.2016)
  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Онлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    2,751
    Репутация:
    1085 ±
    Цитата Сообщение от Redsan Посмотреть сообщение
    Чтобы после загрузки всех систем, менялась глобальная переменная server_access_status на разрешающую вход на сервер.

    Вот решение, но мне кажется это не самый оптимальный вариант:
    PHP код:
    #define MYSQL_SYSTEMS    (3) // Количество mysql систем

    new mysql_systems_loaded 0;


    // Паблик с загрузкой системы 1
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1;

    // Паблик с загрузкой системы 2
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1;

    // Паблик с загрузкой системы 3
    mysql_systems_loaded++
    if (
    mysql_systems_loaded == MYSQL_SYSTEMSserver_access_status 1
    А не проще ли сразу проверять значение mysql_systems_loaded, а не заводить лишнюю переменную? Можно функцию создать для удобства.
    То бишь
    PHP код:
    stock GetServerAccessStatus() return (mysql_systems_loaded == MYSQL_SYSTEMS); 
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    59
    Репутация:
    14 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    stock CheckInitStatus(bool:reset false)
    {
        static 
    init_step;
        if (
    reset) {
            
    init_step 0;
            
    server_access_status 0;
            return;
        }
        if (++
    init_step >= MYSQL_SYSTEMS) {
            
    server_access_status 1;
        }

    И в конце каждой функции с загрузкой просто добавь CheckInitStatus(). А в OnGameMode добавь CheckInitStatus(true);
    Благодарю.
    Последний раз редактировалось Redsan; 16.10.2016 в 14:55.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    639
    Репутация:
    511 ±
    Цитата Сообщение от Redsan Посмотреть сообщение
    Благодарю. Тему можно закрыть.
    Я обновил пост, там улучшенная версия.

  11. Пользователь сказал cпасибо:
    Redsan (16.10.2016)
  12. #9
    Аватар для Redsan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    59
    Репутация:
    14 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Я обновил пост, там улучшенная версия.
    Спасибо, пожалуй все таки воспользуюсь однопоточными запросами

    Тему можно закрывать.
    Последний раз редактировалось Redsan; 16.10.2016 в 15:23.

 

 

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

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

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

Ваши права

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