Так а что странного? Ты либо показываешь вторую страницу, хотя данных у тебя есть только на первую/выбираешь пункт, которого не существует, либо у тебя ошибки в формулах/в присвоении значений переменным.
Повторяю уже, наверное, в третий раз: вместо этих рассуждений о странностях просто залогируй свой код и изучи логи на предмет странностей. Делов на 10 минут, если заняться.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Эмм, что? Если у тебя в бд есть данные и на вторую страницу, то ты выгружаешь их СРАЗУ в кэш и уже дальше работаешь с кэшем. Никаких повторных запросов не потребуется. В этом и смысл такого метода.
Я же тебе выше давал практически готовый код на pVar. Там остаётся только внутренности диалога дописать и всё.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Яя кароче понял, проблема в самой формуле, т.е, если у нас открыта первая страница всё нормально, перелиснул страницу на другую, сделал формулу в обратном направлении, как-бы и открывает информацию, но, неправильную)
UPD: не могу я вообщем придумать универсальную формулу, ничего не получается
Последний раз редактировалось Сергей; 01.09.2019 в 01:15.
Покажи весь код, что у тебя получился сейчас.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Ничего не изменилось, ибо работал по разным направлениям, искал баг возможно с переменными, и в итоге пришёл был к тому, что формула работает только в 1-дно стороннем порядке, новую я сделать увы не могу...
UPD: Обновил подсчёты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(string, sizeof(string), "SELECT * FROM `prizz` WHERE BINARY `nickname`='%s' AND `dates`='%s' ORDER BY `mysql_id` DESC;",names_player,dates3);
mysql_function_query(m_connect, string, true, "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;
i = PageID_List[playerid]*20;
rows = i+20;
if(rows > PageCount_List[playerid]) rows = PageCount_List[playerid];
for(; i < rows; i++)
{
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_string, sizeof(dialog_string), "%s[%d] | %s\n", dialog_string,load_mysql_dd, load_p_act);
}
if(PageCount_List[playerid] > MAX_ROWS_LIST && rows != PageCount_List[playerid]) strcat(dialog_string, "Далее \n");
if(PageID_List[playerid] != 0) strcat(dialog_string, "Назад");
new str[30];
format(str,sizeof(str),"{FFFFFF}%s",load_name);
SPD(playerid, 100500, DIALOG_STYLE_LIST, str, dialog_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] == 0) PageID_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") == 2) idx = 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(playerid, 100501, DIALOG_STYLE_MSGBOX, "Информация", str_r, "Ок","Назад");
return 1;
}
Для первой и второй страницы работает отлично, перехожу на 3-тью, и снова подсчёты нужно менять)PHP код:
new idx[2];
if(GetPVarInt(playerid,"UpdateLogPlayer") == 1) idx[1] = count[0]*count[1]+listitem;
else if(GetPVarInt(playerid,"UpdateLogPlayer") == 2) idx[0] = count[1]+count[0],idx[1] = idx[0]/(count[0]+count[0])+listitem-count[0];
else if(GetPVarInt(playerid,"UpdateLogPlayer") == 3) idx[1] = count[1]+listitem-count[0];
Как-то не очень хочется для каждой страницы делать нужные именно этой странице подсчёты.
Последний раз редактировалось Сергей; 01.09.2019 в 21:31.
Эмм, что у тебя тут за каша?
new idx;
Зачем тут разные формулы? Формула всегда будет одна: сначала количество страниц умножаешь на максимальное число строк на странице, тем самым узнавая какой первый ID строки будет показываться на этой странице, а потом к этому значению прибавляешь значение listitem, получая уже конкретную строку, которую выбрал игрок.
Вообще код крайне запутанным у тебя вышел. Я выше показывал как всё гораздо проще написать.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
const PRIZE_MAX_ROW_IN_PAGE = 20; new pVarName__Prize_CacheID[] = "pVarName__Prize_CacheID"; new pVarName__Prize_Page[] = "pVarName__Prize_Page"; new pVarName__Prize_RowIDX[] = "pVarName__Prize_RowIDX"; CMD:test(playerid) { ClearPrizeMySQLInfo(playerid);// Удаляем кэш на случай, если игрок уже работал с кэшем, но открытый диалог закрылся другим диалогом и старый кэш не удалился. new names_player[MAX_PLAYER_NAME]; new dates3[12]; new query_string[80 + MAX_PLAYER_NAME + sizeof(dates3) + 1]; format(query_string, sizeof(query_string), "SELECT * FROM prizz WHERE BINARY nickname='%s' AND dates='%s' ORDER BY mysql_id DESC", names_player,dates3); mysql_tquery(Mysql_Log, query_string, "@MySQL__ShowPrizeList", "i", playerid); return 1; } @MySQL__ShowPrizeList(playerid); @MySQL__ShowPrizeList(playerid) { new row_count; { row_count = cache_get_row_count(); if(!row_count) { SenPrizelientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Таблица пуста."); return 1; } } else { cache_set_active(Cache:0); row_count = cache_get_row_count(); } new i = page*PRIZE_MAX_ROW_IN_PAGE; static dialog_string[750]; dialog_string[0] = EOS; new load_p_act[30], load_name[MAX_PLAYER_NAME], load_mysql_dd; for(new j; i < row_count; i++, j++) { if(j == PRIZE_MAX_ROW_IN_PAGE) break; 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); format(dialog_string, sizeof(dialog_string), "%s[%d] | %s\n", dialog_string, load_mysql_dd, load_p_act); } if(row_count > (page*PRIZE_MAX_ROW_IN_PAGE)+PRIZE_MAX_ROW_IN_PAGE) { if(page > 0) { } } else if(page > 0) { } new dialog_header[8+MAX_PLAYER_NAME+1]; SPD(playerid, 100500, DIALOG_STYLE_LIST, dialog_header, dialog_string, "Выбор", "Отмена"); return 1; } { if(dialogid == 100500) { if(!response) { ClearPrizeMySQLInfo(playerid); return 1; } { @MySQL__ShowPrizeList(playerid); } { @MySQL__ShowPrizeList(playerid); } else { cache_set_active(Cache:0); new row_count = cache_get_row_count(); new idx = PRIZE_MAX_ROW_IN_PAGE*page+listitem; new load_act[30], load_result_1[30], load_result_2[30], load_Dates[30], load_name[MAX_PLAYER_NAME]; cache_get_field_content(idx, "nickname", load_name, m_connect); cache_get_field_content(idx, "p_act", load_act, m_connect); cache_get_field_content(idx, "result_1", load_result_1, m_connect); cache_get_field_content(idx, "result_2", load_result_2, m_connect); cache_get_field_content(idx, "p_date", load_Dates, m_connect); //=========// 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(playerid, 100501, DIALOG_STYLE_MSGBOX, "Информация", str_r, "Ок","Назад"); } return 1; } else if(dialogid == 100501) { if(!response) { @MySQL__ShowPrizeList(playerid); return 1; } cache_set_active(Cache:0); new string[144+1]; cache_get_field_content(idx, "nickname", string, m_connect, MAX_PLAYER_NAME); ClearPrizeMySQLInfo(playerid); return 1; } return 1; } { ClearPrizeMySQLInfo(playerid); return 1; } stock ClearPrizeMySQLInfo(playerid) { { } return 1; }
На ошибки не проверял, но общий принцип работы с кэшем должен быть таким. Никаких формул для каждой отдельной страницы не нужно.
Последний раз редактировалось DeimoS; 03.09.2019 в 13:14.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)