PDA

Просмотр полной версии : [Вопрос] по MySQL, лидеркам



GodFather
07.06.2014, 14:25
Короче, такая проблема... Вот у меня есть сис-ма лидерок, фракции создаются из игры, но как сделать, чтобы в диалоге автоматически выводило столько лидерок, сколько и в БД, то есть например, у меня в базе 8 лидерок, надо чтобы и в диалоге (DIALOG_STYLE_LIST) было 8 строк? А если сразу через игру создам девятую, выдал девять строк.

GodFather
07.06.2014, 15:47
Вот команда:

CMD:makeleaders(playerid,params[])
{
if(GetPVarInt(playerid,"Login") != 1) return SendMes(playerid,COLOR_B,"Необходимо авторизоваться!");
if(PlayerInfo[playerid][pAdmin] < 0) return 0;
new str[256];
format(str,sizeof(str),"{FFFFFF}%s - %s\n%s - %s",LeaderInfo[1][lName],LeaderInfo[1][lLeader],LeaderInfo[2][lName],LeaderInfo[2][lLeader]);
ShowPlayerDialog(playerid, 150, DIALOG_STYLE_LIST, "{FFFFFF}Панель управления лидерами", str, "Продолжить", "Отмена");
return 1;
}

Но она выводит только две фракции указанные в коде, а мне надо чтобы она сама узнавала сколько фракций в базе и выводила их в диалог.

DeimoS
07.06.2014, 16:13
Посылаем запрос в бд, узнаём число строк и циклом заполняем

GodFather
07.06.2014, 16:16
Посылаем запрос в юд, узнаём число строк и циклом заполняем

Можно по подробнее про "циклом заполняем"? :to_take_umbrage:

underwoker
07.06.2014, 16:49
Можно по подробнее про "циклом заполняем"? :to_take_umbrage:
Почитайте в вики про цикл. Так же в интернете можно найти множество примеров.

BonBon
07.06.2014, 18:39
В общем так, можно наверно сделать лучше)
Сделал так, т.к. ни когда не связывался с РП модами :-)


MySQL R7

#define TABLE_FRAC "`fraction`"

new str[256],
rows,
fields,
buffer[24],
fname[20],
leader[24],
clickFraction[50][MAX_PLAYERS];

forward liderPanel(playerid);


CMD:makeleaders(playerid,params[])
{
if(GetPVarInt(playerid,"Login") != 1) return SendMes(playerid,COLOR_B,"Необходимо авторизоваться!");
if(PlayerInfo[playerid][pAdmin] < 0) return 0;
showLiderPanel(playerid);
return true;
}

showLiderPanel(playerid) {
str = "";
format(str, sizeof str, "SELECT * FROM "TABLE_FRAC"")
mysql_function_query(MYSQL, true, str, "liderPanel", "i", playerid);
return true;
}

public liderPanel(playerid) {
str = "";
cache_get_data(rows, fields);
if (!rows) ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{FFFFFF}Панель управления лидерами", "{ffffff}На сервере еще нет созданных фракций", "Выход", "");
for (new i = 0; i != rows; i++) {
cache_get_field_content(i, "ID", buffer); sscanf(buffer, "d", clickFraction[i][playerid]);

cache_get_field_content(i, "Name", fname);

cache_get_field_content(i, "Leader", leader);
format(str, sizeof str, "%s %s - %s\n", str, fname, leader);
}
ShowPlayerDialog(playerid, 150, DIALOG_STYLE_LIST, "{FFFFFF}Панель управления лидерами", str, "Продолжить", "Отмена");
return true;
}

GodFather
07.06.2014, 20:21
В общем так, можно наверно сделать лучше)
Сделал так, т.к. ни когда не связывался с РП модами :-)


MySQL R7

#define TABLE_FRAC "`fraction`"

new str[256],
rows,
fields,
buffer[24],
fname[20],
leader[24],
clickFraction[50][MAX_PLAYERS];

forward liderPanel(playerid);


CMD:makeleaders(playerid,params[])
{
if(GetPVarInt(playerid,"Login") != 1) return SendMes(playerid,COLOR_B,"Необходимо авторизоваться!");
if(PlayerInfo[playerid][pAdmin] < 0) return 0;
showLiderPanel(playerid);
return true;
}

showLiderPanel(playerid) {
str = "";
format(str, sizeof str, "SELECT * FROM "TABLE_FRAC"")
mysql_function_query(MYSQL, true, str, "liderPanel", "i", playerid);
return true;
}

public liderPanel(playerid) {
str = "";
cache_get_data(rows, fields);
if (!rows) ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{FFFFFF}Панель управления лидерами", "{ffffff}На сервере еще нет созданных фракций", "Выход", "");
for (new i = 0; i != rows; i++) {
cache_get_field_content(i, "ID", buffer); sscanf(buffer, "d", clickFraction[i][playerid]);

cache_get_field_content(i, "Name", fname);

cache_get_field_content(i, "Leader", leader);
format(str, sizeof str, "%s %s - %s\n", str, fname, leader);
}
ShowPlayerDialog(playerid, 150, DIALOG_STYLE_LIST, "{FFFFFF}Панель управления лидерами", str, "Продолжить", "Отмена");
return true;
}

Благодарю.