PDA

Просмотр полной версии : [Вопрос] по /offmembers



Gressie
11.05.2014, 02:02
Как сделать чтобы /offmembers показывало только членов оффлайн организации?
И не показывало самого лидера организации?


else if(strcmp(cmd, "/offmembers", true) == 0)
{
if(PlayerInfo[playerid][pLeader] < 1) return true;
SendClientMessage(playerid, 0x33AAFFFF, "Члены организации оффлайн:");
new string[64];
mysql_format(connects,string,sizeof(string),"SELECT * FROM `Accounts` WHERE pMember = '%d'",PlayerInfo[playerid][pLeader]);
mysql_function_query(connects, string, true, "OFFmembers", "d",playerid);
return true;
}

forward OFFmembers(playerid);
public OFFmembers(playerid)
{
new rows, fields, i, buf[60],name[MAX_PLAYER_NAME];
cache_get_data(rows, fields);
for(i = 0; i < rows; i++)
{
cache_get_field_content(i, "Name", buf), strmid(name, buf, 0, strlen(buf), MAX_PLAYER_NAME);
format(buf, sizeof(buf),"Не в игре %s", name);
SendClientMessage(playerid, -1, buf);
}
return true;
}

DeimoS
11.05.2014, 07:38
mysql_format(connects,string,sizeof(string),"SELECT * FROM `Accounts` WHERE pMember = '%d' AND `pRank` != '%d'",PlayerInfo[playerid][pLeader],PlayerInfo[playerid][pRank]);
Имя столбца подгоните под себя.
Со вторым сложнее. Лучше всего под онлайн выделить отдельный столбец и при входе в игру присваивать ему значение единицы, а при выходе - нуля. Тогда все изменения в коде будут только в запросе (добавить ещё одно условие и всё). Ну а иначе можно сделать такой костыль:

forward OFFmembers(playerid);
public OFFmembers(playerid)
{
new rows, fields, i, id, buf[60], name[MAX_PLAYER_NAME];
cache_get_data(rows, fields);
for(i = 0; i < rows; i++)
{
buf[0] = 0;
name[0] = 0;
cache_get_field_content(i, "Name", buf);
for(id = GetMaxPlayers(); id != -1; id--)
{
if(!IsPlayerConnected(id)) continue;
GetPlayerName(id, name, MAX_PLAYER_NAME);
if(!strcmp(name, buff, false, MAX_PLAYER_NAME)
{
id = INVALID_PLAYER_ID;
break;
}
}
if(id != INVALID_PLAYER_ID)
{
format(buf, sizeof(buf),"Не в игре %s", buf);
SendClientMessage(playerid, -1, buf);
}
}
return true;
}
Не проверял, но в теории работать должен

Gressie
11.05.2014, 15:45
mysql_format(connects,string,sizeof(string),"SELECT * FROM `Accounts` WHERE pMember = '%d' AND `pRank` != '%d'",PlayerInfo[playerid][pLeader],PlayerInfo[playerid][pRank]);
Имя столбца подгоните под себя.
Со вторым сложнее. Лучше всего под онлайн выделить отдельный столбец и при входе в игру присваивать ему значение единицы, а при выходе - нуля. Тогда все изменения в коде будут только в запросе (добавить ещё одно условие и всё). Ну а иначе можно сделать такой костыль:

forward OFFmembers(playerid);
public OFFmembers(playerid)
{
new rows, fields, i, id, buf[60], name[MAX_PLAYER_NAME];
cache_get_data(rows, fields);
for(i = 0; i < rows; i++)
{
buf[0] = 0;
name[0] = 0;
cache_get_field_content(i, "Name", buf);
for(id = GetMaxPlayers(); id != -1; id--)
{
if(!IsPlayerConnected(id)) continue;
GetPlayerName(id, name, MAX_PLAYER_NAME);
if(!strcmp(name, buff, false, MAX_PLAYER_NAME)
{
id = INVALID_PLAYER_ID;
break;
}
}
if(id != INVALID_PLAYER_ID)
{
format(buf, sizeof(buf),"Не в игре %s", buf);
SendClientMessage(playerid, -1, buf);
}
}
return true;
}
Не проверял, но в теории работать должен


C:\Users\Admin\Downloads\Íîâàÿ ïàïêà (8)\gamemodes\edit.pwn(35235) : error 017: undefined symbol "buff"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
Если заменить на

buf
то будет ошибка:

C:\Users\Admin\Downloads\Íîâàÿ ïàïêà (8)\gamemodes\edit.pwn(35236) : error 001: expected token: ")", but found "{"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
Строка
{

L0ndl3m
11.05.2014, 16:03
if(!strcmp(name, buff, false, MAX_PLAYER_NAME)

на


if(!strcmp(name, buff, false, MAX_PLAYER_NAME))