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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Грузится только первый биз, хелп(

    Здравствуйте. Делаю систему загрузки бизнесов, ВРОДЕ как все хорошо, но грузится только 1 бизнес, не могу понять почему...

    Код загрузки:
    PHP код:
    publicsLoadBusiness()
    {
        new 
    rowstime GetTickCount();
        
    cache_get_row_count(rows);
        if(
    gBusinessCount >= MAX_BUSINESS_COUNT) print("[MySQL] Кол-во бизнесов в базе превышает предопределнное количество");
        if(!
    rows) return print("[MySQL] Бизнесы не были загружены!");
        
    gBusinessCount rows;
        
    printf("rows - %d"rows);
        for(new 
    irowsi++)
        {
            print(
    "===================");
            
    printf("i - %d"i);
            
    cache_get_value_name_int(i"id"gBusiness[i][busiID]);
            
    cache_get_value_name_int(i"ownerid"gBusiness[i][busiOwnerID]);
            
    cache_get_value_name(i"name"gBusiness[i][busiName], 32);
            
    cache_get_value_name_int(i"type"gBusiness[i][busiType]);
            
    cache_get_value_name_int(i"bint"gBusiness[i][busiBint]);
            
    cache_get_value_name_int(i"price"gBusiness[i][busiPrice]);
            
    cache_get_value_name_int(i"status"gBusiness[i][busiStatus]);
            
    cache_get_value_name_int(i"enterprice"gBusiness[i][busiEnterPrice]);
            
    cache_get_value_name_int(i"bank"gBusiness[i][busiBank]);
            
    cache_get_value_name_int(i"product"gBusiness[i][busiProduct]);
            
    cache_get_value_name_int(i"mafia"gBusiness[i][busiMafia]);
            
    cache_get_value_name_float(i"x"gBusiness[i][busiX]);
            
    cache_get_value_name_float(i"y"gBusiness[i][busiY]);
            
    cache_get_value_name_float(i"z"gBusiness[i][busiZ]);
            
    cache_get_value_name_float(i"r"gBusiness[i][busiR]);
            
            
    printf("id - %d, ownerid - %d, name - %s"gBusiness[i][busiID], gBusiness[i][busiOwnerID], gBusiness[i][busiName]);

            
    printf("CreateDynamicPickup");
            
    CreateDynamicPickup(191321gBusiness[i][busiX],gBusiness[i][busiY],gBusiness[i][busiZ]);
            
    printf("CreateBusinessText");
            
    gBusinessText[i] = CreateDynamic3DTextLabel("_"CWHITEgBusiness[i][busiX], gBusiness[i][busiY], gBusiness[i][busiZ]+1.020.0);
            
    printf("UpdateBusinessText");
            
    UpdateBusinessText(i);
            print(
    "===================");
        }
        
    printf("[MySQL]: Загружено %d бизнесов за %d м.с."gBusinessCountGetTickCount()-time);
        return 
    true;

    Сделал маленькое логирование, вот что в логах:
    PHP код:
    [20:47:01rows 2
    [20:47:01] ===================
    [
    20:47:010
    [20:47:01id 1ownerid 1name Railway Shop 24/7
    [20:47:01CreateDynamicPickup
    [20:47:01CreateBusinessText
    [20:47:01UpdateBusinessText
    [20:47:01] ===================
    [
    20:47:01] ===================
    [
    20:47:011
    [20:47:01id 0ownerid 0name 
    [
    20:47:01CreateDynamicPickup
    [20:47:01CreateBusinessText
    [20:47:01UpdateBusinessText
    [20:47:01] =================== 
    Скриншот таблицы:
      Открыть/закрыть


    - - - Добавлено - - -

    Все по коду нормально, не могу понять почему выбирает только 1 бизнес

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Запрос покажи и crashdetect включен?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Запрос покажи и crashdetect включен?
    Crashdetect включен, соответственно в логах ничего связанного с крашдетектом нету...

    Запрос:
    PHP код:
    mysql_tquery(mysql_connect_ID"SELECT * FROM `business` ORDER BY `id`""LoadBusiness",""); 
    Если ввести его в SQL-запрос в PHPMyAdmin, то выводятся все 2 бизнесы...

    - - - Добавлено - - -

    Нашел ошибку, но не без помощи.

    В UpdateBusinessText у меня есть функция, которая узнает имя игрока по его ID аккаунта (ID аккаунта записан в бизнесе), код как вызывается:

    PHP код:
    format(nicknamesizeof(nickname), "%s"GetPlayerNameByID(ownerid)); 
    Сама функция:
    PHP код:
    stock GetPlayerNameByID(id)
    {
         new 
    query[64], nickname[24];
        
    format(querysizeof(query), "SELECT `nickname` FROM `accounts` WHERE `id` = '%d'"id);
        new 
    Cache:result mysql_query(mysql_connect_IDquerytrue);
        
    cache_get_value_name(0"nickname"nickname24);
        
    cache_delete(result);
        return 
    nickname;

    Где ошибка? Если убрать это, тогда все бизнесы грузятся...

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ошибка в том, что ты отправляешь ещё один запрос, из-за чего старый кэш удаляется.
    Либо сохраняй кэш перед вызовом началом цикла и потом каждую итерацию переключайся на него, либо запросы нужно переписывать
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ошибка в том, что ты отправляешь ещё один запрос, из-за чего старый кэш удаляется.
    Либо сохраняй кэш перед вызовом началом цикла и потом каждую итерацию переключайся на него, либо запросы нужно переписывать
    Да, почему так и подумал.. Как сохранить можно кэш? Не сталкивался с таким..

    Или лучше будет переписать запросы? Но тоже, не знаю в каком плане это сделать...

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    native Cache:cache_save(connectionHandle 1);
    native cache_delete(Cache:cache_idconnectionHandle 1);
    native cache_set_active(Cache:cache_idconnectionHandle 1);
    native cache_is_valid(Cache:cache_idconnectionHandle 1); 
    Если нужен пример - скажи
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    native Cache:cache_save(connectionHandle 1);
    native cache_delete(Cache:cache_idconnectionHandle 1);
    native cache_set_active(Cache:cache_idconnectionHandle 1);
    native cache_is_valid(Cache:cache_idconnectionHandle 1); 
    Если нужен пример - скажи
    Да, желательно бы с примером, ибо с кэшем в MySQL сталкивался очень мало

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Когда ты отправляешь запрос, который возвращает кэш, ты можешь его сохранить, использовав функцию cache_save, которая возвратит ID кэша так же, как возвращает mysql_query. То бишь
    PHP код:
    new Cache:result cache_save(mysql_connect_ID); // Кэш записан 
    Ты так же можешь записать ID кэша в глобальную переменную и потом обратиться к нему в любой момент времени. Но, соответственно, он будет забивать память сервера, посему следует обязательно удалять его после того, как он уже не нужен, если не хочешь получить краш сервера из-за переполнения памяти.

    Удаляется кэш при помощи функции cache_delete.
    PHP код:
    cache_delete(resultmysql_connect_ID); 
    Переключаться на нужный кэш можно при помощи функции cache_set_active.
    PHP код:
    cache_set_active(resultmysql_connect_ID); 
    Ну а cache_is_valid проверяет, существует ли кэш

    Вообще в комплекте с исходниками плагина MySQL имеется пример системы регистрации, в котором как раз и идёт работа с кэшем (по идее, регистрацию так и нужно писать). Советую подробнее изучить код этой системы.

    А твоя загрузка должна выглядеть как-то так:
    PHP код:
    publicsLoadBusiness() 

        new 
    rows
            
    time GetTickCount(); 
        
    cache_get_row_count(rows); 

        if(
    gBusinessCount >= MAX_BUSINESS_COUNT
            print(
    "[MySQL] Кол-во бизнесов в базе превышает предопределнное количество"); 
        if(!
    rows
            return print(
    "[MySQL] Бизнесы не были загружены!"); 

        new 
    Cache:result cache_save(mysql_connect_ID);

        
    gBusinessCount rows
        
    printf("rows - %d"rows); 
        for(new 
    irowsi++) 
        { 
            print(
    "==================="); 
            
    printf("i - %d"i); 
            
    cache_get_value_name_int(i"id"gBusiness[i][busiID]); 
            
    cache_get_value_name_int(i"ownerid"gBusiness[i][busiOwnerID]); 
            
    cache_get_value_name(i"name"gBusiness[i][busiName], 32); 
            
    cache_get_value_name_int(i"type"gBusiness[i][busiType]); 
            
    cache_get_value_name_int(i"bint"gBusiness[i][busiBint]); 
            
    cache_get_value_name_int(i"price"gBusiness[i][busiPrice]); 
            
    cache_get_value_name_int(i"status"gBusiness[i][busiStatus]); 
            
    cache_get_value_name_int(i"enterprice"gBusiness[i][busiEnterPrice]); 
            
    cache_get_value_name_int(i"bank"gBusiness[i][busiBank]); 
            
    cache_get_value_name_int(i"product"gBusiness[i][busiProduct]); 
            
    cache_get_value_name_int(i"mafia"gBusiness[i][busiMafia]); 
            
    cache_get_value_name_float(i"x"gBusiness[i][busiX]); 
            
    cache_get_value_name_float(i"y"gBusiness[i][busiY]); 
            
    cache_get_value_name_float(i"z"gBusiness[i][busiZ]); 
            
    cache_get_value_name_float(i"r"gBusiness[i][busiR]); 
             
            
    printf("id - %d, ownerid - %d, name - %s"gBusiness[i][busiID], gBusiness[i][busiOwnerID], gBusiness[i][busiName]); 

            
    printf("CreateDynamicPickup"); 
            
    CreateDynamicPickup(191321gBusiness[i][busiX],gBusiness[i][busiY],gBusiness[i][busiZ]); 
            
    printf("CreateBusinessText"); 
            
    gBusinessText[i] = CreateDynamic3DTextLabel("_"CWHITEgBusiness[i][busiX], gBusiness[i][busiY], gBusiness[i][busiZ]+1.020.0); 
            
    printf("UpdateBusinessText"); 
            
    UpdateBusinessText(i); 
            
    cache_set_active(resultmysql_connect_ID);
            print(
    "==================="); 
        } 
        
    cache_delete(resultmysql_connect_ID);
        
    printf("[MySQL]: Загружено %d бизнесов за %d м.с."gBusinessCountGetTickCount()-time); 
        return 
    true

    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. #9
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Когда ты отправляешь запрос, который возвращает кэш, ты можешь его сохранить, использовав функцию cache_save, которая возвратит ID кэша так же, как возвращает mysql_query. То бишь
    PHP код:
    new Cache:result cache_save(mysql_connect_ID); // Кэш записан 
    Ты так же можешь записать ID кэша в глобальную переменную и потом обратиться к нему в любой момент времени. Но, соответственно, он будет забивать память сервера, посему следует обязательно удалять его после того, как он уже не нужен, если не хочешь получить краш сервера из-за переполнения памяти.

    Удаляется кэш при помощи функции cache_delete.
    PHP код:
    cache_delete(resultmysql_connect_ID); 
    Переключаться на нужный кэш можно при помощи функции cache_set_active.
    PHP код:
    cache_set_active(resultmysql_connect_ID); 
    Ну а cache_is_valid проверяет, существует ли кэш

    Вообще в комплекте с исходниками плагина MySQL имеется пример системы регистрации, в котором как раз и идёт работа с кэшем (по идее, регистрацию так и нужно писать). Советую подробнее изучить код этой системы.

    А твоя загрузка должна выглядеть как-то так:
    PHP код:
    publicsLoadBusiness() 

        new 
    rows
            
    time GetTickCount(); 
        
    cache_get_row_count(rows); 

        if(
    gBusinessCount >= MAX_BUSINESS_COUNT
            print(
    "[MySQL] Кол-во бизнесов в базе превышает предопределнное количество"); 
        if(!
    rows
            return print(
    "[MySQL] Бизнесы не были загружены!"); 

        new 
    Cache:result cache_save(mysql_connect_ID);

        
    gBusinessCount rows
        
    printf("rows - %d"rows); 
        for(new 
    irowsi++) 
        { 
            print(
    "==================="); 
            
    printf("i - %d"i); 
            
    cache_get_value_name_int(i"id"gBusiness[i][busiID]); 
            
    cache_get_value_name_int(i"ownerid"gBusiness[i][busiOwnerID]); 
            
    cache_get_value_name(i"name"gBusiness[i][busiName], 32); 
            
    cache_get_value_name_int(i"type"gBusiness[i][busiType]); 
            
    cache_get_value_name_int(i"bint"gBusiness[i][busiBint]); 
            
    cache_get_value_name_int(i"price"gBusiness[i][busiPrice]); 
            
    cache_get_value_name_int(i"status"gBusiness[i][busiStatus]); 
            
    cache_get_value_name_int(i"enterprice"gBusiness[i][busiEnterPrice]); 
            
    cache_get_value_name_int(i"bank"gBusiness[i][busiBank]); 
            
    cache_get_value_name_int(i"product"gBusiness[i][busiProduct]); 
            
    cache_get_value_name_int(i"mafia"gBusiness[i][busiMafia]); 
            
    cache_get_value_name_float(i"x"gBusiness[i][busiX]); 
            
    cache_get_value_name_float(i"y"gBusiness[i][busiY]); 
            
    cache_get_value_name_float(i"z"gBusiness[i][busiZ]); 
            
    cache_get_value_name_float(i"r"gBusiness[i][busiR]); 
             
            
    printf("id - %d, ownerid - %d, name - %s"gBusiness[i][busiID], gBusiness[i][busiOwnerID], gBusiness[i][busiName]); 

            
    printf("CreateDynamicPickup"); 
            
    CreateDynamicPickup(191321gBusiness[i][busiX],gBusiness[i][busiY],gBusiness[i][busiZ]); 
            
    printf("CreateBusinessText"); 
            
    gBusinessText[i] = CreateDynamic3DTextLabel("_"CWHITEgBusiness[i][busiX], gBusiness[i][busiY], gBusiness[i][busiZ]+1.020.0); 
            
    printf("UpdateBusinessText"); 
            
    UpdateBusinessText(i); 
            
    cache_set_active(resultmysql_connect_ID);
            print(
    "==================="); 
        } 
        
    cache_delete(resultmysql_connect_ID);
        
    printf("[MySQL]: Загружено %d бизнесов за %d м.с."gBusinessCountGetTickCount()-time); 
        return 
    true

    Спасибо за код.

    Но у меня вопрос, зачем тут
    PHP код:
    new Cache:result cache_save(mysql_connect_ID); 
    передавать mysql_connect_ID? Компилятор ругнулся на 202 варнинг). Открыл a_mysql.inc, нашел cache_save, а там:
    PHP код:
    native Cache:cache_save(); 
    Или это было обязательным в более ранних версиях? (Сейчас использую R41-2)
    Последний раз редактировалось StevenH; 03.06.2017 в 22:59.

  10. #10
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Спасибо за исходники и код. Перепишу регистрацию на днях, с использование кэшев.

    Но у меня вопрос, зачем тут
    PHP код:
    new Cache:result cache_save(mysql_connect_ID); 
    передавать mysql_connect_ID? Компилятор ругнулся на 202 варнинг). Открыл a_mysql.inc, нашел cache_save, а там:
    PHP код:
    native Cache:cache_save(); 
    Или это было обязательным в более ранних версиях? (Сейчас использую R41-2)
    Ты хочешь все запросы на однопоточные сменить? Зачем?

 

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

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

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

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

Ваши права

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