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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ошибка в коде? :)
    Говорю же, логируй значения переменных и смотри в какой момент времени и какие переменные начинают хранить неправильные значения. И от этого уже пляши
    Странная ерунда, перелистываем на вторую страницу, открываем информацию, и получаем ошибку... Возвращаемся на первую страницу, открываем информацию, всё нормально...

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

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

    Повторяю уже, наверное, в третий раз: вместо этих рассуждений о странностях просто залогируй свой код и изучи логи на предмет странностей. Делов на 10 минут, если заняться.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #23
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так а что странного? Ты либо показываешь вторую страницу, хотя данных у тебя есть только на первую/выбираешь пункт, которого не существует, либо у тебя ошибки в формулах/в присвоении значений переменным.

    Повторяю уже, наверное, в третий раз: вместо этих рассуждений о странностях просто залогируй свой код и изучи логи на предмет странностей. Делов на 10 минут, если заняться.
    Так и получается, что информация есть только на первую страницу, а на вторую получается нет
    И вот теперь снова логический вопрос, тут я так понимаю нужен костыль, снова запрос, и снова запись в кэш, правильно?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Так и получается, что информация есть только на первую страницу, а на вторую получается нет
    И вот теперь снова логический вопрос, тут я так понимаю нужен костыль, снова запрос, и снова запись в кэш, правильно?
    Эмм, что? Если у тебя в бд есть данные и на вторую страницу, то ты выгружаешь их СРАЗУ в кэш и уже дальше работаешь с кэшем. Никаких повторных запросов не потребуется. В этом и смысл такого метода.

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

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

    Steve Pavlina

  5. #25
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, что? Если у тебя в бд есть данные и на вторую страницу, то ты выгружаешь их СРАЗУ в кэш и уже дальше работаешь с кэшем. Никаких повторных запросов не потребуется. В этом и смысл такого метода.

    Я же тебе выше давал практически готовый код на pVar. Там остаётся только внутренности диалога дописать и всё.
    Яя кароче понял, проблема в самой формуле, т.е, если у нас открыта первая страница всё нормально, перелиснул страницу на другую, сделал формулу в обратном направлении, как-бы и открывает информацию, но, неправильную)

    UPD: не могу я вообщем придумать универсальную формулу, ничего не получается
    Последний раз редактировалось Сергей; 01.09.2019 в 01:15.

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

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

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

    Steve Pavlina

  7. #27
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Покажи весь код, что у тебя получился сейчас.
    Ничего не изменилось, ибо работал по разным направлениям, искал баг возможно с переменными, и в итоге пришёл был к тому, что формула работает только в 1-дно стороннем порядке, новую я сделать увы не могу...

    PHP код:
        new names_player[MAX_PLAYER_NAME];
        
    strmid(names_player,"Test_Names",0,strlen("Test_Names"),MAX_PLAYER_NAME);
        new 
    dates3[12];
        
    format(dates3,sizeof(dates3),"28/08/2019");
        
        new 
    string[78 MAX_PLAYER_NAME 50];
        
    format(stringsizeof(string), "SELECT * FROM `prizz` WHERE BINARY `nickname`='%s' AND `dates`='%s' ORDER BY `mysql_id` DESC;",names_player,dates3); 
        
    mysql_function_query(m_connectstringtrue"OnLoadIRSCallBack""d",playerid);

    forward OnLoadIRSCallBack(playerid); 
    public 
    OnLoadIRSCallBack(playerid)// Пришёл ответ от запроса 
    {
        new 
    rows cache_get_row_count(m_connect);
        if(
    rows == 0) return SCM(playerid,-1,"ничего нет");
        if(
    GetPVarInt(playerid,"tr_ID_Player") == 1)
        {
            
    DeletePVar(playerid,"_NickName");
            
    DeletePVar(playerid,"tr_ID_Player");
            
    DeletePVar(playerid,"UpdateIDPlayer");
            
    cache_delete(Cache:CacheID_List[playerid],m_connect);
            
    PageCount_List[playerid] = _:CacheID_List[playerid] = -1;
        }
        
    CacheID_List[playerid] = cache_save(m_connect);
        
    PageID_List[playerid] = 0;
        
    PageCount_List[playerid] = rows;
        
    SetPVarInt(playerid,"tr_ID_Player",1);
        
    Show_PlayerListID(playerid);
        return 
    1;
    }
    stock Show_PlayerListID(playerid
    {
        if(
    CacheID_List[playerid] == Cache:-1) return SCM(playerid,-1,"Нет активного кэша с информацией"); 
        
    cache_set_active(CacheID_List[playerid],m_connect);
        static 
    dialog_string[750];
        
    dialog_string[0] = EOS;
        
        new 
    load_p_act[30],rows,i,load_name[MAX_PLAYER_NAME],load_mysql_dd
        
    PageID_List[playerid]*20
        
    rows i+20;
        
        if(
    rows PageCount_List[playerid]) rows PageCount_List[playerid]; 
        for(; 
    rowsi++)  
        {
            
    load_mysql_dd cache_get_field_content_int(i"mysql_id",Mysql_Log);
            
    cache_get_field_content(i"nickname"load_name,Mysql_Log,MAX_PLAYER_NAME);
            
    cache_get_field_content(i"p_act"load_p_act,Mysql_Log,30);
            
    format(dialog_stringsizeof(dialog_string), "%s[%d] | %s\n"dialog_string,load_mysql_ddload_p_act);
        }
        if(
    PageCount_List[playerid] > MAX_ROWS_LIST && rows != PageCount_List[playerid])   strcat(dialog_string"Далее \n"); 
        if(
    PageID_List[playerid] != 0strcat(dialog_string"Назад"); 
        
        
        new 
    str[30];
        
    format(str,sizeof(str),"{FFFFFF}%s",load_name);
        
    SPD(playerid100500DIALOG_STYLE_LISTstrdialog_string"Выбор""Отмена");  
        
    SetPVarString(playerid,"_NickName",load_name);
        return 
    1
    }
        case 
    100500:
            {
                if(
    response)
                {
                    if(!
    strcmp_with_isnull(inputtext"Далее >>>"))
                    {
                        
    SetPVarInt(playerid,"UpdateIDPlayer",2);
                        
    PageID_List[playerid] ++;
                        
    Show_PlayerListID(playerid);
                        return 
    1;
                    }
                    else if(!
    strcmp_with_isnull(inputtext"<<< Назад"))
                    {
                        
    SetPVarInt(playerid,"UpdateIDPlayer",1);
                        if(
    PageID_List[playerid] != 0)PageID_List[playerid] --;
                        else if(
    PageID_List[playerid] == 0PageID_List[playerid] = 0;
                        
    Show_PlayerListID(playerid);
                        return 
    1;
                    }
                    else 
    Show_InPlayers(playerid,listitem);
                }
            }
            
            
    stock Show_InPlayers(playerid,listitem)
    {
        new 
    count[3] = 0;
        
    count[0] = PageID_List[playerid];
        
    count[1] = PageCount_List[playerid];
        
        new 
    idx;
        if(
    GetPVarInt(playerid,"UpdateIDPlayer") == 2idx count[0]*count[1]+listitem;
        else if(
    GetPVarInt(playerid,"UpdateIDPlayer") == 1)  idx idx count[0]*count[1]-listitem;
        
        
    printf("idx: %d",idx);
        new 
    load_act[30],load_result_1[30],load_result_2[30],load_Dates[30];
        new 
    load_name[MAX_PLAYER_NAME];
        
        
    cache_set_active(CacheID_List[playerid],m_connect);
        
    cache_get_field_content(idx,"p_act",load_act,m_connect,30);
        
    cache_get_field_content(idx,"result_1",load_result_1,m_connect,30);
        
    cache_get_field_content(idx,"result_2",load_result_2,m_connect,30);
        
    cache_get_field_content(idx,"p_date",load_Dates,m_connect,30);
        
        
    //=========//
        
    GetPVarString(playerid,"_NickName",load_name,MAX_PLAYER_NAME);
        new 
    str_r[400];
        
    format(str_r,sizeof(str_r),"%s\n%s\n%s\n%s",load_name,load_act,load_result_1,load_result_2,load_Dates);
        
    SPD(playerid100501DIALOG_STYLE_MSGBOX"Информация"str_r"Ок","Назад");
        return 
    1;

    UPD: Обновил подсчёты

    PHP код:
    new idx[2];
        if(
    GetPVarInt(playerid,"UpdateLogPlayer") == 1idx[1] = count[0]*count[1]+listitem;
        else if(
    GetPVarInt(playerid,"UpdateLogPlayer") == 2idx[0] = count[1]+count[0],idx[1] = idx[0]/(count[0]+count[0])+listitem-count[0];
        else if(
    GetPVarInt(playerid,"UpdateLogPlayer") == 3idx[1] = count[1]+listitem-count[0]; 
    Для первой и второй страницы работает отлично, перехожу на 3-тью, и снова подсчёты нужно менять)
    Как-то не очень хочется для каждой страницы делать нужные именно этой странице подсчёты.
    Последний раз редактировалось Сергей; 01.09.2019 в 21:31.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, что у тебя тут за каша?
    1. new idx;
    2. if(GetPVarInt(playerid,"UpdateIDPlayer") == 2) idx = count[0]*count[1]+listitem;
    3. else if(GetPVarInt(playerid,"UpdateIDPlayer") == 1) idx = idx = count[0]*count[1]-listitem;

    Зачем тут разные формулы? Формула всегда будет одна: сначала количество страниц умножаешь на максимальное число строк на странице, тем самым узнавая какой первый ID строки будет показываться на этой странице, а потом к этому значению прибавляешь значение listitem, получая уже конкретную строку, которую выбрал игрок.

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

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

    Steve Pavlina

  9. #29
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, что у тебя тут за каша?
    1. new idx;
    2. if(GetPVarInt(playerid,"UpdateIDPlayer") == 2) idx = count[0]*count[1]+listitem;
    3. else if(GetPVarInt(playerid,"UpdateIDPlayer") == 1) idx = idx = count[0]*count[1]-listitem;

    Зачем тут разные формулы? Формула всегда будет одна: сначала количество страниц умножаешь на максимальное число строк на странице, тем самым узнавая какой первый ID строки будет показываться на этой странице, а потом к этому значению прибавляешь значение listitem, получая уже конкретную строку, которую выбрал игрок.

    Вообще код крайне запутанным у тебя вышел. Я выше показывал как всё гораздо проще написать.
    Дак не получается ни формулой овладеть в правильном состоянии чтобы она находилась, ни вашим примером
    Как из рук всё выпало....

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    1. const PRIZE_MAX_ROW_IN_PAGE = 20;
    2. new pVarName__Prize_CacheID[] = "pVarName__Prize_CacheID";
    3. new pVarName__Prize_Page[] = "pVarName__Prize_Page";
    4. new pVarName__Prize_RowIDX[] = "pVarName__Prize_RowIDX";
    5.  
    6. CMD:test(playerid)
    7. {
    8. ClearPrizeMySQLInfo(playerid);// Удаляем кэш на случай, если игрок уже работал с кэшем, но открытый диалог закрылся другим диалогом и старый кэш не удалился.
    9.  
    10. new names_player[MAX_PLAYER_NAME];
    11. strmid(names_player,"Test_Names",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    12. new dates3[12];
    13. format(dates3,sizeof(dates3),"28/08/2019");
    14.  
    15. new query_string[80 + MAX_PLAYER_NAME + sizeof(dates3) + 1];
    16. format(query_string, sizeof(query_string), "SELECT * FROM prizz WHERE BINARY nickname='%s' AND dates='%s' ORDER BY mysql_id DESC",
    17. names_player,dates3);
    18. mysql_tquery(Mysql_Log, query_string, "@MySQL__ShowPrizeList", "i", playerid);
    19. return 1;
    20. }
    21.  
    22.  
    23. @MySQL__ShowPrizeList(playerid);
    24. @MySQL__ShowPrizeList(playerid)
    25. {
    26. new row_count;
    27. if(!GetPVarType(playerid, pVarName__Prize_CacheID))
    28. {
    29. row_count = cache_get_row_count();
    30. if(!row_count)
    31. {
    32. SenPrizelientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Таблица пуста.");
    33. return 1;
    34. }
    35. SetPVarInt(playerid, pVarName__Prize_CacheID, _:cache_save());
    36. }
    37. else
    38. {
    39. cache_set_active(Cache:0);
    40. cache_set_active(Cache:GetPVarInt(playerid, pVarName__Prize_CacheID));
    41. row_count = cache_get_row_count();
    42. }
    43.  
    44. new page = GetPVarInt(playerid, pVarName__Prize_Page);
    45. new i = page*PRIZE_MAX_ROW_IN_PAGE;
    46.  
    47. static dialog_string[750];
    48. dialog_string[0] = EOS;
    49.  
    50. new load_p_act[30],
    51. load_name[MAX_PLAYER_NAME],
    52. load_mysql_dd;
    53.  
    54. for(new j; i < row_count; i++, j++)
    55. {
    56. if(j == PRIZE_MAX_ROW_IN_PAGE)
    57. break;
    58.  
    59. load_mysql_dd = cache_get_field_content_int(i, "mysql_id", Mysql_Log);
    60. cache_get_field_content(i, "nickname", load_name, Mysql_Log, MAX_PLAYER_NAME);
    61. cache_get_field_content(i, "p_act", load_p_act, Mysql_Log);
    62. format(dialog_string, sizeof(dialog_string), "%s[%d] | %s\n", dialog_string, load_mysql_dd, load_p_act);
    63. }
    64.  
    65. if(row_count > (page*PRIZE_MAX_ROW_IN_PAGE)+PRIZE_MAX_ROW_IN_PAGE)
    66. {
    67. strcat(dialog_string, "Далее\n");
    68. if(page > 0)
    69. {
    70. strcat(dialog_string, "Назад\n");
    71. }
    72. }
    73. else if(page > 0)
    74. {
    75. strcat(dialog_string, "Назад\n");
    76. }
    77.  
    78.  
    79. new dialog_header[8+MAX_PLAYER_NAME+1];
    80. format(dialog_header, sizeof(dialog_header), "{FFFFFF}%s", load_name);
    81. SPD(playerid, 100500, DIALOG_STYLE_LIST, dialog_header, dialog_string, "Выбор", "Отмена");
    82. return 1;
    83. }
    84.  
    85.  
    86. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    87. {
    88. if(dialogid == 100500)
    89. {
    90. if(!response)
    91. {
    92. ClearPrizeMySQLInfo(playerid);
    93. return 1;
    94. }
    95.  
    96. if(!strcmp(inputtext, "Далее"))
    97. {
    98. SetPVarInt(playerid, pVarName__Prize_Page, GetPVarInt(playerid, pVarName__Prize_Page)+1);
    99. @MySQL__ShowPrizeList(playerid);
    100. }
    101. else if(!strcmp(inputtext, "Назад"))
    102. {
    103. SetPVarInt(playerid, pVarName__Prize_Page, GetPVarInt(playerid, pVarName__Prize_Page)-1);
    104. @MySQL__ShowPrizeList(playerid);
    105. }
    106. else
    107. {
    108. cache_set_active(Cache:0);
    109. cache_set_active(Cache:GetPVarInt(playerid, pVarName__Prize_CacheID));
    110. new row_count = cache_get_row_count();
    111.  
    112. new page = GetPVarInt(playerid, pVarName__Prize_Page);
    113. new idx = PRIZE_MAX_ROW_IN_PAGE*page+listitem;
    114. SetPVarInt(playerid, pVarName__Prize_RowIDX, idx);
    115.  
    116. new load_act[30],
    117. load_result_1[30],
    118. load_result_2[30],
    119. load_Dates[30],
    120. load_name[MAX_PLAYER_NAME];
    121.  
    122. cache_get_field_content(idx, "nickname", load_name, m_connect);
    123. cache_get_field_content(idx, "p_act", load_act, m_connect);
    124. cache_get_field_content(idx, "result_1", load_result_1, m_connect);
    125. cache_get_field_content(idx, "result_2", load_result_2, m_connect);
    126. cache_get_field_content(idx, "p_date", load_Dates, m_connect);
    127.  
    128. //=========//
    129. new str_r[400];
    130. format(str_r, sizeof(str_r),"%s\n%s\n%s\n%s", load_name, load_act, load_result_1, load_result_2, load_Dates);
    131. SPD(playerid, 100501, DIALOG_STYLE_MSGBOX, "Информация", str_r, "Ок","Назад");
    132. }
    133. return 1;
    134. }
    135. else if(dialogid == 100501)
    136. {
    137. if(!response)
    138. {
    139. @MySQL__ShowPrizeList(playerid);
    140. DeletePVar(playerid, pVarName__Prize_RowIDX);
    141. return 1;
    142. }
    143. cache_set_active(Cache:0);
    144. cache_set_active(Cache:GetPVarInt(playerid, pVarName__Prize_CacheID));
    145. new idx = GetPVarInt(playerid, pVarName__Prize_RowIDX);
    146.  
    147. new string[144+1];
    148. cache_get_field_content(idx, "nickname", string, m_connect, MAX_PLAYER_NAME);
    149. format(string, sizeof(string), "Была показана информация игрока %s. Кэш удалён!", string);
    150. SendClientMessage(playerid, -1, string);
    151.  
    152. ClearPrizeMySQLInfo(playerid);
    153. return 1;
    154. }
    155. return 1;
    156. }
    157.  
    158. public OnPlayerDisconnect(playerid, reason)
    159. {
    160. ClearPrizeMySQLInfo(playerid);
    161. return 1;
    162. }
    163.  
    164. stock ClearPrizeMySQLInfo(playerid)
    165. {
    166. if(GetPVarType(playerid, pVarName__Prize_CacheID))
    167. {
    168. cache_delete(Cache:GetPVarInt(playerid, pVarName__Prize_CacheID));
    169. DeletePVar(playerid, pVarName__Prize_CacheID);
    170. DeletePVar(playerid, pVarName__Prize_Page);
    171. DeletePVar(playerid, pVarName__Prize_RowIDX);
    172. }
    173. return 1;
    174. }


    На ошибки не проверял, но общий принцип работы с кэшем должен быть таким. Никаких формул для каждой отдельной страницы не нужно.
    Последний раз редактировалось DeimoS; 03.09.2019 в 13:14.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 
Страница 3 из 3 ПерваяПервая 1 2 3

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

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

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

Ваши права

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